Temperature(溫度)
又稱:溫度 · 隨機性 · sampling temperature · temperature 參數
控制取樣隨機性的參數:調低,模型越傾向選機率最高的 token;調高,冷門選項越有機會被選中。
你會在什麼時候遇到它
你複製的第一段 API 範例程式碼裡大概就有 temperature 這個參數,而多數人照抄了很久都不知道它在調什麼。不懂它,你解釋不了兩個現象:為什麼同樣的問題每次答案都不一樣;以及為什麼分類、抽資料、跑測試這類任務必須把它調低,「可重複」才有意義。
打個比方
像演員的即興幅度:同一份劇本,即興調到最低,他一字不差照台詞念,穩定但死板;調高,他自由發揮,可能有驚喜,也可能演到脫軌。注意:即興幅度不改變演員的演技 —— 溫度也不會讓模型變聰明。
最小範例
from openai import OpenAI
client = OpenAI()
# 抽取任務:要穩定、可重複 → 低溫度
client.chat.completions.create(
model="...",
messages=[{"role": "user", "content": "從這段文字抽出所有日期,只輸出 JSON"}],
temperature=0,
)
# 發想任務:要多樣 → 提高溫度
client.chat.completions.create(
model="...",
messages=[{"role": "user", "content": "幫這個產品想十個不一樣的名字"}],
temperature=1.0,
)機制上,溫度是在 softmax 之前把 logits 除以一個數:低於 1 讓機率分佈更尖(頭部選項更突出),高於 1 讓分佈更平(尾部選項抬頭),設成 0 通常等於直接取機率最高的那個 token(貪婪解碼)。
最常搞錯的地方
- 以為 temperature=0 保證每次輸出完全一樣。它只是「盡可能貪婪」:伺服端的批次組合、浮點加法的順序、GPU 與推理框架的版本、供應商悄悄換掉的模型路由,任何一個變動都可能讓結果不同。要可重複,temperature=0 只是必要條件之一,不是保證書。
- 把溫度當「品質旋鈕」:輸出不好就調高或調低碰碰運氣。溫度只改變從同一個機率分佈裡怎麼挑 token,不改變分佈本身 —— 模型不會的事,調到哪個溫度都不會。想實質改善輸出,去改 prompt、換模型或接 RAG。