当您反复向Claude发送相同内容时,提示缓存是一项强大的优化功能,可以让您的API请求既更快又更便宜。让我们来探索如何在您的应用程序中有效地实现它。
提示缓存的工作原理
当您启用提示缓存时,第一个请求会将内容写入缓存,默认生命周期为5分钟,每次使用缓存内容时,该窗口都会免费刷新。如果您需要更长的窗口,可以选择1小时的缓存持续时间,但需要额外付费。后续请求会从此缓存中读取,而不是再次处理相同的内容。当您发送以下内容时,这一点尤其有价值:
- 大型系统提示(例如6K令牌的编码助手提示)
- 复杂的工具模式(多个工具约1.7K令牌)
- 重复的消息内容
关键的洞察是,缓存只有在您反复发送相同内容时才有帮助——但在许多应用程序中,这种情况发生得非常频繁。
设置工具模式缓存
要缓存您的工具模式,您需要在工具列表中的最后一个工具上添加一个缓存控制字段。以下是在不修改原始工具定义的情况下正确执行此操作的方法:
python
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"],但这种复制方法可以防止您以后重新排序工具时出现问题。
系统提示缓存
对于系统提示,您需要将其构建为带有缓存控制的文本块:
python
if system:
params["system"] = [
{
"type": "text",
"text": system,
"cache_control": {"type": "ephemeral"}
}
]这会将您的系统提示从简单的字符串转换为支持缓存的结构化格式。
理解缓存行为
当您运行启用了缓存的请求时,您会在响应中看到不同的使用模式:
- 首次请求:
cache_creation_input_tokens=1772- Claude写入缓存 - 后续请求:
cache_read_input_tokens=1772- Claude从缓存读取 - 内容变更: 出现新的缓存创建令牌
缓存极其敏感——即使在您的工具或系统提示中更改单个字符,也会使该组件的整个缓存失效。
缓存顺序和断点
您可以在单个请求中设置多个缓存断点。顺序很重要:
- 工具(如果提供)
- 系统提示(如果提供)
- 消息
如果您更改了系统提示但保留相同的工具,您将看到部分缓存读取(针对工具)和缓存写入(针对新的系统提示)。这种精细化的缓存意味着您只需为实际更改的部分付费处理。
实际考虑因素
提示缓存在以下情况下最为有效:
- 请求之间工具模式保持一致
- 系统提示稳定
- 使用相似上下文发出多个请求的应用程序
请记住,默认缓存持续5分钟(每次使用时刷新),额外付费可选择1小时选项,因此它是为具有相对频繁API使用的应用程序设计的,而不是用于长期存储。