如何为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
相关产品推荐
相关产品推荐

