7.Prompt caching in action
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org
==================================================
Prompt 缓存是一个强大的优化功能,当你重复向 Claude 发送相同内容时,它能让你的 API 请求既更快又更便宜。让我们来探索如何在你的应用程序中有效地实现它。

Prompt 缓存的工作原理
当你启用 prompt 缓存时,第一个请求会将内容写入一个持续一小时的缓存中。后续请求就可以从这个缓存中读取,而不需要重新处理相同的内容。这在以下情况下特别有价值:
- 大型系统提示词(比如 6K token 的编程助手提示词)
- 复杂的工具模式(多个工具大约 1.7K token)
- 重复的消息内容
关键要点是,缓存只有在你重复发送相同内容时才有帮助——但在许多应用程序中,这种情况极其频繁。
设置工具模式缓存
要缓存你的工具模式,你需要在工具列表的最后一个工具中添加缓存控制字段。以下是在不修改原始工具定义的情况下正确执行此操作的方法:
if tools:
tools_clone = tools.copy()
last_tool = tools_clone[-1].copy()
last_tool["cache_control"] = {"type": "ephemeral"}
tools_clone[-1] = last_tool
params["tools"] = tools_clone
这种方法在添加缓存控制字段之前,会创建工具列表和最后一个工具模式的副本。虽然你可以直接修改 tools[-1]["cache_control"],但使用复制的方法可以避免在后续重新排序工具时出现问题。
系统提示缓存
对于系统提示,你需要将其构建为带有缓存控制的文本块:
if system:
params["system"] = [
{
"type": "text",
"text": system,
"cache_control": {"type": "ephemeral"}
}
]
这将把你的系统提示从简单字符串转换为支持缓存的结构化格式。
理解缓存行为
当你运行启用缓存的请求时,你会在响应中看到不同的使用模式:
- 首次请求:cache_creation_input_tokens=1772 - Claude 写入缓存
- 后续请求:cache_read_input_tokens=1772 - Claude 从缓存读取
- 内容变更:出现新的缓存创建令牌
缓存极其敏感 - 即使在你的工具或系统提示中更改一个字符,也会使该组件的整个缓存失效。
缓存排序和断点
你可以在单个请求中设置多个缓存断点。顺序很重要:
- 工具(如果提供)
- 系统提示词(如果提供)
- Messages
如果你更改了系统提示词但保持相同的工具,你会看到部分缓存读取(针对工具)和缓存写入(针对新的系统提示词)。这种细粒度缓存意味着你只需为实际发生变化的部分付费处理。
实际考虑因素
提示词缓存在以下情况下最为有效:
- 跨请求的一致工具模式
- 稳定的系统提示词
- 使用相似上下文进行多次请求的应用程序
请记住,缓存仅持续一小时,因此它是为相对频繁使用API的应用程序而设计的,而不是用于长期存储。
==================================================
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org