OSWorld vs WindowsAgentArena vs AndroidWorld vs BrowserGym:校验器就是基准本身

这四个东西被当作对同一种能力的四次测量来引用,而它们其实是四个不同的对象。其中两个根本不拥有自己的校验器:WindowsAgentArena 把 OSWorld 的指标库整套搬了过来,而 BrowserGym 是一个 harness、导入的是被包装基准各自写的那一套。决定一个分数能不能迁移的那条轴,不是操作系统、也不是任务数量——而是那个检查读的是什么。OSWorld 会自己先按下 Ctrl+S,再把存好的文件与一份标准副本比对;AndroidWorld 读的是设备状态,而那是一个没有别的运行会共享的随机任务实例;BrowserGym 那个 reward 浮点数,在一行里装的是二元的页面检查,在下一行里装的是词袋 F1。

作者 智能体 AI 维基 29 分钟读完

这四个里有两个根本不拥有自己的校验器——而这正是让它们的分数不可比的那个事实,也是没有任何一篇对比提到的事实。WindowsAgentArena 把 OSWorld 的指标库整套搬了过来;BrowserGym 是一个 harness,导入的是被包装基准各自写的那一套。所以决定一个数字能不能迁移到你产品上的那条轴,不是操作系统、也不是任务数量——而是那个检查读的是什么。请挑那个「校验器所读的东西与你对完成的定义所读的东西相同」的基准,对比的其余部分可以不看。

一览

四个都被称作「GUI 智能体基准」的项目,按「谁写了那个检查」来读。

项目许可默认题集谁拥有校验器
OSWorld(xlang-ai)Apache-2.0368 道题,10 个领域它自己——225 个指标函数
WindowsAgentArena(微软)MIT154 道题,12 个领域OSWorld——那个库是搬过来的
AndroidWorld(google-research)Apache-2.0116 道手写题,20 个应用它自己——每题一个成功函数
BrowserGym(ServiceNow)Apache-2.08 个基准,含 WebArena 的 812 道没有谁——它导入各自的那一套

最后一列请读两遍。它就是整个对比。这里面三个是环境、一个是 harness;而那三个环境里只有两个写了自己的评分器——因为第二个抄了第一个。

Where each GUI agent benchmark leans A four by four matrix. OSWorld owns its verifier, scores a file on disk, uses fixed task instances, and resets a VM snapshot. Windows Agent Arena vendors OSWorld's verifier library, also scores a file on disk, uses fixed instances, and resets a thirty-gigabyte Windows golden image. Android World owns a per-task success function, scores device state, randomises every task instance from a parameter schema, and resets an emulator. BrowserGym owns no verifier and imports each wrapped benchmark's own, so what it scores depends on the benchmark, instances are seeded, and reset means re-provisioning the web applications. The four axes that decide whether a score transfers Owns its verifier Success reads Task instance Reset unit OSWorld Yes, 225 funcs A file on disk Fixed VM snapshot WinAgentArena Vendors OSWorld's A file on disk Fixed 30 GB image AndroidWorld Yes, per task Device state Randomised Emulator BrowserGym No, imports it Benchmark decides Seeded Web apps Owns it outright Partly Delegated or fixed
在功能清单上看起来最像的那两行——OSWorld 与 WindowsAgentArena——几乎在任何一项上都没有差别,因为其中一个就是另一个移植到 Windows 上的版本。

把它们分开的那个问题

Who owns the verifier in each of the four projects Two lanes. In the upper lane, OSWorld owns a library of metric functions and Windows Agent Arena vendors that same library, so both score an artifact on disk — a saved file compared against a gold copy. Android World owns a per-task success function that reads device state after the run. In the lower lane, BrowserGym owns no verifier at all: it is a harness whose task interface returns a reward float, and for a WebArena task it imports the upstream WebArena evaluator router, while an AssistantBench task scores a typed answer with a token-bag F1. The same reward slot therefore carries a binary file comparison in one case and a partial-credit text score in another. Three projects own a verifier. One imports whoever wrote the benchmark. Owns its verifier OSWorld 225 metric functions 368 tasks, Ubuntu VM WindowsAgentArena vendors the same library 154 tasks, Win 11 VM AndroidWorld is_successful(env) per task 116 tasks, 20 apps reads: a saved file, compared byte for byte against a gold copy reads: device state, on a random instance Owns no verifier BrowserGym a harness, 8 benchmarks validate() -> reward float WebArena, 812 tasks imports evaluator_router upstream AssistantBench token-bag F1 on a typed answer one reward slot, two incompatible meanings: binary page state in one row, partial credit in the other
上面那条泳道:项目自己决定什么算做完。下面那条:它提供循环,而继承别人的定义。

对任何一个智能体基准都该问一句:运行结束时,评分器看的是什么?其余一切都由此而来。这里的四个答案是真正不同类的东西——一个文件的字节、一台设备的状态、一个网页加一个输入的答案,以及其中一例里一袋经过规范化、按部分得分来评的词元——而再多的共享词汇(「成功率」)也不能让它们可通约。

这不是在抱怨基准的设计。每一个选择对它的作者所要测的东西来说都是对的。问题在下游:一个标题写着「成功率」的排行榜列,邀请你把一个的 38% 与另一个的 41% 读成一次对比,而它不是——就像单元测试通过率与客户满意度分数都是百分数一样。

真正决定该用哪个的那个测试:用一句话写下你的产品是怎么知道一个任务成功了的。如果答案是「数据库里有一行变了」,你要的是一个读状态的校验器。如果是「用户拿到了正确答案」,你要的是一个评答案的。然后挑那个已经这么做的基准,并把另外三个当作关于另一个问题的证据。

OSWorld——校验器是一个库,而它会动手

机制

一道题是一个 JSON 文件,有三部分:一段 config 用来把机器布置好、一条自然语言的 instruction,以及一个 evaluator——点名一个函数,加上它的期望输入与实际输入。desktop_env/evaluators/metrics/ 里有跨十五个模块的 225 个函数——libreoffice.py、chrome.py、pdf.py、vlc.py、vscode.py 等等。在那些任务文件里,用得最多的校验器是 compare_table(56 道题),其后是 infeasible(26)、compare_pptx_files(23)与 check_include_exclude(15)。

团队会漏掉的那一部分

这个 evaluator 不是一次读取。它有一段 postconfig,会先去操作那个桌面。下面是一个真实的例子,来自一道要求智能体加一列到期日的 LibreOffice Calc 题:

activate_window  window_name: "MaturityDate.xlsx - LibreOffice Calc", strict: true
sleep            0.5
execute          python -c 'import pyautogui; pyautogui.hotkey("ctrl","s")'
sleep            0.5
func             compare_table
expected         cloud_file   # fetched from a HuggingFace dataset repo
result           vm_file      /home/user/MaturityDate.xlsx

在智能体的成果被看上一眼之前,有四件事必须顺利:窗口标题必须精确匹配、不能有保存对话框截走那次击键、半秒必须够那次写入落盘,以及那份标准文件必须下载成功。以上任何一条不成立,一个正确的智能体就在这道题上失败了。在整个题集里,评分路径对着 368 道题发出了 358 次 execute、307 次 sleep、293 次 download 与 200 次 activate_window——这给这个基准自身的可靠度设了一条下限,而没有任何公开分数会报出它。这个问题的一般版本在当检查本身必须动手里。

诚实的那些地方

test_infeasible.json 里有 25 道「正确答案是拒绝」的题,这是一个确实不错的设计决定,而多数题集跳过了它。另外,2025 年 7 月宣布的 OSWorld-Verified 修掉了社区报告的若干问题、加上了 AWS 并行化,并重跑了模型结果——项目还明确告诉你去和新数字比、而不是和旧的比。请把任何不带版本的 OSWorld 数字当作「无从识别」。

WindowsAgentArena——同一个评分器,另一台机器

机制

微软这个项目是 OSWorld 移植到 Windows 11,而它并不隐瞒这件事。src/win-arena-container/client/desktop_env/evaluators/metrics/ 就是 OSWorld 的模块清单,只是在 chrome.py 的位置加了一个 edge.py。任务文件的词汇也一样:在它的例子里,这些 func 是 exact_match(92)、compare_table(48)、infeasible(26)、check_json_settings(20)。test_all.json 里有跨 12 个领域的 154 道题。

团队会漏掉的那一部分

任务文件有两套而不是一套:examples/ 与 examples_noctxt/,154 道题对应 308 个文件。那就是那个在 2024 年 11 月加上的难度开关——把 diff_lvl="hard" 打开,智能体就必须自己去找到并打开对的程序,而不是由任务配置替它把场面布好。这是在报一个 WindowsAgentArena 数字时最该一并说明的那一件事,而它是一个 start_client.sh 里的变量、不是一个题集名字,所以它传播得很差。

成本的形状

重置的单位是一个 30 GB 的 Windows 11 标准镜像,由你自己从一份评估版 ISO 构建出来,里面托着一个接收智能体命令的 Python 服务器。好处是 Azure ML 的并行化把几百道题从几天变成几分钟。坏处是你的结果是「你构建的那个镜像」的一条性质,而两支团队的镜像并不是同一个产物。

AndroidWorld——唯一一个没有两次运行共享同一道题的

机制

一道题是一个类,带一个 template 字符串、一份用于参数的 JSON schema、一个 generate_random_params() 类方法,以及 is_successful(env) -> float。目标字符串是用参数格式化出来的模板,于是跨 20 个应用的 116 道手写题实例化出项目所称的数百万种独特变体。成功是在运行之后从设备状态里按程序读出来的——跨 96 个 task-eval 模块的 57 个 is_successful 实现。MiniWoB++ 搭在同一个 harness 里一起跑。

团队会漏掉的那一部分

随机实例化是这一组里最强的抗记忆性质、也是最弱的可复现性质——而它们是同一个设计选择。一个分数是在「别人没抽到过的那些实例」上的平均值,于是两篇论文的 AndroidWorld 数字是同一分布里的样本、而不是同一张卷子上的成绩;而这意味着的那份方差通常不会被报出来。这在成为一个能力问题之前,先是一个统计功效问题。

那个安静的参数

步数预算在 2024 年 11 月被重新校准为「每道题约人类平均完成时间的两倍」。这是一个站得住脚、也记录清楚的选择,而它同时是一个旋钮:一个本来会在 2.5 倍人类时间内做完的智能体会得零分,而一个按别的倍数调出来的题集会把系统排出不同的次序。那个预算该放在分数旁边——就像在预算对齐评估里那样。

BrowserGym——一个 harness,却被当作基准来卖、来读

机制

每道题都实现 AbstractBrowserTask:setup(page)、validate(page, chat_messages) -> (reward, done, message, info)、一个可选的 cheat(),以及 teardown()。那个接口背后坐着八个基准——MiniWoB(105 个任务类)、WebArena(812)、WebArena-Verified(812)、WebArena-Lite(165)、VisualWebArena(910)、WorkArena、AssistantBench 与 WebLINX——每个都作为自己的包安装。

团队会漏掉的那一部分

BrowserGym 不评分。它的 WebArena 任务从上游包里导入 webarena.evaluation_harness.evaluators.evaluator_router 并调用它;那个包还会在 import 时去拉 NLTK 的 punkt_tab 分词器,因为 WebArena 自己的评分做的是文本匹配。所以一个「BrowserGym 结果」继承了底下那个基准的每一条性质,包括它评分器的那些怪癖;而统一的 reward: float 把这些差别藏了起来:

# same interface, incompatible semantics

WebArena task      -> reward from the upstream evaluator_router
                      (page state + answer matching, essentially pass/fail)

AssistantBench     -> reward from a token-bag F1 over normalised spans
                      (articles stripped, punctuation stripped, numbers
                       normalised, then per-span F1 aligned greedily)
                      -> 0.63 is a real value here, and meaningless above

于是跨 BrowserGym 的各个基准做平均,就是把一个通过率与一个部分得分拿去平均。对一个 harness 来说,允许这件事是合理的;而把它放进标题里是不合理的。

它真正擅长什么

一份智能体实现对上八个基准,而观察空间(截图、无障碍树、set-of-marks)在同一个地方配置。如果你在做一个 Web 智能体,那份可移植性比任何单个题集都更值钱,而它是对的默认选项。只是请报逐基准的数字,永远不要报一个 BrowserGym 平均值。

任务数量,以及为什么最长的那根条信息量最小

Tasks in each default suite A horizontal bar chart of task counts read from each project's own registry. VisualWebArena has nine hundred and ten, WebArena eight hundred and twelve, OSWorld three hundred and sixty-eight, WebArena-Lite one hundred and sixty-five, Windows Agent Arena one hundred and fifty-four, Android World one hundred and sixteen hand-crafted tasks, and MiniWoB plus plus one hundred and five task classes. Four of the seven are reached through BrowserGym rather than being benchmarks of their own, and no two bars are scored by the same verifier. Tasks in the default suite counts read from each project's own task registry VisualWebArena 910 WebArena 812 OSWorld 368 WebArena-Lite 165 WindowsAgentArena 154 AndroidWorld 116 MiniWoB++ 105 A benchmark of its own Reached through BrowserGym
七个题集、七份注册表,而没有两根条是由同一个校验器打的分。910 与 116 不是同一个单位——一个数的是固定实例,另一个数的是会随机实例化的任务族。

看这样一张图的诱惑是把任务数量读成覆盖面。它更接近一份重置成本预算。一个 910 道题的 Web 题集跑在重新置备出来的 Web 应用上;一个 154 道题的 Windows 题集跑在一个 30 GB 镜像上;一个 116 道题的 Android 题集跑在一个模拟器上、每次还抽一组新参数。那是每道题相差若干个数量级的基础设施,而这正是为什么大题集都是 Web 题集、而且会一直如此。

更值得追问的那个数字是「有多少个不同的校验器产出了这个分数」,因为那才是「单个评分器的一个 bug 最多能挪动多少」的上界。OSWorld 的 368 道题归结到几十个函数,而仅 compare_table 一个就覆盖其中 56 道——于是一个表格比较器里的回归就能挪动这个题集的 15%。

什么时候选哪个

如果你的产品……选因为
产出文档与文件OSWorld(Verified)它的校验器比对的是产物,而那就是你对完成的定义。
自动化 Windows 业务线应用WindowsAgentArena,hard唯一跑在真实 Windows 上的题集;hard 模式撤掉了任务配置那层脚手架。
驱动移动应用,或需要抗记忆AndroidWorld随机实例,加上能在 UI 改动后仍然成立的读状态校验器。
是一个 Web 智能体BrowserGym一份智能体、八个基准、一处观察空间配置——请逐基准汇报。
需要一个放进幻灯片的数字一个都别用这里面没有两个在测同一件事;请在你自己的任务上建一个题集。

而无论你选哪个,都请加上这些题集都没有附带的那个标准态自检:手工构造出每道题的正确终态、在没有智能体参与的情况下拿校验器去跑它,并把任何在那里就失败的题丢掉。每一个在手工造出的成功上失败的校验器,都代表一道你一直当成模型缺陷在打分的题。

常见问题

我能把一个 OSWorld 分数与一个 WindowsAgentArena 分数作比较吗?

比拿它们中任一个去和另外两个比要靠得住些,因为这两者共享一个校验器库和一种任务文件格式。但不能直接比:题集不同(368 对 154)、应用不同,而 WindowsAgentArena 还有一个难度开关,决定智能体是否必须自己把任务布置好。请把它们当作同一台测量仪器用在了两张不同的卷子上。

BrowserGym 是一个基准吗?

不是。它是一个在八个基准之上提供统一任务接口的 harness,而它不拥有任何校验器——它的 WebArena 任务导入的是上游 WebArena 的 evaluator。一个结果永远是在其中某一个被包装基准上的结果,而跨它们做平均会把通过率与部分得分混在一起。

这里面哪一个的评分最可靠?

AndroidWorld 的校验器最被动——它们读的是设备状态,而不是去操作设备以便让状态可读——所以在「智能体成功了的机器上」它们失败的途径最少。这与「最可复现」是两个不同的主张,而在后者上它的随机实例化是扣分项。

AndroidWorld 的「数百万种变体」是不是意味着它不能被钻空子?

它提高了记住具体实例的成本,这是真的。它并不妨碍去拟合那 116 个任务族、那 20 个应用,或那些模板句式;而步数预算仍然是一个可以针对去优化的固定目标。抗记忆是实例的一条性质,不是任务分布的。

OSWorld 为什么要在一道题运行期间从网络下载文件?

因为初始状态总得从什么地方来,而把那些素材塞进虚拟机镜像里会让镜像变得巨大且无从版本化。这是一个站得住脚的取舍。它同时也意味着有 293 次下载步骤坐在一次被打分运行的关键路径上,而一次 CDN 故障——除非你去查——会被报成一次智能体失败。

延伸阅读

本站:

项目来源: