提示缓存
提示缓存
提示缓存意味着模型提供商可以跨轮次重用未更改的提示前缀(通常是系统/开发者指令和其他稳定上下文),而不是每次都重新处理它们。第一个匹配的请求写入缓存 tokens(cacheWrite),后续匹配的请求可以读回它们(cacheRead)。
为什么这很重要:更低的 token 成本、更快的响应,以及长运行会话更可预测的性能。没有缓存,重复的提示在每轮都要支付完整的提示成本,即使大多数输入没有改变。
本页面涵盖所有影响提示重用和 token 成本的缓存相关旋钮。
对于 Anthropic 定价详情,详见: https://docs.anthropic.com/docs/build-with-claude/prompt-caching
主要旋钮
cacheRetention(模型和每代理)
在模型参数上设置缓存保留:
agents:
defaults:
models:
"anthropic/claude-opus-4-6":
params:
cacheRetention: "short" # none | short | long
每代理覆盖:
agents:
list:
- id: "alerts"
params:
cacheRetention: "none"
配置合并顺序:
agents.defaults.models["provider/model"].paramsagents.list[].params(匹配的代理 id;按键覆盖)
遗留 cacheControlTtl
遗留值仍被接受并映射:
5m->short1h->long
新配置优先使用 cacheRetention。
contextPruning.mode: "cache-ttl"
在缓存 TTL 窗口后修剪旧工具结果上下文,以便空闲后的请求不会重新缓存过大的历史。
agents:
defaults:
contextPruning:
mode: "cache-ttl"
ttl: "1h"
详见 会话修剪 获取完整行为。
心跳保持温暖
心跳可以保持缓存窗口温暖,减少空闲间隔后的重复缓存写入。
agents:
defaults:
heartbeat:
every: "55m"
每代理心跳在 agents.list[].heartbeat 支持。
提供商行为
Anthropic(直接 API)
- 支持
cacheRetention。 - 使用 Anthropic API 密钥认证配置文件时,当未设置时 OpenClaw 为 Anthropic 模型引用种子
cacheRetention: "short"。
Amazon Bedrock
- Anthropic Claude 模型引用(
amazon-bedrock/*anthropic.claude*)支持显式cacheRetention传递。 - 非 Anthropic Bedrock 模型在运行时强制为
cacheRetention: "none"。
OpenRouter Anthropic 模型
对于 openrouter/anthropic/* 模型引用,OpenClaw 在系统/开发者提示块上注入 Anthropic cache_control 以改善提示缓存重用。
其他提供商
如果提供商不支持此缓存模式,cacheRetention 无效。
调优模式
混合流量(推荐默认)
在主代理上保持长寿命基线,在突发通知器代理上禁用缓存:
agents:
defaults:
model:
primary: "anthropic/claude-opus-4-6"
models:
"anthropic/claude-opus-4-6":
params:
cacheRetention: "long"
list:
- id: "research"
default: true
heartbeat:
every: "55m"
- id: "alerts"
params:
cacheRetention: "none"
成本优先基线
- 设置基线
cacheRetention: "short"。 - 启用
contextPruning.mode: "cache-ttl"。 - 仅为从温暖缓存受益的代理将心跳保持在 TTL 以下。
缓存诊断
OpenClaw 为嵌入式代理运行公开专用的缓存跟踪诊断。
diagnostics.cacheTrace 配置
diagnostics:
cacheTrace:
enabled: true
filePath: "~/.openclaw/logs/cache-trace.jsonl" # 可选
includeMessages: false # 默认 true
includePrompt: false # 默认 true
includeSystem: false # 默认 true
默认值:
filePath:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonlincludeMessages:trueincludePrompt:trueincludeSystem:true
环境变量切换(一次性调试)
OPENCLAW_CACHE_TRACE=1启用缓存跟踪。OPENCLAW_CACHE_TRACE_FILE=/path/to/cache-trace.jsonl覆盖输出路径。OPENCLAW_CACHE_TRACE_MESSAGES=0|1切换完整消息负载捕获。OPENCLAW_CACHE_TRACE_PROMPT=0|1切换提示文本捕获。OPENCLAW_CACHE_TRACE_SYSTEM=0|1切换系统提示捕获。
检查什么
- 缓存跟踪事件是 JSONL,包括 staged snapshots 如
session:loaded、prompt:before、stream:context和session:after。 - 每轮缓存 token 影响通过
cacheRead和cacheWrite在正常使用表面可见(例如/usage full和会话使用量摘要)。
快速故障排除
- 大多数轮次上高
cacheWrite:检查易变的系统提示输入,并验证模型/提供商支持你的缓存设置。 cacheRetention无效:确认模型键匹配agents.defaults.models["provider/model"]。- 带有缓存设置的 Bedrock Nova/Mistral 请求:预期运行时强制为
none。
相关文档: