You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ChatBedrockConverse+ChatPromptTemplate配置Prompt缓存并验证

解决ChatBedrockConverse Prompt缓存创建失败问题

核心诊断方向

缓存创建失败通常源于以下几点:

  • 模型不支持Prompt缓存功能
  • 缓存配置未正确启用(含Bedrock API级和LangChain级配置)
  • 提示词未满足缓存触发条件(如每次调用的提示词存在差异)
  • 未启用usage_metadata返回权限

分步解决方案(基于ChatPromptTemplate实现)

1. 确认模型兼容性

仅部分Bedrock模型支持Prompt缓存,优先选择:

  • Anthropic Claude 3系列(Opus/Sonnet/Haiku)
  • Amazon Titan Text G1 - Express

2. 配置缓存并初始化ChatBedrockConverse

from langchain.chat_models import ChatBedrockConverse
from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate
from langchain.cache import InMemoryCache
from langchain.globals import set_llm_cache

# 初始化内存缓存(生产环境可替换为Redis等持久化缓存)
cache = InMemoryCache()
set_llm_cache(cache)

# 初始化带缓存配置的ChatBedrockConverse
chat_model = ChatBedrockConverse(
    model_id="anthropic.claude-3-sonnet-20240229-v1:0",
    model_kwargs={
        # 启用Bedrock级Prompt缓存
        "prompt_cache_config": {
            "enabled": True,
            "cache_ttl_seconds": 3600  # 缓存有效期,按需调整
        },
        # 强制返回usage_metadata
        "return_usage_metadata": True
    },
    cache=cache  # 绑定LangChain缓存实例
)

3. 用ChatPromptTemplate构建带变量的提示词

# 超长系统提示词(确保token数>1024)
system_prompt = """你是资深云技术顾问,专注解答Amazon Bedrock与LangChain集成问题。需详细拆解技术逻辑,给出可落地的代码示例,覆盖参数配置、故障排查等核心场景。...(补充内容至token数超1024)"""
system_message = SystemMessagePromptTemplate.from_template(system_prompt)

# 含变量的用户提示词模板
human_prompt = "请详解{tech_topic}的实现原理及最佳实践"
human_message = HumanMessagePromptTemplate.from_template(human_prompt)

# 组合为ChatPromptTemplate
chat_prompt = ChatPromptTemplate.from_messages([system_message, human_message])

4. 调用模型并验证缓存状态

# 第一次调用:创建缓存(cache_creation应为1,cache_read为0)
prompt_input = {"tech_topic": "Bedrock Prompt缓存"}
response1 = chat_model(chat_prompt.format_prompt(**prompt_input).to_messages())
print("首次调用元数据:", response1.usage_metadata)

# 第二次调用:读取缓存(cache_read应为1,cache_creation为0)
response2 = chat_model(chat_prompt.format_prompt(**prompt_input).to_messages())
print("二次调用元数据:", response2.usage_metadata)

常见坑点排查

  • 提示词一致性:变量替换后的完整提示词必须完全一致才会命中缓存,哪怕空格、换行差异都会导致缓存未命中
  • 缓存配置双重校验:必须同时设置Bedrock的prompt_cache_config.enabled和LangChain的cache实例,缺一不可
  • usage_metadata权限:部分模型需显式设置return_usage_metadata=True才会返回缓存相关数据
  • 模型版本:确保使用的是最新支持缓存的模型版本,如Claude 3需指定20240229及以后的版本

内容的提问来源于stack exchange,提问作者ROHIT KOCHIKKAT FRANCIS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:07:01