agentic rag和普通rag区别

接入与开发

给正在选型的团队讲清 Agentic RAG 与传统 RAG 在检索决策链路上的差异,并给出可落地的判断清单与上线前排查顺序。

很多团队做知识库问答时,第一个能跑通的版本都是「用户提问→向量检索一次→拼进上下文→出答案」。上线后遇到多跳问题、需要比较多个来源、或者第一轮没召回就得放弃。这篇不重复讲 RAG 原理,而是把两种链路在「谁决定检索什么、检索几次、什么时候停」上的差异摊开,给你一份按场景选的判断清单和上线前的评测动作。

很多团队做知识库问答,第一个能跑通的版本几乎都是同一条路:用户提问,向量检索跑一次,把命中的片段塞进上下文,模型出答案。这套东西上线快、链路短,问题也来得快——遇到要多跳才能拼出答案的问题、需要横向比较几个来源的问题,或者第一轮没召回就彻底没辙。这时候团队就会开始琢磨:是不是该换成 Agentic RAG。

这篇不重讲 RAG 原理,只把两种链路在「谁决定检索什么、检索几次、什么时候停」这三个问题上的差异摊开,再给一份按场景选的判断清单和上线前的排查顺序。选型阶段最怕的不是选错,而是没搞清楚自己在选什么。

链路差异:谁在决定「检索什么」

传统 RAG 的检索动作是应用代码写死的:一次查询、一个索引、固定 top-k,模型拿到结果只负责读和生成,它没有「要不要再查一次」的发言权。Agentic RAG 把检索封装成模型可调用的工具,由模型根据当前缺口决定查什么、要不要改写 Query、要不要再来一轮。差别不在用不用向量库,而在决策权在代码手里还是模型手里。

判断自己的系统属于哪一侧,不用看架构图,看两个点就够:检索次数是不是代码固定的,查询串是不是模型改写的。只要有一项由模型动态决定,就落在 Agentic 这一侧。反过来,如果查询串永远是用户原话、检索永远一次,那不管中间套了多少层封装,本质还是传统 RAG。

工程上的四个控制点:步数、预算、超时、退出条件

Agentic 一侧最常翻车的方式不是模型不够聪明,而是循环没有上限。所以第一件事就是显式设死线:最大检索轮数、单次请求允许的总工具调用次数、整体超时时间。这三项要写进配置里,能被运维改,而不是藏在代码常量里靠人记得。

控制点传统 RAG 的做法Agentic 的做法
检索次数代码固定,通常一次模型决定,必须设上限
查询串用户原话或简单改写模型按缺口改写,需要日志留痕
停止条件检索完即停低分退出、连续重复退出、预算耗尽退出
调优重心召回质量与上下文拼装循环控制与退出时机
成本估算一次检索加一次生成按最坏轮数估算,随轮数浮动

每一轮检索都要能被打断,这是硬要求:命中分数低于阈值直接退出,连续两轮召回内容高度重复就停,预算耗尽时返回当前最好的答案,而不是硬凑出一轮。另外,两种链路的监控指标不能混着看——传统 RAG 盯召回率和答案质量,Agentic 还要盯平均轮数、轮数分布、超限比例,指标口径混在一起就分不清是检索变差还是循环失控。

  • 设死线:最大轮数、总工具调用次数、整体超时三项都要能配置
  • 设退出:低分退出、重复召回退出、预算耗尽退出,三选一必配
  • 估成本:按最坏轮数算,别按平均轮数算
  • 分指标:召回质量归召回质量,循环健康度归循环健康度

日志与评测:怎么验证换方案后到底有没有变好

换链路之前先把日志补齐,否则改完根本说不清是变好还是变贵。每一轮至少记这五项:这一轮的查询串、召回条数与最高分、模型决定继续还是停下的理由、当前累计轮数、当前累计耗时。缺了轮次信息,一次很贵的请求你只能看到总账,看不到贵在哪一轮。

评测集要分两类来建:一类是单跳事实题,一类是需要多步才能拼出答案的题。只看单跳题,传统 RAG 会拿到虚高的分;只看多跳题,又会低估简单场景下多花的那部分延迟和成本。两类题的比例最好贴近真实提问分布,抽样方式可以到站内的评测方法相关页面看当时的做法说明。

  1. 先攒真实提问抽样近两周的真实提问,按单跳、多跳、比较型三类标注占比,别用自己编的题
  2. 单跳题先跑对照同一批单跳题分别跑两种链路,重点看答案质量有没有差异,如果没差异就不用往下比
  3. 多跳题看增量多跳题上对比两种链路的答案完整度,同时记录平均轮数和总耗时
  4. 按最坏轮数核成本拿日志里的轮数分布,到站内价格页面按当时的单价核对一轮大概花多少,再乘最坏轮数

有一个阶段不适用这套评测:语料每天大幅变动、问题分布完全未知的早期探索期。这时候先攒真实提问,等提问分布稳定下来再谈评测集,否则评测集建完就过期。

上线前排查顺序:按这个顺序逐项确认

这一节给的是顺序,不是清单——顺序错了会白干。很多团队一上来就调循环控制,结果底下的召回本身就不准,加多少轮都是放大错误。正确的做法是从问题分布往下排查,每一步确认了再走下一步。

顺序确认什么不通过怎么办
第一步抽查真实提问,看单跳占比单跳占比高就先别上 Agentic
第二步单独测召回质量,不看生成召回不准先修检索,别加循环
第三步把轮数上限调低跑一遍超限时要返回可用答案而不是报错
第四步接日志和告警,再谈灰度轮数异常、耗时异常看不见就别放量

第三步值得单独说一句:人为把轮数上限调到很低跑一遍,看系统是返回当前最好答案,还是直接抛异常或者给出半截话。这一步能提前暴露退出条件写没写对,比上线后靠用户反馈发现要便宜得多。第四步接完日志再考虑灰度,灰度期间重点看轮数分布有没有长尾,长尾往往就是那几个会烧预算的问题类型。

下一步如果你正在两种链路之间犹豫,建议先去站内的中转站目录看一圈实际在跑的服务,再到价格追踪页按当时的单价核对一下多轮请求的成本量级,最后回到评测方法页面把对照用例的写法定下来——顺序别反。

常见问题

是不是所有知识库问答都该升级成 Agentic RAG?

不是。单跳事实型问题、语料集中、答案段落明确的场景,传统 RAG 更快更便宜也更可控。Agentic 的价值出现在需要多跳、需要比较多个来源、或者第一轮检索经常漏掉的场景。判断方式很土但有效:翻一批真实提问,数数有多少是「一次检索答不上来」的,占比低就先维持现状。

Agentic RAG 会不会一直循环停不下来?

会,所以上限必须写在代码里而不是提示词里。至少设三层:单请求最大检索轮数、总工具调用次数、整体超时。再配合退出条件,比如连续两轮召回内容高度重复、或最高分低于阈值就直接返回当前最好结果。上线前把上限调到最低跑一遍,看超限时的兜底答案能不能用。

换过去以后成本涨多少算正常?

没法给统一数字,取决于平均轮数和每轮带回来的文本量。做法是先按最坏轮数估算上限,再拿日志里的实际轮数分布看平均值。注意别只看 token 单价,要按「一次问答的总消耗」对比,Agentic 的输入侧上下文会随轮数累积。当前各家单价到 /official-api 与 /tools/model-cost-calculator 核对后再算。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。