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

你输入一句话:”帮我给用户列表加分页,每页 20 条,底部显示页码。”
3 分钟后,Codex 交出了代码。分页逻辑、页码组件、API 参数、边界处理——全部到位。
你又输入一句话:”重构这个支付模块,把回调地狱改成 async/await,同时保证和现有的错误处理逻辑兼容。”
10 分钟后,Codex 交出了代码。能跑。但你发现它把一个关键的错误重试逻辑给改没了。
同一个工具,为什么有时候像读心术,有时候又像在瞎猜?
要回答这个问题,我们需要搞清楚两件事:Codex 到底是怎么”理解”你的意图的?它的能力边界在哪里?
我花了两天时间,设计了 10 场不同难度的实测,从最简单的代码生成到最复杂的架构决策,逐一测试 Codex 的表现。结果很有意思——它的强项比你想的更强,但它的弱点也比你想的更明确。
Codex 是怎么”读懂”你的话的:Agent Loop 拆解
在聊实测之前,先搞清楚 Codex 的底层机制。这不是黑盒——ByteByteGo 根据 OpenAI 工程团队公开的技术细节,做了一次完整的架构拆解。
Codex 的核心是一个叫 Agent Loop 的循环机制:
1 | 用户输入 → 构建 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”和”自己做”的边界?评论区聊聊你的实战体验——你的翻车经历,可能正好帮别人避了一个坑。