前两篇我们完成了Codex的安装和配置,这篇进入实战——全面解析Codex的六大核心功能:代码生成、代码审查、重构、Bug定位、测试生成、文档生成。每个功能都配有真实场景演示。
直接用自然语言描述需求,Codex会生成对应代码并自动保存到项目文件中。
# 示例:让Codex写一个文件处理函数
codex
> 写一个Python函数,接收一个CSV文件路径,读取后返回列名列表和每列的数据类型
# Codex生成:
def analyze_csv(filepath):
import csv
with open(filepath, 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
columns = reader.fieldnames
types = {col: set() for col in columns}
for row in reader:
for col, val in row.items():
if val:
try: int(val); types[col].add('int')
except:
try: float(val); types[col].add('float')
except: types[col].add('str')
return columns, {col: list(v) for col, v in types.items()}
想让代码更精准,可以在需求中加约束条件:
> 写一个TypeScript函数,实现字符串的全排列(permutation),
> 使用尾递归优化避免爆栈,输入必须是字符串,输出是字符串数组,
> 包含JSDoc注释,添加类型注解
Codex不只能生成单个函数,还能根据项目结构生成完整模块:
> 根据当前项目的models/目录结构,
> 在services/目录生成对应的CRUD服务层代码,
> 使用async/await风格,错误处理统一返回{success, data, error}格式
> 帮我审查以下代码的性能问题:
[paste your code here]
Codex的代码审查覆盖以下维度:
| 维度 | 检查内容 |
|---|---|
| 安全性 | SQL注入、XSS、敏感信息泄露、硬编码密钥 |
| 性能 | N+1查询、重复计算、不必要的循环、同步阻塞 |
| 可读性 | 命名不规范、函数过长、嵌套过深、magic number |
| 最佳实践 | 错误处理缺失、资源未释放、缺少类型注解 |
| 逻辑正确性 | 边界条件、空指针、分母为零 |
一段看似正常的Python代码:
# 原始代码
def get_user(id):
user = db.query(f"SELECT * FROM users WHERE id={id}")
return user
Codex审查后指出三个问题:
id直接拼入SQL,攻击者可注入任意SQL修复后版本:
def get_user(id: int) -> dict | None:
try:
with db.cursor() as cur:
cur.execute("SELECT * FROM users WHERE id=%s", (id,))
return cur.fetchone()
except DatabaseError:
logger.error(f"Failed to fetch user {id}")
return None
> 把以下函数重构成更易维护的版本,
> 保持原有输入输出不变,
> 提取重复逻辑为独立函数,
> 添加类型注解:
[paste code]
Codex在遗留代码现代化场景中特别有用。典型场景:把jQuery代码重构为React,把回调地狱改成async/await:
# 原始回调地狱
$.get('/api/users', function(users) {
$.get('/api/posts', function(posts) {
render(users, posts);
});
});
# Codex重构为async/await
async function loadData() {
const [users, posts] = await Promise.all([
fetch('/api/users').then(r => r.json()),
fetch('/api/posts').then(r => r.json())
]);
render(users, posts);
}
> 帮我分析这个错误:
Traceback (most recent call last):
File "app.py", line 42, in process_data
result = json.loads(raw_data)
File "C:\Python312\lib\json\__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "C:\Python312\lib\json\__init__.py", line 346, in decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Codex分析:JSON解析失败的原因是 raw_data 为空字符串。常见原因:API返回空响应、网络超时导致response body为空。修复建议:在调用 json.loads 前加空值判断。
对于难以复现的Bug,可以让Codex分析代码逻辑中的潜在问题点:
> 这个函数在高并发场景下有时会返回错误数据,
> 但本地无法复现,请分析代码中可能导致race condition的地方
> 为以下函数生成pytest单元测试,覆盖正常输入、边界条件和异常情况:
[paste function]
| 参数 | 说明 |
|---|---|
| 覆盖率目标 | 要求达到的代码覆盖率(如80%) |
| 边界条件 | 空值、极大值、极小值、特殊字符 |
| Mock对象 | 指定哪些依赖需要Mock(如数据库、API调用) |
| 测试风格 | pytest/unittest/Jest等 |
> 根据以下函数生成完整的API文档(Markdown格式),
> 包含参数说明、返回值类型、异常说明、使用示例:
[paste function]
> 分析当前项目结构,生成完整的README.md,
> 包含:项目简介、快速开始、安装步骤、配置说明、使用示例、API文档目录
Codex支持对已存在的文档进行增量更新——只更新变更部分,保留原有格式和内容:
> 更新README.md中的使用示例部分,新增刚添加的export_data函数说明
下一篇我们将聊Codex与工作流的集成:如何把Codex接入Git钩子、CI/CD流水线、VS Code,让它成为开发流程的天然一环。
📌 OpenAI Codex实战指南系列:①开篇介绍 → ②安装配置与快速上手 → ③核心功能详解(本篇) → ④工作流集成 → ⑤高级技巧 → ⑥团队使用指南 → ⑦实战案例
评论区