Temperature / Top-p / Top-k
采样参数控制模型输出的"随机程度"——越高越发散,越低越确定。
详解
Temperature 是控制模型"下一个词选哪个"时随机程度的旋钮。模型每次生成一个 token 时,内部会对词表里所有词算出一个概率分布;temperature 决定这个分布有多"尖"或多"平":设为 0,每次都选概率最高的词,输出完全可复现;设为 1,按原始概率采样,有一定随机性;设得更高,低概率的词也有机会被选到,输出天马行空。实践原则:写代码、做数据提取、需要格式稳定时用 0;写创意文案、头脑风暴、需要多样化时用 0.7–1.0。Top-p 是另一个互补参数(也叫 nucleus sampling,"核采样"):只从累积概率加起来刚好超过 p(如 0.9)的最小词集里采样,意思是只考虑"最主要的那批候选词",直接剔除极低概率的选项,比单纯靠 temperature 更稳定。Top-k 则直接限定只从概率最高的 k 个词里选。三个参数通常只调 temperature;Claude API 还支持 top-p,top-k 较少直接暴露。
一个类比
想象你问朋友"今晚吃什么"。temperature=0 时他永远说"红烧肉"(最常见答案);temperature=1 时他按平时的饮食偏好随机推荐;temperature=2 时他可能突然说"生蚝配榴莲"——离谱但也是他嘴里能说出来的词。Top-p 则相当于他只从"今晚有心情吃"的候选里挑,把那些"完全不可能"的选项先排除掉。
举个例子
import anthropic
client = anthropic.Anthropic()
# temperature=0:结果稳定可复现,适合代码生成、结构化提取
resp_precise = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=64,
temperature=0,
messages=[{"role": "user", "content": "Python 里如何反转一个列表?只给代码"}]
)
print("精确模式:", resp_precise.content[0].text)
# temperature=1:创意发散,适合头脑风暴
resp_creative = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=64,
temperature=1,
messages=[{"role": "user", "content": "给一个 AI 学习网站起三个有创意的名字"}]
)
print("创意模式:", resp_creative.content[0].text)PYTHON 示例
相关概念
- → Structured Output· 结构化输出