如果你在使用 Claude Code 连接 AWS Bedrock 时遇到了这个报错:
InvokeModelWithResponseStream: operation error Bedrock Runtime:
InvokeModelWithResponseStream, https response error StatusCode: 400,
RequestID: 47574f13-c884-4b12-a003-6d0cf252d8dd,
ValidationException: system.1.cache_control.***.scope:
Extra inputs are not permitted
特别是在使用 --resume 恢复历史会话时频繁出现——这是一个已知的兼容性问题,不是你的配置出了错。
根本原因是 Claude Code 发送了 Bedrock 不支持的 scope 字段。修复只需设置 1 个环境变量,30 秒搞定。
核心价值: 读完本文,你将理解这个报错的根因,掌握 3 种修复方案,并了解如何在 CLI、VS Code、JetBrains 等不同环境中正确配置。

Claude Code Bedrock 报错原因深度分析
要理解这个报错,需要知道一个关键背景:Anthropic 原生 API 和 AWS Bedrock 对 cache_control 的支持程度不同。
报错的技术根因
2026 年 1 月,Anthropic 在原生 API 推出了一个 Beta 功能 prompt-caching-scope-2026-01-05,为 cache_control 对象增加了 scope 字段:
{
"cache_control": {
"type": "ephemeral",
"scope": "turn"
}
}
从 Claude Code v2.1.24 开始,这个 scope 字段被默认包含在 API 请求中。
问题在于:AWS Bedrock 不认识 scope 字段,且 Bedrock 的 schema 校验非常严格——遇到任何未知字段直接返回 400 错误。
| 特性 | Anthropic 原生 API | AWS Bedrock |
|---|---|---|
cache_control.type: "ephemeral" |
支持 | 支持 |
cache_control.ttl: "5m" |
支持 | 支持 |
cache_control.ttl: "1h" |
支持 | 支持(2026 年 1 月起) |
cache_control.scope |
支持(Beta) | 不支持,返回 400 |
| Beta headers | 接受 | 拒绝(报 invalid beta flag) |
| Schema 校验策略 | 宽松(忽略未知字段) | 严格(拒绝未知字段) |
简单说:Anthropic 原生 API 比较宽容,不认识的字段会忽略。Bedrock 比较严格,不认识的字段直接拒绝。Claude Code 发了一个 Bedrock 不认识的字段,Bedrock 就报错了。
🎯 技术建议: 这个问题只影响通过 AWS Bedrock 调用 Claude 的用户。如果你通过 Anthropic 原生 API 调用(比如通过 API易 apiyi.com 平台接入),则完全不会遇到这个报错,因为原生 API 完整支持
scope字段。
Claude Code –resume 为什么更容易触发
虽然这个报错不是 --resume 独有的,但使用 --resume 恢复历史会话时确实更容易触发。原因如下:

--resume 的内部工作机制:
- 加载历史会话: 从
~/.claude/projects/<项目>/<会话ID>.jsonl读取完整对话记录 - 重建上下文: 将 system prompt、工具定义、所有历史消息重新组装为完整的 messages 数组
- 缓存优化: 因为恢复的上下文通常很大(包含完整对话历史),Claude Code 会更积极地在系统消息上设置
cache_control断点来优化成本 - 发送请求: 第一个 API 调用就包含完整的重建上下文 +
cache_control(含scope字段)
关键点:恢复会话时上下文更大 → 缓存优化更激进 → cache_control 字段出现频率更高 → 触发报错的概率更大。
新建会话也可能触发,但因为初始上下文较小,缓存标记可能不那么密集。
Claude Code Bedrock 报错修复方案一:禁用实验性 Beta(推荐)
这是最推荐的方案——既修复报错,又保留基础的 Prompt Caching 功能。
方案原理
设置 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 后,Claude Code 会:
- 移除请求中的 Beta headers(如
prompt-caching-scope-2026-01-05) - 移除
cache_control中的scope字段 - 保留
cache_control.type和cache_control.ttl等 Bedrock 支持的字段
也就是说,你仍然能享受 Prompt Caching 带来的成本优化,只是不使用 scope 这个新特性。
CLI 终端设置
macOS / Linux:
# 临时设置(当前终端会话有效)
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
# 永久设置(添加到 shell 配置文件)
echo 'export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1' >> ~/.zshrc
source ~/.zshrc
# 如果用 bash
echo 'export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1' >> ~/.bashrc
source ~/.bashrc
Windows (PowerShell):
# 临时设置
$env:CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS = "1"
# 永久设置
[System.Environment]::SetEnvironmentVariable("CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS", "1", "User")
设置后,直接运行 Claude Code 即可:
# 新建会话
claude
# 恢复会话(现在不再报错)
claude --resume
VS Code 扩展设置(重要!)
VS Code 扩展不会读取 shell 环境变量——即使你在 .zshrc 中设置了,VS Code 里的 Claude Code 扩展也读不到。必须通过以下方式设置:
方法一:修改 Claude 全局配置文件(推荐)
编辑 ~/.claude/settings.json:
{
"env": {
"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1"
}
}
方法二:通过 VS Code 设置
打开 VS Code 设置 → 搜索 claude → 找到环境变量配置项 → 添加 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
JetBrains IDE 设置
JetBrains 系列 IDE(IntelliJ、WebStorm、PyCharm 等)中的 Claude Code 插件同样需要单独配置:
编辑 ~/.claude/settings.json(与 VS Code 共用同一个文件):
{
"env": {
"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1"
}
}
💡 小技巧:
~/.claude/settings.json是 Claude Code 的全局配置文件,所有客户端(CLI、VS Code、JetBrains)都会读取。在这里设置环境变量是最省事的方式,一次设置全平台生效。
Claude Code Bedrock 报错修复方案二:禁用 Prompt Caching
如果方案一仍然不能解决你的问题(极少数情况),可以完全禁用 Prompt Caching。
方案原理
设置 DISABLE_PROMPT_CACHING=1 后,Claude Code 会移除请求中所有的 cache_control 字段。没有 cache_control,自然也没有 scope,报错彻底消失。
代价: 失去 Prompt Caching 带来的成本优化。对于长对话场景,这可能意味着更高的 Token 费用。
设置方法
# CLI
export DISABLE_PROMPT_CACHING=1
# ~/.claude/settings.json(全平台通用)
{
"env": {
"DISABLE_PROMPT_CACHING": "1"
}
}
什么时候选方案二?
| 场景 | 选方案一 | 选方案二 |
|---|---|---|
| 一般 Bedrock 用户 | ✅ 推荐 | |
| 方案一设置后仍报错 | ✅ | |
| 使用 LiteLLM 等网关代理 | ✅ 更保险 | |
| 对话短、不在意缓存成本 | ✅ 无影响 | |
| 长对话、注重成本优化 | ✅ 保留缓存 | ❌ 会增加费用 |
Claude Code Bedrock 报错修复方案三:双保险配置
同时设置两个环境变量,确保所有 Bedrock 不支持的字段都被清除。
# CLI
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
export DISABLE_PROMPT_CACHING=1
// ~/.claude/settings.json
{
"env": {
"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1",
"DISABLE_PROMPT_CACHING": "1"
}
}
这是最保险的配置,适合在生产环境中需要绝对稳定的场景。
🚀 另一个思路: 如果你不想折腾环境变量,也不想受限于 Bedrock 的兼容性问题,可以考虑切换到 Anthropic 原生 API。通过 API易 apiyi.com 平台可以直接接入 Anthropic 原生接口,完整支持 Prompt Caching 所有功能(包括
scope),且无需 AWS 账号。
Claude Code Bedrock 报错完整排查流程
如果你不确定自己的情况适用哪种方案,按以下流程排查:

第 1 步:确认报错类型
检查报错信息是否包含以下关键词:
cache_control.***.scope: Extra inputs are not permitted
或
ValidationException: ... cache_control ... scope
如果是,说明就是 scope 字段兼容性问题。
第 2 步:确认调用路径
# 检查当前 Claude Code 使用的 API 端点
echo $ANTHROPIC_BASE_URL
echo $CLAUDE_CODE_USE_BEDROCK
如果你设置了 CLAUDE_CODE_USE_BEDROCK=1 或 AWS_REGION 等 Bedrock 相关变量,说明你在使用 Bedrock。
第 3 步:应用修复
# 先试方案一
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
# 测试是否修复
claude --resume
第 4 步:验证修复
# 验证环境变量是否生效
echo $CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS
# 应该输出: 1
# 测试新建会话
claude
# 测试恢复会话
claude --resume
第 5 步:如果仍然报错
# 追加方案二
export DISABLE_PROMPT_CACHING=1
# 同时检查 settings.json
cat ~/.claude/settings.json
确保 settings.json 格式正确:
{
"env": {
"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1",
"DISABLE_PROMPT_CACHING": "1"
}
}
🎯 技术建议: 如果你使用 LiteLLM 等网关代理连接 Bedrock,LiteLLM 从 2026 年 3 月起已经内置了自动剥离
scope字段的功能(PR #22867)。更新到最新版 LiteLLM 也可以解决此问题。如果你在寻找更稳定的 Claude API 接入方案,API易 apiyi.com 提供 Anthropic 原生 API 通道,天然不受此类兼容性限制。
Claude Code Bedrock 其他常见兼容性问题
cache_control.scope 不是 Bedrock 唯一的兼容性坑。以下是 Bedrock 用户常遇到的同类问题:
| 报错关键词 | 原因 | 修复方法 |
|---|---|---|
cache_control.scope: Extra inputs |
scope 字段不支持 | CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 |
invalid beta flag |
Beta header 不支持 | CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 |
thinking: undefined |
Thinking 参数格式不兼容 | 更新 Claude Code 到最新版 |
context_management 相关 |
上下文管理字段不支持 | CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 |
eager_input_streaming |
流式输入优化不支持 | CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 |
大部分问题都可以通过 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 一刀切解决,因为这些不支持的字段本质上都是 Anthropic 原生 API 的 Beta 功能。
💰 成本优化: Bedrock 的 Prompt Caching 只支持 5 分钟和 1 小时两种 TTL。如果你的使用场景对缓存依赖较高,通过 API易 apiyi.com 接入 Anthropic 原生 API 可以获得更灵活的缓存策略,同时避免上述兼容性问题带来的排错成本。
Claude Code Bedrock 报错常见问题 FAQ
Q1: 设置了环境变量但 VS Code 里还是报错?
VS Code 扩展不会继承你在 .zshrc 或 .bashrc 中设置的环境变量。你必须在 ~/.claude/settings.json 文件中通过 env 字段设置:
{
"env": {
"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1"
}
}
设置后重启 VS Code(不是重载窗口,是完全退出再打开),确保配置生效。
Q2: 禁用 Prompt Caching 会影响性能吗?
不会影响模型输出质量和响应速度。Prompt Caching 只是一个成本优化机制——缓存命中时可以减少重复计算 Token 的费用。禁用后,每次请求都会全量计费,但模型表现完全一样。对于短对话,费用差异很小。长对话场景下,缓存可以节省 30-50% 的输入 Token 费用。
Q3: 这个问题会被官方修复吗?
这是一个已知问题,GitHub 上有多个 Issue 跟踪(#23220、#41731 等)。但由于 Bedrock 的 schema 校验策略是 AWS 侧的行为,Anthropic 很难从 Claude Code 侧完全解决。目前的环境变量方案是官方推荐的 workaround。长期来看,可能需要 AWS Bedrock 侧放宽 schema 校验或支持 scope 字段。
Q4: 我用的是 Google Vertex AI,也会有这个问题吗?
是的。Google Vertex AI 同样不支持 cache_control.scope 字段,会出现类似的报错。解决方案相同:设置 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1。Vertex AI 用户还需要注意 CLAUDE_CODE_USE_VERTEX=1 相关的配置。
Q5: –resume 和 -c(–continue)有什么区别?触发报错的条件一样吗?
--resume/-r:打开会话选择器,选择任意历史会话恢复--continue/-c:直接恢复最近一次会话
两者在技术上都会触发上下文重建和 cache_control 标记,因此触发报错的条件完全一样。只要是 Bedrock 用户,两个命令都可能遇到这个 400 报错。
Q6: 使用 LiteLLM 代理 Bedrock 还会遇到这个问题吗?
LiteLLM 从 2026 年 3 月起(PR #22867)已内置 _remove_scope_from_cache_control 函数,会自动剥离发往 Bedrock 和 Azure AI 的请求中的 scope 字段。如果你使用最新版 LiteLLM 作为 Bedrock 代理,这个问题应该已被自动处理。但为保险起见,建议同时设置 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1。
Q7: 有没有不影响任何功能的完美方案?
对于 Bedrock 用户,目前没有零损失的方案。方案一(禁用 Beta)只损失 scope 这个新特性,影响最小。如果想完整使用 Claude 的所有 Prompt Caching 功能(包括 scope),需要使用 Anthropic 原生 API。可以通过 API易 apiyi.com 平台快速接入原生 API,不受 Bedrock 兼容性限制。
修复 Claude Code Bedrock 报错速查表
| 操作 | 命令 / 配置 |
|---|---|
| 方案一:禁用 Beta(推荐) | export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 |
| 方案二:禁用缓存 | export DISABLE_PROMPT_CACHING=1 |
| VS Code / JetBrains 配置 | 编辑 ~/.claude/settings.json 的 env 字段 |
| 验证环境变量 | echo $CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS |
| 测试恢复会话 | claude --resume |
| 查看配置文件 | cat ~/.claude/settings.json |
| 查看 Claude Code 版本 | claude --version |
| GitHub Issue 追踪 | anthropics/claude-code#23220 |
总结
Claude Code 通过 AWS Bedrock 调用时遇到 cache_control.scope: Extra inputs are not permitted 报错,根本原因是 Bedrock 不支持 Anthropic 原生 API 的 scope Beta 字段。
最快修复方式:
# 在 CLI 中
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
// 在 ~/.claude/settings.json 中(推荐,全平台通用)
{
"env": {
"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1"
}
}
三个要记住的点:
- 这不是你的错——是 Bedrock 和 Anthropic API 的功能差异
- VS Code 用户必须在 settings.json 中设置——shell 环境变量不会被 VS Code 扩展读取
--resume不是根因——所有 Bedrock 调用都可能触发,--resume只是更容易暴露
如果你不想和 Bedrock 兼容性问题纠缠,切换到 Anthropic 原生 API 是根治方案。通过 API易 apiyi.com 可以快速接入原生 Claude API,完整支持所有功能特性,无需 AWS 基础设施。
本文作者: APIYI 技术团队
技术交流: 访问 API易 apiyi.com 获取更多 Claude Code 使用教程和技术支持
更新日期: 2026 年 4 月
适用版本: Claude Code v2.1.24+、AWS Bedrock
参考资料:
- GitHub Issue #23220: Claude Code v2.1.24+ cache_control.scope error
- 链接:
github.com/anthropics/claude-code/issues/23220
- 链接:
- GitHub Issue #41731: VS Code extension sends unsupported scope field
- 链接:
github.com/anthropics/claude-code/issues/41731
- 链接:
- AWS Bedrock Prompt Caching 文档:
- 链接:
docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html
- 链接:
- Anthropic Prompt Caching 文档:
- 链接:
docs.anthropic.com/en/docs/build-with-claude/prompt-caching
- 链接:
- Claude Code on Amazon Bedrock 官方文档:
- 链接:
docs.anthropic.com/en/docs/claude-code/bedrock
- 链接:
