AI 逻辑也可以被单测
"AI 部分没法测" ✗ 是最常见的借口 ✔ —— 其实大部分逻辑是可测的 ✔,
只是要把"模型调用"从"业务逻辑"里分出来 ✔。
让 AI 逻辑可单测 ✔,收益很大 ✔:改起来快、回归便宜、bug 定位准 ✔。
一、把可测的部分拆出来(四类)
| 部分 | 可测性 | 怎么测 |
|---|---|---|
| 组装(模板 + 变量 → 最终提示) | 完全可测 ✔ | 快照测试(snapshot ✔) |
| 解析与校验(输出 → 结构化对象 ✔) | 完全可测 ✔ | 用构造的输出样本单测 ✔ |
| 路由与降级(选哪个模型/走哪条路 ✔) | 完全可测 ✔ | 输入条件 → 期望路径 ✔ |
| 模型本身的行为 | 不可单测 ✗ | 用评测集(见评测那几篇 ✔) |
关键:前三类覆盖了大部分 bug ✗→✔(格式错、解析崩、路由错 ✔),
而且它们不需要调用模型 ✔(毫秒级跑完 ✔)。
二、具体做法(三个)
- 注入模型客户端(依赖注入 ✔)→ 单测里用假客户端返回固定输出 ✔;
- 快照测试提示词 ✔(模板改动会体现为快照差异 ✔,便于 review ✔);
- 用真实输出做测试夹具 ✔(从线上收集的"疑难输出"存成 fixture ✔ —— 见边界用例库 ✔)。
三、快照测试的两个注意点
- 快照要能解释 ✗→✔(差异要人看懂:是变量变了还是措辞变了 ✔);
- 不要盲目更新快照 ✗("一键接受"会让测试失去意义 ✔ —— 每次更新都应说明原因 ✔)。
四、哪些不该单测
- 模型输出的具体措辞 ✗(会随版本变 ✔ → 应测"是否符合结构/是否含必需字段" ✔);
- 端到端质量 ✗(那是评测集的活 ✔)。
判断标准 ✔:这个断言在同一系统版本下是否稳定 ✔?
稳定 → 单测 ✔;不稳定 → 评测 ✔。
五、一条判据
修改提示词模板后 ✔,你能否在不调用模型的情况下发现"变量漏了/格式错了" ✔?
不能,说明组装与解析还没有单测覆盖 ✗。