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/9/20 13:45:29 阅读更多 →
电赛文档模板全解析:从格式规范到隐形评分点

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

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

2026/9/20 13:45:29 阅读更多 →
Halcon + C#:工业读码与OCR识别的落地方案

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

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

2026/9/20 13:45:29 阅读更多 →

最新新闻

fast guided filter 矩阵求逆总错?用 TaoToken 接入的 Codex 来排查 a_k/b_k

fast guided filter 矩阵求逆总错?用 TaoToken 接入的 Codex 来排查 a_k/b_k

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

2026/9/20 15:20:51 阅读更多 →
无人机软件开发:ROS2与ROS1深度对比及迁移实战指南

无人机软件开发:ROS2与ROS1深度对比及迁移实战指南

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

2026/9/20 15:20:51 阅读更多 →
Oracle cursor_sharing 优化,把 Codex 的 Base URL 改到 TaoToken 后复测 Parse

Oracle cursor_sharing 优化,把 Codex 的 Base URL 改到 TaoToken 后复测 Parse

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

2026/9/20 15:20:51 阅读更多 →
DeepSeek-R1 上了 LMArena:用 TaoToken 复现官方采样参数

DeepSeek-R1 上了 LMArena:用 TaoToken 复现官方采样参数

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

2026/9/20 15:20:51 阅读更多 →
毕业论文没思路?AI论文工具,上传开题报告自动出全文

毕业论文没思路?AI论文工具,上传开题报告自动出全文

每到毕业季,总有同学卡在论文第一步:选题没方向,开题报告改了三四版还是被导师打回,好不容易定了题目,又不知道怎么搭框架、怎么找文献、怎么配图配公式。眼看着截止日期一天天逼近,别人已经写完初稿&#…

2026/9/20 15:20:51 阅读更多 →
ESP32音频队列满?丢旧帧与拒新包策略及延迟优化实战

ESP32音频队列满?丢旧帧与拒新包策略及延迟优化实战

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

2026/9/20 15:19:49 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →