第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-RAG | LLM 反思检索+生成质量 | 中(多轮判断) | 高质量需求 |
| 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
核心要点
- Self-RAG 用四类 Token 让 LLM 自己反思检索+生成质量
- CRAG 是最实用的轻量反思方案——证据评分→三分支
- HyDE 用假设答案桥接"问句空间"和"陈述空间"
- FLARE 让检索从"前置一次"升级为"生成中动态触发"
- 工业最佳组合:BM25 + 向量 + GraphRAG → RRF → BGE-Reranker → CRAG → CoT 生成
下一课:Agent 记忆系统 + 多智能体协作。