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