你的 AI Agent 比你以为的更烧 token。模型贵不贵另说,工具结果每次都在悄悄吃掉你的上下文预算。

被忽视的账单

我用 Hermes Agent 跑了两个星期,用的 gpt-5.5。刚开始还好,没觉得有什么不对。

但越用越不对劲。到后来一个会话轻轻松松吃掉几万 token。我不是搞多轮长对话,也不是跑什么复杂推理——就是日常读网页、跑命令、查文档。

直到有一天我拉了一次用量——79,397 tokens,一个会话。第一反应:这花的也太快了。

翻了一下上下文结构,问题在哪就清楚了。

Hermes 的 token 都花在哪了

一个典型的 Agent 会话,上下文由这几部分组成:system prompt、tool 定义、记忆、对话历史,还有 tool result。

前面三个基本是固定的,记性好点的话能缓存。对话历史至少可以控制长度。唯独 tool result 会暴增。 一次 web_extract 抓一篇文章返回 3 万字符,terminal 跑测试输出小则几千多则几万行。每次工具调用,原始输出全量塞回上下文。来回几十次,每次都是全量读写。

看了几组数据后,决定做个插件解决它。

方案:不碰核心,只做插件

Hermes 的插件系统可以用钩子拦截工具调用的前后阶段。不动任何核心代码,注册两个钩子就够了:

  • post_tool_call:工具执行完后记录原始结果——字符数、预估 token、耗时
  • transform_tool_result:结果进模型上下文前截断、预览、存盘

超过阈值的 tool result,只留一头一尾给模型看,原文存本地磁盘。模型真需要全文,自己会 read_file

架构

工具调用
   │
   ▼
post_tool_call ────► 记录原始数据到 SQLite
   │
   ▼
transform_tool_result
   │
   ├─ 超过 12000 字符 ?
   │      ├─ 保留头尾预览(可配置长度)
   │      ├─ 原文存到磁盘
   │      └─ 返回精简 JSON wrapper
   │
   └─ 小结果 ──► 原样通过

压缩后的数据长这样:

{
  "tool_result_optimized": true,
  "original_chars": 54321,
  "original_tokens_estimate": 13580,
  "compression_mode": "preview_store",
  "stored_path": ".../tool-result-optimizer/results/xxx.txt",
  "preview": {
    "head": "开头 3000 字符...",
    "tail": "...末尾 3000 字符"
  }
}

模型拿到的是这个 JSON,不是 5 万字符的原始网页。缺上下文的话它自己读磁盘。

每个工具独立配置

不同工具的输出差别很大,我给每个工具设了不同的阈值:

工具 阈值(字符) 头部保留 尾部保留 为什么
terminal 8000 1000 7000 命令很短,输出和报错更重要
web_extract 12000 4000 4000 文章开头结尾各有价值
skill_view 8000 2500 2500 技能文件的 header/footer
patch 16000 5000 5000 diff 需要更多上下文
其他 12000 3000 3000 默认值

terminal 是最大头。一条 pytest 输出几万行,模型只需要看最后的测试结果。头只留 1000 字符(够看到命令),尾巴留 7000(错误栈和总结通常都在底部)。

效果

跑了一个会话后的数据:

  • 原始 tokens:79,397
  • 压缩后 tokens:20,817
  • 节省:58,580 tokens(73.7%)
  • 其中 4 次调用被压缩,其余小结果原样通过

不是什么精确的科学结论,趋势很清楚:大部分 token 浪费来自少数几次大结果调用。说实话,我一开始也没想到大头在这里。压住这几个,收益就来了。

Token监控面板

在这里插入图片描述

插件的 Dashboard 页签展示实时压缩数据:总览卡片能看到原始/压缩/节省 token 和压缩调用次数;排行诊断告诉你哪些工具最耗 token、哪些调用省得最多;按工具汇总列出每个工具的调用、token 量、节省率、平均耗时;策略展示当前配置;最近调用明细列出每次调用的前后对比。

开源

项目地址:https://github.com/xing006/hermes-tool-result-optimizer

纯插件,不动一行 Hermes 核心。如果你也用 Hermes Agent,直接拖进去就能用。

下一阶段是 LLM 摘要压缩——对结构性强的页面(web 文章、文档)生成精简摘要,但 terminal 输出和代码 diff 不打算走这路。


Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐