我花一个下午测了 Codex 的5个真实场景:它能干完什么,干不完什么

4M 用户,2周。

OpenAI Codex 的用户增长曲线让很多人觉得这是下一个"杀手级产品"。但增长数字解决不了一个更实际的问题:它现在到底能干完哪些活?

我不想再复述产品发布新闻了。趁着限速重置之前的窗口,我花了一个下午做了5个真实场景的压力测试——覆盖从爬虫脚本到数据库设计的完整链路。结论先放这里:Codex 不是全能助手,而是特定任务的自动化引擎。 用对了省一半时间,用错了白白浪费额度。

---

测试框架:我怎么选这5个场景

5个场景的选择有明确逻辑,不是随机拍脑袋:

  • 层级1(小白日常):写爬虫、搭 API——有明确输入输出,适合验证基础能力
  • 层级2(中级工程):重构遗留代码、生成数据库 Schema——需要理解上下文和约束
  • 层级3(进阶自动化):调试多线程竞态条件——考验推理深度,接近真实工程复杂度

每个场景用三个维度打分:

| 维度 | 说明 | | 完成度 | 任务是否跑完,不跑完算失败 | | 人工干预次数 | 我补充了几次 prompt 或手动修改了多少 | | 输出可直接用比例 | 不改动直接能用的代码占比 |

评分结果用 ✅ ⚠️ ❌ 标注,让你一眼看清楚每个场景的成色。

---

5个场景逐一实测

场景1:写一个带错误处理的爬虫脚本 ✅

输入 Prompt:
用 Python 写一个爬虫,抓取 Hacker News 首页的前30条新闻标题和链接。

要求:

1. 使用 requests + BeautifulSoup

2. 加完整的错误处理(网络超时、解析失败、HTTP 非200)

3. 结果保存到 hn_news.json,带时间戳字段

4. 加注释,适合新手阅读

输出核心片段:
import requests

from bs4 import BeautifulSoup

import json

from datetime import datetime

def fetch_hn_news(url: str, timeout: int = 10) -> list[dict]:

"""抓取 Hacker News 首页新闻列表"""

try:

response = requests.get(url, timeout=timeout)

response.raise_for_status() # 非200状态码直接抛异常

except requests.exceptions.Timeout:

print(f"[ERROR] 请求超时({timeout}s),请检查网络")

return []

except requests.exceptions.HTTPError as e:

print(f"[ERROR] HTTP错误: {e}")

return []

except requests.exceptions.RequestException as e:

print(f"[ERROR] 请求失败: {e}")

return []

try:

soup = BeautifulSoup(response.text, "html.parser")

items = soup.select(".titleline > a")[:30]

return [

{

"title": item.get_text(strip=True),

"url": item.get("href", ""),

"fetched_at": datetime.now().isoformat()

}

for item in items

]

except Exception as e:

print(f"[ERROR] 解析失败: {e}")

return []

if __name__ == "__main__":

news = fetch_hn_news("https://news.ycombinator.com")

with open("hn_news.json", "w", encoding="utf-8") as f:

json.dump(news, f, ensure_ascii=False, indent=2)

print(f"✅ 已保存 {len(news)} 条新闻")

我的干预次数:0次 一句话判断: 直接可用,注释质量超出预期。反直觉的地方在于——它主动加了 raise_for_status() 这个我没提到的细节,说明它在"理解意图"而不是"机械执行"。

---

场景2:重构200行遗留代码并补测试 ⚠️

把一段真实的旧项目代码丢进去,要求:拆分函数、消除魔法数字、补充 pytest 单元测试。

结果: 重构完成度不错,函数拆分合理,魔法数字提取为常量。但测试部分出了问题——它生成的 mock 对象没有覆盖边界条件,有两个测试用例在我本地直接跑失败。 干预次数:3次(两次修正 mock,一次补充边界 case) 可直接用比例:约70% 一句话判断: 重构部分值得信任,测试部分必须人工审查。别把它生成的测试当作"已通过"的保障,它更像是帮你搭了个测试骨架,你来填肉。

---

场景3:搭一个本地 REST API(含文档) ✅

这是5个场景里完成度最高的一个——反而比场景1更令人惊喜。

输入 Prompt:
用 FastAPI 搭一个本地 REST API,功能是管理一个简单的任务清单(Todo List)。

要求:

1. 支持 CRUD:创建/读取/更新/删除任务

2. 每个任务有:id、title、description、status(pending/done)、created_at

3. 数据存在内存字典里,不需要数据库

4. 自动生成 Swagger 文档

5. 加 Pydantic 数据校验

6. 返回统一的 JSON 格式,包含 success 字段

输出路由结构:
POST   /tasks          # 创建任务

GET /tasks # 获取所有任务(支持 status 过滤)

GET /tasks/{id} # 获取单个任务

PUT /tasks/{id} # 更新任务

DELETE /tasks/{id} # 删除任务

GET /health # 健康检查(这个是它自己加的)

它不仅完成了所有要求,还主动加了 /health 端点和详细的 404/422 错误响应格式。Swagger 文档在 localhost:8000/docs 直接可用,字段描述完整。

干预次数:0次 一句话判断: 为什么场景3比场景1更完整?因为 FastAPI 的约束更强——Pydantic 的类型系统、HTTP 语义的规范性,让 Codex 有更清晰的"护栏"可以依赖。任务框架越明确,它发挥越稳定。

---

场景4:调试一个多线程竞态条件 bug ❌

这是唯一一个完全失败的场景。

我给了一段存在竞态条件的 Python 多线程代码——多个线程同时修改共享计数器,偶发性出现计数不准确的问题。

Codex 给出的调试思路:
"问题可能是多个线程同时读写 counter 变量,建议加 threading.Lock() 保护临界区,或者使用 queue.Queue 替代共享变量……"

方向是对的。但它给出的修复代码有个隐蔽问题:锁的粒度太粗,把不需要加锁的 I/O 操作也包进去了,导致性能损耗,而且没有解决"锁的获取顺序"可能引发的死锁风险。

实际问题根因: 代码里有两处共享资源,Codex 只注意到了一处,另一处遗漏了。 干预次数:5次,最终我手动定位并修复 一句话判断: 并发 bug 的调试需要"全局状态追踪"能力,这恰恰是当前 Codex 最薄弱的地方。它能给你正确的方向,但在执行层面容易遗漏细节,越复杂的并发场景,遗漏越多。

---

场景5:从需求描述生成数据库 Schema + Migration ⚠️

弱提示词版本:
帮我设计一个电商系统的数据库

结果:生成了一个"教科书级别"的通用电商 Schema,表结构合理但完全没有业务个性,字段命名风格混乱(下划线和驼峰混用),没有索引设计,没有 migration 文件。

强提示词版本:
帮我为一个 B2C 电商系统设计 PostgreSQL 数据库 Schema,要求:

1. 包含:用户表、商品表、订单表、订单详情表、地址表

2. 所有表用下划线命名,主键统一用 id(bigserial)

3. 时间字段统一用 created_at / updated_at(timestamptz)

4. 为高频查询字段加索引(用户ID、订单状态、商品分类)

5. 生成 Alembic migration 文件,版本号用当前日期

6. 加外键约束,并说明每个约束的业务含义

结果质量提升显著:字段命名统一、索引设计合理、Alembic 文件结构正确,外键注释清晰。

一句话判断: 场景5是提示词质量影响最大的场景。弱提示词得到通用模板,强提示词得到可落地的设计。Codex 的上限取决于你对需求的表达能力。

---

规律总结:什么任务可以托付给它

测完5个场景,我归纳出了一个判断框架:

✅ 可托付的3个特征

1. 任务边界清晰:有明确的输入、明确的输出格式、明确的约束条件。场景1和场景3都满足这一点。

2. 输入输出可验证:跑完之后你能立刻判断对不对——爬虫能不能抓到数据,API 能不能返回正确状态码。可验证意味着错了能快速迭代。

3. 不依赖外部实时状态:任务的正确性不取决于"当前系统运行状态"。并发 bug 的根本问题就在这里——它需要追踪运行时状态,这超出了 Codex 的能力边界。

❌ 别指望它的3个信号

1. 问题是"偶发性"的:偶发 bug、竞态条件、环境相关问题——Codex 没有运行时观察能力,只能猜。

2. 需要跨文件全局推理:大型项目里,一个 bug 的根因可能在5个文件之外,Codex 的上下文窗口和推理链都有限制。

3. 你自己都说不清楚需求:场景5的弱提示词版本说明了这一点。你的模糊,会被它放大成更大的模糊。

一句话使用直觉: 如果你能把任务写成一份清晰的需求文档,Codex 就能跑完它。如果你自己都在探索,先别用 Codex,先想清楚。

---

限速之后怎么用更划算

限速重置意味着免费额度是稀缺资源,不能乱花。给你一个优先级建议:

把 Codex 留给这些任务:
  • 有明确模板的重复性工作(批量生成 CRUD、写测试骨架)
  • 新项目的脚手架搭建(API 结构、数据库 Schema 初稿)
  • 有规范约束的代码转换(旧代码重构、格式统一)
这些任务先用更轻量的方式验证思路:
  • 探索性的架构设计(先画图、先讨论,再让 Codex 实现)
  • 复杂 bug 的根因分析(先自己定位到大概范围,再让它帮你写修复代码)
  • 需求本身还在变化的功能(需求不稳定,生成的代码也会反复重做)

限速重置之后,如果你需要更稳定地调用 Codex 或其他主流模型做批量编程任务,可以通过 [api.884819.xyz](https://api.884819.xyz) 接入 API——按量计费,没有月租,不受单一产品限速影响,适合把场景1、场景3这类"可批量跑"的任务做成自动化流水线。新用户注册即送体验 token,国产模型(Deepseek、通义千问等)完全免费。

---

最后:一张象限图帮你定位

把5个场景放到"任务确定性 × 复杂度"的象限里:

高复杂度

│ 场景4(❌) 场景2(⚠️)

│ 多线程调试 遗留代码重构

│ 场景5(⚠️)

│ Schema设计

│ 场景1(✅) 场景3(✅)

│ 爬虫脚本 REST API

└─────────────────────────────────→

低确定性 高确定性

规律一目了然: 高确定性的任务,Codex 的完成度随复杂度下降有限;低确定性的任务,复杂度稍微提升,完成度就断崖式下跌。

使用 Codex 的核心策略,不是"找更难的任务考它",而是把任务推向右侧——提高确定性,用清晰的 prompt、明确的约束、可验证的输出格式,让它在它擅长的区间内最大化发挥。

---

📌 下篇预告:

Codex 能跑完独立任务,但它和你的本地 IDE、CI/CD 流水线怎么打通?下一篇我会测:把 Codex API 嵌进 GitHub Actions,让它在每次 PR 时自动做代码审查——这条路现在通不通,成本多少,我来踩坑。如果你已经在用 Codex 做日常开发,这篇可能直接改变你的工作流。

---

本文由8848AI原创,转载请注明出处。关注8848AI,带你从零开始学AI。

#AI编程 #Codex #ChatGPT #代码生成 #8848AI #AI工具评测 #Python #开发者工具