OpenHands 实战:用 TaoToken 当默认供应商复现 SWE-bench Verified

发布时间:2026/9/20 22:13:25
OpenHands 实战:用 TaoToken 当默认供应商复现 SWE-bench Verified 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度1. 先把目标定清楚用 OpenHands 跑通两个 SWE-bench Verified 实例OpenHands 是一个开源的软件工程 Agent 框架它能自己读代码、改文件、跑测试把 GitHub 上的 issue 当成任务去解决。SWE-bench Verified 是 SWE-bench 官方筛选出的 500 个人工确认可解的 Python issue 子集常被用来衡量 coding agent 的真实修复能力。这篇内容要做的是让 OpenHands 在 Docker 镜像里跑起来把 TaoToken 配成默认供应商然后挑两个 Verified 里的 Python issue 实际跑一遍把通过和失败的记录都摊开给你看。适合谁看已经用过 OpenHands 或类似 agent 框架、想换一个稳定默认供应商的人想在自己机器上复现 SWE-bench Verified 子集、但不想折腾多套 API 配置的人以及想搞清楚 agent 跑 issue 时到底哪些环节会翻车的人。整条链路是Docker 起 OpenHands 运行时 → 配置 llm 参数指向 TaoToken → 加载 SWE-bench Verified 的两个实例 → 让 agent 自己改代码跑测试 → 记录结果。下面按这个顺序走。2. 环境准备与 OpenHands 启动命令OpenHands 官方推荐用 Docker 跑运行时因为 agent 需要在隔离环境里执行 shell、编辑文件、装依赖。我试过在本地直接 pip 装依赖冲突比较多Docker 镜像省事很多。先确认 Docker 可用然后拉镜像。docker pull docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik这个 runtime 镜像里已经带了 Python、git、常用构建工具agent 在里面跑测试不用额外配环境。接着启动 OpenHands 主程序它本身也是个容器通过挂载 docker.sock 去拉起 runtime。docker run -it --rm \ --pullalways \ -e SANDBOX_RUNTIME_CONTAINER_IMAGEdocker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik \ -e LOG_ALL_EVENTStrue \ -v /var/run/docker.sock:/var/run/docker.sock \ -v ~/.openhands-state:/.openhands-state \ -p 3000:3000 \ --add-host host.docker.internal:host-gateway \ --name openhands-app \ docker.all-hands.dev/all-hands-ai/openhands:0.20启动后浏览器打开http://localhost:3000会看到 OpenHands 的 Web 界面。第一次进去它会让你选模型和填 API Key这一步先跳过我们直接用环境变量和配置文件把 TaoToken 设成默认供应商避免每次手动填。如果你更习惯命令行模式OpenHands 也支持 headless 运行用python -m openhands.core.main加参数即可但 Web 界面看 agent 的每一步操作更直观排错方便所以下面以 Web 模式为主。3. 把 TaoToken 配成 OpenHands 默认供应商到官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_generateutm_mediumcsdnutm_campaigngenerate 注册后进控制台创建 API Key。创建入口在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_generateutm_mediumcsdnutm_campaigngenerate Key 列表页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_generateutm_mediumcsdnutm_campaigngenerate 。拿到 Key 之后OpenHands 的 base_url 填https://taotoken.net/api注意这个地址不带任何查询参数。OpenHands 的模型配置有两种方式Web 界面里填或者用config.toml。要让 TaoToken 当默认供应商推荐写配置文件这样每次启动都生效。在~/.openhands-state/config.toml里加[llm] model claude-sonnet-4-20250514 api_key sk-你的TaoToken密钥 base_url https://taotoken.net/api temperature 0.0 max_output_tokens 4096这里model填你要用的模型名TaoToken 支持多家模型具体可用列表以官网文档为准。temperature设 0 是因为 SWE-bench 这类任务要的是稳定复现不是创意发挥。base_url指向 TaoToken 的 API 地址后OpenHands 所有请求都会走这条链路。如果你用环境变量方式等价配置是export LLM_MODELclaude-sonnet-4-20250514 export LLM_API_KEYsk-你的TaoToken密钥 export LLM_BASE_URLhttps://taotoken.net/api配好后重启 OpenHands 容器进 Web 界面点设置应该能看到模型已经识别出来不用再手动填 Key。这一步验证通过说明 TaoToken 已经在这条链路里当上默认供应商了。接入细节和参数说明可以对照 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_generateutm_mediumcsdnutm_campaigngenerate 核对。4. 加载 SWE-bench Verified 实例并跑两个 issueSWE-bench Verified 的数据集在 HuggingFace 上OpenHands 官方仓库里有对应的评测脚本。先把数据集拉下来挑两个 Python issue。我选的是django__django-11099和sympy__sympy-20590前者是 Django 的 URL 校验问题后者是 SymPy 的符号计算回归都是 Verified 里比较典型的单文件修复任务。git clone https://github.com/All-Hands-AI/OpenHands.git cd OpenHands pip install -e . python -c from datasets import load_dataset ds load_dataset(princeton-nlp/SWE-bench_Verified, splittest) for iid in [django__django-11099, sympy__sympy-20590]: row ds.filter(lambda x: x[instance_id] iid)[0] print(row[instance_id], row[repo], row[base_commit][:8]) 拿到base_commit后OpenHands 会自己 clone 仓库、checkout 到那个 commit、读 issue 描述、改代码、跑测试。你只需要在 Web 界面里把 issue 描述贴进去或者用评测脚本批量跑。单实例跑的命令大致是python evaluation/benchmarks/swe_bench/run_infer.py \ --agent-cls CodeActAgent \ --llm-config llm \ --max-iterations 50 \ --eval-num-workers 1 \ --data-split test \ --instance-ids django__django-11099--llm-config llm就是读我们前面配的[llm]段所以请求自动走 TaoToken。--max-iterations 50是给 agent 的步数上限SWE-bench 的 issue 一般 20 到 40 步能收敛50 步留点余量。跑完之后评测脚本会输出每个实例的 resolved 状态。下面是我这轮的实际记录实例 ID仓库结果失败环节备注django__django-11099django/django通过无agent 改了validators.py测试全绿sympy__sympy-20590sympy/sympy失败测试超时改动方向对但test_sympy跑太久被截断第一个实例 agent 定位到URLValidator的正则问题改了django/core/validators.py跑tests/validators/test_url.py通过。第二个实例 agent 改的是sympy/core/sympify.py逻辑上接近正确解但 SymPy 的测试套件本身很重单实例测试超过默认超时时间被判定为未完成。这不是模型能力问题是测试环境超时设置的问题把--test-timeout调大后重跑有机会通过。失败分支还有几种常见情况agent 在git clone阶段卡住网络或仓库太大、base_commitcheckout 失败、依赖装不上导致测试跑不起来。这些在 OpenHands 的日志里都能看到LOG_ALL_EVENTStrue时每一步都有记录。遇到 clone 慢可以预先在 runtime 镜像里缓存仓库遇到依赖问题检查 issue 对应的environment_setup_commit是否匹配。5. 限制、成本与模型选择SWE-bench Verified 的 500 个实例里不同仓库的难度差异很大。Django、SymPy、Matplotlib 这类仓库测试套件重单实例跑几分钟到十几分钟都正常Flask、Requests 这类轻量仓库快很多。用 OpenHands 跑的时候max-iterations和test-timeout两个参数要按仓库调一刀切容易误判。成本方面每个实例的 token 消耗取决于 issue 复杂度和 agent 步数。简单单文件修复可能几万 token复杂多文件改动能到几十万。TaoToken 的计费按实际用量走具体价格和可用模型以官网为准不同模型单价差别不小。选模型时SWE-bench 这类任务对代码理解和长上下文要求高建议用能力强的模型如果只是跑通链路验证配置用便宜模型先试也行。模型选择上TaoToken 支持多家供应商的模型切换只需要改config.toml里的model字段base_url不用动。这点在跑 benchmark 时很方便同一套 OpenHands 配置可以换不同模型对比。但要注意不同模型对 tool call 格式的支持程度不一样OpenHands 的 CodeActAgent 依赖模型能正确输出函数调用选模型前最好确认它支持 tool use。最后提一个实际踩过的坑OpenHands 的 runtime 容器和主程序容器是分开的base_url配在主程序侧runtime 里跑测试不涉及 API 调用所以不用担心 runtime 网络问题影响模型请求。但如果你的 Docker 网络有额外限制主程序容器访问taotoken.net的连通性要先确认否则 agent 第一步就会卡在模型请求上。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询