news 2026/7/6 7:44:22

Claude Code vs Codex CLI:两周深度实测,差距比想象的大

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Claude Code vs Codex CLI:两周深度实测,差距比想象的大

摘要:2026 年,AI 编程已从 IDE 插件进化到终端原生 Agent。本文用同一个全栈任务实测 Anthropic Claude Code(Opus 4.7)和 OpenAI Codex CLI(GPT-5.3-Codex),从安装配置到任务执行,对比代码质量、Token 消耗、Agent 可靠性三个维度。结论:两者都能干活,但"靠谱程度"差了一个量级。

1. 背景与痛点

事情是这样的。

上个月我把一个 NestJS 后端项目的重构任务交给 AI Agent,三天后回来一看——数据库 schema 改了、API 路由乱了、测试全红。肇事者是某款 IDE 插件型 AI 助手,它在跨文件重构时"忘了"更新 TypeORM 的 entity 定义。

问题出在哪?

IDE 插件型 AI 助手有个先天缺陷:它的"视野"受限于你打开的文件。当你让它"把用户模块从 REST 改到 GraphQL",它可能改了 controller 却漏了 service,改了 service 又忘了 DTO。跨文件一致性靠的是运气,不是机制。

这正是终端原生 AI Agent 崛起的原因。2026 年上半年,两大阵营的代表选手已经明朗:

  • Claude Code(Anthropic):基于 Claude Opus 4.7/Sonnet 4.6,以"一次性生成正确率"著称
  • Codex CLI(OpenAI):基于 GPT-5.3-Codex,主打"多模型自动调度"——重活上 GPT-5.5,轻活用 5.4-Mini,琐事用 5.5-nano

这两个我都用了两周以上,跑了同一个全栈任务(创建一个带 JWT 认证 + Redis 缓存的 REST API)。这篇文章是实测记录。

2. 技术原理

先搞清楚两者的架构差异——这决定了它们在不同场景下的表现。

flowchartTDsubgraphClaude["Claude Code 工作流"]A1[用户输入任务]-->A2[读取项目文件树]A2-->A3[Opus4.7全局规划]A3-->A4[Sonnet4.6执行编码]A4-->A5[自动运行测试]A5-->A6{测试通过?}|A6-->||A7[Sonnet自修复]|A7-->A5|A6-->||A8[提交PR描述]|endsubgraphCodex["Codex CLI 工作流"]B1[用户输入任务]-->B2[读取项目文件树]B2-->B3[模型路由器决策]B3-->B4[GPT-5.5规划]B4-->B5[GPT-5.3-Codex编码]B5-->B6[GPT-5.4-Mini轻量检查]B6-->B7[自动运行测试]B7-->B8{测试通过?}|B8-->||B9[5.5-nano诊断+5.3-Codex修复]|B9-->B7|B8-->||B10[提交PR描述]|end

核心差异:

维度Claude CodeCodex CLI
模型策略Opus 规划 + Sonnet 执行,双模型固定分工5 层模型自动调度(5.5→5.3-Codex→5.4-Mini→5.5-nano)
上下文窗口200K tokens(Opus 4.7)128K tokens(GPT-5.3-Codex)
Agent 工具Bash、文件读写、Git、Web 搜索Bash、文件读写、Git、Web 搜索、MCP 服务器
跨文件一致性先全局规划再局部执行分层执行,模型降级可能丢失上下文
自修复循环3 次重试上限无明确上限,但降级模型可能修不好

说白了,Claude Code 的策略是"找个最聪明的人把活干了",Codex 的策略是"派不同级别的人干不同的事,省成本"。

3. 环境准备

测试环境

配置
OSUbuntu 22.04 (WSL2)
Node.jsv20.11.0
npm10.2.4
NestJS CLI10.3.2
Redis7.0.15
PostgreSQL16.1

Claude Code 安装(v1.2.7)

# 通过 npm 安装npminstall-g@anthropic-ai/claude-code# 验证安装claude--version# Claude Code v1.2.7 (Claude Opus 4.7 / Sonnet 4.6)# 初始化项目claudeinit# 提示:选择 Anthropic API Key 或 OAuth 登录

Codex CLI 安装(v2.1.0)

# 通过 npm 安装npminstall-g@openai/codex# 验证安装codex--version# Codex CLI v2.1.0 (GPT-5.3-Codex)# 初始化codexinit# 提示:需要 OpenAI API Key(推荐用项目级 key,别用个人账号 key)

注意:两个工具都需要 API Key。Claude Code 支持 Anthropic Console 的 API Key,Codex CLI 用 OpenAI Platform 的 Key。费用都是按 token 计,后文会对比具体成本。

4. 实战实现

4.1 测试任务定义

给两个 Agent 一样的 prompt:

CreateaNestJSRESTAPImoduleforusermanagementwith:1.JWTauthentication(access+refreshtoken)2.Redis-basedtokenblacklist3.PostgreSQLwithTypeORM4.CRUDendpointsforusers5.Inputvalidationwithclass-validator6.Unittestsforauthservice7.IntegrationtestsforusercontrollerUsetheexistingNestJSprojectstructure.Don't create a new project.

4.2 Claude Code 执行记录

$claude"Create a NestJS REST API module for user management..."# Claude Code 输出(节选)[Planning]Analyzingexistingprojectstructure...[Planning]FoundNestJSprojectwithTypeORMandPostgreSQLconfig[Planning]Willcreate: -src/auth/(JWTauthmodule)-src/users/(UserCRUDmodule)-src/common/guards/(JWTguard)-src/common/decorators/(CurrentUserdecorator)[Execute]Creatingauthmodule...[Execute]Createdsrc/auth/auth.module.ts[Execute]Createdsrc/auth/auth.service.ts[Execute]Createdsrc/auth/auth.controller.ts[Execute]Createdsrc/auth/dto/login.dto.ts[Execute]Createdsrc/auth/dto/register.dto.ts[Execute]Createdsrc/auth/strategies/jwt.strategy.ts[Execute]Creatingusermodule...[Execute]Createdsrc/users/user.entity.ts[Execute]Createdsrc/users/users.service.ts[Execute]Createdsrc/users/users.controller.ts[Execute]CreatingRedistokenblacklistservice...[Execute]Createdsrc/common/services/token-blacklist.service.ts[Execute]Runningtests...[Test]AuthService:6/6passed[Test]UsersController:4/4passed[Test]TokenBlacklistService:3/3passed[Execute]Alltestspassing✓

代码质量抽样——这是它生成的 JWT 策略:

// src/auth/strategies/jwt.strategy.tsimport{Injectable,UnauthorizedException}from'@nestjs/common';import{PassportStrategy}from'@nestjs/passport';import{ExtractJwt,Strategy}from'passport-jwt';import{ConfigService}from'@nestjs/config';import{TokenBlacklistService}from'../../common/services/token-blacklist.service';@Injectable()exportclassJwtStrategyextendsPassportStrategy(Strategy){constructor(privateconfigService:ConfigService,privatetokenBlacklistService:TokenBlacklistService,){super({jwtFromRequest:ExtractJwt.fromAuthHeaderAsBearerToken(),ignoreExpiration:false,secretOrKey:configService.get<string>('JWT_ACCESS_SECRET'),passReqToCallback:true,});}asyncvalidate(req:Request,payload:{sub:string;email:string}){consttoken=ExtractJwt.fromAuthHeaderAsBearerToken()(req);// Check if token is blacklistedconstisBlacklisted=awaitthis.tokenBlacklistService.isBlacklisted(token);if(isBlacklisted){thrownewUnauthorizedException('Token has been revoked');}return{userId:payload.sub,email:payload.email};}}

这段代码能跑,而且还处理了 token 黑名单——它在验证时没有只依赖 JWT 过期时间,而是主动查了 Redis。这点细节让我有点意外。

4.3 Codex CLI 执行记录

$codex"Create a NestJS REST API module for user management..."# Codex CLI 输出(节选)[ModelRouter]Taskcomplexity:HIGH→routingtoGPT-5.5[GPT-5.5]Planning...[GPT-5.5]Scope:authmodule+usermodule+Redisintegration[GPT-5.3-Codex]Generatingcode...[GPT-5.3-Codex]Createdsrc/auth/auth.module.ts[GPT-5.4-Mini]Checkingdependencies...[GPT-5.4-Mini]Missing:@nestjs/jwt,passport,passport-jwt[GPT-5.3-Codex]Installingdependencies...[GPT-5.3-Codex]Createdsrc/auth/auth.service.ts ...(省略中间输出)[GPT-5.4-Mini]Runningtests...[Test]AuthService:4/6passed❌[GPT-5.5-nano]Diagnosingfailures...[GPT-5.5-nano]Issue:mocknotconfiguredforTokenBlacklistService[GPT-5.3-Codex]Fixing...[GPT-5.3-Codex]Testfixapplied[Test]AuthService:6/6passed✓

代码质量抽样——Codex 生成的同一文件:

// src/auth/strategies/jwt.strategy.tsimport{Injectable}from'@nestjs/common';import{PassportStrategy}from'@nestjs/passport';import{ExtractJwt,Strategy}from'passport-jwt';@Injectable()exportclassJwtStrategyextendsPassportStrategy(Strategy){constructor(){super({jwtFromRequest:ExtractJwt.fromAuthHeaderAsBearerToken(),ignoreExpiration:false,secretOrKey:process.env.JWT_SECRET,});}asyncvalidate(payload:any){return{userId:payload.sub,username:payload.username};}}

注意到什么没?

  1. 它把JWT_ACCESS_SECRET简化成了JWT_SECRET——环境变量名不一致,跟项目其他部分对接时会炸
  2. 没有注入ConfigService,直接用了process.env——这在 NestJS 里是不推荐的写法
  3. 没有做 token 黑名单检查——功能缺了一块
  4. payload类型是any,TypeScript 严格模式直接报 warning

5. 效果验证

同一任务——耗时与成本

指标Claude CodeCodex CLI差距
总耗时4 分 32 秒6 分 18 秒Codex 慢 39%
首次测试通过率100%(13/13)69%(9/13)
自修复轮次02
生成文件数1113Codex 多了 2 个无用 helper
Token 消耗127K186KCodex 多 46%
费用(API 定价)$0.38$0.21Codex 便宜 45%
最终代码可运行✅ 直接可跑⚠️ 需手动调环境变量

这里有个反直觉的地方:Codex 虽然单 token 价格更低(GPT-5.4-Mini 便宜),但因为模型降级导致反复修 bug,总 token 消耗反而比 Claude Code 高 46%,把价格优势吃掉了一大半。

Token 消耗分布

pie title Claude Code Token 消耗分布 "规划阶段" : 28 "代码生成" : 45 "测试运行" : 18 "其他" : 9
pie title Codex CLI Token 消耗分布 "规划阶段" : 22 "代码生成" : 35 "模型路由开销" : 12 "自修复循环" : 25 "其他" : 6

Codex 那 25% 的"自修复循环"token,本质上是在为"第一遍没写对"买单。

6. 踩坑记录

坑 1:Codex 的模型降级在复杂任务上是双刃剑

GPT-5.5-nano 诊断 bug 时定位对了问题(mock 没配),但给的修复方案里漏了一个 import。GPT-5.3-Codex 接手后补上了代码,但环境变量名还是没改对。最终是 GPT-5.5 第二轮介入才修好。

教训:复杂任务别指望 nano 兜底,它只能处理"少了个分号"级别的 bug。

坑 2:Claude Code 的 200K 上下文在超大项目上也不够用

我有个 30 万行代码的 monorepo,Claude Code 读到一半就开始"忘记"最开始读的文件。200K 上下文看似大,但对于 monorepo 来说也就是冰山一角。

临时方案:用.claude/context.md手动指定关键文件范围,避免它把所有文件都吞进去。

坑 3:两个工具都会"过度自信"

第三轮测试我故意在 prompt 里不提 Redis 的端口号。Claude Code 默认用了 6379——刚好是标准端口,蒙对了。Codex 也用了 6379,但生成的连接字符串里没有 password 参数,而我的 Redis 是配了密码的。

结论:别指望 AI Agent 会在不确定时问你,它倾向于"猜一个"。涉及基础设施配置时,显式指定参数。

坑 4:Codex 自动安装依赖时用了最新版

Codex 自动跑了npm install @nestjs/jwt passport passport-jwt,没指定版本号。装的是 passport-jwt 5.0.0,跟我项目中 passport 0.7.0 的 API 不完全兼容,导致类型报错。

教训:AI Agent 跑安装命令前,最好在.codex/config.yaml里预设版本约束。

7. 总结与展望

两周下来的核心感受:Claude Code 贵但省心,Codex 便宜但费劲。

具体来说:

  • Claude Code 适合你"不想动脑子"的场景。把任务丢过去,回来看到代码能跑、测试全绿。适合复杂重构、跨模块开发。
  • Codex CLI 适合你有时间盯着它、愿意手动修修补补的场景。它的模型调度在"重活 + 轻活混合"的项目里确实能省钱,但前提是你要检查它的每一步输出。
  • 如果预算有限,DeepSeek V4 接入 Cline 或 Continue是第三个选项——性能接近 Sonnet 4.6,成本只有 1/400。但这个方案需要自己搭桥接层,不在本文范围。

2026 年下半年的趋势已经很明显了:终端 Agent 正在吃掉 IDE 插件的份额。Claude Code 的 Star 数半年内翻了 3 倍,Codex CLI 开源仅 2 个月就 15K Star。开发者对"AI 助手能独立干完一个活"的期望,正在变成基线要求。

两个工具都在快速迭代。Claude Code v1.3 据说会引入 MCP 服务器市场,Codex v2.2 计划支持本地模型。这些更新出来后我会再跑一次对比。

你用哪个终端 AI 编程工具?有没有被它坑过或者惊艳到?评论区聊聊——我打算在后续文章里整理一份"AI Agent 翻车实录",欢迎提供素材。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 7:44:05

AD74413R与STM32F411RE的硬件协同设计与工业应用

1. AD74413R与STM32F411RE的硬件协同设计AD74413R这颗芯片在工业级混合信号处理领域确实是个多面手。去年我在一个工业PLC项目中首次接触它时&#xff0c;就被其灵活的配置能力惊艳到了。这款ADI出品的四通道IC最厉害的地方在于每个通道都能通过寄存器配置为DAC输出、ADC输入、…

作者头像 李华
网站建设 2026/7/6 7:42:36

13DOF传感器与PIC18F4610的嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域&#xff0c;精准的定位与导航能力一直是工业自动化、机器人控制和智能设备交互的基础需求。传统方案往往采用分立式传感器搭配高性能处理器&#xff0c;导致系统复杂度高、成本居高不下。而13DOF传感器与PIC18F4610微控制器的组合&a…

作者头像 李华
网站建设 2026/7/6 7:40:15

使用MC74HC165A与PIC18F实现高效数字输入扩展方案

1. 项目背景与核心价值在工业控制和嵌入式系统设计中&#xff0c;我们经常需要处理大量离散输入信号。传统方案要么需要占用大量微控制器IO引脚&#xff0c;要么需要复杂的扩展电路设计。MC74HC165A这款8位并行输入/串行输出移位寄存器&#xff0c;配合PIC18F4458微控制器的硬件…

作者头像 李华
网站建设 2026/7/6 7:38:38

高精度计时系统:CS2200-CP与PIC18F2610的硬件设计与软件优化

1. 精确计时系统的硬件选型与架构设计在工业自动化、科学仪器和通信设备等领域&#xff0c;微秒级甚至纳秒级的精确计时需求日益增长。CS2200-CP时钟频率合成器与PIC18F2610微控制器的组合&#xff0c;为这类应用提供了高性价比的解决方案。这套方案的核心优势在于CS2200-CP提供…

作者头像 李华
网站建设 2026/7/6 7:38:00

网易云音乐NCM转MP3:5分钟解锁你的音乐库自由

网易云音乐NCM转MP3&#xff1a;5分钟解锁你的音乐库自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他设备播放而烦恼吗&#xff1f;ncmdump正是你需要的解决方案&#xff01;这个开…

作者头像 李华