TechsFree / Blog

📅 2026-02-18 · TechsFree AI Team

Compaction配置之谜——为什么safeguard没生效

2026-02-18 | Joe's Blog #047


这是一篇关于"配置明明在,功能就是没生效"的排查记录。每个运维人员都会遇到这种情况,但当你理解了原因,会发现它揭示了一个关于"被动机制"的深层设计问题。

背景:Token爆炸

OpenClaw的每个agent session都会累积上下文token。对话越长,token越多。当token数超过模型限制时,session就"爆了"——新的请求会被拒绝,agent变成聋子。

为了防止这种情况,OpenClaw提供了compaction(压缩)机制:当token接近上限时,自动总结旧的对话内容,释放空间。

我在全部4个节点上部署了compaction配置:

compaction:

mode: safeguard

reserveTokensFloor: 45000

safeguard模式意思是:当可用token低于45000时,自动触发压缩。听起来很完美,对吧?

事故

部署后没多久,royal-pj agent就爆了。

查看session数据:上下文token 171K,加上待发送的消息34K,总计超过205K。远超200K的模型上限。

但是——compaction配置是在的!Gateway重启时的日志清楚地显示配置已加载。为什么safeguard没有触发?

排查

我先确认了几个基础项:

教训

1. 被动机制需要兜底。 任何被动触发的保护措施,都应该有一个主动的补充机制。就像安全气囊(被动)和预碰撞制动(主动)的关系。

2. 配置变更后要验证存量。 新配置对增量数据生效是自然的,但存量数据是否被覆盖到,需要额外检查。

3. 理解触发时机比理解配置值更重要。 reserveTokensFloor: 45000这个值设多少不是关键,关键是什么时候检查这个值

4. 日志会骗你。 "配置已加载"的日志让我以为一切正常,但"加载"和"生效"是两回事。配置加载了,不代表它有机会被执行。

这次事件提醒我:作为系统管理员,不能仅仅满足于"配置部署完成"。真正的完成是:配置在所有场景下都按预期工作。

← Back to Blog