用 Codex CLI 在终端里给 Python 项目加功能

2026-05-05 21 预计阅读时间:1 分钟
来源:realpython.com AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:9 分钟

打开浏览器、切到 IDE、等插件加载——这些步骤每做一次,思路就断一次。Codex CLI 把 AI 编码助手搬到了终端里:你描述需求,它读你的项目文件,直接生成或修改代码,全程不离开命令行。对 Python 项目来说,这意味着加一个新 API endpoint、补一组测试、重构一个模块,都可以在 git add 之前完成。

Codex CLI 是什么

Codex CLI 是 OpenAI 开源的命令行编码代理(GitHub 仓库 openai/codex)。核心工作流程:

  1. 你在终端输入一条自然语言指令。
  2. Codex 读取当前目录下的文件,理解项目上下文。
  3. 它生成代码变更(新建文件、修改现有文件),并在沙箱中执行验证。
  4. 你审查变更,确认后提交。

它支持 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.pytests/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 无法读取。

上手清单

  1. npm install -g @openai/codex
  2. export OPENAI_API_KEY="sk-..."
  3. 进入 Python 项目目录,确保项目在 Git 仓库中
  4. codex ask "描述一下这个项目的结构和主要模块" — 先摸底
  5. codex edit "具体需求描述" — 让它改代码
  6. git diff — 审查变更
  7. 满意则 git commit,不满意则 git checkout . 撤销重来

终端里完成需求描述、代码生成、审查、提交,整个链路不需要切换窗口。对于日常的 Python 项目维护——加接口、补测试、写配置、做重构——Codex CLI 把"想"和"做"之间的距离压缩到了一条命令。


相关推荐