OpenHands 实战:TaoToken 跑通 Django 仓库的失败测试修复
告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度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 自己循环。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度

相关新闻

GPT-5、Sonnet 4.6、DeepSeek-V4-Pro 分不清?TaoToken 这样填 Base URL 和模型名

GPT-5、Sonnet 4.6、DeepSeek-V4-Pro 分不清?TaoToken 这样填 Base URL 和模型名

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/11 8:28:05 阅读更多 →
电赛文档模板全解析:从格式规范到隐形评分点

电赛文档模板全解析:从格式规范到隐形评分点

简介:这份模板面向全国大学生电子设计竞赛参赛团队,依据评审对文档格式的统一要求设计,内置摘要、关键词、章节层级、A4页面及页边距等规范,帮助选手在提交设计报告时减少格式性失误,更专注技术内容本身。压缩包仅有1个…

2026/11/10 10:28:00 阅读更多 →
Halcon + C#:工业读码与OCR识别的落地方案

Halcon + C#:工业读码与OCR识别的落地方案

简介:这份资源是一套基于 C# 与 Halcon 的二维码深度识别与 OCR 示例工程,面向需要在 Windows 桌面应用中集成机器视觉能力的开发者和自动化项目人员。项目以 WindowsFormsApp1 为入口,完整演示了图像捕获、预处理、二维码定位与解码、文字识…

2026/11/10 10:53:54 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/10 23:32:01 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/10 23:32:03 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/11 2:31:33 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/10 16:14:15 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/10 12:51:50 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/10 23:32:10 阅读更多 →

日新闻

周新闻

月新闻