首页 / 资讯中心 / 文章详情

Agentic RAG 工业落地实战:从检索决策到证据核验的工程化指南

Agentic RAG 工业落地实战:从检索决策到证据核验的工程化指南 ★ FEATURED ARTICLE
1. Agentic RAG 到底在解决什么问题1.1 从“检索一次就完事”到“边查边想边验证”传统 RAG 的流程做过的人都很熟用户问一个问题系统把问题转成向量去向量库里捞 Top-K 个片段拼进 Prompt交给大模型生成答案。这个链路在 Demo 阶段看着很惊艳但一上生产环境问题就全暴露出来了。最典型的就是检索回来的内容跟问题只是“表面相似”实际答非所问或者检索到的片段之间互相矛盾模型不知道该信谁再或者问题本身需要多跳推理一次检索根本覆盖不了。Agentic RAG 的核心思路就是把“检索”从一个静态步骤变成一个动态的、由 Agent 驱动的决策循环。Agent 不再是被动地接受一次检索结果而是主动判断我现在掌握的信息够不够需不需要再查一次该查什么关键词查回来的东西可信吗要不要交叉验证这个循环可以跑很多轮直到 Agent 自己认为证据充分了才输出最终答案。我自己的理解是传统 RAG 像是一个“开卷考试只允许翻一次书”的学生而 Agentic RAG 像是一个“可以反复翻书、做笔记、对比不同章节、甚至去查参考文献”的研究者。这个差别在简单事实性问答上不明显但一旦问题涉及多步推理、时效性信息、或者需要综合多个来源差距就是断崖式的。1.2 工业界为什么开始押注 Agentic RAG从我在实际项目中观察到的情况来看工业界转向 Agentic RAG 的驱动力主要有三个。第一是准确率的天花板。传统 RAG 在开放域问答上的准确率做到一定程度就上不去了。原因很简单单次检索的召回率和精确率之间存在天然矛盾。你调大 Top-K召回率上去了但噪声也多了你调小 Top-K精确率高了但容易漏掉关键信息。Agentic RAG 通过多轮检索和证据筛选可以在不牺牲精确率的前提下提升召回。第二是复杂查询的刚需。企业级场景里用户的问题往往不是“某某产品的保修期是多久”这种单跳问题而是“对比 A 产品和 B 产品在过去三个季度的用户投诉趋势并分析主要原因”。这种问题需要拆解、需要多源检索、需要时间序列对比传统 RAG 根本搞不定。第三是可解释性和可信度。在金融、医疗、法律这些领域答案不仅要对还要能说清楚“为什么对”。Agentic RAG 的检索-验证循环天然产生了一条证据链每一步检索了什么、验证了什么、排除了什么都可以记录下来这对合规和审计来说价值巨大。1.3 一个典型的 Agentic RAG 决策循环长什么样我拿一个实际跑过的例子来说明。假设用户问“我们公司的主力产品在最近一次大版本更新后用户留存率的变化趋势如何跟竞品相比处于什么位置”传统 RAG 的做法是把这个问题向量化去知识库里捞相关文档拼起来让模型回答。结果大概率是模型编一个看起来合理但实际没有数据支撑的答案。Agentic RAG 的做法是这样的第一轮Agent 先判断这个问题需要哪些信息——需要内部产品的留存数据、需要竞品的留存数据、需要版本更新的时间点。然后分别构造检索 query去不同的数据源检索。第二轮Agent 拿到第一轮结果后发现内部留存数据只有更新后一周的不够。于是主动发起第二轮检索专门找更新后一个月的数据同时去查竞品同期有没有做类似更新。第三轮Agent 发现两个数据源对“留存率”的定义不一样一个是次日留存一个是七日留存。于是触发证据核验流程去查找公司内部的数据字典确认口径。最终Agent 确认所有关键数据点都有可靠来源且口径一致才开始生成答案并在答案中标注每个数据的来源和口径。这个循环里Agent 做了检索决策、证据核验、口径对齐三件事每一件都是传统 RAG 做不到的。2. 检索环节的深水区从意图识别到多路召回2.1 意图识别不是分类问题是决策问题很多人做 Agentic RAG 的时候第一步就踩坑把意图识别当成一个文本分类任务训练一个模型来判断用户问题属于哪个类别然后走对应的检索策略。这个做法在简单场景下能用但一旦问题复杂一点就崩了。原因在于用户的真实意图往往不是单一的而是复合的。比如“帮我看看最近有没有关于我们行业的新政策顺便对比一下去年同期的变化”这里面既有“找新政策”的检索意图又有“对比时间序列”的分析意图还有“判断相关性”的筛选意图。你把它硬塞进一个分类标签里信息就丢了。我在实际项目里的做法是把意图识别做成一个决策树式的推理过程而不是一个分类器。Agent 先对问题做一次“信息需求分析”拆出几个关键维度需要什么类型的信息事实、数据、观点、对比、需要什么时间范围、需要什么粒度、有没有隐含的约束条件。然后根据这些维度动态生成检索策略。这个过程的实现可以用 Prompt 工程来做也可以用轻量级的 Agent 框架。关键是不要让模型直接输出一个类别标签而是让它输出一个结构化的“检索计划”包含多个检索子任务和每个子任务的参数。2.2 多路召回的策略设计与权重分配Agentic RAG 的检索环节通常不会只用一种召回方式。我一般会同时跑三路召回向量召回、关键词召回、以及基于知识图谱的实体召回。向量召回负责语义相似度适合处理“意思相近但用词不同”的情况。关键词召回负责精确匹配适合处理专有名词、产品代号、法规编号这类不能模糊的东西。知识图谱召回负责关系推理适合处理“A 和 B 是什么关系”“C 属于哪个类别”这类问题。三路召回的结果需要融合。最简单的做法是加权求和但权重怎么定是个问题。我的经验是不要用固定权重而是让 Agent 根据问题类型动态调整。比如问题里出现了明确的产品代号关键词召回的权重就调高问题是在问“类似”“相关”这种模糊关系向量召回的权重就调高问题涉及组织架构或分类体系图谱召回的权重就调高。具体实现上我会给每一路召回的结果打一个“置信分”这个分由检索时的相似度分数、以及 Agent 对检索源可靠性的先验判断共同决定。然后做归一化再按动态权重融合。这个流程听起来复杂但用 LangChain 或 LlamaIndex 的现有组件搭起来代码量并不大。2.3 检索粒度段落、句子还是知识单元检索粒度是个很容易被忽视但影响巨大的参数。很多人默认用段落做检索单元因为实现简单。但段落的问题是一个段落里可能只有一句话是真正相关的其他都是噪声。你把整个段落塞进 Prompt既浪费 token又干扰模型判断。我的做法是分层检索。第一层用段落做粗筛快速缩小范围第二层在粗筛结果里做句子级或知识单元级的精筛。知识单元的定义可以根据领域来定比如法律领域可以按“法条”拆医疗领域可以按“症状-诊断-治疗”三元组拆。这个分层检索的逻辑本质上是用计算换精度。粗筛阶段用便宜的向量检索精筛阶段用贵一点的重排序模型或者 LLM 判断。整体延迟增加不多但检索质量提升很明显。实操心得分层检索的精筛阶段不要用 LLM 直接判断“这句话相不相关”而是让 LLM 输出一个 0 到 1 的相关性分数然后设一个阈值。直接判断相关/不相关模型会倾向于说“相关”导致精筛效果打折扣。2.4 检索结果的重排序与去重多路召回之后结果里一定有重复和冗余。去重不能只靠文本完全匹配因为同一个信息可能用不同的话说出来。我一般用语义去重把召回结果两两计算语义相似度超过阈值的只保留置信分最高的那个。重排序则是另一个关键步骤。向量检索的相似度分数和“这个片段对回答当前问题有多有用”并不是一回事。我会用一个交叉编码器或者小型的重排序模型对粗筛后的结果重新打分。这个步骤在工业界已经是标配了但很多人为了省事跳过结果就是检索质量差一截。重排序之后还有一个容易被忽略的步骤多样性检查。如果 Top-K 结果里全是同一个来源的片段那说明检索可能陷入了局部最优。这时候 Agent 应该主动发起补充检索去其他来源找不同视角的信息。3. 证据核验让 Agent 学会“不轻信”3.1 证据冲突的检测与消解Agentic RAG 跟传统 RAG 最大的区别之一就是它会遇到“多个来源说法不一致”的情况。传统 RAG 的做法是把所有片段都塞给模型让模型自己看着办。结果就是模型要么随机选一个要么把矛盾的说法混在一起生成一个四不像的答案。我的做法是在检索和生成之间加一个证据核验层。这个层的核心任务有三个检测冲突、评估来源可靠性、决定采信策略。检测冲突可以用 NLI自然语言推理模型来做。把两个片段配对判断它们是蕴含、中立还是矛盾。如果检测到矛盾就进入消解流程。消解流程的第一步是来源可靠性评估。我会给每个数据源打一个先验的可靠性分数这个分数基于几个维度来源的权威性官方文档 vs 用户评论、时效性发布时间、以及历史准确率如果之前用过这个来源可以追踪它的准确率。然后结合片段本身的质量信息密度、是否有引用、是否有数据支撑算出一个综合可靠性分。第二步是采信策略。如果两个矛盾片段的可靠性分差距很大直接采信高的那个。如果差距不大Agent 应该主动发起补充检索去找第三个来源来“投票”。如果找不到就在最终答案里明确标注“存在不同说法”并列出各自的来源。3.2 事实性校验让 Agent 自己查自己生成答案之后还有一个步骤很多人不做但非常重要事实性校验。具体做法是把生成的答案拆成若干个事实性陈述然后对每个陈述去检索库里验证是否有支撑证据。这个步骤听起来像是“自己查自己”但实际效果很好。因为模型在生成的时候可能会把检索到的信息“加工”过头比如把“可能”说成“一定”把“部分”说成“全部”。事实性校验可以抓住这些过度推断。实现上我会用一个轻量级的 Agent 来做这件事把答案拆成陈述列表对每个陈述生成一个验证 query去检索库查证。如果某个陈述找不到支撑证据就标记为“待确认”在最终输出里降级处理。注意事实性校验会增加延迟不是所有场景都需要。我的经验是在金融、医疗、法律这些高风险领域必须做在一般性的知识问答里可以做成可选项。3.3 引用溯源每个结论都要有出处Agentic RAG 的输出应该做到“每个关键结论都能追溯到具体来源”。这不仅是合规要求也是提升用户信任度的关键。实现引用溯源需要在生成阶段就让模型输出结构化的结果而不是一段纯文本。我会要求模型用特定的标记来标注每个结论的来源比如[来源:文档ID,片段ID]。然后在后处理阶段把这些标记替换成可点击的引用链接或者脚注。这个做法有个额外好处当用户质疑某个结论时你可以直接定位到原始片段快速排查是检索错了还是生成错了。没有引用溯源的话排查问题就像大海捞针。3.4 证据链的构建与可视化在深度研究场景里证据链的构建比单个答案的准确性更重要。因为用户需要的不是“一个答案”而是“一个可以自己判断的推理过程”。我会把 Agent 的每一步检索、每一次验证、每一个采信决策都记录下来形成一个有向图。节点是检索到的片段和中间结论边是推理关系支持、反驳、补充。这个图可以可视化出来让用户看到 Agent 是怎么一步步得出结论的。这个功能在内部复盘时特别有用。当某个答案出错时你可以沿着证据链回溯看是哪一步检索偏了还是哪一步验证漏了还是哪一步采信策略错了。没有证据链的话你只知道“答案错了”但不知道为什么错。4. 长程研究当 Agent 需要跑几十轮检索4.1 长程研究的任务拆解与规划“长程研究”这个词听起来很玄但拆开来看核心就是一个复杂问题需要几十轮甚至上百轮检索和推理才能回答。比如“分析过去五年我们这个行业的竞争格局变化并预测未来两年的趋势”这种问题不可能靠一次检索搞定。Agent 需要先做任务规划把大问题拆成子问题子问题再拆成更小的检索任务。这个拆解过程本身就可以用 Agent 来做。我会给 Agent 一个“研究计划模板”让它按照模板来拆解而不是完全自由发挥。模板里包含几个固定维度时间范围、地理范围、关键实体、关键指标、对比基准。拆解完之后Agent 需要排优先级。不是所有子问题都同等重要有些是核心问题有些是辅助问题。我会让 Agent 给每个子问题打一个“信息增益”分数预估解决这个问题能带来多少新信息。然后按分数排序优先解决高增益的子问题。4.2 中间结论的管理与复用长程研究跑几十轮之后会产生大量的中间结论。这些结论如果不好好管理Agent 就会“忘了自己之前查过什么”导致重复检索或者逻辑断裂。我的做法是维护一个结构化的工作记忆。每轮检索后Agent 把新获得的信息整理成结构化的条目包含结论内容、来源、置信度、与其他结论的关系。这个工作记忆会随着研究进展不断更新旧的结论可能被新证据推翻也可能被强化。工作记忆的另一个作用是支持回溯。当 Agent 在某一轮发现之前的某个结论有问题时它可以快速定位到那个结论并沿着依赖关系找到所有受影响的后续结论进行修正。没有工作记忆的话这种修正根本做不了。4.3 研究进度的评估与终止条件长程研究最怕的就是“跑不完”或者“跑偏了”。所以需要一套进度评估机制让 Agent 知道什么时候该继续什么时候该停。我会设几个终止条件一是信息饱和当连续几轮检索都没有带来新的关键信息时说明已经查得差不多了二是置信度达标当核心子问题的结论置信度都超过阈值时可以停止三是预算耗尽设一个最大轮数或最大 token 消耗到了就强制停止输出当前最好的结果。进度评估的另一个维度是方向校正。Agent 在跑的过程中可能会发现最初的任务拆解有问题比如某个子问题其实不重要或者漏掉了某个关键维度。这时候需要允许 Agent 动态调整研究计划而不是死板地按原计划跑到底。4.4 效率边界什么时候该停什么时候该换策略Agentic RAG 的效率边界是个很实际的问题。我见过不少项目Agent 跑得很“勤奋”但大部分轮次都是在做无用功。原因通常是两个一是检索策略没有动态调整一直在用同一种方式查二是终止条件设得太宽松Agent 不知道什么时候该停。我的经验是给 Agent 设一个边际收益阈值。每轮检索后计算这轮带来的信息增益。如果连续两轮的增益都低于阈值就触发策略切换换检索源、换检索粒度、或者换检索方式。如果切换后还是低增益就终止。另一个技巧是并行化。不是所有检索都需要串行有些子问题之间没有依赖关系可以并行检索。这样能大幅缩短长程研究的整体耗时。但并行化会增加结果融合的复杂度需要 Agent 有更强的协调能力。5. 工业界实战中的坑与应对5.1 检索质量不稳定从数据源治理开始Agentic RAG 的检索质量很大程度上取决于底层数据源的质量。我踩过最大的坑就是花了很多精力优化 Agent 的决策逻辑但底层知识库本身就很乱导致怎么调都调不好。数据源治理包括几个方面格式统一PDF、Word、HTML 都转成结构化文本、去重同一份文档的多个版本只保留最新、元数据补全每份文档都要有来源、时间、作者、版本等元数据、质量分级给每个数据源打可靠性标签。这些工作很枯燥但省不掉。我的经验是数据源治理做得好Agentic RAG 的效果能提升 30% 以上做得不好再精巧的 Agent 逻辑也救不回来。5.2 延迟与成本的平衡不是所有问题都需要 AgentAgentic RAG 比传统 RAG 慢这是事实。多轮检索、证据核验、事实性校验每一步都要时间。在工业界延迟直接影响用户体验所以不能无脑上 Agent。我的做法是分级处理。先用一个轻量级的分类器判断问题的复杂度简单问题走传统 RAG中等复杂度走单轮 Agent高复杂度才走多轮 Agent。这个分类器不需要很准只要能把明显简单的问题过滤掉就行。成本方面主要是 token 消耗。多轮检索意味着多次调用 LLM成本会成倍增加。我会设一个成本预算每个请求分配一个 token 上限Agent 在这个预算内自由分配。超预算就降级处理输出当前最好的结果。5.3 评估体系怎么知道 Agent 干得好不好Agentic RAG 的评估比传统 RAG 复杂得多。传统 RAG 主要看答案准确率但 Agentic RAG 还要看检索效率、证据质量、推理链合理性。我一般会建三个维度的评估结果维度答案准确率、引用准确率、覆盖率、过程维度检索轮数、无效检索比例、证据冲突解决率、效率维度平均延迟、token 消耗、成本。评估数据的来源一是人工标注二是用 LLM 做自动评估。人工标注准但贵自动评估便宜但可能有偏差。我的做法是用自动评估做日常监控用人工标注做定期校准。两者结合既能保证评估频率又能保证评估质量。5.4 常见问题速查表问题现象可能原因排查方向应对措施答案答非所问检索意图识别错误检查意图拆解日志优化意图识别 Prompt增加 few-shot 示例答案包含矛盾信息证据核验缺失检查是否有冲突检测加入 NLI 冲突检测和来源可靠性评估检索结果重复率高去重策略太弱检查去重阈值改用语义去重降低相似度阈值Agent 跑太多轮终止条件太宽松检查边际收益计算设边际收益阈值连续低增益则终止延迟太高串行检索太多检查检索依赖图并行化无依赖的检索任务成本超预算每轮都调用大模型检查模型调用策略粗筛用轻量模型精筛才用大模型引用找不到出处生成时没标注来源检查输出格式强制模型输出结构化引用标记长程研究跑偏任务拆解不合理检查研究计划加入动态计划调整机制实操心得这张表里的问题我几乎每个都踩过。最耗时的不是解决问题本身而是定位问题。所以我的建议是从第一天就把日志和追踪做好每个环节的输入输出都记录下来。没有日志的话排查问题就是盲人摸象。6. 几个容易被忽视的工程细节6.1 向量库的索引策略与更新机制向量库的索引策略直接影响检索速度和召回质量。我一般会用 HNSW 做近似最近邻搜索因为它在速度和精度之间平衡得比较好。但 HNSW 有个问题更新代价高。如果知识库频繁更新HNSW 的索引重建会很耗时。我的做法是冷热分离。热数据最近三个月更新的文档用 HNSW 索引保证检索速度冷数据更早的文档用 IVF 索引更新代价低。检索时先查热数据如果结果不够再查冷数据。这样既保证了时效性又控制了更新成本。更新机制方面我会用增量更新 定期全量重建的组合。增量更新处理日常的小批量新增定期全量重建比如每月一次来清理碎片和优化索引结构。6.2 Prompt 工程让 Agent 输出结构化决策Agentic RAG 的 Prompt 设计跟传统 RAG 很不一样。传统 RAG 的 Prompt 主要是“把检索结果拼进去让模型回答”。Agentic RAG 的 Prompt 需要让模型输出结构化的决策比如“我需要再检索一次query 是 XXX检索源是 YYY”。我的做法是用 JSON Schema 来约束模型的输出格式。每次让模型做决策时都要求它输出一个符合 Schema 的 JSON包含决策类型、参数、理由。这样后处理代码可以直接解析不需要做复杂的文本解析。这个做法有个额外好处可以强制模型“说出理由”。当模型输出“我需要再检索一次”时必须同时输出“因为当前信息缺少 XXX”。这个理由字段在调试时特别有用能快速定位模型决策的逻辑。6.3 缓存策略哪些结果可以复用Agentic RAG 的很多检索是重复的。比如多个用户问类似的问题或者同一个研究任务里多次检索同一个实体。如果不做缓存会浪费大量计算资源。我会做两级缓存。第一级是查询级缓存把用户 query 的向量和检索结果缓存起来下次遇到相似 query 直接返回。第二级是片段级缓存把检索到的片段和它的元数据缓存起来避免重复从向量库拉取。缓存的失效策略也很重要。对于时效性强的数据比如新闻、股价缓存时间要短对于静态知识比如产品文档、法规缓存时间可以长。我会给每个数据源打一个“时效性标签”根据标签决定缓存时长。6.4 多租户场景下的隔离与共享在企业级部署里Agentic RAG 往往要服务多个租户。租户之间的数据要隔离但有些公共知识比如行业标准、通用法规可以共享。我的做法是逻辑隔离 物理共享。每个租户有自己的向量库命名空间检索时只查自己命名空间的数据。公共知识放在一个共享命名空间里所有租户都可以查。检索时Agent 先查租户私有数据再查共享数据最后融合结果。这个架构的关键是权限控制。Agent 在检索共享数据时要检查租户是否有权限访问。这个检查不能只靠 Agent 自己判断要在检索层做硬性拦截防止越权。7. 从论文到落地哪些能直接用哪些要改造7.1 论文里的方法在工业界的适配问题Agentic RAG 相关的论文很多但直接拿来用的很少。主要问题是论文的实验环境太理想化数据集干净、问题类型单一、评估指标简单。工业界的场景要复杂得多。我举几个具体的适配问题。论文里常用的“多轮检索”策略在工业界可能因为延迟要求而不可行。论文里假设的“可靠来源”在工业界可能根本不存在所有来源都有噪声。论文里用的评估指标比如 Exact Match在工业界可能不适用因为用户要的是“有用”而不是“精确匹配”。我的做法是把论文里的方法当成“思路来源”而不是“实现方案”。理解它背后的核心思想然后根据实际场景重新设计实现。比如论文里用 NLI 做冲突检测工业界可以用更轻量的规则引擎加小模型来做效果差不多但快很多。7.2 自研 vs 框架怎么选Agentic RAG 的实现可以用 LangChain、LlamaIndex 这些框架也可以自研。我的经验是原型阶段用框架生产阶段自研。框架的好处是上手快组件齐全适合快速验证想法。但框架的问题是抽象层太厚出问题时很难定位而且性能优化空间有限。生产环境对延迟、成本、稳定性要求高框架往往满足不了。自研的话核心组件其实不多检索器、重排序器、证据核验器、决策 Agent。每个组件都可以用现成的模型或库来实现不需要从零造轮子。自研的好处是可控性强每个环节都可以针对性优化。我的建议是先用框架跑通流程验证效果。效果达标后把性能瓶颈环节用自研替换。逐步替换而不是一次性重写。7.3 团队能力建设需要什么样的人Agentic RAG 的落地需要几种不同能力的人。检索工程师负责向量库、索引、召回策略NLP 工程师负责意图识别、重排序、证据核验Agent 工程师负责决策逻辑、任务规划、工作记忆后端工程师负责服务化、缓存、监控。小团队的话一个人可能要兼几个角色。我的经验是最核心的能力是检索和 NLP因为这两个环节直接决定效果上限。Agent 的决策逻辑可以慢慢调但检索质量不行的话怎么调都白搭。另外评估能力也很重要。没有好的评估体系就不知道优化有没有效果。我一般会安排一个人专门负责评估数据的标注和评估流程的维护。7.4 从单点优化到系统优化Agentic RAG 的优化不能只盯着单点。我见过很多项目检索优化得很好但生成环节拖后腿或者生成很好但检索召回不够。系统优化需要全局视角。我的做法是先建一个端到端的评估基线知道当前系统在各个环节的表现。然后找瓶颈环节针对性优化。优化后重新评估看整体效果有没有提升。如果单点优化了但整体没提升说明瓶颈不在那里要重新找。这个循环听起来简单但实际操作中很容易陷入“局部最优”。比如花了很多时间优化检索检索指标上去了但端到端指标没变因为瓶颈其实在生成环节。所以一定要以端到端指标为准而不是单点指标。8. 一些个人体会Agentic RAG 这个方向我从早期论文追到工业落地最大的感受是它不是一个技术问题而是一个工程问题。论文里的方法都很优雅但落地时要处理的是数据脏、延迟高、成本贵、评估难这些脏活累活。我踩过的最大的坑是早期太追求“Agent 的智能”把太多决策交给模型结果模型经常做出莫名其妙的决策。后来我调整了思路把 Agent 的决策空间收窄用规则和模板约束它只在关键节点让它做选择。这样效果反而更稳定。另一个体会是评估体系比算法更重要。没有好的评估你就不知道优化有没有效果也不知道问题出在哪里。我现在的做法是每做一个改动都要有对应的评估数据来验证。没有数据支撑的改动一律不做。最后分享一个小技巧从简单场景开始逐步增加复杂度。不要一上来就做长程研究先从单轮 Agent 做起跑通了再加多轮再加证据核验再加长程规划。每一步都验证效果确保基础扎实再往上加。这样虽然看起来慢但实际比一步到位再回头修 bug 要快得多。
阅读完成 · 觉得有帮助?
咨询建站