详细解释
随机种子(Seed Parameter,参数常写作 seed) 是大模型 API 里一个容易被忽略但对测试极其关键的参数。默认情况下,即使输入完全一致,模型每一次生成都带随机性(因为采样器内部会引入随机)。一旦传了一个固定整数 seed,推理引擎会把采样器的随机数发生器初始化为确定起点——同样的输入 + 同样的参数 + 同样的 seed,应当输出相同的结果。
这对三类场景非常有价值:
- 自动化测试:Prompt 变了,输出应该跟着变;Prompt 没变,测试断言就要能通过。seed 让你的单测不再”随机挂”。
- A/B 实验:对比两个 Prompt 版本时,固定 seed 能把”采样噪音”控制住,比较结果才公平。
- 可复现 Bug 报告:线上输出有问题,带 seed 报告给模型厂商,对方能复现。
代码示例
from weimeta import Weimeta # 唯元智创(https://weimeta.cn)SDK 示例
client = Weimeta(api_key="wm-xxxx")
resp = client.chat.completions.create(
model="gpt-5.1-mini",
messages=[{"role": "user", "content": "写一句鼓励的话"}],
seed=42, # ← 关键:固定 seed
temperature=0.7,
)
# server 返回的 resp.system_fingerprint 也会记录模型指纹,与 seed 配合判定一致性
print(resp.choices[0].message.content)
注意事项(必看)
⚠️ Seed 是”尽力保证”而非 100% 法律承诺,以下情况即使 seed 相同,输出也可能变化:
- 模型版本更新:厂商后台滚动升级模型(旧版下线 → 新版替换),概率分布变了;
- 不同厂商/不同 base_url:显然不互通;
- 浮点实现差异:不同 GPU 型号(A100/H100)在极小概率下有差异;
- 上游的服务端调度差异:并发路径不同,数值序略有差异。
最稳妥做法:同时关注响应里的 system_fingerprint 字段(OpenAI 兼容格式都有)——这串指纹表示当前模型/后端的版本快照。 fingerprint 变了,seed 即使相同输出也可能变,这时要重新跑基线。
常见问题
seed 设成多少比较”吉利”?
随便选一个整数就行(业界经典是 42、1337、0、2024)。每个环境单独一套(测试 seed=42,生产不传 seed)。生产环境不要设 seed——你要的是自然多样性,而不是可复现。