
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),僅供參考