212 分钟

进阶检索范式:Self-RAG / CRAG / HyDE / FLARE

掌握四种超越普通 RAG 的检索范式、理解 Self-RAG 反思机制、学会 HyDE 和 FLARE 的实战场景、了解 RAG 综合演进路线。

Self-RAGCRAGHyDEFLARE检索
进度保存在本机浏览器;验收通过后再点更稳妥

第15课:进阶检索范式 —— Self-RAG / CRAG / HyDE / FLARE

本节目标:掌握四种超越普通 RAG 的检索范式、理解 Self-RAG 的反思机制、学会 HyDE 和 FLARE 的实战场景。

基础 RAG 是入门。这一课我们进入进阶检索范式——让检索从"机械执行"升级为"智能决策"。


1. Self-RAG:让 RAG "学会反思"

传统 RAG 的三种翻车场景

Code
Q1: "1+1=?"           → 不需要检索却也检索(浪费)
Q2: "黄帝内经怎么说?" → 检索质量差也硬答(幻觉)
Q3: "今天天气怎么样?" → 知识库没有但还是瞎编(幻觉)

Self-RAG 核心:四类反思 Token

Token作用取值
[Retrieve]判断是否需要检索Y / N / Continue
[IsRel]判断检索结果是否相关Relevant / Irrelevant
[IsSup]判断生成是否被证据支持Fully / Partially / No
[IsUse]判断回答是否有用1-5 分

工作流示例

Code
Q: "酸枣仁汤治什么病?"

[Retrieve=Yes]              ← 决定检索
→ 召回 5 个 chunk

[IsRel=Relevant]  《金匮要略》...  ← 相关,保留
[IsRel=Irrelevant]《伤寒论》...   ← 不相关,丢弃
[IsRel=Relevant]  《本草》...     ← 相关,保留

基于相关 chunks 生成:
"酸枣仁汤主治虚劳虚烦不得眠[1]..."

[IsSup=Fully]    ← 证据支持
[IsUse=5]        ← 回答质量高

2. CRAG:更轻量的反思方案

CRAG = Corrective RAG。只关注证据质量,比 Self-RAG 简单:

Code
检索 → 评分 → 三分支:
  ├─ Correct  (置信高) → 直接生成
  ├─ Ambiguous(中间)   → 检索 + Web Search 互补
  └─ Incorrect(置信低) → 丢弃,转 Web Search

优势:比 Self-RAG 简单,效果接近,更适合生产。


3. HyDE:假设答案增强检索

问题

用户 query 风格和文档风格差异大,向量空间错位:

Code
用户问:"失眠咋办?"        ← 口语,在"问句空间"
文档原文:"虚劳虚烦不得眠,酸枣仁汤主之"  ← 文言,在"陈述空间"

→ 向量距离很远,召回到

HyDE 解法

先让 LLM 生成一个假设答案,用假设答案的向量去检索:

java
public List<ChunkVO> hydeSearch(String question, int topK) {
    // Step 1: 让 LLM 生成假设的回答
    String hypoAnswer = llm.generate("""
        请根据中医知识回答以下问题,不需要引用,直接生成一段答案:
        %s
        """.formatted(question));

    // Step 2: 用假设答案做向量检索(不是用原问题)
    return retriever.vectorSearch(hypoAnswer, topK);
}

为什么有效? 假设答案的向量在"陈述空间"——与文档同空间,距离更近。代价:每次检索多一次 LLM 调用,延迟 + 成本上升 30%。


4. FLARE:动态触发检索

传统 vs FLARE

Code
传统 RAG:Q → 检索 → 生成完整答案(检索一次,前置)

FLARE:   Q → 开始生成 → 遇到"不确定"暂停
              → 检索 → 继续生成(动态触发)

示例

Code
LLM 生成:"酸枣仁汤主治不寐,由酸枣仁、"
                                    ↑ 下一个 token 概率很低
                                    → 触发检索"酸枣仁汤组成"
                                    → 获得"川芎、知母、茯苓、甘草"
                                    → 继续生成

适用场景:长文本生成(综述、报告),单段回答不需要。


5. 四种范式对比

范式核心思想额外成本适用场景
普通 RAG检索一次,直接生成基准简单问答
Self-RAGLLM 反思检索+生成质量中(多轮判断)高质量需求
CRAG评估证据→分支处理生产首选
HyDE假设答案桥接向量空间中(多1次LLM)风格差异大
FLARE生成中动态触发检索中(多轮检索)长文本生成

6. RAG 综合演进路线

Code
Level 1: 朴素 RAG
  Query → Vector Search → LLM

Level 2: 多路 + Rerank(上篇已实现)
  Query → [Vector + Keyword] → RRF/Rerank → LLM

Level 3: Agentic RAG(上篇已实现)
  Query → Agent → 多轮 Tool 调用 → LLM

Level 4: Self-Reflective RAG ← 本课
  Query → Agent → 检索 → 自我评估 → 决定补救 → LLM

Level 5: GraphRAG + Memory ← 下两课
  Query → Agent → 图谱+向量混合 → 长期记忆增强 → LLM

Level 6: 多模态 + 工作流 ← 课20
  多模态 Query → 多 Agent 协作 → 多源融合 → LLM

核心要点

  1. Self-RAG 用四类 Token 让 LLM 自己反思检索+生成质量
  2. CRAG 是最实用的轻量反思方案——证据评分→三分支
  3. HyDE 用假设答案桥接"问句空间"和"陈述空间"
  4. FLARE 让检索从"前置一次"升级为"生成中动态触发"
  5. 工业最佳组合:BM25 + 向量 + GraphRAG → RRF → BGE-Reranker → CRAG → CoT 生成

下一课:Agent 记忆系统 + 多智能体协作。