返回指南
故障排查·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 响应(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 发布说明在 Claude Opus 4.1 于 2025 年 8 月 5 日发布时标记了相同规则,该模型后来已退役(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 上,temperature 为 0.3、同时设置 top_p 为 1.0 仍然失败(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 分支修复),而 2026 年 3 月 17 日发布于 @langchain/anthropic 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 请求体中设置 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` 已弃用于此模型。”——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 在 v1.0 中从其 Messages 方法中移除了这些参数,该版本于 2026 年 8 月 20 日发布(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 也会按你发送的请求体转发,因此这里应发送两者中的一个。如果上游拒绝这对参数,其 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)。请删除该键,而不是将其设置为看似中性的值。

为什么 n8n 或 LangChain 会在我从未设置 top_p 的情况下发送它?

两者都曾传递默认值。在 1.114.1 版本之前,n8n 的 Anthropic Chat Model 节点会发送 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` 已弃用于此模型”是什么意思?

这是 Claude Opus 4.7 及更高版本、Sonnet 5、Fable 5 和 5.1 的更严格规则:这些模型会直接拒绝非默认采样值。请删除这些参数。通过 Kunavo 调用时,我们提供的这些模型会将它们删除,因此调用可以成功通过。

在 Kunavo 上,被拒绝的请求会产生费用吗?

不会。被上游拒绝的请求会按零成本记录。

相关指南

更多错误语义请参阅 错误参考;通过 注册 和 身份验证指南 获取密钥只需一分钟。