## 可复现构建:计算机科学 vs. 工程视角 编译器(现在包括LLM)*必须*是确定性的问题,既有理论答案,也有实践答案。从计算机科学的角度来看,编译器*应该*是确定性的——相同的输入产生相同的输出。然而,在现实世界的工程中,实现这一点非常困难。 构建输出受多种因素影响,不仅仅是源代码,还包括编译器版本、系统环境、时间戳,甚至硬件调度。这些“噪声”元素会导致构建漂移,这是在2000年代内核补丁工作中深刻体会到的教训。 虽然编译器旨在保持*语义*等价性(相同的行为,不一定是相同的代码),但真正可复现的构建需要深思熟虑的工程:冻结工具链、控制环境和仔细剥离元数据。像Debian可复现构建项目这样的努力表明这是可以实现的,从而产生可重复、可验证和封闭的构建。 将此应用于LLM,工程方法占主导地位。虽然不能保证完全的确定性,但控制输入、使用测试验证输出以及使用可复现的流水线至关重要。就像传统软件一样,一个“概率系统”在采取适当的保障措施后,仍然可以提供在操作上更好的结果。