# Ml RAG Systems

> 检索增强生成(RAG)决策链：判断该不该上 RAG 并设计流水线关键决策。当 LLM 应用出现 "知识过时/不知道私有知识/幻觉不能容忍"、纠结 RAG 还是长上下文还是微调、问切块策略/ embedding 选型/top-k 与重排/引用溯源时激活。核心立场：检索质量决定上限，评估必须拆 检索与生成两段归因。不适用于零外部知识的纯推理任务(ml-prompting-methodology)、档位 总决策(ml-pretraining-paradigm)。触发词: RAG 检索增强, 知识库问答, embedding 选型, chunking 切块, rerank 重排, 引用溯源 citation, hallucination 幻觉

- Skill: `fieldlu/ml-rag-systems` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add fieldlu/ml-rag-systems`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fieldlu/ml-rag-systems/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: fieldlu (https://skillmd.com/u/fieldlu)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fieldlu/ml-rag-systems

---


# 检索增强生成 — 检索质量决定上限的流水线决策

## R — 原文 (Reading)

> （转述）Lewis 等指出：预训练把知识压进参数，但参数化知识的更新需要重新训练、且难以审计与扩展；他们提出把非参数的可检索语料（Wikipedia 的 dense vector 索引）与序列到序列模型联合——检索器按查询取文档、生成器以"查询+文档"为条件作答，端到端联合训练。
>
> — Patrick Lewis 等, "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks" (NeurIPS 2020)

> （转述）后续实践形成共识：RAG 的答案质量由两段共同决定——检索段没找对材料，生成段再强也只能在错误前提上流畅发挥；因此系统评估必须把检索命中（能否召回正确来源）与生成忠实（答案是否忠于被检回的材料）拆开度量，否则无法归因。
>
> — 检索增强系统评估的行业共识（RAG 三元组类指标的通行做法）

---

## I — 方法论骨架 (Interpretation)

**什么时候 LLM 直答不够用？三个信号**：①知识过时（问的是模型训练截止后的事实）②私有知识（公司制度/产品手册/个人笔记，模型从未见过）③幻觉敏感场景（法律/医疗/客服承诺，错了要担责且要求给出处）。三条中一条就该考虑引入外部知识。

**知识注入三路对比**（先选路再施工）：
- **长上下文**: 文档总量小（塞得进窗口）时最简单——全量放进 prompt，无检索环节无检索错误；代价是 token 成本随文档线性增长、大海捞针效应使超长文档中部信息利用率下降；
- **RAG**: 语料大到塞不下或频繁更新时唯一经济解——按需取相关片段；代价是引入整条检索链路，每个环节都是新的失败点；
- **微调**: 适合改变行为风格/格式/技能，不适合注入事实知识——事实会过时且易被幻觉覆盖，拿微调当知识库是常见误用（档位决策见 `ml-pretraining-paradigm`）。

**RAG 流水线的四个关键决策**：①**切块 (chunking)**：粒度是第一杠杆——太大则噪声淹没信号，太小则语义断裂；按结构切（标题/段落/表格行）优于盲切固定长度，重叠块可缓解边界截断；②**embedding 选型**：向量检索的前提是"语义相近→向量相近"，选型看目标语言与领域适配度，混合检索（向量+关键词 BM25）互补短板；③**top-k 与重排 (rerank)**：召回宁多勿漏（大 k），再用交叉编码器精排出少而准的上下文——召回管覆盖率、重排管精度；④**引用溯源**：答案附出处既是合规需求也是幻觉抑制手段（强制生成器"只依据材料作答"）。

**核心立场**：垃圾进垃圾出——生成器只能放大检索的质量，不能弥补它。检索不到正确片段的问题，换更大的模型毫无用处。

---

## A1 — 文献中的经典应用 (Past Application)

*（本批主题超出西瓜书覆盖范围，A1 改引学界公认的经典案例与公开记录）*

### 案例 1: RAG 论文的知识密集任务验证
- **问题**: 开放域问答等任务依赖大量事实知识，纯参数化模型（当时的大型 seq2seq）在知识密集任务上落后于显式带检索的系统，且知识更新困难。
- **方法论的使用**: 把 Wikipedia 构建 dense passage 索引作为非参数记忆，与 BART 类生成器端到端联合训练；对比"仅生成""仅检索读段""RAG"三种配置。
- **结论**: 联合检索+生成在开放域 QA 上超越当时的参数化 SOTA（转述）；生成器能整合多文档证据并标注来源。
- **结果**: RAG 成为"非参数记忆 + 参数化生成"范式的命名性工作；其架构骨架（dense retriever + conditioned generator）沿用至今。

### 案例 2: REALM 与"预训练即检索"的平行证明
- **问题**: 能否让模型在预训练阶段就学会检索，而不是事后拼接？
- **方法论的使用**: Guu 等把文本语料的神经检索器嵌入语言建模目标内部，以"检索到的文档帮助预测 masked 词"来同时优化检索器与编码器。
- **结论**: 检索能力可以在预训练中学出，开放式问答显著受益（转述）——独立佐证了"显式外部知识优于纯参数记忆"的方向。
- **结果**: REALM 与后来的 RAG/RETRO 共同确立"检索是知识注入的一等公民路线"；工程界随后把它从训练技术简化为推理时的即插即用组件，才有了今天的通用 RAG 形态。

### 案例 3: "Lost in the Middle" 对长上下文路线的反制证据
- **问题**: 上下文窗口越做越大，"干脆全部塞进 prompt"是否可以取代检索？
- **方法论的使用**: Liu 等构造受控实验：把关键事实放在不同深度的超长上下文中，测试模型的抽取准确率随位置的变化。
- **结论**: 多数模型呈现中间塌陷——开头与结尾的信息利用好，中部显著变差；单纯堆长上下文并不能保证等价的信息可达性（转述）。
- **结果**: 为"长上下文 vs RAG"的选型提供了量化依据：文档规模小时长上下文的简单性占优，但"塞得下"不等于"用得上"；超大文档场景 RAG 的按需供给仍有结构性优势。本 skill E 段的三路对比即建立在这类证据上。

---

## A2 — 触发场景 (Future Trigger) ★

### 用户会在什么情境下需要这个 skill?

1. 用户在搭企业知识库问答/客服机器人：LLM 不知道公司内部制度、产品手册内容，胡编或拒答。
2. 用户的知识频繁更新（法规/价格/新闻），靠改 prompt 或重训都跟不上，想找可持续的知识供给方案。
3. 用户场景不容忍幻觉（法务/医疗/金融合规），要求"答案必须能给出来源"。
4. 用户已经搭了 RAG 但效果差："明明文档里有答案却检索不到"/"检索对了答案还是错"——需要分段归因。
5. 用户在三路之间纠结："文档几十万字，是直接放长上下文、做 RAG、还是微调？"

### 语言信号 (用户的话里出现这些就应激活)

- "**RAG**/**检索增强**/**retrieval-augmented**"/"知识库**问答**"/"企业知识库"
- "**切块**/**chunking** 怎么切"/"chunk 大小"/"overlap 要不要加"
- "**embedding** 用哪个"/"向量库选型"/"混合检索/BM25"
- "**top-k** 设多少"/"要不要**重排**/**rerank**"/"召回率低怎么办"
- "**引用**/**溯源**/**citation**/**给出来源**"/"减少**幻觉** hallucination"
- "**长上下文**还是 RAG"/"该不该微调注入知识"/"模型不知道我们的**私有**资料"

### 与相邻 skill 的区分

- 与 `ml-prompting-methodology` 的区别: prompting 是零外部知识档位的施工规范（提示怎么写得好）；本 skill 是引入外部知识库的架构决策。"模型不知道 X"这类知识缺口不是措辞问题，先走本 skill 判定要不要建检索；确定留在纯提示档后才轮到那边。
- 与 `ml-pretraining-paradigm` 的区别: 那是四档总决策树（从零训/微调/PEFT/提示），本 skill 是其中"知识注入"维度的深化——三路对比常与那边的档位选择串联：先那边定档，知识缺口部分移交本 skill 施工。反向信号：RAG 也解决不了风格/技能问题 → 回那边升微调档。
- 与 `ml-llm-evaluation` 的区别: 那管 LLM 能力的验收态度量（benchmark/污染/judge）；本 skill 管"我这个 RAG 系统哪里不行"的开发态诊断，其中生成段的忠实度评估会借用 judge 类工具但目的不同。
- 与 `ml-evaluation-design` 的区别: 那提供比较检验的统计原则；本 skill 特化出"检索/生成分段指标"（命中率/MRR 忠实度/相关性）的评估对象。

---

## E — 可执行步骤 (Execution)

当 skill 被激活后, agent 应按以下步骤执行:

1. **直答不足判定**
   - 核对三信号：知识过时？私有知识？幻觉敏感？逐条确认并记录哪条命中。
   - 完成标准: 写明"命中信号 X/Y/Z，故需外部知识注入"；三条都不命中 → 劝退，留在纯提示档（移交 `ml-prompting-methodology`）。
   - 判停条件: 三信号全不命中 → 流程终止并说明理由；用户坚持上 RAG → 记录分歧后再进步骤 2。

2. **三路选型**
   - 估语料量级与更新频率：总量塞得进上下文且低频更新 → 长上下文优先（简单即正义）；量大或高频更新 → RAG；问题是风格技能而非事实知识 → 微调（移交 `ml-pretraining-paradigm`），RAG 不解决此类问题。
   - 完成标准: 路线选定 + 一句话理由；判停条件: 用户坚持微调注知识 → 显式提示"事实知识会被幻觉覆盖且难更新"的风险声明后再继续。

3. **切块策略**
   - 按文档结构定切分单位（标题层级/段落/表格行），设合理 overlap；禁止无脑固定 500 字硬切。
   - 完成标准: 抽查 20 个块——每块语义自足、无关键句被拦腰斩断。
   - 判停条件: 语料无结构可言（纯流式文本/OCR 噪声大）→ 先做清洗与结构化预处理，切块顺延；预处理成本超预算 → 记录风险后用保守大块+overlap 过渡。

4. **检索链配置**
   - embedding 选型（语言/领域匹配）→ 混合检索开关（关键词+向量）→ 召回 k 取宽（如 20）→ 重排取窄（如 top 3-5 进上下文）。
   - 完成标准: 每个环节有默认配置与调整旋钮清单。
   - 判停条件: 预算不允许独立重排模型 → 用"召回宽+embedding 好"的简化链起步，并把重排列入迭代路线图。

5. **分段评估基线（先于一切调优）**
   - 构造评测集：真实用户问题 + 标准答案 + 正确来源文档标注（哪怕手工 50 条）；分别测检索命中率与生成忠实度。
   - 完成标准: 两段分数各自落盘，成为后续所有改动的对照基线。
   - 判停条件: 检索命中率低 → 问题在步骤 3-4，回炉检索链，禁止去调生成 prompt；检索高但答案错 → 问题在生成段（prompt 约束/上下文超载/模型能力），进入步骤 6。

6. **迭代与溯源加固**
   - 按分段诊断结果单变量改进（切块→召回→重排→生成约束），每改动跑一遍分段评估；上线前启用引用溯源（答案附出处链接，无据可引时明确说"材料未覆盖"而不是编）。
   - 完成标准: 迭代记录表（改动/检索分/生成分/结论）+ 溯源机制生效证据。
   - 判停条件: 多轮迭代后检索分仍低于可用线且语料质量是根因 → 上报"知识治理问题，非检索工程能解"，把来源清洗/时效标记列为前置条件后暂停迭代。

---

## B — 边界 (Boundary) ★

### 不要在以下情况使用此 skill

- 纯推理/写作/翻译类任务（无需外部事实）: 加检索只会引入无关干扰与延迟，这是负优化。
- 知识总量小且稳定: 直接放 system prompt/长上下文即可，RAG 是过度工程。
- 目标是教模型新技能/风格/输出格式: 这是微调的领地（见 `ml-pretraining-paradigm`），检索注入不了"怎么做事"，只能注入"是什么"。
- 结构化数据的精确查询（SQL 能答的问题）: 别用向量相似度硬查数据库，Text-to-SQL/BI 工具是对口工具；"模糊语义搜索"与"精确字段查询"是两种问题。

### 文献与实践反复警告的失败模式

- **检索错误比幻觉更隐蔽**: 编造的答案尚可能因离谱被识破，而"一本正经地基于错误材料作答"看起来完全可信；没有分段评估的系统对此完全免疫——你甚至不知道坏在哪一段。
- **只调生成端**: 效果差就换更强的模型/改 prompt，实际瓶颈在检索召回——垃圾进垃圾出，生成器放大的是检索的质量而非弥补它。
- **切块拍脑袋**: 固定长度硬切把表格、代码、条款腰斩；块太大稀释信噪比、太小丢失指代与上下文——切块是 RAG 第一杠杆也是最常被敷衍的一环。
- **评估混为一谈**: 只报端到端准确率，检索与生成的贡献不可分解，每次改动都在盲调。
- **把 RAG 当万能补丁**: 材料本身互相矛盾/过期/有错时，RAG 忠实检索出的也是矛盾与错误；知识治理（来源权威性/时效标记/冲突清洗）先于检索工程。

### 作者盲点 / 时代局限（本批为外推补全）

- **必须声明**: 本 skill 主题超出西瓜书(2016)覆盖范围——书中既无 LLM 更无检索增强概念（BOOK_OVERVIEW 批判确认提示范式与大模型语境整体缺席）；本 skill 是对该时代局限的外推补全，素材为 2020-2023 交叉学科文献共识转述，**方法论仍在快速演化**（GraphRAG/Agentic RAG/长上下文成本骤降对三路边界的持续改写），执行时应核对当前格局。
- **"检索质量决定上限"的边界也在移动**: 超长上下文与推理型模型正在改变"必须精准检索"的前提——三路对比的具体阈值（多大算塞不下）随硬件与定价快速漂移，本 skill 给的是决策框架而非恒久数字。
- **评估指标尚未标准化**: 忠实度/相关性/召回的自动度量（含 LLM-as-judge 变体）自身有偏差（详见 `ml-llm-evaluation`），自动分高不等于用户体验好，最终须有人工抽检校准。
- 西瓜书的 NFL 思想在此依然成立: 不存在对所有语料与问法都最优的切块/检索配置，任何"最佳实践清单"脱离具体语料谈优劣都是空话。

### 容易混淆的邻近方法论

- **RAG ≠ 向量数据库**: 向量库只是检索链的一个组件；没有好的切块与重排，最好的向量库也救不了召回质量。
- **语义检索 ≠ 关键词检索**: 向量擅长同义改写、弱在专有名词与编号精确匹配；BM25 反之——混合检索是常态而非锦上添花。
- **知识注入 ≠ 能力注入**: RAG 补"知道什么"，微调改"会做什么"；二者不可互替（详见三路对比）。
- **引用存在 ≠ 答案忠实**: 模型可能列出真实出处但答案与出处内容不符；溯源机制要配合忠实度抽查才有意义。

---

## 相关 skills

- depends-on: ml-methodology-router（总入口）, ml-pretraining-paradigm（三路选型的上层档位框架）
- contrasts-with: ml-prompting-methodology（零外部知识档位 vs 外部知识注入架构）
- composes-with: ml-llm-evaluation（生成段 judge 工具与偏差校正）, ml-evaluation-design（分段评估的统计原则）, ml-experiment-tracking（流水线各组件版本与评估记录）

---

## 审计信息

- **来源性质**: 扩充批E·交叉学科——主题超出西瓜书(2016)覆盖范围，R 段为公认文献的转述表述（均已标注"（转述）"）
- **验证通过**: 待流水线三重验证复核
- **测试通过率**: 待阶段 4 测试 (详见 test-prompts.json)
- **skill_version**: 0.0.1
- **蒸馏时间**: 2026-08-24

