Appearance
12.3.1 什么是纠错型 RAG(Corrective RAG / CRAG)?
先给结论:纠错型 RAG 的核心不是“再检索一次”,而是“先判断检索结果是否可信,再决定是否纠错”。它把“检索质量评估”和“纠错动作”显式化,从而稳定质量。
传统 RAG 的隐患在于:检索一旦出错,生成会被错误证据放大。纠错型 RAG 的思路是先判断“当前检索是否足够可靠”,不可靠就触发纠错策略。
纠错型 RAG 解决的核心问题
- 检索结果偶发失效,导致输出质量波动
- 检索内容相关但不完整,生成被“半正确证据”误导
- 复杂问题需要“检索后再检索”,但没有明确触发条件
纠错型 RAG 的基本流程
一个可落地的 CRAG 流程通常包含三步:
- 检索:先得到候选文档或 chunk
- 质量评估:判断相关性、覆盖度、证据充分性
- 纠错动作:触发改写、扩展检索或切换策略
最小流程示意(伪代码):
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 就是最直接、最工程化的升级路径。