检索增强的目的
检索增强的目的 · 阅读后完成下方实验与检查题,再用「标记完成」记录进度。
学习目标
读完本课你能说清检索增强(RAG, Retrieval-Augmented Generation,检索增强生成)解决什么问题,并把「选资料」「生成答案」「给出引用」三件事的职责分开——出了错能判断该修哪一段。
问题场景
你问学习助手:「我导入的那份接口文档里,删除接口要求幂等吗?」模型没见过这份文档,但它不会说不知道——它按「最像答案的样子」补了一份:编出幂等规则,甚至编出文档里的章节号。这不是说谎,是文本补全的默认行为:没有依据时,生成一个像样的答案就是它最擅长的。
核心解释
检索增强的思路很朴素:回答之前,先把相关资料找出来放进上下文,让模型「抄着资料回答」。但要把三件事的职责分开,混在一起就没法排查:
- 资料选择(检索器):输入用户问题,输出片段列表。它只认索引和匹配,不负责组织语言。
- 生成(模型):基于入选资料组织语言。它只对「给到它的资料」负责,资料没选对不怪它。
- 引用(服务端):把命中片段整理成可核对的来源。它回答的是「这个结论从哪来」。
最小对比看差异:
// 无检索:模型只能靠参数里的记忆自由发挥
const messages = [{ role: "user", content: "删除接口要求幂等吗?" }];
// 有检索:先查资料库,把片段拼进提问,并约束回答范围
const hits = searchDocuments("删除接口 幂等"); // 返回资料库片段
const messages = [
{
role: "user",
content:
"只根据以下资料回答,资料没提到就明确说没有。\n资料:\n" +
hits.map((h) => h.text).join("\n---\n") +
"\n问题:删除接口要求幂等吗?",
},
];
无检索时答案是「概率上合理」的;有检索时答案被资料范围约束,每次提问的稳定性也高得多。强调「独立职责」是因为三段可以分别测试与改进:检索不行改切分和索引,生成跑偏改提示,引用缺失改数据结构。搅在一个黑盒里,出了问题只能整体重试。
示例拆解
本站学习助手走「模型提出检索、服务端执行」的形态(A15 的工具机制),回答资料问题的完整链路:
// 1) 模型提出调用申请(finish_reason: "tool_calls")
{ "function": { "name": "search_documents", "arguments": "{\"query\":\"删除接口 幂等\"}" } }
// 2) 服务端执行(lib/ai/tools.ts),返回结构化片段
{
"total": 1,
"fragments": [
{
"document": "团队接口规范.md",
"collection": "default",
"heading": "删除接口",
"snippet": "删除接口必须幂等:重复调用同一请求不应产生二次删除……"
}
]
}
// 3) 片段以 role:"tool" 回传,模型基于它生成;引用由服务端整理后随 refs 事件给前端
关键点:
- 检索失败也是一种结果:
search_documents无命中时返回「资料库没有命中内容;如无必要不要编造资料来源。」——把「不知道」显式传给模型,而不是留它自由发挥。 - 引用是服务端生成的,不是模型口头承诺:模型说「据资料显示」不可核查;服务端从真实命中片段整理出的引用才对得上。
- 三种失败对应三个环节:检索不到(改切分/索引/查询)、生成跑偏(改提示)、引用缺失(改数据结构)。
动手任务
- 在站内资料库导入一份你自己的文档(课程笔记即可),用不触发工具的问法问一个只有资料里才有答案的问题,记录模型的编造表现。
- 打开助手再问同一问题,对比:回答是否落在资料范围内、能否指出文档与片段位置。
- 判断任务:模型答错了,你先查检索命中列表还是先改提示词?说出理由。
常见错误
- 把 RAG 理解成「换个更强的模型」:模型再强也不知道你的私有资料,依据必须来自检索。
- 把检索结果直接当答案展示:片段是资料不是回答,需要模型组织成针对问题的语言。
- 资料没选对却去调提示词:答案跑偏先看命中列表,命中都没有,提示写得再好也没用。
- 引用靠模型自觉:让模型自己「附上来源」不可靠,引用必须由服务端从真实命中生成。
检查与复盘
自查清单:
- 能说出资料选择、生成、引用各自的输入输出与典型失败表现
- 能解释「无命中时返回提示」为什么比「让模型自由回答」更可控
- 能画出「提问 → 检索 → 片段进上下文 → 生成 → 引用」的完整链路
参考资料
- Anthropic 文档:Retrieval augmented generation (RAG) —— 检索增强的整体流程与官方实践
- OpenAI 文档:Function calling —— 用工具承载检索的机制
- 下一课 A19 讲资料从文件变成可检索片段的第一步:解析与切分。
读完这一课了?
标记完成后,工作台会安排接下来的学习。