AI 代理長出雙手:從操作 GUI 到觸碰真實世界的互動設計

AI 代理長出雙手:從操作 GUI 到觸碰真實世界的互動設計

早上醒來對著電腦說了一句「幫我訂下個月飛東京的機票,順便整理這個月的報表寄給老闆」,接著轉身去泡咖啡。回頭一看,螢幕上的滑鼠游標正自行移動,自己點選網頁、切換視窗,甚至會因為網頁載入太慢而稍微停頓——操作方式幾乎與真人無異。這不再是遙遠的科幻場景,而是已經發生的技術事實。

我們過去習慣在瀏覽器開一個視窗,把 AI 當作隨問隨答的諮詢物件——就是一個很聰明的聊天機器人。但當 AI 開始具備主動規劃與執行的能力,我們面對的不再只是一台強大的計算機,而是一套全新的運作思維。它改變了軟體與軟體之間的邊界,甚至改變了人與軟體之間的邊界。

為什麼不直接走 API,而要繞路操作 GUI

過往要讓系統自動化,例如把 A 系統的資料倒進 B 系統,工程師通常的作法為寫腳本,或者直接用 API 串接,這早已是業界標準。但 AI 操作軟體的方式開始出現轉變——它捨棄後台的捷徑,轉而走向軟體的視覺前門,也就是直接操作 GUI(圖形使用者介面)。

從純粹的執行速度來看,API 當然最快。但 API 存在一個根本性的架構限制:脆弱性與維護成本。API 需要開發者針對每一套軟體客製化撰寫並持續維護,只要對方變更端點規則,自動化流程就全面失效。面對那些根本沒有提供 API 的老舊企業內部系統,傳統自動化更是無從施力。

Agent Computer Interface(ACI)解決的正是這個通用性問題。它像是給 AI 穿上一套數位外骨骼——AI 本身是顆聰明的大腦,而原本為人類肌肉與視覺設計的 GUI,變成了它的四肢。AI 不要求系統為它開後門寫 API,而是直接穿上這套外骨骼,適應我們所處的人類環境。

傳統自動化                      ACI 驅動的代理
─────────────────────────     ─────────────────────────
每套軟體寫專屬 API            不需要任何後台 API
┌──────────────┐             ┌──────────────────┐
│ 企業系統 A    │──API──►     │  GUI 就是數位外骨骼  │
│ 端點一改就壞   │             │  AI 大腦 ──► 滑鼠鍵盤 │
└──────────────┘             └──────────────────┘
脆弱性:極高                    通用性:任何有 GUI 的軟體都能操作
維護成本:每套都要養              容錯率:動態適應畫面變化

ACI 的運作機制:從像素到語義結構

ACI 的運作遠比單純的影像辨識複雜。它透過視覺語言模型(VLM)將畫面解析成語義結構圖:螢幕右上角由三條橫線組成的圖案不只是線條,而是漢堡選單;帶有搜尋意圖的放大鏡圖示,即使從右上角移到左下角,AI 也找得到。VLM 把視覺特徵與大型語言模型的推理能力結合,形成跨模態的上下文連結

整個流程可以拆成四個階段,串成一個封閉的迴圈:

① 視覺感知        ② GUI 元素辨識     ③ 上下文解釋      ④ 動態操作與回應
捕捉畫面表示  →   從畫素中分辨         把視覺特徵接上     以程式控制滑鼠鍵盤
(本質是截圖)      可點擊的按鈕、        大語言模型的        並持續監看畫面,
                  可編輯的文字欄位      推理,理解          對載入畫面、錯誤
                  ── 把畫素當成         放大鏡 = 搜尋       彈窗做出回應
                  結構化佈局看待

前三階段回答「AI 怎麼看懂畫面」,第四階段回答「它怎麼回應畫面」——把螢幕視為具有互動元件的結構化佈局,而不是一堆像素的集合。

這是傳統自動化腳本做不到的。腳本直接寫死「點選座標 (100, 200)」,網站一改版就會出錯失效;ACI 驅動的代理則用視覺找到放大鏡的位置再點擊,賦予系統極高的容錯率與動態適應力。

動態回饋迴圈:觀察、判斷、等待或換招

代理執行的關鍵在於動態回饋迴圈。AI 點選按鈕之後,會持續觀察畫面的狀態變化——如同我們按下按鈕會確認有沒有反應。若跳出系統錯誤的彈出視窗,或出現網路延遲的載入動畫,AI 會像人類一樣判讀當下狀態:現在是正在載入,還是操作失敗?它自行決定要等待、重新整理,還是改換另一種方法嘗試。

點選按鈕
   │
   ▼
觀察畫面狀態變化 ◄────────────────────┐
   │                                │
   ├─ 正在載入(轉圈圈)──────► 等待再觀察
   ├─ 操作成功 ──────────────► 進入下一步
   └─ 操作失敗(錯誤彈窗)────► 換方法重試 ─┘

真實世界的應用:跨軟體的工作流編排

各大科技廠商都已推出實際展示。以 Anthropic 的 Computer Use 為例,它能跨越多個互不相通的軟體編排工作流:從一份冗長的 PDF 財報中抓取特定營收資料,輸入試算表執行樞紐分析並生成圖表,最後把圖表貼進郵件草稿、寫好摘要寄給老闆。對人類而言,這是每天在辦公室發生的例行工作——切換視窗、複製貼上——但對早期 AI 來說,PDF、試算表與郵件軟體是完全孤立的環境。

透過 ACI,整個作業系統的桌面變成它統一的畫布。它不需要理解試算表的底層程式碼,只需要看懂介面邏輯,把前一個軟體在畫面上呈現的視覺結果,直接轉化為下一步操作的輸入值。這就像有一個速度快、而且永遠不會抱怨的超級虛擬實習生。

產品 應用場域 特色
ChatGPT Operator(OpenAI) 桌面應用程式自動化 從試算表傳資料到 CRM、訂複雜的旅行行程,不需要存取每家服務的專屬 API
ChatGPT Agent(OpenAI) 整合型代理架構 即時網路自主導航、動態生成並執行計算程式碼、直接與第三方軟體互動,可依單一指令編排連續工作流
Project Mariner(Google) Chrome 瀏覽器內執行 設定預算與社群的條件,自主逛房地產網站、套過濾器、彙整成檔案
Computer Use(Anthropic) 電腦桌面環境 擷取螢幕截圖感知畫面,以程式控制滑鼠鍵盤,編排跨應用程式的工作流
Claude 4(Anthropic) 文件與影像分析 具強視覺能力,能處理圖表、圖片與文件,勝任複雜的多步驟任務
Browser Use(開源) 瀏覽器 DOM 控制 把複雜的低階瀏覽器控制指令抽象化,從巢狀元素提取資料、填表單、跨頁面導航

其中開源的 Browser Use 值得一提:它透過讓 AI 代理存取與控制文件物件模型(DOM),把網頁上缺乏結構的資訊提取成乾淨的結構化資料,對需要進行市場調查或資料收集的人來說是極具價值的工具。

以 Google 的 Project Mariner 為例,可以更具體地看到代理如何在瀏覽器內自主完成任務。使用者只需要下一個高階指令,剩下的全部由代理接手:

指令:「幫我在信義區找三套月租金兩萬以內的公寓,整理成一份比較表。」

步驟序列(Mariner 自主執行)
─────────────────────────────
① 造訪租屋網站(如 591、樂屋網)
② 設定過濾器:信義區、月租金 ≤ 20000
③ 逐一瀏覽列表,進入詳情頁
④ 擷取每間公寓的坪數、格局、租金、照片、連結
⑤ 把三間符合條件的結果彙整成一份結構化比較表
⑥ 回傳給使用者

代理不只是「看」網頁,它會做出人類瀏覽時才會做的判斷:某間公寓租金雖然符合預算但坪數過小,就跳過;列表頁沒有直接顯示坪數,就得點進詳情頁補齊資料。整個過程不需要任何房地產網站的 API,因為它直接操作瀏覽器這個「視覺前門」。

安全煞車:高風險節點與人類授權

賦予系統如此大的自主權,風險也隨之而來。萬一 AI 產生幻覺,擅自將一筆款項轉給錯誤的人,或刪除公司重要的客戶資料,該如何避免?此時系統不再只是給出錯誤的建議文字,而是可能造成實質的破壞

以 OpenAI 針對 ChatGPT Agent 設計的防護機制為例,它在系統架構中引入了嚴格的關卡:使用者授權(Human-in-the-Loop)。開發者會在代理的行動空間中定義出高風險節點——例如傳送對外郵件、執行金流交易、修改系統許可權、刪除重要檔案,這些是不可逆的操作。當 AI 的行動軌跡即將觸及這些節點時,自主執行權會被暫時凍結,必須將當下的畫面狀態與即將執行的動作,透過提示框拋回給人類使用者確認,直到人類明確授權才能繼續執行。

高風險節點定義(TypeScript 示意)
────────────────────────────────
type HighRiskAction = 'send_email' | 'transfer_funds'
                     | 'change_permissions' | 'delete_files'

const APPROVAL_REQUIRED: HighRiskAction[] = [
  'send_email', 'transfer_funds',
  'change_permissions', 'delete_files',
]

if (APPROVAL_REQUIRED.includes(nextAction)) {
  await freezeAutonomy()          // 凍結自主執行權
  const approved = await askHuman({   // 拋回畫面狀態與動作給人類
    screen: currentScreenshot,
    action: nextAction,
  })
  if (!approved) return cancel()
}

這本質上是在代理的自主迴圈中強制嵌入人類的最終煞車機制——一個極度聰明、但在執行不可逆操作前必定會徵求確認的助手,能大幅降低災難性後果。人類介入的完整機制設計,可參考這裡-AI 為什麼需要人類救場:Human-in-the-Loop 架構探討

值得強調的是:風險等級的判定權不該交給代理自己。 上述範例把 APPROVAL_REQUIRED 清單寫在代理邏輯裡,僅是示意;在正式的系統中,這份判定應該由後端的閘道層(Guardrail)掌握,代理只提出「我想做這個動作」,由閘道層依動作型別與權限範圍決定風險等級,再決定要不要凍結並詢問人類。若把「要不要問人」交給 AI 自行判斷,它可能因過度自信而跳過人類審查,讓煞車機制形同虛設。這個原則在後端事件流實作中會再次出現。

原生多模態:聽懂語氣、看懂空間

前述場景仍侷限在 2D 的電腦螢幕內。當這些具備理解與行動能力的 AI 進入我們所處的真實 3D 物理世界,事情就變得更加複雜。關鍵在於原生多模態——這與過去幾年的智慧音箱有本質上的區別。智慧音箱就是 Amazon Echo(Alexa)、Google Nest(Google Assistant)、Apple HomePod(Siri)這類能透過語音指令操作的喇叭裝置。

傳統智慧音箱使用串聯架構:語音轉文字模組把聲音變成純文字逐字稿 → 餵給語言模型理解 → 語言模型生成回覆文字 → 文字轉語音模組念出來,像工廠流水線一層一層往下傳。最大的問題是資訊流失——當語音被強行轉換成純文字,語氣中的猶豫、激動甚至嘲諷,以及背景環境的聲音細節,全部被過濾掉。這正是以前的語音助理無法判讀使用者情緒的原因。

串聯架構(傳統語音助理)              原生多模態(GPT-4o 等)
──────────────────────            ──────────────────────
語音 → 轉文字 → LLM → 轉語音        同一個神經網路
  每層轉換都流失資訊                直接處理聲音波形、影像像素、文字
  延遲疊加                         低延遲、可打斷、理解語氣與環境

OpenAI 的 GPT-4o 這類原生多模態模型徹底打破這條流水線——直接用同一個神經網路同時處理聲音的波形、影像的像素與文字的 token。當我們嘆一口氣或講話結巴時,它讀到的不只是一行寫著「(嘆氣)」的文字,而是直接感知到那個嘆息背後的挫折感。這也解釋了為何使用 Gemini Live 或 GPT-4o 時反應時間幾乎沒有延遲,而且可以隨時打斷——過去的語音助理一打斷就卡死,現在它能像真人一樣瞬間調整話題。更進階的版本甚至能感知使用者的語氣,並聰明地過濾掉不相關的背景噪音,在嘈雜的環境中也能正確判讀對話。

對開發者而言,OpenAI 還提供了 Realtime API,讓應用程式直接串接這種低延遲的語音互動能力,不必自己處理語音轉文字與文字轉語音的膠水程式碼。

加上視覺又是另一個層次。Google 的 Project Astra 不只透過手機鏡頭看到我們桌上的馬克杯,還具備空間記憶:半小時後問它「我的眼鏡去哪了」,它會想起二十分鐘前鏡頭曾掃過床頭櫃,直接告訴我們眼鏡的位置。它把指令放在當下所處的時間與空間脈絡中——這就是情境感知。微軟的 Seeing AI 則是一個值得關注的應用:這個協助視障人士的免費 App,不只是把文字念出來,而是透過鏡頭掃描整個場景——閱讀文件、識別貨幣面額、透過條碼辨識產品、描述場景與顏色,並告訴使用者正前方有一張空椅子、左邊有個人正朝自己走過來,大幅擴展了人類感知世界的邊界。

Vibe Coding:用氛圍寫程式

當 AI 能透過 ACI 流暢操作數位介面、又能透過原生多模態理解物理空間與情緒,勢必會回過頭來改變一件事:我們創造數位工具的方式。這就是 Vibe Coding——軟體工程史上的一次正規化轉移。

回顧從組合語言、C 語言到高階語言的演進,軟體開發的本質一直沒變:人類必須用極度精確、容不下一點語法錯誤的邏輯指令告訴電腦該怎麼做,少一個分號整個系統就無法運作。Vibe Coding 完全顛覆這個過程——開發者的角色從作者拉高到策展人導演的層次。

過去寫程式就像滿場跑的攝影師,要自己調焦距、測光;現在只要對著 AI 團隊說「我要一個帶有現代感、極簡風格、有乾燥花氛圍的儀表板」,AI 就會根據這個高階的語義,把背後的 HTML、CSS 與 API 串接全部處理好。

Vibe Coding 的精髓不在於 AI 一次就能寫對——很多時候 AI 產生的程式仍有 bug 或風格不符預期。關鍵在於急速的迭代微調迴圈:AI 生成程式並嘗試執行後,如果編譯器丟出錯誤訊息或網頁畫面排版跑掉,AI 能自己去讀錯誤的 log、理解出錯原因、在幾秒鐘內自行修復。人類開發者不必再翻閱 Stack Overflow 或說明文件,只需要用自然語言給出方向性的指導:「這按鈕的轉場動畫太生硬,讓它柔和一點」「加上資料庫的錯誤處理機制,連不上就顯示友善的提示」。

這個過程還有另一個容易忽略的特質——創意夥伴。Vibe Coding 不是單向的「我們下指令、AI 照做」,而是雙向對話。AI 會主動提出開發者可能沒想過的作法:例如給出一個更快的 API 選擇、建議改用另一種資料結構、甚至推翻原本的設計方向提出更簡潔的方案。這讓開發從「一個人埋頭寫」變成「與一個有想法的夥伴共同推敲」,也加速了產品的創新。

Vibe Coding 迭代微調迴圈
────────────────────
開發者給出高階意圖(氛圍)
   │
   ▼
AI 生成程式碼 → 執行 → 出錯?
   │                        │
   │                        是
   │                        ▼
   │             AI 自己讀 log、理解原因、修復 bug
   │                        │
   └─────── 開發者用自然語言微調 ◄──────┘
   (持續到符合預期)

記憶庫:維持跨專案的一致性

若每次開啟新專案都要重新向 AI 說明「氛圍」與架構限制,溝通成本其實很高。為了維持這種跨專案的上下文,Vibe Coding 流程中引入了記憶庫(Memory Bank)的概念。它不是簡單的複製貼上,而是讓 AI 深度鎖定某個專案的特定架構決策與程式碼風格——就像團隊的共同默契。系統的自然規範或特定的 UI 元件庫設定都可以存入記憶庫,AI 在後續每次生成程式碼時都會自動套用這些氛圍限制,確保產出的系統不會隨著迭代而產生架構劣化。

記憶庫(Memory Bank)示意
────────────────────────
{
  project: 'career-dashboard',
  codeStyle: {
    language: 'TypeScript',
    framework: 'React + Tailwind',
    conventions: ['函式式元件', 'named export', 'zustand 管理狀態'],
  },
  uiConstraints: {
    palette: ['#0F172A', '#38BDF8'],
    animation: 'ease-out 200ms',
    radius: '8px',
  },
  architecture: ['一頁式儀表板', '服務層抽離 API 呼叫'],
}

對 UI/UX 的影響:把代理的行動軌跡攤開給使用者看

當 AI 開始自主操作軟體,使用者介面的角色也跟著改變。過去的介面是「我們操作,AI 回應」;現在變成「我們下指令,AI 自己操作」。這種轉變對 UI/UX 有兩個直接影響。

第一,代理的行動軌跡必須可視化。 當 AI 自己移動滑鼠、切換視窗時,最差的 UX 就是螢幕上只有一個游標在動,使用者完全不知道它在做什麼、做到哪一步。好的作法是把代理的每個動作轉譯成看得懂的軌跡:現在正在讀哪份 PDF、下一步要輸入到哪個試算表、目前卡在哪個步驟。這就像導航系統顯示「前方 200 公尺轉彎」,讓使用者即使不盯全程,也能在出錯時立刻察覺。

第二,高風險節點的授權畫面是代理介面的成敗關鍵。 前面提到的 HITL 提示框,如果只是彈出一句「是否允許繼續執行?」,使用者沒有足夠脈絡判斷,最終只會變成機械式地點「允許」。授權畫面必須把當下畫面狀態、即將執行的動作、背後的風險等級一次攤開,使用者才知道自己批准的是什麼:

┌─────────────────────────────────────────────────────────┐
│ ⚠ 需要您的授權才能繼續                                ✕  │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  AI 即將執行以下動作:                                   │
│  ┌─ 動作 ──────────────────────────────────────────┐  │
│  │ 📤 傳送郵件給 boss@example.com                  │  │
│  │    主旨:Q3 財報分析                             │  │
│  │    附件:revenue-chart.png(來自試算表分析)     │  │
│  └──────────────────────────────────────────────────┘  │
│                                                         │
│  風險等級:高(對外通訊,不可撤銷)                     │
│  ┌──────────────────┐  ┌──────────────────┐           │
│  │   允許執行       │  │   退回修正       │           │
│  └──────────────────┘  └──────────────────┘           │
└─────────────────────────────────────────────────────────┘

前後端技術怎麼實作

對應到上述 UI/UX 影響,前後端有一條清晰的分工線。

後端:把代理的動作流當成事件串流推送

代理的每個動作(讀取檔案、點擊按鈕、送出請求)都要被記錄成結構化事件,透過即時通道推送到前端,而不是等整段工作流結束才回傳一個結果:

type AgentActionEvent = {
  stepId: string
  action: 'read_file' | 'click' | 'type' | 'send_email'
  target: string              // 作用對象,例如 'revenue.pdf'
  status: 'running' | 'done' | 'failed'
  riskLevel: 'low' | 'high'   // 由後端閘道層判定,供前端決定要不要渲染授權畫面
}

後端在執行到 riskLevel: 'high' 的動作前,先暫停工作流並回傳該事件的完整上下文(screenactiontarget),等待前端回報使用者的授權結果後才繼續。

這裡與前文 HITL 範例的分工一致:riskLevel 由閘道層依動作型別與權限範圍判定,代理本身沒有「決定要不要問人」的權限,避免因過度自信而跳過人類審查。

前端:把事件串流渲染成代理軌跡,並實作授權面板

這個分工讓「代理自主操作」從一個不可見的黑箱,變成使用者可以隨時介入、事後追蹤的透明流程。

總結

無論是 AI 操作現有的軟體,還是人類利用 AI 創造新的軟體,所有技術突破都指向同一個終極目標:降低摩擦力——消除傳統數位世界裡僵化死板的指令邊界。從 ACI 讓 AI 突破文字框、直接操作 GUI;到原生多模態讓它聽懂語氣、看懂空間;再到 Vibe Coding 徹底改變我們創造軟體的方式。

值得思考的是:未來如果有 90% 在網路上瀏覽網頁、點選按鈕、填寫表單的「使用者」其實根本不是人類,而是 AI 代理——那我們還需要把應用程式設計成現在這種樣子嗎?還需要把介面設計成人類肉眼容易看、滑鼠容易點的形式嗎?如果 AI 本身不需要那些華麗的視覺設計也能理解系統結構,未來的數位世界是否會演變成一個專門為 AI 代理設計的巨大場域,而人類只需要坐在導演椅上設定目標與意圖。「數位介面到底為誰而存在」這個問題,非常值得在未來幾年觀察科技發展軌跡時持續思考。

參考資料


ACI Agent Computer Interface Computer Use GUI Automation VLM Native Multimodal Vibe Coding Human-in-the-Loop Agentic Design Pattern Agentic AI AI Engineering AI Design Pattern Agentic AI 401

Summer Tang
Sponsored
Summer Tang 一對一諮詢
Summer|TSMC 主任工程師|擁有 15 年資深 Web 架構經驗,職涯歷經跨國頂尖企業與新創。專精於高流量企業級應用開發,核心技術涵蓋微前端、效能優化、測試自動化與 SEO。曾出版多本技術著作,並多次擔任 MOPCON、WebConf 等大型技術年會講者。
了解更多 →