我们把 AI 智能体当作高级工程师来对待,那为什么还要像评估初级工程师一样去评估它们呢?
01
高级工程师无需过度详细的需求就能构建功能
高级 SWE-Bench 功能任务包含的指令非常贴近现实,读起来就像自然语言消息,而不是过度详细的需求。为了可靠地评估这些任务,我们引入了一个验证智能体,它使用专家设计的配方来编写行为测试,并能根据提交的解决方案进行调整。
02
高级工程师能根据行为报告进行运行时调查来解决 Bug
高级 SWE-Bench Bug 任务反映了棘手的用户报告,并侧重于调查过程,从启动服务到调试微妙的运行时问题。这些任务源自那些需要大量运行时调查才能解决的 PR(例如,日志、性能分析数据、复现步骤)。
03
高级工程师无需被告知就能交付正确的代码
高级 SWE-Bench 通过结合运行时正确性测试与基于观察到的代码库实践的多个质量指标,来评估优雅的解决方案。此外,验证器和验证过程可以针对那些在指令中未明确说明但却是代码库关键实践的内容进行测试。
关于我们的技术贡献的更多信息,包括验证智能体、品味评分和质量控制流程,
请阅读博客文章
过度详细
6,008 字符 · ~39 个代码符号
swe-bench-pro/instruction.md
1
### 将 Google Books 添加为 BookWorm 的元数据源,用于回退/暂存导入
2
3
### 问题 / 机会
4
5
BookWorm 目前依赖 Amazon 和 ISBNdb 作为其主要元数据源。当元数据缺失、格式错误或不完整时——尤其是对于只有 ISBN-13 的书籍——这就会带来问题。因此,通过 promise items 或
`/api/import`
提交的不完整记录可能无法得到丰富,从而在 Open Library 中留下低质量的条目。这一限制影响了数据质量以及用户导入的成功率,尤其是对于不太常见或国际化的书目。
6
7
### 理由:为什么我们应该做这项工作,以及可衡量的影响是什么?
8
9
将 Google Books 集成为备用元数据源,增强了 Open Library 补充和暂存更丰富版本数据的能力。这提高了导入图书的完整性,减少了因元数据稀疏而导致的导入失败,并增强了用户对导入体验的信任。其影响可通过导入成功率的提升以及“Book 978...”这类占位条目出现频率的降低来衡量。
10
11
### 定义成功:我们如何知道问题已被解决?
12
13
- BookWorm 能够使用 ISBN-13 从 Google Books 获取并暂存元数据。
14
15
- 自动化测试确认了对各种 Google Books 响应的准确解析,包括:
16
17
- 正确映射可用字段(标题、副标题、作者、出版社、页数、描述、出版日期)。
18
19
- 正确处理缺失或不完整的字段(例如,无作者、无 ISBN-13)。
20
21
- 当 Google Books 返回零个或多个匹配结果时,不返回任何结果。
22
23
### 方案
24
25
在 BookWorm 中引入对 Google Books 作为备用元数据提供者的支持。当 Amazon 查询失败或仅有 ISBN-13 可用时,BookWorm 应尝试从 Google Books API 获取元数据并将其暂存以供导入。这包括更新源逻辑、元数据解析,并确保来自
`google_books`
的记录被正确处理。
26
27
要求:
28
- 元组
`STAGED_SOURCES`
在
`openlibrary/core/imports.py`
中必须包含
`"google_books"`
作为有效源,以便来自 Google Books 的暂存元数据能被导入管道识别和处理。
29
30
- 用于暂存 bookworm 元数据的 URL 是 "http://{affiliate_server_url}/isbn/{identifier}?high_priority=true&stage_import=true",其中 affiliate_server_url 来自 openlibrary/core/vendors.py,参数 identifier 可以是 ISBN 10、ISBN 13 或 B*ASIN。
31
32
- 当在
`openlibrary/plugins/importapi/code.py`
中使用
`supplement_rec_with_import_item_metadata`
补充记录时,如果
`source_records`
字段存在,则必须添加(扩展)新的标识符,而不是替换现有值。
33
34
- 在
`scripts/affiliate_server.py`
中,一个名为
`stage_from_google_books`
必须尝试使用 Google Books API 获取并暂存给定 ISBN 的元数据,如果成功,则通过将该元数据添加到对应的批次中来持久化它,使用
`Batch.add_items`
。
35
36
- 在
`scripts/affiliate_server.py`
中的联盟服务器处理程序,对于从 Amazon 返回无结果的 ISBN-13 标识符,必须回退到 Google Books,但仅当请求中同时设置了查询参数
`high_priority=true`
和
`stage_import=true`
时才这样做。
37
38
- 如果 Google Books 对单个 ISBN 查询返回了多个结果,则该逻辑必须记录一条警告消息,并跳过暂存元数据,以避免引入不可靠的数据。
39
40
- 从 Google Books 响应中解析并暂存的元数据字段必须至少包括:
`isbn_10`
、
`isbn_13`
、
`title`
、
`subtitle`
、
`authors`
、
`source_records`
、
`publishers`
、
`publish_date`
、
`number_of_pages`
和
`description`
,并且必须符合 Open Library 导入系统所期望的数据结构。
41
42
- 在
`scripts/promise_batch_imports.py`
中,必须更新暂存逻辑,以便在丰富不完整记录时,
`stage_bookworm_metadata`
被用来替代之前任何仅依赖 Amazon 的直接逻辑。
43
44
引入的新接口:
45
以下是新的公共接口,已移除不相关文件中的条目。
46
47
函数:fetch_google_book
48
位置:scripts/affiliate_server.py
49
输入:isbn (str) — ISBN-13
50
输出:如果 HTTP 状态码为 200,则返回包含 Google Books API 原始 JSON 响应的字典,否则返回 None
51
描述:为给定的 ISBN 从 Google Books API 获取元数据。
52
53
函数:process_google_book
54
位置:scripts/affiliate_server.py
55
输入:google_book_data (dict) — 从 Google Books 返回的 JSON 数据
56
输出:如果成功,则返回包含规范化 Open Library 版本字段的字典,否则返回 None
57
描述:将 Google Books API 数据处理成规范化的 Open Library 版本记录。
58
59
函数:stage_from_google_books
60
位置:scripts/affiliate_server.py
61
输入:isbn (str) — ISBN-10 或 ISBN-13
62
输出:bool — 如果元数据成功暂存则返回 True,否则返回 False
63
描述:为给定的 ISBN 从 Google Books 获取并暂存元数据,如果找到则将其添加到导入批次中。
64
65
函数:get_current_batch
66
位置:scripts/affiliate_server.py
67
输入:name (str) — 批次名称,例如 "amz" 或 "google"
68
输出:与提供的名称相对应的 Batch 实例
69
描述:检索或创建一个批次对象,用于暂存导入项。
70
71
类:BaseLookupWorker
72
位置:scripts/affiliate_server.py
73
描述:用于 API 查询工作线程的基础线程类。使用提供的函数处理队列中的项。
74
方法:BaseLookupWorker.run(self)
75
位置:scripts/affiliate_server.py
76
描述:公共方法,循环处理队列中的项,并为检索到的每个项调用 process_item 可调用对象。
77
78
类:AmazonLookupWorker
79
位置:scripts/affiliate_server.py
80
描述:继承 BaseLookupWorker 的工作线程,用于批量处理 Amazon API 查询。
81
方法:AmazonLookupWorker.run(self)
82
位置:scripts/affiliate_server.py
83
描述:公共方法重写,从队列中批量收集最多 10 个 Amazon 标识符,使用 Amazon 批量处理程序一起处理它们,并根据 API 约束管理时序。
真实
639 字符 · 0 个代码符号
#
eng-platform
工程师
上午 10:42
编码智能体
应用
上午 10:43
正在启动沙箱…
排行榜
解题要求
验证器
通过
验证
通过
评分标准
>0.5
膨胀率
<2×
练习
>2/5
相对品味
>2/5
- 1Claude Opus 4.8Mini-SWE-Agent · max24.0%
- Claude Sonnet 5Mini-SWE-Agent · max19.4%
- 2GPT-5.5Mini-SWE-Agent · xhigh16.0%
- 3Claude Opus 4.7Mini-SWE-Agent · max14.1%
- 4GPT-5.4Mini-SWE-Agent · xhigh14.0%
- 5GLM-5.2Mini-SWE-Agent · max12.5%
- 6Kimi K2.6Mini-SWE-Agent · default8.2%
- 7Claude Sonnet 4.6Mini-SWE-Agent · high8.2%
- 8Gemini 3.1 ProMini-SWE-Agent · high6.1%
- 9Gemini 3.5 FlashMini-SWE-Agent · medium3.0%
| # | 模型 | 努力程度 | 解题率 (pass@1) |
|---|---|---|---|
| 1 | Claude Opus 4.8 | max | 24.0% |
| Claude Sonnet 5 | max | 19.4% | |
| 2 | GPT-5.5 | xhigh | 16.0% |
| 3 | Claude Opus 4.7 | max | 14.1% |
| 4 | GPT-5.4 | xhigh | 14.0% |
| 5 | GLM-5.2 | max | 12.5% |
| 6 | Kimi K2.6 | default | 8.2% |
| 7 | Claude Sonnet 4.6 | high | 8.2% |
| 8 | Gemini 3.1 Pro | high | 6.1% |
| 9 | Gemini 3.5 Flash | medium | 3.0% |
有品味的解题率 (pass@1)
平均
/ 任务
表现最佳的前沿模型在超过 75% 的时间里,未能以资深级别的正确性和品味完成任务。
任务
Senior SWE-Bench 任务来源于从库到多服务应用等各类仓库中的 PR,由各自仓库中拥有数百次提交经验的工程师编写。我们重点关注涉及多阶段、多栈的功能性 PR,以及需要大量运行时调查的 Bug/性能 PR。有关任务设计的更多信息,请阅读博客文章。
任务
50 个公开
50 个私有
仓库
posthog
(8)
electric
(6)
gitea
(6)
better-auth
(4)
harbor
(4)
+ 另外 7 个
Python 服务
Elixir
Go
SQL
TypeScript 库
Python 库
Rust
TypeScript 前端
+ 另外 4 种
更自然的欠明确指令
Senior SWE-Bench 任务反映了与智能体的自然沟通,其中位数指令长度仅为 SWE-Bench Pro 的 31%。
更多样化的任务范围
Senior SWE-Bench 功能任务可跨越多个服务,每个功能任务平均涉及 11 个文件。
更长的任务周期
Senior SWE-Bench 任务被设计为长周期任务,即使是最强的智能体也需要数百步才能完成。
Senior SWE-Bench
功能任务
Senior SWE-Bench
Bug/性能任务
DeepSWE
SWE-Bench Pro
Senior SWE-Bench
对比
·
更自然的欠明确指令
Senior SWE-Bench 任务反映了与智能体的自然沟通,其中位数指令长度仅为 SWE-Bench Pro 的 31%。
Senior SWE-Bench
功能任务
Senior SWE-Bench
Bug/性能任务
DeepSWE
SWE-Bench Pro
更多样化的任务范围
Senior SWE-Bench 功能任务可跨越多个服务,每个功能任务平均涉及 11 个文件。
Senior SWE-Bench
功能任务
Senior SWE-Bench
Bug/性能任务
DeepSWE
SWE-Bench Pro
更长的任务周期
Senior SWE-Bench 任务被设计为长周期任务,即使是最强的智能体也需要数百步才能完成。
Senior SWE-Bench
对比
·
参考解决方案的源代码行数与文件数在所有三个基准测试中均以相同方式衡量。指令长度不包括测试框架的样板代码。其他基准测试的 token 数和步数基于其自行报告的指标。