解决方案
1)上下文压缩参数设置
openclaw.json文件中,默认无如下参数:reserveTokensFloor、 notifyUser、 identifierPolicy、memoryFlush、softThresholdTokens。需要根据自己使用的模型参数做下手动设置。
“ 章鱼哥”使用的腾讯云DeepSeek-v3.2 API接口,DeepSeek-v3.2支持128K上下文长度,最大输入长度96k,最大输出32k(默认4k),最大思维链输出长度32k。如下是章鱼哥实际参数配置:
"agents": {"defaults": {"workspace": "/home/ubuntu/.openclaw/workspace","compaction": {"mode": "safeguard","reserveTokensFloor": 50000,"notifyUser": true,"identifierPolicy": "strict","memoryFlush": {"enabled": true,"softThresholdTokens": 4000}},"model": {"primary": "custom-api-lkeap-cloud-tencent-com/deepseek-v3.2"},"models": {"custom-api-lkeap-cloud-tencent-com/deepseek-v3.2": {"alias": "deepseek-v3.2"}}}},
参数路径 | 配置值 | 说明 |
|---|---|---|
|
| 定义 Agent 的工作目录,用于存放会话记录、记忆文件等。 |
|
| 将压缩模式设置为“安全保护”。该模式提供了更稳健的保护机制,包括自适应分块和渐进式回退,可以防止压缩过程中出现问题。 |
|
| 为系统预留的 Token “安全缓冲区”。作用:它决定了何时触发压缩。计算公式为: |
|
| 启用后,当压缩开始时,用户会收到一个简短的提示,例如 “Compacting context…”。这可以让你清楚知道系统正在进行后台维护。 |
|
| 设置为 |
|
| 启用“记忆刷新”机制。在压缩发生前,系统会有一个静默回合,提醒 Agent 将重要的短期记忆写入到磁盘文件中,避免关键信息在压缩中丢失。 |
|
| 这是触发记忆刷新的“软阈值”。作用:当 Token 使用量达到 |
2)模型参数设置
如下是根据deepseek-v3.2模型参数,在“章鱼哥”openclaw.json文件中设置,DeepSeek-V3.2的非思考模式最大支持 8000 tokens 的输出,因此maxTokens参数设置成了8000.
"models": [{"id": "deepseek-v3.2","name": "deepseek-v3.2 (Custom Provider)","contextWindow": 128000,"maxTokens": 8000,"input": ["text"],
当对话历史接近模型的 128,000 令牌限制时,系统会自动压缩,保留最新的 50,000 令牌,删除较旧的对话历史。压缩时会通知用户,保持透明度, 使用内存刷新机制,平衡性能和内存使用。
核心机制说明
压缩触发点:得益于 reserveTokensFloor: 50000,压缩会在达到约 78,000 Token 时被触发(基于 128K 模型窗口)。这预留了约 50,000 Token 的“安全空间”,确保对话有充足空间继续。
记忆保护机制:在压缩发生前,memoryFlush 会在约 74,000 Token 时触发一个静默回合,提醒 Agent 将重要信息写入 memory/YYYY-MM-DD.md 等文件中,防止关键信息丢失。
体验与完整性:notifyUser: true 让你能感知到后台操作,而 identifierPolicy: strict 则保护了对话中代码片段的核心语义。这套配置的核心逻辑是在压缩前主动保存关键信息,并严格保护代码语义,同时让用户了解后台操作,是一个相当稳健且考虑周全的配置。
夜雨聆风