本站整理
控制日志和命令输出:不要把十万行结果塞进上下文
发布于
正在加载查看数据…
问题通常出在哪里
测试、构建、搜索和日志查询都可能输出远超当前决策需要的内容。代理真正需要的往往只是:
- 失败测试名
- 第一段错误堆栈
- 命中的文件与行号
- 汇总数量
- 失败命令和退出码
把完整输出直接塞进会话,不但扩大上下文,也会稀释关键信号。
优先做结构化缩小
搜索
rg -n "refreshToken|refresh_token" src tests
优先限定目录和关键词,不先打印整个仓库。
测试
先运行目标测试:
pnpm test auth-refresh --runInBand
失败后再扩大范围,不要每次小改动都跑全套并回传全部日志。
日志
完整日志写文件,聊天只提供摘要和路径:
some-command > /tmp/codex-task.log 2>&1
printf "exit=%s\n" "$?"
tail -n 120 /tmp/codex-task.log
大 JSON
用 jq 只取必要字段:
jq '{status, error, requestId, items: (.items | length)}' response.json
head -c 不是万能答案
简单截断可以防止灾难性大输出:
COMMAND 2>&1 | head -c 8000
但它也可能切掉最后的根因和汇总。更稳妥的顺序是:
- 先选择正确命令和范围
- 让工具输出摘要
- 保存原始输出到文件
- 需要时读取相关区段
- 最后才做字节截断
RTK 与 Distill
这类工具会将常见 CLI 输出压缩成更适合代理阅读的结果。它们对测试、Git、构建等噪声较大的命令可能有价值,但项目方宣称的节省比例主要针对命令输出,不应直接写成总 Codex 配额节省比例。
使用前检查:
- 是否保留退出码
- 是否能回看原始输出
- 是否会漏掉 warning 或堆栈
- 是否支持你的命令
- 工具自身是否引入额外模型调用
建议的 AGENTS.md 规则
- Before running a potentially verbose command, narrow its scope.
- Save full logs to a file and return only the exit code, failing items, and relevant excerpts.
- Do not truncate away the only copy of an error; keep the raw file path for follow-up.
- Run targeted checks after small edits; run the full suite only at the final verification stage.
衡量方法
同一测试任务记录:
- 原始输出字符/token 估算
- 压缩后输出
- 是否一次定位成功
- 是否因信息缺失再次读取
- 总完成时间和配额变化
只有在不增加返工的情况下,输出缩小才是真正的节省。
这篇内容对你有帮助吗?
你的评价会帮助更多人找到值得读的内容。