一、上下文引擎核心介绍

上下文引擎是 OpenClaw 负责拼装完整请求提示词的核心组件。用户每发送一条消息,引擎会自动整合系统人设、规则、技能、历史对话、长期记忆等内容,组合为模型可识别的完整 Prompt。

完整内容组装结构:

plaintext

┌─────────────────────────────┐
│ SOUL.md(智能体人设)        │
│ IDENTITY.md(身份定义)      │
│ USER.md(用户信息)          │
│ AGENTS.md(执行规则)        │
│ TOOLS.md(工具说明)         │
│ 已安装全部 Skills 技能描述   │
│ MEMORY.md(长期记忆)        │
│ ─────────────────────────────│
│ 对话历史(摘要 + 近期消息)   │
│ ─────────────────────────────│
│ 用户最新消息                 │
└─────────────────────────────┘

核心目标:在模型上下文窗口限制内,最大化保留有效信息,同时控制 Token 开销。

二、上下文窗口与 Token 预算分配

2.1 主流模型窗口上限参考

每个大模型都有固定上下文窗口,决定单次请求最多可承载的 Token 总量,中文大致字数对照如下:

表格

模型上下文窗口中文大致字数
GPT-4o128K tokens约 6 万字
Claude 3.5 Sonnet200K tokens约 10 万字
DeepSeek V364K tokens约 3 万字
Ollama 本地模型4K ~ 32K tokens约 2 千~1.5 万字

引擎会根据当前使用模型的窗口大小,自动适配内容加载规则。当内容接近上限时,自动触发对话压缩

2.2 Token 预算分配规则

引擎会按固定比例划分窗口空间,保证各类内容正常承载:

  • 系统提示词(引导文件 + 所有技能):20% ~ 30%
  • 对话历史记录:50% ~ 60%
  • 预留空间(新消息 + AI 回复):15% ~ 20%

三、对话压缩(Compaction)机制详解

3.1 压缩工作原理

对话持续增多后,历史消息会不断占用 Token,逼近模型窗口上限。自动压缩会将早期多条原始对话合并为一段精简摘要,释放空间用于新对话。

流转示意:

plaintext

压缩前(Token 即将溢出)
[消息1][消息2]...[消息40][消息41]...[消息50][新消息]

压缩执行:提取早期对话 → 生成摘要 → 替换原始内容

压缩后(空间释放)
[1-40条对话摘要][消息41]...[消息50][新消息]

3.2 触发条件

默认规则:当对话历史 Token 占比达到窗口 70% 时,自动执行压缩,阈值可自定义修改。

3.3 完整配置项

编辑 ~/.openclaw/openclaw.json 配置压缩功能:

json

{
  "compaction": {
    "enabled": true,
    "threshold": 0.7,
    "model": "deepseek-chat"
  }
}

表格

配置项作用默认值
enabled开关:是否开启自动压缩true
threshold触发阈值(0~1,代表窗口占比)0.7
model生成摘要所使用的模型同主对话模型

优化建议:优先使用低成本模型做摘要(DeepSeek、GPT-4o-mini),避免压缩环节额外增加开销。

3.4 压缩的优缺点与数据取舍

压缩属于有损优化,会精简细节内容:

✅ 保留内容:核心结论、关键决策、代码变更、重要指令

❌ 丢失内容:对话语气、中间试错过程、零散细节、临时数据

丢失细节解决方案

  1. 核心信息写入 MEMORY.md 长期记忆,跨会话永久保留;
  2. 固定规则、要求写入 AGENTS.md,每次会话都会加载;
  3. 细节较多时手动新建会话(指令 /new),重置上下文。

四、消息队列三种工作模式

上下文引擎内置三类消息队列模式,控制消息的加载、执行、流转顺序,适配不同业务场景。

4.1 steer 引导模式

  • 用途:在用户消息之前注入临时系统指令、约束规则
  • 优先级:最高
  • 典型场景:钩子前置指令、临时行为限制、即时权限管控

4.2 followup 跟进模式

  • 用途:AI 完成当前回复后,自动执行后续任务
  • 优先级:中等
  • 典型场景:多步骤任务串联、工具调用后置处理、流程自动化

4.3 collect 收集模式

  • 用途:短暂等待,收集多条消息后批量统一处理
  • 优先级:最低
  • 典型场景:用户连续刷屏、群组多人发言、批量指令处理

4.4 标准执行顺序

plaintext

1. steer 引导指令(最高优先级)
↓
2. 用户当前消息
↓
3. AI 生成回复
↓
4. followup 后置任务
↓
5. collect 批量消息(最低优先级)

五、Token 消耗拆解与优化方向

5.1 全链路 Token 占比

单次请求所有消耗来源及占比参考:

表格

消耗来源占比说明
系统提示词20%~30%SOUL/AGENTS/ 所有技能、工具定义
对话历史40%~50%历史问答、压缩摘要
当前用户消息5%~10%本次输入内容
AI 回复内容15%~25%模型输出文本
工具调用出入参不固定搜索、读文件、命令执行等大数据内容

5.2 技能带来的固定开销

单个技能描述常驻占用 24+ Token,属于永久固定开销:

  • 安装 20 个技能:额外增加约 500 Token
  • 安装越多,基础开销越大

优化操作:

bash

运行

# 查看已安装技能
clawhub list
# 卸载长期闲置技能
clawhub uninstall 技能名称

5.3 综合降本 & 控容建议

  1. 分层选模型:日常闲聊 / 摘要用低价模型,复杂推理用高阶模型;
  2. 主动新建会话:单一会话轮次过多时,执行 /new 重置上下文;
  3. 强制开启压缩:搭配低价模型生成摘要,兼顾空间与成本;
  4. 精简系统文件:缩短 SOUL.md、AGENTS.md 篇幅,剔除冗余内容;
  5. 本地部署兜底:隐私场景、高频使用场景切换 Ollama 本地模型,零 API 费用。

六、对话压缩 vs 长期记忆(MEMORY)

两者功能互补、定位完全不同,是上下文管理的两大核心能力。

表格

对比项对话压缩 Compaction长期记忆 MEMORY.md
作用范围仅限当前会话跨所有会话永久生效
触发方式自动触发(Token 超限)智能体主动写入 / 手动编辑
存储位置会话临时文件独立 MEMORY.md 文件
信息形态历史对话摘要关键事实、用户偏好、重要规则
可恢复性原始对话无法恢复可随时查看、手动修改

信息分级存储最佳实践

按信息重要程度选择承载方式,形成完整分层体系:

  1. 临时对话细节:依靠会话 + 压缩,短期使用即可;
  2. 会话内关键内容:依赖自动压缩摘要保留;
  3. 用户偏好、重要决策:存入 MEMORY.md 跨会话持久化;
  4. 永久规则、人设、执行标准:写入 SOUL.md / AGENTS.md,全局生效。

优先级示意(重要程度由低到高):

普通对话压缩摘要MEMORY.md 长期记忆SOUL.md/AGENTS.md 永久规则

七、上下文状态调试命令

日常排查上下文溢出、记忆异常、压缩失效等问题,使用以下指令快速诊断:

bash

运行

# 查看当前会话 Token 总量、当日/月度用量
openclaw status

# 查看长期记忆加载状态、内容统计
openclaw memory status

也可直接在对话中交互查询:

plaintext

你当前加载了多少上下文内容?

八、总结

  1. 上下文引擎负责拼装全套提示词,是连接所有配置、对话、技能的中枢;
  2. 对话压缩自动解决窗口溢出问题,本质是用摘要换取空间,存在细节损耗;
  3. 三种消息队列模式可实现指令前置、任务后置、批量处理,适配复杂流程;
  4. 压缩负责会话内短期历史,Memory 负责跨会话长期信息,二者配合使用效果最佳;
  5. 合理调整压缩阈值、摘要模型、精简技能与配置,可同时优化上下文容量与 API 成本。