如果你在使用 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
- 鏈接:
