CRAG:检索评估与纠错
CRAG(Corrective Retrieval Augmented Generation)是一种在生成答案前评估并修正检索结果的 RAG 方法。它用专门训练的检索评估器检查初次取回的资料,再决定精炼原资料、转向外部搜索,或合并两边的知识,最后把处理后的材料交给生成器。
例如,用户问差旅申请多久内提交,检索器却返回了审批后多久支付的条款。两段资料都在说报销,向量相似度可能不低;生成器直接使用返回内容,就可能把“审批通过后 5 个工作日内支付”写成提交期限。CRAG 在读取这些检索结果后作出判断,让缺乏相关资料的请求进入补查路径。
从初次检索到生成答案
CRAG 的处理顺序如下:
问题 → 初次检索 → 检索评估器
├── Correct → 精炼原检索资料 ──────────┐
├── Incorrect → 外部搜索与知识处理 ──────┤
└── Ambiguous → 精炼原资料 + 外部知识 ──┤
↓
生成最终答案三条路径改变的是送给生成器的知识来源和内容。Correct 分支仍会处理原文,避免把相关文档中的大量无关内容全部传给模型;Incorrect 分支放弃原结果;Ambiguous 分支保留可能有用的原资料,并用外部搜索补充。
评估器怎样决定三条分支
检索评估器对问题与每篇检索文档的配对打分,检查文档对当前问题的相关程度。原论文为这个任务训练了轻量模型,其分数来自问题与文档的联合判断,不能直接用向量相似度代替。
设上阈值为 upper,下阈值为 lower,整组候选的决策规则为:
| 判断 | 分数条件 | 采用的资料 |
|---|---|---|
| Correct | 至少一篇文档高于上阈值 | 精炼后的原检索资料 |
| Incorrect | 所有文档都低于下阈值 | 外部搜索取得的知识 |
| Ambiguous | 其余情况 | 精炼后的原资料与外部知识 |
决策发生在候选集合层面。一篇高分文档足以让集合进入 Correct,其他文档中的噪声交由后续知识精炼处理。若没有明显相关的文档,但也不能把整组结果判为无关,就进入 Ambiguous。
这些名称描述评估器对检索质量的判断。Correct 并不保证问题已经被完整覆盖:用户同时问境内与境外规则时,一篇境内制度可能很相关,却只回答了半个问题。阈值也需要随任务与评估器校准;扩大 Correct 的范围会减少补查,同时可能放过较差结果。
知识精炼:拆开文档,再保留相关片段
即使文档整体相关,也可能包含目录、背景说明和其他业务规则。CRAG 的 decompose-then-recompose 先将文档拆成较小的知识片段,再评估片段与问题的关系,过滤无关内容,最后重组保留下来的知识。
例如,检索到的差旅说明写着:
本规定适用于 2026 年境内差旅。
差旅结束后 30 个自然日内提交申请。
审批通过后 5 个工作日内支付。
差旅系统每周日维护。对于“多久内提交”,需要保留的是适用范围、起算事件和提交期限。支付规则和系统维护说明通常不必放入回答上下文。精炼后的材料可以是:
2026 年境内差旅:差旅结束后 30 个自然日内提交申请。这一过程有两层粒度:前面的评估器判断检索集合应该走哪条路径,这里则决定文档内部哪些内容值得保留。分解时若把“本规定适用于 2026 年境内差旅”与后文彻底隔开,片段筛选就可能只留下“30 天”,丢掉答案成立的条件。否定词、适用范围、日期和计量单位都需要随证据保留。
外部搜索如何补救初次检索
原论文在 Incorrect 与 Ambiguous 分支中使用 Web 搜索。系统根据问题构造搜索查询,取得静态知识库之外的材料,经过知识处理后供生成器使用。这个步骤用于寻找初始检索没有提供的信息。
以开放知识问答为例,用户问某项目新版本支持哪些数据库,初次检索库里只有项目背景和安装介绍。评估器将结果判为 Incorrect 后,外部搜索可以围绕项目名、版本号和数据库支持情况寻找发布说明。处理后得到的支持列表成为生成答案的依据,原先不相关的安装介绍不再进入生成上下文。
如果初次检索找到了版本说明,但评估分数既没有达到 Correct 的条件,也没有低到满足 Incorrect,就进入 Ambiguous 分支,同时使用精炼后的原资料和外部搜索结果。合并时要保留版本与来源,避免把旧版列表当作新版能力。
原论文的外部搜索面向开放知识任务。用于公司制度时,需要将补救来源改成获准的内部资料库,或在没有可用来源时报告缺失。网上的报销说明无法证明一家公司的制度。这属于沿用 CRAG 控制思路的工程调整,外部来源及可发送的查询内容应由应用事先限定。
与重排、重新检索有什么区别
Reranker 对已有候选重新排序,优先把更相关的文档交给生成器。如果初始候选全部答非所问,重排无法从中产生缺失的知识。CRAG 会在这种情况下切换知识来源,再处理新取得的内容。
直接改写问题并重新检索,也可以改善召回。CRAG 增加了明确的决策依据:先评价原结果,再决定保留、放弃还是与新资料结合。原结果有用时,知识精炼负责减少噪声;原结果不足时,搜索分支负责取得补充知识。用通用 LLM 提示词代替专门训练的评估器,可以实现类似分支,但其评分方式和阈值需要重新确定,不能直接套用论文评估器的配置。
代价主要来自逐篇评估、片段筛选和部分请求的外部搜索。候选数量越多,评估工作越多;Ambiguous 分支触发得越频繁,补查成本越高。应用是否值得加入 CRAG,取决于差结果出现的频率,以及补救来源能否提供更好的证据。只有几十条简短 FAQ 时,改善召回与重排通常更容易先验证。