1. 引言:Codex 是什么,为什么值得认真玩
很多朋友开通 ChatGPT Plus 或 Pro 之后,第一反应是去聊天、写文案、做翻译,却忽略了 OpenAI 藏在订阅里的一个"大杀器"——Codex。它不是一个普通的聊天机器人,而是 OpenAI 推出的 AI 编程智能体(Agent),能够直接操作你的代码仓库、读取文件、运行命令、执行测试,甚至帮你提交 Pull Request。
简单来说,ChatGPT 是"告诉你答案",而 Codex 是"帮你把活干完"。它把大语言模型从"对话窗口"搬进了"开发环境",让你可以用自然语言描述需求,让 AI 真正动手写代码、改代码、跑代码。
本文不涉及任何充值、订阅、账号开通的内容,只聚焦一个核心问题:开通之后,Codex 到底怎么玩? 我会从最基础的界面操作讲起,逐步深入到真实项目开发,全程附带可运行的代码示例和实操案例,帮你把 Codex 从"玩具"变成"生产力工具"。
2. 认识 Codex 的两种形态:云端版与本地版
在开始之前,你需要先搞清楚 Codex 的两种使用形态,因为它们的工作方式完全不同。
2.1 云端 Codex(Cloud Codex)
云端 Codex 运行在 OpenAI 的服务器上,你通过浏览器访问。它的特点是:
- 无需本地安装任何环境,打开浏览器就能用;
- OpenAI 为每个会话分配一个独立的云端沙箱容器;
- 沙箱预装了 Python、Node.js、Git 等常用工具;
- 你可以把 GitHub 仓库直接关联进来,让 Codex 克隆、修改、推送。
云端版适合快速验证想法、处理小型任务,或者你不想在本地折腾环境的时候使用。
2.2 本地 Codex(Local Codex / Codex CLI)
本地 Codex 是一个命令行工具,安装在你自己的电脑上,通过 OpenAI API 与你订阅的账号对接。它的特点是:
- 直接操作你本地的文件系统;
- 可以使用你自己配置的开发环境、依赖和工具链;
- 更适合接入你正在进行的真实项目;
- 需要你手动安装和配置。
两种形态各有优劣,本文会分别给出上手路径。对于初学者,我建议先从云端版开始,因为它零门槛;当你熟悉了 Codex 的工作方式之后,再迁移到本地 CLI 处理严肃项目。
3. 云端 Codex 快速上手:五分钟跑通第一个任务
3.1 进入 Codex 界面
登录 ChatGPT 网页版之后,在左侧边栏找到 Codex 入口(通常是一个独立的图标)。点击进入后,你会看到一个类似聊天窗口的界面,但它的底层是一个完整的云端开发环境。
3.2 第一个任务:让 Codex 写一个 Python 脚本
我们从一个最简单的任务开始。在 Codex 的输入框中输入:
请帮我写一个 Python 脚本,读取当前目录下的 data.csv 文件,计算每一列的平均值,并把结果输出到 summary.txt 中。如果 data.csv 不存在,请自动生成一份示例数据。
Codex 会开始工作,你会看到它:
最终它会在沙箱里生成类似这样的代码:
import csv
import random
from pathlib import Path
def generate_sample_data(path: Path, rows: int = 20, cols: int = 3) –> None:
"""生成示例 CSV 数据文件。"""
with open(path, "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow([f"col_{i}" for i in range(cols)])
for _ in range(rows):
writer.writerow([round(random.uniform(0, 100), 2) for _ in range(cols)])
def compute_column_averages(path: Path) –> dict[str, float]:
"""计算 CSV 每一列的平均值。"""
with open(path, "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
sums: dict[str, float] = {}
counts: dict[str, int] = {}
for row in reader:
for key, value in row.items():
sums[key] = sums.get(key, 0) + float(value)
counts[key] = counts.get(key, 0) + 1
return {key: sums[key] / counts[key] for key in sums}
def main() –> None:
data_path = Path("data.csv")
if not data_path.exists():
print("data.csv 不存在,正在生成示例数据…")
generate_sample_data(data_path)
averages = compute_column_averages(data_path)
with open("summary.txt", "w", encoding="utf-8") as f:
for col, avg in averages.items():
f.write(f"{col}: {avg:.2f}\\n")
print("计算完成,结果已写入 summary.txt")
if __name__ == "__main__":
main()
3.3 查看运行结果
Codex 执行完任务后,你可以在界面右侧看到生成的文件列表,点击 summary.txt 就能查看输出内容。如果运行出错,Codex 通常会自己读取报错信息、修复代码、重新运行,直到通过为止——这是它和普通聊天机器人的最大区别。
4. 关联 GitHub 仓库:让 Codex 帮你改真实项目
云端 Codex 最强大的功能之一,是能够直接关联你的 GitHub 仓库。这样它就能像一名真正的开发者一样,clone 代码、理解项目结构、修改文件、提交 PR。
4.1 关联仓库的步骤
4.2 实战案例:给一个 Python 项目添加单元测试
假设你关联了一个简单的计算器项目,仓库结构如下:
calculator/
├── calc.py
└── README.md
calc.py 的内容是:
def add(a, b):
return a + b
def subtract(a, b):
return a – b
def multiply(a, b):
return a * b
def divide(a, b):
if b == 0:
raise ValueError("Cannot divide by zero")
return a / b
现在你向 Codex 下达指令:
请为这个项目编写单元测试,使用 pytest 框架,覆盖所有函数的正常情况和边界情况(比如除以零)。测试写完后运行它们,确保全部通过。
Codex 会生成 test_calc.py:
import pytest
from calc import add, subtract, multiply, divide
def test_add():
assert add(2, 3) == 5
assert add(–1, 1) == 0
def test_subtract():
assert subtract(5, 3) == 2
assert subtract(0, 0) == 0
def test_multiply():
assert multiply(4, 3) == 12
assert multiply(–2, 5) == –10
def test_divide():
assert divide(10, 2) == 5
assert divide(7, 2) == 3.5
def test_divide_by_zero():
with pytest.raises(ValueError):
divide(1, 0)
然后它会自动运行 pytest,看到全部通过后,向你汇报结果,并询问是否需要提交 PR。
4.3 让 Codex 提交 Pull Request
当 Codex 完成修改后,你可以直接让它:
请把刚才的改动提交并推送到远程仓库,创建一个 Pull Request,标题为"Add unit tests for calculator module"。
Codex 会执行 git add、git commit、git push,然后通过 GitHub API 创建 PR。整个过程你只需要动嘴,不需要碰命令行。
5. 本地 Codex CLI:把 AI 编程助手装进你的终端
云端版适合快速任务,但如果你在做一个正经项目,本地 Codex CLI 才是真正的生产力工具。它直接跑在你的电脑上,操作你的真实代码库。
5.1 安装 Codex CLI
在终端中执行:
npm install -g @openai/codex
安装完成后,运行:
codex
首次运行会引导你配置 API Key 或登录账号。配置完成后,你就拥有了一个终端里的 AI 编程搭档。
5.2 本地实战:用 Codex 重构一段烂代码
假设你本地有一个 legacy.py 文件,内容如下:
def process(data):
result = []
for i in range(len(data)):
item = data[i]
if item % 2 == 0:
result.append(item * 2)
else:
result.append(item * 3)
return result
在项目目录下运行:
codex "请重构 process 函数,使用列表推导式,并添加类型注解和 docstring。保持功能完全一致。"
Codex 会直接修改 legacy.py,生成:
from typing import List
def process(data: List[int]) –> List[int]:
"""
对输入列表中的每个元素进行处理:
偶数乘以 2,奇数乘以 3。
Args:
data: 输入整数列表。
Returns:
处理后的整数列表。
"""
return [item * 2 if item % 2 == 0 else item * 3 for item in data]
5.3 让 Codex 解释代码
Codex CLI 不只是写代码,还能帮你理解代码。你可以这样问:
codex "请解释一下这个项目中 main.py 的核心逻辑,以及它依赖了哪些外部库。"
它会读取文件、分析依赖、给你一份清晰的解释。这对于接手别人留下的项目(或者几个月前自己写的项目)特别有用。
6. 进阶玩法:用 Codex 完成一个完整的小项目
掌握了基础操作之后,我们来做一个完整的实战:用 Codex 从零开发一个命令行待办事项管理工具。这个案例会展示 Codex 在真实开发流程中的完整能力。
6.1 需求描述
在 Codex 中输入:
请帮我开发一个命令行待办事项管理工具 todo.py,功能要求:
1. 支持添加任务:python todo.py add "任务描述"
2. 支持列出所有任务:python todo.py list
3. 支持标记完成:python todo.py done <任务ID>
4. 支持删除任务:python todo.py delete <任务ID>
5. 任务数据持久化保存到本地 JSON 文件
6. 使用 argparse 解析命令行参数
7. 代码要有清晰的函数划分和类型注解
6.2 Codex 生成的代码
Codex 会经过多轮思考,最终生成类似这样的完整实现:
#!/usr/bin/env python3
"""命令行待办事项管理工具。"""
import argparse
import json
from pathlib import Path
from typing import List, Dict, Optional
DATA_FILE = Path("todos.json")
def load_todos() –> List[Dict]:
"""从 JSON 文件加载待办事项列表。"""
if not DATA_FILE.exists():
return []
with open(DATA_FILE, "r", encoding="utf-8") as f:
return json.load(f)
def save_todos(todos: List[Dict]) –> None:
"""保存待办事项列表到 JSON 文件。"""
with open(DATA_FILE, "w", encoding="utf-8") as f:
json.dump(todos, f, ensure_ascii=False, indent=2)
def add_todo(description: str) –> None:
"""添加新的待办事项。"""
todos = load_todos()
new_id = max([t["id"] for t in todos], default=0) + 1
todos.append({"id": new_id, "description": description, "done": False})
save_todos(todos)
print(f"已添加任务 #{new_id}: {description}")
def list_todos() –> None:
"""列出所有待办事项。"""
todos = load_todos()
if not todos:
print("暂无待办事项。")
return
for todo in todos:
status = "[x]" if todo["done"] else "[ ]"
print(f"{status} #{todo['id']} {todo['description']}")
def mark_done(todo_id: int) –> None:
"""将指定 ID 的待办事项标记为已完成。"""
todos = load_todos()
for todo in todos:
if todo["id"] == todo_id:
todo["done"] = True
save_todos(todos)
print(f"任务 #{todo_id} 已标记为完成。")
return
print(f"未找到 ID 为 {todo_id} 的任务。")
def delete_todo(todo_id: int) –> None:
"""删除指定 ID 的待办事项。"""
todos = load_todos()
new_todos = [t for t in todos if t["id"] != todo_id]
if len(new_todos) == len(todos):
print(f"未找到 ID 为 {todo_id} 的任务。")
return
save_todos(new_todos)
print(f"任务 #{todo_id} 已删除。")
def main() –> None:
parser = argparse.ArgumentParser(description="命令行待办事项管理工具")
subparsers = parser.add_subparsers(dest="command")
add_parser = subparsers.add_parser("add", help="添加任务")
add_parser.add_argument("description", help="任务描述")
subparsers.add_parser("list", help="列出所有任务")
done_parser = subparsers.add_parser("done", help="标记任务完成")
done_parser.add_argument("todo_id", type=int, help="任务 ID")
delete_parser = subparsers.add_parser("delete", help="删除任务")
delete_parser.add_argument("todo_id", type=int, help="任务 ID")
args = parser.parse_args()
if args.command == "add":
add_todo(args.description)
elif args.command == "list":
list_todos()
elif args.command == "done":
mark_done(args.todo_id)
elif args.command == "delete":
delete_todo(args.todo_id)
else:
parser.print_help()
if __name__ == "__main__":
main()
6.3 测试运行
Codex 生成代码后,你可以直接在终端测试:
python todo.py add "学习 Codex"
python todo.py add "写一篇博客"
python todo.py list
python todo.py done 1
python todo.py list
python todo.py delete 2
Codex 甚至会自动帮你跑一遍这些命令,验证功能是否正常。如果发现问题,它会自己修复并重新测试。
7. 实用技巧与避坑指南
7.1 把大任务拆成小步骤
Codex 虽然强大,但一次性给它一个过于庞大的需求,容易导致它"迷失方向"。更好的做法是:
- 先让它搭建项目骨架;
- 再逐个实现功能模块;
- 最后统一测试和优化。
7.2 明确指定技术栈
Codex 默认会猜测你使用的技术栈。如果你有明确偏好,一定要在指令中说明:
请使用 Python 3.11 + FastAPI 实现这个接口,数据库用 SQLite,ORM 用 SQLAlchemy 2.0。
7.3 让 Codex 先解释再动手
对于复杂任务,你可以先让 Codex 输出实现方案,确认无误后再让它动手:
先不要写代码。请分析这个需求,给出技术方案和文件结构,我确认后再开始实现。
7.4 善用"测试驱动"指令
让 Codex 先写测试、再写实现,往往能得到更可靠的代码:
请先为这个函数编写单元测试,然后再实现函数本身,确保测试全部通过。
7.5 常见坑:权限与安全
- 云端 Codex 的沙箱是隔离的,但关联 GitHub 仓库时要注意权限范围;
- 本地 Codex 会直接修改你的文件,建议在 Git 分支上操作,方便回滚;
- 不要把 API Key 或敏感信息写在代码里让 Codex 提交。
8. 总结:从"会玩"到"玩转"
Codex 的学习曲线并不陡峭,关键在于转变思维方式:从"自己写代码"变成"指挥 AI 写代码"。你需要学会的是:
- 清晰描述需求;
- 合理拆分任务;
- 验证 AI 的输出;
- 在关键时刻人工介入。
当你熟练之后,Codex 可以帮你处理大量重复性工作——写单元测试、修 Bug、重构代码、写文档、做代码审查,让你把精力集中在真正需要人类创造力的地方。
现在,打开你的 Codex,从第一个小任务开始吧。哪怕只是让它帮你写一个"Hello World",也是迈出了从"会玩"到"玩转"的第一步。
网硕互联帮助中心


评论前必须登录!
注册