"同样的输入,为什么这次结果不一样"
这是 AI 系统最常见的追问 ✔。原因通常有三类:**模型/版本变了**、**提示词变了**、**数据(检索结果)变了** ✗。
如果这三件事没有一起记录下来,就永远答不清楚 ✗。
一、可复现调用要记录什么
每次调用至少记录四组:
1. **模型标识**(名称 + 版本 + 关键参数:温度、上限);
2. **提示词版本**(含模板版本号与变量值摘要 ✔);
3. **数据版本**(检索结果集:用了哪些片段、它们的哈希、来源文档版本);
4. **组装清单**(哪些组件参与、各多少 token —— 见可组装上下文那篇 ✔)。
**关键**:不要只记"最终拼好的字符串" ✗ —— 那样无法归一化、无法定位是哪一段变了 ✗。
二、把"版本"绑成一个整体
做法:给每次调用生成一个**调用指纹**(fingerprint):
```
fingerprint = hash(模型 + 参数 + 提示词版本 + 数据片段哈希 + 组装策略版本)
```
好处:
三、缓存与可复现的关系
四、评测里的用法
五、落地顺序
1. 先加**提示词版本号**与**模型参数**记录(半天 ✔);
2. 再把检索片段的**哈希**记下来 ✔;
3. 然后算指纹并进缓存键 ✔;
4. 最后把组装清单也纳入(用于定位"哪一段变了")✔。
一条判据
> 只给你一条日志,你能否在 5 分钟内回答"当时模型看到了什么" ✔?
> 答不上,说明可复现性还没做到位 ✗。