變遷的GUI自動(dòng)化新范式)
1. 項(xiàng)目概述當(dāng)GUI自動(dòng)化遇上“世界模型”最近在搗鼓移動(dòng)端自動(dòng)化測(cè)試和智能體Agent相關(guān)的東西發(fā)現(xiàn)一個(gè)挺有意思的研究方向就是如何讓AI“理解”并“操作”手機(jī)App的圖形用戶界面GUI。傳統(tǒng)的腳本錄制回放或者基于坐標(biāo)的點(diǎn)擊在界面稍有變動(dòng)時(shí)就容易“翻車”。而“AppDeltaWorld”這個(gè)項(xiàng)目提出了一種基于“Delta Code”和“世界模型”的新思路試圖從根本上解決這個(gè)問題。簡(jiǎn)單來說它想讓AI像人一樣不是死記硬背屏幕上的像素或控件位置而是理解界面狀態(tài)之間的“變化”Delta并預(yù)測(cè)操作后世界即App界面會(huì)變成什么樣。這聽起來有點(diǎn)抽象我打個(gè)比方。你玩一個(gè)游戲從主菜單狀態(tài)A點(diǎn)擊“開始”按鈕進(jìn)入游戲場(chǎng)景狀態(tài)B。一個(gè)笨AI需要記住在屏幕512 768坐標(biāo)有個(gè)紅色按鈕點(diǎn)它。但如果UI改版按鈕位置顏色變了它就懵了。而一個(gè)聰明的AI應(yīng)該理解“在當(dāng)前狀態(tài)主菜單下執(zhí)行‘開始’這個(gè)動(dòng)作會(huì)觸發(fā)一個(gè)狀態(tài)變遷進(jìn)入游戲場(chǎng)景?!盇ppDeltaWorld的核心就是讓AI學(xué)會(huì)這種基于狀態(tài)變遷Transition-Grounded的思考方式而它理解世界的“語言”不是像素也不是原始的UI控件樹而是一種稱為“Delta Code”的中間表示。這個(gè)項(xiàng)目名里的幾個(gè)關(guān)鍵詞恰好勾勒出了它的技術(shù)輪廓Transition-Grounded以狀態(tài)變遷為基礎(chǔ)、Delta Code差異代碼、World Model世界模型最終服務(wù)于Mobile GUI Agents移動(dòng)端GUI智能體。它的野心不小旨在為自動(dòng)化測(cè)試、無障礙輔助、甚至手機(jī)上的“數(shù)字員工”提供一個(gè)更魯棒、更通用的“大腦”。接下來我就結(jié)合自己的理解和一些實(shí)驗(yàn)拆解一下這個(gè)項(xiàng)目的核心思路、技術(shù)實(shí)現(xiàn)以及我們能在實(shí)踐中如何借鑒。2. 核心思路拆解為什么是Delta Code和世界模型2.1 移動(dòng)GUI自動(dòng)化的核心挑戰(zhàn)在深入Delta Code之前我們必須先搞清楚現(xiàn)有移動(dòng)端GUI自動(dòng)化方案的痛點(diǎn)。主流方法無外乎以下幾種基于坐標(biāo)/圖像識(shí)別通過截圖匹配圖像模板或計(jì)算坐標(biāo)來點(diǎn)擊。這種方法極度脆弱屏幕分辨率、主題顏色、字體大小的微小變化都可能導(dǎo)致失敗。它完全無法理解界面語義。基于Accessibility樹/UI控件樹Android的UIAutomator、iOS的XCUITest都提供了獲取當(dāng)前界面控件樹的能力。這比純圖像進(jìn)了一步智能體可以獲取控件的text、resource-id、class等信息來定位和操作。這是目前工業(yè)界最主流的方法。基于視覺-語言模型VLM直接給屏幕截圖讓大模型如GPT-4V描述畫面并生成操作指令。這種方法泛化能力強(qiáng)但成本高、速度慢且嚴(yán)重依賴提示詞工程對(duì)于需要多步復(fù)雜交互的任務(wù)穩(wěn)定性存疑。這些方法共有的一個(gè)根本問題是它們大多是“靜態(tài)”和“反應(yīng)式”的。智能體看到當(dāng)前狀態(tài)S_t然后決定一個(gè)動(dòng)作A_t。但它對(duì)“執(zhí)行A_t后世界會(huì)變成什么樣”缺乏一個(gè)內(nèi)在的、可預(yù)測(cè)的模型。它只能執(zhí)行然后等待新的截圖或控件樹再做出下一個(gè)判斷。這就像蒙著眼睛走一步停下來摸一下四周再?zèng)Q定下一步效率低下且容易在動(dòng)態(tài)變化的環(huán)境中迷失。2.2 Delta Code將GUI狀態(tài)變遷編碼為“差異”那么如何讓智能體擁有“預(yù)測(cè)”能力這就需要“世界模型”。在強(qiáng)化學(xué)習(xí)或序列決策中世界模型是一個(gè)對(duì)環(huán)境動(dòng)態(tài)進(jìn)行建模的組件輸入當(dāng)前狀態(tài)和動(dòng)作預(yù)測(cè)下一個(gè)狀態(tài)和獎(jiǎng)勵(lì)。但對(duì)于GUI這個(gè)“世界”其狀態(tài)即屏幕內(nèi)容非常復(fù)雜且高維像素圖或半結(jié)構(gòu)化控件樹。直接對(duì)像素或原始控件樹建模進(jìn)行預(yù)測(cè)計(jì)算量巨大且難以學(xué)習(xí)。AppDeltaWorld提出的“Delta Code”本質(zhì)上是一種對(duì)GUI狀態(tài)變遷進(jìn)行抽象和壓縮的表示方法。它不是直接描述狀態(tài)S_t或S_{t1}而是描述從S_t到S_{t1}的變化Delta。這個(gè)變化用結(jié)構(gòu)化的代碼或類代碼的文本來表示。舉個(gè)例子原始狀態(tài)S_t部分一個(gè)登錄頁面有用戶名輸入框、密碼輸入框、一個(gè)“登錄”按鈕。動(dòng)作A_t在密碼框輸入“123456”然后點(diǎn)擊“登錄”按鈕。下一個(gè)狀態(tài)S_{t1}登錄成功跳轉(zhuǎn)到用戶主頁顯示“歡迎回來張三”。Delta Code可能表示為# 這是一個(gè)概念性示例非真實(shí)Delta Code語法 on_screen_transition( from_stateLoginPage, action_sequence[ fill_field(field_idpassword, text123456), tap(element_idlogin_button) ], to_stateHomePage, observed_changes[ new_element(typeTextView, text歡迎回來張三), remove_element(element_idlogin_button), remove_element(element_idpassword_field) ] )Delta Code的精妙之處在于緊湊性它只關(guān)注變化的部分而不是整個(gè)界面的冗余信息大大降低了建模的維度。結(jié)構(gòu)性它以代碼形式呈現(xiàn)便于被程序解析和處理也更容易被語言模型理解和生成。語義性它捕捉的是界面元素和布局的語義變化如“新增了一個(gè)文本為XX的元素”、“移除了YY組件”而非像素級(jí)變化這使得模型學(xué)到的規(guī)律更具泛化性。2.3 Transition-Grounded以動(dòng)作為錨點(diǎn)的學(xué)習(xí)“Transition-Grounded”是另一個(gè)關(guān)鍵設(shè)計(jì)。傳統(tǒng)的世界模型可能試圖學(xué)習(xí)一個(gè)函數(shù)f(S_t, A_t) - S_{t1}。但在GUI中完全精確地預(yù)測(cè)出下一個(gè)屏幕的所有像素或所有控件是不現(xiàn)實(shí)且不必要的。AppDeltaWorld的思路是將學(xué)習(xí)目標(biāo)從“預(yù)測(cè)完整的下一個(gè)狀態(tài)”轉(zhuǎn)變?yōu)椤邦A(yù)測(cè)由當(dāng)前動(dòng)作所引發(fā)的狀態(tài)變遷Delta”。模型不再需要生成整個(gè)新界面只需要生成描述界面關(guān)鍵變化的Delta Code。這相當(dāng)于把問題從“畫一幅新畫”簡(jiǎn)化成了“描述這幅畫和上一幅畫的主要區(qū)別”顯然更容易實(shí)現(xiàn)。這個(gè)“變遷”是以動(dòng)作為基礎(chǔ)的Grounded。模型在訓(xùn)練時(shí)會(huì)看到大量的(S_t, A_t, Delta Code_t)三元組。它學(xué)習(xí)的是在狀態(tài)S_t下執(zhí)行動(dòng)作A_t最可能引發(fā)怎樣的界面變遷Delta Code。這種學(xué)習(xí)方式更直接也更貼合智能體決策的需求——我關(guān)心的是我的操作會(huì)帶來什么結(jié)果。3. 技術(shù)架構(gòu)與實(shí)現(xiàn)猜想雖然我沒有拿到AppDeltaWorld項(xiàng)目的完整源碼但根據(jù)其核心思想和相關(guān)領(lǐng)域的技術(shù)如HTML/CSS渲染、UI控件樹差異比較、序列建模我們可以推斷其大致的實(shí)現(xiàn)框架。3.1 系統(tǒng)組成模塊一個(gè)完整的AppDeltaWorld系統(tǒng)可能包含以下模塊狀態(tài)感知器State Perceiver負(fù)責(zé)將原始的GUI輸入截圖或控件樹轉(zhuǎn)換成一種模型可處理的中間表示。這可能不是直接生成Delta Code而是一種更底層的、豐富的特征表示為后續(xù)的差異計(jì)算和預(yù)測(cè)做準(zhǔn)備。輸入屏幕截圖 / Accessibility Tree / UI Hierarchy (XML/JSON)。處理對(duì)于視覺輸入使用CNN或Vision Transformer提取視覺特征對(duì)于結(jié)構(gòu)輸入使用GNN或Transformer編碼器處理樹狀結(jié)構(gòu)。輸出一個(gè)固定維度的狀態(tài)嵌入向量或者一個(gè)結(jié)構(gòu)化的狀態(tài)描述序列。Delta編碼器/解碼器Delta Codec這是核心模塊。編碼器在訓(xùn)練階段給定一對(duì)連續(xù)的狀態(tài)(S_t, S_{t1})和中間的動(dòng)作A_t編碼器的任務(wù)是生成對(duì)應(yīng)的Delta Code。這可能需要一個(gè)差異計(jì)算Diff算法對(duì)比兩個(gè)狀態(tài)的結(jié)構(gòu)化描述例如對(duì)比兩個(gè)UI樹的JSON并輸出結(jié)構(gòu)化的變更描述如元素E1的屬性text從“登錄”變?yōu)椤罢诘卿?..”元素E2被刪除新增了元素E3其屬性為...。解碼器/預(yù)測(cè)器在部署階段智能體使用模型接收當(dāng)前狀態(tài)表示S_t和候選動(dòng)作A_t目標(biāo)是根據(jù)學(xué)習(xí)到的規(guī)律直接預(yù)測(cè)生成執(zhí)行A_t后可能出現(xiàn)的Delta Code。這通常是一個(gè)序列生成模型如Transformer Decoder以[S_t, A_t]為條件自回歸地生成Delta Code的token序列。世界模型World Model本質(zhì)上就是上述Delta解碼器它封裝了“環(huán)境動(dòng)態(tài)”。智能體可以調(diào)用這個(gè)世界模型進(jìn)行“想象”或“規(guī)劃”在內(nèi)部模擬執(zhí)行多個(gè)動(dòng)作序列通過世界模型預(yù)測(cè)每一步的Delta Code從而評(píng)估不同動(dòng)作序列可能導(dǎo)致的結(jié)果比如是否能成功到達(dá)目標(biāo)狀態(tài)而無需在真實(shí)環(huán)境中昂貴地試錯(cuò)。智能體策略Agent Policy基于當(dāng)前狀態(tài)和世界模型的預(yù)測(cè)決定下一步執(zhí)行什么動(dòng)作。策略可以是學(xué)習(xí)得到的如強(qiáng)化學(xué)習(xí)策略也可以是啟發(fā)式的如結(jié)合目標(biāo)狀態(tài)搜索能產(chǎn)生匹配Delta Code的動(dòng)作。3.2 Delta Code的具體形式與生成Delta Code的具體語法設(shè)計(jì)是關(guān)鍵。它需要足夠表達(dá)力來描述豐富的UI變化又要足夠簡(jiǎn)潔以利于學(xué)習(xí)。它很可能借鑒了HTML/XML Diff、軟件AST抽象語法樹變更描述的思想。一種可行的設(shè)計(jì)是定義一個(gè)領(lǐng)域特定語言DSL。例如TRANSITION { ACTION: CLICK {id: btn_submit} CHANGES: [ UPDATE {id: btn_submit, attr: enabled, value: false}, UPDATE {id: btn_submit, attr: text, value: 提交中...}, CREATE { type: Toast, attr: {text: 操作成功, duration: SHORT} } ] }在訓(xùn)練數(shù)據(jù)構(gòu)建階段需要自動(dòng)化地生成大量的(S_t, A_t, S_{t1}, Delta Code)四元組。這可以通過在大量App上運(yùn)行自動(dòng)化腳本同時(shí)錄制屏幕、控件樹和操作日志然后通過離線差分算法自動(dòng)生成Delta Code。這個(gè)過程雖然數(shù)據(jù)準(zhǔn)備成本高但一旦建成模型就能從海量的界面變遷模式中學(xué)習(xí)通用規(guī)律。實(shí)操心得數(shù)據(jù)構(gòu)建是關(guān)鍵這類項(xiàng)目的成敗一半在于模型架構(gòu)另一半在于高質(zhì)量的訓(xùn)練數(shù)據(jù)。Delta Code的自動(dòng)生成必須足夠精準(zhǔn)和一致。一個(gè)不準(zhǔn)的Diff算法會(huì)產(chǎn)生噪聲標(biāo)簽嚴(yán)重干擾模型學(xué)習(xí)。在實(shí)踐中可能需要結(jié)合視覺差異截圖對(duì)比和結(jié)構(gòu)差異控件樹對(duì)比來提高Delta Code生成的可靠性。例如先通過結(jié)構(gòu)對(duì)比生成基礎(chǔ)Delta再用視覺對(duì)比校驗(yàn)是否存在結(jié)構(gòu)未捕獲的變化如純圖片內(nèi)容變化。4. 潛在應(yīng)用場(chǎng)景與價(jià)值分析AppDeltaWorld這套思路如果能夠成熟落地將在多個(gè)領(lǐng)域產(chǎn)生價(jià)值4.1 增強(qiáng)的移動(dòng)應(yīng)用自動(dòng)化測(cè)試這是最直接的應(yīng)用。傳統(tǒng)的UI自動(dòng)化測(cè)試腳本基于Appium等在App迭代時(shí)維護(hù)成本極高。自我修復(fù)的測(cè)試腳本測(cè)試腳本可以不再綁定死板的控件定位器如idloginBtn。當(dāng)UI變更導(dǎo)致腳本失敗時(shí)智能體可以利用世界模型理解當(dāng)前新界面與舊腳本期望界面之間的“Delta”并自動(dòng)調(diào)整后續(xù)操作步驟或至少給出更清晰的失敗原因“登錄按鈕的ID已從‘loginBtn’變?yōu)椤畇ignInButton’”。探索性測(cè)試智能體可以基于世界模型進(jìn)行更智能的探索主動(dòng)嘗試可能引發(fā)“有趣”或“危險(xiǎn)”狀態(tài)變遷的操作組合以發(fā)現(xiàn)深層Bug。4.2 通用型移動(dòng)端任務(wù)自動(dòng)化智能體想象一個(gè)可以幫你完成各種手機(jī)操作的數(shù)字助手比如“訂一份常點(diǎn)的外賣”、“把最近拍的十張照片分享到朋友圈”??鏏pp任務(wù)流智能體需要理解不同App間的切換和狀態(tài)傳遞。Delta Code如果能統(tǒng)一表示不同App的界面變遷將極大助力跨App任務(wù)的規(guī)劃與執(zhí)行。對(duì)變化的魯棒性微信、淘寶等App的UI頻繁更新。一個(gè)基于像素或固定控件定位的機(jī)器人很快會(huì)失效。而一個(gè)學(xué)會(huì)了“狀態(tài)變遷規(guī)律”的智能體可能更容易適應(yīng)這些變化因?yàn)樗斫獾氖恰包c(diǎn)擊這個(gè)區(qū)域的元素通常會(huì)導(dǎo)致頁面跳轉(zhuǎn)”而不是“點(diǎn)擊坐標(biāo)(100,200)”。4.3 無障礙輔助技術(shù)的智能化升級(jí)對(duì)于視障用戶使用的屏幕閱讀器當(dāng)前主要是線性朗讀控件信息。一個(gè)集成了世界模型的智能體可以預(yù)測(cè)性提示“您剛剛輸入了密碼接下來很可能會(huì)看到一個(gè)‘登錄’按鈕點(diǎn)擊它將進(jìn)入主頁?!睆?fù)雜操作引導(dǎo)幫助用戶完成多步表單填寫并在每一步預(yù)測(cè)下一步可能出現(xiàn)的界面元素提前給出指引。4.4 低代碼/零代碼平臺(tái)的后端引擎在一些需要自動(dòng)化連接不同軟件服務(wù)的平臺(tái)中用戶可以圖形化配置工作流如當(dāng)收到一封特定郵件時(shí)提取內(nèi)容登錄某個(gè)系統(tǒng)創(chuàng)建工單。這些平臺(tái)背后需要理解各個(gè)軟件界面的操作邏輯。Delta Code和世界模型可以作為一種通用的“軟件操作知識(shí)”表示使平臺(tái)能更智能地適配用戶自定義的軟件環(huán)境。5. 挑戰(zhàn)、局限與未來展望盡管前景誘人但AppDeltaWorld或類似技術(shù)路徑面臨顯著挑戰(zhàn)長(zhǎng)尾與泛化問題移動(dòng)App的界面風(fēng)格、交互邏輯千差萬別。模型在訓(xùn)練集可能涵蓋幾百個(gè)主流App上表現(xiàn)良好但遇到一個(gè)全新的、設(shè)計(jì)迥異的App時(shí)其預(yù)測(cè)Delta Code的能力可能會(huì)下降。如何讓模型真正學(xué)會(huì)“界面變遷”的元規(guī)律而非僅僅記憶訓(xùn)練App中的模式是一個(gè)核心研究問題。非確定性環(huán)境網(wǎng)絡(luò)延遲、異步加載、彈窗廣告、系統(tǒng)通知等都會(huì)導(dǎo)致狀態(tài)變遷的非確定性。同一個(gè)操作可能因?yàn)榫W(wǎng)絡(luò)快慢導(dǎo)致下一個(gè)狀態(tài)不同加載中頁面 vs. 加載完成頁面。世界模型需要能夠處理這種不確定性或許需要預(yù)測(cè)多個(gè)可能的Delta及其概率。Delta Code的設(shè)計(jì)瓶頸定義一套完美的、能涵蓋所有GUI變遷的DSL極其困難。有些變化是連續(xù)的如滑動(dòng)列表、視覺的如動(dòng)畫、或涉及復(fù)雜邏輯狀態(tài)的如游戲內(nèi)狀態(tài)。當(dāng)前的Delta Code可能更擅長(zhǎng)處理離散的、結(jié)構(gòu)化的界面元素增刪改。計(jì)算成本與實(shí)時(shí)性運(yùn)行視覺編碼器、世界模型預(yù)測(cè)這些計(jì)算在移動(dòng)設(shè)備上可能帶來功耗和延遲問題。對(duì)于需要實(shí)時(shí)交互的智能體這是一個(gè)必須權(quán)衡的工程問題。未來可能的演進(jìn)方向多模態(tài)融合結(jié)合視覺、文本和結(jié)構(gòu)信息形成更魯棒的狀態(tài)表示。例如用VLM描述屏幕全局語義用控件樹提供精確結(jié)構(gòu)兩者互補(bǔ)。大語言模型LLM的集成LLM在理解和生成結(jié)構(gòu)化文本如代碼方面能力強(qiáng)大??梢灾苯佑肔LM作為Delta Code的生成器或解釋器甚至讓LLM基于自然語言目標(biāo)直接規(guī)劃動(dòng)作序列而世界模型負(fù)責(zé)驗(yàn)證和細(xì)化這些規(guī)劃。從“預(yù)測(cè)變遷”到“理解意圖”更進(jìn)一步模型不僅預(yù)測(cè)界面會(huì)怎么變還能推斷出這個(gè)變化背后的用戶意圖或App功能如“這個(gè)變遷完成了登錄流程”、“這個(gè)彈窗是請(qǐng)求權(quán)限”。這將使智能體具備更高層次的認(rèn)知能力。在我自己嘗試構(gòu)建一些簡(jiǎn)單的GUI自動(dòng)化工具時(shí)最深切的體會(huì)是“變化”是永恒的敵人。AppDeltaWorld提供了一種思路與其對(duì)抗變化不如學(xué)會(huì)理解和預(yù)測(cè)變化。它將GUI交互建模為一個(gè)動(dòng)態(tài)系統(tǒng)的狀態(tài)遷移過程并用一種可計(jì)算、可學(xué)習(xí)的方式Delta Code來描述這個(gè)過程。這條路還很長(zhǎng)充滿了工程和算法上的挑戰(zhàn)但它指向了一個(gè)更智能、更自適應(yīng)的人機(jī)交互未來。對(duì)于從事自動(dòng)化、測(cè)試開發(fā)或AI應(yīng)用落地的工程師來說關(guān)注這個(gè)方向的技術(shù)進(jìn)展思考如何將其中的思想如關(guān)注狀態(tài)差異、建立預(yù)測(cè)模型應(yīng)用到當(dāng)前的實(shí)際問題中或許比等待一個(gè)完全成熟的方案更有價(jià)值。畢竟理解“Delta”就是理解軟件世界運(yùn)行的核心韻律之一。