研究背景
现在大家用LLM做复杂问答的时候,Agentic RAG(智能检索增强生成)已经成了主流方案。简单说就是让模型一边推理、一边检索、一边生成,像侦探破案一样一步步拼凑答案。但问题来了——推理链越长,出错的概率就越高。一旦某一步出了问题,整个答案就可能跑偏。
现有的"修复"方案普遍存在一个毛病:要么只分析错误但不动手修,要么干脆把整个推理过程从头再来一遍(rerun)。后者就好比你做一道数学题算错了最后一步,然后把整张草稿纸撕掉重新算——费时费力,还不一定比原来好。
这篇论文提出的Doctor-RAG(DR-RAG)就是要解决这个问题:出错之后,能不能像外科医生一样,精准定位病灶,只切除有问题的那一段,其余健康的部分保留下来?
论文的核心贡献有三点:第一,首次把Agentic RAG的失败处理正式建模为"诊断+局部修复"的系统级问题;第二,提出了一套基于证据覆盖率的错误分类体系,并能在轨迹层面定位最早的出错点;第三,设计了对应的局部修复算子,最大程度复用已验证的推理前缀,大幅降低修复成本。
相关工作
这个领域的相关工作大致可以分两拨。
一拨是专门研究RAG系统诊断的,比如RAGChecker,它做了很精细的错误分析,能告诉你哪里出了问题,但就是不帮你修——分析完就撂挑子了。
另一拨是把诊断和修复都做了的,代表是RAG-Critic。它的思路是:发现错误 → 重新规划 → 整个pipeline重跑一遍。听起来比第一拨强,但本质上还是"推倒重来",之前推理对的那些步骤全白做了,token消耗巨大。
DR-RAG的差异化在于:它不只是说"这里错了",还会说"从第几步开始错的",然后只修那一步,之前对的全部保留复用。这个思路在Agentic RAG的修复领域之前几乎没人做过。
核心方法
DR-RAG的整体流程分两大阶段:错误诊断与定位,以及工具条件化的局部修复。
第一阶段:诊断
给定一条失败的推理轨迹y={ρ(1),ρ(2),…,ρ(K),apred}y = \{\rho^{(1)}, \rho^{(2)}, \ldots, \rho^{(K)}, a_{\text{pred}}\}y={ρ(1),ρ(2),…,ρ(K),apred},诊断模块的目标是输出一个结构化的诊断结果(c,k†)(c, k^\dagger)(c,k†),其中ccc是错误类型,k†k^\daggerk†是最早出错的动作位置。
诊断的第一步是判断证据覆盖率Cov(y)∈{0,1}\text{Cov}(y) \in \{0, 1\}Cov(y)∈{0,1}:已检索到的文档够不够回答这个问题?这个信号非常关键,它直接决定了后续能出什么错。
- 如果Cov(y)=1\text{Cov}(y) = 1Cov(y)=1(证据充分),说明检索没问题,错误只可能出在推理逻辑或者答案格式上;
- 如果Cov(y)<1\text{Cov}(y) < 1Cov(y)<1(证据不足),除了格式错误,还可能是检索器本身不行,或者推理走偏导致搜索方向错了。
在确定错误类型之后,系统进一步定位最早出错的动作索引:
k†=min{k∣ρ(k) 被判定为错误}k^\dagger = \min\{k \mid \rho^{(k)} \text{ 被判定为错误}\}k†=min{k∣ρ(k)被判定为错误}
k†k^\daggerk†之前的所有步骤都被视为"健康前缀",可以复用;k†k^\daggerk†之后的部分丢弃重来。
第二阶段:局部修复
根据诊断结果,系统选择对应的修复算子f=S(c)f = \mathcal{S}(c)f=S(c),不同错误类型对应不同的处理策略:
- 格式错误:推理和检索都没问题,只需要重新生成最终答案,格式改对就行;
- 推理逻辑错误(证据充分时):把轨迹截断到k†k^\daggerk†,保留前缀,把已检索的所有文档聚合起来,让模型重新推理:
D(y)=⋃ρ∈D(y)ρD(y) = \bigcup_{\rho \in \mathcal{D}(y)} \rhoD(y)=ρ∈D(y)⋃ρ
不触发任何新检索,只修推理; - 检索器失效:查询本身没问题但检索没找到,对k†k^\daggerk†之前的查询做改写,同时扩大检索的top-k,再重新生成答案;
- 推理导致检索跑偏:这是最复杂的情况,需要从截断点重新规划整个解题路径,推理和检索都重做,但前缀仍然保留。
这套设计的精髓就是:精准到哪里坏了,就只修哪里,已经验证正确的步骤一律复用。
实验效果
论文在HotpotQA、2Wiki、MuSiQue三个多跳问答基准上进行了测试,使用了Qwen3-8B、Qwen3-4B、LLaMA-3.1-8B-Instruct三个不同的骨干模型,对比了直接重跑(Rerun)、逐步重试(Step-wise)、RAG-Critic三种基线修复策略。
结果相当明显。以Qwen3-8B + ReAct为例,DR-RAG在HotpotQA上的EM提升达到+25.8%,在2Wiki上+19.6%,在MuSiQue上+10.0%,同时token消耗比重跑策略降低了约35%。而RAG-Critic虽然修复率比重跑高一点,但token消耗反而是最多的——在某些设置下甚至是DR-RAG的3倍以上。
消融实验也验证了两个核心组件缺一不可:去掉错误分类(w/o Taxonomy),EM增益平均下降约3-4个点;去掉错误定位(w/o Localization),token消耗平均多出约1000个,因为没有精确定位就得重做更多步骤。
在诊断准确率方面,自动诊断模块在人工标注对比下的准确率稳定在60%左右,覆盖充分和不充分两种情况下表现接近。论文也做了oracle实验——假设诊断完全准确的情况下,修复率还能再提升约10-15个百分点,说明未来进一步提升诊断精度仍有很大空间。
论文总结
RAG系统出错之后不应该"一刀切"地重跑全流程,而是要像看诊一样,先搞清楚是哪种病、病在哪里,然后只对患处动刀——Doctor-RAG正是把这个常识做成了一套系统,在提升修复效果的同时,把计算开销压到了最低。