同时学习大模型、RAG、MCP、Agent、向量数据库和多个框架,很容易只记住名词。更有效的方法是围绕同一个“小型公司制度助手”逐步增加能力,让每个概念都对应一次真实操作。
实验目标
准备三份 Markdown 文档:
1 | docs/ |
示例内容分别包含:
1 | 一线城市住宿每天最多报销 800 元。 |
三个阶段始终使用这组资料,避免业务场景变化干扰技术理解。
第一阶段:体验现成 MCP
目标不是开发 Server,而是观察 AI Host 如何发现和调用外部工具。
选择一个可信、只读、容易验证的 MCP Server,例如官方文档或测试文件服务。让 AI 完成:
1 | 列出可用工具 |
验收标准:
- 能说清 Host、Client、Server 分别在哪里。
- 知道业务工具名称由 Server 定义,不是协议统一规定。
- 能从工具调用记录看出输入、输出和错误。
- 明白连接 Server 不等于信任 Server,也不等于自动拥有 RAG。
这一阶段只学一句话:
1 | MCP 让 AI 应用获得外部系统提供的能力。 |
第二阶段:体验托管 RAG
把三份文档放入一个托管检索服务,完成:
1 | 上传文件 |
可以使用 OpenAI File Search 一类托管工具,也可以选择其他提供完整文档处理链路的服务。此时不要急着引入多个框架或数据库,重点观察数据流。
验收标准:
- 问文档中存在的问题,答案和来源正确。
- 问文档中不存在的问题,系统不编造答案。
- 修改一份文档并重新索引,答案随版本变化。
- 能区分原始 File、检索容器、Chunk、Embedding 和最终答案。
这一阶段只学一句话:
1 | RAG 先检索资料,再把证据交给模型回答。 |
第三阶段:自己控制检索链路
当托管实验稳定后,再拆开 RAG:
1 | scripts/ |
按顺序实现:
- 读取三份文档并保留文件名和标题。
- 按段落切片并生成稳定 Chunk ID。
- 使用一个 Embedding 模型生成向量。
- 将文本、向量和元数据写入现成存储。
- 对问题执行向量检索或混合检索。
- 把 Top K 证据交给生成模型。
- 输出答案和来源。
- 用固定问题集运行回归评测。
不要自己实现向量索引算法。学习重点是组件边界、数据结构、权限、更新和评测。
验收标准:
- 能打印每次命中的 Chunk 和分数。
- 能修改切片大小并比较召回变化。
- 能删除文档且索引不再返回旧内容。
- 能按用户或租户元数据过滤。
- 能记录一次查询从检索到生成的完整 Trace。
第四阶段:把 RAG 包装成 MCP Tool
当已经有 searchKnowledge(query, user) 这类稳定业务函数后,再接入 MCP SDK:
1 | AI Host |
最小工具:
1 | search_knowledge_base(query, limit) |
需要查看完整原文时再增加:
1 | get_document(document_id) |
验收标准:
- AI Host 能发现工具并正确生成参数。
- MCP Server 使用认证身份做权限过滤。
- 返回结果包含文本、文档 ID、章节和来源。
- 超时、空结果、无权限和检索失败都有明确错误。
- 写操作与只读检索分开,必要时要求人工确认。
每个阶段不要做什么
| 阶段 | 暂时不要做 |
|---|---|
| 现成 MCP | 不要立即开发自己的协议实现 |
| 托管 RAG | 不要同时更换多个模型和数据库 |
| 自建检索 | 不要先做复杂前端和多 Agent |
| MCP 包装 | 不要把业务权限交给模型判断 |
只有三份文档时,直接把内容放进 Context 也能回答。这个实验使用小数据不是为了证明“必须上 RAG”,而是为了低成本观察完整流程。正式项目是否需要 RAG,要根据文档规模、更新频率、权限和查询量决定。
建议记录的实验表
| 实验 | 切片方式 | 检索方式 | Top K | 命中正确证据 | 答案正确 | 引用正确 |
|---|---|---|---|---|---|---|
| A | 按段落 | 向量 | 3 | 是/否 | 是/否 | 是/否 |
| B | 固定窗口 | 混合 | 5 | 是/否 | 是/否 | 是/否 |
通过对比结果理解参数,比只背“Chunk 越小越精确”更可靠,因为最佳策略取决于文档结构和问题类型。
最终学习成果
1 | 阶段一:AI Host → 现成 MCP → 外部工具 |
完成这四步后,再去学习 RAGFlow、LlamaIndex、LangChain、Haystack 或更多向量数据库,框架中的每个模块才会有清晰位置。