Hermes Agent(NousResearch/hermes-agent)在仓库根目录提供 trajectory_compressor.py,用于在不把操作者刚完成的工作全部丢弃的前提下,把超长 Agent 轨迹压进模型上下文窗口。常时在线的 Mac mini M4 上若跑着网关、cron 与数小时研究循环,Token 压力会表现为工具输出被截断、后续轮次失败,以及整段 transcript 重复发送带来的意外账单。本篇 Type C 说明文梳理上游默认值、头—中—尾三区压缩模型、交互式 /compress 与批处理 CLI 的差异,并给出可在 macOS 上执行的六步跑通清单。
若仍在选型,请先阅读 2026 年 macOS 与 Mac mini M4:Hermes Agent 对比 OpenClaw——压缩策略应在确定会话落点之后再调。上游参考:main 分支 trajectory_compressor.py、Hermes README,以及规划统一内存时的 Apple Mac mini 规格。
披露:下文会简要提及 MacHTML 可选的云 Mac mini 租用,用于常时在线演练。
为何 Mac mini 上会撞 Token 上限
Agent 框架不会像聊天网页那样“只存最后一句”——每次调用模型都会重放结构化消息列表。Telegram 网关加上本地工具链,一天下来 system、human、gpt、tool JSON 叠加到数万 Token 并不罕见。提供商硬截断或静默截断时,操作者常怪模型“变笨”,实质往往是 transcript 超出预算。Mac mini M4 的价值在于可 7×24 跑网关而不休眠,但硬件不会自动扩大上下文——压缩是运维手段,不是芯片功能。
Hermes 用 trajectory_compressor.py 把轨迹目录重写为更短、语义等价的版本:保留首条 system、human、gpt、tool 所承载的人设与安全边界;中间段压缩为约 750 Token 的摘要;尾部保留最近 4 轮 原文。压缩后默认总上限 target_max_tokens=15250。策略含义很明确:中间大胆压,正在操作的尾部绝不截肢。
Token 优化同样关乎成本。经 OpenRouter 推理时,为一句追问重发 4 万 Token 轨迹既费钱又慢。相较每轮换更大上下文模型,在演练用 Mac mini 上先做压缩往往更划算。请与上文选型文对照,避免在计划下周替换的网关上投入大量压缩调参。
Apple 统一内存下,16 GB 可跑 Hermes 网关与轻量工具,但并行子 Agent、本地 Ollama 与未压缩巨日志会争抢同一池子。压缩主要解决模型窗口,也能减轻网关 fan-out 时巨型消息数组的内存占用。部署前请对照 Mac mini 官方规格。
核心压缩模型
上游实现可概括为三区策略,便于事后审计:
- 保护头:保留首条 system、human、gpt、tool,人设与初始工具模式不丢。
- 摘要中段:头尾之间的内容经 OpenRouter 默认模型压成约 summary_target_tokens=750 的叙述。
- 保护尾:保留最近 protect_last_n_turns=4 轮,近期纠错与工具报错仍可被模型直接引用。
默认 target_max_tokens=15250 是压缩后 transcript 的天花板。请按生产模型可用窗口(扣除工具与 completion 余量)调整,而非营销页上的“最大上下文”。摘要默认走 OpenRouter 的 google/gemini-3-flash-preview,兼顾速度与成本;合规场景请换批准模型并记录被压缩的轨迹目录——摘要必有损,应保留决策与阻塞项,而非每一行堆栈。
压缩不能替代 Hermes 策展记忆或 FTS5 会话搜索:前者跨周持久,后者是单线程失控时的紧急刹车。
两种入口:/compress 与批处理 CLI
| 入口 | 适用场景 | 行为 |
|---|---|---|
/compress | TUI 或网关会话中感觉上下文告急 | 与当前轨迹绑定的交互式压缩 |
python trajectory_compressor.py | data/ 历史目录、CI 夹具、迁移前归档 | 可指定采样率、Token 上限、输入路径的批处理 |
勿混用:斜杠命令是操作台;Python 入口用于可复现运维。对仍在写入的 live 目录做批处理可能竞态——先静默会话或复制到临时目录。实验可用 --sample_percent=15 抽样评估质量,上线前改为 100%。
示例与默认参数表
| 参数 | 默认 | 说明 |
|---|---|---|
target_max_tokens | 15250 | 压缩后上限 |
summary_target_tokens | 750 | 中段摘要预算 |
protect_last_n_turns | 4 | 尾部保留轮数 |
| 摘要模型 | google/gemini-3-flash-preview | 可通过环境变量覆盖 |
python trajectory_compressor.py --input=data/my_run
python trajectory_compressor.py --input=data/my_run --sample_percent=15
python trajectory_compressor.py --input=data/my_run --target_max_tokens=16000
live 会话中,在工具链变长但任务未完成时执行 /compress,尤其在下挂子 Agent 或重试失败工具之前。团队规范建议:在里程碑后压缩,而非每次工具成功都压,以免摘要抹掉仍需要的细节。
六步跑通
- 在 Mac mini 上克隆/更新 Hermes,确认根目录存在
trajectory_compressor.py。 - 在用于批处理的 shell 中导出 OpenRouter(或所选)API 密钥。
- 从
data/选取 Token 膨胀明显的轨迹,复制副本以便 diff。 - 默认参数批跑:
python trajectory_compressor.py --input=data/my_run,检查头尾消息完整。 - 按生产模型余量调整上限(如
--target_max_tokens=16000),并以--sample_percent=100复跑后固化配置。 - 启动 Hermes 会话,人为拉长上下文后执行
/compress,确认模型仍理解保护尾中的最新修正。
将选定默认值写入内部 runbook,与网关端口、LaunchAgent 标签并列,避免后人通过生产事故“重新发现”。
故障排查
摘要失败或中段为空
检查 OpenRouter 凭据、模型白名单与限速。换更小输入目录排除畸形 tool JSON。若合规禁止 Gemini Flash,请换批准模型并更新文档,不要静默关闭压缩。
压缩后“忘记”近期修改
临时提高 protect_last_n_turns 或降低 summary_target_tokens 激进程度。确认未在消息仍追加时对 live 目录批处理。对副本 diff 尾部消息。
若需不依赖 Mac 常开的 Telegram 网关,请参阅:便宜 VPS 部署 Hermes Agent Docker 与 Telegram 机器人。
需要限定仓库读取、npm test 与受控自动修复?阅读 2026 Hermes Agent MCP 对接 Claude Opus 4.8:合规本地代码演练场。
常见问题
压缩会取代 Hermes 记忆文件吗?
不会。压缩只缩短单条轨迹;策展记忆与技能库仍是长期存储。二者并用:记忆管数周,压缩管当晚失控会话。
OpenClaw 用户能用此脚本吗?
脚本随 Hermes 分发,OpenClaw transcript 结构不同——请先迁移或导出,并按选型文隔离网关。
摘要成本如何?
与中段轮数及 OpenRouter 单价成正比。实验阶段可用 15% 采样,信任默认值后生产跑 100%。
压缩加网关需要多少内存?
仅批处理压缩时 16 GB 往往够用;同一台机器还跑网关、本地模型与并行子 Agent 时建议 24 GB,见 Apple 规格。