|

修復 Claude Code Bedrock cache_control scope 報錯的 3 種方案:–resume 恢復會話失敗完整排查指南

如果你在使用 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-cache-control-scope-error-fix-resume-guide-zh-hant 图示

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 恢復歷史會話時確實更容易觸發。原因如下:

claude-code-bedrock-cache-control-scope-error-fix-resume-guide-zh-hant 图示

--resume 的內部工作機制

  1. 加載歷史會話: 從 ~/.claude/projects/<項目>/<會話ID>.jsonl 讀取完整對話記錄
  2. 重建上下文: 將 system prompt、工具定義、所有歷史消息重新組裝爲完整的 messages 數組
  3. 緩存優化: 因爲恢復的上下文通常很大(包含完整對話歷史),Claude Code 會更積極地在系統消息上設置 cache_control 斷點來優化成本
  4. 發送請求: 第一個 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.typecache_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 報錯完整排查流程

如果你不確定自己的情況適用哪種方案,按以下流程排查:

claude-code-bedrock-cache-control-scope-error-fix-resume-guide-zh-hant 图示

第 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=1AWS_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.jsonenv 字段
驗證環境變量 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"
  }
}

三個要記住的點:

  1. 這不是你的錯——是 Bedrock 和 Anthropic API 的功能差異
  2. VS Code 用戶必須在 settings.json 中設置——shell 環境變量不會被 VS Code 擴展讀取
  3. --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


參考資料:

  1. GitHub Issue #23220: Claude Code v2.1.24+ cache_control.scope error
    • 鏈接: github.com/anthropics/claude-code/issues/23220
  2. GitHub Issue #41731: VS Code extension sends unsupported scope field
    • 鏈接: github.com/anthropics/claude-code/issues/41731
  3. AWS Bedrock Prompt Caching 文檔:
    • 鏈接: docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html
  4. Anthropic Prompt Caching 文檔:
    • 鏈接: docs.anthropic.com/en/docs/build-with-claude/prompt-caching
  5. Claude Code on Amazon Bedrock 官方文檔:
    • 鏈接: docs.anthropic.com/en/docs/claude-code/bedrock

Similar Posts