# FDE W2D6 评测题 · 基础 RAG

> 配套《FDE-W2D6-基础RAG-学习手册.html》使用。共 13 题，分 L1 基础 / L2 进阶 / L3 深度 / L4 场景四档。
> 候选人背景：36 岁，Java + 大数据 + 医疗保险。场景统一围绕医疗保险 / 特药理赔 / 保险知识库。
> 评分建议：每题满分 10 分；参考答案折叠在 `<details>` 中，先自答再对照。

---

## L1 基础（概念识记，每题 10 分）

### Q1. 一句话说明 RAG 是什么、解决什么问题？
- **考察点**：RAG 定义、动机（私有/最新知识、防幻觉）。
- **评分维度**：①Retrieval+Augmentation+Generation 三要素；②是否点出"外置知识防幻觉"；③医保场景映射。
<details>
<summary>参考答案</summary>

RAG = 检索（Retrieval）+ 增强（把资料拼进 prompt）+ 生成（Generation）。它解决"LLM 记不住企业私有/最新知识、易幻觉"的问题：回答前先检索相关资料，让模型"基于资料答"，从而可控、可溯源、可更新。

医保场景：把保单条款、特药目录、政策条文做成可检索知识库，理赔问答"基于条文答"而非模型瞎编。
</details>

### Q2. RAG 完整链路包含哪些环节？（离线 + 在线）
- **考察点**：完整链路记忆（达标线①）。
- **评分维度**：①离线建库环节齐全；②在线查询环节齐全；③能区分两段。
<details>
<summary>参考答案</summary>

离线建库：文档 → PDF 解析（含 OCR）→ 文本清洗 → Chunk 切分（递归+overlap+元数据）→ Embedding 向量化 → 写入向量库（ES dense_vector/HNSW）。

在线查询：问题 → Embedding → 检索（BM25/向量/混合）→ 拼接上下文（带引用）→ 低 T 生成 → 答案 + 引用。

能一口气讲完即 RAG 面试及格线。
</details>

### Q3. 什么是 Embedding？为什么建库和查询必须用同一模型？
- **考察点**：Embedding 原理、同模型同维度铁律。
- **评分维度**：①语义近→向量近；②同模型同维度保证向量空间一致；③换模型需全量重建。
<details>
<summary>参考答案</summary>

Embedding 把文本映射成高维稠密向量，语义相近的文本向量距离近；检索用余弦相似度找最近 chunk。

建库与查询必须用同一 Embedding 模型、同维度：否则向量空间不一致，相似度计算无意义（灾难）。模型升级后必须全量重建索引，不能新旧混用。中文语料选中文优化模型（bge/m3e 等）。
</details>

### Q4. BM25 和向量检索的核心区别是什么？
- **考察点**：BM25 vs 向量（达标线②）。
- **评分维度**：①BM25=关键词精确（TF-IDF 变体）；②向量=语义相似；③互补而非替代。
<details>
<summary>参考答案</summary>

- **BM25**：基于词频/逆文档频率的关键词精确匹配，擅长专有名词、编号、药名（"奥希美替尼"精确出现才召回）。
- **向量检索**：基于语义相似（向量距离），擅长同义改写/表述不同（"肺癌靶向药"也能召回相关条款）。

二者互补：精确词靠 BM25，语义问法靠向量，现代 RAG 用混合检索而非二选一。
</details>

---

## L2 进阶（理解应用，每题 10 分）

### Q5. Chunk 切分有哪些常见策略？关键参数怎么定？
- **考察点**：切分策略、chunk_size/overlap/元数据。
- **评分维度**：①列出固定/段落/递归/滑动窗口；②说明递归+overlap 推荐；③元数据为引用溯源服务。
<details>
<summary>参考答案</summary>

策略：固定长度（易切断语义）、按段落/标题（保结构但长度不均）、递归切分（按 \n\n/\n/句 逐级回退，兼顾语义与长度，推荐）、滑动窗口（带 overlap，减边界丢失）。

关键参数：
- chunk_size：太大语义稀释、太小割裂，常用 300~800 token；
- overlap：相邻重叠 10%~20%，避免关键信息卡边界；
- 元数据：每个 chunk 存来源（文档/页码/段落号），供引用溯源。

参数要按语料+模型评测，不照抄。
</details>

### Q6. 用 Elasticsearch 怎么做向量检索（kNN）？关键参数含义？
- **考察点**：ES dense_vector/HNSW、knn 查询、k/num_candidates。
- **评分维度**：①dense_vector+HNSW；②knn 查询结构；③k 与 num_candidates 区别。
<details>
<summary>参考答案</summary>

ES 用 `dense_vector` 字段存向量、建 HNSW 图索引，查询用 `knn`：
```json
{ "knn": { "field": "embedding", "query_vector": [...], "k": 10, "num_candidates": 100 } }
```
- **k**：最终返回的最近邻数量；
- **num_candidates**：每分片候选数，越大越准越慢；
- HNSW 是近似检索，速度快、召回略低于暴力但工程可用；
- 维度须与 Embedding 模型一致，否则写入失败。

ES 一个引擎兼顾 BM25 与向量，医保知识库常用。
</details>

### Q7. 什么是混合检索？为什么不用单一检索？
- **考察点**：Hybrid Search、RRF 融合、rerank。
- **评分维度**：①两路融合；②RRF 做法；③互补提升召回/精度。
<details>
<summary>参考答案</summary>

混合检索 = 把 BM25 与向量检索结果融合，兼顾精确词与语义：
- **RRF（Reciprocal Rank Fusion）**：按各自排名倒数求和，不依赖分数量纲，简单稳健；
- **加权求和**：两路分数归一化后加权（需调权重）；
- **可选 rerank**：融合后用 cross-encoder reranker 精排。

不用单一检索：BM25 对同义改写漏召回，向量对精确编号不敏感，融合后既准又全。医保里"糖尿病/特药"靠 BM25，"慢病用药限制"靠向量。
</details>

### Q8. 拼接上下文（Prompt 组装）有哪些要点？
- **考察点**：拼接质量、引用标记、指令约束。
- **评分维度**：①带引用标记；②控总量不超窗口；③明确"仅基于资料、无则拒答"；④去重排序。
<details>
<summary>参考答案</summary>

要点：
1. 带引用标记：每段标 [1][2] 来源，供模型引用与溯源；
2. 控制总量：chunk 数×长度 ≤ 窗口，留生成空间；
3. 指令明确："仅基于资料答，无则拒答并标引用"；
4. 去重/排序：相似 chunk 去重、按相关度排序提信噪比。

拼接质量决定生成质量（garbage in garbage out）。
</details>

---

## L3 深度（原理与质量，每题 10 分）

### Q9. 详细论证：为什么 RAG 必须做引用溯源？怎么防"编造引用"？
- **考察点**：引用价值、引用校验、幻觉防护。
- **评分维度**：①三点价值（防幻觉/合规/可审计）；②后处理校验引用真实性；③引用≠结论正确。
<details>
<summary>参考答案</summary>

为什么需要：
- **防幻觉**：无引用=可能编，有引用可证；
- **合规审计**：理赔结论要能回溯条款（医保"钱+合规"硬需求）；
- **可质疑**：客户质疑时可定位依据。

防编造引用：模型可能标 [3] 但检索结果无 [3]。必须后处理校验——标注的引用编号是否真在检索结果里，不可证的结论标记为不确定/拒答。注意：引用只证明"有这段资料"，不证明"结论正确"，还要看资料是否真支持。
</details>

### Q10. 为什么需要"无答案拒答"？工程中怎么实现与评测？
- **考察点**：拒答动机、should_refuse、拒答评测。
- **评分维度**：①"编比拒危害大"；②prompt+字段实现；③评测专测拒答 case。
<details>
<summary>参考答案</summary>

为什么：资料未覆盖时硬编会误导理赔决策（如编造某药可报销），危害远大于"不知道"。所以"资料没有就拒答"。

实现：
- prompt 明确"资料未覆盖则输出 should_refuse=true 并说明缺什么"；
- 检测拒答信号（should_refuse 字段 / "未查询到相关条款"等）；
- 评测集专门留 `should_refuse=true` 的 case，测拒答准确率——这是 RAG 核心评测指标。

检测别只靠关键词，模型会换说法，要结合 should_refuse 字段。
</details>

### Q11. PDF 解析与文本清洗在医保 RAG 里为何特别关键？常见坑有哪些？
- **考察点**：解析/清洗质量、链路上游影响、引用锚点。
- **评分维度**：①扫描件+OCR+表格难点；②解析丢失=检索不到=幻觉；③清洗保结构不伤语义+留元数据。
<details>
<summary>参考答案</summary>

关键：医保保单/条款多为扫描件+表格，解析难；一旦解析丢失内容（尤其表格里的"适应症/限制"），知识库就没有该资料，检索不到→模型只能编。清洗若过度删掉"条款编号/药品名"，会破坏实体对齐。

常见坑：
- 用朴素 PyPDF 提扫描件得空文本（需先 OCR）；
- 解析不保留页码/段落号 → 后面无法引用溯源；
- 清洗把"第3.2条"当噪声删 → 引用丢失；
- 表格结构乱 → "字段-值"错位，检索到错误信息。

解析/清洗要在 Embedding 前完成，且保留来源位置作引用锚点。
</details>

---

## L4 场景（综合实战，每题 10 分）

### Q12. 场景题：为"特药理赔保险知识库"设计 RAG 链路，从 PDF 条款到带引用的理赔问答。
- **考察点**：全链路落地、医保场景、引用+拒答。
- **评分维度**：①链路完整（解析→...→生成）；②医保特殊处理（OCR/表格/中文模型）；③混合检索+引用+拒答。
<details>
<summary>参考答案</summary>

链路设计：
1. **解析**：保单/条款 PDF（多扫描件）→ 先 OCR（接 D5 OCR Tool）→ 用保表格结构的解析器提取，保留页码/条款号；
2. **清洗**：去页眉页脚、合并断句、统一格式，保"条款编号/药品名"对齐；
3. **切分**：按条款编号递归切 + overlap，带元数据（文档/页码/段落）；
4. **Embedding**：中文模型向量化，存 ES dense_vector + HNSW；
5. **检索**：问题向量化 → BM25（药名/编号）+ 向量（语义）混合（RRF 融合），可选 rerank；
6. **拼接**：topK chunk 带 [n] 引用拼进 prompt，指令"仅基于资料、无则拒答"；
7. **生成**：低 T（0.1~0.3），输出结论+引用；
8. **校验**：后处理验证引用真实性，should_refuse 检测，不可证/应拒答的拦截。

质量监控：解析丢失率、切分覆盖率、检索召回率、拒答准确率。
</details>

### Q13. 场景题：用户问"我有糖尿病，吃XX进口特药能报销吗？"但知识库只有国产目录。系统应怎么表现？请结合检索与拒答说明。
- **考察点**：拒答实战、引用、误导风险。
- **评分维度**：①正确走拒答而非硬编；②说明检索到了什么（可能部分相关）；③should_refuse + 说明缺什么。
<details>
<summary>参考答案</summary>

表现：
- 检索阶段：BM25/向量可能召回"糖尿病用药限制""特药目录"等相近资料，但**没有该进口药的报销条款**；
- 生成阶段：因资料未覆盖该进口药，系统应触发拒答——输出 `should_refuse=true`，说明"未查询到该进口特药的报销依据，请补充资料或确认是否属国产目录"；
- 绝不编造"可报销/不可报销"结论。

为何：硬编"能报销"会误导客户与理赔决策，风险远大于"不知道"。这正是拒答准确率作为核心指标的意义。若模型仍标了引用，后处理校验会发现该引用不支持结论，拦截并转拒答/人工。

延伸：可提示"是否指国产同类药 YY"，把拒答变成有用的引导。
</details>

---

## 评分汇总表

| 题号 | 档位 | 考察主题 | 满分 | 自评 | 考官评 |
|---|---|---|---|---|---|
| Q1 | L1 | RAG 定义与动机 | 10 | | |
| Q2 | L1 | 完整链路 | 10 | | |
| Q3 | L1 | Embedding 原理 | 10 | | |
| Q4 | L1 | BM25 vs 向量 | 10 | | |
| Q5 | L2 | Chunk 切分 | 10 | | |
| Q6 | L2 | ES kNN | 10 | | |
| Q7 | L2 | 混合检索 | 10 | | |
| Q8 | L2 | 拼接上下文 | 10 | | |
| Q9 | L3 | 引用溯源 | 10 | | |
| Q10 | L3 | 无答案拒答 | 10 | | |
| Q11 | L3 | 解析与清洗 | 10 | | |
| Q12 | L4 | 全链路场景 | 10 | | |
| Q13 | L4 | 拒答场景 | 10 | | |
| **合计** | | | **130** | | |

### 达标线
- **L1+L2（基础进阶，80 分）**：必拿满。能讲完完整链路、Embedding 铁律、BM25 vs 向量、Chunk/ES/混合/拼接。
- **L3（深度，30 分中 ≥24）**：必须讲清引用溯源（防编造引用）与无答案拒答（达标线②），以及解析/清洗为何关键。
- **L4（场景，20 分中 ≥16）**：能落地医保知识库全链路，并正确处理"资料缺失→拒答"。
- **总分 ≥104（80%）** 达标；**≥117（90%）** 优秀。

> 两道「面试达标线」对应手册 s13 / s14：① RAG 完整链路；② BM25 vs 向量 + 引用溯源与无答案拒答。
