深度复盘:Codex 到底是怎么"读懂"你的需求的?10 场实测找到了它的天花板

cover

你输入一句话:”帮我给用户列表加分页,每页 20 条,底部显示页码。”

3 分钟后,Codex 交出了代码。分页逻辑、页码组件、API 参数、边界处理——全部到位。

你又输入一句话:”重构这个支付模块,把回调地狱改成 async/await,同时保证和现有的错误处理逻辑兼容。”

10 分钟后,Codex 交出了代码。能跑。但你发现它把一个关键的错误重试逻辑给改没了。

同一个工具,为什么有时候像读心术,有时候又像在瞎猜?

要回答这个问题,我们需要搞清楚两件事:Codex 到底是怎么”理解”你的意图的?它的能力边界在哪里?

我花了两天时间,设计了 10 场不同难度的实测,从最简单的代码生成到最复杂的架构决策,逐一测试 Codex 的表现。结果很有意思——它的强项比你想的更强,但它的弱点也比你想的更明确。

Codex 是怎么”读懂”你的话的:Agent Loop 拆解

在聊实测之前,先搞清楚 Codex 的底层机制。这不是黑盒——ByteByteGo 根据 OpenAI 工程团队公开的技术细节,做了一次完整的架构拆解。

Codex 的核心是一个叫 Agent Loop 的循环机制:

1
2
3
4
5
6
7
8
用户输入 → 构建 Prompt → 模型推理 → 输出响应

是工具调用?
↓ 是 ↓ 否
执行工具 返回结果给用户
收集输出

追加到 Prompt → 再次推理 → ...

关键在于:模型的响应不一定是最终答案。很多时候,它返回的是一个工具调用——“运行这个 shell 命令,告诉我结果。” Agent 执行完工具调用,把输出追加到 prompt,再次推理。这个循环可能重复几十次。

一个简单的”修复 auth 模块的 Bug”,可能触发这样的链条:读取几个文件 → 运行现有测试看哪些失败 → 修改代码 → 再跑测试 → 发现 lint 错误 → 修复 lint → 再跑测试 → 生成 commit。

模型做推理,Agent 做执行。 这个分工是 Codex 能力的基础。

五层 Prompt:Codex 的”上下文记忆”

你输入的那句话,只是 Codex 看到的冰山一角。在你的消息之上,系统叠了五层上下文:

层级 内容 作用
第 1 层 系统消息 + 模型指令 定义 Agent 的基本行为
第 2 层 工具定义 告诉模型有哪些工具可用
第 3 层 沙箱权限 + 配置 安全边界和运行环境
第 4 层 AGENTS.md 文件 项目级的规范和指引
第 5 层 你的消息 + 历史对话 你的需求和之前的交互

每一层都带有优先级标记(system / developer / user),模型根据优先级决定哪些指令更重要。

这就是为什么 AGENTS.md 这么关键。 它在第 4 层,优先级高于你的消息。你在 AGENTS.md 里写”所有 API 必须用 zod 校验参数”,Codex 就会把这个约束应用到每一次代码生成上——哪怕你在 prompt 里没提。

上下文窗口:越聊越蠢的秘密

每一轮对话,Codex 都会把完整的历史(包括所有工具调用和输出)发送给模型。这意味着数据传输量是二次增长的。

OpenAI 用 Prompt 缓存来缓解这个问题——因为旧内容总是新 prompt 的前缀,可以复用之前的推理计算。但缓存很脆弱。OpenAI 自己就踩过一个坑:加了 MCP 工具支持后,工具列表的顺序在不同请求之间不一致,这一个小问题就足以让缓存全部失效。

当对话最终超过上下文窗口限制时,Codex 会执行上下文压缩(Compaction)——用一个更小的摘要替代完整历史。

这就是为什么长对话到后面,Codex 会”忘记”前面的改动。 不是它变蠢了,是上下文被压缩了,信息丢失了。OpenAI 官方的建议是:上下文用到 80%,就开新线程。

10 场实测:从惊艳到翻车

了解了机制,现在来看实测。我设计了 10 个场景,覆盖从简单到复杂的不同维度。使用 GPT-5.3 Codex 模型,桌面 App 版本。

测试 1:简单函数生成

Prompt: “写一个 TypeScript 函数,输入一个日期字符串,返回距离今天的天数。处理无效输入。”

结果: 完美。函数简洁,类型安全,包含了 isNaN 检查和错误抛出。还自动加了 JSDoc 注释。

评分: 10/10

测试 2:带上下文的多文件修改

Prompt: “给现有的用户列表组件加分页功能。每页 20 条,底部显示页码,支持跳转。同步修改 API 层的请求参数。”

结果: 出色。它自己找到了组件文件和 API 文件,正确地在两个文件中做了修改。分页逻辑用了 Math.ceil(total / pageSize) 计算总页数,边界条件(第一页、最后一页)处理到位。

评分: 9/10(页码组件的样式稍显粗糙,但功能完整)

测试 3:Bug 定位和修复

Prompt: “用户反馈登录后偶尔会被踢出来。帮我排查 auth 模块可能的问题。”

结果: 它主动读取了 auth 相关的 5 个文件,跑了现有测试,然后指出了两个潜在问题:token 刷新的竞态条件,以及 session 存储的过期时间设置。给出了修复方案和测试用例。

评分: 9/10(定位准确,但修复方案偏保守,没有考虑分布式场景)

测试 4:代码审查

Prompt: “审查这个 PR 的代码质量和安全性。”(一个包含用户输入处理的后端接口)

结果: 这是 Codex 的强项。它指出了 3 个问题:SQL 拼接风险(建议参数化查询)、缺少请求频率限制、错误信息泄露了内部表名。每个问题都附带了修复建议和代码示例。

社区共识和独立测试都证实了这一点:Codex 的代码审查能力强于代码生成能力。 Morphllm 的测评总结是:”开发者对 Codex 的代码审查评价,高于对它代码生成的评价。它能捕获逻辑错误、竞态条件和边界情况。”

评分: 10/10

测试 5:模糊需求的意图推断

Prompt: “这个页面感觉不太对,帮我优化一下。”

结果: 有意思。Codex 没有直接动手,而是先列出了它观察到的 5 个问题:字体大小不一致、按钮间距不均匀、暗色模式下对比度不够、移动端有溢出、加载状态缺失。然后逐一修复。

但它的”优化”全是视觉层面的。如果你想表达的其实是”性能不太对”或”交互逻辑不太对”,它完全理解错了。

评分: 7/10(执行出色,但意图推断取决于上下文是否充分)

独立基准测试也验证了这一点。Morphllm 的模型对比显示:Opus 4.6 在模糊 prompt 的意图理解上优于 Codex。 社区共识是——“Claude 更擅长猜你想要什么,Codex 更擅长快速执行你明确说出来的东西。”

测试 6:跨模块重构

Prompt: “把整个项目的状态管理从 Redux 迁移到 Zustand。保证所有现有功能不受影响。”

结果: 翻车了。它正确地创建了 Zustand store,替换了 Provider,但在处理异步 action 时遗漏了两个 thunk 的错误处理逻辑。更严重的是,它把一个 Redux middleware(用于日志记录)直接删掉了,因为 Zustand 没有 middleware 的概念——但那个日志功能是业务需要的。

评分: 5/10(核心迁移完成,但遗漏了关键的业务逻辑)

Dev.to 上的架构对比文章也提到了类似的观察:”Codex 生成的代码优化了简洁性——对有经验的开发者很好,但在入职新人或长期维护时就不够了。”

测试 7:复杂业务逻辑

Prompt: “实现一个优惠券系统。支持满减、折扣、叠加规则。同一个订单最多用两张券,但满减和折扣不能同时用。”

结果: 核心逻辑实现正确。满减和折扣的互斥校验到位。但”叠加规则”的边界情况有问题——当两张满减券的门槛不同时,它先校验了金额较高的那张,导致低门槛的券被误判为不可用。

评分: 6/10(框架正确,但复杂业务规则的边界处理有漏洞)

测试 8:安全相关代码

Prompt: “实现用户认证中间件,支持 JWT 验证、token 刷新、权限检查。”

结果: 基本框架正确,JWT 验证、角色检查都有。但——token 过期后的处理逻辑是”放行请求”而不是”拒绝请求”。这是一个严重的安全漏洞。

Help Net Security 2026 年 3 月的安全研究验证了这类问题:研究团队让 Codex、Claude、Gemini 分别从零构建两个应用,逐 PR 扫描安全漏洞。结果 Codex 在最终产出中漏洞最少(Web App 8 个,Game App 6 个),但仍然存在 JWT 吊销缺陷和速率限制遗漏。

评分: 4/10(安全代码的默认行为必须是”拒绝”,这个错误不可接受)

测试 9:架构设计

Prompt: “设计一个消息队列系统,支持延迟消息、死信队列、消费者组。给出架构方案和核心代码。”

结果: 方案给得中规中矩。用了 Redis 做延迟队列,Consumer Group 用了 Redis Streams。但整个设计没有考虑持久化、容灾、消息顺序性等生产级问题。更像是一个教程级的 demo,不是生产级的方案。

Morphllm 的测评总结很精准:”Codex 快但浅。它处理直接的任务很好,但在微妙的 Bug、复杂重构和架构决策上挣扎。”

评分: 5/10(能当 demo 用,不能当架构方案用)

测试 10:长对话 + 多轮迭代

Prompt: 从零开始,通过 15 轮对话迭代一个完整的 CRUD 模块(用户管理),包含增删改查、搜索、批量操作、权限控制。

结果: 前 8 轮表现出色,每一轮都在前一轮基础上正确迭代。第 9 轮开始出现问题——它”忘记”了第 3 轮加的批量删除确认弹窗。第 12 轮时,一个之前正确的权限检查被覆盖掉了。第 15 轮时,代码质量明显下降,变量命名不一致,出现了冗余代码。

ByteByteGo 的分析解释了原因:”长对话退化是因为上下文窗口限制和压缩。这解释了为什么对新任务开启新线程通常能得到更好的结果。”

评分: 6/10(前 8 轮 9 分,后 7 轮 4 分。上下文压缩是罪魁祸首)

10 场实测汇总

测试 场景 评分 关键发现
1 简单函数 10/10 完美,秒级完成
2 多文件修改 9/10 跨文件协调能力强
3 Bug 定位 9/10 主动探索能力出色
4 代码审查 10/10 最强项,优于代码生成
5 模糊需求 7/10 依赖上下文,不如 Claude
6 跨模块重构 5/10 遗漏业务逻辑
7 复杂业务规则 6/10 边界条件处理不足
8 安全代码 4/10 默认行为有安全隐患
9 架构设计 5/10 demo 级,非生产级
10 长对话迭代 6/10 前半段优秀,后半段退化

平均分:7.1/10

Codex 的天花板在哪里

10 场实测下来,Codex 的能力边界非常清晰:

强项(8 分以上)

  • 明确、范围有限的任务:函数生成、Bug 修复、单文件/少量文件修改
  • 代码审查:安全扫描、逻辑审查、边界检查——甚至强于它的代码生成
  • 速度:240+ tokens/秒,Terminal-Bench 77.3%,吞吐量碾压竞品

弱项(6 分以下)

  • 复杂架构决策:它能给你”能跑的代码”,但给不了”生产级的方案”
  • 安全代码的默认行为:在”允许 vs 拒绝”的选择上,它倾向于”允许”——这在安全场景是致命的
  • 长对话一致性:超过 8-10 轮后,上下文压缩导致信息丢失
  • 模糊意图理解:需要你把需求说得足够具体,它不擅长”猜”

一句话总结

社区里有一个非常精准的评价:**”Codex 快但浅,Claude 慢但深。”**

Codex 是一个极其高效的执行者。你给它清晰的指令,它飞速交付。但当任务需要深度推理、全局思考、或者在模糊信息中做判断时,它的表现会明显下降。

怎么用好它:3 条实操建议

基于实测结果,给出 3 条建议:

第一,把大任务拆成小任务。 Codex 在单次任务上表现最好。不要在一个 prompt 里塞一个完整功能。拆成 3-5 个步骤,每步验证,效果远好于一次性交付。

第二,安全和架构不能全交给它。 这两个领域需要人类判断。用 Codex 生成初版代码没问题,但安全逻辑和架构设计必须人工审查。特别是认证、授权、支付相关的代码——逐行审查,不要例外。

第三,超过 8 轮就开新线程。 上下文压缩是客观存在的技术限制。当对话变长时,主动开新线程,把当前代码状态和需求重新发给它。损失几分钟,但能避免后面的信息丢失。

写在最后

Codex 不是魔法。它是一个有明确能力边界的工程工具。

它的”读心术”来自五层上下文叠加和 Agent Loop 的迭代推理。它的”翻车”来自上下文压缩、推理深度有限、以及对模糊意图的理解不足。

了解它的天花板,比盲目信任它更重要。

你知道它什么时候靠谱——简单任务、代码审查、明确指令。你知道它什么时候不靠谱——复杂架构、安全逻辑、长对话。然后,你把它放在靠谱的位置上,自己守住不靠谱的位置。

这才是 2026 年用好 AI 编程工具的正确姿势:不是用它取代你的判断,而是用它放大你的产出。


你用 Codex 的时候,有没有遇到过它”突然变蠢”的情况?它在什么场景下让你惊艳,又在什么场景下让你失望?你会怎么划分”交给 AI”和”自己做”的边界?评论区聊聊你的实战体验——你的翻车经历,可能正好帮别人避了一个坑。