核心判断:token efficiency 是上下文治理问题
这篇文章的主张可以压缩成一句话:不要把 LLM 当成无限上下文的垃圾桶,要把它放在一个有输入过滤、摘要索引、输出断路器和外部记忆的系统里。
不是省略证据
目标不是让 agent 少看材料,而是先把材料变成可定位的摘要,再按需回看原文切片。
不是单轮优化
一次大输出会进入后续上下文,被多轮重复携带;真正的浪费是复利式的。
不是模型问题
同一个模型,在不同上下文纪律下,成本、速度和稳定性可能差一个数量级。
作者的 245M 到 28M 数字不应被理解成严格 benchmark,而应被理解成一个高信号案例:当项目包含大日志、大 JSON、长会话、多次工具输出时,上下文治理能带来乘法级收益。
问题背景:agent 为什么会“烧 token”
coding agent 的 token 消耗不是简单等于“这轮 prompt 有多长”。更接近真实的结构是:每一轮输入上下文、工具输出和模型回复都会变成后续轮次的历史负担。一次无节制地读取大日志、全量 diff、完整测试输出,可能在接下来十几轮里反复作为输入被模型重新处理。
因此,文章里“把 10k tokens 的噪声换成 200–500 tokens 的 distilled insight”不是只省 9500 tokens;如果这段噪声会被后续 20 轮携带,节省的是一串复利成本。更关键的是,模型看到的上下文更干净,判断也更稳定。
机制拆解:七个动作背后的系统层含义
原文提出的七步可以重排成一个 agent context pipeline:先把数据压缩成索引,再让模型定位读取;先把命令输出限流,再保留完整结果供回查;先把项目状态写入外部记忆,再让长会话周期性回收上下文。
1. 原始数据先预压缩:程序负责筛选,模型负责判断
作者不让 Codex 每轮读取 40MB trade log、巨大 market dump 或整个仓库,而是生成一次性 helper scripts:日志按时间、symbol、keyword 筛出 Top N 异常;数据摘要只保留列、行数、样本和关键统计;仓库地图只列入口、配置和核心流程。
确定性脚本擅长过滤、计数、排序和定位;LLM 擅长解释这些摘要背后的系统原因。把两者反过来用,让 LLM 在巨大原文里做检索,就会同时浪费 token 和降低可靠性。
2. 命令输出限流:给 agent 加“上下文断路器”
原文指出 git status、ls -la、cat file、直接跑脚本都可能输出爆炸。更稳妥的做法是:未知大小输出先 byte-cap;完整结果可以落到文件或日志里,但进入模型上下文的只能是摘要、片段或命中行。
未知大小输出:只读取前几 KB 或前几十行
完整结果:保留在外部,再按关键词、行号、时间段回看
错误定位:先建立 error index,再读取相关范围
这不是为了“看得少”,而是为了避免 generated 文件、fixture、warning、重复日志把真正的 error 淹没。
3. Living handoff:把会话历史变成外部工作记忆
作者建议维护小于 1k tokens 的 HANDOFF.md,记录当前目标、成功指标、关键文件、最近决策、已运行命令、已知问题和下一步。它的价值在于减少“重新发现”:不用每次重新扫目录、重新找入口、重新理解为什么这么改。
| Handoff 字段 | 真正用途 | 不应该写什么 |
|---|---|---|
| Goal / Success Criteria | 让下一轮 agent 知道什么算完成 | 泛泛的“继续优化项目” |
| Key Files | 把注意力锚定到少数关键入口和验证点 | 全仓库文件列表 |
| Decisions | 保留已经做过的架构选择及原因 | 没有结论的讨论过程 |
| Commands Run | 避免重复跑昂贵命令,并保留验证状态 | 完整 stdout / stderr 粘贴 |
| Do Not Re-read | 明确已排除的路径、旧日志、无关分支 | 临时情绪或模糊偏好 |
4. Do Not 规则:用边界降低探索噪声
把“跳过 vendor、虚拟环境、构建产物、缓存、归档日志、generated 文件”等规则写入项目级 agent 指令,可以防止每个新会话重复犯同样的探索错误。但规则要短、稳定、高价值;如果把临时偏好全部写进去,规则本身也会变成上下文负担。
5. Targeted asks:从“读一下”改成“定位这一段”
原文对比了坏 prompt 和好 prompt。坏 prompt 是“读这个文件并解释”;好 prompt 是“定位 risk engine 的 position sizing 逻辑,只展示该函数和上下三行,解释一个 edge case”。这会强迫 agent 先搜索、再切片、最后解释,而不是把整份文件吞进去。
泛读型请求
容易触发全文件读取、长摘要、重复背景解释,看似全面,实际上信噪比低。
定位型请求
先限定对象、范围、输出形态和解释深度,把上下文窗口用于真正的问题。
6. 周期性 compact:清理过期假设和失败路径
长会话中,失败路径、旧假设、已废弃方案会继续留在历史里。每 4–5 轮把当前进展压缩成 handoff,本质上是在做会话垃圾回收:保留已验证事实、关键决策、未解决问题和下一步,删除重复解释和错误路径。
7. 默认低 verbosity:输出本身也会污染后续输入
少输出不只是少花 completion tokens。模型本轮的长篇解释会成为下一轮输入的一部分。重复计划、重述需求、贴全量源码、每轮长篇铺垫,都会在后续上下文里持续占位。低 verbosity 的目标是让回答变成“可执行差异 + 必要理由”,而不是把工作日志写成散文。
原文证据:七步法如何形成一套闭环
Tim Jayas 的文章给出的证据主要是个人使用前后对比和工作流清单。它不是受控实验,但它把高 token 消耗的来源描述得很具体:大日志、巨大 JSON、全仓库读取、未限制命令输出、agent 反复重新发现项目、泛化 prompt、长会话未压缩、默认冗长输出。
| 原文步骤 | 表层做法 | 深层价值 | 主要风险 |
|---|---|---|---|
| 预压缩 raw data | 先生成日志、数据、仓库摘要脚本 | 把检索和统计交给程序,把解释交给模型 | 摘要脚本可能漏掉低频但关键异常 |
| 限制命令输出 | 使用行数、字节数和 limit 约束 | 防止工具输出成为上下文污染源 | 只看头尾可能漏掉中部错误 |
| 维护 handoff | 用短文档保存目标、文件、决策和下一步 | 减少跨会话重复发现 | 写成流水账会失去压缩价值 |
| 写 Do Not 规则 | 跳过 vendor、cache、generated、归档日志 | 让探索边界稳定化 | 规则过硬可能阻止必要取证 |
| 要求 snippets | 只展示目标函数、diff 或一页 repo map | 把 prompt 从泛读变成定位 | 范围限定错会导致上下文不足 |
| 周期 compact | 删掉重复、失败路径、过期上下文 | 降低历史污染和输入成本 | 过度压缩可能丢失关键决策依据 |
| 降低 verbosity | 少铺垫、少重复计划、少全文粘贴 | 减少本轮输出对后续轮次的负担 | 过短可能缺少可验收证据 |
这个数字应当作为经验信号,而不是可泛化比例。它高度依赖项目形态:交易日志、数据分析、长会话和重复工具输出越多,收益越大;一次性小修小改则未必需要完整的 helper-script 流程。
批判性校正:不要把“省 token”误读成“少看证据”
这篇文章方向正确,但如果照字面执行,容易走向另一个极端:为了压缩而过早摘要,为了限流而错过关键错误,为了 Do Not 而跳过真正的故障源。更稳的原则是“最小充分上下文”,不是“最小上下文”。
误读一:永远不读 raw data
正确做法是 summary first, raw slice second。先摘要,再按 timestamp、line range、id 或 keyword 回看原文切片。
误读二:head / tail 足够
很多构建失败的真正原因在中部。更好方式是先找 error index,再读命中点附近范围。
误读三:helper script 必然可靠
脚本可能解析错 timestamp、过滤掉异常、把 missing 和 null 混为一类;摘要也要带总量、样本和丢弃比例。
误读四:AGENTS.md 越长越好
规则本身也进入上下文。高价值规则应该短、稳定、少例外,不应承载临时流水账。
为了省 token 而跳过关键源码、真实错误、测试输出和 diff 审计。这样短期消耗下降,长期会因为误修、返工和隐藏失败烧掉更多 token。
更好的落地版:把它升级成 agent context engineering
如果把原文方法沉淀成长期规范,我会改写成五条可执行原则。
先索引,再读取
先列候选文件、入口、调用链和错误位置;再读取必要片段。避免从“读完整 repo”开始。
先摘要,再切片
日志、JSON、CSV、trace 先生成可审计摘要;摘要必须能指回原始位置。
未知输出默认限流
测试、构建、diff、日志命令先限制输出;完整结果保留在外部,必要时按范围回看。
handoff 只保存事实
保留目标、成功标准、关键文件、决策、验证结果、风险和下一步;删除情绪和废弃路径。
压缩后仍要验证
省 token 不能替代读关键代码、跑测试、核对 diff、确认边界条件。
输出为下一轮负责
回答越长,后续输入越重。最终输出应紧贴验收:改了什么、证据是什么、还剩什么风险。
一个更可靠的工作流模板
1. 先明确目标和验收标准
2. 用搜索建立候选文件 / 日志 / 数据索引
3. 对大材料生成摘要和定位键
4. 只读取最相关的原文切片
5. 小步修改并运行最小验证
6. 将结果压缩到 handoff / progress
7. 完成前对照验收标准审计
这套模板的关键是“证据链不断裂”:摘要不是结论,摘要只是索引;压缩不是删除事实,压缩是保留能继续工作的事实。
对 Codex / pi 类工作流的直接启发
对使用终端型 coding agent 的长期项目来说,这篇文章尤其有现实意义。因为这类 agent 的高价值工作往往不是一次性问答,而是持续读仓库、改代码、跑命令、看日志、修问题。上下文治理会直接影响完成质量。
| 场景 | 推荐策略 | 为什么 |
|---|---|---|
| 大仓库定位问题 | 先用 repo map / 符号搜索 / 文件候选列表 | 把探索成本从全量读取降到少数高相关文件 |
| 长日志排障 | 先聚合 error index、时间范围、Top N 异常 | 避免把重复日志和无关 warning 带入上下文 |
| 跨会话项目 | 维护短小 progress / handoff | 减少重新发现,保留验证状态和未决风险 |
| 测试输出很长 | 先看失败摘要,再追第一处真实 error | 防止完整测试噪声淹没根因 |
| 用户要求深度分析 | 输出结构化 insight,而非抓取过程 | 用户需要的是判断、机制、边界和可迁移方法 |
这不是把模型换成便宜版本,也不是压低 reasoning budget;它是在不牺牲任务质量的前提下,减少无关上下文、重复发现和历史污染。
术语解释:读懂这篇文章需要的几个概念
证据边界:这篇文章没有证明什么
这篇文章是经验型工作流总结,不是严格实验。它没有提供可复现实验设置、项目规模、任务类型、模型版本、输入输出 token 明细,也没有展示同一任务在优化前后的质量对照。因此不能把 8–10 倍收益机械套用到所有项目。
缺少受控变量
token 降低可能来自任务差异、会话长度差异、项目阶段差异,而不只来自流程变化。
缺少质量指标
“same speed”不等于“same correctness”。仍需看 bug 修复率、测试通过率、返工率和隐藏风险。
场景依赖强
大日志和长会话收益巨大;小型单文件修改则可能不值得先搭完整压缩层。
但这些边界不削弱它的核心洞察:当 agent 的主要工作是反复处理仓库、日志、数据和长对话时,管理上下文就是管理生产力。
最终启发:把 agent 当系统,而不是聊天框
这篇文章真正的启发是:高效使用 Codex 不是写一个神奇 prompt,而是建立一个围绕模型的工作系统。这个系统有输入过滤层、检索层、摘要层、外部记忆层、输出限流层、会话回收层和验收层。
最优状态不是“最少 tokens”,而是“用最少的、可审计的、足够完成任务的上下文,稳定产出正确结果”。一旦这样理解,省 token 就不再是节流技巧,而是工程质量的一部分。
换句话说,agent context engineering 的目标不是让模型“知道一切”,而是让模型在每一轮都只知道最该知道的东西,并且能在需要时可靠地回到证据源。
证据边界与资料索引
本文主要依据 Tim Jayas 发布的 X Article 及其公开帖文内容进行解读,并结合 coding agent 长会话、日志分析、仓库检索和上下文压缩的一般工程经验展开。平台页面内容、互动数和展示形态可能随时间变化。
- Tim Jayas X status:https://x.com/TimJayas/status/2064049787629129749
- Tim Jayas X Article:https://x.com/i/article/2064029727225221122
- 文章主题:How I Cut Codex Tokens from 245M to 28M Per Day For Free (Same Speed)
- 资料边界:本文没有独立验证作者的 token 统计后台,也没有复现实验;文中数字用于理解工作流收益的量级信号,而非普适 benchmark。