Cline 报错 "temperature is deprecated for this model":Bedrock 上怎么解决
返回博客
文章clinebedrocktroubleshootingdev toolsvs code

Cline 报错 "temperature is deprecated for this model":Bedrock 上怎么解决

Mafra2026年11月11日阅读约 5 分钟

你在 Cline 里选了 Claude 模型,发出第一条消息,等来的不是回答,而是一行错误:'temperature' is deprecated for this model。同一个模型在别的客户端里一切正常,你的 AWS 账号也没动过。原因既不在权限,也不在模型,而在一个 Cline 会放进请求、Bedrock 在调用模型之前就拒掉的字段。

下面说清楚这个字段是从哪来的,怎么用两条命令证明它就是原因,以及 issue 还没关闭之前今天能做什么。

"temperature is deprecated for this model" 是什么意思?

意思是 Bedrock 因为推理参数拒绝了这次调用,而不是因为凭证、配额或区域。错误来自 ValidationException,在模型执行之前就返回。不会生成任何 token,也不会产生推理费用,Cline 里的任务当场停下。

最容易让人误解的是随之返回的 modelId:通常是 application inference profile 的 ARN。很多人因此以为问题出在推理配置文件上。并不是。配置文件只负责把请求转发给模型,拒绝这个字段的是模型本身。

为什么只有部分模型会出现?

因为较新的模型不再接受 temperature 作为推理参数。旧模型一直接受,现在也还接受。当你把 Cline 指向通过 Bedrock 访问的新模型时,客户端仍然像以前一样把字段发出去,然后 Bedrock 的校验把它挡下来。

Cline 仓库里三个未关闭的 issue 报的都是同一个现象:

Issue模型路径提出时间
#12252较新的 Claude 模型Bedrock 搭配 application inference profile2026-07-13
#10573Opus 4.7Bedrock2026-05-06
#15441Opus 4.7、Sonnet 和 Sonnet 4.5Cline 内的 Anthropic 提供商2026-10-30

三个里最有信息量的是 #15441:它说明这个错误并不只出现在 Bedrock 上。只要客户端向不再接受该字段的模型发送 temperature,就会出现。

怎么用两条命令确认?

直接用 Bedrock 调用模型,一次带字段,一次不带。如果第一次失败、第二次成功,原因就确定了。凭证和 modelId 用 Cline 里那一份。

aws bedrock-runtime converse \
  --model-id arn:aws:bedrock:us-west-2:你的账号:application-inference-profile/你的ID \
  --messages '[{"role":"user","content":[{"text":"say ok"}]}]' \
  --inference-config '{"temperature":0.2,"maxTokens":16}'

如果出现同样的错误,去掉 temperature 再跑一次:

aws bedrock-runtime converse \
  --model-id arn:aws:bedrock:us-west-2:你的账号:application-inference-profile/你的ID \
  --messages '[{"role":"user","content":[{"text":"say ok"}]}]' \
  --inference-config '{"maxTokens":16}'
三步流程图:Cline 把 temperature 放进请求,Bedrock 在调用模型之前以 ValidationException 拒绝,去掉该字段后模型正常回答。下方分支:用 aws bedrock-runtime converse 直接调用模型,分别测试带和不带 temperature。
错误发生在客户端和模型之间。直接调用这一步能分清责任在谁。

Cline 这个字段是从哪里来的?

来自模型元数据,而且是无条件的。在 Cline 源码里,拼装调用参数的函数直接把它传下去,不检查提供商或模型是否接受:

// sdk/packages/llms/src/providers/ai-sdk.ts
export function buildAiSdkStreamConfig(request, context) {
  const reasoning = resolvePortableReasoning(request, { context })
  return {
    ...(request.maxTokens !== undefined
      ? { maxOutputTokens: request.maxTokens }
      : {}),
    temperature: request.temperature,
    ...(reasoning ? { reasoning } : {}),
  }
}

注意 maxTokens 有条件保护,temperature 没有。这个值来自模型元数据或者你自己设置的覆盖项,Bedrock 的 SDK 再把它转成 inferenceConfig.temperature。校验拒绝的正是这个字段。

这也解释了报告里的一个细节:换个模型错误就消失了,即使你什么都没改。字段照样发出去,只是新模型接受它。

只靠配置能去掉这个字段吗?

取决于值定义在哪里,这正是网上大多数教程弄错的地方。

Cline 允许在提供商设置里按模型覆盖 temperature。如果这个值是你自己设的,清掉覆盖项就能解决:没有值,字段就不会被发送。如果值来自 Cline 自带的模型目录,清掉覆盖项没有用,目录里的元数据会顶上。

要判断自己属于哪种情况,打开 Cline 里这个模型的设置,看温度这一项有没有填值。如果没填而错误依旧,说明值来自目录,只能等 Cline 修。

issue 关闭之前能做什么?

三条路,按侵入性从低到高:

  1. 换成接受该字段的模型。 立刻生效,除了改一下选择不需要做别的。如果你只是想把活干完,这就是对的做法。
  2. 把 Cline 指向另一个接受同一模型的提供商。 如果组织允许从别的路径访问该模型,Cline 支持的提供商不止 Bedrock。先确认替代提供商是否也会发送这个字段,因为问题出在客户端,不在 Bedrock。
  3. 打一个本地补丁。 只需要一行,能彻底解决 Bedrock 这种情况:
// 修改前
temperature: request.temperature,

// 修改后
...(context.provider.id !== "bedrock" && request.temperature !== undefined
  ? { temperature: request.temperature }
  : {}),

每次扩展更新后都要重新打,因为安装过程会覆盖编译后的文件。把它当临时手段,不要当最终方案。

这个问题修好了吗?

没有。三个 issue 都还开着,最早的一个从 2026 年 5 月起。最近的是 #15441,10 月 30 日提出,覆盖了最常用的几个 Claude 模型。在修复之前行为都一样:字段照发,新模型照拒。

如果你碰上这个问题,值得在 issue 里补上 modelId、Cline 版本和上面直接调用测试的结果。这类证据能把「不能用」变成「模型 Y 拒绝字段 X」,任何修复都会因此更快。

参数校验错误本来不该让工作停下来。在编辑器里留一个备份提供商是有必要的:当客户端和模型的组合拒绝某个字段时,你换个引擎继续干,而不是等下一个版本。Verboo Code 提供兼容 [OI] 协议的端点,你可以保留正在用的界面,只换掉背后回答问题的那一层。在 verboo.ai 配置一个备用提供商。

喜欢这篇文章吗?
把知识分享给你的朋友。
// 继续阅读

相关文章