OpenHands 实战:TaoToken 跑通 Django 仓库的测试套件
2026/9/20 2:58:30 网站建设 项目流程

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

1. 目标与产物:让 OpenHands 在 Django 仓库里跑通 pytest

本文的目标很具体:用 OpenHands 这个开源编码 Agent,在一个 Django 仓库里跑通 pytest 测试套件,并让它尝试修复一个指定的失败用例。产物包括三部分:一份可复现的 Docker 启动命令、一份 OpenHands 的模型配置(Key 与 Base URL 指向 TaoToken)、以及一段 Agent 修复过程的日志摘要。需要提前说明的是,本文不承诺修复结论,只验证通道路由是否正常——也就是说,我们关心的是 OpenHands 能否通过 TaoToken 稳定调用 GLM 5.3 Flash,并完成“读代码→跑测试→改代码→再跑测试”的闭环。

TaoToken 在这里扮演的是模型接入层。你可以在官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=csdn&utm_campaign=generate 创建 Key,然后把 Base URL 写成 https://taotoken.net/api,OpenHands 就会把请求发到 TaoToken,再由 TaoToken 路由到 GLM 5.3 Flash。整个过程对 OpenHands 是透明的,它只认为自己连了一个 OpenAI 兼容接口。

本文适合已经在用 OpenHands、但还没决定模型通道的开发者。如果你只是想让 Agent 跑起来,不想折腾多家 API 的 Key 管理和计费,那 TaoToken 这种聚合通道会省掉不少配置工作。下面从操作步骤开始。

2. 操作步骤:Docker 启动 OpenHands 并指定模型

OpenHands 官方推荐用 Docker 运行。先拉镜像,再挂载工作目录。假设你的 Django 仓库在~/projects/django-repo,命令如下:

docker pull docker.all-hands.dev/all-hands-ai/openhands:latest docker run -it --rm \ --pull=always \ -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:latest \ -e LOG_ALL_EVENTS=true \ -v /var/run/docker.sock:/var/run/docker.sock \ -v ~/.openhands-state:/.openhands-state \ -v ~/projects/django-repo:/workspace/django-repo \ -p 3000:3000 \ --add-host host.docker.internal:host-gateway \ --name openhands-app \ docker.all-hands.dev/all-hands-ai/openhands:latest

启动后访问http://localhost:3000,进入 OpenHands 的 Web 界面。接下来配置模型。OpenHands 支持在界面里填 LLM Provider、Model、API Key 和 Base URL。如果你更习惯用环境变量,也可以在启动容器时传入:

-e LLM_MODEL="openai/glm-5.3-flash" \ -e LLM_API_KEY="YOUR_TAOTOKEN_API_KEY" \ -e LLM_BASE_URL="https://taotoken.net/api"

注意模型 ID 的写法。OpenHands 底层用的是 LiteLLM,所以模型名要带 provider 前缀。GLM 系列通常走 OpenAI 兼容协议,因此写成openai/glm-5.3-flash。具体可用的模型 ID 以 TaoToken 官网文档为准,不同时期上架的模型可能不同。如果你不确定,可以先在模型对话页面测试一下连通性,再填进 OpenHands。

进入 OpenHands 后,在设置里把 Base URL 改成https://taotoken.net/api,API Key 填你在官网创建的 Key。保存后,OpenHands 会用它来驱动 Agent 的每一步推理。这里有一个容易踩的坑:Base URL 末尾不要多加/v1,TaoToken 的 API 地址就是https://taotoken.net/api,LiteLLM 会自动补全路径。如果你填成https://taotoken.net/api/v1,可能会遇到 404。

配置完成后,在 OpenHands 的对话框里输入任务:

进入 /workspace/django-repo,先运行 pytest 看当前失败情况, 然后修复 tests/test_models.py::TestUserModel::test_create_user 这个用例, 修完后重新运行该用例确认通过。

OpenHands 会开始规划步骤。它会先cd到仓库目录,然后执行pytest。如果依赖没装,它可能会先跑pip install -r requirements.txt。这一步是否顺利,取决于你的仓库环境是否完整。建议在挂载目录里提前准备好虚拟环境或依赖,否则 Agent 可能会花很多轮在装包上。

3. TaoToken 接入与配置:Key、Base URL 与模型 ID

TaoToken 的接入方式对 OpenHands 来说就是三个值:API Key、Base URL、模型 ID。Key 在官网创建,Base URL 固定为https://taotoken.net/api,模型 ID 则取决于你想用哪个模型。本文用的是 GLM 5.3 Flash,它在 TaoToken 上的模型 ID 需要以官网模型列表为准。你可以在 API Keys 页面生成 Key,然后在接入文档里找到对应模型的调用示例。

如果你用的是 Claude Code 而不是 OpenHands,配置方式会不同:Claude Code 需要在settings.json里设置ANTHROPIC_BASE_URLANTHROPIC_API_KEY,或者用ANTHROPIC_*系列环境变量。Codex 则是在config.toml里配置 provider。CC Switch 三件套(Claude Code、Codex、Gemini CLI)的切换逻辑也类似,核心都是改 Base URL 和 Key。本文聚焦 OpenHands,所以不展开这些,但思路是一致的:把请求指向 TaoToken,由它来路由。

回到 OpenHands。配置完成后,你可以在容器日志里看到 Agent 的请求记录。如果 Key 无效,OpenHands 会报 401;如果 Base URL 写错,会报 404 或连接超时。这两个错误是最常见的失败分支。排查方法很简单:先用 curl 测一下 TaoToken 的接口是否通:

curl -X POST https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer YOUR_TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "glm-5.3-flash", "messages": [{"role": "user", "content": "ping"}] }'

如果返回正常,说明 Key 和 Base URL 没问题,问题出在 OpenHands 的配置上。如果返回 401,检查 Key 是否复制完整;如果返回 404,检查 Base URL 是否多了/v1。这一步能帮你快速定位是通道问题还是 Agent 配置问题。

4. 可验证结果与失败分支:日志摘要与排障

下面是一段典型的 Agent 日志摘要(经过脱敏和精简):

[Agent] 进入 /workspace/django-repo [Agent] 执行: pytest -q [Runtime] 输出: 1 failed, 42 passed [Agent] 读取 tests/test_models.py [Agent] 定位到 test_create_user 断言失败 [Agent] 读取 models.py 中 User 模型定义 [Agent] 发现 create_user 未设置 is_active 默认值 [Agent] 编辑 models.py,添加 default=True [Agent] 执行: pytest tests/test_models.py::TestUserModel::test_create_user -q [Runtime] 输出: 1 passed [Agent] 任务完成

这段日志说明通道路由是通的:OpenHands 成功调用了 GLM 5.3 Flash,模型返回了合理的工具调用和代码修改建议。但请注意,这不代表修复结论一定正确。Agent 可能改对了,也可能只是让测试通过了但引入了其他问题。本文只验证通道,不验证修复质量。如果你要用于生产,建议人工 review Agent 的改动。

失败分支方面,除了前面说的 401 和 404,还有几种常见情况。一是模型返回格式不符合 OpenHands 预期,导致 Agent 卡住。这通常是因为模型 ID 写错,或者 TaoToken 上该模型不支持 function calling。解决办法是换一个支持工具调用的模型,具体以官网模型说明为准。二是 Docker 容器内无法访问外网,导致请求发不出去。检查--add-host和网络模式。三是 pytest 本身跑不起来,比如缺少依赖或数据库配置。这属于仓库环境问题,不是通道问题,需要你先在本地把测试跑通。

如果你在排障时需要看更详细的请求日志,可以在启动容器时加上-e LOG_ALL_EVENTS=true,这样 OpenHands 会打印每一步的 LLM 请求和响应。注意日志里可能包含你的 Key,分享前记得脱敏。

5. 限制、成本与模型选择:以官网为准

最后说限制和成本。TaoToken 作为聚合通道,它的计费方式和模型价格以官网为准。本文不提供具体价格数字,因为价格会调整,而且不同模型的计费单位可能不同。你可以在官网的模型列表或计费说明里查到最新信息。需要提醒的是,第三方榜单上的标价不等于 TaoToken 的售价,两者不能直接对比。

模型选择方面,GLM 5.3 Flash 在本文的场景里表现够用:它能理解 pytest 输出,能定位到具体文件和行号,也能生成合理的代码修改。但如果你要处理更复杂的仓库,或者需要更长的上下文,可能需要换更强的模型。OpenHands 支持切换模型,你只需要改LLM_MODEL环境变量或界面里的模型 ID。具体哪些模型可用,以 TaoToken 官网为准。

另外,OpenHands 本身会消耗较多 token,因为它每一步都要把仓库上下文和工具输出发给模型。如果你跑一个大型仓库,成本可能会上升。建议先在小型仓库上验证流程,再逐步扩大规模。本文不含排行分数,也没有本地复现的 benchmark 数据,因为那需要标准化的测试集和多次运行,超出了本文的范围。

总结一下:本文验证了 OpenHands 通过 TaoToken 调用 GLM 5.3 Flash 的可行性,给出了 Docker 启动命令、模型配置和日志摘要。通道路由是通的,但修复结论需要你自己验证。如果你在配置过程中遇到问题,可以先查接入文档,再用 curl 做最小化测试。

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

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

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

立即咨询