非确定性
Non-determinism
相同输入可能产生不同输出。用完全相同的上下文运行模型两次,可能得到两个不同答案——有时只是一个词不同,有时是完全不同的思路。你的代码无需任何改动,这种情况也会发生。
这是模型生成文本的方式以及模型提供商处理请求方式共同决定的属性。推理过程中,模型生成下一个可能 Token 的概率分布,并从中采样一个——通常故意加入一些随机性,因为总是选概率最高的 Token 会产生重复、质量更低的文本。早期一个不同采样的 Token 会改变之后的每一个 Token,于是一个词的差异就可能演变成完全不同的思路。提供商端的服务还会叠加更多差异:请求被批量处理在共享硬件上,批次之间微小的浮点差异可能让一次接近的抉择偏向不同的 Token。没有开关能让你把这一切关掉。
预期 Agent 在同一任务上会产生结果分布。大多数回复会落在合理的质量钟形曲线内——这就是为什么非确定性总体上还可以容忍——但尾部是真实存在的:有时模型感觉很敏锐,有时感觉像完全乱了套。同一任务,不同的骰子点数。这有两个实际后果。重试是一种合法策略:一次失败只是从分布中抽取了一次,重新尝试同一任务可能刚好抽到更好的结果。验证因此比确定性工具更重要——你不能测试一次 Agent 的行为就指望它复现,所以自动化检查必须能抓住那些差劲的抽取。
注意不要对此过度叙事化。人类是模式匹配机器,一连串糟糕的输出会让你觉得这就是模型这周变差了的证据。通常那只是分布的尾部。
用法:
“Claude 今天表现很差。他们是不是发了一个更差的版本?”
“大概率不是——模型输出是非确定性的。同一任务你会有好日子和坏日子。明天再试试,别急着找原因。”