先讲清楚为什么需要 RAG
直接问大模型两个问题经常翻车:
- 「昨天的新闻说了什么?」——训练数据有截止日期,新事它不知道。
- 「我们公司报销制度第 5 条是什么?」——私有文档它从没见过。
硬塞进提示词?上下文窗口有限,资料多了放不下。RAG(Retrieval-Augmented Generation,检索增强生成) 的思路:把资料放在外部知识库里,回答前先检索出最相关的几段,让模型「开卷考试」。
四步流水线
文档 ──① 切块──> 段落 ──② 向量化──> 向量库
│
用户提问 ──向量化──> 相似度检索 ──③ 取回 Top-K 段落
│
④ 拼进提示词 ──> LLM 生成带依据的回答
① 切块(Chunking)
长文档切成几百 Token 的小段落,太大会检索不准,太小会丢上下文。
② 向量化(Embedding)
用 Embedding 模型把每段文字变成一串坐标(向量)。语义相近的段落,向量在空间里也挨得近——「猫吃鱼」和「猫咪捕食鱼类」会被映射到相近的位置。
③ 检索(Retrieve)
用户问题同样向量化,去向量数据库(FAISS、pgvector 等)里找距离最近的 K 段。
④ 生成(Generate)
请仅根据以下资料回答问题,并标注引用来源。
资料:
[1] ……(检索到的段落)
[2] ……
问题:……
工程上的三个坑
- 检索不到:问题与资料措辞差异大,可加关键词检索(混合检索)兜底。
- 资料冲突:多段资料说法不一致时,明确让模型「以日期最新的为准」。
- 闭卷幻觉:资料里没有答案时,必须提示模型回答「资料中未提及」,而不是硬编。
💡 一句话总结:RAG = 让模型从「闭卷凭记忆答题」变成「开卷查资料答题」,这是绝大多数企业 AI 知识库应用的底层方案。