检索与生成的"分工"要写下来
RAG 系统里最常见的一类扯皮 ✗:答案错了,检索团队说"片段给对了,是模型没用好" ✗,
生成团队说"片段里没有关键信息,模型当然答不出" ✗。没有分工契约,就无法归因 ✔。
把分工写成契约 ✔:谁负责什么、交付什么格式、失败时算谁的问题 ✔。
一、检索侧的三项承诺
- 召回承诺:该命中的片段必须进候选集(用召回率指标约束 ✔);
- 排序承诺:正确片段进入前 K(用命中位次/MRR 约束 ✔);
- 交付格式承诺:每个片段带来源、时间、原文片段、块 id ✔(生成侧要用来引用 ✔)。
交付格式很关键 ✗:如果检索只给一段裸文本 ✔,生成侧无法引用、无法判断时效 ✔(见片段预处理那篇 ✔)。
二、生成侧的三项承诺
- 只用给定片段(不允许引入未提供的事实 ✔);
- 标注引用(每条结论对应片段 id ✔);
- 资料不足时明确说明(不编 ✔,见拒答那篇 ✔)。
三、失败归因规则(写下来就不吵了)
| 现象 | 归因 | 先改哪边 |
|---|---|---|
| 正确片段没进候选集 | 检索(召回 ✔) | 切分/解析/索引 ✔ |
| 正确片段进了但排太后 | 检索(排序 ✔) | 排序信号/去重 ✔ |
| 片段对但答案错 | 生成 ✔ | 提示词/示例/引用要求 ✔ |
| 答案对但没引用 | 生成 ✔ | 引用格式与校验 ✔ |
| 片段不足却给答案 | 生成 ✔(应拒答 ✔) | 拒答标准与判据 ✔ |
| 片段互相矛盾 | 两边 ✔ | 检索加时效/权威信号 + 生成说明冲突 ✔ |
关键:这张表要事先定好 ✔,并在复盘时直接引用 ✔ —— 否则每次都要重新吵一遍 ✗。
四、怎么验证契约在生效
- 分段指标(召回/位次/引用率/编造率 ✔)分别看 ✔(见三段评测那篇 ✔);
- 契约测试:构造"检索故意给错片段"的用例 ✔,看生成侧是否会拒答 ✔;
- 反向测试:给对的片段 ✔,看生成侧是否稳定答对 ✔。
五、两个常见反模式
- 把一切归给模型 ✗(于是永远在换模型 ✔);
- 契约只存在于口头 ✗(新人不知道,冲突照旧 ✔)→ 写进交接文档 ✔。
一条判据
拿一个错误答案 ✔,能否在 10 分钟内按既定规则说出"该改哪一侧" ✔?
不能,说明分工契约还没写清 ✗。