本技能提供自动化的会话压缩功能,解决长对话导致的 token 超限问题。
在 openclaw.config.json 中启用:
{
"skills": {
"session-compactor": {
"enabled": true,
"maxTokens": 3000,
"minMessagesToKeep": 5,
"autoCompact": true
}
}
}
设置 "autoCompact": true 后,每次会话更新会自动检测并压缩。
调用工具 compact_session:
openclaw tools call compact_session '{"force": false}'
max(minKeep, total/3) 条消息压缩 不可逆,早期消息细节会丢失。
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
| ------ | ------ | ------ | ------ |
maxTokens | number | 3000 | 触发压缩的 token 阈值 |
minMessagesToKeep | number | 5 | 至少保留的最新消息数 |
autoCompact | boolean | true | 启用自动压缩 |
force (工具参数) | boolean | false | 强制压缩(调用时) |
[
{"role":"user","content":"请分析赛力斯2025年报"},
{"role":"assistant","content":"[tavily_search] 正在搜索..."},
{"role":"user","content":"还要2024年对比数据"},
{"role":"assistant","content":"[tavily_search] 已找到..."}
// ... 继续累积到 50+ 条
]
[
{"role":"system","content":"## 会话摘要 (已压缩早期 45 条消息)\n- 对话目标: 分析赛力斯2025年报...\n- 工具调用: 6 次..."},
{"role":"user","content":"那么深信服的2025预测呢?"},
{"role":"assistant","content":"继续..."}
// ... 最新 16 条保持完整
]
核心算法实现于 scripts/compact_session.js:
const { compactSession } = require('./scripts/compact_session');
const result = await compactSession(messages, {
maxTokens: 4000,
force: false
});
console.log(result.compacteded); // true/false
console.log(result.savedTokens); // 节省的 token 数
详细设计文档见 references/architecture.md。
⚠️ 压缩不可逆 - 早期消息细节永久丢失
⚠️ 阈值设置 - 建议 maxTokens 设较高 (4000-6000) 避免过早压缩
⚠️ 生产增强 - 考虑集成 LLM 生成高质量摘要
references/architecture.md - 详细设计说明compact.rs (https://github.com/instructkr/claw-code)版本: 0.1.0
作者: 小李 (基于 claw-code 分析实现)
共 1 个版本