![[Bug]: Bedrock prompt caching strips `ttl` for Claude Opus 4.8 (1h cache silently downgraded to 5m)](https://www.chat-gpts.plus/wp-content/uploads/2026/07/31359-ba7c9654.jpg)
[Bug]: Bedrock prompt caching strips `ttl` for Claude Opus 4.8 (1h cache silently downgraded to 5m)
快速结论:该报错发生在使用 LiteLLM Proxy 调用 Bedrock 上 Claude Opus 4.8 模型并设置 `cache_control.ttl`(例如 “1h”)时,缓存 TTL 被静默降级为 5 分钟(Bedrock 默认值)。优先确认 `litellm/llms/bedrock/common_utils.py` 中 `is_claude_4_5_on_bedrock()` 函数是否包含 Opus 4.8 的型号模式。
问题场景
用户在 LiteLLM Proxy 中使用 Bedrock API 调用 anthropic.claude-opus-4-8(Claude Opus 4.8)模型,并显式设置 cache_control.ttl 为 “1h”(1 小时)。实际运行时,Bedrock prompt caching 的 TTL 被静默降级为 5 分钟,而非预期的 1 小时。问题涉及 LiteLLM v1.89.0 版本的 Proxy 模块及 Bedrock 公共工具函数。
报错原文
# 不直接报错,但 cache 行为异常:TTL 从 "1h" 静默降级为 "5m"
# 可通过以下代码确认 is_claude_4_5_on_bedrock() 对 Opus 4.8 返回 False:
from litellm.llms.bedrock.common_utils import is_claude_4_5_on_bedrock
print(is_claude_4_5_on_bedrock("anthropic.claude-opus-4-7")) # True
print(is_claude_4_5_on_bedrock("anthropic.claude-opus-4-8")) # False <-- bug
原因分析
可能原因:在 litellm/llms/bedrock/common_utils.py 文件(约第 690 行)中,is_claude_4_5_on_bedrock() 函数维护了一个显式的 Claude 型号模式白名单,用于决定是否保留 cache_control.ttl 字段。该白名单覆盖了 Sonnet/Haiku/Opus 4.5、Sonnet/Opus 4.6 和 Opus 4.7,但缺少了 Opus 4.8 的条目模式(如 opus-4.8、opus_4.8、opus-4-8、opus_4_8)。当用户传入 Opus 4.8 的 Bedrock 模型 ID 时,该函数返回 False,导致 LiteLLM 剥离了自定义的 cache_control.ttl 字段,使其回退到 Bedrock 默认的 5 分钟缓存 TTL,且此行为没有任何显式警告或报错。
环境排查
- 确认 LiteLLM 版本是否为 v1.89.0 或更早版本(问题已在 PR #31929 中修复)。
- 检查
litellm/llms/bedrock/common_utils.py文件中is_claude_4_5_on_bedrock()函数的白名单是否包含opus-4.8、opus_4.8、opus-4-8、opus_4_8这四个模式。 - 确认使用的 Bedrock 模型 ID 是否跨区域(如
us.anthropic.claude-opus-4-8),该前缀同样受白名单影响。
解决步骤
- 确认是否为已知 Bug:检查
is_claude_4_5_on_bedrock()函数的实现,定位到白名单末尾(Opus 4.7 条目之后),确认是否缺少 Opus 4.8 对应的 4 个模式字符串。 - 应用修复代码(手动修补):在
litellm/llms/bedrock/common_utils.py中,于现有 Opus 4.7 的白名单条目后,添加以下 4 行模式匹配:"opus-4.8", "opus_4.8", "opus-4-8", "opus_4_8", - 添加单元测试(可选但推荐):在
tests/llm_translation/test_bedrock_common_utils.py中为新添加的 Opus 4.8 Bedrock ID(包括跨区域前缀us.anthropic.*)添加测试用例,确保is_claude_4_5_on_bedrock()返回True。 - 升级 LiteLLM 版本:如果无法手动修补,建议升级至包含 PR #31929 修复的 LiteLLM 版本。
验证方法
修改后,重新运行以下 Python 代码,确认 is_claude_4_5_on_bedrock("anthropic.claude-opus-4-8") 返回 True。然后在实际 Bedrock 调用中设置 cache_control.ttl = "1h",通过监控日志或缓存命中/过期行为确认 TTL 已正确保留 1 小时,而非降级为 5 分钟。



