跳到主要内容

检索增强生成(RAG)

进阶
What you'll learn
  • 什么是 RAG,以及“检索-增强-生成”循环
  • 如何索引、检索、增强,并生成带引用的答案
  • 为什么在“回答关于我的文档”这类需求上,RAG 优于微调
  • 毁掉 RAG 质量的五种失败模式
  • 一段可直接复制粘贴的接地(grounding)提示词,能堵住两个最大的漏洞

RAG 让模型能够回答关于你自己数据的问题——文档、知识库、代码库——这些都是它从未训练过的内容。思路很简单:检索相关片段,用它们增强提示词,然后生成一个基于这些片段的答案。

这个循环

Guided walkthrough1 of 4
  1. 切分成片段,将它们嵌入(embed)(参见 /docs/foundations/embeddings),并存入向量(和/或关键词)索引。

关于索引中的嵌入步骤,参见 嵌入与向量检索

为什么用 RAG 而不是微调?

Pro tip
  • 新鲜:更新数据,而不是更新模型
  • 可验证:提供引用出处
  • 便宜:远比重新训练便宜

对于大多数“回答关于我的文档”的需求,RAG 是首选的正确工具——参见 微调 vs 提示 vs RAG

失败模式(RAG 质量在哪里崩塌)

Watch out
  • 糟糕的检索 = 糟糕的答案。如果正确的片段没被检索出来,模型就无从使用。大多数“RAG 答错了”的问题其实是检索问题。
  • 切分太粗或太细都会破坏相关性(参见嵌入)。
  • 没有接地指令:模型会把检索到的事实和自己的猜测混在一起。要告诉它只根据上下文回答,并坦承缺口。
  • 塞得太多:无关片段会稀释信号并消耗 token。检索少而精的高质量片段。
  • 没有引用:你无法验证,所以也无法信任。

切分的失败与嵌入相关,而过度堆塞则会消耗 token

Pro tip
  • 分开评估检索:把“我们是否检索到了正确的片段?”和“模型是否回答得好?”分开衡量。这能快速定位问题。参见评估(/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>

把它与少数高质量片段(而不是你检索到的全部)搭配使用,你就能一次性堵住两个最大的漏洞:幻觉式的混淆,以及无法验证的答案。然后分别评估检索与生成,这样你才知道该调哪一半。

掌握术语

按 Enter 或空格键翻转卡片。使用左右方向键在卡片之间切换。已显示术语。
1 / 6

自测一下

0/5
  1. RAG 这三个字母按顺序分别代表什么?
  2. 当“RAG 答错了”时,真正的问题最常出在哪里?
  3. 为什么在“回答关于我的文档”这类场景中,通常更偏好 RAG 而非微调?
  4. 要阻止模型把事实和猜测混在一起,最高杠杆的单项修复是什么?
  5. 为什么要把检索与生成分开评估?
Key takeaways
  • RAG = 检索相关片段、增强提示词、生成一个有依据且带引用的答案。
  • 索引(切分 + 嵌入 + 存储)、检索顶部片段、用一条接地指令增强、生成带引用的答案。
  • 在文档问答中优先选择 RAG 而非微调:更新鲜、有引用、更便宜。
  • 大多数失败都是检索失败——检索少而精的高质量片段,而不是全部。
  • 始终加上一条接地指令并标注引用;分别评估检索与生成。

下一步