做过RAG项目的人大概都有过这样的体验:用户问了一个比较复杂的问题,AI的回答要么答非所问,要么只回答了一半。你去看检索日志,发现第一次检索确实没找到太相关的内容,但如果你手动换一个关键词再搜一次,其实能找到很好的资料。
问题出在哪?出在传统RAG是"一锤子买卖"——用户问什么,就搜什么,搜到什么,就答什么。它不会反思自己搜得好不好,也不会主动换个角度再搜一次。
这就是传统RAG和AgentRAG最核心的区别。后者让AI具备了"思考-行动-观察-再思考"的循环能力,更像一个真正会查资料的人。
这篇文章,我们就把这两种RAG方式掰开揉碎了看看到底有什么不同。
传统RAG的流程可以用一条直线来描述:
用户提问 → 查询改写 → 向量检索 → 拼装Prompt → LLM生成回答就这么简单。整个流程走一遍,回答就出来了。从工程实现来看,通常是这样的:
直接拿用户的问题去搜,有时候效果不好。比如用户问"它怎么用?",这里的"它"指代不明。所以有些系统会做一步查询改写,把"它怎么用?"结合上下文改成"产品X的使用方法"。但这一步通常只是简单的文本处理,不会深度理解用户意图。
拿着改写后的查询,通过Embedding模型转成向量,去向量数据库里搜。搜出来的结果按相似度排序,取Top K条。
把检索到的文档片段和用户问题拼在一起,交给LLM生成回答。
这个流程的优点是快——只检索一次,延迟低,实现简单。缺点也很明显:如果第一次检索没搜到好内容,结果就基本定了。系统没有纠错和补充的机会。
AgentRAG引入了ReAct(Reasoning + Acting)推理框架。ReAct的核心思想来自人类解决问题的思维方式:先想清楚要做什么,然后去做,观察结果,根据结果再决定下一步做什么。
用一个生活中的例子来类比:
你要帮朋友找一家适合过生日的餐厅。 传统RAG的做法:直接搜"适合过生日的餐厅",拿到结果就推荐。 AgentRAG的做法:
你看,AgentRAG多了一个"评估-反思-再检索"的环节。
以 JBoltAI 平台的 ReActRagChain 实现为例,AgentRAG 的流程更像一个循环:
用户提问 → 查询分析 → 生成执行计划 → 进入推理循环:
├─ 思考:当前信息够不够回答?
├─ 选择工具:调用知识库检索 / 数据库查询 / 外部工具
├─ 观察结果:评估检索质量
├─ 判断:信息充足则结束循环,否则继续下一轮
└─ 退出循环 → 生成最终回答传统RAG的查询分析通常比较简单,可能只是去除一些无意义的语气词,或者结合上下文做一些代词替换。
AgentRAG则做了更深层的分析。在实际工程中,查询分析包含两层:
第一层是规则匹配,零成本,不需要调用LLM。系统内置了一套意图关键词库,能快速识别出十几种意图类型:
如果规则能直接命中,系统连LLM都不用调,直接进入后续流程,省时省钱。
第二层是LLM兜底,当规则无法识别时,调用一次LLM来完成意图识别、查询改写和子查询拆分。注意这里的关键词——一次调用。很多系统会把意图识别和查询改写分成两次LLM调用,但在实际工程中,完全可以在一次调用中同时完成,省一半的开销。
此外,AgentRAG还能识别复合查询。比如用户问"Spring Boot和Spring Cloud有什么区别,分别怎么安装?"这是一个对比查询+两个流程查询的组合。系统会自动把它拆分成多个子查询,在后续的推理循环中分别处理。
传统RAG没有"计划"这个概念。用户问什么就搜什么,搜到就回答,搜不到也回答(只不过可能答得不好)。
AgentRAG会根据查询分析的结果,生成一个执行计划。不同类型的查询有不同的计划模板:
这个计划不是僵化的,而是作为"建议"指导后续的推理循环。如果第一轮检索结果就很好,LLM可以直接判断信息充足并结束循环;如果结果不理想,循环会继续,直到收集到足够的信息或者达到最大迭代次数。
传统RAG只检索一次。检索策略通常在系统配置时确定(语义检索 or 混合检索),运行时不会改变。
AgentRAG在推理循环中可以多次检索,而且每次检索都可以选择不同的策略和关键词:
在工程实现中,这通过一个"工具注册"机制来实现。系统会把可用的工具(知识库检索、数据库查询、Excel查询、用户自定义函数等)注册到一个工具中心,然后由LLM自主选择在每一轮调用哪个工具。
更重要的是,系统还内置了相似度守卫(Similarity Guard)——如果LLM选的查询关键词和之前已经搜过的太相似,系统会直接拦截并提示"请换用不同的关键词",避免无效的重复检索。
传统RAG不做结果评估。检索到什么就用什么。
AgentRAG在每次检索后会进行多维度的质量评估:
评估结果会反馈给LLM,帮助它决定是继续检索还是可以开始回答。比如评估反馈"相关性不足,建议调整查询词义或使用不同的检索策略",LLM看到这个提示,就会换一个角度重新检索。
传统RAG的处理链路通常是固定的:检索 → 生成回答。如果你想加入数据库查询、API调用等能力,需要修改代码重新部署。
AgentRAG通过"工具挂载"机制实现了灵活的能力扩展。用户可以在应用配置中挂载多种数据源:
系统在推理循环开始前,会根据用户的问题自动判断需要激活哪些工具。比如用户问"上个月的销售数据是多少?",系统会识别到这是一个数据统计类问题,自动激活数据库查询工具。如果用户问"退款流程是什么?",则只需要知识库检索工具。
这种动态路由的机制,让同一个Agent应用能够处理各种不同类型的问题,而不需要为每种问题类型单独配置一个应用。
传统RAG通常不区分闲聊和业务问题。用户说"你好",系统也会老老实实地去知识库搜一遍,浪费资源不说,搜出来的结果可能还很尴尬。
AgentRAG在查询分析阶段就会识别出闲聊意图,然后走一个快速通道——跳过所有的检索和工具调用,直接让LLM友好地回复。这样既省了资源,响应也更快。
传统RAG的退出条件很简单——检索完成就生成回答,不管检索质量如何。
AgentRAG有更完善的退出机制:
值得注意的是,只有LLM主动调用finish才是"正常退出"。评估通过只是意味着"通常情况下信息已经够了",但LLM仍然可以选择继续检索。这种设计给了LLM更大的自主权,避免了过早退出导致回答质量不佳。
说了这么多差异,那到底该选哪种?
传统RAG适合的场景:
AgentRAG适合的场景:
在实际落地中,两者的选择并不是非此即彼。JBoltAI 平台就同时提供了两种应用类型——"智能问答"走传统RAG快速通道,"AgentRAG智能问答"走多轮推理深度链路,用户创建应用时根据场景选择即可。这种分级处理的思路,在保证响应速度的同时,也不会牺牲复杂问题的回答质量。
从开发者的角度来看,AgentRAG的复杂度明显高于传统RAG:
但这些复杂度的增加是值得的。从效果上看,AgentRAG在复杂问题上的表现明显优于传统RAG——它能找到更全面的信息,给出更准确的回答,还能处理传统RAG根本无法处理的跨数据源问题。
传统RAG和AgentRAG并不是替代关系,而是互补关系。传统RAG解决了"从0到1"的问题——让AI能够基于知识库回答问题;AgentRAG解决了"从1到10"的问题——让AI能够像人一样思考和分析,给出更高质量的回答。
随着LLM能力的不断提升和推理成本的持续下降,AgentRAG的应用门槛会越来越低,适用场景也会越来越广。但对于大多数刚刚开始建设知识库的企业来说,从传统RAG起步,逐步积累经验和数据,再根据需要升级到AgentRAG,可能是更务实的选择。毕竟,最好的架构不是最先进的架构,而是最适合当前阶段的架构。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。