[Bug]: Prompt caching broken for Bedrock Application Inference Profiles via /v1/messages endpoint

用户在 LiteLLM 中配置了 Bedrock App Inference Profile(ARN 格式,如 bedrock/converse/arn:aws:bedrock:us-east-1:ACCOUNT:application-inference-profile/PROFILE_ID ),

[Bug]: Prompt caching broken for Bedrock Application Inference Profiles via /v1/messages endpoint

[Bug]: Prompt caching broken for Bedrock Application Inference Profiles via /v1/messages endpoint

快速结论:当使用 Bedrock Application Inference Profiles(ARN 格式)通过 LiteLLM 的 /v1/messages 端点(Anthropic 协议)时,cache_control 指令会被静默丢弃,导致 prompt caching 无法触发。优先排查 is_anthropic_claude_model() 函数是否对 ARN 模型字符串返回 False。

问题场景

用户在 LiteLLM 中配置了 Bedrock App Inference Profile(ARN 格式,如 bedrock/converse/arn:aws:bedrock:us-east-1:ACCOUNT:application-inference-profile/PROFILE_ID),并通过 Claude Code 或其他工具调用 /v1/messages(Anthropic 端点)发送带有 cache_control 指令的请求。prompt caching 从未激活,但同样的模型通过 /v1/chat/completions(OpenAI 端点)可以正常工作。

报错原文

# 没有显式报错,但缓存 token 数为零:
# Response 中无 cache_creation_input_tokens 或 cache_read_input_tokens
# Bedrock CloudWatch 日志确认请求中没有 cachePoint 块

原因分析

核心问题出在 litellm/llms/anthropic/experimental_pass_through/adapters/transformation.py 中的 is_anthropic_claude_model() 函数(约第719行)。该函数通过检查模型字符串中是否包含 "anthropic""claude" 来判断是否为 Claude 模型:

return "anthropic" in model_lower or "claude" in model_lower

对于 Bedrock Application Inference Profiles,模型字符串是 ARN 格式,如 converse/arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/abcdef123456,其中既不包含 "anthropic" 也不包含 "claude"。因此,_add_cache_control_if_applicable() 会跳过保留 cache_control 的操作,导致下游 Bedrock Converse API 永远收不到 cachePoint 块。

环境排查

  • LiteLLM 版本:v1.83.7-stable 至 v1.83.13-nightly 均受影响(用户测试到 v1.92.0-dev 仍未修复)
  • 模型配置:使用 bedrock/converse/arn:aws:bedrock:...:application-inference-profile/... 格式
  • 请求端点:/v1/messages(Anthropic 协议,如 Claude Code 使用)与 /v1/chat/completions(OpenAI 协议)对比

解决步骤

  1. (可优先尝试)修改 is_anthropic_claude_model() 函数,增加对 Bedrock ARN 的检测。将原来的 return "anthropic" in model_lower or "claude" in model_lower 改为:
    return "anthropic" in model_lower or "claude" in model_lower or (
        "arn:" in model_lower and "bedrock" in model_lower
    )

    注意:该修复在 Issue #26627 中提交,但截至 v1.92.0-dev 仍未合并入主线。

  2. 临时规避方案:如果可能,改用 /v1/chat/completions(OpenAI 端点)发送请求,该路径不受此 Bug 影响,可正常触发 prompt caching。
  3. 监控确认:使用 Bedrock CloudWatch 检查模型调用日志,确认请求中是否包含 cachePoint 块。

验证方法

发送一个带 cache_control 的请求到 /v1/messages 端点,检查响应中是否出现 cache_creation_input_tokenscache_read_input_tokens 字段。也可以通过 Bedrock CloudWatch 日志确认请求 body 中是否包含 cachePoint 块。同样的请求通过 /v1/chat/completions 端点应能正确返回缓存 token 数。

参考来源

BerriAI/litellm #26625

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 15099

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注