Skip to content

12.3.1 什么是纠错型 RAG(Corrective RAG / CRAG)? ​

先给结论:纠错型 RAG 的核心不是“再检索一次”,而是“先判断检索结果是否可信,再决定是否纠错”。它把“检索质量评估”和“纠错动作”显式化,从而稳定质量。

传统 RAG 的隐患在于:检索一旦出错,生成会被错误证据放大。纠错型 RAG 的思路是先判断“当前检索是否足够可靠”,不可靠就触发纠错策略。

纠错型 RAG 解决的核心问题 ​

  • 检索结果偶发失效,导致输出质量波动
  • 检索内容相关但不完整,生成被“半正确证据”误导
  • 复杂问题需要“检索后再检索”,但没有明确触发条件

纠错型 RAG 的基本流程 ​

一个可落地的 CRAG 流程通常包含三步:

  1. 检索:先得到候选文档或 chunk
  2. 质量评估:判断相关性、覆盖度、证据充分性
  3. 纠错动作:触发改写、扩展检索或切换策略

最小流程示意(伪代码):

python
def crag_pipeline(query):
    candidates = retrieve(query)
    score = assess_retrieval(query, candidates)
    if score < 0.6:
        query = rewrite_query(query)
        candidates = retrieve(query, mode="hybrid")
    return generate(query, candidates)

关键点不在“模型”,而在“让检索质量先被评估,再决定是否纠错”。

质量评估怎么做 ​

评估不是一句“相关/不相关”,而是结构化判断:

  • 相关性:候选是否真的回答了问题
  • 覆盖度:答案所需的关键条件是否被覆盖
  • 冲突性:候选之间是否互相矛盾

最常见的实现方式:

  • 用轻量分类器或 LLM 进行 relevance 判定
  • 用规则判断“是否命中关键术语 / 编号 / 条件”
  • 对候选做一致性检查(例如同一问题的不同证据是否冲突)

常见纠错策略 ​

纠错动作的目标是“更换检索路径”,不是“重复检索”。常见策略包括:

  • 查询改写:让检索信号更贴近真实需求
  • 扩大召回:提高 top-k 或增加检索器
  • 切换策略:从语义检索切换到关键词或结构化检索
  • 多阶段检索:先定位范围,再在范围内检索

你可以把纠错动作看成“检索路由”,而不是“检索重跑”。

什么时候纠错型 RAG 最有效 ​

出现这些现象时,CRAG 往往是最小改动、最大收益的选择:

  • 质量明显波动,同类问题时好时坏
  • 命中内容相关但不完整,答案经常“差一口气”
  • 模型输出看似合理,但证据缺失或不一致

常见误区 ​

误区一:纠错就是“再检索一次” ​

纠错应该改变检索路径或信号,而不是重复同一策略。否则它只会放大噪声。

误区二:纠错依赖重模型 ​

纠错的关键是“判定 + 路由”,轻量规则也能显著改善稳定性。不要把所有问题都堆给模型。

误区三:纠错就能解决所有质量问题 ​

纠错解决的是“检索质量不稳定”,不是“知识本身不存在”。数据覆盖不足时,纠错只会让你更快失败。

自检清单 ​

  • 是否有明确的“检索质量评估”步骤?
  • 纠错动作是否真的改变了检索路径?
  • 纠错后的结果是否更完整、更一致?

一句话总结 ​

纠错型 RAG 的核心是“先判定,再纠错”。只要你的检索质量不稳定,CRAG 就是最直接、最工程化的升级路径。