尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

OpenAI Codex与Codex CLI实战:用AI自动生成Python单元测试并跑通流水线

OpenAI Codex与Codex CLI实战:用AI自动生成Python单元测试并跑通流水线 最近经常看到一句话OpenAI数周工作强度堪比数年。抛开夸张成分背后确实有一整套工具链在支撑这种“高密度研发”——从 API 自动化、代码生成、代码库分析到任务编排AI 已经被深度嵌入了开发流程。本文不打算讨论公司管理或研发节奏这种话题而是从一名开发者的实际视角把 OpenAI 这套工程化能力拆开来看OpenAI Codex 是什么、Harness 是什么、API Key 怎么配置、Codex CLI 怎么用、如何用 Python 把 AI 能力接进自己的项目。即使你是刚入门 AI 开发的新手也可以照着本文一步步跑通一个完整示例。1. 背景与核心概念1.1 什么是 OpenAI CodexOpenAI Codex 最初是一个基于 GPT 系列模型的代码生成能力模型后来逐步演化成一套面向代码任务的工具链。2025 年 4 月OpenAI 开源了 Codex CLI 和 Codex Harness这标志着一部分 AI 研发工具开始从“黑盒 API”走向“可本地部署、可定制、可审计”的开发基础设施。简单理解Codex 是“会写代码的 AI 引擎”。Codex CLI 是官方提供的命令行工具可以让它在你的终端里读取代码、写代码、执行命令、提交 PR。Codex Harness 则更像一套用来评测、训练、运行“AI 智能体”的框架它能模拟多种任务场景并评估 AI 在真实软件工程问题上的表现。“数周工作强度堪比数年”这种说法从工程角度看实际上是指过去需要人工阅读、修改、测试的大量代码操作现在可以由 AI 辅助完成人类把精力集中在结果验收和架构决策上。1.2 这套工具解决什么问题传统开发流程中很多时间消耗在非核心但必要的工作上查阅 API 文档拼写参数。写单元测试覆盖常见分支。处理重复性重构。分析历史代码逻辑。把自然语言需求翻译成初步代码。Codex 这类工具解决的核心问题就是把这些“确定性不足、但模式化程度高”的工作交给大模型。它并不是替代程序员而是像一个“随叫随到的结对编程者”帮助你很快形成可运行的初稿再由你审查、调整和合入。1.3 你需要掌握哪些前置知识本文将涉及以下内容基础 Python 语法能读懂函数和文件操作。命令行操作能执行pip install、python xxx.py。一个 OpenAI 账号并能获取 API Key如果暂时没有也可以先看流程后续再申请。了解 HTTP 请求和 JSON 格式的基础概念。如果你暂时没有 API Key不影响阅读本文会给出完整的配置思路和代码示例你可以等账号就绪后直接复用。1.4 本文的实践主线为了让内容不悬空我会围绕一个真实的开发场景来展开有一个 Python 项目中存在一个可以自动生成的单元测试文件我们想用 Codex CLI 分析代码库结构推荐测试用例再通过 OpenAI API 调用生成测试代码最后把代码写入本地文件并运行验证。通过这个过程你能看到不同 OpenAI 工具的使用边界。命令行工具与 API 编程的配合方式。一次相对完整的 AI 辅助开发闭环。2. 环境准备与版本说明2.1 开发环境本文示例以如下环境为例版本可根据你的实际情况调整重点演示配置思路项目示例版本操作系统macOS / Ubuntu 20.04Python3.10包管理工具pipOpenAI Python SDKopenai1.30.0代码编辑器VS Code可选Codex CLI截至 2025 年的开源版本如果你的 Python 环境版本较低建议先升级 Python或者使用venv创建独立环境避免系统库冲突。2.2 创建 Python 虚拟环境推荐所有实验都放在虚拟环境中执行便于隔离依赖。mkdir openai-dev-practice cd openai-dev-practice python3 -m venv venv source venv/bin/activateWindows 环境下激活命令是venv\Scripts\activate激活之后会看到命令行前面出现(venv)前缀表示当前处于虚拟环境。2.3 安装依赖pip install --upgrade openai pip install python-dotenvopenai是官方 Python SDK用于调用 APIpython-dotenv用来读取.env环境变量文件方便我们安全保存 API Key。2.4 准备 OpenAI API KeyOpenAI 的 API 密钥需要在官方平台创建字段比较长类似sk-xxxxxxxxxxxxxxxxxxxxxxxx注意API Key 是一次性展示创建后一定要保存好。不要把 Key 硬编码到代码里更不要提交到 Git 仓库。建议放到项目的.env文件中并在.gitignore中忽略它。在项目根目录创建.env文件touch .env内容如下OPENAI_API_KEYsk-xxxxxxxxxxxxxxxxxxxxxxxx然后创建.gitignore.env venv/ __pycache__/这样即使项目推送到远程仓库也不会泄露密钥。2.5 Codex CLI 安装说明Codex CLI 的安装方式根据你的系统和网络环境可能不同最稳妥的做法是参考官方 GitHub 仓库 README。以下是一种常见的安装思路npm install -g openai/codex安装完成后可以通过codex --version检查是否安装成功。需要注意Codex CLI 运行时也需要使用 OpenAI 认证信息通常可以读取环境变量OPENAI_API_KEY所以刚才的.env文件配置同样适用也可以在 Codex 配置文件中单独设置。2.6 项目结构规划本文的示例项目结构如下openai-dev-practice/ ├── .env ├── .gitignore ├── requirements.txt ├── src/ │ └── calculator.py ├── codex_poc/ │ ├── generate_tests.py │ └── run_pipeline.py └── tests/ └── test_calculator.py其中src/calculator.py是待测试的业务代码。codex_poc/generate_tests.py是用 OpenAI API 生成测试用例的脚本。codex_poc/run_pipeline.py是串联整个流程的入口。tests/test_calculator.py是最终生成的测试文件。3. 核心语法与配置拆解3.1 OpenAI API 基础调用OpenAI Python SDK 的调用方式比较稳定核心是client.chat.completions.create()方法。下面是一个最小示例from openai import OpenAI client OpenAI() # 默认读取 OPENAI_API_KEY 环境变量 response client.chat.completions.create( modelgpt-4o-mini, messages[ {role: system, content: 你是一个 Python 开发助手。}, {role: user, content: 请用 Python 写一个两数相加的函数。}, ], temperature0.2, ) print(response.choices[0].message.content)这里有几个需要注意的点OpenAI()不传参数时会自动读取环境变量OPENAI_API_KEY。因此.env配置必须能被当前进程加载。messages是一个数组包含系统角色system和用户角色user对话内容。model参数指定模型名称选择哪些模型取决于你的账号权限和实际需求。temperature是采样温度值越低输出越稳定代码场景一般建议0.2左右。3.2 加载 .env 文件Python 不会自动读取.env文件需要手动加载from dotenv import load_dotenv load_dotenv()这样OPENAI_API_KEY就会进入当前进程的环境变量。完整写法import os from dotenv import load_dotenv from openai import OpenAI load_dotenv() client OpenAI(api_keyos.getenv(OPENAI_API_KEY))虽然显式传入 api_key 更明显但更推荐依赖环境变量避免代码中出现密钥。3.3 Codex CLI 的常用命令Codex CLI 提供了交互式会话和命令行执行两种模式。进入交互模式codex直接执行一段任务codex exec 请分析当前目录下的 Python 文件并输出文件清单如果你没有配置OPENAI_API_KEY运行时可能会要求你登录或者手动输入认证信息。具体认证方式请以当前版本为准。3.4 Codex Harness 的概念Codex Harness 是一个更复杂的开源框架它的目标是模拟真实的软件工程任务环境并驱动 Codex 智能体完成任务。在 Harness 中通常会有几个核心元素任务描述比如“修复某个测试失败的用例”。代码仓库提供一个模拟的项目目录。运行上下文包括环境变量、可执行的命令、超时时间等。评估器用于判断智能体是否成功完成任务。对于大多数开发者来说直接用 Harness 的机会不多但它代表了一种趋势AI 开发工具正在从“单轮对话”走向“多步骤自主执行”。了解这个概念有助于你设计自己的自动化流水线。3.5 API 还是 CLI如何选择这里有一个判断标准如果你的流程是固定的、程序化的比如每天定时分析代码、自动生成报告推荐用 API 方式。如果你是想在终端里和 AI 协作直接让它改代码、运行命令推荐用 Codex CLI。如果你在做学术研究或工具开发想评估不同 AI 智能体在软件工程任务上的表现可以深入看 Harness。本文后面的实战案例会同时覆盖 API 和 CLI 两种用法。4. 完整实战案例4.1 创建业务代码先创建一个简单的计算器模块。文件路径src/calculator.pydef 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(除数不能为0) return a / b这是一个很基础的工具类我们接下来要让 AI 为它自动生成单元测试。4.2 写一个用 API 生成测试用例的脚本文件路径codex_poc/generate_tests.pyfrom openai import OpenAI from dotenv import load_dotenv load_dotenv() client OpenAI() CODE_CONTEXT 请为以下 Python 模块生成 pytest 单元测试用例要求覆盖正常场景和异常场景输出完整的 pytest 代码不要额外解释。 模块代码 from src.calculator import add, subtract, multiply, divide def generate_test_cases(): response client.chat.completions.create( modelgpt-4o-mini, messages[ { role: system, content: 你是一名专业 Python 工程师擅长编写严谨的 pytest 测试用例。, }, {role: user, content: CODE_CONTEXT}, ], temperature0.2, max_tokens1000, ) return response.choices[0].message.content if __name__ __main__: content generate_test_cases() print(content)运行这个脚本python codex_poc/generate_tests.py如果 API Key 配置正确你会看到控制台输出一段 pytest 代码。4.3 把 AI 输出写入测试文件上面的脚本只负责生成并打印我们进一步改进让它直接写入tests/test_calculator.py。文件路径codex_poc/generate_tests.py修改版import os from openai import OpenAI from dotenv import load_dotenv load_dotenv() client OpenAI() OUTPUT_PATH os.path.join( os.path.dirname(__file__), .., tests, test_calculator.py, ) def build_prompt(): return 请为以下 Python 模块生成 pytest 单元测试用例要求覆盖正常场景和异常场景输出完整的 pytest 代码不要额外解释。 模块代码 from src.calculator import add, subtract, multiply, divide def generate_test_cases(): response client.chat.completions.create( modelgpt-4o-mini, messages[ { role: system, content: 你是一名专业 Python 工程师擅长编写严谨的 pytest 测试用例。, }, {role: user, content: build_prompt()}, ], temperature0.2, max_tokens1500, ) return response.choices[0].message.content def save_to_file(content): tests_dir os.path.dirname(OUTPUT_PATH) os.makedirs(tests_dir, exist_okTrue) with open(OUTPUT_PATH, w, encodingutf-8) as f: f.write(content) print(f测试文件已保存到{OUTPUT_PATH}) if __name__ __main__: test_content generate_test_cases() save_to_file(test_content)这里的关键是OUTPUT_PATH定位到项目根目录下的tests文件夹。os.makedirs(exist_okTrue)防止目录不存在导致写入失败。utf-8编码避免中文字符乱码。注意AI 生成代码虽然质量不错但直接写入文件前最好人工检查一遍尤其是在正式项目中。4.4 使用 Codex CLI 分析代码库现在换个思路我们用 Codex CLI 分析整个项目结构看看它能给出怎样的建议。在项目根目录执行codex exec 请忽略 .env 和 venv 目录列出当前 Python 项目中建议补充测试的模块并说明理由预期的执行流程是Codex CLI 读取当前目录。识别 Python 文件。结合任务指令返回分析和建议。如果你还没有配置好 CLI也可以先跳过这一步继续看下面的自动化流程。4.5 构建完整的自动化流水线为了让流程可复现我们写一个入口脚本把“分析代码 → 生成测试 → 运行测试”串起来。文件路径codex_poc/run_pipeline.pyimport os import subprocess import sys from dotenv import load_dotenv load_dotenv() PROJECT_ROOT os.path.abspath(os.path.join(os.path.dirname(__file__), ..)) def run_task(task_name, cmd): print(f 开始{task_name} ) result subprocess.run(cmd, shellTrue, cwdPROJECT_ROOT) if result.returncode ! 0: print(f任务失败{task_name}) sys.exit(result.returncode) print(f 结束{task_name} \n) def main(): run_task(安装依赖, pip install -r requirements.txt) run_task(生成测试用例, python codex_poc/generate_tests.py) run_task(运行 pytest, pytest tests/test_calculator.py -v) if __name__ __main__: main()如果你还没有安装 pytest先安装pip install pytest然后运行python codex_poc/run_pipeline.py4.6 预期结果说明如果一切正常你会依次看到依赖安装输出。测试文件生成成功提示。pytest 运行的通过结果。比如类似 开始生成测试用例 测试文件已保存到/Users/yourname/openai-dev-practice/tests/test_calculator.py 结束生成测试用例 开始运行 pytest test session starts collected 8 items tests/test_calculator.py .......这里的数据只是示例实际生成的用例数量会随模型输出而变化。4.7 如果测试跑了但结果不稳定怎么办AI 生成测试时可能存在以下情况生成了不存在的函数导致 import 失败。测试用例覆盖范围不够。断言方式不符合业务预期。这时候不需要反复重跑而是应该改进 prompt。比如加上“请基于以下具体函数签名进行测试”或者直接在 prompt 中粘贴完整的函数列表。更稳妥的方式是让 AI 生成测试用例但仍然由开发者主导用例设计和边界确认。5. 常见问题与排查思路5.1 API 调用报错问题现象常见原因解决思路AuthenticationErrorAPI Key 无效或未加载检查.env文件是否配置正确确认环境变量已加载RateLimitError请求频率或额度超限检查账号配额降低请求频率或启用梯度重试InsufficientQuota账号余额不足在官方控制台检查余额和计费设置网络超时本地网络访问不稳定适当提高timeout并做好重试逻辑下面是一个带重试逻辑的调用示例import time from openai import OpenAI from dotenv import load_dotenv load_dotenv() client OpenAI() def generate_with_retry(max_retries3): for attempt in range(max_retries): try: response client.chat.completions.create( modelgpt-4o-mini, messages[ {role: user, content: 请用一句话介绍 Python 装饰器。} ], temperature0.2, ) return response.choices[0].message.content except Exception as e: print(f第 {attempt 1} 次请求失败{e}) if attempt max_retries - 1: time.sleep(2 ** attempt) raise RuntimeError(多次请求失败请检查网络和配置)5.2 Codex CLI 无法执行问题现象常见原因解决思路codex: command not foundNode.js 环境未安装或安装失败检查 node/npm 是否正常重新执行安装命令登录失败认证方式不匹配查看当前版本的官方 README确认 CLI 支持的认证方式权限不足用户对当前目录无写权限切换到有权限的目录或调整目录权限5.3 生成代码不符合预期AI 输出质量受 prompt 影响很大。建议在 prompt 中明确输入输出示例。边界条件。代码风格要求。禁止使用的库。比如请生成一个 Python 函数 get_user_name(user_id: int) - str 1. 如果用户不存在返回 unknown。 2. 不要使用数据库直接使用内存字典模拟。 3. 输出格式为纯代码不要解释。明确的约束条件会显著提升生成质量。6. 最佳实践与工程建议6.1 API Key 的安全管理这是最重要的一条。API Key 一旦泄露别人可以消耗你的账号额度造成经济损失。推荐做法使用.env保存不提交到 Git。服务器部署时使用密钥管理服务或环境变量注入。定期轮换密钥。为不同项目创建独立的 API Key方便追踪和回收。6.2 控制调用成本AI API 是按 token 计费也就是按输入和输出的文本量计算。要想控制成本可以从以下几方面入手精选模型简单任务用轻量模型复杂任务用强模型。控制上下文长度不要把整个项目文件都塞进 prompt。缓存结果对稳定输入的 prompt可以缓存 AI 输出避免重复请求。设置max_tokens限制最大输出长度。一个实用技巧先在本地编写好 prompt确认无误后再程序化调用避免反复调试浪费 token。6.3 人工审查不可省略AI 生成的代码不一定正确尤其是涉及安全性、并发、数据一致性时。建议把 AI 生成的代码当成“初稿”必须经过代码评审。静态检查。单元测试。人工确认业务逻辑。在非关键场景下可以直接用但生产环境要格外谨慎。6.4 设计可复用的 Prompt 模板如果团队经常使用 AI 生成工具可以把 prompt 沉淀成模板放到专门的prompts/目录中。例如文件路径prompts/test_case_generator.md你是一名 Python 测试工程师。 请为以下代码生成 pytest 单测。 要求 1. 覆盖正常路径和异常路径。 2. 不使用外部数据库。 3. 只输出代码不要解释。 代码 {code}然后在代码中读取模板文件from pathlib import Path prompt_template Path(prompts/test_case_generator.md).read_text(encodingutf-8) prompt prompt_template.replace({code}, source_code)这样可以减少 AI 输出的随机性提升团队协作效率。6.5 把 AI 工具嵌入 CI 流程更进一步可以将这类能力接入 CI/CD比如每次 MR 时自动调用 AI 生成变更说明。代码扫描时让 AI 辅助分析潜在问题。单元测试缺失时自动推荐补全用例。前提是控制好时间消耗。结果只作为辅助建议不阻塞流水线。保留日志方便追踪。6.6 多工具配合构建研发闭环OpenAI 的工具链已经不再是单点能力。一个相对完整的闭环可以是用 Codex CLI 在本地快速探索代码库。用 API 自动生成标准化代码文件。用 pytest 等测试框架验证结果。让 AI 根据测试结果反馈优化 prompt。最终由人工合入代码。这也是“数周工作强度堪比数年”真正落地的方式不是盲目追求速度而是让 AI 承接重复劳动让开发者集中精力做决策和验收。7. 后续学习方向到这里你已经完成了一次从 API 调用到本地文件输出、再到测试验证的完整闭环。下一步可以继续深入的内容包括研究 Codex Harness 的评测机制理解 AI 智能体在真实任务中的表现。尝试用 Codex CLI 结合 Git 钩子实现提交前自动检查。把 OpenAI API 集成到自己的 Web 服务中做一个更完整的代码生成平台。学习 prompt engineering提升同样模型下的输出稳定性。关注 OpenAI 官方版本更新及时调整模型名称和接口参数。如果你现在正处于学习 AI 工程化、想做自动化开发工具的阶段建议先从 API 调用和 CLI 命令开始多跑几个小实验再逐步扩大应用范围。实际项目中的关键不是模型多强而是你如何把模型放进一个可控制、可审查、可重试的工作流里。
返回列表