跳到主要内容
注册

Claude temperature、top_p、top_k 报错:Anthropic 的规则与改好的请求

给 Claude 传 temperature、top_p 或 top_k 时,会遇到两种不同的报错。用 anthropic 1.0.0 及以后的 Python SDK,调用在你自己的机器上就抛 TypeError,请求根本没有发出去;请求真的带上这几个参数时,Anthropic 的规则可能以 HTTP 400 拒绝它:Anthropic 说 Claude 4.7 及之后的模型只接受默认值,Claude Sonnet 5.5 的页面写明设置这三个参数中的任何一个都会返回 400 错误,而在 API 版本 2026-10-21 上,任何模型收到其中任何一个都返回 400。本页按 Anthropic 的规则(注明核对日期)讲清这两种报错,并给出在 Router One(统一 LLM API 网关,30+ 模型)上 /v1/chat/completions 与 /v1/messages 两种改好的请求。

先判断是哪种报错

  • TypeError: Messages.create() got an unexpected keyword argument 'temperature'(或 'top_p'、'top_k'):Python SDK 在你本机抛出,请求没有发出。见下面的 SDK 一节。
  • HTTP 400,type 为 invalid_request_error、code 为 INVALID_REQUEST:请求已经发出并被拒绝。如果请求里带了 temperature、top_p 或 top_k,请对照下面 Anthropic 的规则。

Anthropic Python SDK 为什么报 TypeError?

从 anthropic 1.0.0(2026-08-20 发布)起,messages.create() 就没有 temperature、top_p、top_k 这三个参数了,此前的 0.125.0 还有(据 SDK 源码,2026-10-30 核对)。传其中任意一个,哪怕传的是默认值,Python 都会在构造请求之前抛 TypeError,请求不会到达 Router One,也就谈不上 400。把它们从调用里去掉,SDK 就会照常发出请求。把取值放进 extra_body 也不是办法:从 anthropic 2.0.0 起,SDK 发送的 API 版本是 2026-10-21,Anthropic 在这个版本上对三者中的任何一个都返回 400,哪怕传的是默认值,该版本的迁移指南也要求去掉它们。

app.py
import anthropic

client = anthropic.Anthropic(
    base_url="https://api.router.one",
    api_key="sk-your-router-one-key",
)

# anthropic 1.0.0 and later: TypeError ... unexpected keyword argument 'temperature'
# client.messages.create(model=..., temperature=0.7, ...)

# Fixed: no sampling arguments
message = client.messages.create(
    model="anthropic/claude-sonnet-5.5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "你好"}],
)

Anthropic 对各模型怎么规定?

这些规则由 Anthropic 按模型、按 API 版本规定,下表是 2026-10-30 Anthropic 页面上的写法。各页面并没有都说明默认值能不能传;三个参数都不传的请求,满足表里的每一条。

Anthropic 对各模型怎么规定?
适用范围Anthropic 的规则出处
Claude Sonnet 5.5(anthropic/claude-sonnet-5.5)设置 temperature、top_p 或 top_k 会返回 400 错误Claude Sonnet 5.5 模型页
Claude Haiku 5.5(anthropic/claude-haiku-5.5)不传 temperature、top_p、top_k;采样参数被列为可能返回错误的不兼容变更Claude Haiku 5.5 模型页、新特性页与迁移指南
Claude 4.7 及之后的模型在 API 版本 2023-06-01 上只接受默认值API 版本 2026-10-21 迁移指南
API 版本 2026-10-21 上的所有模型请求里带这三个参数中的任何一个都返回 400 错误,哪怕是默认值API 版本页;API 版本 2026-10-21 迁移指南

anthropic-version 版本头有影响吗?

在 Anthropic 的 API 上有。按 Anthropic 的 API 版本页和 2026-10-21 版本迁移指南(均为 2026-10-30 核对),API 版本 2026-10-21 删除了 temperature、top_p 和 top_k:请求里带其中任何一个,在任何模型上都返回 400 错误,哪怕是默认值。Anthropic 的 Python SDK 从 anthropic 2.0.0 起发送 2026-10-21,1.x 发送的是 2023-06-01。而在 2023-06-01 上,Claude 4.7 及之后的模型同样只接受默认值,所以对当前模型来说,换回旧版本头不是办法。请去掉这三个参数:Anthropic 说,不带它们的请求按默认值采样,temperature 为 1.0。

400 长什么样?

HTTP 400,type 为 invalid_request_error,code 为 INVALID_REQUEST。/v1/chat/completions 上的错误体结构如下;/v1/messages 上同样的 type、message、code 放在 Anthropic 的错误外层结构 {"type": "error", "error": {...}} 里:

response.json
{
  "error": {
    "message": "...",
    "type": "invalid_request_error",
    "code": "INVALID_REQUEST"
  }
}

请求怎么改?

  • 从请求里去掉 temperature、top_p 和 top_k。Anthropic 对 Claude Haiku 5.5 的建议是改用提示词引导模型的行为。
  • Python SDK:messages.create() 里不传这三个参数,也不要放进 extra_body。
  • OpenAI 兼容客户端和框架:有些会自己带上 temperature 或 top_p;如果你的代码从没设置过,请检查客户端的模型设置。
  • 按 Anthropic 的 API 版本 2026-10-21 迁移指南,调低 temperature 的效果没有别的设置可以替代,请用提示词约束输出。

示例:/v1/chat/completions

OpenAI 兼容格式调用 Claude Sonnet 5.5,不带 temperature、top_p、top_k:

terminal.sh
curl https://api.router.one/v1/chat/completions \
  -H "Authorization: Bearer sk-your-router-one-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-5.5",
    "messages": [{"role": "user", "content": "你好"}]
  }'

示例:/v1/messages

Anthropic 格式调用 Claude Haiku 5.5,不带 temperature、top_p、top_k:

terminal.sh
curl https://api.router.one/v1/messages \
  -H "x-api-key: sk-your-router-one-key" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-haiku-5.5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "你好"}]
  }'

常见问题

为什么 temperature=1 在 Python SDK 里也报 TypeError?

因为从 anthropic 1.0.0 起,messages.create() 根本没有 temperature 参数,传任何值(包括 1)在 Python 看来都是多余的关键字参数。去掉它即可。

用 extra_body 能绕开这个报错吗?

它只是绕开本地的 TypeError、把参数照样发出去,这并不是 Anthropic 建议的做法:Anthropic 的建议是去掉这三个参数,而在 anthropic 2.0.0 及以后使用的 API 版本 2026-10-21 上,Anthropic 对其中任何一个都返回 400,哪怕是默认值。请直接去掉。

把 anthropic-version 改成 2023-06-01 能解决吗?

对当前的 Claude 模型不能。按 Anthropic 的 API 版本 2026-10-21 迁移指南(2026-10-30 核对),Claude 4.7 及之后的模型在 2023-06-01 上同样只接受默认值,Anthropic 的 Claude Sonnet 5.5 页面也写明设置这三个参数中的任何一个都会返回 400 错误。请去掉参数,而不是改版本头。

其他 Claude 模型也有同样的规则吗?

按 Anthropic 的说法(2026-10-30 核对),Claude 4.7 及之后的模型只接受默认值;Claude Sonnet 5 的页面也和 Claude Sonnet 5.5 一样,写明设置 temperature、top_p 或 top_k 会返回 400 错误。三个参数都不传的请求,在每个 Claude 模型上都满足这些规则。

Claude Haiku 5.5 不用 temperature,该传什么?

不用传任何替代参数。Anthropic 的 Claude Haiku 5.5 迁移指南说,去掉 temperature、top_p 和 top_k,改用提示词引导模型的行为(2026-10-30 核对)。