2026 Deep Into Inference

大模型推理參數(Inference Parameters)入門

呼叫大型語言模型(LLM)時,可以透過一組推理參數調整模型「如何生成文字」。這些參數不會改變模型本身的知識或能力,只影響輸出的風格、長度與穩定性。

可以在 Playground(例如 AWS Bedrock 控制台)用滑桿調整,也可以在 API 呼叫中直接傳入。


背景:模型是怎麼生成文字的?

LLM 是逐個 token 生成的。每一步,模型都會為所有候選 token 計算一個機率分布,然後從中選出一個,接在已生成的文字後面,再繼續下一步。

1
2
輸入:「今天天氣很」
候選:好(45%)、熱(25%)、冷(15%)、糟(8%)、藍(0.1%)…

推理參數主要控制兩件事:

  1. 怎麼選下一個 token(Temperature、Top P、Top K)
  2. 什麼時候停止生成(Max tokens、Stop sequences)

1. Temperature(溫度)

作用: 控制輸出的隨機程度。

設定 效果 適用場景
低(0~0.3) 傾向選機率最高的詞,回答穩定、一致、保守 程式碼生成、資料抽取、事實問答、分類
中(0.4~0.7) 平衡穩定與自然 一般對話、摘要
高(0.8~1.0+) 低機率的詞也有機會被選,更多樣、有創意,但更容易出錯或離題 創意寫作、腦力激盪、文案發想

原理: Temperature 會「拉平」或「拉尖」機率分布。

  • 溫度低 → 高機率的詞更突出,幾乎總被選中
  • 溫度高 → 各詞機率差距縮小,冷門詞機會變大

2. Top P(核取樣,Nucleus Sampling)

作用: 依累積機率縮小候選範圍。

將候選詞按機率由高到低排列,依序累加,直到總和達到 P,只在這些詞中挑選。

1
2
3
Top P = 0.9
好(45%) + 熱(25%) + 冷(15%) + 糟(8%) = 93% ≥ 90% → 只從這 4 個詞中選
「藍」等冷門詞被排除

特點: 候選詞的數量是動態的。

  • 模型很有把握時(某個詞機率很高),候選很少
  • 模型不確定時,候選會變多

3. Top K

作用: 只保留機率最高的 K 個候選詞。

1
Top K = 3 → 只從「好、熱、冷」中選

與 Top P 的差異:

Top K Top P
篩選依據 固定數量 固定機率總和
候選數 永遠是 K 個 隨情況變化
缺點 模型很確定時仍保留 K 個,可能選到不合適的詞;很不確定時又可能過度限制 較靈活,通常更常用

註:並非所有模型 / API 都支援 Top K。


4. Max Tokens(最大 Token 數)

作用: 限制回應的最大長度。

  • 達到上限時,輸出會被直接截斷(可能話說到一半)
  • API 通常按 token 計費,設定上限有助於控制成本
  • 1 個 token 大約是英文 3~4 個字元;中文 / 日文通常 1 個字約 1~2 個 token(視模型的 tokenizer 而定)

建議: 依任務需求設定合理上限,例如一句話的分類任務設小一點,長文生成設大一點。


5. Stop Sequences(停止序列)

作用: 指定一段或多段文字,模型一旦生成這些文字就立即停止。

常見用途:

  • 只要單行答案 → 設定 "\n"
  • 防止模型自己扮演下一輪使用者 → 設定 "Human:" 或 "User:"
  • 結構化輸出 → 遇到 "</answer>" 就停
1
2
Stop sequence: "\n"
輸出:「答案是 42」(遇到換行即停止,不會繼續補充說明)

API 呼叫範例(AWS Bedrock Converse API / Python)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import boto3

client = boto3.client("bedrock-runtime", region_name="us-east-1")

response = client.converse(
    modelId="<model-id>",
    messages=[
        {"role": "user", "content": [{"text": "用一句話介紹東京。"}]}
    ],
    inferenceConfig={
        "temperature": 0.5,
        "topP": 0.9,
        "maxTokens": 200,
        "stopSequences": ["\n\n"],
    },
    # Top K 等模型專屬參數放在這裡(是否支援依模型而定)
    additionalModelRequestFields={"top_k": 50},
)

print(response["output"]["message"]["content"][0]["text"])

經驗法則

先使用預設值,有明確理由時才調整——而且一次只改一個,再觀察效果。

  • 同時修改多個參數,結果改變時就無法判斷是哪個參數造成的
  • Temperature 和 Top P 通常只調其中一個,兩者都在控制隨機性,同時調容易互相干擾
  • 需要可重現、穩定的結果 → 降低 Temperature
  • 需要多樣化、有創意的結果 → 提高 Temperature(或 Top P)

速查表

參數 一句話說明 調高 → 調低 →
Temperature 隨機 vs. 專注 更有創意、更不穩定 更穩定、更保守
Top P 依累積機率篩選候選詞 候選更多、更多樣 候選更少、更集中
Top K 只保留前 K 個候選詞 候選更多、更多樣 候選更少、更集中
Max tokens 回應長度上限 允許更長回答、成本可能更高 回答更短、可能被截斷
Stop sequences 遇到指定文字即停止 — —
Saka
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy