跳转到主要内容

AWS Claude 报 400 怎么办:按报错原文逐条排查

400 只说明请求被拒,改法看报错原文:Extra inputs 多是网关丢了 Beta 请求头,thinking 报错要升级 Claude Code,数据保留报错要找管理员。

LaoZhang AI Team发布于更新于 22 分钟阅读
文章目录
深色封面,标题为 AWS Claude 400 排错,中间是 400 Bad Request 与 ValidationException 报错框,右侧列出客户端、请求接口、账户与模型三类检查项

在 AWS 上用 Claude 拿到 400,先别急着换密钥或换渠道。400 只表示请求被拒绝,真正决定怎么改的是后面那行报错原文:Extra inputs are not permitted 多半是网关或中转丢了 anthropic-beta 请求头;"thinking.type.enabled" is not supported 是 Claude Code 版本太旧;Input is too long for requested model. 是上下文超了;data retention mode 'default' 则是账户设置问题,代码怎么改都没用,要找 AWS 管理员。

排查前再分清一件事:发请求的是 Claude Code,还是你自己写的代码。Claude Code 在 Bedrock 上只走 Invoke API,不支持 Converse API,所以针对 Converse 请求体的改法对 Claude Code 用户不适用。

文中的版本号和默认模型截至 2026 年 9 月 24 日,来自 Claude Code 错误参考 与 AWS 官方文档;代码和命令按这些文档整理,没有在 AWS 账号上实际运行,模型 ID、Region 请换成你账户里可用的值。

按报错原文直接查

把终端或日志里的完整报错复制出来,找下表第一列的字样。同一条报错里出现多个关键字时,以最具体的那个为准。

报错里出现的字样多半是什么问题先做什么
Extra inputs are not permitted、Unexpected value(s) for the anthropic-beta headerClaude Code 和 API 之间的网关或中转丢掉了 anthropic-beta 请求头,Beta 字段却还留在请求体里让网关转发该请求头;做不到再设 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
"thinking.type.enabled" is not supported for this modelClaude Code 版本低于所选模型要求的最低版本claude update 后重启
max_tokens must be greater than thinking.budget_tokensMAX_THINKING_TOKENS 超过了输出上限调低它,或调高 CLAUDE_CODE_MAX_OUTPUT_TOKENS
Input is too long for requested model.输入 token 加上请求的输出额度超出模型上限/compact、/clear,Claude Code 升到 v2.1.217 以上
tool use concurrency issues、orphaned tool_result、duplicate tool_use ID对话历史里的工具调用和思考块顺序错乱/rewind 或连按两次 Esc
on-demand throughput isn't supported用了不支持按需调用的模型 ID改用推理配置文件 ID
The provided model identifier is invalid模型 ID 写错、当前 Region 没有这个模型,或经销商账户未加入 Anthropic 计划核对 ID 与 Region,都没问题再问经销商
在 Mantle 上报 400 且点名了模型 ID这个模型不在 Mantle 上提供换成 Mantle 格式 ID,或同时启用 Invoke API
data retention mode 'default' is not available for this modelFable 5 / Fable 5.1 要求账户数据保留模式至少为 aws_review交给 AWS 管理员决定
Access to Anthropic models is not allowed from unsupported countries, regions, or territories账户税务或账单地址、调用方位置不在 Anthropic 支持范围换 Region 不管用,要改账户信息
Your AWS account is not authorized to invoke this API operation、NotAuthorizedIAM 策略或 SCP 没有放行找管理员补权限
IncompleteSignature、RequestExpired请求签名不合规,或本机时钟偏差太大升级 SDK、核对密钥、同步系统时间
Malformed input request: extraneous key [...] is not permitted请求体里有该模型或该接口不认的字段按所用接口核对请求体
is not supported on this API. Please use the Messages API instead.还在用旧的文本补全格式改成 messages 格式
ServiceQuotaExceededException超出账户的服务配额可以稍后重发;长期要申请提高配额

如果状态码根本不是 400,就不属于这张表:Claude Code 把 403 显示为 AWS 认证失败,可能是令牌过期,也可能是缺 IAM 权限或模型没在账户和 Region 里开通;404 的 FTUFormNotFilled 表示还没提交 Anthropic 用例表单;429 的 ThrottlingException 是限流,处理思路见 Claude Rate Exceeded 错误:先确认限制归属再重试;529 的 overloaded_error 是服务端过载。

Claude Code 连 AWS 报 400

Claude Code 用户大致有三种接法:设 CLAUDE_CODE_USE_BEDROCK=1 直连 Bedrock,设 CLAUDE_CODE_USE_MANTLE=1 走 Mantle 端点,或者把 ANTHROPIC_BASE_URL 指向某个第三方的“AWS Claude”通道。中文语境里说的“AWS Claude”经常指最后这种中转,它背后接的是 Bedrock,但请求要先经过对方的网关,两者的出错位置不一样。

不确定自己走的是哪条,在 Claude Code 里运行 /status:直连会显示 Bedrock 与解析出的 Region,Mantle 会显示 Amazon Bedrock (Mantle)。设置方法可以参考 Claude Code API 配置:先选路由,再设置 Key、模型和网关。

Extra inputs are not permitted:先看有没有经过网关

这条报错的典型形态是:

API Error: 400 ... Extra inputs are not permitted ... context_management
API Error: 400 ... Unexpected value(s) for the `anthropic-beta` header

Claude Code 会同时发出 context_management、effort 这类 Beta 字段和一个启用它们的 anthropic-beta 请求头。网关转发了请求体却丢掉了请求头,上游就会把这些字段当成多余的输入拒掉。

官方给的修法有先后顺序:

  1. 能改网关配置的,让它原样转发 anthropic-beta 请求头。这是根治办法,Claude Code 的功能也不受影响。
  2. 改不了网关(例如用的是别人的中转),在启动 Claude Code 之前设置 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1。

临时排查可以在同一个终端里执行:

bash
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
claude

长期使用就写进 ~/.claude/settings.json 的 env,和已有的地址、密钥配置合并在一起,不要覆盖原来的内容:

json
{
  "env": {
    "ANTHROPIC_BASE_URL": "你的网关地址",
    "ANTHROPIC_AUTH_TOKEN": "你的密钥",
    "CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1"
  }
}

变量必须在进程启动前就存在,已经在运行的 Claude Code 要退出重开才会生效。

这个开关的作用范围很窄。它会去掉 Anthropic 专用的 anthropic-beta 请求头,以及 defer_loading、eager_input_streaming 这类 Beta 工具字段,保留 name、description、input_schema、cache_control 等标准字段。代价是 MCP 工具搜索被关闭,所有 MCP 工具定义在一开始就全部载入,你在 ENABLE_TOOL_SEARCH 里设的值也会被忽略(v2.1.227 起可以通过托管设置保留工具搜索)。连接的 MCP 服务器多时,上下文会被工具定义挤占,更容易撞上后面的 Input is too long,可以参考 Claude Code MCP 上下文爆掉:为什么服务器太多会吃窗口,怎么筛选和压缩 精简服务器。

它修不了模型 ID、IAM 权限、配额、数据保留这些问题。设了开关还是 400,就回到上面的表,看报错原文换成了哪一条。

直连 Bedrock、中间没有任何网关时,也有人遇到过 output_config.effort: Extra inputs are not permitted:GitHub 上 claude-code-action 的一个 issue(2026 年 3 月提交,至今未关闭)报告,Bedrock 加 Sonnet 4.5 的应用推理配置文件时出现这条报错,评论里有人换成 Sonnet 4.6 或 Opus 4.6 后恢复。这只是用户报告,但说明同一个字段也可能是模型或端点本身不接受,不一定每次都是请求头被丢。

如果你用的是老张 API 的 AWS Claude 通道,它的帮助文档给出的就是上面第 2 种做法,只适用于该通道;同一页面也写明 Claude 模型目前因资源不足暂时下线,恢复时间以其公告为准。

说明:laozhang.ai 是我们自己的服务,其价格是平台报价,不是独立比较的结论。

thinking 相关的两种 400

第一种:

API Error: 400 ... "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.

这表示 Claude Code 版本低于所选模型的最低要求,旧版本发出的思考参数新模型已经不接受。运行 claude update 后重启即可。各模型要求的最低版本如下(截至 2026 年 9 月 24 日):

模型Claude Code 最低版本
Opus 4.7v2.1.111
Opus 4.8v2.1.154
Sonnet 5v2.1.197
Opus 5v2.1.219
Opus 5.5v2.1.280

暂时没法升级,就用 /model 切到 Opus 4.6 或 Sonnet 4.6。用 Agent SDK 时升级的是 SDK 包本身,比如 Opus 5.5 需要 TypeScript SDK v0.3.280 以上。

AWS 这边的规则与之对应:Claude Fable 5.1、Mythos 5.1、Mythos 5 和 Fable 5 不支持延伸思考,请求里带 thinking.type: "enabled" 或 "disabled" 都会返回 400,要改成 {"type": "adaptive"} 配合 output_config.effort,或者干脆不传 thinking。

第二种:

API Error: 400 ... max_tokens must be greater than thinking.budget_tokens

Claude Code 在 Anthropic 官方 API 上会自动调整这两个值,这条报错主要出现在 Amazon Bedrock 和 Google Cloud 上,原因是 MAX_THINKING_TOKENS 设得比平台的输出上限还高,或者计划模式把思考预算调高了。改法二选一:调低 MAX_THINKING_TOKENS,或者把 CLAUDE_CODE_MAX_OUTPUT_TOKENS 调到高于思考预算。

在 Bedrock 这类第三方平台上,MAX_THINKING_TOKENS=0 的效果是不发送 thinking 参数;Opus 5.5 和 Fable 系列本身无法关闭思考,设 0 也关不掉。

Input is too long for requested model.

这是 Bedrock 对上下文超限的说法,属于 ValidationException。AWS 计算上限时把输入 token 和请求的输出额度加在一起,所以输入还没到窗口上限、但 max_tokens 设得很大时也会触发。

Claude Code 从 v2.1.217 起把这句话和 Prompt is too long 同样处理。更早的版本不认识 Bedrock 的这个说法,自动压缩不会触发,手动 /compact 也会报同样的错,所以先确认版本。之后按顺序处理:

  • /compact 压缩当前对话,或 /clear 开新对话;
  • /context 看窗口被什么占满;
  • 用 /mcp disable <name> 关掉暂时用不到的 MCP 服务器;
  • 精简过大的 CLAUDE.md。

前面提到的 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 会让 MCP 工具全部预载,两者同时出现时,先精简 MCP 服务器。

工具调用或思考块错乱

下面这些报错说的是同一件事:历史里的 tool_use、tool_result 和 thinking 块顺序对不上了,通常发生在工具调用被中断或某一轮在流式输出中途被改动之后。

API Error: 400 due to tool use concurrency issues. Run /rewind to recover the conversation.
API Error: 400 orphaned tool_result in conversation history. Run /rewind to recover the conversation.
API Error: 400 duplicate tool_use ID in conversation history. Run /rewind to recover the conversation.
API Error: 400 ... unexpected `tool_use_id` found in `tool_result` blocks
API Error: 400 ... thinking blocks ... cannot be modified

运行 /rewind 或连按两次 Esc,退回出错那一轮之前的检查点再继续。用 Opus 4.7 或 Opus 4.8 时先运行 claude update:v2.1.156 之前的版本在正常调用工具时也可能触发这个错误,而且 /rewind 清不掉。这类错误跟 Bedrock 无关,换任何平台都一样。

模型 ID、前缀与 Mantle

Claude Code 在 Bedrock 的 Invoke API 上会把内置默认模型解析成跨区域推理配置文件 ID,前缀按 Region 选:

AWS Region优先使用的前缀
us-gov-*us-gov.
us-*us.
eu-*eu.
ap-*apac.
其他global.

想换前缀可以设 ANTHROPIC_BEDROCK_REGION_PREFIX(需 v2.1.224 以上,可选值 us、eu、apac、jp、au、global),但它只是偏好,不保证可用。关键在于 Claude Code 能不能列出你账户里的推理配置文件:能列出时,它会找有对应前缀的配置文件,找不到再退而求其次;列不出时,它直接套用前缀、不做检查,账户里没开通这组前缀的配置文件,请求就会 400。所以不要看到教程写 us. 或 global. 就照抄,先查自己的 Region 实际有什么:

bash
aws bedrock list-inference-profiles --region us-east-1

给 IAM 策略加上 bedrock:GetInferenceProfile,Claude Code 才能解析应用推理配置文件的 ARN。你自己配置的推理配置文件 ID 和 ARN,Claude Code 不会改写。

另外几种与模型 ID 有关的 400:

  • on-demand throughput isn't supported:把模型写成推理配置文件 ID,而不是裸的基础模型 ID。
  • 默认模型没开通:不固定版本时,截至 2026 年 9 月 24 日,Claude Code 在 Bedrock 上的主模型默认是 Opus 5.5(us-* 下为 us.anthropic.claude-opus-5-5),小模型默认是 Sonnet 4.5;v2.1.280 之前主模型默认是 Opus 5。默认值可能指向账户里还没开通的模型,Claude Code 启动时会为本次会话回退到别的模型,但团队部署建议用 ANTHROPIC_DEFAULT_OPUS_MODEL、ANTHROPIC_DEFAULT_SONNET_MODEL、ANTHROPIC_DEFAULT_HAIKU_MODEL 或 ANTHROPIC_MODEL 固定版本,例如 us.anthropic.claude-sonnet-4-6。
  • Mantle:模型 ID 用 anthropic. 开头、不带版本后缀的写法,比如 anthropic.claude-sonnet-5。报 400 且点名了模型 ID,说明这个模型不在 Mantle 上提供,us.anthropic.claude-sonnet-4-6 这类推理配置文件 ID 在 Mantle 上用不了。可以换成 Mantle 格式的 ID,或者同时设置 CLAUDE_CODE_USE_BEDROCK 和 CLAUDE_CODE_USE_MANTLE,让 Claude Code 按 ID 格式把请求分到两个端点。凭证有效却收到 403,则是账户没有获得该模型的访问权限,要联系 AWS 客户团队。

自己写代码调 Bedrock 报 400

自己写代码时,最常见的 400 来源是把一种接口的请求体套到了另一种接口上。Bedrock 上调用 Claude 有三种形状,字段名看着像,位置和取值都不同。

Converse、InvokeModel 与 Messages API 三种接口的关键请求字段对比

几处最容易写错的地方:

  • InvokeModel 请求体里的 anthropic_version 固定写 bedrock-2023-05-31。2023-06-01 只用在 Messages API 的 anthropic-version 请求头里,写进 InvokeModel 请求体就是错的。
  • 模型不写在 InvokeModel 的请求体里,而是放在调用参数 modelId 中;Messages API 则相反,model 写在请求体里。
  • Converse 的 messages[].content 是 [{"text": "..."}] 这样的数组,最大输出写在 inferenceConfig.maxTokens,Claude 专属参数放进 additionalModelRequestFields。用 Prompt management 的 ARN 调用时,不能再传 additionalModelRequestFields、inferenceConfig、system、toolConfig。
  • system 提示在 InvokeModel 里是单独的 system 字段,不放进 messages;在 Converse 里是顶层的 system 数组。

下面是三种接口的最小请求,模型 ID 和 Region 都用环境变量占位。

InvokeModel(boto3):

python
import json
import os

import boto3

client = boto3.client("bedrock-runtime", region_name=os.environ["AWS_REGION"])

resp = client.invoke_model(
    modelId=os.environ["BEDROCK_MODEL_ID"],  # 例如推理配置文件 ID
    body=json.dumps({
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 256,
        "messages": [{"role": "user", "content": "只回复 OK"}],
    }),
)
print(json.loads(resp["body"].read())["content"][0]["text"])

Converse(boto3):

python
resp = client.converse(
    modelId=os.environ["BEDROCK_MODEL_ID"],
    messages=[{"role": "user", "content": [{"text": "只回复 OK"}]}],
    inferenceConfig={"maxTokens": 256},
)
print(resp["output"]["message"]["content"][0]["text"])

Bedrock 上的 Anthropic Messages API 有两个端点:bedrock-runtime 的 https://bedrock-runtime.{region}.amazonaws.com/anthropic(AWS 推荐新应用用这个,Anthropic SDK 指向它时会自动加版本请求头),以及 bedrock-mantle 的 https://bedrock-mantle.{region}.api.aws/anthropic/v1/messages。直接用 curl 调 Mantle 时要自己带上 anthropic-version: 2023-06-01:

bash
curl -X POST "https://bedrock-mantle.${AWS_REGION}.api.aws/anthropic/v1/messages" \
  -H "x-api-key: ${BEDROCK_API_KEY}" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic.claude-sonnet-5",
    "max_tokens": 256,
    "messages": [{"role": "user", "content": "只回复 OK"}]
  }'

ValidationException 各报错原文的含义

AWS 知识中心列出的 ValidationException 报错,在自己写代码时最常见的是这几条:

  • Malformed input request: extraneous key [...] is not permitted:方括号里的字段该模型不认。常见于把别家模型的参数、Converse 的字段或 Beta 参数塞进了 InvokeModel 请求体。
  • The provided model identifier is invalid:ID 拼错,或该 Region 没有这个模型。ID 和 Region 都对还报这条,而你的 AWS 账户是通过 Marketplace 合作伙伴或经销商开的,就可能是经销商没有加入 Anthropic 合作计划或 Amazon Bedrock 授权经销商计划。这是账户层面的前提条件,改代码、改 IAM 或申请模型访问都解决不了,只能由经销商完成加入。
  • is not supported on this API. Please use the Messages API instead.:还在用旧的 prompt 文本补全格式,改成 messages 数组。
  • Guardrail was enabled but input is in incorrect format:guardrailIdentifier 要填一个有效的护栏 ID,guardrailVersion 只填版本号。
  • Input is too long for requested model.:输入 token 加 max_tokens 超过模型上限,缩短输入或调小 max_tokens。
  • 用延伸思考时,budget_tokens 必须小于 max_tokens,最小 1,024(带工具的交错思考 Beta 除外);Fable 和 Mythos 系列只能用 {"type": "adaptive"} 或不传 thinking。

同样是 HTTP 400,还可能是签名和权限问题,与请求体无关:IncompleteSignature 表示签名不符合 AWS 规范,检查 SDK 版本和访问密钥;RequestExpired 表示请求时间戳过期,同步系统时钟;NotAuthorized 和 Your AWS account is not authorized to invoke this API operation 表示 IAM 策略或组织的 SCP 没放行。

其他模型上常见的 400 也可能出现在 Bedrock 上,比如 Opus 4.7 起拒收 top_p、assistant 预填充被拒、消息角色不被接受,分别见 Claude Code 报 top_p deprecated?别先换渠道,先按 Opus 4.7 的新请求规则排、Claude 预填充(prefill)400 报错:4.6 起模型全拒收,按用途替换 和 修复 API 400 角色不受支持错误。

400 能不能重试

大多数 400 原样重发只会得到同样的结果,请求体、模型 ID、账户设置不改,重试多少次都一样。例外是 ServiceQuotaExceededException:AWS 把它定为 400,并注明可以稍后重新提交,适合退避后重试;长期超额就去服务配额页面申请提高。限流是 429 的 ThrottlingException,ModelNotReadyException 由 SDK 自动重试最多 5 次。什么情况该重试、什么情况该换备用模型或直接停下,可以参考 大模型 API 该重试还是切备用模型?先过这五道门。

账户层面的 400:改代码没用,要找管理员

有几类 400 与客户端、请求体都无关,开发者自己能做的只有确认原因,然后交给 AWS 管理员或合规负责人。

数据保留模式不满足模型要求

在 Claude Code 里选了 Fable 5 后每条消息都报:

API Error: 400 data retention mode 'default' is not available for this model

这条报错在 GitHub 上有公开报告(模型 global.anthropic.claude-fable-5,Claude Code 2.1.170)。按 AWS 的数据保留文档,Claude Fable 5 和 Fable 5.1 要求账户的数据保留模式至少为 aws_review;有效模式是 none 或 default 时,这两个模型在 bedrock-runtime 上返回 ValidationException,在 bedrock-mantle 上显示为不可用,原因写作 This model is not available under data retention mode 'default'.。Fable 5 之前发布的 Claude 模型不受这项规则影响。

修改前需要知道这几件事:

  • 模式从低到高是 none < default < aws_review < provider_data_share。aws_review 表示 AWS 在自己的边界内保留提示和输出最多 30 天,并可能做人工审查,内容不会共享给模型提供方。provider_data_share 是旧模式,目前行为与 aws_review 相同,新配置应该用 aws_review。
  • 在 bedrock-runtime 上,这是按 Region 生效的账户级设置,没有项目级范围。发布时没有控制台界面,要通过控制面 API 修改,对应的 IAM 操作是 bedrock:PutAccountDataRetention。
  • 组织可能用 SCP 禁止把模式设成 none 以外的值。
  • 设成 aws_review 不会让所有模型都开始保留数据。每个模型自己声明允许的模式,Opus 4.8 这类允许 none 的模型仍然不保留数据。

先查当前设置(控制面 API,需要 bedrock:GetAccountDataRetention 权限):

bash
curl "https://bedrock.${AWS_REGION}.amazonaws.com/data-retention" \
  -H "Authorization: Bearer ${AWS_BEARER_TOKEN_BEDROCK}"

改成 aws_review 用同一路径的 PUT,请求体为 {"mode": "aws_review"}。这会影响该 Region 整个账户的调用,是否修改应由管理员和合规负责人决定。如果不能改,就在 Claude Code 里用 /model 换一个不要求人工审查的模型。GitHub 评论里有人说设成 provider_data_share 后别的模型开始返回 500,这是单个未经证实的报告,与 AWS 当前文档的描述也对不上。

地区、经销商与权限

  • Access to Anthropic models is not allowed from unsupported countries, regions, or territories:AWS 判断时看的不只是调用方所在位置,还包括账户的税务地址和账单地址。换一个 AWS Region 解决不了,要改的是账户信息,或者换一个符合条件的账户。
  • 通过经销商开的账户报 The provided model identifier is invalid,而 ID 和 Region 都对:见上一节,只能由经销商完成 Anthropic 计划的加入。
  • NotAuthorized 或 Your AWS account is not authorized to invoke this API operation:让管理员检查 IAM 用户或角色的策略、信任关系,以及组织层面的 SCP。

用最小请求确认问题出在哪

报错原文看不出头绪,或者改完仍然报错,就把请求缩到最小再逐项加回来。

用最小请求缩小排查范围:最小请求仍报错时查完整错误、模型与地区、权限和账户;成功后依次加回历史消息、工具和思考参数

  • 最小请求也失败:问题不在对话内容,重点查完整报错、模型 ID 与 Region、IAM 权限和账户条件。自己写代码的,用上一节的最小请求;用 Claude Code 的,新开一个会话、只发一句短消息。
  • 最小请求成功:按历史消息、工具、思考参数的顺序一项一项加回去,每次只加一项,哪一步开始报错,就查新加的那部分。

改完之后这样确认是否真的修好:

  • Claude Code:改了环境变量或 settings.json 后,退出并重新启动,先用 /status 确认提供方、Region 和模型是你预期的值,再重复刚才出错的那个操作。上下文类问题再用 /context 看一眼占用。
  • 自己写的代码:用同一个模型 ID、同一个 Region 先跑通最小请求,再恢复原来的完整请求。
  • 账户设置类(数据保留、经销商、地区):管理员改完后,用同一个账户和 Region 重新调用;数据保留可以先用上面的 GET 确认模式已经变成 aws_review。

常见问题

设置了 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1,还是报 400?

先确认变量在启动前就已生效:Claude Code 要完全退出后重新打开,写在 settings.json 的要放进 env。生效后仍然 400,说明原因不是 Beta 字段,这个开关只处理请求头和 Beta 字段的兼容问题,管不到模型 ID、权限、配额或数据保留。看新的报错原文,回到开头的对照表。

bedrock-2023-05-31 应该写在哪里?

只写在 InvokeModel(以及 InvokeModelWithResponseStream)请求体的 anthropic_version 字段。Converse 不需要它;Mantle 上的 Messages API 用的是 anthropic-version: 2023-06-01 请求头;用 Anthropic SDK 调 bedrock-runtime 的 /anthropic 路径时,SDK 会自动加上。

模型 ID 要不要加 us. 或 global. 前缀?

看接口和账户。Invoke API 上用推理配置文件 ID,前缀要对应账户里实际开通的配置文件,用 aws bedrock list-inference-profiles --region <你的 Region> 查;Mantle 上不加前缀,写成 anthropic.claude-sonnet-5 这种形式。照抄别人的前缀是 400 的常见来源。

用 Claude Code 连 Bedrock,要不要按 Converse 的格式改请求?

不用。Claude Code 在 Bedrock 上只走 Invoke API,不支持 Converse,请求体也由 Claude Code 自己组装。你能改的是版本、环境变量、模型 ID 和会话本身,对应的做法都在上面 Claude Code 那一节。

参考来源1

本文引用的外部页面,按正文出现顺序排列。最后更新于 2026年9月25日。

  1. 1.Claude Code 错误参考code.claude.com/docs/en/errors