主题
RAG:让 Agent 先查证,再回答
今天先记住
RAG(Retrieval-Augmented Generation,检索增强生成)不是“给模型外挂一个资料库”这么简单。它在 Agent 系统里的位置,是把“凭上下文猜”改成“先拿到相关证据,再基于证据决策或回答”。它解决的不是模型会不会说话,而是模型在信息不完整、知识会变化、资料分散时,能不能把依据找回来。
它在大地图里的位置
还是看这条链路:
txt
用户目标
-> 上下文 / 记忆
-> 规划 / 决策
-> 工具调用 / 外部系统
-> 执行 / 观察结果
-> 评估 / 修正
-> 最终输出昨天讲“短期状态和长期记忆”,今天往旁边拧一圈:RAG 是上下文进入模型之前的一道检索门。它先从文档、知识库、历史记录或代码索引里找材料,再把少量相关片段放进当前上下文。
所以 RAG 不等于长期记忆。长期记忆回答“以前确认过什么”,RAG 回答“这次任务需要查哪几段资料”。
它到底是什么
最小的 RAG 流程只有三步:
- 把用户问题变成检索请求。
- 从外部资料里取回相关片段。
- 让模型基于这些片段生成答案、计划或下一步动作。
关键点在“取回相关片段”。如果检索拿错了,模型后面说得再顺也只是顺着错材料发挥;如果取回太多,上下文会被噪音塞满,真正重要的约束反而被挤掉。
为什么 Agent 里会用到它
Agent 经常要处理不在模型参数里的东西:项目文档、接口说明、当天发布规则、用户自己的长期偏好、刚刚生成的日志。把这些内容全部常驻 prompt 太贵,也容易过期;完全不放进去,模型又只能猜。
RAG 的价值是把“需要时再查”制度化。比如一个发布 Agent 在写每日课程前,不该靠记忆猜框架,而应该检索课程框架、上一课主题和已有文件;一个代码 Agent 在改函数前,也不该只凭文件名判断调用关系,而应该先检索相关定义和引用。
这不是抽象地“提高准确率”,而是避免具体失败:引用旧规则、漏读约束、重复写同一主题、把不相关历史当成当前事实。
怎么判断它有没有用
如果答案必须依赖项目内文档、知识库、日志、历史记录,RAG 很可能有用。
如果问题只需要当前对话里已经给出的信息,先别上 RAG,直接用上下文更稳。
如果资料会频繁变化,比如 API 文档、发布流程、产品规则,RAG 要优先查最新来源,并在答案里保留依据边界。
如果检索结果无法解释“为什么这几段被拿回来”,系统很难调试。至少要能看到 query、命中文档、片段位置和相似度或排序理由。
最近冒出来的词
今天不追新词,先把主线概念讲稳。
一个小例子
txt
Input:
用户要求生成 2026-07-19 的 AI Agent Daily,并说“不要重复上一课”。
Process:
1. 检索 ai-agent 目录,找到上一课是“短期状态和长期记忆”。
2. 检索课程框架,发现下一条主线是 RAG。
3. 把框架要求、上一课标题、今天日期放进当前上下文。
4. 生成文章并检查标题、frontmatter、文件路径是否一致。
Output:
系统写入 /ai-agent/2026-07-19.md;
主题选择 RAG;
文章不会再讲昨天的“长期记忆”,而是解释“检索如何把外部证据带进当前任务”。这个例子能用来判断一个真实系统:它是在“生成前查证”,还是“生成后找理由”。前者是 RAG,后者只是补引用。
常见误区
- 以为 RAG 就是向量数据库。向量库只是常见检索手段,RAG 的核心是“查什么、怎么排、放多少、如何使用”。
- 以为检索到内容就一定可靠。检索只能给候选证据,仍要判断时间、来源和适用范围。
- 以为片段越多越好。太多片段会稀释重点,让模型忽略真正关键的约束。
- 以为 RAG 可以替代工具调用。RAG 负责拿资料,工具调用负责改变外部状态,两者不能混成一件事。
今天自测
- RAG 和长期记忆最核心的区别是什么?
- 如果 Agent 回答时引用了过期文档,你会检查 RAG 流程里的哪几步?
- 什么情况下不用 RAG 反而更稳?