ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

WinArena 开发调试实战指南:Dev/Azure 双模式、Golden Image 复用与 Windows 11 VM 排障流程

WinArena 开发调试实战指南:Dev/Azure 双模式、Golden Image 复用与 Windows 11 VM 排障流程 WinArena 开发调试实战指南Dev/Azure 双模式、Golden Image 复用与 Windows 11 VM 排障流程【免费下载链接】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/cuaWinArenaWindows ArenaWAA是 cua-bench 中一套在 Docker 容器内通过 QEMU/KVM 运行 Windows 11 虚拟机、驱动 AI Agent 完成 Windows 桌面任务的基准测试系统。本文基于 Development-Tips.md 整理出一套面向二次开发与排障的完整工作流从run-local.sh的dev/azure双模式切换、共享文件夹热更新到 Golden Image 快照备份复用、三处关键日志定位、交互式容器调试再到容器内外与 Windows VM 中 CUA Computer Server 的连通性验证与端口转发。读完本文你将能够独立完成 WinArena 本地开发环境的搭建、镜像制备、故障定位与远程代理调试。一、先理解 WAA 的整体运行架构在进入开发技巧之前先明确 WinArena 的核心组件拓扑详见 infra/README.mdLinux 容器 (trycua/winarena:latest) ├── Client (start_client.sh - python run.py) │ ├── NaviAgent / ClaudeAgent │ └── SoM (Set-of-Mark) 处理、a11y 无障碍树 └── Windows 11 VM (QEMU/KVM) └── CUA Computer Server (Flask, 端口 5000) ├── PyAutoGUI / UIA 自动化 └── 任务执行环境Client 通过 HTTP 与 VM 内的 CUA Computer Server 通信默认地址172.30.0.2:5000由 Server 完成截图、点击、输入、读取无障碍树、执行 Windows 命令等动作。mode参数正是在这套架构上为开发调试与规模化跑测两种场景提供的开关。二、Dev/Azure 双模式mode参数与共享文件夹热更新run-local.sh中提供了一个mode参数用于切换两种运行形态。从源码看默认值为azure见 run-local.shazure默认面向大规模基准测试优化镜像制备脚本在构建时被固化进镜像全程自动化执行dev面向src/win-arena-container/vm/setup下初始化脚本与 Python Server 的开发测试会额外挂载一个共享文件夹让 Docker 宿主与容器内的 Windows 11 VM 互通。在dev模式下run.sh会把宿主上的vm/setup目录以 bind mount 方式挂载为容器内的/shared见 run.shWindows VM 内部则通过 Samba 将该目录映射为\\host.lan\Data。这意味着在宿主上修改vm/setup下的脚本改动会立即出现在 Windows 11 VM 中无需重建镜像即可迭代。制备 Golden Image首次开发时先用dev模式完成 Windows 环境的一次性初始化cd libs/cua-bench/tasks/winarena_adapter/infra/scripts ./run-local.sh --mode dev --prepare-image true一键启动完整环境镜像制备完成后即可一次性启动 VM 与 Client 进程./run-local.sh --mode dev --start-client truedev 模式的挂载结构modedev时的目录流向如下对应 run.sh 中的路径解析逻辑Host (仓库内) Container Windows VM infra/vm/setup/ ────────────── /shared/ ─────── \\host.lan\Data infra/vm/storage/ ───────────── /storage (VM 磁盘保持持久化) client/构建期 COPY───────── /client需要说明的是--mount-server挂载仅对dev模式生效见run.sh的 help 输出 run.shazure模式下 setup 脚本在构建阶段即复制进容器不再依赖宿主目录。这一点也是 infra/README.md 中Unified to dev mode which copies to/shared/这一经验教训的直接体现。三、run-local.sh参数全解从默认值到完整用法run-local.sh与run.sh共享同一套参数解析run-local.sh在读取config.json中的 API Key 后把全部参数原样透传给run.sh完整的参数清单如下默认值取自 run-local.sh参数默认值说明--modeazure运行模式dev/azure--prepare-imagefalse是否制备 Windows Golden Image制备时挂载setup.iso--skip-buildfalse是否跳过容器镜像构建--interactivefalse交互模式以 bash 为入口启动容器不启动 VM 与 Client 进程--connectfalse是否 attach 到已存在的容器仅当容器存在时有效--use-kvmtrue是否启用 KVM 加速/dev/kvm不存在时自动降级为 false--ram-size8GVM 内存大小--cpu-cores8VM CPU 核数--mount-vm-storagetrue是否挂载 VM 存储目录持久化磁盘--mount-clienttrue是否挂载 client 目录--mount-servertrue是否挂载 server/setup 目录仅dev模式生效--browser-port8006noVNC 浏览器访问 VM 的端口映射容器内 8006--rdp-port3390RDP 连接 VM 的端口映射容器内 3389--start-clienttrue是否启动 Arena Client 进程--agentnavi使用的 Agent如navi--modelgpt-4-vision-preview视觉语言模型可选gpt-4o-mini、gpt-4o、gpt-4-1106-vision-preview等--som-originossSoMSet-of-Mark来源可选oss、a11y、mixed-oss、omni、mixed-omni--a11y-backenduia无障碍后端可选uia、win32--gpu-enabledfalse是否启用 GPU安装了 nvidia-container-toolkit 且存在nvidia-smi时才生效--container-namewinarena容器名称几个值得注意的源码细节run.sh会对config.json中的密钥做校验必须设置OPENAI_API_KEY或同时设置AZURE_API_KEY与AZURE_ENDPOINT否则脚本直接报错退出见 run-local.shrun.sh在启动容器时会自动检查--platform linux/amd64、--device/dev/kvm、--cap-add NET_ADMIN等选项并对browser_port/rdp_port做端口映射run.sh容器内实际的 VM 启动与健康检查由 entry_setup.sh 完成它在后台启动 VM然后循环请求${VM_IP}:${SERVER_PORT}/status直到 CUA Computer Server 返回 200 才继续。四、复用 Golden Image 快照多 VM 场景的捷径如果你已经用dev或azure模式完成过一次 Windows 镜像初始化就可以直接复用该镜像快速创建新的 VM避免重复约一小时的全量安装。复用方法是将infra/vm/storage目录下的所有 Windows 镜像文件整体备份libs/cua-bench/tasks/winarena_adapter/infra/vm/storage/ ├── data.img ├── windows.base ├── windows.boot ├── windows.mac ├── windows.rom ├── windows.vars └── windows.ver结合 infra/README.md 中的 Golden Image 策略推荐的标准流程是制备./run-local.sh --mode dev --prepare-image true等待 Windows 初始化完成约 1 小时人工验证软件安装无误优雅关机通过 CUA Server 执行关机命令确保磁盘状态一致curl -X POST http://172.30.0.2:5000/cmd \ -H Content-Type: application/json \ -d {command: run_command, params: {command: shutdown /s /t 5}}备份将整个storage目录复制到安全位置如/backup/golden-storage复用需要新 VM 时把备份内容恢复回storage目录再以--start-client true启动即可。该策略在大规模批量跑测时尤为关键可以把每次跑测都从头安装 Windows的高昂成本压缩到一次。五、日志定位三个关键日志入口WinArena 的错误可能发生在两个阶段——Golden Image 制备阶段与 VM 运行阶段对应的日志入口也不同1. 制备阶段PowerShell 初始化日志执行./run-local.sh --prepare-image true期间发生错误应查看 Windows 初始化脚本setup.ps1 等运行时写入的日志文件libs/cua-bench/tasks/winarena_adapter/infra/vm/setup/ps_script_log.txt该文件由容器内的 Windows VM 在执行安装脚本时生成记录了安装过程中的每条 PowerShell 输出与报错堆栈是排查应用没装上服务没启动类问题的第一现场。2. 运行阶段CUA Computer Server 日志运行在 Windows 11 VM 内的 Python ServerFlask日志位于libs/cua-bench/tasks/winarena_adapter/infra/vm/setup/server/server.log从 server/main.py 可以看到Server 默认把日志写入server.log并挂接了自定义的Logger类它会捕获未捕获异常excepthook并写入日志同时把werkzeug的请求日志也一并记录因此你在server.log中既能看到 Agent 发来的每条 HTTP 请求也能看到 Python 侧的异常回溯。3. 容器入口健康检查若 VM 迟迟起不来可以观察 entry_setup.sh 的循环输出——它会每 5 秒打印一次等待信息直到GET /status返回 200。这部分输出直接打印在容器 stdout 上可通过docker logs winarena查看。六、交互模式不起 VM 与 Client先调试容器本身在开发新的 Agent 或任务扩展时通常不希望容器一启动就自动拉起 VM 和 Client 两个进程。此时使用--interactive truecd libs/cua-bench/tasks/winarena_adapter/infra/scripts ./run-local.sh --interactive true从 run.sh 的源码可以看到当interactivetrue时entrypoint 参数会被置空容器以/bin/bash为入口直接进入 shell。容器启动成功后你可以在容器内手动、分步启动各进程# 手动启动 Windows VMQEMU ./start_vm.sh # 手动启动基准测试 Client ./start_client.sh这样拆分启动的好处是可以先确认容器网络dnsmasq 分配的 172.30.0.0/24 网段、VM 磁盘挂载状态都正常再单独调试任一方。start_client.sh内部最终会调用python run.py --agent ... --model ... --som_origin ... --a11y_backend ...见 start_client.sh你可以直接在命令行追加--result-dir、--json-name、--diff-lvlnormal/hard等参数进行针对性验证。七、连通性测试验证 Windows 11 VM 是否就绪当 Golden Image 制备完成、准备运行 Agent 之前建议先验证 VM 内的 Python Server 已完整启动并开始监听连接。对于已初始化过的 VM启动过程通常不超过 1 分钟。首先 attach 到正在运行的容器cd libs/cua-bench/tasks/winarena_adapter/infra/scripts ./run-local.sh --connect true--connect的实现是直接对已存在的容器执行docker exec container_name /bin/bash见 run.sh不会重新构建镜像或新建容器。进入容器后请求 CUA Computer Server 的截图接口curl -v -X GET http://20.20.20.21:5000/screenshot # 预期结果HTTP/1.1 200 OK返回200 OK即代表 VM 内 Flask Server 已经就绪、可以接收 Agent 的自动化指令。需要提醒的是dev 模式下 VM 的实际 IP 可能为20.20.20.21dnsmasq 网段随模式变化而生产/Azure 场景默认是172.30.0.2infra/README.md 中明确记录了Client 默认 20.20.20.21 而实际 VM 是 172.30.0.2这一易错点。以 entry_setup.sh 中的健康检查逻辑GET /status直到 200为准是最稳妥的。八、从 Docker 外部连接 Python Serversocat 端口转发当你在 Docker 宿主或宿主机外调试 Agent而 Agent 进程不在容器内时需要在已 attach 的容器中为相关端口5000、9222、1337建立代理服务器把请求转发到容器内 Windows Server 的 IP# 1. 连接正在运行的 docker cd libs/cua-bench/tasks/winarena_adapter/infra/scripts ./run-local.sh --connect true # 2. 依次为 5000/9222/1337 建立 socat 转发将请求转发至 Windows Server 在容器内的 IP echo -n 5000 9222 1337 | xargs -d -I% bash -c socat tcp-listen:%,fork tcp:172.30.0.2:%其中5000CUA Computer Server 主端口截图、点击、输入、无障碍树等全部自动化指令9222浏览器远程调试端口Chrome DevTools Protocol供 Agent 读取浏览器 DOM 状态1337其他需要暴露的辅助服务端口可按需增减。xargs -d -I%会把5000、9222、1337逐个填入%占位符从而为每个端口各起一个socat tcp-listen:port,fork监听实现宿主端口 → 容器内 VM IP 端口的双向转发。请在命令中把172.30.0.2替换为你容器内的实际 VM IP可通过docker exec内的ip addr或entry_setup.sh的日志确认。九、一套完整的开发调试工作流综合以上要点推荐按如下顺序组织你的 WinArena 本地开发循环首次初始化./run-local.sh --mode dev --prepare-image true约 1 小时生成 Golden Image迭代脚本编辑vm/setup下脚本在 Windows VM 内执行\\host.lan\Data\install.bat对应 install.bat无需重建镜像故障定位制备阶段问题看ps_script_log.txt运行阶段问题看server/server.log启动卡顿看docker logs winarena容器调试./run-local.sh --interactive true分步执行start_vm.sh/start_client.sh连通性确认./run-local.sh --connect true后curl http://vm-ip:5000/screenshot应返回 200外部代理调试容器内用 socat 转发 5000/9222/1337即可从容器外驱动 Windows VM规模化跑测切回./run-local.sh --mode azure --start-client true或使用 run_azure_batch.py 在 Azure Batch 上并行调度。这套流程覆盖了 WinArena 从镜像制备、脚本热更新、日志排障到跨容器代理调试的完整开发闭环是你在 cua-bench 上基于 Windows 桌面任务开发、验证 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),仅供参考
返回列表