AI 前沿

2026 Mac mini M4:Hermes Agent trajectory_compressor 记忆与 Token 优化指南

MacHTML Lab2026.05.28 约 18 分钟
Hermes Agent trajectory_compressor 记忆 Token 优化 Mac mini M4 2026

Hermes AgentNousResearch/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.pyHermes 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

入口适用场景行为
/compressTUI 或网关会话中感觉上下文告急与当前轨迹绑定的交互式压缩
python trajectory_compressor.pydata/ 历史目录、CI 夹具、迁移前归档可指定采样率、Token 上限、输入路径的批处理

勿混用:斜杠命令是操作台;Python 入口用于可复现运维。对仍在写入的 live 目录做批处理可能竞态——先静默会话或复制到临时目录。实验可用 --sample_percent=15 抽样评估质量,上线前改为 100%。

示例与默认参数表

参数默认说明
target_max_tokens15250压缩后上限
summary_target_tokens750中段摘要预算
protect_last_n_turns4尾部保留轮数
摘要模型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 或重试失败工具之前。团队规范建议:在里程碑后压缩,而非每次工具成功都压,以免摘要抹掉仍需要的细节。

六步跑通

  1. 在 Mac mini 上克隆/更新 Hermes,确认根目录存在 trajectory_compressor.py
  2. 在用于批处理的 shell 中导出 OpenRouter(或所选)API 密钥。
  3. data/ 选取 Token 膨胀明显的轨迹,复制副本以便 diff。
  4. 默认参数批跑:python trajectory_compressor.py --input=data/my_run,检查头尾消息完整。
  5. 按生产模型余量调整上限(如 --target_max_tokens=16000),并以 --sample_percent=100 复跑后固化配置。
  6. 启动 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 规格

在云端 Mac mini 上演练 Hermes 压缩

租用常时在线的 Mac mini M4,批量压缩长轨迹、验证 /compress,并在上线前把网关会话控制在 Token 预算内。

Mac 上的 Agent 环境
常时在线演练