🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. 任务目标与最终产物
本文要完成的是一个仓库级 Agent 实战:让 Claude Code 在本地 Python 仓库中定位一个失败的 pytest 用例,读取报错、修改源码、重跑测试,直到用例通过。整个过程由 Claude Code 作为执行主体,模型侧使用 DeepSeek V4.1 Flash,通过 TaoToken 完成 Key 获取与模型切换。TaoToken 的官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=csdn&utm_campaign=generate&utm_content=python_pytest_agent ,API 基址为 https://taotoken.net/api 。
最终需要交付四类产物:一段可直接粘贴给 Claude Code 的仓库级任务 prompt;一份修复后的 diff;一条 pytest 重跑命令;以及通过后的终端输出。本文不包含任何排行分数,也不对模型能力做跑分式评价,只记录一次可复现的修复流程。
2. 环境准备与操作步骤
2.1 准备一个带失败用例的 Python 仓库
为了让流程可复现,先构造一个最小仓库。目录结构如下:
pytest-agent-demo/ ├── pyproject.toml ├── src/ │ └── calc/ │ ├── __init__.py │ └── stats.py └── tests/ └── test_stats.pysrc/calc/stats.py中故意留一个边界错误:
# src/calc/stats.py from typing import Iterable def mean(values: Iterable[float]) -> float: data = list(values) total = 0.0 for item in data: total += item return total / len(data) def median(values: Iterable[float]) -> float: data = sorted(values) n = len(data) mid = n // 2 if n % 2 == 1: return data[mid] return (data[mid - 1] + data[mid]) / 2tests/test_stats.py覆盖空序列与偶数长度:
# tests/test_stats.py import pytest from calc.stats import mean, median def test_mean_basic(): assert mean([1, 2, 3]) == 2 def test_median_even(): assert median([1, 2, 3, 4]) == 2.5 def test_mean_empty_raises(): with pytest.raises(ValueError): mean([])此时test_mean_empty_raises会失败,因为mean([])触发ZeroDivisionError,而不是ValueError。这就是本次 Agent 要修复的目标。
2.2 安装 Claude Code 与 TaoToken CLI
Claude Code 的安装方式按其官方文档执行。若使用 TaoToken 提供的 CLI 辅助切换,可执行:
npm i -g @taotoken/taotoken随后用 CLI 启动 Claude Code 并指定模型:
taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m deepseek-v4.1-flash其中-k为在 TaoToken 控制台创建的 API Key,-u为 API 基址,-m为模型 ID。模型 ID 与可用模型列表以官网当前展示为准,本文不固化版本号之外的推断。
2.3 仓库级任务 prompt
在仓库根目录启动 Claude Code 后,粘贴以下 prompt。它的设计目标是让 Agent 先读报错、再定位、再修改、最后重跑,而不是一次性猜测:
你是一个在本地 Python 仓库中工作的修复 Agent。仓库根目录为当前工作目录。 任务: 1. 运行 `python -m pytest -q`,读取完整失败输出。 2. 定位失败用例对应的源码文件与函数。 3. 只做最小必要修改,使该用例通过,且不破坏其他用例。 4. 修改后重新运行 `python -m pytest -q`,确认全部通过。 5. 输出: - 失败原因的一句话说明; - `git diff` 形式的修改内容; - 最终 pytest 输出。 约束: - 不要新增依赖; - 不要删除或跳过测试; - 不要修改测试断言来迁就实现; - 若一次修改后仍失败,继续读取新报错并迭代,直到通过。这段 prompt 的关键在于把“读报错—改文件—重跑”写成显式步骤,并禁止通过改测试来伪造通过。
3. TaoToken 接入与 Claude Code 配置
Claude Code 通过环境变量读取供应商配置。使用 TaoToken 时,需要把 Base URL 指向https://taotoken.net/api,并填入在控制台创建的 Key。配置方式有两种。
第一种是写入 Claude Code 的settings.json。在用户级或项目级配置中加入:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "YOUR_API_KEY", "ANTHROPIC_MODEL": "deepseek-v4.1-flash" } }第二种是直接在 shell 中导出:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="YOUR_API_KEY" export ANTHROPIC_MODEL="deepseek-v4.1-flash"如果同时使用 Codex,可在config.toml中配置对应的 provider 与 model;若使用 CC Switch 管理多套配置,则按“供应商—Key—模型”三件套分别填入 Base URL、API Key 与模型 ID,切换时确认当前激活项指向 TaoToken。Key 的创建入口在控制台的 API Keys 页面,具体路径以官网当前导航为准: https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=csdn&utm_campaign=generate&utm_content=python_pytest_agent 。
配置完成后,可用一次最小请求验证连通性,例如让 Claude Code 执行pwd或读取一个文件,确认没有鉴权错误再进入修复任务。
4. 可验证结果与失败分支
4.1 修复后的 diff
Agent 读取报错后,定位到mean未处理空序列。最小修改如下:
diff --git a/src/calc/stats.py b/src/calc/stats.py index 3c1c0b2..9f2a1d4 100644 --- a/src/calc/stats.py +++ b/src/calc/stats.py @@ -4,6 +4,8 @@ from typing import Iterable def mean(values: Iterable[float]) -> float: data = list(values) + if not data: + raise ValueError("mean() arg is an empty sequence") total = 0.0 for item in data: total += item该修改只增加一个空序列判断,不改变非空输入的行为,也不触碰测试文件。
4.2 重跑命令与通过输出
重跑命令:
python -m pytest -q通过输出示例:
... [100%] 3 passed in 0.04s三个用例全部通过,说明修复满足测试约束。
4.3 失败分支
若 Agent 第一次修改后仍失败,常见分支有三类。第一类是修改位置错误,例如改了median而非mean,此时应让 Agent 重新读取 traceback 的最后一帧,确认异常抛出的函数名。第二类是引入了新异常,例如把ValueError写成TypeError,此时 pytest 的raises断言会失败,需按新报错继续迭代。第三类是环境问题,例如 pytest 未安装或虚拟环境未激活,此时报错发生在收集阶段而非用例阶段,应先修复环境再重跑。无论哪类分支,都应保持“读新报错—再改—再跑”的循环,而不是一次性重写整个文件。
5. 限制、成本与模型选择
本文记录的是单仓库、单用例的修复流程,不构成对模型能力的横向评测。DeepSeek V4.1 Flash 在本任务中承担的是代码阅读与最小修改,适合这类边界条件修复;若任务涉及跨文件重构或大规模类型迁移,应换用更强的模型或拆分任务。模型 ID、可用列表与计费方式以官网当前页面为准,本文不引用任何第三方标价,也不把聚合平台的标价等同于 TaoToken 的售价。
成本方面,一次修复的消耗取决于仓库上下文大小、迭代轮数与模型单价。控制成本的做法包括:把 prompt 限定在目标文件与测试文件;要求 Agent 先输出失败原因再改代码;避免把整个仓库无关文件塞入上下文。若需要长期在多个仓库中反复执行此类 Agent 任务,可考虑使用 Coding Plan 类方案;若只是接入与排障,则优先查阅接入文档与 API Keys 页面。相关入口均可从官网进入: https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=csdn&utm_campaign=generate&utm_content=python_pytest_agent 。
最后需要说明,本文不含排行分数,也不对任何模型在公开榜单上的名次做断言。所有可验证结果均来自本地仓库的 pytest 输出与 diff,读者可按第 2 节的仓库结构自行复现。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度