你的起点:从你的数据到你的魔法

我的理解

这一课完整演示”个人笔记历史学家”的构建流程,把前两课的方法论落到具体步骤。产品定义阶段确立北极星目标、MVP 与含幻觉率(<10%)和”大海捞针”测试(100% 通过)的 OKR;构建阶段委派 AI 完成技术选型(LlamaIndex/LangChain/FAISS)、写索引器脚本、在 FastAPI 中新增 query_my_notes 工具并更新系统提示词使其成为 Agent 的研究助理;评估迭代阶段对照评估集分析失败根因(检索 vs 生成),用洞察推动分块策略迭代。核心是把测试从”感觉对了”变为科学且高效的过程。

相关链接


原文

Lesson 32 of 46 你的起点:从你的数据到你的魔法 / Your Starting Point: From Your Data to Your Magic

现在,是时候将这套工作流付诸实践了。我们将完整地走一遍构建”个人笔记历史学家”的示例——这是一个能够索引你本地 Markdown 笔记文件夹,并对其进行智能查询的系统。

阶段一:产品定义简报

首先,我们打开笔记本,明确我们的”北极星”目标。

核心问题:我的电脑上散落着数百份 Markdown 笔记。它们蕴含着宝贵的洞见,却几乎无法被有效地检索和关联。

MVP(最小可行产品):一个能够索引单个本地 Markdown 文件夹的系统,让我可以通过一个网页界面,借助具备代理(agentic)特性的检索流程,对这些笔记提出复杂的问题。

OKR(采用指标驱动的方法):

目标(Objective):确保答案的准确性,以及对原始材料的忠实度。

关键结果 1(幻觉率):在 10 个问题组成的测试集上,AI 编造原始文档中不存在的事实的比例应低于 10%。

关键结果 2(检索精度):我将设计 3 个”大海捞针”(Needle in a Haystack)测试用例。这是任何检索系统都必须经受的经典且关键的压力测试:你刻意将一条独特、具体的事实(“针”)埋藏在一份篇幅大得多、且与之无关的文档(“干草堆”)之中,然后提出一个只有找到那条特定事实才能回答的问题。这是对检索精度的终极考验。我们的系统必须 100% 通过这项测试。

这为何重要:哪怕只是一个小而精的评估集,也能让测试从模糊的”感觉对了”变为科学且高效的过程。这是行业的专业标准。

阶段二:在简报指引下进行构建

简报完成后,我们就可以指挥 AI 伙伴来构建这个 MVP 了。

研究与技术决策(委派给 AI): 我需要在 Python 中为本地 Markdown 文件构建一条 RAG 流水线。我听说过 LlamaIndex、LangChain 和 FAISS 等库。请针对一个简单的、以本地优先为目标的 MVP,比较这两种方案的优劣,并推荐更简洁的路径。

实现(委派给 AI):

提示 1(索引器): 编写一个独立的 Python 脚本,作为我的索引器(Indexer)。它需要:

递归遍历指定的本地文件夹,找出所有 .md 文件。

加载每个文件,并将其切分为更小的文本块(chunk)。

调用我们 Student Portal 提供的 /embeddings 端点(使用 OpenAI SDK,并配置正确的 base URL 和你的 API Key),将这些文本块转换为向量嵌入。

使用 faiss-cpu 库基于这些嵌入构建一个本地向量索引,并将其保存为名为 my_notes.index 的文件。

提示 2(具备代理能力的检索器): 现在,对我在阶段 A 中构建的 FastAPI 应用进行修改。

新增一个名为 query_my_notes 的工具。该工具的函数应加载 my_notes.index 文件,并基于查询字符串执行向量检索。

更新代理的主系统提示词,指示它将 query_my_notes 工具视为我个人知识库的研究助理。当遇到可能由我的笔记回答的问题时,代理应自主构造一个或多个有针对性的搜索查询来调用该工具,并可在必要时根据前几轮的检索结果调整查询。

阶段三:评估与迭代(绩效复盘)

现在,针对你在 OKR 中创建的评估数据集,系统性地测试你的 MVP。记录所有失败案例。是否漏掉了某个”大海捞针”测试?AI 是否凭空编造了答案?

分析根本原因。如果”针”没有被找到,问题很可能出在检索环节(索引策略、分块大小);如果 AI 出现了幻觉,问题则更可能出在生成环节(代理的系统提示词)。

用这些洞见来推动迭代。把新任务委派给你的 AI:“检索在简短而具体的事实上失败了。让我们尝试用更小的分块大小并加入一些重叠,重新进行索引。请相应地修改索引器脚本。”