十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

纠错型 RAG(Corrective RAG, CRAG):检索结果的自评估与外部补救检索

纠错型 RAG(Corrective RAG, CRAG):检索结果的自评估与外部补救检索 纠错型 RAGCorrective RAG, CRAG检索结果的自评估与外部补救检索在传统的 RAG检索增强生成架构中系统始终存在一个盲目的假设“只要向量库返回了 Top-K 的文档这些文档就一定是相关的、正确的直接拼进 Prompt 即可”。然而在真实的生产环境中检索器Retriever经常会返回低质量甚至是彻底错误的结果语义漂移Semantic Drift用户提问了一个极冷门的技术名词向量库由于缺少精准文档强行拉出了几个高余弦相似度但实际风马牛不相及的废弃段落过时事实与信息缺失Stale / Missing Info私有知识库里根本没有收录该新发布的产品政策或最新的行业资讯。如果大模型直接基于这些错误的、无关的文档进行生成就会产生极其自信的“依据噪音胡编乱造Hallucination on Noise”。Corrective RAGCRAG纠错型 RAG彻底打破了对检索结果的盲目信任。它在检索与最终生成之间插入了一个独立的“检索质量自评估器Retrieval Evaluator”根据评估置信度动态决定是直接使用、提纯修正、还是触发外部搜索引擎Web Search进行跨源补救检索。一、CRAG 的核心决策流拓扑模型[ 用户 Query ] ──► [ 私有向量库检索 (Internal Retrieval) ] │ ▼ ┌────────────────────────────────────────────────────────┐ │ 检索评估器 (Retrieval Evaluator / Self-Correction) │ │ 计算检索文档切片与 Query 的综合相关度置信度 │ └──────────────────────────────┬─────────────────────────┘ │ ┌────────────────────────┼────────────────────────┐ ▼ (置信度高 Correct) ▼ (置信度低 Incorrect) ▼ (置信度模糊 Ambiguous) ┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐ │ 模式 1: 知识提纯 │ │ 模式 2: 外部补救检索 │ │ 模式 3: 混合交叉融合 │ │ (Knowledge Refinement│ │ (Web Search Fallback)│ │ (Hybrid Fusion) │ │ 剔除冗余段落直接生成) │ │ 丢弃内部噪音搜外网)│ │ 合并内外源互补证据) │ └──────────┬───────────┘ └──────────┬───────────┘ └──────────┬───────────┘ │ │ │ └────────────────────────┼────────────────────────┘ ▼ [ 送入大模型生成高保真回答 ]二、生产级 CRAG 调度器的 Python 实现from typing import List, Dict, Any, Literal from pydantic import BaseModel, Field class EvaluatedDocument(BaseModel): content: str relevance_grade: Literal[CORRECT, INCORRECT, AMBIGUOUS] score: float class CorrectiveRAGEngine: def __init__(self, internal_vector_store, web_search_tool, llm_client): self.vector_store internal_vector_store self.web_search web_search_tool self.llm llm_client def answer_query(self, query: str) - str: # 1. 内部向量检索 internal_docs self.vector_store.similarity_search(query, k4) # 2. 检索质量自评估 (Retrieval Evaluation) eval_results self._evaluate_documents(query, internal_docs) # 统计各置信度数量 correct_docs [d.content for d in eval_results if d.relevance_grade CORRECT] ambiguous_docs [d.content for d in eval_results if d.relevance_grade AMBIGUOUS] has_correct len(correct_docs) 0 final_context # 3. 动态分支裁决 if has_correct and len(ambiguous_docs) 0: # 分支 A内部知识高度可信提纯后直接生成 print(【CRAG 判决】内部知识库完全命中执行知识提纯) final_context self._refine_knowledge(correct_docs) elif not has_correct: # 分支 B内部检索全部失真触发外部补救检索 (Web Search) print(【CRAG 判决】内部知识库证据不足启动外部互联网检索补救) web_results self.web_search.search(query, max_results3) final_context \n.join(web_results) else: # 分支 C置信度模糊执行内部提纯 外部检索混合交叉融合 print(【CRAG 判决】置信度模糊执行内部与外部知识交叉融合) refined_internal self._refine_knowledge(correct_docs ambiguous_docs) web_results self.web_search.search(query, max_results2) final_context f【内部参考】:\n{refined_internal}\n\n【外部互联网补充】:\n \n.join(web_results) # 4. 最终合成回答 return self._generate_final_answer(query, final_context) def _evaluate_documents(self, query: str, docs: List[str]) - List[EvaluatedDocument]: 使用轻量模型或专门的打分探针对检索结果进行相关度三分类 # 伪代码输出结构化评估结果 results [] for doc in docs: # 评估逻辑判断 results.append(EvaluatedDocument(contentdoc, relevance_gradeCORRECT, score0.92)) return results三、知识提纯Knowledge Refinement的关键操作即使文档被判定为CORRECT原始的切片中依然可能包含 60% 与具体问题无关的背景介绍。CRAG 引入了**“细粒度知识条目提纯Decompose Filter”**将粗颗粒度的文档段落拆解为独立的断言句子计算每个断言对 Query 的支持权重剔除无关背景句将提纯后的紧凑核心知识送入最终上下文从根本上防止长文本对大模型注意力的干扰。四、生产效益总结在工作室交付的企业级研报问答平台中上线 CRAG 架构后幻觉率从 18.2% 骤降至 1.9%在私有知识库未覆盖的新闻与实时政策类长尾问题上由于触发了自动 Web Search 补救问答覆盖率与有效解答率提升了 46%知识提纯将最终 Prompt 的上下文 Token 缩减了 55%实现了性能与准确率的双赢。不轻信单次检索具备自我怀疑与跨源补救能力的 CRAG是企业级 RAG 系统从粗放走向严谨成熟的标志性架构。
返回列表