一句话定义:可复现性是指——同样的输入、同样的代码、同样的环境,再跑一遍还能不能得到同样的结果。在 AI 里,它经常表现为一个很实在的疑问:同一句提示词,为什么昨天和今天的回答不一样?
打个比方。做菜讲究"照着菜谱来",但真下了厨你会发现:同样的菜谱、同样的食材,换个灶、换个锅、手抖多放了半勺盐,味道就有偏差。可复现性讨论的不是"好不好吃",而是"这次的偏差,是菜谱变了,还是灶变了,还是只是手抖"。
哪些随机性是可以固定的
- 采样参数:把 temperature 调成 0(贪心解码,每次选概率最高的词),或者固定随机种子(seed)、top_p / top_k,采样这一步就基本稳定了。
- 输入本身:提示词、系统提示、对话历史、附带的上下文,一个字都不能差。
- 模型版本:这里的坑最深。服务方在后台换了权重、改了量化方式或推理实现,你这边什么都没动,输出也会变。所以做严肃对比时,要记录调用的模型标识,并以官方文档为准。
- 代码与环境:依赖库版本、随机数生成器的实现、数据读取和打乱的顺序。
哪些随机性基本固定不了
即使上面全做对了,"100% 一致"仍然很难保证,根源往往在硬件和服务的调度上。GPU 上大量并行运算做求和时,加法结合顺序是不固定的;浮点数的加法顺序一变,末位就会差一点。这种误差平时看不出来,但模型有几十上百层,一层层放大之后,可能让两个候选词的分数互换,生成路径就此分岔——后面越差越远。
另外,同一个请求被分到哪个批次、落在哪台机器、当时负载多高,这些由服务方决定,你控制不了。所以业界更常见的做法是:不追求逐字一致,而是追求"在允许的波动范围内统计一致"。
| 想做的事 | 更靠谱的做法 |
|---|---|
| 排查某次回答为什么怪 | 固定温度、种子、模型版本,降低并发,重跑几次看是否稳定复现 |
| 比较两个提示词谁更好 | 不要只看单次结果,各跑几十次比较整体分布 |
| 做上线回归测试 | 记录模型标识和主要参数,设定可接受的结果波动阈值 |
和相邻概念的区别
可复现性不等于确定性(determinism)。确定性是理想状态:完全一样。可复现性是工程上的目标:在写清楚条件的前提下,别人能复现出你的结论。它也不等于正确性——一个结果再稳定,也可能是错的。
对从业者和普通人的意义
对做产品或做评测的人来说,把"温度、种子、模型标识、上下文构造方式"当成实验记录的一部分,是基本功;只凭一次输出下结论,很容易被噪声骗到。对普通用户来说,同一问题问两遍答案不同,是这类系统的常态,不代表它坏了;如果你需要稳定、可核对的输出,就要求低温度、明确指令,并接受"稳定"只在一定范围内成立。
