上下文窗口与压缩
每个模型都有一个上下文窗口(它能看到的最大 Token 数)。长时间的对话会积累消息和工具结果;一旦窗口紧张,OpenClaw 会压缩旧的历史记录以保持在限制范围内。什么是压缩
压缩会将较旧的对话总结为一个简洁的摘要条目,并保持最近的消息不变。摘要存储在会话历史中,因此未来的请求会使用:- 压缩摘要
- 压缩点之后的最近消息
配置
使用agents.defaults.compaction 设置中的 openclaw.json 来配置压缩行为(模式、目标令牌数等)。
压缩摘要默认保留不透明标识符(identifierPolicy: "strict")。您可以使用 identifierPolicy: "off" 覆盖此设置,或者通过 identifierPolicy: "custom" 和 identifierInstructions 提供自定义文本。
您可以通过 agents.defaults.compaction.model 为压缩摘要指定不同的模型。当您的主模型是本地模型或小型模型,并且希望由能力更强的模型生成压缩摘要时,这非常有用。该覆盖设置接受任何 provider/model-id 字符串:
自动压缩(默认开启)
当会话接近或超过模型的上下文窗口时,OpenClaw 会触发自动压缩,并可能会使用压缩后的上下文重试原始请求。 你会看到:🧹 Auto-compaction complete在详细模式下/status显示🧹 Compactions: <count>
手动压缩
使用/compact(可选择附带指令)来强制执行一轮压缩:
上下文窗口来源
上下文窗口是特定于模型的。OpenClaw 使用来自已配置提供商目录中的模型定义来确定限制。压缩 vs 修剪
- 压缩:进行摘要并以 JSONL 格式持久化。
- 会话修剪:仅修剪旧的工具结果,在内存中,针对每个请求。
OpenAI 服务端压缩
OpenClaw 还支持针对兼容的直接 OpenAI 模型的 OpenAI Responses 服务端压缩提示。这与本地 OpenClaw 压缩是分开的,并且可以与它一起运行。- 本地压缩:OpenClaw 进行摘要并持久化到会话 JSONL 中。
- 服务器端压缩:当启用
store+context_management时,OpenAI 会在提供商端压缩上下文。
自定义上下文引擎
压缩行为由当前活动的 context engine 拥有。传统引擎使用上述内置的 摘要功能。插件引擎(通过plugins.slots.contextEngine 选择)可以实现任何压缩策略 —— DAG
摘要、向量检索、增量压缩等。
当插件引擎设置 ownsCompaction: true 时,OpenClaw 会将所有
压缩决策委托给该引擎,并且不运行内置的自动压缩。
当 ownsCompaction 为 false 或未设置时,OpenClaw 仍可能使用 Pi 的
内置尝试中自动压缩,但活动引擎的 compact() 方法
仍会处理 /compact 和溢出恢复。不会自动回退
到传统引擎的压缩路径。
如果您正在构建非拥有的上下文引擎,请通过
从 openclaw/plugin-sdk/core 调用 delegateCompactionToRuntime(...) 来实现 compact()。
提示
- 当会话感觉陈旧或上下文臃肿时,使用
/compact。 - 大型工具输出已被截断;剪枝可以进一步减少工具结果的累积。
- 如果您需要全新的开始,
/new或/reset将启动一个新的会话 ID。
本页面源自 openclaw/openclaw,由 BeaversLab 翻译,遵循 MIT 协议 发布。