Aider 实战:TaoToken 跑通 Python 仓库补测试任务
2026/9/20 23:48:50 网站建设 项目流程

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

1. 先把任务说清楚:让 Aider 在 Python 仓库里补测试

我手头有个 Python 小仓库,src/下面几个模块写得挺快,但测试基本是空的。手动补测试最烦的不是写断言,而是来回切文件、跑 pytest、看哪一行没覆盖、再回去改。Aider 这类命令行 Agent 的好处是它直接读你的仓库、改你的文件、跑你的命令,你只需要把目标说清楚。

这次的目标很具体:在本地 Python 仓库里,让 Aider 为src/下的模块补上缺失的单元测试,并且最终pytest全绿。整个过程用 TaoToken 作为模型供应商,Aider 的 Base URL 指向https://taotoken.net/api。适合已经会用命令行、想让 Agent 帮忙做仓库级任务的人,不需要你先把测试框架搭得多完美。

产物有三个:一份可复现的 Aider 启动命令、一段最终的 pytest 输出、以及 Aider 生成的补丁文件。下面按顺序来。

2. 准备仓库和测试环境

先确认仓库结构。我用的示例仓库长这样:

demo-repo/ ├── src/ │ ├── calculator.py │ └── text_utils.py ├── tests/ │ └── test_smoke.py ├── requirements.txt └── pytest.ini

src/calculator.py里是加减乘除和取余,src/text_utils.py里是去空格、首字母大写、截断。tests/下只有一个冒烟测试,基本没覆盖。

第一步,建虚拟环境并装依赖:

cd demo-repo python -m venv .venv source .venv/bin/activate pip install -U pip pip install pytest aider-chat

如果你用 Windows,激活命令换成.venv\Scripts\activate。装完后确认版本:

python -c "import pytest; print(pytest.__version__)" aider --version

第二步,确认 pytest 能跑起来:

pytest -q

这时候大概率是 1 passed,因为只有冒烟测试。没关系,我们要的就是这个起点。

第三步,把仓库初始化成 git 仓库,Aider 依赖 git 来生成补丁和回滚:

git init git add . git commit -m "init repo with src and smoke test"

这一步很关键。Aider 每次改动都会自动 commit,补丁文件也是基于 git diff 生成的。如果你不初始化 git,Aider 会提示你,很多功能也用不了。

3. 拿 Key 并配置 Aider 接入 TaoToken

打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end ,注册后进控制台创建 API Key。创建完先复制保存,页面关掉就看不到了。

然后配置 Aider。Aider 支持 OpenAI 兼容接口,所以只要把 Base URL 和 Key 给对就行。推荐用环境变量,别把 Key 写进命令历史:

export OPENAI_API_BASE=https://taotoken.net/api export OPENAI_API_KEY=你的Key

注意 Base URL 是https://taotoken.net/api,不要多加/v1之类的后缀,Aider 会自己拼。如果你之前配过别的供应商,先把旧的环境变量清掉,避免串。

接着指定模型。Aider 的--model参数用 OpenAI 兼容格式,比如:

aider --model openai/gpt-4o-mini

具体有哪些模型可用、价格多少,以官网和控制台里的列表为准,我这里只是举例。你也可以在 Aider 启动后用/model命令切换。

如果你想把配置固化下来,可以在仓库根目录建.aider.conf.yml

openai-api-base: https://taotoken.net/api model: openai/gpt-4o-mini auto-commits: true

Key 还是走环境变量,不要写进这个文件。配置好后,Aider 每次启动都会读这个文件。

4. 启动 Aider 并执行补测试任务

现在进入正题。启动 Aider 时把要改的文件和测试文件都加进去:

aider src/calculator.py src/text_utils.py tests/test_smoke.py

Aider 启动后会显示当前模型、git 状态和已加入的文件。确认没问题后,直接给它下任务。我在输入框里敲的是:

为 src/calculator.py 和 src/text_utils.py 补全单元测试,写到 tests/ 下新建的测试文件里。 要求: 1. 覆盖每个函数的正常路径和至少一个边界情况; 2. 用 pytest 风格,不要用 unittest; 3. 每写完一个模块的测试,运行 pytest 验证; 4. 如果失败,读报错并修复,直到 pytest 全绿。

Aider 会先读这两个源文件,然后生成测试文件。它可能会新建tests/test_calculator.pytests/test_text_utils.py。每改一次,它会自动 commit,你可以用/diff看当前改动。

这里有个实操细节:Aider 默认只把你在命令行里加的文件放进上下文。如果它要新建测试文件,你得让它自己加,或者你提前用/add tests/test_calculator.py把空文件加进去。我试过让它自己创建,它会在第一次写文件时提示你确认。

跑的过程中,Aider 会调用 pytest。如果测试失败,它会把报错读进去然后改代码。你可以在旁边看着,也可以让它自己跑。我这次让它连续跑了三轮,前两轮有断言写错,第三轮全绿。

5. 验证结果:pytest 输出和补丁文件

任务结束后,先看 pytest 输出。我在 Aider 里让它跑了:

pytest -q

输出大概是:

...... [100%] 6 passed in 0.12s

6 个测试覆盖了两个模块的主要函数。如果你想要更细的覆盖率,可以装pytest-cov

pip install pytest-cov pytest --cov=src --cov-report=term-missing

输出会列出每个文件哪些行没被覆盖。我这次跑下来,calculator.py覆盖率 100%,text_utils.py有一个分支没覆盖到,是空字符串截断的边界,后来让 Aider 补了一条。

再看补丁文件。Aider 每次 commit 都会留下记录,你可以用:

git log --oneline git show HEAD

或者直接让 Aider 导出 diff:

git diff HEAD~3 HEAD > tests.patch

这个tests.patch就是最终产物之一,里面包含新增的测试文件和可能的源码微调。你可以把它发给同事,或者存档。

失败分支也要说清楚。如果 pytest 一直不绿,常见原因有三个:一是 Aider 改错了源码逻辑,这时候用/undo回滚上一次 commit;二是测试文件路径没被 pytest 发现,检查pytest.ini里的testpaths;三是模型上下文不够,读不全文件,这时候把大文件拆小,或者换上下文更长的模型。

6. 限制、成本和模型选择

Aider 跑仓库级任务,最大的限制是上下文窗口。仓库越大,它一次能读的文件越少。我的做法是分批:先补src/下的核心模块,再补工具模块,不要一次性把整个仓库丢进去。

成本方面,Aider 每次对话都会把相关文件内容发给模型,token 消耗比单轮问答高。具体价格以官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 和控制台为准。想省钱可以:用便宜模型做初稿,用强模型做修复;或者把--map-tokens调小,减少仓库地图的 token。

模型选择上,补测试这种任务对代码理解要求中等,但对指令遵循要求高。我试过几个模型,差异主要在“能不能按 pytest 风格写”和“失败后会不会自己读报错”。你可以在 Aider 里用/model随时切换,找到适合自己仓库的那个。

最后提醒一句:Aider 自动 commit 很方便,但也意味着它会改你的 git 历史。如果你在意,可以在启动时加--no-auto-commits,手动确认每次改动。补丁文件建议单独存一份,别只依赖 git log。

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

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

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

立即咨询