Echo
Back

测一下:你的 agent 烧掉的 token,有多少是浪费

Research noteAgent Doctorkkw-21Updated atGitHub

你在 Codex 和 Claude Code 里烧掉的 token,大半没在干活。✦ Echo Agent Doctor 能算出具体是多少:哪些在推进任务,哪些是噪音,钱浪费在了哪。免费,在你本地跑,数据不出你的电脑。把这行命令贴进 terminal,马上看到你的数字:

Terminal
npm i -g @echomem/mcp@latest && echomem-mcp init

你会看到什么

先看总账:这段时间里,你的 workspace 一共烧了多少 token,多少变成产出,多少是浪费,折成 API cost 是多少钱。

再看病因:浪费主要被哪几类问题吃掉。我们拆过真实 session,反复看到的是这三类。

Agent Doctor workspace report example showing token waste, repeated reads, and repo-level session summary.
Erik 的样例 workspace。绿色是 Open Codex,红色是 Claude Code,用来展示报告里不同 agent 的时间和 token 分布。
problem #1

截图层层携带

模型会保留所有截图:不止你贴的,它自己在开发过程中生成的 screenshot 也一并留着。绝大多数截图两个 turn 之后就失去了价值,但它们会被一路背到 session 结束。一张约 4,000 tokens;我们见过一张截图在窗口里躺了 49 个 turn,5 次 compaction 都没清掉,一次没被引用。

problem #2

同一个文件的多个版本叠在窗口里

每次 patch 之后,旧版本不会消失。模型接下来干活,得在好几份互相矛盾的代码里分辨哪份是现在的。这些过期版本全是噪音。这一类是我们样本里的头号浪费源:一个 session 沉了 2.31M tokens。

problem #3

明明读过,还要再搜

窗口污染到一定程度,模型开始找不到自己已经有的东西,于是重新 search、重新 read;搜出来的不相关文件又留在窗口里,进一步稀释下一步的 intention。噪音制造更多噪音。

这三类,通常就占了 context noise 的绝大部分。你的窗口里多半也有。我们怎么看?

本地扫描

Codex 会把对话原样存进本地。你的每条指令、每次 function_call、每笔 token_count,都在本地数据库里。你可以自己查这两个 path:

  • ~/.codex/sessions

    JSONL 事件流。这里记着你的指令、工具调用、消息流和每个 session 的执行记录。

  • ~/.codex/logs_2.sqlite

    原始请求账本。这里存着每次实际发给模型的完整 payload,token 数就是计费的数字。

Claude Code 在 ~/.claude/projects 里做同样的事。这些不是缓存,是原始账本;它归你所有,只是你从没打开过。

逐帧拆 payload

agent 每思考一步,就有一次 model call;每次 call 发出去的 payload,就是一帧。一个 70-turn 的 session,就是几百帧。

Agent Doctor 把每一帧摊开,给里面的每个 item 建档:它是什么(文件读 / 搜索 / 截图 / 命令输出),哪个 turn 进来的,占多少 token,后来有没有被引用、有没有被新版本覆盖。

拿真实的一帧看,turn 74:

  • payload 总量:228,649 tokens
  • 新内容(你这轮的指令 + 本轮新读的材料):9,129 tokens,不到 4%
  • 重放的历史:219,520 tokens——旧文件读、旧命令输出、旧搜索结果、四个压缩包

再把这份历史逐条归类:

  • 旧截图:17.2%
  • 旧命令输出:24.3%
  • 过期的文件读:15.1%
  • 还活着的文件读:只有 6.4%

建档到这个粒度,每个 token 的来历就都清楚了。但来历清楚不等于判决:同样一条文件读,可能是死重,也可能正是这轮 commit 的依据。signal 和 noise,怎么分?

signal = 所有对本轮 commit 有贡献的 token

标尺是你 git 里真实落地的 diff。Agent Doctor 会看一个 item 后面有没有进入有效工作链路:它有没有支撑文件修改、有没有解释最终 diff、有没有被后续步骤引用。如果 read → edit → commit 连得上,这是健康探索,算 signal。

反过来,重新拿你早就有、而且没变过的东西,算 noise。旧截图、旧命令输出、过期文件版本、不再相关的搜索结果,只要没有贡献到本轮 commit,就不会被当成有效上下文。

每一笔 noise 落在具体的 item 上,一个 token 只归一次案,归不上的老实留白。报告里每一笔都能点到原文。

测试结果比我们预期更夸张

所有 token 里,99.7% 花在输入上,输出只占 0.3%。

总输入10.9Mtokens
有效 token3.02M真正为 commit 干活
SNR27.7%最差 turn: 10%

这是一个 70-turn 的网页修改 session。它浪费掉了 7.88 million tokens,根因正是上面那三类。

这些 token 全部计费,全部占模型的注意力,还消耗时间去阅读;对产出的贡献是零,甚至是负的。你的 agent 如果变慢、变贵、变笨,大部分是在背这些噪音。

该你了

免费,本地,一行命令:

Terminal
npm i -g @echomem/mcp@latest && echomem-mcp init

测完把报告分享给你的朋友,一起把 SNR 提上去。🚀

数据来源:context-golden-standard 项目对真实 Codex session 的逐 turn 拆解。事件计数来自 ~/.codex/sessions JSONL;逐请求 token 数来自 ~/.codex/logs_2.sqliteresponse.create 请求体;窗口构成来自 retained-window 重建与 SESSION_WASTE_DASHBOARD 数据集。