ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Codex 实战:TaoToken 跑通 Python 仓库的 pytest 修复

Codex 实战:TaoToken 跑通 Python 仓库的 pytest 修复 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度1. 让 Codex 自己读 pytest 日志、改源码、再跑一遍Codex 这类命令行 Agent 最舒服的用法不是让它从零写一个项目而是把它丢进一个已经有失败用例的 Python 仓库里让它自己看 pytest 的报错、定位断言、改源码、再跑测试确认。整个过程你只需要给一条任务 prompt剩下的读日志、改文件、重跑都由它完成。这篇就按这个场景走一遍准备一个含失败用例的仓库把 Codex 的默认供应商指向 TaoToken然后让它跑通 pytest 修复。适合谁看手上已经有 Python 项目、想让 Agent 帮忙处理测试失败、又不想在多个模型供应商之间来回切配置的人。前置条件很简单——本地有 Python 3.10、能装 pytest、有一个能跑起来的 Codex CLI。仓库不用复杂两三个文件、一个故意写错的断言就够了重点是让 Codex 有真实的失败日志可读。我试过用一个小工具仓库来演示里面一个calc.py做简单统计一个test_calc.py写了几条用例其中一条断言故意和实现不一致。Codex 要做的就是读pytest -q的输出找到那条 failed改calc.py再跑一次让它变绿。下面按仓库结构、任务 prompt、pytest 命令、修复 diff 摘要四块展开。2. 准备仓库目录结构与失败用例先建一个最小可复现的仓库。目录长这样pytest-demo/ ├── calc.py ├── test_calc.py └── requirements.txtcalc.py里放两个函数一个算平均值一个算中位数。中位数这里故意写错让它对偶数长度列表返回偏大的那个中间值而不是两个中间值的平均# calc.py def mean(nums): return sum(nums) / len(nums) def median(nums): s sorted(nums) n len(s) if n % 2 1: return s[n // 2] # 故意写错偶数长度时直接取右中位数 return s[n // 2]test_calc.py里针对中位数写一条会失败的用例# test_calc.py from calc import mean, median def test_mean(): assert mean([1, 2, 3, 4]) 2.5 def test_median_odd(): assert median([3, 1, 2]) 2 def test_median_even(): # 偶数长度应为两中间值平均即 (23)/2 2.5 assert median([1, 2, 3, 4]) 2.5requirements.txt只写一行pytest装依赖、跑一次确认失败cd pytest-demo python -m venv .venv source .venv/bin/activate # Windows 用 .venv\Scripts\activate pip install -r requirements.txt pytest -q预期输出里会有一条 failed指向test_median_even断言是2.5 3之类。这条失败日志就是后面要喂给 Codex 的输入。仓库本身不复杂但足够让 Agent 走完「读日志 → 定位 → 改码 → 复跑」的完整链路。3. 把 Codex 的默认供应商切到 TaoTokenCodex 支持自定义 Base URL 和 API Key所以只要在配置里把默认供应商指到 TaoToken后面所有请求都会走这个入口。先去官网创建 Key打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_generateutm_contentcodex_pytest 登录后在控制台创建 API Key。Key 只在创建时完整显示一次复制好放本地。拿到 Key 之后Codex 的配置一般放在~/.codex/config.toml不同版本路径可能略有差异以你本地codex --help或官方文档为准。核心是把 provider 的base_url设成https://taotoken.net/api并把 key 通过环境变量注入# ~/.codex/config.toml model gpt-5-codex model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api responses然后在 shell 里导出 Keyexport TAOTOKEN_API_KEYsk-你的KeyWindows PowerShell 用$env:TAOTOKEN_API_KEYsk-你的Key配置完先做一次连通性检查随便问一句让它回个短句确认请求能通、没有 401/404codex exec 回复 ok 两个字母即可如果返回正常说明 Base URL 和 Key 都对上了。这一步是整个流程里唯一需要手动配的地方配好之后 Codex 读日志、改文件、跑命令都不需要再动配置。模型名按你账号里可用的填具体可用模型和计费以官网为准。4. 任务 prompt 与 pytest 复跑配置通了之后在仓库根目录启动 Codex把任务说清楚。关键是让它自己跑 pytest、自己读输出而不是你手动把报错贴进去。一条够用的 prompt这是一个 Python 仓库pytest 有失败用例。 请你 1. 运行 pytest -q读取失败日志 2. 定位失败的断言和对应源码函数 3. 修改源码让测试通过不要改测试用例 4. 重新运行 pytest -q 确认全部通过 5. 最后用 diff 摘要说明你改了什么。启动方式cd pytest-demo codex exec $(cat task.txt)把上面那段 prompt 存成task.txt也行直接内联也行。Codex 会先执行pytest -q拿到类似这样的输出FAILED test_calc.py::test_median_even - assert 3 2.5 1 failed, 2 passed in 0.03s它会顺着test_median_even找到calc.py里的median发现偶数分支直接返回了s[n // 2]而正确逻辑应该是两个中间值取平均。改完之后它再跑一次pytest -q输出变成3 passed in 0.02s修复的 diff 摘要大致是def median(nums): s sorted(nums) n len(s) if n % 2 1: return s[n // 2] - # 故意写错偶数长度时直接取右中位数 - return s[n // 2] mid n // 2 return (s[mid - 1] s[mid]) / 2到这里任务闭环失败日志被读取、断言被定位、源码被修改、测试被复跑确认。整个过程 Codex 只依赖 pytest 的输出不需要你额外描述 bug 在哪。5. 可验证结果与失败分支可验证的结果很直接pytest -q从1 failed, 2 passed变成3 passed且测试文件没被改动。你可以用git diff --stat确认只有calc.py变了git diff --stat # calc.py | 4 -- # 1 file changed, 2 insertions(), 2 deletions(-)如果结果不对常见分支有这几种。一是 Codex 改了测试用例而不是源码——这通常是因为 prompt 里没写死「不要改测试」补上约束再跑一次即可。二是它跑 pytest 时用了系统 Python 而不是虚拟环境导致 import 失败这时在 prompt 里指定source .venv/bin/activate pytest -q或者直接给绝对路径./.venv/bin/pytest -q。三是请求层面报 401多半是TAOTOKEN_API_KEY没导出或 Key 复制不全报 404 则检查base_url是不是写成了带路径的地址正确值是https://taotoken.net/api。四是模型返回了但没执行命令可能是当前模型不支持工具调用换一个支持 function calling 的模型再试。还有一种情况是仓库里失败用例不止一条Codex 改完第一条就停了。这时把 prompt 里的「让测试通过」改成「让全部测试通过逐条处理直到 pytest 全绿」它会继续迭代。每次迭代都会重新跑 pytest所以最终状态是可验证的不靠它口头保证。6. 限制、成本与模型选择这套流程有几个边界要说清楚。Codex 读的是 pytest 的文本输出如果失败信息被截断或日志量特别大它可能漏掉关键断言仓库越大越明显必要时先用pytest -q --tbshort压缩输出。它改的是源码对涉及并发、外部服务、数据库状态的测试单靠读日志不一定能定位这类失败更适合人工介入。另外 Agent 会真实执行命令在仓库里跑之前确认没有破坏性脚本被误触发。成本方面Codex 每轮读日志、改文件、复跑都会产生 token 消耗迭代次数越多花得越多。模型选择上代码类任务优先选支持工具调用、上下文窗口够大的型号具体可用清单、单价和计费方式以官网为准不同账号可能不一样。如果只是偶尔修一两个断言用默认模型就够如果是长期在多个仓库里跑 Agent可以考虑 Coding Plan 这类按周期计费的方式把成本摊平。配置入口和文档都在官网Key 在控制台创建接入细节看文档页。把 Base URL 固定成https://taotoken.net/api之后Codex 这边就不用再为每个项目单独配供应商了换仓库只换工作目录配置不动。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进