指南●●●6 分钟 · +60 XP
自己动手搭建一个简单的 RAG 系统
分块(Chunking)、嵌入(Embeddings)、向量搜索、把上下文放进提示词——这是每个 RAG 系统背后的四个步骤,另外还会讲什么时候用一个够长的上下文窗口就足够了。
四个步骤
检索增强生成(RAG,Retrieval-Augmented Generation)会在每次作答之前,从你自己的知识库中取出相关的文本片段,并把它们连同提示词一起交给模型。整个流程分四步:
- 分块(Chunking):把知识库拆成小的文本片段,通常每段几百个 token。
- 嵌入(Embeddings):用一个嵌入模型把每个分块转换成一个能捕捉其含义的向量。
- 向量搜索:针对一次查询,找出向量与查询最相似的那些分块。
- 把上下文放进提示词:在模型作答之前,把找到的分块插入提示词中。
RAG 对比长上下文窗口
如果你的整个知识库能轻松放进上下文窗口,RAG 往往就是多余的工作量——直接把所有内容塞进提示词更简单,也更不容易出错。当知识库比上下文窗口大、经常变化,或者每次查询只有一小部分、且不断变化的内容相关时,RAG 才真正划算。
常见的问题来源
分块太大:不重要的内容会挤占相关内容的位置。分块太小:上下文语境会丢失。单纯的向量搜索容易漏掉精确的关键词匹配(专业术语、代号)——结合传统的关键词搜索可以弥补这一点。
示例
检索之后的提示词模板:"请只根据下面的片段回答以下问题。如果片段中没有答案,请直接说明。片段:[分块 1] [分块 2] [分块 3] 问题:我该如何取消订阅?"
🛠️ 练习——自己动手试试
为几个你自己的文本文件(比如 5-10 条笔记)搭建一个小型 RAG 系统,测试它能不能找到正确的来源。
- 把 5-10 个短文本文件拆分成大约 200-300 个 token 的分块。
- 为每个分块以及 3 个你已知答案的测试问题生成嵌入。
- 比较余弦相似度,检查带有正确答案的分块是否真的排在最前面。
✅ 自查清单
- ☐ 在全部 3 个测试问题中,向量搜索都找到了正确的分块吗?
- ☐ 有没有出现过一个语义相似但内容错误的分块反而胜出的情况?
- ☐ 如果把分块调得更小或更大,这个结果会有什么变化?
小测验
什么时候用一个简单的 RAG 系统会比直接把整个知识库塞进上下文窗口更好?
来源
- Anthropic Engineering: Contextual Retrieval ↗ www.anthropic.com
- Claude Platform Doku: Embeddings ↗ platform.claude.com
- OpenAI Doku: Embeddings ↗ platform.openai.com