1. 从5亿视频到可训练轨迹GUI Agent评测到底卡在哪GUI Agent 这个词最近一年被反复提起但真正动手跑过评测的人都知道最折磨人的不是模型本身而是数据从哪来和评测怎么统一。小米 AI 团队这次在 ICML 2026 入选的 Video2GUI 工作给出了一个很实在的答案互联网上 5 亿条教程视频里藏着海量操作示范问题是怎么把它们变成带任务指令、动作时间戳和屏幕坐标的结构化轨迹。我先把这套逻辑拆开讲清楚。Video2GUI 用的是元信息粗筛 视频内容细筛两阶段流水线从 5 亿条视频里筛出 420 万条高质量教程再用多模态大模型把视频转成结构化轨迹最终产出 WildGUI 数据集——1270 万条轨迹、1.245 亿张截图覆盖 1500 余个应用与网站、五大平台。这个规模目前是开源 GUI 预训练数据集里最大的。效果层面MiMo-VL-7B 用 WildGUI 预训练后在 OSWorld-G 上拿到 67.6 分超过 Qwen3-VL-32B 与 Seed1.5-VL在 ScreenSpot-Pro 上准确率从 41.2 提升到 56.9提升接近 38%。更关键的是 scaling 实验显示性能随预训练 token 数增加持续提升扩展到 200B Token 时仍未饱和。但这里有个现实问题数据集再大评测环节如果各跑各的结论就没法横向比较。GUIEvalKit 就是冲着这个痛点来的——集成五大主流基准支持 30 多个模型的统一离线评测与半在线评测还提出了决策级评估框架把评估从执行正确率提升到行为分布模式。对我们这些想复现评测流程的人来说真正的门槛在于多模态 Agent 评测往往要同时调用视觉理解、动作规划、函数调用多个环节每个环节可能对接不同的模型服务。如果每个模型都要单独配 Key、单独改 Base URL脚本会变得非常难维护。这正是 TaoToken 统一 Key 能派上用场的地方——用一套凭证跑通多模型对比把精力留给评测逻辑本身。下面我会从接入配置开始一步步带你搭出一个可复现的 GUI 任务评测脚本并给出成功率与 Token 消耗的对比验证动作。2. TaoToken 前置统一 Key 接入多模态评测的准备工作在动手写评测脚本之前先把 TaoToken 这边的准备工作做完。核心思路很简单你不需要为每个模型单独申请账号、单独管理密钥而是用一套统一的 Key 和 Base URL通过切换 Model ID 来调用不同模型。这对 GUI Agent 评测特别友好因为评测本身就要横向对比多个模型。先明确三个必须对齐的参数我把它整理成表格方便你对照参数项取值说明Base URLhttps://taotoken.net/api所有请求的统一入口不要加 UTM 后缀API Key在控制台生成形如sk-开头的一串字符妥善保存Model ID按需切换例如多模态理解模型、推理模型分别对应不同 ID第一步打开控制台创建 API Key。地址是https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content登录后在 API Keys 页面点新建复制生成的 Key。这里提醒一句Key 只在创建时完整显示一次建议立刻存到本地环境变量里别直接写死在脚本中。第二步确认你要评测的模型 ID。GUI Agent 评测通常需要两类模型一类负责看懂屏幕截图多模态理解一类负责规划动作序列推理。你可以在模型对话页面先手动试一下目标模型是否能正常响应地址是https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。在对话框里发一张界面截图加一句描述这个界面上有哪些可点击元素看返回是否合理。第三步如果你打算长期跑评测、甚至把 Agent 接入到持续集成流程里建议了解一下 Coding Plan。它更适合需要稳定调用、批量跑任务的场景地址是https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。对于只是偶尔跑一次对比评测的情况按量调用就够了。第四步把接入文档过一遍重点看请求格式和错误码说明。文档地址是https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。GUI 评测里最常见的坑是图片编码格式不对、或者 messages 结构里 image_url 字段位置放错文档里都有示例。准备工作做完后你手上应该有三样东西一个可用的 API Key、一个确认能响应的 Model ID、以及本地配好的环境变量。接下来进入配置环节。3. 可复制配置settings.json 与评测脚本骨架这一节给你可以直接复制的配置片段。我按两种常见形态来写一种是给支持配置文件读取的工具用比如 Claude Code 风格的 settings.json一种是给 Python 评测脚本用的环境变量与请求骨架。先看 settings.json 形态。如果你用的是支持自定义 Base URL 的编码工具把下面这段填进去注意路径和字段名要与工具要求一致{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的Key, ANTHROPIC_MODEL: 你的多模态模型ID } }这里三件套必须齐全Base URL 指向https://taotoken.net/apiKey 填你生成的凭证Model ID 填目标模型。少任何一个都会在请求时报错。如果你用的是 Codex 风格的auth.json结构类似把对应字段替换成 Base URL、Key、Model ID 即可。再看 Python 评测脚本的骨架。GUI 评测的核心是把截图和任务指令一起发给模型让它输出动作序列然后跟标注轨迹对比。下面是一个最小可运行示例import os import base64 import requests BASE_URL https://taotoken.net/api API_KEY os.environ[TAOTOKEN_API_KEY] MODEL_ID os.environ.get(EVAL_MODEL_ID, 你的多模态模型ID) def encode_image(path): with open(path, rb) as f: return base64.b64encode(f.read()).decode(utf-8) def ask_agent(screenshot_path, instruction): payload { model: MODEL_ID, messages: [ { role: user, content: [ {type: text, text: instruction}, { type: image_url, image_url: { url: fdata:image/png;base64,{encode_image(screenshot_path)} } } ] } ], max_tokens: 1024 } headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } resp requests.post(f{BASE_URL}/v1/messages, jsonpayload, headersheaders, timeout60) resp.raise_for_status() return resp.json() if __name__ __main__: result ask_agent(screen_001.png, 描述界面元素并给出下一步点击坐标) print(result)这段代码里有两个细节值得注意。第一图片用 base64 内联格式是data:image/png;base64,前缀加编码串这是多模态接口最常见的传图方式。第二max_tokens别设太小GUI 任务的动作序列往往比较长设 1024 是保守值复杂任务可以调到 2048。如果你要跑多模型对比把MODEL_ID做成循环变量即可Key 和 Base URL 保持不变。这就是统一 Key 的价值——切换模型只改一个字符串不用重新配凭证。配置完成后先别急着跑全量评测用单张截图验证一次请求是否通。下一节讲怎么验证。4. 验证请求与成功结果单图跑通再上批量配置写完第一步是验证请求链路是否通。我建议用一张简单的界面截图先跑单次调用确认返回结构符合预期再上批量评测。运行上一节的脚本把screen_001.png换成你本地任意一张界面截图。如果一切正常你会看到类似这样的返回结构{ id: msg_xxx, type: message, role: assistant, content: [ { type: text, text: 界面上方有搜索框中部是卡片列表右下角有悬浮按钮... } ], usage: { input_tokens: 1280, output_tokens: 156 } }重点看两个地方content里是否有合理的文本描述usage里是否返回了 token 计数。后者是后面做 Token 消耗对比的基础。单图跑通后进入批量评测。GUI 任务成功率的核心计算方式是模型输出的动作序列与标注轨迹在关键动作上匹配的比例。你可以先做一个简化版——只比对最终点击坐标是否落在标注区域内def is_hit(predicted_xy, ground_truth_box, tolerance20): x, y predicted_xy x1, y1, x2, y2 ground_truth_box return (x1 - tolerance) x (x2 tolerance) and (y1 - tolerance) y (y2 tolerance)把一批任务跑完后统计命中率就是成功率。同时把每次调用的input_tokens output_tokens累加得到总 Token 消耗。这样你就能得到一张对比表模型任务成功率总 Token 消耗平均单任务 Token模型 A56.9%1,240,0001240模型 B41.2%1,890,0001890这张表就是复现小模型反超大模型评测流程的关键产出。你会发现有些参数量更小的模型在 GUI 任务上不仅成功率高Token 消耗还更低——这跟 VeriTime 论文里推理 Token 消耗平均降低 71%的结论方向一致。验证阶段还有一个动作值得做固定随机种子重复跑三次看成功率波动范围。如果波动超过 5 个百分点说明评测样本量不够需要扩大任务集。5. 本篇常见错排查401、local proxy failed 与 reading choices跑评测脚本时报错基本集中在几个固定位置。我把最常见的几类整理出来对照着排查能省不少时间。第一类是 401 认证失败。典型报错长这样{ error: { type: authentication_error, message: Invalid API key provided } }原因通常是 Key 没读到、或者环境变量名写错。检查os.environ[TAOTOKEN_API_KEY]是否真的取到了值可以在脚本开头加一行print(API_KEY[:8])确认前缀。另外注意 Key 前后不要有空格复制时容易带上换行符。第二类是local proxy failed或连接超时。这类报错通常跟本地网络环境有关检查你的请求是否被本地某些设置拦截。最直接的办法是用 curl 单独测一次curl -X POST https://taotoken.net/api/v1/messages \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:你的模型ID,messages:[{role:user,content:hi}],max_tokens:32}如果 curl 能通而 Python 不通问题在脚本的请求库配置如果 curl 也不通检查 Base URL 是否写成了带路径的完整地址。第三类是reading choices相关报错通常出现在你按 OpenAI 格式解析返回、但实际接口返回的是另一种结构时。比如你写了resp[choices][0][message][content]但返回里根本没有choices字段。解决办法是先打印完整返回体看清楚结构再取字段。多模态接口的返回结构跟纯文本接口不完全一样别想当然套用。第四类是 OAuth 相关报错。如果你用的是某些需要 OAuth 流程的工具报错信息里会出现OAuth token expired或invalid_grant。这类问题跟 API Key 模式不同需要重新走授权流程。如果你只是想快速跑评测建议直接用 API Key 模式省去 OAuth 的复杂度。第五类是图片编码报错报错信息里会出现invalid image或unsupported format。检查两点图片是否真的存在且可读base64 前缀是否写成了data:image/png;base64,注意逗号不能少。排查完这些脚本基本就能稳定跑了。如果还有问题接入文档里有更完整的错误码对照表。6. 语义一致 CTA把评测流程固化下来跑通一次评测不难难的是把流程固化下来让它可重复、可对比、可追溯。我的建议是把三件事写进你的评测仓库固定的任务集、固定的评测脚本、固定的配置模板。配置模板就用第 3 节那份 settings.json 或环境变量清单Base URL 固定为https://taotoken.net/apiKey 从环境变量读Model ID 作为唯一变量。这样每次换模型评测只需要改一个字符串其他都不动。如果你要长期跑 GUI Agent 评测甚至把评测接入到模型迭代流程里Coding Plan 会更合适地址是https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。它适合需要稳定批量调用的场景不用每次担心额度问题。需要新建或轮换 Key 的时候回到控制台操作https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。接入细节和字段说明以文档为准https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。最后留一个实用技巧在评测脚本里加一个日志文件把每次调用的模型 ID、任务 ID、成功率、Token 消耗都写进去。跑上几十轮之后你就能画出成功率随模型迭代的变化曲线这比单次评测结果有说服力得多。GUI Agent 的评测本来就是个持续过程把数据攒下来结论自然就出来了。