资讯动态

OpenHands 实战:TaoToken 跑通 Django 仓库的失败测试修复

发布时间:2026/9/20 13:45:23 来源:尧图企业网站定制
告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度1. 让 OpenHands 自己修 Django 的失败单测OpenHands 是一个开源的软件工程 Agent能读写仓库文件、执行 shell 命令、跑测试并根据报错继续改代码。它适合的场景很具体你手上有一个能跑起来的项目但测试挂了几个你不想手动一行行 debug而是希望 Agent 自己定位、修改、验证。这篇记录的是我用 OpenHands 处理一个 Django 仓库里 3 个失败单测的完整过程模型走 TaoToken 的 GLM 5.3 Flash。整个链路分两段第一段在 TaoToken 拿 Key第二段在容器里把 OpenHands 的 LLM 指向 TaoToken 的 API 地址并指定模型。跑通之后Agent 会自己读 pytest 输出、改代码、再跑一遍直到 3 个失败用例变绿。下面把 docker run 命令、环境变量、修复前后的 pytest 对比都贴出来你可以照着复现。2. 准备仓库与失败用例我用的仓库是一个精简版 Django 项目包含orders和users两个 app测试用 pytest pytest-django。初始状态下pytest有 3 个失败test_order_total_with_discount折扣计算没考虑满减门槛断言金额对不上。test_user_profile_created_on_signup注册信号没触发profile 记录缺失。test_order_status_transition状态机允许了非法跳转应该抛异常却没抛。先把仓库拉到本地确认失败可复现git clone https://github.com/your-org/django-orders-demo.git cd django-orders-demo python -m venv .venv source .venv/bin/activate pip install -r requirements.txt pytest -q输出大致是FAILED tests/test_orders.py::test_order_total_with_discount - AssertionError: 90.0 ! 85.0 FAILED tests/test_users.py::test_user_profile_created_on_signup - assert None is not None FAILED tests/test_orders.py::test_order_status_transition - Failed: DID NOT RAISE ValueError 3 failed, 12 passed in 1.84s这 3 条就是交给 OpenHands 的任务目标。注意仓库里不要放真实密钥测试用的 settings 走环境变量或 sqlite 内存库即可。3. 在 TaoToken 创建 Key 并确认模型打开 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_generateutm_mediumcsdnutm_campaigngenerate 注册后进入控制台。左侧菜单找到 API Keys 页面点创建复制生成的 Key。这个 Key 只在创建时完整显示一次先存到本地临时变量里。模型选择上我这次用 GLM 5.3 Flash。它的响应速度适合 Agent 这种多轮工具调用的场景单轮延迟低跑测试-改代码-再测试的循环不会卡太久。你可以在模型对话页面先手动发一条消息确认 Key 和模型都可用再进容器配置。TaoToken 的 API 地址是 https://taotoken.net/api 注意这里不带任何查询参数和官网首页的推广链接是两回事。OpenHands 需要的是这个纯 API 端点。4. 用 docker run 启动 OpenHands 并注入环境变量OpenHands 官方提供 Docker 镜像最省事的方式是直接docker run。关键是把 LLM 的 base url、api key、model 三个环境变量传进去。下面是我实际用的命令docker run -it --rm \ --name openhands-django \ -e SANDBOX_RUNTIME_CONTAINER_IMAGEdocker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik \ -e LOG_ALL_EVENTStrue \ -e LLM_BASE_URLhttps://taotoken.net/api \ -e LLM_API_KEYsk-你的TaoToken密钥 \ -e LLM_MODELglm-5.3-flash \ -v /var/run/docker.sock:/var/run/docker.sock \ -v ~/.openhands-state:/.openhands-state \ -p 3000:3000 \ docker.all-hands.dev/all-hands-ai/openhands:0.20几个点说明一下。LLM_BASE_URL必须写成https://taotoken.net/apiOpenHands 会在后面自动拼/chat/completions这类路径。LLM_MODEL填glm-5.3-flash具体模型名以 TaoToken 控制台模型列表为准写错会返回模型不存在的错误。-v /var/run/docker.sock是让 OpenHands 能起沙箱容器执行命令没有它 Agent 跑不了 shell。启动后浏览器打开http://localhost:3000进入 OpenHands 界面。在设置里确认 LLM 配置已经读到了环境变量如果界面显示的还是默认模型手动在 Settings 里把 Base URL 改成https://taotoken.net/api、模型填glm-5.3-flash。5. 把仓库挂进工作区并下达修复任务OpenHands 的工作区默认在容器内的/workspace。我通过界面里的 Open Workspace 或者直接在对话框里让它 clone 仓库。更稳的做法是启动容器时多挂一个卷-v $(pwd)/django-orders-demo:/workspace/django-orders-demo然后在对话框输入任务描述。我用的提示词是仓库在 /workspace/django-orders-demo。 先运行 pytest -q 查看失败用例。 针对 3 个失败测试逐个定位原因并修改源码不要改测试文件。 每改完一个就重跑对应测试全部通过后输出最终 pytest 结果。Agent 会先执行cd /workspace/django-orders-demo pytest -q读到那 3 条 FAILED然后开始读orders/models.py、users/signals.py等文件。中间它会多次调用 shell 和文件编辑工具这些工具调用的请求都走 TaoToken 的 API。6. 修复前后的 pytest 输出对比修复前FAILED tests/test_orders.py::test_order_total_with_discount - AssertionError: 90.0 ! 85.0 FAILED tests/test_users.py::test_user_profile_created_on_signup - assert None is not None FAILED tests/test_orders.py::test_order_status_transition - Failed: DID NOT RAISE ValueError 3 failed, 12 passed in 1.84sAgent 的修改动作大致是在Order.total里补了满减门槛判断在users/apps.py的ready()里注册了post_save信号在Order.transition_to里加了合法状态白名单校验。改完后它自己跑了一遍15 passed in 1.21s3 个失败全部转绿12 个原本通过的也没有被改坏。这一步是判断 Agent 是否真的完成任务的核心依据不要只看它说已修复要看 pytest 的最终输出。7. 失败分支与排查如果 Agent 卡住或者报错常见几类第一类是 401。说明LLM_API_KEY没传对或者 Key 被撤销了。回 TaoToken 控制台 API Keys 页面重新生成一个注意环境变量里不要带引号和多余空格。第二类是 404 或模型不存在。多半是LLM_MODEL写错了。去模型对话页面看当前可用的模型名GLM 5.3 Flash 对应的标识以控制台为准别自己拼。第三类是 Agent 反复改同一个文件但测试还是挂。这时候在对话框里补一句先只读文件不要改把失败原因说清楚让它先输出分析再动手。OpenHands 支持这种交互式纠偏。第四类是容器里跑不了 pytest。检查requirements.txt是否装全pytest-django 需要在pytest.ini或setup.cfg里配DJANGO_SETTINGS_MODULE。这个和 TaoToken 无关是仓库环境问题。8. 成本、模型选择与限制成本方面Agent 跑一次修复会消耗不少 token因为它要读文件、跑命令、看输出、再改。GLM 5.3 Flash 属于响应快、单价相对友好的档位适合这种多轮循环。具体计费以 TaoToken 官网和控制台为准不同模型价格不一样跑之前可以在控制台看用量。模型选择上如果任务更复杂、需要长上下文推理可以换更强的模型如果只是简单改测试Flash 够用。切换模型只需要改LLM_MODEL环境变量重启容器Base URL 和 Key 不用动。限制也要说清楚OpenHands 改代码是基于测试反馈的如果测试本身写得不对它可能改出错误实现来迎合测试。所以任务描述里我特意写了不要改测试文件。另外它执行 shell 命令是在沙箱里涉及数据库迁移、外部服务调用的测试可能跑不通需要你提前把测试环境准备好。最后一步如果你想让 Agent 长期挂在项目里做日常修复可以考虑 Coding Plan 这类按周期计费的方式比单次调用更划算。接入文档在 https://taotoken.net/doc 有更细的参数说明API Keys 管理在 https://taotoken.net/api-keys 。跑通这一套之后下次再有失败测试你只需要把仓库挂进去、写一句任务描述剩下的交给 Agent 自己循环。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价