OpenHands 实战:经 TaoToken 跑通 SWE-bench Verified 子集

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

1. 任务:OpenHands 跑 SWE-bench Verified 子集,patch 才算通过

这次跑 OpenHands 的 SWE-bench Verified 子集,我先把默认 LLM 供应商接到 TaoToken。在官网创建 Key 后,OpenHands 的 Base URL 填 https://taotoken.net/api,模型 ID 从模型广场复制,避免模型 ID 不一致导致的 404。OpenHands 负责组织工具调用和写文件,TaoToken 只负责把 LLM 请求送到目标模型;两边职责分开,后面换模型时不必重装环境。

之所以把“有效 patch”作为通过指标,是因为 SWE-bench Verified 的每个实例都不是一道问答:它包含一个真实 GitHub issue、一个 base_commit 对应的代码库,以及一组 FAIL_TO_PASS 测试。模型光在对话里说“应该改这里”不算完成;OpenHands 必须在沙箱里把代码改出来,产出一个可应用的 diff,并且让相关用例从失败变成通过。只看“对话有没有结束”会漏掉大量半成品,所以这里以 patch 是否落盘且可用为准。

本文的“子集”是指从官方 swe-bench/swe-bench 仓库的 verified.jsonl 里取前几条实例。全量 500 个实例跑起来很重,不适合当作日常复现基线;取一小批既能验证 OpenHands 与 TaoToken 的链路是否通,也能观察每次调用的 token 消耗。后面我会给出表头和回填规则,但不会拿这一批数据冒充公榜。

2. 把 TaoToken 配成 OpenHands 的默认供应商:Key、Base URL 与模型 ID

先回官网创建 Key:注册、查看模型广场、翻用量记录都走 TaoToken 同一个地址。创建后把 Key 存在本地环境变量里,不要在正文里贴出真实值;我下面的命令和示例统一用 YOUR_API_KEY 占位。遇到任何“401 / invalid api key”,不要急着换模型,先回控制台确认 Key 是不是复制完整,以及是否创建在同一个账号下。这一步虽然基础,却是多数接入问题里最先出错的位置。

Base URL 写 https://taotoken.net/api,不要写 https://taotoken.net/api/v1,也不要加 UTM 参数。OpenHands 在请求时会自己拼具体的模型路径,如果你把 /v1 或查询串一起填进 Base URL,可能出现双路径或参数串位,日志里表现为 404 或路由错误。CLI 探活命令里同样保持干净:taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m YOUR_MODEL_ID。这个命令来自 TaoToken CLI,装好后直接跑;它只验证 Key、Base URL、模型 ID 三者能不能对上一个完整请求,不参与 OpenHands。

模型 ID 怎么写:以模型广场展示出来的 ID 为准。同一个模型在不同聚合通道里可能有不同写法,甚至同一厂商不同批次也有别名;广场给什么,OpenHands 的 LLM_MODEL 就填什么。不要根据记忆把模型名改写成“更正式的版本”,也不要为了对齐某张榜单而套用榜单上的显示名。TaoToken 侧只按你填的 ID 路由,不负责把“近似名字”换算成目标模型。

启动 OpenHands 时,默认供应商配置对应三个环境变量:LLM_BASE_URLLLM_API_KEYLLM_MODEL。它们的值分别来自上面的 Base URL、Key 和模型广场 ID。把 ANTHROPIC_BASE_URL 或 Codex 的配置习惯搬过来是常见的错:OpenHands 不读 ANTHROPIC_AUTH_TOKEN,也不读 ~/.codex/config.toml,它只认自己的三件套。用环境变量启动容器的方式如下:

export LLM_BASE_URL=https://taotoken.net/api
export LLM_API_KEY=YOUR_API_KEY
export LLM_MODEL=YOUR_MODEL_ID

docker run -it --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v "$PWD/workspace":/opt/workspace \
  -e LLM_BASE_URL \
  -e LLM_API_KEY \
  -e LLM_MODEL \
  ghcr.io/all-hands-ai/openhands:main

如果你 clone 的 OpenHands 版本已经改用 OPENHANDS_* 前缀,README 里会有环境变量映射表;本文按 LLM_* 展开,因为它仍是多数版本接受的写法。重点是把 LLM_BASE_URL 保持为不带 /v1 的地址,这份配置就不会在供应商切换后突然失效。换模型时,只改 LLM_MODEL 一个变量;Key 和 Base URL 不用动。

3. Harness 与工作区准备:子集怎么取、上下文怎么控

先从官方 GitHub 仓库拉取 SWE-bench Verified 数据。仓库地址是 swe-bench/swe-bench,里面的 verified.jsonl 就是 Verified 集合。用下面的脚本取出前 5 条,存成单独文件,避免后面反复读大文件:

git clone https://github.com/swe-bench/swe-bench.git
cd swe-bench

python - <<'PY'
import json
from pathlib import Path

with open("verified.jsonl") as f:
    rows = [json.loads(line) for line in f]

subset = rows[:5]
Path("verified_subset.json").write_text(json.dumps(subset, indent=2))
print(len(subset))
PY

这个脚本把 5 个实例写到本地 JSON,方便后续逐条读取。每个实例包含 instance_idrepobase_commitproblem_statementFAIL_TO_PASSPASS_TO_PASS 等字段。注意 FAIL_TO_PASS 是判据:模型产生的 patch 必须让这些测试用例通过,才算真正修复;如果只有 patch 但测试仍失败,我会记为不通过。

上下文的控制要单独说。OpenHands 会把任务描述放进对话开头,SWE-bench 的 problem_statement 有时候很长,所以不需要把整个 verified.jsonl 一次性塞给模型。一次只取一个实例,把 problem_statement 作为唯一任务描述,仓库则 checkout 到该实例的 base_commit。这样上下文窗口只装一个 issue 相关的信息,而不是五个 issue 混在一起;混在一起会让 Agent 分不清该改哪个仓库,patch 也容易张冠李戴。

还有一点容易被忽略:有效 patch 不要求与官方参考 patch 内容一致。SWE-bench 的参考 patch 只是用来确认测试语义的,模型只要改动后让 FAIL_TO_PASS 全过,就符合这个实例的修复要求。如果测试没过,即使看起来有 diff 也不能记通过;如果测试全过,哪怕 diff 很短也应视为有效。判断时始终以测试结果为准,而不是比对该实例的原始 patch。

Token 消耗我以 TaoToken 控制台显示的请求记录为准,不另开日志工具。每次请求的输入 token、输出 token、模型 ID 都能在对应记录里查到;把这些数字和上面的实例 ID 对应起来,就能估算单条 issue 的大致成本。控制台入口不变,还是 TaoToken 的官网。注意这里讨论的是用量统计,不是公榜能力排名。

最后加一条安全边界:让 OpenHands 操作的是本地独立目录或容器里的副本,不是生产仓库。它改坏了不影响原代码。Agent 拿到的 Shell 权限应限制在当前 workspace;不要在提示词里给它生产库地址,也不要让它直接连生产数据库执行 SQL。需要执行的命令由人确认后再放到真实环境里跑。这个原则与是否用 TaoToken 无关,但接上任何大模型工具时都值得先想清楚。

4. 跑通这一步:OpenHands 启动、Issue 注入与 Patch 落盘

上一节的启动命令已经准备好,这一步把它接进完整流程。先把某个实例的仓库 clone 到 workspace,并 checkout 到该实例的 base_commit。然后在 OpenHands Web UI 里新建会话,把 problem_statement 粘贴进去,末尾补一句“请把最终修改输出为 /workspace/patch.diff”。它会在 workspace 里读代码、改文件、跑测试。会话结束后直接看文件是否存在,而不是问模型“你完成了吗”。

强制落盘 patch 是一个值得养成的习惯。SWE-bench harness 也是这么做的:不依赖模型的“最终回答”,而是依赖文件系统里的产出。如果 Agent 只在对话里贴出 diff,你还要手工复制、清理格式,既容易出错也没法批量记录。让 Agent 自己写文件,后续验证和记录表都更干净。下面是本次使用的任务模板,problem_statement 按实例替换:

请阅读当前仓库与下面 issue 相关的内容,完成修复。
完成后把最终改动写进 /workspace/patch.diff。
只输出你做了什么,不要把 diff 内容重复在对话里。

[problem_statement 粘贴到此处]

每个实例单独开会话,不要让上一条 issue 的上下文残留到下一个。OpenHands 会维护自身会话历史,五个实例用一个会话会让它在后边引用前边的仓库路径和无关文件,patch 里出现不属于当前实例的改动。单独会话虽然更慢,但记录清晰,排障容易。

有效 patch 的三条检查:

test -s /workspace/patch.diff
git apply --check /workspace/patch.diff

第一条检查文件非空,第二条检查补丁能否无冲突地应用到仓库。SWE-bench 实例的 FAIL_TO_PASS 测试列表也要单独跑一遍。测试命令因 repo 而异,有的要装依赖,有的要跑 Django 迁移,以该实例的 repobase_commit 为准;不要在五个不同仓库上复用同一个测试命令。网络环境里可能没有对应依赖,所以先在容器里装好项目依赖再执行测试。

下面这张是记录表模板,不是公榜成绩:

实例 IDpatch.diff 非空git apply --checkFAIL_TO_PASS 结果是否记为通过
从 verified.jsonl 复制填是/否填通过/报错填通过用例数/失败用例数满足前两列且测试全过才填“是”

每次跑完一个实例就回填一行。同一个模型 ID、同一个 Key、同一批实例,多跑几次可能得到不同结果;这跟采样温度、模型版本更新都有关。所以这张表是“某次运行的复现记录”,不代表该模型的公榜水平。

明确声明:本文不含排行分数。我没有把 SWE-bench Verified 的官方榜单或者任何其他公榜结果抄录进来。TaoToken 也不是这些榜单的参与方;榜单上排名的是模型本身,读者只是通过 TaoToken 的 Key 和 Base URL 接上同一个模型。要在本地做对照,就固定实例和 Prompt,只换模型 ID,再用同一张表记录。

5. 记录表怎么读、常见配置错在哪

这张表不能和公榜混读。公榜上的名次、百分比或 ELO 是模型全体评测样本的结果,而这张本地表只有少量实例,它只能告诉你“在这一次运行里,OpenHands 经 TaoToken 接入某模型后,有没有产生可用 patch”。两者用途完全不同。要是你想快速评估多个模型,可以用同一个 Key 同一批实例跑完填表,先看哪几个实例全都过,再看哪几个全挂,再做更完整的评测。

最常出现的配置问题有三个。第一,Base URL 写错成 https://taotoken.net/api/v1,或者末尾带了一个查询参数。OpenHands 会在 Base URL 后继续拼路径,多余的 /v1 会让请求落到不存在的路由。第二,API Key 填成了占位符 YOUR_API_KEY 本身,或者从聊天记录里复制带了引号、空格。第三,把别的工具的配置习惯带进来。Claude Code 用 ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKEN;Codex 用 ~/.codex/config.toml;OpenHands 不能照搬这两套,它读的是 LLM_BASE_URLLLM_API_KEYLLM_MODEL

如果启动后提示模型不存在,回到模型广场复制当时的模型 ID。请求已发出但控制台没有记录,则检查 Key 与 Base URL 是否来自同一个账号,以及是否把 UTM 误加到 Base URL 上。UTM 只放在官网链接里,不能进入任何 API 请求地址。控制台的时间范围要覆盖 OpenHands 运行时段;OpenHands 的调用是分批的,每批会有多个请求记录。对照表可以先按模型 ID 过滤,再按实例 ID 标到行为主键。如果看见了请求记录但模型 ID 与广场不一致,多半是配置改了但容器环境变量没重载。

现在回到控制台,把这次 OpenHands 会话覆盖的时段拉出来,看是否每一轮模型调用都入账。入口还是开头创建 Key 的那个地址:TaoToken。如果记录为空,优先排查上面三个配置点,而不是换一个模型继续试。确认链路没问题后,把记录表复制一份,按自己的 Key 跑同样的子集,填出自己的版本。

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

相关推荐

【HarmonyOS】ArkUI的组件扩展

ArkuI的组件扩展主要是过等装饰器来对于一些常用的自定义组件进行封装, 来简化UI开发流程, 提高自定义组件的可复用性。

2302_79763237的博客 1150

OpenHands 实战TaoToken SWE-bench Verified 子集

OpenHands 开源软件工程 Agent TaoToken 统一模型入口,在 SWE-bench Verified 抽取子集修复任务并留下可复现记录。文章给出按 repo 分层抽样的 Python 脚本、OpenHands 启动配置、Claude Code 与 Codex 的 Base URL/Key/模型 ID 三件套写法,以及过率记录表与本地复现分表模板。强调固定子集、固定配置、记录版本,不虚构任何榜单分数,失败分支按 401/404/容器/超时分类处理。

weixin_36369848的博客 113

Starlink第三代终端与第二代终端的差异分析

SpaceX星链第三代终端实现显著升级,硬件售价维持599美元不变但性能全面提升。相比第二代产品,第三代终端取消自动调节电机改为手动定向,防水防尘等级提升至IP67,天线面积扩大46%,支持235台设备连接(提升87%),下载速度可达1Gbps(提升4倍),延迟降至20ms以下。新增3个千兆接口和WiFi6支持,同时推出199美元单独路由器选项。这些改进使第三代终端在保持价格优势的同时,更好地满足户外、移动和商业场景需求,标志着SpaceX卫星互联网服务从亏损销售转向盈利模式的重要转折。

通信行业老兵、物联网从业者,做一个有趣的普通人。 2937

OpenHands 实战:用 TaoToken SWE-bench Verified 子集

OpenHands SWE-bench Verified 20 条 Python 子集TaoToken 固定 LLM_BASE_URL,记录每条 patch、耗时与 token,本地 pass@1 65.0% 不混公榜,附可复现的 instances_20.txt、30 次迭代配置与 401/404 排障顺序。https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_content=

Ceshi01的博客 4

OpenHands 实战TaoToken 道下 SWE-bench Verified 子集

OpenHands 接入 TaoToken SWE-bench Verified 的 5 个 Python 实例,记录 PASS/FAIL 结果。文章给出可复现的 OpenHands 运行命令、provider 配置片段,把 Base URL 指向 TaoToken 统一 API 兼容道,并附 5 个实例的过表与失败分支排查。TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=c

weixin_42611310的博客

OpenHands 实战:用 TaoToken Key SWE-bench Verified 子集

OpenHands SWE-bench Verified 子集,我用 TaoToken Key 作为统一模型入口,在 20 个固定实例上复现完整评测流程。文章固化了实例清单,用官方 SWE-bench 镜像串行完,记录 pass@1 与平均耗时。本次样本结果为 13 PASS、5 FAIL、2 TIMEOUT,pass@1 65%,平均耗时 10.4 分钟;为控制并发,批量循环保持串行,并把 MAX_ITERATIONS 固定为 40。环境变量与对账动作都可回溯到 https://taotoken

Ceshi01的博客 5

OpenHands 实战TaoToken SWE-bench Verified 本地子集

OpenHandsTaoToken SWE-bench Verified 本地 5 条随机子集:固定种子抽样、base_url 填 https://taotoken.net/api、同一把 Key 记录环境构建与 pass@1,实测 3/5 过。文中给出 django、sympy、scikit-learn、matplotlib、pytest 五条实例的测试命令差异与两条失败日志,并强调 0.6 只是单次运行、不代表公榜。配置入口见 https://taotoken.net/?utm_source

weixin_42584758的博客 5

OpenHands 实战TaoToken 作默认供应商 SWE-bench Verified 子集

OpenHands 为评测工具,TaoToken 作默认供应商 SWE-bench Verified 子集:本地容器内完成 20 个真实 GitHub issue 的修复尝试,结果 PASS 12、FAIL 8,总耗时约 11.5 小时,消耗约 480 万 token。文章详解环境配置、选样脚本、run_infer.py 参数,拆解一个 Django ORM 空列表问题的 diff,并归纳依赖冲突、搜索范围过小、验证不充分三类失败模式。复现时需固定 OpenHands 版本、模型 ID、max-it

Ceshi01的博客 6

TaoToken + OpenHands 实战 SWE-bench Verified 子集

OpenHands 驱动 Kimi K2.7 Code SWE-bench Verified 子集,从 django/sympy 挑 3–5 个 issue 完成补丁生成与测试验证。TaoToken 作为 OpenAI 兼容供应商,base_url 固定为 https://taotoken.net/api,配置只需 api_key、base_url、model 三字段。产物含可复用配置片段、运行命令、issue 子集清单与日志字段表,记录 prompt/completion/total tokens

weixin_30415591的博客 2

OpenHands 实战TaoToken SWE-bench Verified 单条样例

OpenHands 开源软件工程 Agent SWE-bench Verified 单条样例,从 Python/Docker 环境、Hugging Face 数据集取一条 issue、检出 base_commit,到配置 TaoToken 的 OpenAI 兼容 Base URL 与 Key,并给出一次真实 run 的日志结构与 patch 测试验证方式。文中只记录单条样例的本地结果,不含 SWE-bench 排行分数,也不推断整体过率,同时列出模型未返回 patch、依赖缺失、Base URL

weixin_42601547的博客 168

OpenHands 实战:用 TaoToken SWE-bench Verified 的本地复流程

OpenHands 实战 SWE-bench Verified 单实例:用 TaoToken 接入 GLM 5.3 Flash,在本地容器内让 Agent 针对 Python issue 生成可 git apply 的 patch,并执行 FAIL_TO_PASS 测试验证过。流程覆盖 TaoToken API Key 创建、Base URL 填 https://taotoken.net/api(不带 /v1)、OpenHands 环境变量与 config.toml 配置、单实例复命令,以及 401

weixin_35750747的博客 116

OpenHands 实战TaoToken SWE-bench Verified 的 Python issue

OpenHandsSWE-bench Verified一个 Python issue:从数据集选任务、复现失败测试,到把 OpenHands 的模型供应商指向 TaoToken 并切到 Kimi K2.7 Code 生成 patch。文中给出可复制的启动命令、配置文件写法、连性 curl 验证、patch diff 示例与失败分支排查,并说明本文不含排行分数、榜单以官方页面为准。

weixin_42577243的博客 141

OpenHands 实战:用 TaoToken SWE-bench Verified 单条 issue

OpenHandsTaoToken SWE-bench Verified 单条 issue 的完整复现:MiniMax M3 走 LiteLLM 层把 Base URL 指向 TaoToken,从仓库快照安装、失败测试起点、23 轮工具调用轨迹到 patch 导出与 pytest 复测转绿,并附同一把 Key 下三组配置的轮数对照表。Key 在 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_content= 创建,

weixin_28746457的博客 202

OpenHands 实测:用 TaoToken SWE-bench Verified 子集过率

OpenHands 接入 TaoToken SWE-bench Verified 10 条样例,记录过 7 条、失败 3 条与重试 10 次。本文给出 config.toml 默认供应商配置、样例 ID 列表、执行命令与 Token 用量表,并整理 401、404、超时、上下文超限、补丁应用失败等排查路径。TaoToken 官网:https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_medium=csdn&utm_campai

weixin_42575505的博客 169
上一篇: Llama 3.1 405B 上了 Chatbot Arena:用同一把 TaoToken Key 复现榜单请求
下一篇: CC Switch 接 TaoToken:把 Claude Code 的供应商切过去
ceshi01
博客等级 码龄18年 1粉丝 4603原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值