Appearance
Session 裁剪
Session 裁剪在每次 LLM 调用前从内存上下文中修剪旧工具结果。它不重写磁盘上的 session 历史(*.jsonl)。
何时运行
- 启用
mode: "cache-ttl"后,当该 session 的最后一次 Anthropic 调用超过ttl时运行。 - 仅影响发送给模型的当次请求消息。
- 仅对 Anthropic API 调用有效(以及 OpenRouter Anthropic 模型)。
- 为获得最佳效果,
ttl应与你的模型cacheRetention策略匹配(short= 5m,long= 1h)。 - 裁剪后,TTL 窗口重置,后续请求可继续复用缓存直到
ttl再次到期。
智能默认值(Anthropic)
- OAuth 或 setup-token profile:启用
cache-ttl裁剪并将心跳设为1h。 - API key profile:启用
cache-ttl裁剪,将心跳设为30m,并在 Anthropic 模型上默认cacheRetention: "short"。 - 若你显式设置了上述任何值,OpenClaw 不会覆盖它们。
改善的内容(成本 + 缓存行为)
- 为何裁剪:Anthropic prompt 缓存仅在 TTL 内有效。若 session 空闲超过 TTL,下次请求会重新缓存完整 prompt,除非先裁剪。
- 成本降低的地方:裁剪减少了 TTL 过期后第一次请求的 cacheWrite 大小。
- TTL 重置的作用:裁剪运行后,缓存窗口重置,后续请求可复用新缓存的 prompt,而无需再次重缓存完整历史。
- 不做什么:裁剪不增加 token,也不"双倍"计费;它只改变那次 TTL 后第一次请求的缓存内容。
可裁剪的内容
- 仅
toolResult消息。 - 用户和 assistant 消息永不被修改。
- 最后
keepLastAssistants条 assistant 消息受保护;该截止点之后的工具结果不会被裁剪。 - 若 assistant 消息不足以确定截止点,裁剪跳过。
- 包含图像块的工具结果跳过(永不修剪/清空)。
上下文窗口估算
裁剪使用估算的上下文窗口(字符数 ≈ token 数 × 4)。基础窗口按以下顺序解析:
models.providers.*.models[].contextWindow覆盖。- 模型定义
contextWindow(来自模型注册表)。 - 默认
200000token。
若设置了 agents.defaults.contextTokens,它被视为解析窗口的上限(min)。
模式
cache-ttl
- 仅当该 session 的最后一次 Anthropic 调用超过
ttl(默认5m)时才运行裁剪。 - 运行时:与之前相同的软修剪 + 硬清除行为。
软修剪 vs 硬清除
- 软修剪:仅针对超大工具结果。
- 保留头部 + 尾部,插入
...,并追加原始大小的说明。 - 跳过包含图像块的结果。
- 保留头部 + 尾部,插入
- 硬清除:用
hardClear.placeholder替换整个工具结果。
工具选择
tools.allow/tools.deny支持*通配符。- deny 优先。
- 匹配不区分大小写。
- 空 allow 列表 => 允许所有工具。
与其他限制的交互
- 内置工具已自行截断输出;session 裁剪是额外的一层,防止长时间运行的聊天在模型上下文中积累过多工具输出。
- 压缩(compaction)是独立的:压缩会总结并持久化,裁剪是每次请求的临时操作。参见 /openclaw/concepts/compaction(如有相关文档)。
默认值(启用后)
ttl:"5m"keepLastAssistants:3softTrimRatio:0.3hardClearRatio:0.5minPrunableToolChars:50000softTrim:{ maxChars: 4000, headChars: 1500, tailChars: 1500 }hardClear:{ enabled: true, placeholder: "[Old tool result content cleared]" }
配置示例
默认(关闭):
json5
{
agents: { defaults: { contextPruning: { mode: "off" } } },
}启用 TTL 感知裁剪:
json5
{
agents: { defaults: { contextPruning: { mode: "cache-ttl", ttl: "5m" } } },
}限制裁剪范围到特定工具:
json5
{
agents: {
defaults: {
contextPruning: {
mode: "cache-ttl",
tools: { allow: ["exec", "read"], deny: ["*image*"] },
},
},
},
}小龙虾的记忆也需要定期清理——session 裁剪就是它的"选择性遗忘"机制,帮你省钱又保速度。
配置参考:Gateway 配置