1. 引言:Codex 是什么

Codex 是 OpenAI 推出的代码智能体(Coding Agent),它不只是代码补全工具,而是能够理解项目上下文、自主规划任务、修改多个文件、运行命令并验证结果的 AI 编程助手。它基于 OpenAI 的模型能力,可以在终端中直接与代码仓库交互,完成从需求理解到代码落地的完整闭环。

本文将从零开始,带你完整走一遍 Codex 的安装、配置、实战和进阶用法,全程包含可复制的代码示例和真实场景演练。

2. 环境准备与安装

2.1 前置要求

在开始之前,请确认你的开发环境满足以下条件:

  • 操作系统:macOS、Linux 或 Windows(通过 WSL2)
  • Node.js:18.0 及以上版本
  • Git:已安装并完成基础配置
  • OpenAI 账号:具备 API 访问权限或 ChatGPT 订阅

2.2 安装 Codex CLI

Codex CLI 是官方提供的命令行工具,安装非常简单。打开终端执行:

npm install -g @openai/codex

安装完成后,验证是否成功:

codex --version

如果看到版本号输出,说明安装成功。接下来需要配置认证信息:

codex login

按照提示完成浏览器授权即可。你也可以通过环境变量配置 API Key:

export OPENAI_API_KEY="sk-你的密钥"

3. 第一个实战:让 Codex 创建项目

3.1 初始化一个 Python 项目

我们从一个最简单的场景开始:让 Codex 从零创建一个 Python 命令行工具。首先创建一个空目录并进入:

mkdir codex-demo
cd codex-demo

然后启动 Codex 交互模式:

codex

在交互界面中输入你的需求:

创建一个 Python 命令行工具,可以计算斐波那契数列的第 N 项,支持命令行参数输入,并包含单元测试。

Codex 会自动规划任务并开始创建文件。它会生成类似下面的项目结构:

codex-demo/
├── fibonacci/
│   ├── __init__.py
│   └── calculator.py
├── tests/
│   └── test_calculator.py
├── README.md
└── requirements.txt

3.2 查看 Codex 生成的代码

Codex 生成的 fibonacci/calculator.py 可能如下:

def fibonacci(n: int) -> int:
    """返回斐波那契数列的第 n 项(从 0 开始计数)。"""
    if n < 0:
        raise ValueError("n 必须是非负整数")
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
    return a
def main() -> None:
import argparse
parser = argparse.ArgumentParser(description="计算斐波那契数列")
parser.add_argument("n", type=int, help="要计算的项数")
args = parser.parse_args()
print(fibonacci(args.n))
if name == "main":
main()

对应的测试文件 tests/test_calculator.py

import pytest
from fibonacci.calculator import fibonacci
def test_fibonacci_base_cases():
assert fibonacci(0) == 0
assert fibonacci(1) == 1
def test_fibonacci_sequence():
assert fibonacci(2) == 1
assert fibonacci(5) == 5
assert fibonacci(10) == 55
def test_fibonacci_negative():
with pytest.raises(ValueError):
fibonacci(-1)

3.3 运行验证

Codex 还会帮你安装依赖并运行测试。你也可以手动执行:

pip install -r requirements.txt
pytest tests/ -v

看到所有测试通过,说明 Codex 生成的代码可以正常工作。

4. 非交互模式:在脚本和 CI 中使用

4.1 单次执行模式

除了交互模式,Codex 还支持非交互执行,非常适合集成到自动化流程中:

codex exec "给当前目录下的所有 Python 文件添加类型注解"

也可以指定要操作的文件:

codex exec --file src/main.py "重构这个文件,把重复代码提取成公共函数"

4.2 在 CI 流水线中使用

下面是一个 GitHub Actions 的示例,展示如何在 CI 中调用 Codex 自动修复代码问题:

name: Codex Auto Fix
on:
push:
branches: [main]
jobs:
codex-fix:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
  - name: Setup Node.js
    uses: actions/setup-node@v4
    with:
      node-version: "20"
name: Install Codex
run: npm install -g @openai/codex
name: Run Codex
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
codex exec "检查代码中的潜在 bug 并修复,然后运行测试确认没有破坏任何功能"

5. 实战:用 Codex 修复 Bug 和重构

5.1 定位并修复 Bug

假设我们有一个存在 Bug 的 JavaScript 文件 utils.js

function formatPrice(price) {
  return "$" + price.toFixed(2);
}
function calculateTotal(items) {
let total = 0;
for (let i = 0; i < items.length; i++) {
total += items[i].price;
}
return formatPrice(total);
}
module.exports = { formatPrice, calculateTotal };

在 Codex 中执行:

codex exec --file utils.js "这个模块在传入空数组时会返回 $0.00,但业务上应该返回 $0.00 并保留两位小数。请检查是否有边界问题,并补充健壮性处理。"

Codex 会分析代码,发现 items 可能为 nullundefined,并自动修复:

function formatPrice(price) {
  if (typeof price !== "number" || isNaN(price)) {
    return "$0.00";
  }
  return "$" + price.toFixed(2);
}
function calculateTotal(items) {
if (!Array.isArray(items)) {
return "$0.00";
}
let total = 0;
for (let i = 0; i < items.length; i++) {
total += items[i].price;
}
return formatPrice(total);
}
module.exports = { formatPrice, calculateTotal };

5.2 自动重构

再来看一个重构场景。假设有一个冗长的函数,我们希望 Codex 帮忙拆分:

codex exec --file services/order.js "把 createOrder 函数拆分成多个小函数,每个函数只做一件事,并保持对外行为不变。"

Codex 会分析函数职责,拆分为校验、计算、持久化等独立函数,并同步更新调用方。

6. 进阶:自定义 Codex 配置

6.1 配置文件

Codex 支持通过配置文件定制行为。在项目根目录创建 codex.toml

[model]
# 指定使用的模型
name = "gpt-4o"
[behavior]
自动接受所有建议(谨慎使用)
auto_accept = false
执行命令前是否需要确认
require_confirmation = true
[permissions]
允许 Codex 执行的命令白名单
allow = [
"npm test",
"pytest",
"git status",
"git diff",
]
禁止执行的命令
deny = [
"rm -rf /",
"git push --force",
]

6.2 项目级指令

你可以在项目根目录创建 AGENTS.md 文件,写入项目规范和偏好,Codex 每次运行都会自动读取:

# 项目规范
代码风格
使用 TypeScript 严格模式
所有公共函数必须有 JSDoc 注释
使用 2 空格缩进
测试要求
每个新功能必须配套单元测试
测试覆盖率不低于 80%
禁止事项
不要使用 any 类型
不要直接修改数据库结构,必须通过迁移文件

7. 实战:Codex 驱动一个完整功能开发

7.1 需求描述

我们用一个更完整的例子来收尾。假设要为一个 Node.js 项目新增「用户注册」功能,包含邮箱校验、密码加密和数据库存储。在 Codex 中下达任务:

codex exec "为项目新增用户注册功能:1. 新增 POST /api/register 接口;2. 校验邮箱格式和密码强度;3. 使用 bcrypt 加密密码;4. 将用户信息存入 SQLite 数据库;5. 补充集成测试。"

7.2 Codex 的任务拆解

Codex 会自动拆解任务并逐步执行:

  1. 分析现有项目结构和依赖
  2. 安装 bcryptsqlite3 依赖
  3. 创建数据库迁移脚本
  4. 实现注册路由和业务逻辑
  5. 编写集成测试并运行验证

最终生成的核心代码可能如下:

const bcrypt = require("bcrypt");
const db = require("../db");
async function registerUser(req, res) {
const { email, password } = req.body;
// 校验邮箱格式
const emailRegex = /^[^\s@]+@[^\s@]+.[^\s@]+$/;
if (!emailRegex.test(email)) {
return res.status(400).json({ error: "邮箱格式不正确" });
}
// 校验密码强度
if (password.length < 8) {
return res.status(400).json({ error: "密码长度至少 8 位" });
}
// 检查邮箱是否已注册
const existing = await db.get("SELECT id FROM users WHERE email = ?", [email]);
if (existing) {
return res.status(409).json({ error: "邮箱已被注册" });
}
// 加密密码并入库
const hashedPassword = await bcrypt.hash(password, 10);
const result = await db.run(
"INSERT INTO users (email, password_hash) VALUES (?, ?)",
[email, hashedPassword]
);
res.status(201).json({ id: result.lastID, email });
}
module.exports = { registerUser };

8. 常见问题与最佳实践

8.1 常见问题

问题解决方案
Codex 修改了不该改的文件codex.toml 中配置 deny 规则,或使用 --file 限定范围
生成的代码不符合项目风格AGENTS.md 中明确代码规范,Codex 会优先遵循
执行命令时权限过大配置 require_confirmation = true,逐条确认命令
大项目上下文理解不足先运行 codex exec "梳理项目结构并输出 README",让 Codex 建立全局认知

8.2 最佳实践

  • 小步提交:每次让 Codex 完成一个独立小任务,便于审查和回滚。
  • 善用 AGENTS.md:把项目约定写进去,Codex 会持续遵守。
  • 代码审查不可省:Codex 生成代码后,务必人工 review 再合并。
  • 结合测试:要求 Codex 同时生成测试,用测试结果验证改动正确性。
  • 善用 Git:在让 Codex 动手前先提交当前状态,方便随时回退。

9. 总结

本文从安装配置开始,通过创建项目、修复 Bug、自动重构、完整功能开发等多个实战场景,完整演示了 Codex 从 0 到 1 的使用方法。Codex 的核心价值在于:它不只是生成代码片段,而是能理解项目上下文、自主规划并执行多步骤任务,真正成为开发者的 AI 结对编程伙伴。

建议你从一个小型项目开始,逐步让 Codex 承担更多复杂任务,并在实践中不断调整配置和规范,找到最适合自己团队的工作流。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐