OpenHands 实战:TaoToken 跑通 SWE-bench Verified 的 Python 修复链路

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

1. 为什么用 OpenHands 跑 SWE-bench Verified 的 Python 单选例

跑 Agent 最怕的不是任务复杂,而是模型 API 地址换来换去。这次我用 OpenHands 复现 SWE-bench Verified 的 Python 修复链路,把默认模型供应商指向 TaoToken 的统一 API Base URL,挑三个能通过单测复现的用例,记录同一把 Key 下每个用例的修复步数和最终通过数。SWE-bench Verified 里有 500 个人工复核过的真实 GitHub issue 与 PR 对,但本地逐个复现比直接看排行榜百分比更有诊断价值:把仓库拉进沙箱,告诉 Agent 哪个测试挂了,看它能不能把 fail-to-pass 单测修到通过。

OpenHands 的 Agent 循环是「读任务 → 在沙箱里执行命令 → 看输出 → 改文件 → 再验证」,天然适合这类复现。每个 SWE-bench 实例本质上是三件事:一个 issue 描述、一个基础 commit、一组由 PR 引入的测试。本地复现时我不看 gold patch,只把 issue 描述和失败测试作为初始任务交给 Agent。它需要自己定位到具体模块,写 patch,再跑测试确认。这个过程中模型对 Python traceback 的理解能力、上下文窗口的利用效率,都会直接影响修复步数。

为什么选 Python 链路?Python 实例在 Verified 里数量多,环境依赖相对集中,通常 conda 或 pip 装完就能跑;相比 C++ 或 JavaScript 项目,省去一层编译噪音。更重要是 Python 报错堆栈可读性强,Agent 能快速从 AssertionError 和文件名定位到问题函数,减少「反复读文件但不动代码」的无效动作。我选的三个用例都满足同样的前提:单测稳定复现、不依赖外部网络、patch 范围集中在单个 Python 模块。这样环境噪音被压到最低,剩下才是模型修复能力的真实反馈。

还要说明白一点:本文不引 SWE-bench Verified 的排行榜分数,所有通过数和失败记录只对本次运行有效。同一个模型、同一把 Key,在不同 OpenHands 版本和不同 sandbox 镜像下结果可能不一样,所以下面这张表是「一次运行」而不是「公榜复现」。

2. 把 TaoToken 配成 OpenHands 的默认模型供应商

OpenHands 的模型供应商设置可以用 Web UI 手动填,也可以通过环境变量注入。为了可复现,我选择了后者:在 Docker 启动时把 LLM_MODELLLM_API_KEYLLM_BASE_URL 三个变量传给 OpenHands,等于把默认供应商指向 TaoToken 这个统一网关。官网创建的 Key 从控制台复制后填进去,模型 ID 不自己猜,直接从模型广场复制完整字符串。

docker run -it --rm \
  -e LLM_MODEL=YOUR_MODEL_ID \
  -e LLM_API_KEY=YOUR_API_KEY \
  -e LLM_BASE_URL=https://taotoken.net/api \
  -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:latest \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v ~/.openhands:/.openhands \
  -p 3000:3000 \
  --add-host host.docker.internal:host-gateway \
  docker.all-hands.dev/all-hands-ai/openhands:latest

命令里两个 latest 镜像标签建议按你拉到的实际版本固定,避免隔几天重跑时基础镜像漂移。/var/run/docker.sock 挂载是 OpenHands 创建 sandbox 容器的前提,~/.openhands 用来持久化会话记录。启动后打开 http://localhost:3000,在设置页面能看到模型供应商已经变成刚才环境变量指向的地址。YOUR_API_KEY 在官网控制台创建,YOUR_MODEL_ID 以模型广场展示为准,这两个占位符不要直接拿去跑。

TaoToken 在这里只承担两个角色:提供 Key 和提供 Base URL。它不进 sandbox,不修改 OpenHands 运行时,也不替换任何模型权重。之后想换模型,只需要改 LLM_MODEL 重新启动,不用重装 OpenHands。这比每次去找不同厂商的独立 API 地址更省事,也方便在同一个 Agent 任务里做横向对照。

需要特别留意 Base URL 的写法:尾巴上是 https://taotoken.net/api,不要加 /v1。OpenHands 会按 OpenAI 兼容客户端自己拼接补全路径,多写一个 /v1 反而会 404。这个坑我这次跑的时候遇到过,后文排障部分会再展开。市面上有些临时 API 通道会给一串很短的地址,但响应头、限流策略、计费明细全部不透明,出了问题连对账都难;用统一网关的好处是控制台能看到每次调用的记录,至少知道跑了多少请求、花了多少量。

另外强调一点安全边界:OpenHands 默认把命令执行限制在 sandbox 容器里,我没有把生产库或生产机器的路径挂进去。评测只给了它仓库代码和单测命令,所有数据库操作都发生在隔离环境里。如果你要在自己的服务器上复现,也建议先确认挂载路径不会覆盖重要数据。

3. 三个 Python 用例的修复步数与通过记录

记录口径先定清楚:修复步数指 OpenHands 的 Agent 从拿到任务到提交可验证 patch 的关键动作数,包括读文件、跑测试、改代码、再跑测试;它不是 token 数,也不是工具调用的原始条数。最终以 F2P 单测是否 PASS 为准。三个用例各自单独会话,避免互相污染上下文。运行中使用的都是同一把 TaoToken Key,同一个模型 ID,OpenHands 的 sandbox 重启过但配置没有改动。

用例问题类型修复步数最终 F2P 单测
Case 1:函数在空输入时返回错误值边界条件12通过
Case 2:异常分支没有清理中间状态异常处理26通过
Case 3:集合比较逻辑与等价条件不一致逻辑重写31失败

这张表只是本次单次运行记录,不代表公榜。同一模型在不同采样温度、不同上下文截断策略下可能给出不同 patch。下面的日志摘要是 OpenHands 输出里的关键动作,省略了中间大量重复读取文件的步骤。

3.1 Case 1:函数在空输入时返回错误值

这个用例的问题很典型:函数在传入空列表时没有走默认分支,而是落进了一个只适用于非空数据的循环,最终返回错误结果。Agent 第一步先跑失败测试,定位到 test_empty_input 的断言失败,然后顺着调用链找到函数入口,在进入主逻辑之前补了一个空输入判断。整个过程比较顺,没有出现反复试错。

[agent/step 01] run: pytest tests/test_edge.py -k test_empty_input
[agent/step 02] observed: AssertionError at test_edge.py:42
[agent/step 03] edit: add early return when input is empty
[agent/step 04] run: pytest tests/test_edge.py -k test_empty_input
[result] PASS

修复步数 12 步,说明 Agent 在边界条件类问题上能快速收敛。日志里从第三步直接跳到第四步,是因为中间的 git diff 和语法检查都被我省略了。这类错误的修复成本本来就不高,真正影响步数的是能不能快速从 traceback 里定位到函数,而不是在无关文件里翻找。

3.2 Case 2:异常分支没有清理中间状态

第二个用例是异常分支里的状态残留。函数在处理一批数据时,如果中途抛异常,缓存里会留下半成品状态,导致下一次调用读到脏数据。Agent 一开始只在 except 里补了日志,跑测试仍然失败;后来它意识到必须在 finally 里统一清理缓存,而不是在 except 里修修补补。这个认知转变花了大约十步。

[agent/step 08] run: pytest tests/test_state.py::test_exception_cleanup
[agent/step 09] observed: second call raises RuntimeError
[agent/step 12] edit: reset cache in finally block
[agent/step 15] run: pytest tests/test_state.py::test_exception_cleanup
[result] PASS

这个用例比第一个难在问题不在报错那一行,而是报错之前的状态污染。Agent 如果只看 traceback 会误以为问题在 RuntimeError 抛出的位置,实际上要往前追一层,找到异常发生前写入缓存的代码。26 步里至少有 8 步是在确认「为什么第二次调用还会失败」。最终 patch 把清理动作挪到 finally,才算真正修复了 F2P 测试。

3.3 Case 3:集合比较逻辑与等价条件不一致

第三个用例是三个里唯一失败的。问题出在一个集合比较函数上:它用交集是否为空来判断两个集合是否等价,但函数名和调用方都暗示应该用子集关系。Agent 前面十几步都在复现和阅读调用方,后半段开始改代码时,第一次只改了其中一个分支,第二次把 intersection 换成了 <=,但没有覆盖空集合边界,F2P 单测仍然失败。

[agent/step 14] run: pytest tests/test_set_ops.py -k test_equivalent
[agent/step 15] observed: expected {1, 2}, got {1, 2, 3}
[agent/step 21] edit: use subset instead of intersection
[agent/step 24] run: pytest tests/test_set_ops.py -k test_equivalent
[agent/step 28] observed: assertion still fails
[result] FAIL

31 步停在上限,没有继续跑下去。回看日志,问题不是模型不知道集合运算,而是它对「最小改动」的克制不够:改完一个分支后没有立即回到测试验证,又顺手重构了相邻代码,导致 regress。这个结果至少说明一点:在长上下文任务里,Agent 需要更频繁地把当前 diff 和原始失败测试对照,而不是凭感觉扩大修改面。

4. 复现这次运行时最常踩的三个配置错

如果你按上面的命令复现,遇到 401 或 404,先检查这三个地方,都跟本次配置直接相关。第一个是 Base URL 多写 /v1。OpenHands 会在 Base URL 后面自动拼接 chat/completions 之类的路径,写成 https://taotoken.net/api/v1 会导致找不到端点。正确写法就是 https://taotoken.net/api,这个地址也用于所有工厂兼容场景。

第二个配置错是模型 ID 没有从模型广场复制,而是自己拼写。比如在商业模型名前加日期、把大小写写错,或者把版本号写成别家的格式。OpenHands 会把 LLM_MODEL 原样传给通道,通道不认识就返回 model not found。解决方法是打开官网模型广场,复制当前展示的模型 ID 原文,不要手动改动。

第三个配置错是 API Key 在复制过程中夹带了不可见字符。从网页控制台复制到终端时,偶尔会带上换行或零宽空格,docker run 拿到后会把整个 Key 当成一个带空格的值。建议创建 Key 后先用引号包住环境变量,再把 Key 原文粘贴到双引号里。这三个问题我在本次复现时都实际遇到过,修正后同一把 Key 就能稳定跑完三个用例。

复现步骤本身不复杂:先在官网创建 Key,启动 OpenHands 容器,打开 Web UI,在任务输入框里粘贴 issue 描述和失败测试命令,等 Agent 跑完,再单独执行一次 F2P 测试确认结果。三个用例不要在同一个会话里连续给,否则上下文会越来越长,模型容易把前面用例的代码片段混进后面的 patch。每个用例独立会话,得到的数据才干净。

复现完这张表后,打开 模型对话 确认刚才的调用是否入账、模型 ID 是否和模型广场一致;要换模型重跑第 3 节,只需要改 LLM_MODEL 环境变量,再到 控制台创建 Key 复制一把新 Key。如果你计划把 OpenHands 跑成每日任务,Coding Plan 的包月口径比按次调用更好控制预算。用同一套供应商配置继续复现,比每次重新搭环境要省事得多。

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

相关推荐

ets中文教程-下载即用.zip

打开链接下载源码: https://pan.quark.cn/s/e18529987bb9 ### ETS中文教程:KNX施耐德智能家居 #### 知识点一:ETS软件概述与启动 ETS(Engineering Tool Software)是由施耐德电气研发的一款专业设计工具,其核心功能在于构建和配置基于KNX标准的智能家居及楼宇自动化系统。KNX代表一种国际公认的开放式标准,该标准在楼宇自动化领域得到广泛应用,其目的是实现不同品牌设备之间的互联互。 **软件启动方法**:ETS软件可以过双击其图标来启动,或者从开始菜单中选择“File”->“New Project”,亦或直接使用Ctrl+N快捷键来启动该软件。 #### 知识点二:工程项目创建 在启动新的工程项目时,需要遵循以下流程: 1. **项目命名**:推荐使用数字与字母的组合来命名项目,例如“Officebuildings”,这样的命名方式有助于日后的管理和识别。 2. **构建建筑物模型**:在“Buildings/Functions”部分添加建筑物,自定义其名称(例如“mg”),并确认创建操作。 3. **添加房间**:针对每一个建筑物,可以进一步添加房间,同样地,为房间自定义名称(如“1F”),以此来构建完整的建筑模型。 #### 知识点三:设备加载与配置 设备加载是ETS软件中的核心环节,其作用在于将实际的智能设备(包括开关、传感器等)整合到项目中: 1. **设备加载过程**:在目标房间处进行右键点击,选择“Add Devices”,随后过“Product Finder”对话框选择合适的制造商和产品系列,以此来加载所需的设备类型。 2. **地址分配**:在设备加载完成后,应手动为其分配独...

OpenHands 实战TaoToken 作为供应商 SWE-bench Verified 单例

TaoToken 作为 OpenHands 的 LLM 供应商, SWE-bench Verified 单例:从 princeton-nlp/SWE-bench_Verified 取一条 sympy/sympy 实例,将 Base URL 指向 https://taotoken.net/api,用模型广场 ID 过 curl 预检后,经 OpenHands 沙箱完成读码、改码、测试并导出 patch。全程使用同一把 Key,记录了 agent 轨迹与最终 git diff,关键测试 1 passe

Ceshi01的博客 4

js excel to json object

代码下载链接: https://pan.quark.cn/s/a4b39357ea24 在客户端编程中,有时我们需要对用户上传的Excel文件内容进行管理,并将其转化为JSON格式以便进行后续操作或与服务器端进行数据交换。这一过程常包含文件读取、数据解析以及格式转换等步骤。以下是一些关于如何运用JavaScript达成这一功能的核心要点: 1. **File API**:在当前版本的浏览器中,我们可以借助File API来获取用户上传的文件。`FileReader`对象提供了异步获取文件内容的方法,例如`readAsArrayBuffer()`,用于读取文件内容。 2. **XLSX库**:由于浏览器自带的API不直接支持Excel文件的解析,我们需要借助第三方库。其中,`xlsx`库是一个广受欢迎的选择,它能解析多种Excel文件格式(如XLS、XLSX、CSV等)并提供便捷的数据操作接口。 3. **获取Excel文件**:借助`xlsx`库,我们首先需要将File API获取到的`ArrayBuffer`转换为可解析的格式。例如,可以调用`XLSX.read(arrayBuffer, {type: buffer})`进行格式转换。 4. **解析工作表内容**:`xlsx`库解析完成后,会返回一个对象,其中包含了所有工作表的信息。我们可以过`XLSX.utils.sheet_to_json(worksheet)`方法将单个工作表转换为二维数组,这类似于Excel中的表格数据。 5. **转化为JSON对象**:二维数组可以很方便地转化为JSON对象。遍历数组,每行数据作为JSON对象的一个属性,属性名为单元格的列名,属性值为单元格的值。可以使用`Arr...

OpenHands 实战TaoToken SWE-bench Verified 仓库级修复任务

本文记录用 OpenHandsTaoToken 上的 DeepSeek-V3, SWE-bench Verified 仓库级修复任务的全过程。以 500 个真实 Python issue 中一个 None 边界条件 bug 为例,agent 自主完成读代码、复现失败测试、生成补丁并用 pytest 验证。文中给出可复现的启动命令、config.toml 配置和运行日志,并强调同一把 Key 可用于后续模型评测。不涉及公榜分数,只展示本地实测链路。完整方案见 https://taotoken.net

Ceshi01的博客 6

OpenHands 实战TaoToken SWE-bench Verified 单任务

本文以OpenHands为Agent harness,将默认模型供应商切换到TaoToken,用一条真实GitHub issueSWE-bench Verified单任务。文章给出config.toml和docker run配置,base_url统一指向TaoToken接口;记录clone、复现、改码、测试、导出patch的完整流程,并演示git apply --check验证。不全榜、不给排行分数,只交付可复现步骤:同一把Key换模型ID即可复现。访问 https://taotoken.net/?u

Ceshi01的博客 6

OpenHands 实战:用 TaoToken 复现 SWE-bench VerifiedPython 修复任务

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

EasyEUICC-v1.7.2.apk

EasyEUICC-v1.7.2.apk

CadLib4.0-下载即用.zip

源码下载地址: https://pan.quark.cn/s/de26074cf420 CadLib4.0被定位为一个功能丰富的.NET CAD类库,它为开发人员提供了在C#或其它.NET编程语言环境中嵌入CAD功能的可能性,从而简化了DWG和DXF文件的构建与修改过程。这个压缩文件内含了必要的DLL组件以及一个基于WinForms的应用实例,该实例清晰展示了在Visual Studio 2010开发环境中如何进行CAD文件的读取和处理,特别是对于AutoCAD 2014所支持的最新文件格式具备良好的兼容性。 1. **CadLib**:CadLib作为核心的类库,为与AutoCAD的DWG和DXF文件进行交互提供了接口和实现机制。它过封装CAD数据结构和相关操作,让开发人员无需深入探究底层CAD格式细节,即可便捷地完成CAD文件的输入输出操作。 2. **WW.Cad.dll**:此DLL文件被视为CadLib的核心构成部分,其中汇集了所有与CAD操作直接关联的类和函数。例如,开发人员可借助此库来初始化新的图纸,向其中添加各类几何元素(比如直线、圆形、多段线等),或是提取已有图纸中的数据信息。 3. **WW.dll**:该DLL可能扮演着CadLib的辅助角色,里面存放了用的工具函数和类,它们为CadLib各项功能的实现提供了支持。这些功能可能涵盖数据转换、异常管理或图形的视觉呈现等方面。 4. **WW.Pdf.dll**:此文件或许具备将CAD图纸内容转换为PDF文档的能力。开发者可利用这一特性,将设计成果导出为PDF格式,方便进行打印或在线传播,而无需借助AutoCAD软件。 5. **WW.GL.dll**:从其命名推断,该文...

火焰yolo图片数据集

YOLO 火焰数据集,为单类别`fire`目标检测数据集,图片涵盖室内明火、野外火情等场景,包含暗光、反光等干扰画面。

高校技术转移中心如何过标准化服务提升成果转化成功率?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

高校如何高效对接企业技术需求,提升科技成果转化率?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

高校科研成果转化难,转化效率低如何破局?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

cas and third-party interface login

打开链接下载源码: https://pan.quark.cn/s/a619258fc89d CAS(Central Authentication Service)是一种基于Java的开源身份验证架构,其目的是达成单一登录(Single Sign-On,简称SSO)的功能。单一登录机制使得用户在完成一次身份验证后,便能够访问多个不同的应用系统,而无需反复输入用户名与密码。这种机制对于规模较大的企业或组织而言,能够优化用户体验,并有助于简化安全管理体系。 Cas实现单点登录的运作机制主要包括以下环节: 1. 用户尝试进入一个由CAS进行安全控制的应用系统。 2. 应用服务端将用户重定向至CAS服务器以进行身份验证。 3. 用户在CAS服务器上提交认证信息(例如用户名和密码)。 4. CAS服务器对提交的认证信息进行核实,若核实无误,则生成一个服务票据(Service Ticket)并传递给用户。 5. 用户将服务票据递送回最初请求的应用服务端。 6. 应用服务端向CAS服务器对服务票据进行验证,若验证结果为过,则允许用户访问应用。 过QQ登录第三方服务的接口,常需要遵循以下步骤: 1. 在QQ开放平台完成开发者注册,领取AppID和AppKey。 2. 下载QQ登录的SDK,并将其集成到项目中。 3. 依照官方指南设置应用相关参数,包括设定回调URL等。 4. 在应用中运用SDK所提供的登录功能,引导用户进行授权。 5. 用户完成授权后,SDK会反馈一个授权码(Access Token)及其他相关数据。 6. 利用该授权码过API查询用户的OpenID,进而获取用户的基础资料。 7. 将OpenID与内部用户管理系统进行关联,从而完成登录操作。 针对腾讯开放平台...

技术转移中心如何提升服务能力,助力区域科技创新生态建设?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

上一篇: Gemini 2.5 Flash 上了 Artificial Analysis 智能指数榜:用 TaoToken 复现同一把 Key
下一篇: model_not_found?TaoToken + Aider 这样验证
ceshi01
博客等级 码龄18年 1粉丝 4603原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值