技能
实用工具 官方
Compact — 上下文压缩
添加 /compact 命令用于手动压缩上下文,解决长时间运行的代理会话中的上下文退化问题。
功能特性
- 手动 /compact 命令,用于压缩对话历史
- 使用 Claude Agent SDK 内置的压缩功能——无需合成提示词
- 会话以摘要上下文继续运行(非破坏性操作)
- 压缩前自动归档完整对话记录
- 仅限管理员使用——需要主组或受信任发送者权限
前置条件
- 已安装并运行 NanoClaw
- 至少配置了一个消息频道
安装
/add-compact 工作原理
/add-compact 技能为你的代理添加一个 /compact 会话命令,用于压缩对话历史。长时间运行的会话会积累大量上下文,逐渐降低代理的表现——这个问题有时被称为”上下文退化”。压缩会对对话进行摘要,让代理保留关键信息而去除冗余内容。
该技能的工作方式是将 /compact 命令转发给 Claude Agent SDK 内置的斜杠命令处理器。这意味着压缩由 SDK 本身完成,而非通过合成系统提示词或自定义摘要实现。SDK 在压缩后返回一个新的会话 ID,代理运行器将其转发给编排器。会话无缝继续——不会发生破坏性重置。
在压缩执行前,现有的 PreCompact 钩子会将完整对话记录归档到该组的 conversations/ 目录中。这意味着你永远不会丢失原始对话——即使代理的工作上下文被压缩,原始记录仍保存在磁盘上。
安全性
/compact 命令仅限受信任的发送者使用。在主组(你的私人自聊)中,所有消息都被视为受信任。在其他群组中,只有设备所有者(is_from_me)可以触发压缩。如果群组中的不受信任用户发送 /compact,他们会收到拒绝消息,不会执行任何压缩操作。
这一点很重要,因为压缩会改变代理所记忆的内容。如果压缩不受限制,共享群组中的粗心或恶意用户可能会清除代理的短期记忆。
消息批次中的行为
如果 /compact 与其他消息在同一个轮询批次中到达,该技能会仔细处理顺序:
- 在
/compact之前到达的消息会先发送给代理并正常处理。 - 这些前置消息处理完毕后再执行压缩。
- 在批次中
/compact之后到达的消息会被保留,在下一个轮询周期中处理。
这确保了在批次中间执行压缩时不会有消息被悄悄丢弃。
此功能不包含的内容
- 没有自动压缩。 这是纯手动操作——你在需要时发送
/compact。基于阈值的自动压缩是另一个独立的功能。 - 没有
/clear命令。 清除是一种具有不同语义的破坏性重置。/compact保留摘要后的上下文;/clear则会完全清空。 - 没有跨组压缩。 每个群组的会话是隔离的。压缩一个群组的会话不会影响其他群组。
使用技巧
- 当你注意到代理的回复变得不太连贯,或者它开始遗忘对话前面的内容时,使用
/compact。 conversations/目录中的归档记录是纯文本文件。你可以随时查看压缩前代理上下文的完整内容。- 如果代理报告未观察到
compact_boundary,压缩可能仍然成功——并非所有 SDK 版本都会发出此事件。检查代理后续的回复来确认它是否在使用刷新后的上下文。