ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

超越RAG:Agentic RAG核心机制与落地实践指南

超越RAG:Agentic RAG核心机制与落地实践指南 简介这是一份题为《超越RAG迈向智能体时代的 Agentic RAG》的PPT学习资料面向大模型应用研发、RAG系统设计与智能问答方向的技术人员系统梳理从传统RAG到Agentic RAG的演进路径。内容围绕RAG核心机制展开结合詹姆斯NBA总冠军次数查询等案例讲解了单步/多步检索、检索器与重排器对齐、反思标记Retrieve、IsRel、IsSup、IsUse等关键概念并介绍了自适应RAG、自我反思RAG、探针引导控制RAG等前沿改进方法。资源为1个pptx文件压缩包大小约14.93MB幻灯片结构完整适合用于技术分享、内部培训或个人体系化学习。已有186人学习下载适合希望理解RAG原理、掌握智能体时代检索增强生成设计思路的读者快速入门与进阶。 上周内部技术分享我做了一页封面PPT标题就叫“超越RAG迈向智能体时代的 Agentic RAG”。台下有刚接触向量数据库的应届生也有调了两年RAG线上接口的老兵。分享结束后所有人都在问同一个问题Agentic RAG 跟以前那套“文档切块 → 向量化 → 召回 → 拼 Prompt”到底差在哪这篇就把我那次分享的核心内容落成文字给正打算从传统 RAG 升级到智能体架构的团队做个参考。1. 传统 RAG 的三道坎为什么大家都在喊“不够用”先说结论传统 RAG 不是不能用而是它的定位本质上是一条“线性的检索-生成管道”。文档切块、向量召回、重新排序、拼接上下文、让大模型作答每个环节都是写死的。问题是真实企业场景里的问题形态比这条管道能处理的要复杂得多。1.1 只会“翻书”不会“查账”传统 RAG 最擅长的是“在知识手册里找答案”——比如“报销流程是什么”“这个 API 的参数说明在哪里”。这类问题有一个共同点答案以自然语言的形式存在于某个文档片段里向量召回能命中它。但一旦问题变成“上季度华东区所有项目的合同总额是多少”“这些客户里哪些贡献了 80% 的营收”传统 RAG 就彻底抓瞎了。因为它只能把相关的合同文本片段捞出来然后让大模型看着一堆散文去“心算”汇总。更麻烦的是很多企业经营数据根本不在文档里而在销售数据库、CRM 系统、Excel 表格里。传统 RAG 没有工具意识它只会去向量库翻材料不知道应该去调 SQL 查询接口也不懂用计算器做聚合运算。我把这种能力缺失叫作“只会翻书不会查账”。一个合格的助理遇到财务问题应该知道去查账本但传统 RAG 这个助理你问什么它都先翻手册。要让 RAG 真正用起来必须让它手里有“账本”这个工具。1.2 问题拆不开上下文装不下第二个坎是多跳推理。典型场景领导问你“如果我们要把生产线的换型时间从 30 分钟压到 10 分钟物流配送方案需要做哪些调整”。这个问题至少需要三步先找到换型时间优化的相关资料再找到当前物流配送体系的结构说明最后把两者放到一起推理出一个调整清单。传统 RAG 的做法是一锤子买卖把 query 丢给向量检索召回 top-5 片段然后让大模型硬答。结果往往只覆盖了问题的某一个侧面。不是说大模型本身不能推理而是它拿到的上下文里根本没有“另一半”信息。你让一个聪明人只读一本书的第五章去回答需要结合第七章才能解答的问题他再聪明也答不全。当时的解法是用多路召回或者长上下文硬塞但这些都属于打补丁多路召回需要提前枚举检索维度并不知道问题天然需要分解成几个子问题长上下文则受窗口和噪声影响检索出来的无关片段越多模型越容易被带偏。1.3 答错了没有人喊停第三道坎最隐蔽但危害最大传统 RAG 没有反馈闭环。向量召回结果如果与问题无关模型依然会“硬着头皮”把片段组织成答案看起来通顺实际上跑偏。尤其当用户问的问题涉及多重条件时比如“排除那些已经取消的订单”如果召回结果里全是已取消订单的记录模型可能煞有介事地分析一通取消原因而不是告诉你剩余有效订单的情况。这种错误在传统 RAG 体系里很难自动发现。因为流程没有“验证步骤”没有“再想一步”的动作。模型生成完答案管道就结束了没人去检查答案是否完整回答了问题、检索片段是否真正支撑结论。这也是为什么业界开始普遍聊 Agentic RAG——本质上是希望把“线性管道”升级成“有判断能力的循环”检索结果不满意就重写查询答案不完整就再补一次检索工具返回结果先验证再使用。这些能力靠堆 prompt 是堆不出来的需要一个真正的智能体循环。2. 从“管道”到“代理”Agentic RAG 的核心机制重构如果只记一句话Agentic RAG 的核心变化就是把“检索”从主流程变成智能体手里的一把工具。模型不再被动地接收固定召回结果而是主动决定何时检索、检索什么、结果够不够用、要不要换个方法再来一次。这个变化很像从“自动售货机”到“人类店员”的差距。2.1 检索器变成了工具模型变成了调度员传统 RAG 里的向量库是大模型获得知识的唯一通道。Agentic RAG 里智能体可以同时拥有多个工具向量库检索、SQL 查数、Web 搜索、计算器、时间查询、甚至调用外部 API。大模型需要根据用户问题自主决定调用哪个工具。这里的技术底座是 function calling / tool use。在 OpenAI 的 function calling 出现之前大家靠提示词让模型输出特定格式的 JSON 来模拟工具调用不稳定。现在主流模型都原生支持工具描述模型会按 schema 输出参数。你可以理解成工具是“手”模型是“大脑”function calling 是“神经通路”。一个极简的智能体循环可以表达为def agent(question): memory [] while not done: action llm.decide(question, memory, tool_descriptions) observation execute_tool(action) memory.append(observation) done llm.check_answer(question, memory) return llm.generate_final_answer(question, memory)这个循环看起来简单但每个函数背后都有讲究。llm.decide 决定走哪条路可能是调用一次检索也可能是直接生成最终答案llm.check_answer 决定是否要继续检索可能是“再查一次”或“停止”。加上迭代上限就构成了一个最小可用的 Agentic RAG。2.2 规划和反思不再一锤子买卖真正让 Agentic RAG “智能感”很强的是规划与反思机制。主流的实现思路是拿 ReAct 范式做底子Thought → Action → Observation让模型先思考再行动再观察结果循环往复。以 LangGraph 为例一个常见的 Agentic RAG 图里会有这些节点解析问题、判断是否需要检索、检索并打分、生成回答、验证回答。检索出的文档会先经过一个相关性评判器——通常是另一个 prompt 甚至一个微调过的分类模型——如果文档与问题无关就触发“重写查询”分支或“重新检索”分支。反思机制不只是自查更能主动修复错误。比如用户问“对比 A 和 B 两个方案的安全性”智能体可能先检索 A 方案再检索 B 方案然后发现缺少事故统计数字于是再调一次数据库补全数据。这种多步执行能力是传统 RAG 永远做不出来的。在工程实现上你可以用简单的两阶段“计划-执行-验证”也可以上 LangGraph 做一个带循环和条件的图。对大多数团队来说我的建议是先用简单的两阶段跑通以后再引入复杂循环。不要一上来就做 20 个节点的编排复杂度会吃掉一切收益。2.3 记忆多轮能力从拼文本变成了拼状态传统 RAG 做多轮对话通常是把历史对话压缩成摘要或者直接拼进新的提问里。这在简单追问场景下能用但一旦出现“刚才提到的那份报告”“第三页的表格”这种依赖中间状态的指代就很容易丢失语义。Agentic RAG 会把中间结果、子问题答案、工具返回的观察结果都放入一个显式的 memory state 中。比如智能体先查了“项目 A 的预算”把结果存在状态里用户接着问“那排期呢”智能体能从状态里知道“排期”是某个特定项目而不是全局意义上的排期。工程上这一点可以通过 state 对象来管理——LangGraph 里的 MessageState 也好Dify 里对话变量也好核心是让每一轮工具调用的结果都有迹可循。这也是 Agentic RAG 能处理复杂业务问答的关键它不再是“一段文本的接龙”而是一个有工作记忆的实体。3. 落地 Agentic RAG 时的关键模块与选型建议聊完概念必须聊落地。如果你要带着团队做一次 Agentic RAG 升级我建议先从下面三个模块入手。3.1 工具注册和函数调用是地基tool schema 要写细智能体能不能准确选对工具很大程度取决于工具描述写得清不清楚。不要写“查询数据库”这种笼统描述要写成“根据订单状态和时间范围查询销售明细参数包括 start_date、end_date、region、status”。一个标准的 function schema 大致长这样{ name: query_sales, description: 查询销售明细支持按时间、区域、订单状态过滤, parameters: { type: object, properties: { start_date: {type: string, description: 开始日期格式YYYY-MM-DD}, region: {type: string, description: 区域如华东、华南}, status: {type: string, enum: [active, cancelled, completed]} }, required: [start_date] } }注意description 不要只写给开发者看要让大模型看得懂。你可以自己做一个测试把工具描述发给一个大模型问它“如果用户问上季度销量你会填什么参数”如果它填得准说明描述合格。另外一个经验工具数量不要一开始就铺太多。刚开始上线时建议只暴露 3 到 5 个工具工具的 API 模型是根据所有工具描述来决策的工具太多、描述互有歧义时误调用率会显著上升。等线上数据稳定再逐步增加。3.2 编排框架怎么选Dify、LangGraph 还是 LlamaIndexAgentic RAG 的工程落地现在有大量现成框架。我们团队实际对比测试过几套我把核心差异列在下面框架特点适合的团队Dify 智能体平台可视化搭建内置知识库、工具节点迭代快想快速验证业务价值有一定产品思维的后端团队LangGraph精细控制状态流和循环可自由定义 agent 图需要复杂逻辑、自定义循环、精细埋点的算法团队LlamaIndex文档加载、检索增强文档集非常完善Agent 和 Workflow 也整合得不错以文档问答为主、希望保留丰富索引结构的场景我的个人建议是如果项目周期短、业务方催得紧直接上 Dify把知识库接好、工具接好两周内就能做出一个可演示的 Agentic RAG 应用。Dify 智能体平台对工具的接入是图形化的甚至可以不用写代码完成函数调用的编排。对我们这种经常要快速试错的团队它省下的时间非常可观。如果是做底层算法验证或者要精细控制每个环节LangGraph 更合适。它的状态机制可以让你看到智能体每一步在想什么、做了什么这对排错极其重要。它的 Graph 结构跟我们的思维模型很像在分享会上我画图展示时台下的人基本秒懂。另外留意一下本地部署路线的团队Hermes 这类开源智能体相关的模型和框架也有不少人在用部署方式以 Docker 为主Windows 环境如果想跑通建议优先用 WSL2 配合 Docker Desktop直接裸装到 Windows 上会踩很多依赖坑。离线环境里这类部署已成为一个常见的话题前提是显存和内存要足够否则会话延迟会很难受。3.3 成本、延迟和资源预算必须提前算的账智能体循环不是免费的每次调用工具、每次反思、每次最终生成都会产生 token 费用和延迟。传统 RAG 一般是“1 次检索 1 次生成”Agentic RAG 往往是“3 到 6 次模型调用 若干次工具调用”。如果不加控制单次问答成本可以轻易翻十倍。我建议在上线前先算一笔账假设平均每个问题触发 4 次模型调用每次输入 2000 token、输出 400 token那么单次请求的 token 消耗是 9600 token。按主流模型价格估算大概是大语言模型 API 调用成本的 5-8 倍。这还没有算向量库和外部 API 的调用成本。控制成本有几个常用手段给智能体设置最大迭代轮数比如最多 5 轮防止死循环。做一个轻量级路由简单问题走传统 RAG只有检测到多跳、计算、复杂意图时才走 Agentic RAG。可以在入口用一个小模型分类成本极低但能把 70% 的简单请求挡在廉价通道里。工具调用的时候优先并行检索把多个无依赖的检索一次性发出减少循环次数。对中间结果做缓存同一个子问题如果之前检索过直接复用。延迟方面智能体多次顺序调用模型会让用户感知明显变慢。常规做法是先用流式输出把“正在检索/正在分析”的进度反馈给用户同时在 UI 上把每个工具调用步骤透明化。用户看到智能体在一步一步操作耐心会大很多。我在演示时特别注重这点后面细说。4. 我给团队做这场分享时踩过的坑和现场问答这部分的经验原本不在 PPT 里是在现场互动中逼出来的。我觉得比 PPT 本身更有价值。4.1 讲规划与反思一张图胜过十页术语PPT 做多了就会发现概念名词堆得越多听众越迷茫。“规划器”“反思机制”“状态机”这些词抛出去非算法背景的同事眼睛立刻开始失焦。后来我改用了一个生活化类比传统 RAG 是照着菜谱做菜菜谱上没有的菜就做不了Agentic RAG 是厨师自己决定——先看冰箱有什么食材不够就出去买买回来发现缺调料再决定是换菜还是找替代品。每一步都在根据上一部的结果做调整。这个例子他们一下就听懂了。在公司内部我建议分享这类话题时准备两张图第一张画流程对比左边一条直线右边一个带循环回路的拓补图第二张画一个真实的工具调用日志把一次复杂的多跳问答逐步展开。有实际运行轨迹做背书“智能体决策”就不再是玄学。4.2 现场 Demo 翻车复盘超时、幻觉、上下文溢出我那次分享也现场跑 Demo好在只翻车了一次原因很典型一个数据库查询工具没有设置超时外部接口响应了几十秒都没返回整个 Agent 循环卡住用户体验直接归零。后来我所有的工具调用都统一加了 timeout 和错误处理。自那以后我总结了一套 Demo 防翻车清单所有外部工具调用必须设置超时默认 10 秒超时后返回一条“查询超时请重试”的观察结果。演示前把知识库索引建好避免现场临时跑 embedding 的接口限流。选一个多轮追问的案例让智能体展示“重写 query”和“补充检索”的能力这比单纯回答一个 QA 问题更能体现 Agentic RAG 的差异。如果模型出现幻觉现场不要慌可以直接展示一个“验证不通过、触发重新检索”的分支把失败变成教学。我还发现一个容易被忽略的地方上下文溢出。Agentic RAG 的循环会把多次检索结果都累积到 memory 里检索出来的文档如果都很长第二轮时可能已经接近上下文窗口。所以番茄切的 chunk 大小、每次工具返回的文本上限都要提前设置不能贪多。4.3 现场被追问最多的三个工程问题反馈最多的问题永远是那三个我直接把回答放这里。第一个问题是“智能体会不会死循环怎么防”。会而且概率不小。我的答案是三层防护第一层设置最大迭代次数超了就强制终止并返回已收集的信息第二层对重复出现过的动作进行检测发现同一工具同一参数连续被调用超过两次就打断并让模型换策略第三层是在 prompt 里明确要求“如果已经收集到足够信息必须直接回答”。第二个问题是“如何保证引用和答案可追溯”。我要求智能体最终回答必须携带 evidence 列表每个关键结论都对应一条或多条检索来源。这个可以把内部工具调用的记录转成 Markdown 引用格式用户点击引用可以直接跳转到原文。Agentic RAG 因为经过了多轮检索引用来源天然比传统 RAG 复杂所以一定要从第一天就保留中间记录不然后期补追溯方案极其痛苦。第三个问题是“要不要把现有系统全部重写一遍”。我的意见是绝对不要。最稳妥的迁移路线是加一个查询路由器先把所有问题丢给路由器它判断这个问题需要“简单检索”还是“智能体模式”分别路由到老链路和新链路。这样既不影响老系统的稳定性又能让新能力逐步承接复杂流量。按我个人这两年的工程体会Agentic RAG 并不是一个颠覆性的银弹它更像是把“检索-生成”这条线性流水线升级成一个具备判断和行动能力的闭环工作流。它的不同不在于多接了几个工具而在于模型终于能在检索过程中“拿主意”要继续查、要换一种查法、还是已经有足够依据可以直接作答。如果你的 RAG 已经明显撞上了答案不全、不会聚合、无法多跳这些墙Agentic RAG 确实是一个值得认真投入的方向。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进