20 KiB
20 KiB
規劃:Computer-Use 順暢度優化 + Docker 登入資訊持久化(2026-11)
狀態:僅規劃,未動工。依據:對本 repo(
src/cloudbox.rs、src/computer.rs、src/agent.rs、src/browser.rs、src/vnc.rs、box/*、deploy/、install.sh、BUGS.md)的程式碼研究,與 2026-11 的網路調查。 行號以 2026-11-06 的程式碼為準。
一、現況盤點(從程式碼看到的)
1. 三條 computer-use 路徑
| 目標 | 派發點 | 執行端 | 截圖來源 |
|---|---|---|---|
| Box(Bot 的電腦,Docker 容器) | src/agent.rs:1114 → cloudbox::computer_run |
一步一條 docker exec 內跑 xdotool(src/cloudbox.rs:1223-1227) |
容器內 ImageMagick import -window root(src/cloudbox.rs:1249) |
| 地端本機(Mac / Linux 桌面) | src/agent.rs:1122 → computer::run_by |
Mac:CGEvent+screencapture(src/computer.rs:915-931,1100-1137);Linux:X11 XTEST / wlr 協定 / Portal(src/x11.rs、src/wl.rs、src/portal.rs) |
screencapture / X11 GetImage / wlr-screencopy |
| 帳號內其他電腦(手腳/螢幕) | src/agent.rs:1106 → remote::run_on_device(src/remote.rs:1146-1169) |
對端本機執行,JSON+base64 JPEG 原路回傳(src/remote.rs:645-647) |
對端本機截圖 |
工具規格統一為 9 個 computer_use_*(src/computer.rs:15,250-282)+ hand_over_computer;瀏覽器走 CDP 的 18 個 browser_*(src/browser.rs:314-333)。編號截圖(set-of-mark)由 AT-SPI 控件編號(src/marks.rs、box/a11y)與網頁端注入 JS 編號(src/browser.rs:103-179)實作,方向與業界 2026 主流一致。
2. Box 每一步的延遲預算(估,待 Phase 0 量測確認)
| 階段 | 估計 | 來源 |
|---|---|---|
| 模型回合(TTFT+生成) | 2000–8000 ms | 瓶頸主因,非程式碼可消 |
docker exec 進程生成+RPC |
50–200 ms | 程式註解自估(src/cloudbox.rs:1225-1226),遠端 Docker host 更高 |
| 動作(xdotool) | 10–100 ms | 按鍵 delay 8ms~click repeat 80ms(src/cloudbox.rs:90-91) |
| 固定 SETTLE | 500 ms | src/computer.rs:18、src/cloudbox.rs:1414 |
截圖 import(1280x800→JPEG) |
100–400 ms | ImageMagick 每次冷啟動,CPU 编码 |
| AT-SPI 讀取 | 0–3000 ms(預算制) | --budget 3(src/cloudbox.rs:1501),Chromium 常接近頂 |
| 編號繪製+回傳 | 10–50 ms | src/computer.rs:284-325 |
結論:模型回合佔 6–8 成,環境端開銷約 0.7–3.5 秒/步。因此「減少模型回合數」(批次動作)比「壓榨環境延遲」的性價比更高;兩者都做,順序見後。
3. 已知痛點(BUGS.md + 程式註解)
- 多 Bot 共用 box 無隔離、VNC 無密碼(B18,已修);修飾鍵卡死(B19,已修);取消指令留孤兒進程(B24,已修,用
ANYBOT_JOB標記)。 - box 15 分鐘休眠凍死 noVNC(N3,已修:大腦端不休眠
src/cloudbox.rs:753-776)。 - 舊 box 兩套 Chromium profile 登入互不相通(
box/browser:11-21,已合併為anybot-profilesymlink)。 mousemove --sync會永久阻塞(src/cloudbox.rs:1305-1306);大截圖塞爆 pipe(src/cloudbox.rs:461-463)。- VNC 即時畫面走
docker exec python3橋接容器內 5900(src/vnc.rs:27-39):橋接每字節多一层 exec 管線,人在遠端看 box 畫面卡。 keep_to_chosen以關鍵字改寫computer參數可被注入(B26,設計弱點,已收窄)。- 無每步計時遥測:順暢度只能靠感覺,無法歸因。
4. 登入資訊現況(持久化)
- Chromium profile:容器內
/home/bot/.config/anybot-profile→ symlink 到.config/chromium(box/browser:18-25),--password-store=basic(cookie 以本機金鑰加密存檔,容器內可解密,跨重建有效)。 - 持久化:
/home/bot掛 named volumeanybot-box-home(src/cloudbox.rs:60,612,617)。 - 三種重建(
src/cloudbox.rs:1009-1057):- Update(含自動版本更新):先存快照 →
docker rm -f容器 → 重開,volume 不動,登入保留 ✅ - Reset:
docker volume rm -f anybot-box-home→ 登入全消失 ⚠️ - Restore:先殺 volume,從本機快照
snapshot.tar.gz還原
- Update(含自動版本更新):先存快照 →
- 快照:
docker exec tar打包整個/home/bot(排除各快取目錄,src/cloudbox.rs:839-844),存到 AnyBot 資料夾;每日+閒置 900 秒自動存(src/cloudbox.rs:82-85,778-782)。 - 伺服器部署:box 與 volume 在大腦容器的宿主 Docker 上(
deploy/server/docker-compose.yml,大腦掛/var/run/docker.sock);快照存進anybot-datavolume——與 box volume 同一顆碟(同一故障域)。 - 全 repo 沒有任何
docker volume rm(除 Reset/Restore)、down -v、prune:更新流程本身不會清登入 ✅
二、網路調查摘要(2026-11,可用什麼)
1. 模型/框架層(少數可直接借鏡的點)
| 專案/文件 | 要點 | 對 AnyBot 的用法 |
|---|---|---|
Anthropic computer-use 官方文件+2026-05 最佳實務文(computer_toolset_20260801) |
Batch actions:模型一次回傳一串動作依序執行,批次結尾自動附截圖省一個回合;官方明言批次適用「填多欄表、串捷徑」,不適用探索/失誤恢復;系統提示要模型「每批以截圖結尾」「一句話驗證畫面」 | 高價值,直接對應瓶頸(模型回合數)。做成 computer_use_batch 工具(見 Phase 1) |
| Anthropic harness 設計三原則(2026-04) | 用模型已熟的工具、砍掉多餘 scaffolding、邊界給模型 | 檢查 9+18+11 個工具是否可收斂,工具描述精簡=省 token=省 TTFT |
| cua-speedrun(arXiv 2609.40284) | 速度瓶頸主要在 harness/模型選擇與推理預算;「環境 I/O 變快有時整體反而變慢」;統一量測很重要 | 佐證:先做遥測與批次(回合數),再做環境微優化;KasmVNC 類優化排後面 |
| OSWorld-Human(MLSys 2026) | 現有最佳 agent 步數遠多於人類,效率(WES)是新賽點 | 支持「批次+經驗庫(示範重播)」降步數 |
| Agent S4(Simular,OSWorld 2.0 開源 SOTA) | 讓 agent 從任務經驗中「演化自己的工具介面」;經驗庫(experience retrieval) | 對應現有 teach(示範錄影):進階成「示範→可重播巨集→檢索重用」 |
| UI-TARS-2 / OpenCUA | 開源 GUI 模型族(7B–72B,OSWorld-Verified 27–45%),UI-TARS Desktop 是最完整開源桌面 agent app | 作為離線/本機模型(Ollama 路徑)的未來選項;短期不整合 |
| browser-use(含 Browser Harness)、Stagehand、Playwright MCP、chrome-devtools-mcp、agent-browser(Vercel)、Skyvern | 瀏覽器 agent 分三條跑道:全權 agent / 純工具層(MCP)/ 工作流產品;CDP+a11y 樹是主流讀頁方式;Playwright MCP 的 AX snapshot 吃 token 兇(4.4M/任務 vs Harness 2.1M) | 我們的 browser_*(CDP+ref 編號)已是主流形態;借鏡:snapshot 壓縮、只回傳變化部分;偵測牆重的站點才考慮雲端 stealth 層 |
2. 雲端沙箱/瀏覽器服務(對應「雲端電腦」)
| 服務 | 形態 | 適配評估 |
|---|---|---|
| E2B Desktop | Firecracker microVM 桌面沙箱,pause/autopause、持久 FS、BYOC/自架 runtime 開源(Apache-2.0) | 語意最接近 box 的雲端替代品。適合做 cloudbox provider 適配器 spike(Phase 4),保留快照/喚醒語意,隔離比容器強(microVM) |
| Daytona | 桌面 VM 沙箱(含 Windows/macOS),snapshot API,<90ms 冷起;2026-06 起核心閉源 | 需要 Windows/macOS 雲端手腳時再評估 |
| Modal / Novita / Vercel Sandbox / Cloudflare Sandbox / Blaxel | 通用 code sandbox(gVisor/容器) | 偏程式執行,非 GUI;不是 box 的替代品 |
| Steel(開源可自架)、Browserbase、Kernel、Hyperbrowser、Browser Use Cloud、Anchor、Browserless | 雲端瀏覽器即服務(session 持久化、stealth、CAPTCHA、Kernel 有 auth vault 代管登入) | 是「瀏覽器層」的雲端延伸,不是整台電腦。AnyBot 本地優先+自架哲學 → 若做,先 spike Steel 自架(Apache/MIT,可跑在自己伺服器),當 browser 的第二後端;登入代管需求強再看 Kernel |
| Kasm Workspaces/kasmweb 映像、linuxserver Webtop、accetto ubuntu-vnc-xfce-g3、testcontainers all-in-one-sandbox | 容器化桌面+串流的現成做法 | 印證 box 架構是業界常規;Kasm 系列的亮點在串流引擎(下條) |
3. 串流/畫面順暢度(人看 box 的 VNC)
| 方案 | 重點 | 評估 |
|---|---|---|
| KasmVNC(開源) | 脫離 RFB 規格:WebP/JPX 自適應壓縮、多執行緒編碼、WebCodecs H.264/AV1、WebRTC UDP、內建 web client、多語系鍵盤轉譯 | 人機畫面體驗的天花板;代價大:現有 src/vnc.rs 的 RFB 代理與「人操作偵測」失效,需改用其 web client+整合 hand_over 流程 → 做實驗性 box flavor,不全面替换 |
| TurboVNC / TigerVNC 調參(UltraZoom、品質、縮色) | 保留 RFB,改編碼參數即可 | 便宜的中間方案:viewer 端參數先調(-Scale、-Quality、CompressLevel),零架構風險 |
| 直接把 noVNC 走已發布的 loopback 埠(16080) | 本地 Docker 時現行 exec 橋接可整個繞過(src/vnc.rs 只在遠端/中繼需要) |
快速獲益:本地看 box 畫面立刻順(Phase 2) |
| Sunshine/Moonlight、Looking Glass | WebRTC 遊戲級串流,需 GPU | 無頭容器不適用 |
4. 持久化/備份(對應「登入資訊不丟」)
| 做法 | 來源 | 適用 |
|---|---|---|
| named volume 跨容器重建保留(現行做法) | Docker 官方 volumes 文件 | ✅ 已做,Update 重建安全 |
docker run --rm --volumes-from <box> -v $PWD:/backup alpine tar czf ... 離 volume 備份 |
Docker 官方「back up/restore volumes」 | 現行快照(docker exec tar)等效且更好(在 Mac 端落地);重點是多代+離機 |
「持久 ≠ 備份」:volume 擋得住容器重建,擋不住磁碟損壞、volume prune、Docker Desktop「Clean/Purge data」、整機遺失 |
Docker Desktop backup/restore 文件;多篇 2026 自架備份指南 | 見第三章風險清單 |
| restic/borg 加密增量備份到物件儲存/另一台機 | 自架備份指南(2026-08) | data_dir(含快照、secrets)的離機備份正解;relay 已有加密備份通道可先复用 |
| 瀏覽器登入本身的過期問題(伺服器端 session、2FA、IP 跳變風控) | browser infra 各家(Kernel 的 vault 賣點就是這個) | volume 救不了過期:需要「登入健康檢查+通知接手」與穩定出口 IP(egress via Mac 已有此雛形) |
三、登入資訊持久化:風險清單與方案
現行已安全的情境
| 情境 | 結果 |
|---|---|
| AnyBot 升級、box 自動/手動「重建電腦」(Update) | 登入保留(volume 不動)✅ |
容器崩潰、docker rm、Docker 引擎重啟 |
登入保留 ✅ |
| Chromium 被 kill -9 | SingletonLock 有清(box/browser:40)、crash-bubble 已藏 ✅ |
會丢登入的情境(依風險排序)
- Reset/Restore 重建:直接
docker volume rm -f(src/cloudbox.rs:1036,1047)。Restore 有快照墊底,Reset 目前無任何补救。 - 快照只有一代:
snapshot.tar.gz每日覆蓋(src/cloudbox.rs:395-397)。快照裡登入了過期 cookie、或存到一半被污染,後代無法回退。 - 同一故障域:伺服器部署時快照在
anybot-data、volume 在同機 Docker 儲存——整機/磁碟遺失或 Docker Desktop「Clean/Purge data」、重裝 Docker,全沒。 docker volume prune/system prune --volumes(使用者手動):box 被rm -f後、重開前的空檔,volume 是 dangling 狀態,prune 會殺;ANYBOT_BOX_NAME改名後舊 volume 也成 dangling。- 切換
docker_host(src/cloudbox.rs:292-307):新 host 上 box 從無到有,volume 是全新的——登入看起來「消失」。 - 登入自然過期/風控:cookie 在 volume 裡好好活著,但伺服器端 session 失效、2FA 要求、IP 大跳(雲端 host)被要求重登。
方案(P1 先做 1–4,P2 做 5–7)
| # | 項目 | 內容 | 落點 |
|---|---|---|---|
| L1 | 快照多代輪替 | snapshot-YYYYMMDD-HHMM.tar.gz,保留最近 7 日+4 週,save_snapshot 寫新檔、清舊檔;UI 顯示代數與時間 |
src/cloudbox.rs:395-397,835-880 + 設定頁 |
| L2 | 殺 volume 前強制快照 | run_rebuild(Reset/Restore) 進入 cleaning-up 前,若 box 在跑必先 save_snapshot(標記 pre-reset),失敗即中止重建 |
src/cloudbox.rs:1032-1056 |
| L3 | 新 volume 自動回灌 | create_container 偵測 volume 為空且快照存在 → 自動 copy_in_snapshot(開機即回登入住家);UI 可開關「自動回灌」 |
src/cloudbox.rs:605-618 |
| L4 | 防 prune 網 | 容器被殺後的空檔用「無特權佔位容器」掛住 volume(docker run -d --name anybot-box-home-holder -v anybot-box-home:/h busybox sleep infinity);make doctor 加 volume 健康檢查 |
src/cloudbox.rs + Makefile |
| L5 | 快照離機備份 | 復用 relay 的加密備份通道把 snapshot 推到帳號伺服器(伺服器打不开);或一鍵「匯出快照」成檔給使用者自管(Time Machine/rclone/restic 都吃得下);文件寫明「持久≠備份」 | src/remote.rs+快照 UI+README |
| L6 | 切 docker_host 帶家走 | set_docker_host 前:舊 host 存快照 → 新 host 建 box 後自動回灌;失敗時明確告知「登入在舊主機快照裡」 |
src/cloudbox.rs:292-307 |
| L7 | 登入健康檢查 | 排程(每週)用 CDP 開 2–3 個常用站查登入態標記;掉登入→通知+hand_over_computer 請人重新登入(登入動作本來就該人做)。配合 egress-via-Mac 保持出口 IP 穩定 |
排程器+botbrowser/browser 層 |
配套原則(不動程式也要守的慣例):
- 更新伺服器只用
docker compose up -d --build,絕不用down -v;文档註明。 - 永不在 box 所在 host 跑
docker system prune --volumes。 - 快照內容=登入住家:檔案權限 600(現行已做),含快照的備份視為敏感資料。
四、Computer-Use 順暢度優化方案(依投資報酬排序)
Phase 0:先量測(半週)
- 每步分段計時(exec spawn/動作/settle/截圖/a11y/編碼/模型 TTFT)寫入現有 build-activity log 與使用統計;設定頁加「電腦卡」顯示每步中位數。
- 準則依據(cua-speedrun):先歸因再優化。驗收:能回答「一步的 2.5 秒花在哪」。
Phase 1:減少模型回合+環境微優化(box 優先,1–2 週)
computer_use_batch工具:一次工具呼叫依序跑[{click|type|key|scroll...}...],結尾自動附一張截圖+控件清單。對照 Anthropic 官方語意(依序執行、失敗即停並回報未執行項、批次適用表單/捷徑、探索任務不用)。與HELD_BY_PERSON/重複攔截(src/agent.rs:492-509)整合:每個子動作前檢查人接管。- 長駐 daemon 取代 per-step
docker exec:box 內跑一個 Python 常駐服務(unix socket,經一條持久docker exec橋接),處理 xdotool 序列+import截圖+AT-SPI 快取。每步省 50–200 ms 與進程冷啟動;遠端 docker host 情境受益最大。 - 自適應 settle:500ms 固定等待改為「動作後輪詢 X 畫面差(daemon 內 XShmGetImage 縮圖 diff),穩定即截」(上限仍 500ms、下限 80ms)。靜態頁面省下 ~400ms/步。
- 截圖換引擎:daemon 內直接 XShm 取 framebuffer(免 ImageMagick 冷啟動),Rust 端统一 JPEG(現成
src/computer.rs:284-325管線)。a11y 讀取與截圖併發。 - Prompt 微調(零風險,先行):依 Anthropic 2026-05 文:加「用一句話說明截圖顯示了什麼、步驟是否成功」「可批次時優先批次」;保留現有「畫面沒變就換方法」與 ref 制。
- (地端 Mac 同步受益)
computer_use_batch在computer::run_by實作同一工具面,三條路徑語意一致。
驗收:表單類任務步數 -30% 以上;box 每步環境時間中位數 -30%(以 Phase 0 基線計);無新增 B 級 bug。
Phase 2:人機畫面體驗(3–5 天)
- 本地 Docker 時 viewer 直連已發布的
127.0.0.1:16080(跳過 exec 橋接);遠端情境保留 vnc.rs/relay 路徑。 - TigerVNC 端編碼調參(Tight/UltraZoom 品質、允許 32bpp)+noVNC 端
quality/compression參數化進設定頁。 - (實驗)KasmVNC box flavor 原型:一個分支用 KasmVNC 取代 TigerVNC+noVNC,iframe 掛其 web client,評估 fps/延遲/整合成本,量化後再決定是否併入
vnc.rs協議層。不動主線。
驗收:本地看 box 畫面可互動不卡;遠端情境有 A/B 數據。
Phase 3:持久化落地(1 週)
- 实施 L1–L4(P1),接著 L5–L7(P2)。
- 驗收:情境演練——(a) Reset 後能从
pre-reset快照救回;(b) 手動docker volume rm後重開 box 自動回灌登入;(c) 模擬快照全丢,能從 relay 加密備份還原;(d) doctor 能報出 volume 缺失。
Phase 4:雲端選項研究(spike,各 2–3 天,不進主線)
- E2B Desktop spike:實作一個
cloudboxprovider 介面(create/pause/snapshot/exec/截圖),跑通 E2B Desktop 模板→同一組computer_use_*工具打雲端 microVM;記錄延遲、成本、快照語意差异(E2B 快照=檔案+記憶體態,比 tar 快照更完整)。 - Steel 自架 spike:在自家伺服器跑 Steel(開源),把
browser_*的 CDP 端點指過去(CDP 相容=改 URL 即可),驗證雲端瀏覽器 session(登入持久化由服務端 vault 管)與成本。 - 產出比較表(本機 box vs E2B vs Steel)後再開立項討論。
後續候選(不排程,記錄方向)
- 示範→巨集重播(接
teach錄影,Agent S 式經驗庫):把成功軌跡壓成可重放的 ref 序列,重複性任務直接重播,是最徹底的降步數手段。 - 模型端:OpenCUA/UI-TARS 開源模型作為 Ollama 路的 computer-use 專用小模型。
- box 多 Bot 隔離升級(B18 群):每 Bot 一個 box(volume 每 Bot 一份,登入也每 Bot 一份)——順帶解決「登入互相踩」的問題。
五、執行順序總覽
| 週 | 內容 | 風險 |
|---|---|---|
| W1 | Phase 0 遥測;Prompt 微調;L1/L2/L3/L4(持久化四件套) | 低 |
| W2–3 | Phase 1(batch 工具→daemon→settle→截圖引擎,逐項上線逐項量) | 中(daemon 是新常駐面,需守 person-takeover/取消/逾時) |
| W4 | Phase 2(viewer 直連+調參;KasmVNC 原型);L5/L6 | 低–中 |
| W5 | L7 登入健康檢查;Phase 4 spikes;開會決定雲端路線 | — |
六、主要參考(2026-11-06 查證)
- Anthropic:Computer use tool 文件(batch actions、
computer_toolset_20260801)、Best practices for computer and browser use(2026-05,computer_batch/browser_batch)、Agent harness design(2026-04)。 - 研究:cua-speedrun(arXiv:2609.40284,速度瓶頸歸因)、OSWorld-Human(MLSys 2026,步數效率)、OSWorld 2.0。
- 開源框架:Agent S(simular-ai,S4)、UI-TARS Desktop / Agent TARS(bytedance)、OpenCUA(xlang.ai)、Cua(trycua)。
- 瀏覽器:browser-use/Browser Harness、Stagehand(Browserbase)、Playwright MCP(Microsoft)、chrome-devtools-mcp、agent-browser(Vercel)、Skyvern。
- 串流:KasmVNC(kasmtech,WebP/WebRTC/多緒編碼)、kasmweb 映像庫、accetto ubuntu-vnc-xfce-g3、TigerVNC 調參指南(2026-02)。
- 雲端沙箱:E2B(含 Desktop、自架 runtime)、Daytona(2026-06 起閉源)、Modal、Novita、Vercel Sandbox;雲端瀏覽器:Steel(開源自架)、Browserbase、Kernel(auth vault)、Hyperbrowser、Browser Use Cloud。
- 持久化:Docker volumes 官方文件(back up/restore/migrate)、Docker Desktop backup-and-restore、「持久≠備份」自架備份架構指南(2026-08,restic/borg)。