打开浏览器、切到 IDE、等插件加载——这些步骤每做一次,思路就断一次。Codex CLI 把 AI 编码助手搬到了终端里:你描述需求,它读你的项目文件,直接生成或修改代码,全程不离开命令行。对 Python 项目来说,这意味着加一个新 API endpoint、补一组测试、重构一个模块,都可以在 git add 之前完成。
Codex CLI 是什么
Codex CLI 是 OpenAI 开源的命令行编码代理(GitHub 仓库 openai/codex)。核心工作流程:
- 你在终端输入一条自然语言指令。
- Codex 读取当前目录下的文件,理解项目上下文。
- 它生成代码变更(新建文件、修改现有文件),并在沙箱中执行验证。
- 你审查变更,确认后提交。
它支持 ask(只回答不改代码)和 edit(直接改文件)两种模式,默认使用 OpenAI 的 codex-mini-latest 模型,也可以切换到 o4-mini 等模型处理更复杂的任务。
安装与首次运行
前提:Node.js ≥ 22,以及一个 OpenAI API key。
# 安装
npm install -g @openai/codex
# 设置 API key(也可以写在 .env 或 shell profile 里)
export OPENAI_API_KEY="sk-..."
# 进入你的 Python 项目目录
cd ~/projects/my-flask-app
# 第一次运行——问它一个问题,不改代码
codex ask "这个项目的目录结构是什么?主要入口文件在哪?"
ask 模式适合做代码审查、理解逻辑、排查问题。输出直接打印在终端,不会碰你的文件。
实战:给 Flask 项目加一个健康检查接口
下面用一个最小 Flask 项目演示 edit 模式。假设项目结构如下:
my-flask-app/
├── app.py
├── requirements.txt
└── tests/
└── test_app.py
现有 app.py 只有一个首页路由:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def index():
return jsonify({"message": "Hello, World!"})
if __name__ == "__main__":
app.run(debug=True)
现在你想加一个 /health endpoint,返回服务状态和版本号,同时补上对应的测试。一条指令就够了:
codex edit "在 app.py 中添加 /health endpoint,返回 JSON 包含 status=ok 和 version=1.0.0;同时在 tests/test_app.py 中补一个测试用例验证该 endpoint 的响应结构和状态码"
Codex 会读取 app.py 和 tests/test_app.py,理解现有代码风格,然后生成变更。完成后你可以用 git diff 检查:
git diff
预期变更大致如下——app.py 新增路由:
from flask import Flask, jsonify
app = Flask(__name__)
VERSION = "1.0.0"
@app.route("/")
def index():
return jsonify({"message": "Hello, World!"})
@app.route("/health")
def health():
return jsonify({"status": "ok", "version": VERSION}), 200
if __name__ == "__main__":
app.run(debug=True)
tests/test_app.py 新增测试:
import json
import unittest
from app import app
class TestApp(unittest.TestCase):
def setUp(self):
self.client = app.test_client()
def test_index(self):
resp = self.client.get("/")
self.assertEqual(resp.status_code, 200)
data = json.loads(resp.data)
self.assertEqual(data["message"], "Hello, World!")
def test_health(self):
resp = self.client.get("/health")
self.assertEqual(resp.status_code, 200)
data = json.loads(resp.data)
self.assertEqual(data["status"], "ok")
self.assertEqual(data["version"], "1.0.0")
if __name__ == "__main__":
unittest.main()
确认没问题后提交:
git add -A && git commit -m "feat: add /health endpoint with test"
如果变更不符合预期,直接 git checkout . 撤销,重新调整指令再跑一次。
几个实用模式
除了"加功能",Codex CLI 在 Python 项目里还能覆盖这些场景:
补类型标注。 Python 项目逐步加 type hints 是常见需求,但手动标注很枯燥:
codex edit "给 app.py 里所有函数参数和返回值加上 type hints,遵循 PEP 484 风格"
生成配置文件。 需要 Dockerfile 或 CI 配置但不想从头写:
codex edit "为这个 Flask 项目生成一个多阶段 Dockerfile,用 python:3.12-slim 作为基础镜像,暴露 8000 端口"
批量重构。 把散落在多处的硬编码字符串收拢成常量:
codex edit "把 app.py 和 utils.py 中所有硬编码的 API 路径前缀提取为 constants.py 里的 BASE_PATH 常量,然后替换引用"
只问不改。 排查问题时不想让 AI 碰代码:
codex ask "test_app.py 里 test_health 为什么会报 404?列出可能的原因"
模型选择与成本控制
Codex CLI 默认用 codex-mini-latest,速度快、成本低,适合大多数编辑任务。遇到需要深度推理的场景(跨模块重构、复杂 bug 分析),可以切换模型:
# 用 o4-mini 处理复杂任务
codex edit --model o4-mini "重构整个认证模块,把 session 认证换成 JWT,保持所有现有接口兼容"
# 用 ask 模式做深度分析
codex ask --model o4-mini "这个项目的数据库迁移策略有什么风险?给出改进建议"
成本方面,codex-mini-latest 单次编辑任务通常在 $0.01–$0.05,o4-mini 大约 $0.05–$0.15。建议在 .env 里设置合理的月度预算上限:
# .env
OPENAI_API_KEY=sk-...
CODEX_MONTHLY_BUDGET=10.00
安全边界与最佳实践
Codex CLI 默认在网络隔离的沙箱中执行命令,但文件系统是可写的。几个值得注意的点:
- 始终在 Git 仓库中使用。 这样任何变更都可以
git diff审查、git checkout .撤销。没有版本控制就不要用edit模式。 - 先 ask,再 edit。 对陌生项目先用
ask模式摸清结构,确认理解正确后再让 AI 改代码。 - 指令要具体。 "加一个健康检查"比"改一下代码"产出更可控。指定文件名、函数名、期望的 JSON 结构,减少歧义。
- 审查不要跳过。 AI 生成的代码可能引入依赖、改变错误处理逻辑、遗漏边界情况。逐行看
git diff,和看同事的 PR 一样认真。 - 敏感文件排除。 如果项目里有
.env、密钥文件或生产配置,在指令中明确说"不要修改这些文件",或者把它们加入.gitignore让 Codex 无法读取。
上手清单
npm install -g @openai/codexexport OPENAI_API_KEY="sk-..."- 进入 Python 项目目录,确保项目在 Git 仓库中
codex ask "描述一下这个项目的结构和主要模块"— 先摸底codex edit "具体需求描述"— 让它改代码git diff— 审查变更- 满意则
git commit,不满意则git checkout .撤销重来
终端里完成需求描述、代码生成、审查、提交,整个链路不需要切换窗口。对于日常的 Python 项目维护——加接口、补测试、写配置、做重构——Codex CLI 把"想"和"做"之间的距离压缩到了一条命令。