检索增强生成(RAG)
- 什么是 RAG,以及“检索-增强-生成”循环
- 如何索引、检索、增强,并生成带引用的答案
- 为什么在“回答关于我的文档”这类需求上,RAG 优于微调
- 毁掉 RAG 质量的五种失败模式
- 一段可直接复制粘贴的接地(grounding)提示词,能堵住两个最大的漏洞
RAG 让模型能够回答关于你自己数据的问题——文档、知识库、代码库——这些都是它从未训练过的内容。思路很简单:检索相关片段,用它们增强提示词,然后生成一个基于这些片段的答案。
这个循环
Guided walkthrough1 of 4
- 切分成片段,将它们嵌入(embed)(参见 /docs/foundations/embeddings),并存入向量(和/或关键词)索引。
- 拉取与问题最相关的若干个顶部片段。
- 把这些片段放进提示词中,并加上一条指令,例如“只根据下方上下文回答;如果其中没有,就如实说明。”
- 产出答案——最好还能标明每条主张来自哪个片段。
关于索引中的嵌入步骤,参见 嵌入与向量检索。
为什么用 RAG 而不是微调?
- 新鲜:更新数据,而不是更新模型
- 可验证:提供引用出处
- 便宜:远比重新训练便宜
对于大多数“回答关于我的文档”的需求,RAG 是首选的正确工具——参见 微调 vs 提示 vs RAG。
失败模式(RAG 质量在哪里崩塌)
- 糟糕的检索 = 糟糕的答案。如果正确的片段没被检索出来,模型就无从使用。大多数“RAG 答错了”的问题其实是检索问题。
- 切分太粗或太细都会破坏相关性(参见嵌入)。
- 没有接地指令:模型会把检索到的事实和自己的猜测混在一起。要告诉它只根据上下文回答,并坦承缺口。
- 塞得太多:无关片段会稀释信号并消耗 token。检索少而精的高质量片段。
- 没有引用:你无法验证,所以也无法信任。
- 分开评估检索:把“我们是否检索到了正确的片段?”和“模型是否回答得好?”分开衡量。这能快速定位问题。参见评估(/docs/foundations/evals)。
复制粘贴:一段接地提示词
最高杠杆的单项修复就是一条接地指令。把你检索到的片段放进下面这样的模板里——它会强制模型只根据上下文回答、为每条主张标注引用,并在内容缺失时坦承,而不是瞎猜:
接地提示词
You are answering strictly from the context below. Rules: - Use ONLY the context to answer. Do not use outside knowledge. - Cite the source after each claim, like [chunk 2]. - If the answer is not in the context, reply exactly: "I don't have that in the provided sources." - Quote numbers and names verbatim — never paraphrase a figure. Context: [chunk 1] ... [chunk 2] ... [chunk 3] ... Question: <the user's question>
把它与少数高质量片段(而不是你检索到的全部)搭配使用,你就能一次性堵住两个最大的漏洞:幻觉式的混淆,以及无法验证的答案。然后分别评估检索与生成,这样你才知道该调哪一半。
掌握术语
1 / 6
自测一下
0/5- RAG = 检索相关片段、增强提示词、生成一个有依据且带引用的答案。
- 索引(切分 + 嵌入 + 存储)、检索顶部片段、用一条接地指令增强、生成带引用的答案。
- 在文档问答中优先选择 RAG 而非微调:更新鲜、有引用、更便宜。
- 大多数失败都是检索失败——检索少而精的高质量片段,而不是全部。
- 始终加上一条接地指令并标注引用;分别评估检索与生成。