基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
AIHT
内容
精选全部 AI 动态热点榜AI 日报收藏
分类
模型行业编程产品技术观点开源
更多
Agent 接入
返回首页开发者导航
AIHT
精选 / 资讯详情
8.0
热点
AI SCORE
编程提效2026-10-31 20:00

Codex 读取被截断,仍继续审查与决策

dev.to · AI#Codex#Agent#上下文管理
Editor brief · 编辑速览

作者检查 Codex CLI 0.165.0 的 33 个会话,发现其中 31 个出现工具输出截断,累计 129 次,涉及审查意见和执行计划。截断通常保留首尾、删除中段,调用不会失败,Agent 仍可能据此继续决策。

文章思维导图
Knowledge map
拖拽缩放
AI deep read

AI 深度解读

Codex 读过文件,不代表它读完了文件。作者检查一支通过 Markdown 文件协作的 LLM agent 团队,发现输出被截断后,agent 仍会依据残缺的评审意见和工作计划继续决策。

问题不只是文档太长,而是多层输出预算叠在一起,模型反复漏设其中一层。作者最后用固定参数和补读规则改善了表现。这篇最值得带走的,是如何识别「工具返回成功,但证据并不完整」。

文件少了一截,为什么任务还能继续

作者团队的部分角色运行在 Codex CLI 0.165.0 上,工具调用采用 code mode。它们读取任务、评审结果、计划和设计文档,再决定下一步。

10 月 24 日,作者检查了围绕同一个目标工作的 33 个 Codex 会话:31 个至少出现过一次工具输出截断,总计 129 次。被截断的内容里,就有评审者的发现和正在执行的工作计划。

截断不会让调用失败。输出会出现类似 Warning: truncated output (original token count: 15382) 的警告,保留开头和结尾,删除中间内容,并留下 …4107 tokens truncated… 这样的标记。

对模型来说,这仍然是一次 cat 的返回结果。若它没有处理警告,就可能拿着文档的头尾作判断,而关键约束恰好留在被删掉的中间。

工具调用成功,只能证明拿到了结果,不能证明拿到了完整证据。

为什么把上限调到 40,000,仍然没解决

作者先调整了配置项 tool_output_token_limit。默认值是 10,000 tokens,而他最大的文档约有 39,000 tokens,于是把上限提高到 40,000。

但还有单次调用的 max_output_tokens,由模型设置。作者在另一个项目 codex-workflows 中,要求先用 wc -c 测量文件大小,再读取文件。这次为了省去频繁读取前的额外步骤,他只解释预算机制,让模型自行选择。

结果,工具输出仍有 11% 被截断,前一周是 13%。一次回放更暴露出异常:模型明明申请了 18,000 或 26,000 tokens,输出却都在约 10,000 tokens 处停止。

原因是第三层限制:code mode 中,命令运行在 JavaScript exec cell 内,整个 cell 返回的内容也有独立预算。没有首行 pragma 时,这层默认仍是 10,000。

作者统计五天日志中的 9,538 次调用,模型只写过 137 次 pragma。按原文所述,这对应已知问题 openai/codex#33402,自 7 月起处于开放状态。

这里有两件事要分清:配置上限、命令预算和 cell 预算都可能限制输出;多个命令放在同一个 cell 里,还会共同消耗 cell 的返回预算。只提高其中一层,另一层仍可能先截断。

固定参数之后,真正有用的是补读规则

作者两次重写说明,第二次明确强调两个预算取较小值。四次回放中,24 次调用仍有 19 次被截断,模型一次 pragma 都没写。

于是,他不再让模型逐次判断预算,而是给出固定指令,同时规定截断后的处理方式:

Start every `exec` call with the first line `// @exec: {"max_output_tokens": 40000}` and give every `exec_command` `max_output_tokens: 40000`. Output past the smaller of the two budgets loses its middle, marked `…N tokens truncated…`, and you miss whatever detail that middle held; without the first line that budget is 10000. Base a judgment only on text you received, reading again any cut part it depends on.

要看的是最后一句:判断只能依据实际收到的文本,依赖被截断部分时必须重新读取。单纯提高预算,不能保证文件一定完整。

随后三次回放中的 16 次调用,都携带了两层预算。仍有三次截断,每次都是批量读取至少八个文件,总量超过 40,000 tokens;但模型都返回去按范围补读了缺失内容。

这组结果支持的是:明确的固定动作,加上缺失内容的恢复规则,比这几轮实验中的自由预算选择更可靠。

我的判断

作者抓到了一个容易漏查的环节:agent 的决策质量,也受工具返回内容是否完整影响。评审意见读丢一段,后面的推理再认真,也可能建立在缺失的前提上。

但这些仍是作者单个团队的日志和少量回放,不能据此认定所有 Codex 工作流都有相同比例的问题。原文没有交代回放时的模型、完整运行配置,也没有提供严格对照实验。固定 40,000 是这套文档规模下的经验值,不能直接当成通用最优参数。

与先执行 wc -c 相比,固定预算更省步骤,却仍挡不住批量读取过量;而字节数也不能直接等同于 token 数。对于较长文档,按章节或行范围读取,再检查截断标记,依然有必要。

能拿来做什么

  • 给依赖文件协作的 AI 编程流程增加一条硬规则:评审结论、验收条件或执行计划一旦截断,先补读相关部分,再继续决策。
  • 使用原文所述 code mode 时,同时检查 exec 的首行 pragma 和 exec_command 的 max_output_tokens,并留意批量读取的总输出量。
  • 先审计已有会话日志,确认截断是否真实发生。作者提供的命令兼顾普通日志和旧的 .jsonl.zst 压缩日志:
find ~/.codex/sessions -name '*.jsonl*' -exec zstd -dcqf {} + \
  | grep -oE '…[0-9]+ tokens truncated…' | wc -l

这里要注意 grep 匹配的是截断标记;统计结果能提示问题规模,具体缺了什么、是否影响判断,还要回看对应调用。

Original source

本文由 AI 通读原文后重新编写,观点部分为站内判断,细节以原文为准,来源 dev.to · AI,原文版权归原作者所有。

阅读原文
上一篇
LLM 测试的隐形账单:调用频次放大成本
下一篇
用完整Playwright失败现场驱动代理修复

资讯速览

dev.to · AI · 2026-10-31 20:00

AI 评分 8.0 / 10

相关标签

#Codex#Agent#上下文管理

继续阅读

  • 把Twist讨论接入代理记忆,检索团队决策
  • LLM 测试的隐形账单:调用频次放大成本
  • 用完整Playwright失败现场驱动代理修复
  • 编程 Agent 压缩上下文后会丢什么
  • Agent 自动上线后,如何控制故障影响