ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenHands 实战:TaoToken 跑通 Django 仓库的测试套件

OpenHands 实战:TaoToken 跑通 Django 仓库的测试套件 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度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_sourcetaotoken_aicg_blog_generateutm_mediumcsdnutm_campaigngenerate 创建 Key然后把 Base URL 写成 https://taotoken.net/apiOpenHands 就会把请求发到 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 \ --pullalways \ -e SANDBOX_RUNTIME_CONTAINER_IMAGEdocker.all-hands.dev/all-hands-ai/runtime:latest \ -e LOG_ALL_EVENTStrue \ -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_MODELopenai/glm-5.3-flash \ -e LLM_API_KEYYOUR_TAOTOKEN_API_KEY \ -e LLM_BASE_URLhttps://taotoken.net/api注意模型 ID 的写法。OpenHands 底层用的是 LiteLLM所以模型名要带 provider 前缀。GLM 系列通常走 OpenAI 兼容协议因此写成openai/glm-5.3-flash。具体可用的模型 ID 以 TaoToken 官网文档为准不同时期上架的模型可能不同。如果你不确定可以先在模型对话页面测试一下连通性再填进 OpenHands。进入 OpenHands 后在设置里把 Base URL 改成https://taotoken.net/apiAPI Key 填你在官网创建的 Key。保存后OpenHands 会用它来驱动 Agent 的每一步推理。这里有一个容易踩的坑Base URL 末尾不要多加/v1TaoToken 的 API 地址就是https://taotoken.net/apiLiteLLM 会自动补全路径。如果你填成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 与模型 IDTaoToken 的接入方式对 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_URL和ANTHROPIC_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添加 defaultTrue [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_EVENTStrue这样 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 做最小化测试。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度
返回列表