sample-sweep-nondeterminism · ZH · 2026-10-19

同一提示词跑五遍:在一把 key 上横扫各后端的 temperature 与 seed 参数

本文介绍如何利用一个 API key 调用多个模型后端时,通过统一采样参数(temperature 和 seed)来比较输出稳定性。内容涵盖各后端对 seed 参数的支持差异、temperature 区间的夹取规则,以及如何搭建可复现的采样夹具,帮助开发者更科学地评估不同模型在相同提示词下的表现。

为什么需要统一采样参数

在多后端环境中,同一提示词在不同模型上表现可能差异很大,部分原因是采样参数(temperature、seed)的默认行为不同。要公平比较输出稳定性,必须显式控制这些参数,并了解各后端的支持情况。

各后端对 seed 参数的支持

  • OpenAI 系(GPT):通常支持 seed 参数,但文档注明结果不保证完全可复现,仅作为尽力而为的参考。
  • Claude 系:Anthropic 的 API 目前不提供 seed 参数,温度控制是主要手段。
  • DeepSeek、Qwen、GLM、Kimi 等:多数兼容 OpenAI 接口的后端支持 seed,但具体实现和可复现性因厂商而异,需查阅各自文档。
注意:即使后端接受 seed,由于模型内部并行计算、浮点精度等因素,多次调用仍可能产生微小差异。

temperature 区间的夹取规则

不同后端对 temperature 的有效范围定义不同:

  • 部分后端要求 temperature 在 [0, 2] 之间,超出则报错或自动夹取。
  • 部分后端使用 [0, 1] 区间,传入大于 1 的值可能被静默截断为 1。
  • 少数后端允许 temperature 为 0,表示贪婪解码,但实际行为可能仍受其他采样参数影响。

建议在夹具中显式将 temperature 限制在目标后端文档声明的范围内,避免因夹取导致比较失真。

搭建可复现的采样夹具

以下是一个通用夹具的设计思路,不依赖具体语言实现:

  1. 定义测试用例:选择一组有代表性的提示词,覆盖不同任务类型(生成、分类、摘要等)。
  2. 参数矩阵:对每个后端,设置多个 temperature 值(例如 0、0.5、1.0),并尝试传入相同的 seed(若后端支持)。
  3. 重复采样:每个(提示词,后端,参数)组合重复调用 N 次(如 5 次),记录输出。
  4. 归一化处理:对输出进行标准化(如去除首尾空白、统一编码),便于比较。
  5. 计算稳定性指标:可使用输出完全一致的比例、编辑距离、语义相似度等指标量化稳定性。
  6. 结果对比:横向比较不同后端在相同参数下的稳定性表现,并记录参数被夹取的情况。

实践建议

  • 优先在支持 seed 的后端上验证可复现性,再逐步扩展到不支持的模型。
  • 记录每次调用的实际参数(尤其是被后端修改后的值),便于回溯。
  • 对于不支持的 seed 的后端,可增加重复次数并统计输出分布,间接评估稳定性。
  • 使用聚合站的同一 API key 调用多后端时,确保请求体正确映射参数,避免因接口差异导致参数丢失。

通过以上方法,你可以在一个 key 下系统性地比较各后端的采样行为,为模型选型提供数据支持。