M6第 1 课 · 辅导 / 客服 RAG
M6-L1.2M6-L1.3Technical Design:课程客服助手
一句话: 一份基于来源的客服助手参考设计:版本化的知识库掌管事实,检索提供证据,模型只负责转述和引用,策略代码决定何时回答、拒答或升级。
教学参考。 这份设计是为 handbook 撰写的,与其他三个 lesson 使用同一套九节骨架。它满足参考 PRD;超出第一版范围的内容有标注。这份设计在 n8n 上的实现见下一页。
1. 设计原则
Section titled “1. 设计原则”知识库是唯一的事实来源;模型只转述并引用它。 检索决定存在哪些证据,代码决定路径,模型决定措辞。模型说的任何内容,只有在代码能把它追溯到某个检索段落时才会展示。
2. 架构与所有权
Section titled “2. 架构与所有权”文档(负责人、版本、生效日期) │ 导入:解析 → 按结构切分 → 加上下文标题 → 清除个人信息 ▼知识库版本 N ──► 索引(关键词 + 向量) │ 检索 top-k → 重排序 ▼问题 ──► 路由器(策略代码)──► 回答服务(模型,必须引用) │ │ ├─ 升级 ──► 工单 └─ 引用校验器(代码)──► 回复 + 出处 └─ 未覆盖 ──► 找人途径| 组件 | 负责 | 第一版的实现 |
|---|---|---|
| 导入 | 把文档变成带元数据的段落;清除个人信息 | 按文档类型的解析器;按标题切分;每个文本块一行上下文标题 |
| 知识库 | 版本、生效日期、取代关系 | 每次发布一个版本的文档存储 |
| 索引 | 找到候选段落 | 关键词索引加向量;重排序器留到后续 |
| 路由器 | 路径:回答、未覆盖、升级 | 配置:升级话题清单、分数阈值 |
| 回答服务 | 用用户的语言措辞,附引用 | 模型被要求只依据段落作答,并返回结构化对象 |
| 引用校验器 | 拒绝任何不在检索集合内的引用 | 代码 |
| 升级适配器 | 创建带上下文的工单 | 客服系统的 API |
| 答案日志 | 可追溯性:问题、知识库版本、段落 ID、路径、延迟、成本 | 只追加的存储 |
3. 信任边界与 gate
Section titled “3. 信任边界与 gate”- 模型输出在校验之前不可信。 回答服务返回
{answer, citations[], route};校验器检查每个引用 ID 都在检索集合内,且被引用的文字与答案有重叠。校验失败则拦截回复,改为返回”未覆盖”。 - 路由是配置,不是 prompt。 升级话题清单和检索分数阈值放在配置里,所以问题中的 prompt 注入改不了它们。
- 知识发布是一道人工 gate。 文档负责人发布一个版本;导入先在预发布索引上运行,再跑评测集,之后版本才上线。
- 用户输入永远到不了业务系统。 第一版没有写工具;升级只把文本传给工单,别无其他。
4. 状态与数据
Section titled “4. 状态与数据”- 每份文档都有
owner、version、effective_from和superseded_by。检索只在当前版本内进行,所以已下线的段落找不到。 - 每个答案都记录知识库版本和段落 ID,所以任何答案事后都可以复现或审计。
- 对话状态只有对话记录本身,按 PRD 规定的期限保留,然后删除。
- 向量按段落哈希缓存,重建索引时只重算变化的部分。
5. 独立检查
Section titled “5. 独立检查”- 一个独立于回答 prompt 的基于来源检查器,对答案抽样评分,判断引用段落是否支持答案。
- 低置信度的答案和所有升级都进入人工复核队列;纠正结果变成新的评测用例,必要时也变成新的知识库条目。
- 检查器从不改写答案,只报告。
6. 失败处理与幂等
Section titled “6. 失败处理与幂等”| 失败 | 行为 |
|---|---|
| 没有段落达到阈值 | 回复”未覆盖”并给出找人途径 |
| 模型超时或出错 | 重试一次,然后回复”未覆盖”;绝不静默留空 |
| 引用校验失败 | 回复被拦截;记录为一次基于来源失败 |
| 工单创建被重试 | 每个对话一个幂等键,一次升级只创建一张工单 |
| 索引重建失败 | 旧版本继续在线;新版本绝不部分发布 |
7. 评测与测试
Section titled “7. 评测与测试”- 评测集: 真实的历史问题,包括超范围问题、关于已废止政策的问题和升级话题。由知识负责人维护,并从复核队列的纠正中不断补充。
- 指标: 检索召回率 @k、答案正确率、引用准确率、拒答准确率、升级准确率。阈值来自 PRD,在调优前固定。
- 何时运行: prompt、切分、索引设置或知识库每次改动时。低于阈值的回退会阻止这次改动。
- Guard test: 已下线的文档不能被引用;工单导出中埋入的个人信息不能进入索引;检索集合之外的引用必须被拦截;升级话题绝不能被直接回答。
- 模型和工单系统的凭据放在服务端并遵循最小权限;助手只能创建工单,不能做别的。
- 成本:缓存向量、限制上下文长度;如果路由环节用到模型,用更便宜的模型。
- 可观测性:每个答案的追踪记录;“未覆盖”率、升级率、负面反馈、延迟和成本的看板;“未覆盖”率上升时告警,这通常意味着知识库落后了。
- 知识维护:向负责人发送超过复核日期的文档报告。
第一版之后: 重排序器;混合检索调优;查询用户自己状态的读工具;带确认和审计的写工具,见延伸。
已经告诉模型只引用检索到的段落,为什么还要用代码校验引用?
因为指令不是保证。校验器把”模型应该只引用检索到的段落”变成系统强制成立的属性,也让基于来源的失败出现在日志里,而不是出现在用户的截图里。
在遵守全部产品规则的前提下,这个设计最小的版本是什么?
一个带版本的文档存储、一个关键词索引、一个固定阈值、一次返回结构化输出的模型调用、引用校验器和工单适配器。重排序、向量和基于来源检查器能提高质量,但规则的成立并不依赖它们。
- PRD:课程客服助手
- 案例概览:辅导 / 客服 RAG
- 参考实现:n8n 版客服 RAG,这份设计在一个工具上的实现
- Technical Design:Marketing Studio,上一级阶梯
Syllabus 行:M6-L1.2、M6-L1.3