GPT-5.5 + Codex 组合实战:我用真实项目测出了这套工作流的边界

你有没有遇到过这种情况:

让 GPT 帮你写一个 FastAPI 接口,代码看起来完整漂亮,复制进去一跑——ImportError。改完再跑——AttributeError。再改——逻辑压根不对。

折腾一小时之后,你开始怀疑:AI 写代码,是不是个伪命题?

不是模型不行。是你用错了姿势。

我最近用一个真实的后端项目做了系统性测试,把 GPT-5.5 和 Codex 拆开分工使用,整个链路跑下来,体感上开发速度至少快了一倍以上。但我也踩了三个让人当场崩溃的坑。

这篇文章把完整工作流、可复用 Prompt、以及那些坑,全部摊开来讲。

---

第一章:为什么要把 GPT-5.5 和 Codex 拆开用?

很多人的用法是这样的:打开 ChatGPT,输入"帮我写一个带登录鉴权的用户管理接口",然后等着一段代码从天而降。

这个姿势有个根本问题:你在用一个工具同时做两件性质完全不同的事。

GPT-5.5 的强项是理解意图、拆解需求、推理逻辑。它能把一句模糊的需求变成结构化的模块划分,能理解"鉴权"背后意味着什么业务流程,能在 Code Review 时发现逻辑漏洞。

Codex(即 GPT-5.3-codex 系列)的强项是代码补全和实现细节。给它一个函数签名和注释,它能把具体实现填得又快又准,尤其在有上下文锚点的情况下,补全质量明显高于通用对话模型。

两者混用,就像让产品经理直接写代码,再让程序员直接做需求评审——不是不能做,而是严重浪费各自的优势区间。

核心分工原则:GPT-5.5 管"想清楚",Codex 管"写出来"。

建立这个分工意识之后,整个工作流就清晰了。

---

第二章:实测流程——从一句需求到可运行代码

我用的案例是:写一个带 JWT 登录鉴权的 FastAPI 用户管理接口,包含注册、登录、获取用户信息三个端点。

Step 1:用 GPT-5.5 做需求拆解

不要直接让它写代码。先用这个 Prompt:

你是一位后端架构师,请将以下需求拆解为模块化的技术方案,

输出格式为:

1. 模块列表(每个模块一行,注明职责)

2. 每个模块的函数签名(含参数类型和返回值类型)

3. 模块间依赖关系

4. 关键业务逻辑的伪代码(不要写完整实现)

需求:写一个带 JWT 登录鉴权的 FastAPI 用户管理接口,

包含注册、登录、获取用户信息三个端点。

使用 SQLAlchemy + PostgreSQL,密码需要 bcrypt 加密。

GPT-5.5 的输出会给你一个清晰的模块图:auth.py(JWT 生成与验证)、models.py(User 数据模型)、schemas.py(Pydantic 校验)、routers/users.py(路由层)、services/user_service.py(业务逻辑层)。

每个模块都有函数签名,比如:

# auth.py

def create_access_token(data: dict, expires_delta: timedelta | None = None) -> str: ...

def verify_token(token: str) -> dict | None: ...

services/user_service.py

async def register_user(db: AsyncSession, user_in: UserCreate) -> User: ...

async def authenticate_user(db: AsyncSession, email: str, password: str) -> User | None: ...

这一步的价值:你拿到的不是一坨代码,而是一份可以逐模块交给 Codex 实现的"施工图"。

Step 2:把函数签名交给 Codex 补全

针对每个模块,用这个 Prompt 喂给 Codex:

请根据以下函数签名和注释,补全完整的 Python 实现。

要求:

  • 遵循 FastAPI 最佳实践
  • 异步函数使用 async/await
  • 错误处理使用 HTTPException
  • 不要省略任何实现细节

[粘贴函数签名和模块上下文]

Codex 在有明确签名锚点的情况下,补全质量会显著提升——它不需要"猜"你想要什么,只需要"填"进去。

实测下来,auth.py 的 JWT 逻辑几乎一次成功,user_service.py 的异步数据库操作需要微调一处 session 管理。

Step 3:回传 GPT-5.5 做 Code Review

把 Codex 生成的完整代码交回 GPT-5.5,用这个 Prompt:

请对以下代码做 Code Review,重点检查:

1. 安全漏洞(SQL 注入、密码明文存储、Token 泄露风险)

2. 业务逻辑错误(边界条件、并发问题)

3. 代码风格一致性

4. 缺失的错误处理

输出格式:问题列表(每条注明严重程度:Critical/Warning/Suggestion)

这一轮,GPT-5.5 发现了一个 Warning:登录接口在用户不存在和密码错误时返回了不同的错误信息,会导致用户枚举攻击。这个问题 Codex 没有主动处理,但 GPT-5.5 一眼就抓到了。

---

💡 想直接跑通本文的所有案例?

文中用到的 GPT-5.5 和 Codex 接口,均可通过 [api.884819.xyz](https://api.884819.xyz) 统一调用——支持 OpenAI 全系模型,按量计费,国内直连无需折腾网络环境。新用户注册即送体验 token,把上面的 Prompt 复制进去,5 分钟内就能跑出第一个结果。

---

第三章:测试用例生成——这才是组合拳最香的地方

说实话,这一章是我最意外的收获。

手写测试用例是很多开发者最不愿意做的事情——不是不知道重要,而是太枯燥、太耗时。用 GPT-5.5 生成测试用例,体验完全不一样。

针对 authenticate_user 这个函数,我用的 Prompt 是:

请为以下函数生成完整的 pytest 测试用例,覆盖:

1. 正常路径(至少 2 个场景)

2. 边界值(空字符串、超长输入、特殊字符)

3. 异常场景(用户不存在、密码错误、数据库连接失败)

函数签名:

async def authenticate_user(db: AsyncSession, email: str, password: str) -> User | None

业务逻辑:

  • 根据 email 查询用户,不存在返回 None
  • 验证 bcrypt 密码,不匹配返回 None
  • 成功返回 User 对象

使用 pytest-asyncio + unittest.mock,输出可直接运行的测试代码。

GPT-5.5 生成了 8 个测试用例,覆盖了我手写时通常会漏掉的两个场景:email 大小写不敏感处理数据库查询异常时的兜底行为

import pytest

from unittest.mock import AsyncMock, patch

from sqlalchemy.ext.asyncio import AsyncSession

@pytest.mark.asyncio

async def test_authenticate_user_success():

"""正常路径:邮箱密码均正确"""

mock_db = AsyncMock(spec=AsyncSession)

mock_user = User(email="[email protected]", hashed_password=bcrypt_hash("correct_password"))

with patch("services.user_service.get_user_by_email", return_value=mock_user):

with patch("auth.verify_password", return_value=True):

result = await authenticate_user(mock_db, "[email protected]", "correct_password")

assert result == mock_user

@pytest.mark.asyncio

async def test_authenticate_user_wrong_password():

"""异常场景:密码错误应返回 None"""

mock_db = AsyncMock(spec=AsyncSession)

mock_user = User(email="[email protected]", hashed_password="hashed")

with patch("services.user_service.get_user_by_email", return_value=mock_user):

with patch("auth.verify_password", return_value=False):

result = await authenticate_user(mock_db, "[email protected]", "wrong_password")

assert result is None

@pytest.mark.asyncio

async def test_authenticate_user_db_exception():

"""异常场景:数据库异常时应抛出,不应返回 None"""

mock_db = AsyncMock(spec=AsyncSession)

with patch("services.user_service.get_user_by_email", side_effect=Exception("DB connection failed")):

with pytest.raises(Exception, match="DB connection failed"):

await authenticate_user(mock_db, "[email protected]", "password")

实测对比:我自己手写,大概能覆盖 5 个场景,花 20 分钟;AI 生成 8 个场景,花 3 分钟(含 Prompt 调整时间)。覆盖的场景数量和质量都更高,尤其是异常路径。

但还有一个问题,等下第四章再说……

---

第四章:踩坑实录——3 个让你当场崩溃的场景

坑 1:幻觉代码——看起来能跑,逻辑是错的

Codex 给我生成了这样一段密码验证逻辑:

def verify_password(plain_password: str, hashed_password: str) -> bool:

return bcrypt.checkpw(plain_password.encode('utf-8'), hashed_password)

看起来没问题,但 hashed_password 在数据库里存的是字符串,bcrypt.checkpw 的第二个参数需要 bytes。这段代码在大多数情况下会静默失败(返回 False),而不是抛出异常——你会以为密码永远验证不通过,但找不到报错信息。

解法:在 Code Review Prompt 里明确加上"检查类型不匹配问题,尤其是 bytes/str 混用",或者在 Codex 的 Prompt 里加一句"所有 bcrypt 操作必须显式处理编码转换"。

坑 2:上下文窗口截断,函数不完整

当我把整个 user_service.py 一次性喂给 Codex 时,输出的最后一个函数被截断了——它在中间停了,没有结束符。

解法:不要一次性生成整个文件。按模块、按函数拆开,每次只让 Codex 处理一个函数或一个逻辑块。这反而和第一章的"分工"原则吻合:GPT-5.5 做的需求拆解,天然就是按函数粒度划分的。

坑 3:两个模型"打架",风格不一致

GPT-5.5 在 Code Review 后给出了修改建议,我直接把建议文本粘给 Codex 让它改,结果 Codex 按自己的风格重写了几个函数,和原来的代码风格完全不搭——有的用 Optional[User],有的用 User | None,有的用 raise HTTPException,有的用 return JSONResponse

解法:在所有 Codex Prompt 的开头加一段"风格约定":
代码风格约定(必须严格遵守):
  • 使用 Python 3.10+ 语法,类型注解用 X | None 而非 Optional[X]
  • 错误处理统一使用 raise HTTPException,不使用 JSONResponse
  • 异步函数统一使用 async/await,不混用 asyncio.run()
  • 所有函数必须有 docstring

把这段约定固定下来,两个模型的输出就能保持一致。

---

第五章:给不同水平读者的使用建议

五步 SOP 流程图

需求描述(自然语言)

[GPT-5.5] 需求拆解 → 模块划分 + 函数签名

[Codex] 逐函数补全实现(含风格约定)

[GPT-5.5] 生成 pytest 测试用例(三类覆盖)

[GPT-5.5] Code Review(安全 + 逻辑 + 风格)

人工确认 + 运行测试

小白版建议

只用 GPT-5.5,按本文 Prompt 模板走。 不要一开始就接 Codex API,学习成本不值得。把精力放在"需求拆解 → 分模块生成 → Code Review"这三步,已经能把效率提升一大截。

Codex 的价值在有明确函数签名锚点时才充分释放,如果你还不熟悉如何写函数签名,先跳过这一步。

进阶版建议

建立标准化的 Prompt 库。把本文的三个 Prompt 模板存成文件,每次新项目直接调用,只需要替换业务上下文部分。

API 成本估算

以本文的 FastAPI 案例(5 个模块,约 300 行代码)为参考:

| 环节 | 大概 Token 消耗 | | 需求拆解(GPT-5.5) | 约 2,000 tokens | | 逐函数补全 × 5(Codex) | 约 8,000 tokens | | 测试用例生成(GPT-5.5) | 约 3,000 tokens | | Code Review(GPT-5.5) | 约 2,500 tokens | | 合计 | 约 15,500 tokens |

对于中型功能模块,整个链路的 API 成本非常低,远低于一个小时的人工时间成本。

什么场景值得用,什么场景不值得

值得用的场景:
  • 有明确规范的后端接口开发(REST API、数据库操作)
  • 测试用例生成(ROI 极高)
  • 重复性高的 CRUD 模块
  • 有存量代码做上下文参考的迭代开发
不值得用的场景:
  • 高度定制化的算法实现(模型不了解你的业务约束)
  • 需要深度理解历史债务代码的重构
  • 对性能有极致要求的底层优化(生成的代码通常是"能跑"而非"最优")

---

最后说一句实话

GPT-5.5 + Codex 的组合,不是银弹。它不能替代你对代码的理解,也不能替代你对业务的判断。

但如果你把它当成一个能力极强、但需要明确指令的初级工程师来用——你负责架构决策和质量把关,它负责填充实现细节——这个组合确实能让你的开发节奏快很多。

本文只解决了"写代码"这一段。

但实际项目里,代码写完还要部署、监控、迭代——下一篇我们会测试:让 GPT-5.5 直接读 GitHub Issue,自动生成修复 PR,整个过程人工介入几次?

这个问题的答案,可能会让你重新定义"AI 辅助开发"的边界。

---

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

#AI编程 #GPT5 #Codex #FastAPI #Python #开发效率 #AI工具 #8848AI