尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

cua-bench Windows Arena Adapter 任务开发完全指南:从 Task JSON 五要素到评估器实现

cua-bench Windows Arena Adapter 任务开发完全指南:从 Task JSON 五要素到评估器实现 cua-bench Windows Arena Adapter 任务开发完全指南从 Task JSON 五要素到评估器实现【免费下载链接】cuaScale computer-use 2.0 with open-source drivers, cross-OS fleets, and benchmarks for training, evaluation, and data generation.项目地址: https://gitcode.com/GitHub_Trending/cua/cua导读本文以 cua-bench 仓库中 winarena_adapter 的任务开发文档为骨架系统讲解如何在 Windows Arena AdapterWAA中定义、配置和实现一个新的 Windows 桌面自动化基准任务。读者将掌握任务 JSON 的五大核心要素ID、instruction、config、evaluator、result的完整写法理解 config 初始状态编排、getters/metrics 评估链路与 result/expected 取值机制并学会如何复用现有 12 个应用域的既有任务机制快速产出可运行的新任务。WAA 任务体系概览Windows Arena Adapter 是 cua-bench 中用于运行 Windows 桌面自动化基准的适配器当前仓库内置173 个任务、横跨 12 个应用域覆盖 Chrome、LibreOffice、VS Code、VLC、文件资源管理器等常见桌面程序见 winarena_adapter/README.md。从任务目录结构看任务定义文件按应用域分目录存放libs/cua-bench/tasks/winarena_adapter/data/ ├── examples/ # normal 难度任务带上下文 │ ├── chrome/ # 17 个 Chrome 任务 │ ├── libreoffice_calc/# 24 个 Calc 任务 │ ├── libreoffice_writer/ │ ├── vs_code/ │ ├── msedge/ │ ├── vlc/ # 21 个 VLC 任务 │ ├── file_explorer/ │ ├── notepad/ │ ├── windows_calc/ │ ├── microsoft_paint/ │ ├── settings/ │ └── clock/ └── examples_noctxt/ # hard 难度任务无上下文每个.json文件即一个任务定义。data/examples对应normal难度data/examples_noctxt对应hard难度这一映射关系由 task_loader.py 中的difficulty参数控制。任务 JSON 的五大核心要素原文档指出每个任务遵循统一格式由五个关键组件构成。下面以仓库中真实存在的 VLC 任务 8ba5ae7a-5ae5-4eab-9fcc-5dd4fe3abf89-WOS.json 为例{ id: 8ba5ae7a-5ae5-4eab-9fcc-5dd4fe3abf89-WOS, snapshot: base_setup, instruction: Help me modify the folder used to store my recordings to the Desktop, source: https://docs.videolan.me/vlc-user/desktop/3.0/en/basic/recording/playing.html#choose-your-recordings-folder, config: [ { type: launch, parameters: { command: vlc } }, { type: execute, parameters: { command: [ python, -c, import pyautogui; import time; pyautogui.click(960, 540); time.sleep(0.5); ] } } ], trajectory: trajectories/, related_apps: [vlc], evaluator: { func: is_vlc_recordings_folder, expected: { type: rule, rules: { recording_file_path: C:\\Users\\Docker\\Desktop } }, result: { type: vlc_config, dest: vlcrc } } }1. IDid任务的唯一标识每个任务必须有一个全局唯一的id。WAA 任务通常以 UUID 加变体后缀命名如8ba5ae7a-5ae5-4eab-9fcc-5dd4fe3abf89-WOS部分任务还有-2、INF-等变体后缀用于表达同一指令的不同难度或信息完整度变体。在 task_loader.py 中若 JSON 未提供id加载器会回退使用文件名task_file.stem作为任务 ID。2. Instructioninstruction自然语言任务描述instruction用自然语言定义 agent 需要完成的目标。本例中为Help me modify the folder used to store my recordings to the Desktop帮我将录像存储文件夹改为桌面。它会被 task_loader.py 映射为cb.Task.description作为驱动 agent 的核心提示词。3. Configurationconfig初始状态编排config是一个操作数组用于在 agent 介入前把 Windows 桌面环境摆放到指定的初始状态。它可以包含启动程序、执行命令、下载文件等动作。本例依次做了两件事launch类型——启动 VLC 播放器command: vlcexecute类型——通过 Python 脚本在 VLC 窗口内模拟一次鼠标点击pyautogui.click(960, 540)把焦点和界面状态稳定下来。这两个操作共同保证 agent 观察到的初始桌面是确定性的从而保证任务可复现、可评分。4. Evaluatorevaluator判定任务成败evaluator定义了如何评估任务它指定评估函数is_vlc_recordings_folder原文档写作vis_vlc_recordings_folder仓库实际实现名为is_vlc_recordings_folder以及用于比对的期望结果。本例期望 VLC 的录像存储路径被设置为C:\Users\Docker\Desktop。agent 是否成功修改了 VLC 播放器的录像路径就由这个函数返回的 0/1 分数决定。5. Resultresult期望结果提取规格result指定了从 VM 中提取哪种评估结果。本例中类型为vlc_config目标文件为vlcrc——即 VLC 的配置文件。result并非所有任务都强制要求但对基于文件内容判定的任务如本任务的 vlcrc 配置检查必不可少。补充说明仓库中该任务 JSON 内还保留了_comments字段记录了evaluator 代码有误需要修正的历史备注并提示了人工修改路径tools preferences input/codecs record directory。开发新任务时这类注释是宝贵的排查线索。深入 config任务初始状态的操作类型根据 WAA_IMPLEMENTATION.md 中的汇总config数组支持以下操作类型类型用途示例launch启动应用程序以远程调试模式启动 Chromedownload下载测试文件从 GitHub/云存储获取文件open打开已有文件打开待编辑的文档sleep等待 UI 就绪暂停等待应用加载完成activate_window聚焦窗口将应用带到前台execute执行命令执行 Python 脚本create_folder创建目录搭建测试文件夹结构每个操作都形如{type: 类型, parameters: {...}}。从 setup_controller.py 的实现看执行逻辑通过_{type}_setup方法名动态派发控制器读取每个配置项的type拼接出对应的方法名并调用同时传入parameters中的关键字参数若类型未知则仅记录警告而不会中断整个任务初始化。该控制器还额外实现了_upload_file_setup从宿主机上传本地文件到 VM并内置了带重试与本地缓存的下载机制_download_setup最多重试 3 次、按 URL 生成确定性缓存路径。config 在任务流程中的位置由 evaluator.py 明确任务开始前由WAASetupController.setup(config)执行评估前还可以通过evaluator.postconfig再执行一轮补充操作如保存文件、聚焦窗口。深入 evaluatorgetters 与 metrics 的评估链路WAA 的评估遵循一个经典的四段式模式在 evaluator.py 的WAAEvaluator中实现1. 执行 postconfig评估前的补充 setup 操作 2. 用 result 类型的 getter 提取实际结果 3. 用 expected 类型的 getter或内联 rule取得期望值 4. 调用 metric 函数对 result 与 expected 打分返回 0.0 ~ 1.0getters从 VM 提取状态getters 负责取数。按实现位置分为同步 gettersevaluators/getters/与异步 gettersevaluators/getters_async/后者通过SessionInterfaceWrapper见 evaluator.py包装 cua-bench 会话用 HTTP 调用 VM 内的 cua-computer-server从而让评估在 worker 容器中运行而无需进入 VM 内部。以本例的vlc_configgetter 为例evaluators/getters/vlc.py 中的get_vlc_config会根据 VM 平台定位 vlcrc 配置文件路径——Windows 下固定为C:\Users\Docker\AppData\Roaming\vlc\vlcrc仓库注释提示该路径依赖 VM 中的 VLC 安装方式需保持一致通过env.controller.get_file()把文件内容取回并写到env.cache_dir/config[dest]指向的缓存文件供 metric 读取。metrics比对并打分metrics 负责判定。本例对应的 metric 是 evaluators/metrics/vlc.py 中的is_vlc_recordings_folder其核心逻辑是读取 vlcrc 文件内容跳过以#开头的注释行与空行查找包含input-record-path的配置行取右侧的值与期望值C:\Users\Docker\Desktop逐字符比较相等返回 1否则返回 0文件不存在或发生异常也返回 0。该文件还提供了大量 VLC 相关的其他 metric如check_qt_bgcone、check_qt_max_volume、check_qt_minimal_view、check_global_key_play_pause、is_vlc_playing等从源码结构看VLC 域任务普遍采用读配置/状态文件 键值比对的判定思路。除应用专属函数外WAA 还内置了一批通用 metric见 WAA_IMPLEMENTATION.mdexact_match、fuzzy_match基于 RapidFuzz、literal_match、is_in_list、check_include_exclude、check_csv、check_json、diff_text_file等适合文本、列表、CSV/JSON 文件类结果。多指标与组合判定evaluator.func可以是一个字符串也可以是一个函数名列表如[exact_match, compare_text_file]此时result、expected、options同样可以是对应长度的列表。组合方式由conj字段控制默认andand模式下任一指标得 0 分即整体短路为 0全通过时取各分值的平均值or模式下任一指标得 1 分即整体为 1。实现细节见 evaluator.py。result 与 expected 的取值类型result 常见类型类型说明vm_file从 VM 中取回指定路径文件path指定 Windows 路径、dest指定缓存文件名vm_file_exists_in_vm_folder检查 VM 中某目录下是否存在指定文件folder_namefile_namecloud_file从云端 URL 下载文件作为结果profile_name提取 Chrome 等应用的 profile 名称system_timezone提取系统时区vlc_config提取 VLC 配置文件本例expected 常见类型rule内联规则rules对象直接作为期望值参与比对本例即此类型cloud_file下载云端金标准文件作为期望值常用于 LibreOffice 表格/文档类任务的金标准比对。rule 内支持的匹配方法在 rule 定义内部WAA 支持eq相等、ne不等、contains包含、startswith前缀、endswith后缀、regex正则、fuzzy模糊匹配等匹配方法可组合出灵活的判定语义。复杂比对compare_table针对 LibreOffice Calc 任务compare_table支持对单元格数据、图表属性、透视表、条件格式、数据验证、迷你图等做结构化比对例如evaluator: { func: compare_table, options: { rules: [ {type: sheet_data, sheet_idx0: 0, sheet_idx1: EI0}, {type: chart, sheet_idx0: 0, chart_props: [type, title]}, {type: pivot_table, sheet_idx0: 0}, {type: conditional_formatting, sheet_idx0: 0} ] } }任务的加载与注册机制理解加载机制有助于开发新任务时文件放对位置。 task_loader.py 提供四个核心入口load_waa_tasks(domainsNone, difficultynormal)按域和难度加载全部任务返回cb.Task对象列表get_task_by_id(task_id, difficultynormal)按 ID 查找单个任务get_tasks_by_domain(domain, difficultynormal)按域查找list_domains()返回 12 个域名列表。加载时每个 JSON 会被转换为cb.Task其中instruction→description其余字段config、evaluator、snapshot、related_apps、source全部放入metadatacomputer固定配置为provider: native、os_type: win11、分辨率1920x1080、镜像trycua/winarena:latest见 task_loader.py。也就是说新任务的 JSON 只要放进对应域的目录就会被自动发现并注册无需改动加载代码。开发新任务的推荐路径原文档给出了明确的开发方法论结合仓库源码可归纳为四步先读示例、后写任务从 data/examples/ 各域的真实任务 JSON 入手熟悉通用配置模式与常用命令写法。复用既有机制如果要为仓库中已存在的程序类别Chrome、Edge、LibreOffice、VLC 等开发任务务必先熟悉该域已有的 getters 与 evaluators分别位于 evaluators/getters/ 与 evaluators/metrics/在其基础上修改而不是从零造轮子。从简单变体起步许多任务存在-2、INF-等变体文件暗示同一指令可拆分为不同信息完整度/难度的变体便于评估模型在不同条件下的表现。开发时可先做基础版再派生变体。撰写指令与评估闭环指令要自然、目标明确评估器要能客观区分完成与未完成。若目标程序尚无对应 getter/metric需要同时补齐 getters 取数与 metrics 判定两个环节并把新函数名填入evaluator.func。本地验证与调试新任务开发完成后可通过 WAA CLIcli.py在本地 x86_64 KVM 环境下验证# 检查环境状态Docker / KVM / 镜像 / golden image python -m tasks.winarena_adapter.cli vm status # 列出全部任务与变体 python -m tasks.winarena_adapter.cli task list --verbose # 运行指定任务变体 cb run task tasks/winarena_adapter --variant-id variant-index调试期间可借助以下手段观察 VM 与评估过程noVNC 浏览器访问http://localhost:8006实时查看 Windows 桌面RDP 交互调试localhost:3390用户Docker、无密码dev 模式容器日志docker logs -f winarena其中 VM 内 cua-computer-server 就绪时会输出VM is up and running, and the CUA Computer Server is ready to use!CUA Server 健康检查curl http://172.30.0.2:5000/statusVM 默认 IP 为172.30.0.2内部端口5000。运行环境前提以仓库实际为准需要x86_64 Linux 且支持 KVM嵌套虚拟化、已安装并运行 Docker、约 50GB 磁盘空间用于基础镜像与 ISOmacOS/ARM 平台不支持。首次搭建基础镜像约需 4560 分钟python -m tasks.winarena_adapter.cli vm setup --download-iso或--iso /path/to/windows.iso。评估的最终落点是把任务跑在 win11 虚拟桌面1920x1080上agent 完成指令后由 getters 取数、metrics 打分返回 0.0失败或 1.0成功。结语WAA 的任务开发是一个声明式定义 可插拔评估的工程你只需要在正确的位置写好一个包含id、instruction、config、evaluator、result的 JSON把文件放进对应应用域目录即可被 cua-bench 自动加载并纳入 Windows 桌面自动化基准。而真正决定任务质量的是评估闭环——getter 是否稳定地取到真实状态、metric 是否能客观区分成败。开发前先吃透既有 VLC、Chrome、LibreOffice 等域的 getters/metrics 实现再动手写自己的任务是最短路径。更进一步可参考 Develop-Agent.md 接入自定义 agent将新任务与自研 agent 组合成完整的评测实验。【免费下载链接】cuaScale computer-use 2.0 with open-source drivers, cross-OS fleets, and benchmarks for training, evaluation, and data generation.项目地址: https://gitcode.com/GitHub_Trending/cua/cua创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表