Agentic RAG 与普通 RAG 有什么区别?如何决定继续检索还是停止?
简化版
Agentic RAG 让模型根据当前问题和已有证据决定何时检索、查哪个来源及是否继续补查,而固定流程 RAG 的主要步骤由程序预先确定。它适合需要动态补证据的任务,但必须由运行时限制轮数、费用和时间,并在证据不足时保留缺口而非强行作答。
详细版
- 固定流程可以包含改写、混合检索与重排,步骤多不代表就是 Agentic RAG;关键在于谁决定下一步。
- Agentic RAG 根据工具返回的观察结果调整检索计划,适合中间实体未知、多来源或条件分支较多的问题。
- 状态应包含子问题、已确认事实、来源版本、未解决缺口和剩余预算,不能只保存一段累计摘要。
- 继续检索应对应明确的证据缺口;重复检索没有新增有效证据时应停止或有限切换策略。
- 成功停止要求必要结论有证据支持;超预算、来源不可用或冲突未解决则以不完整状态结束。
- 与固定流程做同题、同预算对比,同时测正确率、证据支持率、检索轮数和尾延迟。
完整版教学
一、区别在控制权,不在工具数量
一个固定 RAG 流程可以先改写查询,再并行检索,最后重排与生成。 即使调用了多个模型,只要控制路径主要由程序预先规定,它仍然是工作流。 Agentic RAG 则允许模型根据刚拿到的资料决定下一步动作,例如发现新实体后再去另一个库查定义。 因此它增加的是动态决策能力,同时也增加了决策错误和不确定耗时。
| 维度 | 固定流程 RAG | Agentic RAG |
|---|---|---|
| 下一步由谁决定 | 程序预设规则 | 模型结合当前状态提出动作 |
| 缺少资料时 | 走预定义补查或拒答分支 | 可针对新缺口重新选择查询 |
| 调用预算 | 通常较容易估算 | 需要运行时逐步扣减和限额 |
| 典型适用问题 | 清晰的单次知识查询 | 路径事先难以确定的调查问题 |
动态检索的基本组织方式可参考 LangChain 的检索架构说明。 是否采用它应由问题集上的收益决定,而不是因为“Agent”这个名字看起来更高级。 若问题本来只需查一段产品说明,多一轮计划反而可能提高延迟并引入遗漏检索的风险。
二、把答案需求变成可以核对的证据缺口
假设用户问:“组件 A 从旧版本升级到新版本后,插件 B 是否还兼容?” 系统至少需要 A 的变更说明、B 的支持版本范围,以及两者关键接口是否一致。 只查到 A 的升级指南,不能因为文档很长就判断资料充分。 应该先把必须支持的结论拆成检查项,再逐项填入来源。
问题:A 升级后 B 是否兼容?
缺口 1:A 的新接口变化 -> 已找到变更说明 D1
缺口 2:B 的支持版本 -> 尚未找到
缺口 3:例外条件 -> 需要确认运行时版本
下一步:查 B 的兼容矩阵,而非继续泛搜 A 的升级指南
每个证据条目应保留文档 ID、版本、原文片段和它支持的子结论。 摘要可以帮助控制上下文长度,但不能替代回查原文的能力。 当新文档否定已有结论时,状态需要标记冲突,而不是简单把新旧摘要拼在一起。
三、每次继续检索都要说明能补什么
“再查一次可能更好”不是可验收的行动目标。 可以把动作限定为查询某个缺失字段、核对某项冲突或获取更权威的原始资料。 工具返回后,程序记录是否新增了可用证据,再更新剩余缺口。 模型可以提出查询,但访问权限、工具白名单和参数校验仍由执行层负责。
例如第一轮返回 8 个片段,第二轮返回 8 个,其中 6 个完全重复。 新增的 2 个若都不涉及 B 的支持版本,片段数增加了,但关键缺口并没有减少。 这时不该仅因“查到新内容”奖励继续搜索,应改查指定来源或结束该路径。 内容去重可用文档版本与片段哈希,语义相关性仍需结合子问题检查。
规划一个缺口 -> 校验检索动作 -> 执行工具
-> 去重并检查来源 -> 更新证据与冲突
-> 缺口解决:准备回答
-> 缺口未解:有限补查或返回未确认项
四、成功停止与预算停止要分开
成功停止意味着回答所必需的结论已经获得足够支持。 预算停止意味着系统没有足够资源继续工作,两者不能返回相同的“任务已完成”状态。 若兼容性仍未确认,最终答案应明确哪些部分已查证、哪些条件仍缺资料。 这样用户才能决定补充环境信息或改用人工核查。
下面是一组教学用限制,不是通用推荐阈值。 最多 3 轮检索只是限制工具轮次,还需要独立限制模型调用、总 token 和墙钟时间。 因为一轮可能发出多个查询,仅限制轮数无法限制费用。
max_retrieval_rounds = 3
max_tool_calls = 6
max_total_tokens = 12000
deadline_seconds = 15
max_rounds_without_new_evidence = 2
运行时应在发出调用前检查预计预算,并在调用后按实际用量扣减。 单次工具还应有超时,否则总预算检查可能一直等不到控制权返回。 权限失败不能靠改写查询绕过,来源中的指令也不能改变这些执行限制。
五、用对照实验判断多轮是否值得
比较方案时,先固定模型、题目、知识库版本和证据评分规则。 然后把简单查询与需要动态补查的问题分组,避免平均数掩盖收益只集中于少量难题。 还要检查是否出现“本应查资料却直接回答”的错误,因为动态控制增加了跳过检索的机会。 费用和延迟必须计算整个轨迹,而不是只记录最后一次生成。
假设同一组 100 道题,固定流程答对 70 道,动态流程答对 78 道。 总检索调用从 100 次增到 230 次,即多花 130 次调用换来 8 道额外正确答案。 平均每道额外正确答案对应 16.25 次新增检索调用,但这还没算规划模型的成本。 是否值得取决于任务价值和延迟要求,不能仅凭正确率上涨就判断应全量替换。
新增检索调用 = 230 - 100 = 130
新增正确题数 = 78 - 70 = 8
每新增正确题的额外检索调用 = 130 / 8 = 16.25
可进一步做消融:只启用查询改写、只增加固定补查、最后才允许动态工具选择。 这样能区分收益究竟来自更好的召回,还是来自真正必要的动态决策。 如果简单的固定补查已获得同等效果,就可以保留更容易维护的流程。 同时报告尾延迟与错误停止案例,因为平均调用数无法反映长尾循环。
六、常见误区与追问
- 误区:做了多跳检索就一定是 Agentic RAG。 多跳也可以由固定程序执行;关键是下一步是否由模型结合观察动态决定。
- 误区:模型说证据充分就可以结束。 应核对必要子结论、来源有效性和冲突状态,不能只相信模型的自评。
- 追问:每轮都查到新文档为什么还要停? 新文档可能重复或无关;停止应看关键缺口是否减少以及预算是否允许。
- 追问:预算用完但答案还不完整怎么办? 返回已验证的部分与明确缺口,不应把资源耗尽包装成证据充分。
- 误区:检索工具只读就不用做权限控制。 只读也可能泄漏其他租户资料,权限过滤必须在每次检索执行时生效。
- 追问:怎样证明动态决策有收益? 做同题同预算比较和消融实验,分开评估召回、决策、证据支持与最终正确率。
七、加强记忆
把 Agentic RAG 记成“带着缺口查资料”:先列出答案需要什么证据,再选择能补上缺口的查询,查完回到原问题核对。缺口补齐才能算成功,预算耗尽只能算有界结束。动态控制的价值在于少走无用的检索路径,而不是把每个问题都变成漫长调查。
记忆钩子:缺什么、查什么、补上没有;证据决定能不能答,预算决定还能不能查。