返回指南
疑難排解·2026年9月23日·閱讀約 6 分鐘

「此模型不能同時指定 `temperature` 和 `top_p」——傳送其中一個,而較新的 Claude 模型則兩者都不要傳送

只傳送兩者之一。Anthropic 對 Claude Haiku 4.5 記載了這項規則;開發者在 Claude Opus 4.6 與 Sonnet 4.6 上也遇到相同的 400 錯誤;而在 Claude Opus 4.7 及之後的版本,規則收緊為兩者都不能傳送。罪魁禍首通常是用戶端或框架填入了你從未設定的參數。

最後審核於 。

只傳送兩者之一。Anthropic 對 Claude Haiku 4.5 記載了這項規則;開發者在 Claude Opus 4.6 與 Sonnet 4.6 上也遇到相同的 400 錯誤;而在 Claude Opus 4.7 及之後的版本,規則收緊為兩者都不能傳送。罪魁禍首通常是用戶端或框架填入了你從未設定的參數。

錯誤

Anthropic API response (HTTP 400)
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "`temperature` and `top_p` cannot both be specified for this model. Please use only one."
  },
  "request_id": "req_..."
}

原因與解決方法一覽

原因解決方法
你的程式碼或底層框架同時傳送了兩者只傳送你真正要使用的其中一個,並刪除另一個鍵。
另一個是像 top_p: 1 這樣的「中性」預設值據回報仍會同樣失敗。請移除該鍵,不要只將它正規化。
較舊的 LangChain JS 或 n8n 建置版本升級至 @langchain/anthropic 1.3.24 或更新版本,以及 n8n 1.114.1 或更新版本。
LiteLLM 會將兩者都傳遞下去對該模型加入 additional_drop_params: ["top_p"]。
你已移轉至 Claude Opus 4.7 或更新版本、Sonnet 5 或 Fable 5這些版本的規則更嚴格:移除兩者——任一者的任何非預設值都會被拒絕。

哪些 Claude 模型會強制執行這項規則(截至 2026 年 9 月)

Anthropic 的 Haiku 4.5 移轉指南:只使用 temperature 或 top_p,不要同時使用——兩者同時設定會在 Claude Haiku 4.5 上回傳 400,對從 Claude 3.x 遷移而來的程式碼而言是破壞性變更(https://platform.claude.com/docs/en/models/haiku-4-5/migration-guide)。Anthropic 的 API 發布說明在 2025 年 8 月 5 日 Claude Opus 4.1 發布時標示了相同規則;該模型目前已退役(https://platform.claude.com/docs/en/release-notes/api)。AWS 在 Bedrock 文件中也對 Claude Sonnet 4.5 與 Claude Haiku 4.5 說明了這項規則(https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-anthropic-claude-messages-request-response.html)。我們找不到 Anthropic 明確說明 4.6 模型適用此規則的頁面,但開發者回報 Claude Opus 4.6(OpenHands issue #12846)與 Claude Sonnet 4.6(opencommit issue #566)會出現這個確切的 400 錯誤。Claude Opus 4.7 及更新版本如下所述:在這些版本中,傳送其中一個就已經太多。

傳送其中一個——並刪除另一個鍵

除非有理由不這麼做,否則請保留 temperature:Anthropic 的 API 參考文件指出,top_p 僅建議用於進階使用情境(https://platform.claude.com/docs/en/api/messages)。請移除第二個欄位,而不是將它設為你認為中性的值——一名開發者回報,在 Claude Sonnet 4.5 上,top_p 為 1.0 且 temperature 為 0.3 時仍然失敗(n8n issue #18304)。

one_knob.py
from openai import OpenAI

client = OpenAI(base_url="https://api.kunavo.com/v1", api_key="sk-kn-...")

def one_sampling_knob(params: dict) -> dict:
    """Where the rule applies, send temperature or top_p, not both. Keep temperature."""
    if params.get("temperature") is not None:
        params.pop("top_p", None)
    return params

sampling = one_sampling_knob({"temperature": 0.3, "top_p": 0.9})  # {"temperature": 0.3}

resp = client.chat.completions.create(
    model="claude-haiku-4-5",
    max_tokens=512,
    messages=[{"role": "user", "content": "Classify this support ticket: ..."}],
    **sampling,
)
print(resp.choices[0].message.content)

在加入第二個參數的用戶端中修正

LangChain JS:ChatAnthropic 0.3.x 會在你設定的 top_p 旁一併傳送預設 temperature(issue #9258;PR #9362 已於 2025 年 11 月在 0.3 分支修正),而 @langchain/anthropic 於 2026 年 3 月 17 日發布的 1.3.24 版本包含 PR #10420,停止加入任何你未設定的取樣欄位(https://github.com/langchain-ai/langchainjs/pull/10420)。n8n:Anthropic Chat Model 節點會傳送 LangChain 的預設值(topP -1、temperature 0.7);已在 2025 年 10 月 2 日發布的 n8n 1.114.1 中修正(https://github.com/n8n-io/n8n/pull/20286)。LiteLLM:依照每次呼叫或每個模型,使用 additional_drop_params 指定要移除的參數(https://docs.litellm.ai/docs/completion/drop_params)——但其 Anthropic 直通路由例外;該回報以直通請求不會被修改為由結案(https://github.com/BerriAI/litellm/issues/15097)。Amazon Bedrock:在 Converse 的 inferenceConfig 中設定 temperature 或 topP,或在 InvokeModel body 中設定 temperature 或 top_p——絕不可同時設定兩者(https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InferenceConfiguration.html)。

litellm-config.yaml
model_list:
  - model_name: claude-haiku-4-5
    litellm_params:
      model: openai/claude-haiku-4-5        # Kunavo speaks the OpenAI chat shape
      api_base: https://api.kunavo.com/v1
      api_key: sk-kn-...
      additional_drop_params: ["top_p"]     # keep temperature, never send top_p

在 Claude Opus 4.7 及後續版本中,兩者都不要傳送

較新的模型更進一步。在 Claude Opus 4.7 及後續模型上,將 temperature、top_p 或 top_k 設為任何非預設值都會回傳 400(https://platform.claude.com/docs/en/models/opus-5-5/migration-guide);Claude Sonnet 5 也相同(https://platform.claude.com/docs/en/models/sonnet-5/migration-guide),且此規則延伸至 Claude Fable 5(https://platform.claude.com/docs/en/models/fable-5/migration-guide)和 Fable 5.1(https://platform.claude.com/docs/en/models/fable-5-1/migration-guide)。錯誤訊息有所變更——開發者會看到「`temperature` is deprecated for this model.」——而 Anthropic 的 API 參考文件現在將這三個參數全部標記為已棄用:對於 Claude Opus 4.6 之後發布的模型,為了向後相容,僅接受 temperature 為 1.0 或 top_p 為 0.99 以上,並且無論 top_k 設為何值都會拒絕(https://platform.claude.com/docs/en/api/messages)。Anthropic Python SDK 已在 2026 年 8 月 20 日發布的 v1.0 中,從 Messages 方法移除這些參數(https://platform.claude.com/docs/en/release-notes/api)。

如果你透過 Kunavo 呼叫

在 Anthropic 移除取樣功能的七個 claude-* 模型——claude-fable-5-1、claude-fable-5、claude-opus-5-5、claude-opus-5、claude-opus-4-8、claude-opus-4-7 和 claude-sonnet-5——上,Kunavo 會在請求離開閘道之前,從 /v1/chat/completions 和 /v1/messages 中刪除 temperature、top_p 與 top_k。你不會在這七個模型上看到此錯誤,但你傳送的值不會產生作用:請求會以上述參數未被傳送的方式送往上游。在 claude-opus-4-6、claude-sonnet-4-6 和 claude-haiku-4-5 上,Kunavo 不會移除任何內容:聊天轉譯器會將任何數值 temperature、top_p 或 top_k 原樣複製到 Claude 請求中,而 /v1/messages 會依你傳送的內容轉送 body,因此請在這些模型上選用其中一個。如果上游拒絕這一對參數,其 400 回應會以未修改的上游訊息文字傳回給你,不會在其他通道上重試,並會以零成本記錄。 另一個較新模型會拒絕的請求參數,請參閱 max_tokens 與 max_completion_tokens 指南.

常見問題

我應該在 Claude 上使用 temperature 還是 top_p?

除非有特定理由,否則使用 temperature。Anthropic 的 API 參考文件僅建議進階使用情境使用 top_p;在 Claude Opus 4.7 及後續版本上,兩者都不能設為非預設值。

top_p = 1 算是未設定嗎?

不要指望如此。一名開發者回報,在 Claude Sonnet 4.5 上,top_p 為 1.0 且同時設定 temperature 時仍然收到相同的 400(n8n issue #18304)。請刪除該欄位,而不是將它設為看似中性的值。

為什麼我從未設定 top_p,n8n 或 LangChain 卻會傳送它?

兩者先前都會傳遞預設值。n8n 的 Anthropic Chat Model 節點在 1.114.1 之前會傳送 LangChain 的預設值(topP -1、temperature 0.7),而 LangChain JS 0.3.x 中的 ChatAnthropic 會在你設定的 top_p 旁傳送預設 temperature。請升級至 n8n 1.114.1 或後續版本,以及 @langchain/anthropic 1.3.24 或後續版本。

「`temperature` is deprecated for this model」是什麼意思?

這是 Claude Opus 4.7 及後續版本、Sonnet 5,以及 Fable 5 和 5.1 上更嚴格的規則:這些模型會直接拒絕非預設取樣值。請移除這些參數。透過 Kunavo 時,我們提供的模型會移除這些參數,因此呼叫可以順利通過。

在 Kunavo 上,被拒絕的請求會產生費用嗎?

不會。上游拒絕的請求會以零成本記錄。

相關指南

更多錯誤語意請參閱 錯誤參考;透過 註冊 和 身分驗證指南 取得金鑰只需一分鐘。