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

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

1. 用 OpenHands 跑 SWE-bench Verified 子集,为什么把 TaoToken 放在请求链路上

这次我用 OpenHands 跑 SWE-bench Verified 的 50 条子集时,TaoToken 放在模型请求链路上,官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。它不是被评测对象,而是 OpenAI-compatible 的 API 供应商,负责把 OpenHands 发出的 HTTP 请求转发到上游模型。这样我就不用为每个模型单独维护一套接入代码,只要把 Base URL 指过去。

OpenHands 是一个开源的自主编码代理框架,它会在一个沙箱环境里反复调用大模型,生成命令、读文件、写补丁、跑测试。SWE-bench Verified 是 SWE-bench 团队人工筛选过的 500 条真实 GitHub issue,每条带一个基准提交和一个官方补丁,用来检验代理能否自己修好 bug。完整跑 500 条对时间和令牌消耗都不小,所以我只取前 50 条作为子集,目的是观察 OpenHands 在这个子集上的修复率与平均步数,顺便验证这套统一 API 通道是否稳定。

这个通道在这个任务里更像一个“默认供应商”:OpenHands 不直接知道上游是哪个模型服务,它只认 OpenAI 格式的 /chat/completions。TaoToken 的 Base URL 就是 https://taotoken.net/api ,没有多余的 /v1 路径。我把这个地址填进 OpenHands 的 LLM 配置后,OpenHands 发出去的每个请求都会先到这个通道,再由它按模型 ID 路由到真正的上游。这样做的好处是,后续想换一个模型只改环境变量,不用重新配置 OpenHands。

我这次跑完 50 条,请求链路没有出现断连或超时。之前用临时通道时遇到过请求发到一半就 reset 的情况,而这个统一网关在同样的一批任务里表现稳定。这里有一个实际感受:统一网关的稳定性比纸面上的调价重要得多,因为你不想在半夜等一份跑了两个小时的评测时因为某个请求失败而前功尽弃。

2. 环境准备:安装 OpenHands 并抽出 50 条 Verified 实例

我直接克隆了 OpenHands 的官方仓库并按仓库里的说明安装,没有锁定特定 commit,因为这类项目迭代很快,锁定旧 commit 反而会遇到兼容问题。安装前确认本机有 Docker 环境,OpenHands 跑 agent 时要在 Docker 沙箱里执行命令。我第一次安装后直接启动,结果报错,提示 Docker 没有运行。把 Docker 服务打开后,OpenHands 才能正常创建沙箱。这一步不算配置问题,是环境依赖。

安装完成后,验证一下命令行入口:openhands --help 能打印帮助信息即可。有些安装方式会把入口放在 python -m openhands,两种都能用。接下来准备 50 条实例。我用 Hugging Face 的 datasets 库加载 SWE-bench Verified,然后取一个固定随机种子的样本。不直接用前 50 条,因为按仓库顺序排列时,某些仓库的 issue 会集中出现,导致子集偏向特定代码结构。用固定种子之后,至少每次复现得到的实例序是一样的。代码如下:

from datasets import load_dataset

dataset = load_dataset("princeton-nlp/SWE-bench_Verified", split="test")
shuffled = dataset.shuffle(seed=42)
subset = shuffled.select(range(50))
print(len(subset))
subset.save_to_disk("swebench_verified_50")

这条子集里的每条实例包含 repobase_commitproblem_statementgold_patch 等字段。OpenHands 实际能看到的只有 problem_statement,也就是用户写的 issue 正文。至于官方补丁和仓库地址,是我后续做验证用的,不能提前混进任务提示里,否则就失去了评测意义。我把子集保存到本地,后面用脚本逐条读取。

如果你想用不同难度的子集,可以修改 seed 或随机抽 50 条。50 条是一个权衡过的数量:太少了随机波动大,太多了时间成本和 token 开销会翻倍。以一次 OpenHands 会话平均调用几十次模型计算,50 条下来总步数已经足够用来对比两个模型。我记录的变量只有修复率和平均步数,没有去跑完整版的带工具限制的 harness,因为完整 harness 的代码和依赖需要额外配置,反而不容易讲清楚。

3. 把 TaoToken 配成 OpenHands 的默认供应商,只需要四个变量

先去 TaoToken 官网注册、登录,在控制台创建一个 API Key。创建后把它复制为 YOUR_API_KEY。注意官网是网页端入口,接口 Base URL 是 https://taotoken.net/api ,两者不要混:网页上看到的 UTM 链接不需要加进接口地址里。

在启动 OpenHands 之前,我设置下面几个环境变量:

export LLM_BASE_URL=https://taotoken.net/api
export LLM_API_KEY=YOUR_API_KEY
export LLM_MODEL=your-model-id

LLM_MODEL 的值以 TaoToken 模型广场展示的模型 ID 为准,不要凭记忆填一个非官方 ID。我这次用的模型是广场上某个支持工具调用的 ID,具体哪个先不写,因为我不想让这一篇的结论绑定在某一个上游模型上。你打开模型广场,复制你选中的 ID 填到这里就行。

设置完成后,启动 OpenHands 的命令很简单:

openhands

如果你使用 headless 模式,则用 OpenHands 自带的入口脚本,核心还是上面三个变量。OpenHands 启动后会读取这些 LLM 配置,任何需要模型回复的地方都会先请求 https://taotoken.net/api。我在界面上确认了连接状态没问题后,才开始喂任务。怎么确认?启动后先发一条普通消息,比如“请回复两个字:收到”。如果模型回复了,说明 Base URL、Key、模型 ID 三者都正确。

这一步我踩了一个坑:第一次把 Base URL 写成了 https://taotoken.net/api/v1,结果 OpenHands 报 404。原因是我习惯性以为 OpenAI 兼容端点一定挂在 /v1 下,但 TaoToken 的 OpenAI 兼容接口就挂在 /api。把 /v1 去掉后请求就正常了。另一个小坑是复制 API Key 时末尾多了一个空格,OpenHands 报认证失败,删掉空格就通过。这两个问题都只在配置阶段出现,不涉及模型本身。

除了环境变量,OpenHands 的配置文件里也有对应项。如果你更喜欢写在 ~/.config/openhands/ 下的配置文件,把 llm.base_urlllm.api_keyllm.model 三个字段填进去即可。同样,Base URL 不加 /v1。我之所以用环境变量,是为了在对比多个模型时写一个简单的 shell 脚本,每次只改 LLM_MODEL 就能跑一轮,避免手动编辑配置文件。

4. 跑 50 条实例,修复率和平均步数怎么观察

我没有跑 SWE-bench 官方评测套件的完整流程,而是自己在 OpenHands 外面套了一层循环。流程是:从刚才保存的 50 条实例中逐条取出 problem_statement,作为一条任务发送给 OpenHands;OpenHands 会在沙箱里完成读代码、改代码、跑测试等动作,最终生成一个 diff。我收集这个 diff,再回到该实例指定的 base_commit 上打补丁,然后运行与这个 issue 相关的测试。测试通过就算修复。

修复率的定义很简单:修复率 = 修复的实例数 / 50。平均步数则从 OpenHands 的日志里解析,把每条实例中 agent 执行过的工具调用次数(包括读文件、写文件、执行 shell 命令、调用模型等)加起来求平均。步数不是质量指标,但它能告诉你模型的效率:同样的修复率,步数更少意味着更少的往返开销和更少的 token 消耗。

记录表我做成下面这样,每一行对应一条实例:

实例ID仓库问题摘要修复状态步数失败原因

这里我不填具体数值,因为这次 50 条只是随机子集,一次运行的结果既不能代表公榜,也不适合当采购决策依据。如果你自己跑,把这五列填满就是一张可复现的观察表。想对比不同模型时,只需要改 LLM_MODEL 环境变量,再跑一遍同样的循环,把两张表放在一起看。

我在记录失败原因时做了简单分类,有助于快速定位模型行为。第一类是补丁无法应用,agent 修改了不该改的文件,或者 diff 格式与仓库当前状态不匹配;第二类是补丁能应用但测试仍然失败,说明 agent 找到了一个表面上合理的修改,但没有真正覆盖问题;第三类是超时,agent 在规定的步数内没有给出最终补丁。分类不需要太细,重点是能快速判断模型在一个子集中的失败模式是否比较集中。

需要明确一点:这篇文章里不会有 SWE-bench Verified 的公榜分数,也没有把某个模型在 500 条完整集上的数字搬过来。公榜数字需要注明查阅日期和来源才有意义;我这里没有做这个动作,所以干脆不写。本地复现的 50 条结果,我也不会宣称它和公榜有什么关系。如果你想知道某个模型在完整集上的表现,去 SWE-bench 官方仓库看,那里有持续更新的结果。

关于步数统计,我再多说一句。OpenHands 的日志通常是 JSON 事件流,每个事件带有事件类型和时间戳。我统计步数时,只筛选动作类型为工具调用的记录,排除掉 agent 的纯文本输出。这样算出来的步数能反映实际交互频率,而不是把聊天内容的长短也当作工作量。如果你想自己写解析脚本,注意不同版本的事件字段名可能不同,最好先打印几个事件看结构。

5. 从公榜到本地复现,TaoToken 在中间到底承担什么角色

SWE-bench Verified 公榜上写的每一行都是模型名,不是 API 网关名。它没有参加任何 benchmark,也不该被当成 benchmark 的参赛方。它的作用是让你用一把 Key、一个 Base URL 去接可能出现在公榜上的同一个模型。你在公榜上看到的分数,是模型官方或其他评测方在特定条件下跑出来的;你用这个统一网关接同一个模型,在本地子集上跑出来的数字可能不一样,因为模型版本、温度、采样种子、沙箱环境、测试依赖版本都会影响结果。所以正确态度是:公榜用于选型,本地复现用于验证你自己的任务类型。

跑完 50 条,我回到 TaoToken 控制台看这次评测调用是不是都入账了。控制台里能按时间筛选,能看到每次请求的模型、token 数和费用。有一个细节:OpenHands 日志里统计的 token 数比控制台里显示的偏小,因为日志只算了模型回复部分,控制台还计入了系统消息、历史消息等上下文 token。以后要对账,以控制台的账单维度为准,而不是 OpenHands 界面上的累计数字。

这种可审计性是正规 API 聚合通道和临时通道最直观的区别。临时通道只给你一个 URL 和一个 Key,请求发出去了没有明细,出了问题也找不到人。TaoToken 这边至少能查到每次调用的时间戳、模型 ID、token 和费用,也具备发票和配额管理这些企业需要的属性。对经常跑 Agent 评测的人来说,这比省几块钱重要。

控制台的配额预警也值得设置。跑 Agent 任务时,一个实例可能要来回很多步,如果外层循环没有设上限,脚本可能会在某个异常实例上反复重试,造成 token 消耗超出预期。我在跑之前设了一个消费上限,并且开启了邮件通知,这样即使半夜跑出问题,至少第二天早上能收到提醒,不会出现账单爆炸的情况。

你现在就可以打开 TaoToken,在控制台核对刚才这 50 条实例的调用记录是否入账,顺便创建一把新的 API Key,把 LLM_MODEL 改成你想对照的另一个模型,再跑一次同样的子集,生成你自己的横向对照表。这样你得到的就不是别人给的结论,而是你自己环境里的行为数据。

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

相关推荐

【机器视觉】Halcon 最新版本安装教程(HALCON 24.11.1.1 Progress-Steady)

注:如果使用评估版本,下载前先了解最新评估授权密钥所支持的版本。。近几年不同版本安装过程类似,均可参考本教程。

OpenSeek的博客 3万+

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

本文记录用 OpenHandsTaoToken SWE-bench Verified 子集的完整流程:以有效 patch 作为通过指标,从官方 verified.jsonl 取前 5 条实例,配置 LLM_BASE_URL 为 https://taotoken.net/api(官网链接:https://taotoken.net/?utm_source=taotoken_aicg_blog_end),并在 OpenHands 中设置 Key 与模型 ID。文章给出记录表模板,强调本地复现结果不代表

Ceshi01的博客 8

基于SVPWM控制策略的二极管钳位型NPC逆变器并网闭环simulink仿真

本文介绍了二极管钳位型三电平SVPWM技术在逆变器中的应用,通过控制IGBT的开关状态,将直流电压转换为三相交流电压,并采用钳位技术降低谐波失真,提高输出质量。文章还描述了基于SVPWM控制策略的二极管钳位型NPC逆变器并网闭环的Simulink仿真模型,该模型实现了并网控制,具有优异的性能,THD小于1%,适用于新手学习。仿真模型参数包括DC 800V、AC 380V、功率100kw,采用三电平NPC拓扑结构和SVPWM闭环控制策略,配备LCL滤波器,生成三电平波形,监测交流侧电压电流、有功功率和无功功率

2510_91195931的博客 453

OpenHands 实战TaoToken SWE-bench Verified 子集

OpenHands SWE-bench Verified 子集时,我把默认供应商切到 TaoToken,用固定 seed 抽 20 个实例复现 pass@1。OpenHands 负责在容器内改代码测试,TaoToken 提供统一 API Key 和 Base URL,同一 Key 可切换模型 ID。本轮 20 个实例通过 7 个,pass@1 为 35%,该结果不与官方公榜对比,仅用于同一配置下的复现。完整配置与排障步骤见 TaoToken 官网:https://taotoken.net/?utm

Ceshi01的博客 4

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 子集

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的博客 5

OpenHands 实战TaoToken SWE-bench Verified 实例

OpenHands 实战中,将 TaoToken 作为统一 API 通道,在 SWE-bench Verified 子集上复现了 10 个 Python 实例的 agent 轨迹。文中明确区分了通道与评估:TaoToken 只提供 OpenAI 兼容端点,不参与打分;一次未对接官方 evaluator 的运行无法给出有意义的 SWE-bench 分数,因此只记录 agent 是否正常退出,并整理启动命令、环境变量及日志状态表。运行中 9 个实例正常 finish,django 实例因上下文超限中断。完整

Ceshi01的博客 6

OpenHands 实战TaoToken SWE-bench Verified 的 Django 修复

本文记录用 OpenHands 作为修复 AgentTaoToken 作为模型通道,在最小 Django 仓库上SWE-bench Verified 风格修复流程。以 calculate_discount 类型缺陷为样例,验证 OpenHands 能依据失败测试自动读码、修改、回归,测试结果从 1 ERROR 转为 OK。全程使用固定 Base URL 与模型 ID,未改动测试文件即可完成修复;并给出迁移到 SWE-bench Verified 真实 django__django 实例的方法。所有配

Ceshi01的博客 7

OpenHands 实战TaoToken SWE-bench Verified 50 个实例

OpenHands SWE-bench Verified 50 实例的本地复现,先通过 TaoToken 固定模型通道与 Base URL,再以固定 seed 抽子集、max_iterations=40、4 路并发完成一轮评测。结果是 50 实例快照而非公榜成绩:通过 16 个(32%),断言失败 20 个(40%)。日志分类指向调参与复现:构建失败先修镜像,超时降并发,复现时用同一把 Key 对账。TaoToken 提供稳定 Key/Base URL,详见 https://taotoken.net

Ceshi01的博客 5

OpenHands 实战:用 TaoToken SWE-bench Verified 复现流程

OpenHands SWE-bench Verified 单条复现,本文记录用 TaoToken 统一 API 通道的完整链路。先在 TaoToken 创建 Key,将 OpenHands 的 Base URL 指向统一通道,并在 headless 模式下生成 patch;随后用官方 harness 验证 pass@1,最后从 trajectory.jsonl 统计 token 成本。文中不引用公榜分数,只提供同一把 Key 的本地复现步骤,方便自行核对配置与结果。完整操作参考 https://tao

Ceshi01的博客 6

OpenHands 实战TaoToken 当通道, SWE-bench Verified 的 Patch 生成

TaoToken 为统一模型通道,本文在 OpenHands 中配置 LLM_BASE_URL 与模型 ID,对 SWE-bench Verified 的 3 个实例做定向冒烟,验证 issue 到可判定 patch 的链路。记录 Docker 运行参数、补丁输出与 FAIL_TO_PASS 测试结果:两个实例补丁可 apply 但未通过,一个未产出补丁。同时给出 Base URL 斜杠、模型 ID 等踩坑点。复现可从 TaoToken 官网 https://taotoken.net/?utm_sour

Ceshi01的博客 5

OpenHands 实战:用 TaoToken SWE-bench Verified 示例修复

基于 OpenHands 复现 SWE-bench Verified 示例修复,笔者将 TaoToken 作为默认 API 供应商,用同一把 Key 和 Base URL 固定模型出口,排除通道差异。正文不含公榜分数,只记录本次复现的 resolved 与 FAIL_TO_PASS 结果。配置要点:Base URL 填 https://taotoken.net/api 不补 /v1,模型 ID 以模型广场为准,环境变量与 config.toml 的优先级需核对。完整复现步骤见 TaoToken 官网 htt

Ceshi01的博客 6

OpenHands 实战:用 TaoToken 执行 SWE-bench Verified 用例

本文用 OpenHands SWE-bench Verified 中 Django、pandas、pylint 三个 Python issue,不修代码,只记录现有测试在模型补丁下是否通过。TaoToken 不参与评测,只作 OpenAI 兼容 API 供应商,在 OpenHands 的 LLM_BASE_URL 填 https://taotoken.net/api,并用同一 Key 切换模型。文章给出 Docker 启动命令、run_infer.py 参数、排障点与空白的 pass/fail 记录表,

Ceshi01的博客 4

OpenHands 实战TaoToken SWE-bench Verified 单测修复

本文记录 OpenHands 实战:在 TaoToken 提供的 OpenAI 兼容 Base URL 和 API Key 下,SWE-bench Verified 风格的 FAIL_TO_PASS 单测修复。任务是一个三用例 pytest 项目,Agent 先读代码、执行 pytest、定位到 calculator.py 的 total -= v 累减 bug,改为 total += v 后重新验证,输出从 1 failed+2 passed 变为 3 passed。文中给出 OpenHands D

Ceshi01的博客 5

OpenHands 实战TaoToken 执行 SWE-bench Verified 仓库级修复

OpenHandsTaoToken 完成 SWE-bench Verified 仓库级修复,本文以 pytest-dev/pytest 的 fixture 缓存失效 issue 为例,完整演示从创建 Key、配置 Base URL 到运行 OpenHands 0.30.0 并取得 resolved 状态的过程。TaoToken 作为统一 API 通道,不参与代码生成,但需确保模型 ID 与模型广场一致且 Base URL 不带 /v1。文中给出可复现的 docker run 命令、排障记录与本地复现表

Ceshi01的博客 7

OpenHands 实战TaoToken 供 Key 验证 SWE-bench Verified 单实例

OpenHands 实战中,使用 TaoToken 作为默认模型供应商,以单一 Key 和 Base URL 验证 SWE-bench Verified 单实例 sympy__sympy-20590。文章记录了从环境变量配置、模型 ID 选择到启动 OpenHands CLI 的完整流程,并展示了 agent 生成的 git diff 与 pytest 验证结果。强调公榜成绩不可由单次运行代表,而是通过同一把 Key 复现 issue 修复动作,建立可对照的本地复现基线。TaoToken 统一兼容通道:

Ceshi01的博客 5

OpenHands 实战:用 TaoToken 复现 SWE-bench Verified 的 Python 修复任务

TaoToken 作为 OpenHands 的默认模型供应商,复现 SWE-bench Verified 里一个 Django Python 修复任务。文中给出 LLM_BASE_URL、LLM_API_KEY、LLM_MODEL 三个配置值的来源与格式,并以 docker run 启动 Agent,让其在读取 issue 后输出 patch,再结合 base_commit 与 test_patch 隐藏 pytest 作为完成标准。还列出 Base URL 多写 /v1、模型 ID 凭印象填、误用

Ceshi01的博客 5

OpenHands 实战TaoToken 供 Key 试 SWE-bench Verified 10 条复样子集

本文以 OpenHandsAgent Harness,通过 TaoToken 统一 API 通道 SWE-bench Verified 10 条复样子集。先介绍为何用子集冒烟测试,再演示从 TaoToken 创建 Key、配置 LLM_BASE_URL 与模型 ID,并用固定 seed 脚本抽取可复现的 10 条样例。随后以 Web 或 CLI 方式提交修复任务,用对照表记录 resolved/error/timeout,并强调不把子集结果当作公榜得分。最后给出 Base URL 多加 /v1、模型

Ceshi01的博客 4

OpenHands 实战TaoToken SWE-bench Verified 样本

OpenHands 实战里,用 TaoToken 作为默认模型供应商,完整通一条 SWE-bench Verified 的 Python issue,目标是让生成的补丁通过该样本的 FAIL_TO_PASS 测试。文章记录了 Docker 启动命令、LLM 环境变量、事件流里的 token 消耗构成,以及 Base URL 加 /v1、模型 ID 前缀等排障细节。本文只做单样本复现,不涉及 SWE-bench Verified 公榜成绩。想复现同一配置,可到官网创建 Key 并核对请求明细:https

Ceshi01的博客 6

OpenHands 实战TaoToken SWE-bench Verified 的修复流程

本文记录使用 TaoToken 作为统一 API 网关,在 OpenHandsSWE-bench Verified 实例 django__django-11099 的完整流程。通过 TaoToken 创建 Key,将 model_config 指向 TaoToken 的 Base URL,切换模型时只需修改 model 字段,无需重配环境。文章详细说明从控制台创建 Key、验证连通性、配置 OpenHands、运行评估脚本到记录解决率与平均步数的步骤,并给出同一实例下两个模型的对比方法。前往 ht

Ceshi01的博客 7
上一篇: SWE-bench 实战:TaoToken 跑通真实仓库 Issue
下一篇: Cline 评测:TaoToken 实测多轮重构的 Token 消耗
ceshi01
博客等级 码龄18年 1粉丝 4603原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值