每個 LLM API 暴露 temperature、top_p、top_k 的某種組合當採樣參數。它們控制模型怎麼從機率分布挑下一個 token。大部分 builder 永遠留預設;某些預設值對特定任務產出明顯比替代品差的輸出。
模型怎麼挑下一個 token
每一步,LLM 在它整個詞彙(看模型 5 萬到 20 萬 token)上產出機率分布。「給定目前 context,下一 token 是『banana』機率 0.4、『apple』0.3、『orange』0.1、...」
採樣參數決定實際從這分布挑哪個 token。不同參數產不同輸出風格:
- 永遠挑最高機率 → 確定性、常常無聊
- 按機率隨機抽 → 多樣、有時奇怪
- 中間 → 有創意但連貫
Temperature
Temperature 控制採樣前分布變得多「平」或「尖」。範圍通常 0 到 2。
- Temperature = 0 — 模型永遠挑最高機率 token。輸出確定性。同 input 永遠產同 output。對一致性重要的任務(抽取、分類、結構化輸出)有用。
- Temperature = 0.3-0.5 — 輕微變化但仍聚焦。code 生成、事實 Q&A、技術寫作好。
- Temperature = 0.7 — 常見預設。創意跟連貫平衡。chat、摘要、一般任務好。
- Temperature = 1.0 — 完整按模型分布的「自然」採樣。創意寫作、腦力激盪好。
- Temperature > 1.0 — 越來越隨機。打破 pattern 有用;1.5 以上很快變不連貫。
陷阱:大部分 API 預設 0.7 或 1.0。技術任務這太高。降下來。
Top-p(核採樣)
Top-p 把採樣限制到累積機率至少 p 的最小 token 集合。
- Top-p = 1.0 — 停用、考慮所有 token。
- Top-p = 0.9 — 常見有用值。只考慮共佔 90% 機率質量的 token。
- Top-p = 0.5 — 受限很多。只 top token。
Top-p 是動態:在自信情境(一個 token 80% 可能),它挑那一個 token。在不確定情境(機率散在多候選),它考慮更多。
Top-k
Top-k 把採樣限制到 k 個最高機率 token。
- Top-k = 1 — 同 temperature 0(永遠挑頂)。
- Top-k = 40 — 常見預設。考慮 top 40 token。
- Top-k = 0 — 停用(從完整分布採樣)。
Top-k 在現代 API 較少暴露(Anthropic Claude 不暴露;OpenAI 不暴露;Gemini 有)。
它們怎麼組合
實際上多參數設定時:
- 先套 temperature 縮放(重塑分布)
- 套 top-k 過濾(只留 top k token)
- 套 top-p 過濾(只留累積到 p 的 token)
- 從剩下採樣
大部分人單獨用 temperature 或 temperature + top-p。三個都用是過頭,會產混亂互動。
各任務的務實設定
結構化輸出(JSON、code、分類):
- Temperature: 0
- Top-p: 1.0(temp=0 時無關)
- 為什麼:你要一致、可解析的輸出
技術 Q&A:
- Temperature: 0.2-0.4
- Top-p: 0.9
- 為什麼:事實但允許措辭微變
創意寫作:
- Temperature: 0.7-1.0
- Top-p: 0.9-0.95
- 為什麼:多樣但保持連貫
腦力激盪 / ideation:
- Temperature: 1.0-1.2
- Top-p: 0.95
- 為什麼:探索分布、拿不尋常想法
Chat(預設):
- Temperature: 0.5-0.7
- Top-p: 0.9
- 為什麼:平衡;大部分 API 一般用的預設
常見錯誤
結構化任務 temperature 設太高。 「從這文字抽 email 地址」用 temperature 0.7 有時回對 email、有時回編造變體。抽取用 temperature 0。
創意任務 temperature 設太低。 「生 10 個產品名想法」用 temperature 0.2 回 10 個幾乎一樣的名字。用 temperature 0.9-1.2。
不必要混 top-p 跟 top-k。 挑一個加 temperature。三個的互動效果微妙、很少值得認知 overhead。
把 temperature 當音量。 高不是「更有創意」、是「更隨機」。~1.2 以上有品質懸崖、輸出變不連貫。
推理模型不同
像 o3、DeepSeek R1、有 extended thinking 的 Claude 等模型,採樣參數對推理過程有不同影響。很多 API:
- 推理模型不暴露 temperature
- 預設建議 temperature 1.0(因為模型做自己的結構化探索)
- 有時顯示不同最佳實踐
用推理模型的話,讀 provider 特定指引。
什麼時候不要想這些
隨意 chat 使用。預設通常 OK。
規模化 production。測試後設一次 temperature,放著。
推理模型。信 provider 建議。
第一輪原型。先讓 prompt work 再調採樣。
調整重要的時候
- 建結構化輸出管線(抽取、分類):低 temperature 關鍵
- 創意工具,輸出多樣性是產品:高 temperature 重要
- 評估:在多 temperature 測模型行為揭示能力 vs 隨機運氣
- 成本優化:不必要撞 max_tokens 的話低 temperature 能減 token 用量
決策樹
- 需要一致 JSON / 結構化輸出:temperature = 0
- 事實 Q&A 或技術內容:temperature = 0.2-0.4
- 一般 chat:temperature = 0.5-0.7(預設 OK)
- 創意寫作或腦力激盪:temperature = 0.9-1.2
- 沒時間想:留預設;輸出錯時再回來
下一步
- 在你具體任務測 temperature 0、0.5、1.0 — 挑 work 的
- production 任務,記錄 prompt 旁邊的採樣參數
- 特別讀推理模型的採樣
- 讀 beam search 跟 contrastive search(較少見但對某些任務有用)