ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

Aider 实战:TaoToken 跑通 Python 仓库补测试任务

Aider 实战:TaoToken 跑通 Python 仓库补测试任务 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度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.inisrc/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 生成的。如果你不初始化 gitAider 会提示你很多功能也用不了。3. 拿 Key 并配置 Aider 接入 TaoToken打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册后进控制台创建 API Key。创建完先复制保存页面关掉就看不到了。然后配置 Aider。Aider 支持 OpenAI 兼容接口所以只要把 Base URL 和 Key 给对就行。推荐用环境变量别把 Key 写进命令历史export OPENAI_API_BASEhttps://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.ymlopenai-api-base: https://taotoken.net/api model: openai/gpt-4o-mini auto-commits: trueKey 还是走环境变量不要写进这个文件。配置好后Aider 每次启动都会读这个文件。4. 启动 Aider 并执行补测试任务现在进入正题。启动 Aider 时把要改的文件和测试文件都加进去aider src/calculator.py src/text_utils.py tests/test_smoke.pyAider 启动后会显示当前模型、git 状态和已加入的文件。确认没问题后直接给它下任务。我在输入框里敲的是为 src/calculator.py 和 src/text_utils.py 补全单元测试写到 tests/ 下新建的测试文件里。 要求 1. 覆盖每个函数的正常路径和至少一个边界情况 2. 用 pytest 风格不要用 unittest 3. 每写完一个模块的测试运行 pytest 验证 4. 如果失败读报错并修复直到 pytest 全绿。Aider 会先读这两个源文件然后生成测试文件。它可能会新建tests/test_calculator.py和tests/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.12s6 个测试覆盖了两个模块的主要函数。如果你想要更细的覆盖率可以装pytest-covpip install pytest-cov pytest --covsrc --cov-reportterm-missing输出会列出每个文件哪些行没被覆盖。我这次跑下来calculator.py覆盖率 100%text_utils.py有一个分支没覆盖到是空字符串截断的边界后来让 Aider 补了一条。再看补丁文件。Aider 每次 commit 都会留下记录你可以用git log --oneline git show HEAD或者直接让 Aider 导出 diffgit 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_sourcetaotoken_aicg_blog_end 和控制台为准。想省钱可以用便宜模型做初稿用强模型做修复或者把--map-tokens调小减少仓库地图的 token。模型选择上补测试这种任务对代码理解要求中等但对指令遵循要求高。我试过几个模型差异主要在“能不能按 pytest 风格写”和“失败后会不会自己读报错”。你可以在 Aider 里用/model随时切换找到适合自己仓库的那个。最后提醒一句Aider 自动 commit 很方便但也意味着它会改你的 git 历史。如果你在意可以在启动时加--no-auto-commits手动确认每次改动。补丁文件建议单独存一份别只依赖 git log。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度
RELATED READING

延伸阅读

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