Claude Code 实战:TaoToken 跑通 Python 仓库测试修复
2026/9/20 17:06:51 网站建设 项目流程

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度

1. 先把目标定清楚:让 Claude Code 在真实 Python 仓库里跑完一轮“失败到通过”

这篇要解决的是一个很具体的问题:你手上有一个 Python 仓库,pytest跑起来有失败用例,你想让 Claude Code 以 Agent 的方式自动定位、改代码、再跑测试,直到通过,并且把这一轮循环里的请求次数和 diff 规模记录下来。适合已经会用命令行、但对 Agent 工作流还不熟的人,也适合想把 Claude Code 接进日常修 bug 流程的开发者。

我试过把这件事拆成三个可验证的产物:一份能复现的失败测试输出、一份修复后的通过输出、一份从失败到通过的完整命令轨迹。只要这三样都在,就说明这个循环真的跑通了,而不是“看起来改了点什么”。

TaoToken 在这里的角色是默认供应商。你不需要在多个平台之间来回切,注册后拿到 Key,把 Claude Code 的 API Base URL 指向https://taotoken.net/api,模型 ID 指定GLM 5.3 Flash,剩下的交给 Claude Code 自己迭代。下面按“准备仓库 → 接入配置 → 跑循环 → 看结果”的顺序来。

2. 准备一个会失败的 Python 仓库和 pytest 基线

为了让过程可复现,先造一个最小仓库。它只有一个模块和一个测试文件,测试里故意留一个边界条件错误,这样pytest一定失败。

mkdir -p demo-repo/src demo-repo/tests cd demo-repo

写一个简单的折扣计算模块:

# src/discount.py def apply_discount(price: float, percent: float) -> float: """percent 为 0-100 的折扣百分比,返回折后价。""" if percent < 0 or percent > 100: raise ValueError("percent must be between 0 and 100") return price - price * percent / 100

再写测试,其中一条用例覆盖 100% 折扣的边界:

# tests/test_discount.py import pytest from src.discount import apply_discount def test_normal_discount(): assert apply_discount(100, 20) == 80 def test_full_discount(): assert apply_discount(100, 100) == 0 def test_invalid_percent(): with pytest.raises(ValueError): apply_discount(100, 120)

先跑一次基线,确认失败:

python -m pytest -q

你会看到类似输出(版本不同行号可能略有差异):

.F. [100%] =================================== FAILURES =================================== _______________________________ test_full_discount _____________________________ def test_full_discount(): > assert apply_discount(100, 100) == 0 E assert 0.0 == 0 tests/test_discount.py:8: AssertionError =========================== short test summary info ============================ FAILED tests/test_discount.py::test_full_discount - assert 0.0 == 0 1 failed, 2 passed in 0.03s

失败原因是浮点结果0.0和整数0比较。这个错误足够小,适合观察 Agent 的修改范围;又足够真实,能触发“读测试 → 改实现或改断言 → 重跑”的完整循环。把这次输出存下来,后面要和修复后的输出对照。

3. 接入 TaoToken 并配置 Claude Code

先去官网注册并创建 Key:

https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_content=

注册完成后进入控制台创建 API Key,页面在这里:

https://taotoken.net/console

Key 的管理入口在:

https://taotoken.net/api-keys

拿到 Key 之后,用环境变量注入,不要写进代码仓库。Claude Code 读取的是 Anthropic 兼容的配置,把 Base URL 指向 TaoToken 的 API 地址:

export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的TaoToken密钥" export ANTHROPIC_MODEL="GLM 5.3 Flash"

如果你希望配置持久化,可以写进 shell 的启动文件,或者用 Claude Code 自己的配置文件。模型 ID 这里明确指定GLM 5.3 Flash,它是这一轮循环里负责读代码、生成补丁、解释测试输出的模型。接入文档在:

https://taotoken.net/doc

配置完成后,先做一次最小连通性检查,确认 Claude Code 能正常发起请求:

claude -p "用一句话说明当前目录下有哪些 Python 文件" --model "GLM 5.3 Flash"

如果返回了文件列表,说明 Base URL、Key、模型 ID 三件事都对上了。如果报 401,优先检查 Key 是否复制完整;如果报 404,检查 Base URL 是否误加了路径后缀。TaoToken 的 API 地址就是https://taotoken.net/api,不要自己拼/v1之类的后缀。

4. 跑一轮仓库级测试修复循环,并记录请求次数与 diff 规模

现在进入核心环节。Claude Code 的 Agent 模式可以接受一个任务描述,然后自己决定读哪些文件、改哪里、跑什么命令。我们给它一个明确的边界:只修tests/test_discount.py里失败的用例,不要动其他测试,改完必须重跑pytest

启动方式:

claude --model "GLM 5.3 Flash"

进入交互后输入任务:

当前仓库 pytest 有 1 个失败用例 test_full_discount。 请定位失败原因,做最小修改让全部测试通过。 要求:只允许修改 src/discount.py 或 tests/test_discount.py; 每次修改后运行 python -m pytest -q; 最后输出你执行的完整命令列表和 git diff --stat 的结果。

Claude Code 会先读测试文件和实现文件,然后给出判断。它可能选择改实现,让返回值在 100% 折扣时是整数 0;也可能选择改断言,把== 0改成== 0.0。两种都能让测试通过,但 diff 规模不同。为了记录请求次数,可以在另一个终端观察 TaoToken 控制台的用量,或者用 Claude Code 的会话统计。

一次典型的命令轨迹如下:

# 1. 读取失败测试 python -m pytest -q # 2. 查看实现 cat src/discount.py # 3. 修改实现,处理浮点边界 # (Claude Code 内部编辑 src/discount.py) # 4. 重跑测试 python -m pytest -q # 5. 查看改动规模 git diff --stat

修复后pytest输出:

... [100%] 3 passed in 0.02s

git diff --stat输出:

src/discount.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)

如果 Claude Code 选择改测试断言,diff 会落在tests/test_discount.py,规模同样是 1 行左右。两种结果都算通过,但你要在记录里写清楚它改的是实现还是测试,因为这影响你对 Agent 行为的判断。请求次数方面,这一轮通常包含:一次读测试、一次读实现、一次生成补丁、一次重跑验证,合计 4 次左右的模型调用。具体数字以你控制台的实际用量为准,不同仓库复杂度会拉高这个数。

5. 失败分支、成本与模型选择

失败分支要提前想好。第一种是 Agent 改完还是失败,比如它只改了断言但没处理percent > 100的异常路径,这时pytest仍会报错。处理方式是追加一条指令:“还有失败用例,请继续,不要回退已有修改。”第二种是它改了不该改的文件,比如顺手格式化了整个模块,导致 diff 膨胀到几十行。这时用git checkout -- 文件名回退,再重新下任务,把“只允许修改这两个文件”写得更死。第三种是请求超时或返回空补丁,先确认模型 ID 拼写是否为GLM 5.3 Flash,再确认 Base URL 没有多余路径。

成本上,这一轮循环的 token 消耗主要来自读文件上下文和生成补丁。仓库越大,读进去的上下文越多,单次请求成本越高。GLM 5.3 Flash适合这种“读多写少、需要快速迭代”的修复任务;如果你的仓库有几百个测试文件,建议先用pytest -q缩小到具体失败文件,再让 Agent 介入,避免它把整个仓库读一遍。模型和价格以官网为准,不同时间可能有调整。

最后给一个实用技巧:把每一轮的pytest输出和git diff --stat追加到一个agent-log.md里,格式固定为“任务描述 / 命令轨迹 / 修复前输出 / 修复后输出 / diff 规模”。跑上五六轮之后,你会对“什么样的任务描述能让 Agent 一次改对”有手感,这比任何教程都直接。

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询