自我改進(jìn):從失敗中學(xué)習(xí)的關(guān)鍵技術(shù)與實(shí)戰(zhàn))
1. 從“失敗”中學(xué)習(xí)推理時(shí)自我改進(jìn)的核心理念最近在折騰各種AI智能體Agent特別是那些能操作電腦、完成實(shí)際任務(wù)的“計(jì)算機(jī)使用智能體”Computer-Use Agents我發(fā)現(xiàn)一個(gè)挺有意思的現(xiàn)象很多智能體在第一次執(zhí)行任務(wù)時(shí)表現(xiàn)往往不盡如人意。比如你讓它“打開瀏覽器搜索最近的咖啡店并把地址復(fù)制到記事本里”它可能會(huì)卡在某個(gè)步驟——也許是沒找到正確的搜索框也許是復(fù)制粘貼操作錯(cuò)了地方。傳統(tǒng)的做法是我們作為開發(fā)者會(huì)去分析日志修改提示詞Prompt或者調(diào)整智能體的決策邏輯然后重新訓(xùn)練模型再部署一個(gè)新版本。這個(gè)過程周期長(zhǎng)成本高而且智能體在部署后遇到新問題依然會(huì)“犯傻”。“Learning from Failure: Inference-Time Self-Improvement” 這個(gè)概念直譯過來是“從失敗中學(xué)習(xí)推理時(shí)的自我改進(jìn)”它瞄準(zhǔn)的正是這個(gè)痛點(diǎn)。它不主張?jiān)谟?xùn)練階段就把所有情況都教給模型而是讓智能體在實(shí)際運(yùn)行推理過程中一旦發(fā)現(xiàn)自己“搞砸了”就能立刻分析原因并當(dāng)場(chǎng)調(diào)整自己的行為策略嘗試用更好的方法再試一次。這就像一個(gè)有經(jīng)驗(yàn)的程序員在代碼運(yùn)行報(bào)錯(cuò)時(shí)不是立刻去問別人而是自己看錯(cuò)誤日志、調(diào)試、修改然后重新運(yùn)行直到成功。這個(gè)能力對(duì)于追求真正自主和實(shí)用的AI智能體來說至關(guān)重要。為什么要在“推理時(shí)”自我改進(jìn)因?yàn)檎鎸?shí)世界是開放、動(dòng)態(tài)且充滿不確定性的。訓(xùn)練數(shù)據(jù)再豐富也無法覆蓋所有可能的軟件界面、網(wǎng)絡(luò)狀態(tài)、用戶意圖的細(xì)微差別。一個(gè)只能在訓(xùn)練集上表現(xiàn)完美的智能體一旦投入實(shí)際使用面對(duì)千變?nèi)f化的環(huán)境其脆弱性就會(huì)暴露無遺。推理時(shí)自我改進(jìn)相當(dāng)于給智能體裝上了“實(shí)時(shí)糾錯(cuò)”和“經(jīng)驗(yàn)學(xué)習(xí)”的機(jī)制讓它能適應(yīng)非訓(xùn)練時(shí)見過的場(chǎng)景從而大幅提升其魯棒性和任務(wù)成功率。這不僅僅是讓智能體“更聰明”更是讓它變得更“皮實(shí)”和“可靠”。2. 計(jì)算機(jī)使用智能體的獨(dú)特挑戰(zhàn)與失敗模式要理解“從失敗中學(xué)習(xí)”的價(jià)值我們得先看看計(jì)算機(jī)使用智能體通常會(huì)在哪些地方“翻車”。這類智能體的核心任務(wù)是理解自然語言指令并將其轉(zhuǎn)化為一系列對(duì)圖形用戶界面GUI或操作系統(tǒng)的精確操作比如點(diǎn)擊、輸入、滾動(dòng)、切換窗口等。它的工作流可以簡(jiǎn)化為觀察屏幕或DOM結(jié)構(gòu)- 理解任務(wù) - 規(guī)劃步驟 - 執(zhí)行動(dòng)作 - 觀察結(jié)果 - 循環(huán)直至任務(wù)完成。在這個(gè)過程中失敗是家常便飯。我根據(jù)實(shí)際開發(fā)和測(cè)試經(jīng)驗(yàn)把這些失敗模式大致歸為以下幾類2.1 感知與理解錯(cuò)誤這是最基礎(chǔ)的錯(cuò)誤。智能體“看”錯(cuò)了屏幕。元素定位失敗這是最常見的問題。智能體基于當(dāng)前的屏幕截圖或可訪問性樹Accessibility Tree尋找一個(gè)按鈕比如“搜索”按鈕。但由于界面主題變化、窗口縮放、動(dòng)態(tài)加載的元素如“加載更多”按鈕出現(xiàn)前后、或是使用了非標(biāo)準(zhǔn)的UI組件庫智能體用來識(shí)別元素的特征如文本內(nèi)容、控件類型、相對(duì)位置失效了導(dǎo)致它要么找不到目標(biāo)要么錯(cuò)誤地點(diǎn)擊了另一個(gè)相似的元素。狀態(tài)誤判智能體無法準(zhǔn)確判斷某個(gè)交互元素當(dāng)前的狀態(tài)。例如一個(gè)復(fù)選框到底是勾選了還是沒勾選一個(gè)下拉菜單是展開的還是收起的一個(gè)按鈕是可點(diǎn)擊的還是灰顯的如果判斷錯(cuò)誤后續(xù)的操作序列就會(huì)完全亂套。任務(wù)意圖理解偏差用戶說“整理一下桌面”智能體可能理解為刪除所有文件而用戶的真實(shí)意圖可能是將文件按類型歸類到文件夾。這種高級(jí)語義理解的偏差會(huì)導(dǎo)致整個(gè)任務(wù)方向錯(cuò)誤。2.2 規(guī)劃與執(zhí)行錯(cuò)誤即使“看”對(duì)了也可能“做”錯(cuò)。操作序列規(guī)劃不合理任務(wù)需要多個(gè)步驟智能體規(guī)劃的順序有問題。比如它可能試圖在未登錄的情況下就去訪問需要權(quán)限的頁面或者在保存文件之前就關(guān)閉了編輯窗口。這種規(guī)劃錯(cuò)誤源于對(duì)任務(wù)流程的常識(shí)或領(lǐng)域知識(shí)缺失。動(dòng)作執(zhí)行不精確找到了正確的按鈕但點(diǎn)擊的坐標(biāo)有細(xì)微偏差可能點(diǎn)到了按鈕邊緣導(dǎo)致沒反應(yīng)或者更糟點(diǎn)開了旁邊的菜單。對(duì)于拖拽操作起始點(diǎn)和結(jié)束點(diǎn)的判斷失誤更是常見。缺乏等待與容錯(cuò)智能體執(zhí)行了一個(gè)操作如點(diǎn)擊“提交”但網(wǎng)絡(luò)延遲或應(yīng)用程序處理需要時(shí)間界面不會(huì)立刻更新。如果智能體沒有“等待”的機(jī)制或者等待時(shí)間設(shè)置不當(dāng)它會(huì)在新界面加載完成前就進(jìn)行下一步操作從而導(dǎo)致失敗。它也需要處理彈窗、錯(cuò)誤提示等意外中斷。2.3 環(huán)境與上下文錯(cuò)誤環(huán)境的變化超出了智能體的瞬時(shí)感知范圍。多窗口與焦點(diǎn)管理任務(wù)可能涉及多個(gè)應(yīng)用程序窗口。智能體可能在一個(gè)窗口中完成了部分操作但需要切換到另一個(gè)窗口時(shí)錯(cuò)誤地激活了第三個(gè)無關(guān)窗口或者根本沒有執(zhí)行切換操作。外部依賴變化智能體操作依賴于某個(gè)網(wǎng)站或服務(wù)的特定布局。一旦該網(wǎng)站前端更新UI元素ID或結(jié)構(gòu)發(fā)生變化智能體原有的定位策略立即失效。資源競(jìng)爭(zhēng)與狀態(tài)沖突例如智能體試圖寫入一個(gè)已被其他進(jìn)程鎖定的文件或者嘗試安裝一個(gè)需要管理員權(quán)限但當(dāng)前沒有的軟件。這些失敗模式往往是交織在一起的。一個(gè)感知錯(cuò)誤可能導(dǎo)致規(guī)劃錯(cuò)誤進(jìn)而引發(fā)一連串的執(zhí)行錯(cuò)誤。傳統(tǒng)的、靜態(tài)的智能體在面對(duì)這些失敗時(shí)通常就“卡住”了要么無限循環(huán)要么直接報(bào)錯(cuò)退出等待人工干預(yù)。而“推理時(shí)自我改進(jìn)”的目標(biāo)就是讓智能體自己具備診斷這些失敗并嘗試修復(fù)的能力。3. 實(shí)現(xiàn)推理時(shí)自我改進(jìn)的關(guān)鍵技術(shù)組件讓一個(gè)智能體在運(yùn)行時(shí)自我改進(jìn)聽起來很科幻但其技術(shù)實(shí)現(xiàn)路徑正在變得清晰。它不是一個(gè)單一的技術(shù)而是一個(gè)由多個(gè)組件協(xié)同工作的系統(tǒng)。結(jié)合當(dāng)前開源社區(qū)如與OpenCUA-72B相關(guān)的探索和業(yè)界的前沿實(shí)踐我們可以梳理出以下幾個(gè)核心組件3.1 精細(xì)化的失敗檢測(cè)與歸因模塊這是自我改進(jìn)的起點(diǎn)。智能體必須能明確知道自己“失敗了”并且最好能知道“大概敗在哪兒”。這比聽起來要難因?yàn)楹芏嗍]有明確的錯(cuò)誤信號(hào)?;谀繕?biāo)的檢查最直接的方式。智能體有一個(gè)明確的任務(wù)目標(biāo)例如“記事本中應(yīng)包含‘拿鐵咖啡’的文字”。在關(guān)鍵步驟后它可以主動(dòng)檢查這個(gè)目標(biāo)狀態(tài)是否達(dá)成。如果未達(dá)成則標(biāo)記該步驟可能失敗?;陬A(yù)期與現(xiàn)實(shí)的對(duì)比智能體在執(zhí)行一個(gè)動(dòng)作前會(huì)對(duì)動(dòng)作的結(jié)果有一個(gè)預(yù)期例如“點(diǎn)擊‘搜索’按鈕后應(yīng)出現(xiàn)一個(gè)搜索輸入框”。動(dòng)作執(zhí)行后它通過再次觀察屏幕對(duì)比現(xiàn)實(shí)狀態(tài)與預(yù)期狀態(tài)是否匹配。如果不匹配則說明該動(dòng)作可能未產(chǎn)生預(yù)期效果?;诃h(huán)境反饋的推斷操作系統(tǒng)或應(yīng)用程序有時(shí)會(huì)提供明確的反饋如錯(cuò)誤彈窗、狀態(tài)欄提示音、或控制臺(tái)輸出錯(cuò)誤日志。智能體需要集成對(duì)這些反饋信號(hào)的監(jiān)聽和解析能力。超時(shí)與無進(jìn)展檢測(cè)如果智能體在一段時(shí)間內(nèi)反復(fù)執(zhí)行相似操作而屏幕狀態(tài)沒有發(fā)生任何有意義的變化則可以推斷它可能陷入了死循環(huán)或無效操作這也是一種失敗信號(hào)。歸因則更近一步它需要將失敗信號(hào)與具體的決策環(huán)節(jié)關(guān)聯(lián)起來。是元素定位錯(cuò)了還是動(dòng)作執(zhí)行無效或者是整個(gè)任務(wù)規(guī)劃的前提就不對(duì)這通常需要結(jié)合動(dòng)作歷史、觀察歷史和內(nèi)部決策日志來進(jìn)行分析。3.2 動(dòng)態(tài)提示工程與策略記憶庫這是自我改進(jìn)的核心執(zhí)行機(jī)制。當(dāng)檢測(cè)到失敗并初步歸因后智能體不能簡(jiǎn)單地重試而需要調(diào)整策略。動(dòng)態(tài)提示詞Prompt改寫大型語言模型LLM是許多現(xiàn)代智能體的“大腦”。它的行為很大程度上由我們給的系統(tǒng)提示詞System Prompt和上下文Context決定。在失敗時(shí)智能體可以動(dòng)態(tài)地修改或增補(bǔ)這些提示詞。例如如果是因?yàn)樵囟ㄎ荒:龑?dǎo)致點(diǎn)擊錯(cuò)誤可以在后續(xù)的提示中增加“特別注意目標(biāo)按鈕的文本可能包含‘Search’而不是‘Find’且其顏色是藍(lán)色的?!比绻且?yàn)槿狈Φ却梢栽黾印霸趫?zhí)行任何點(diǎn)擊操作后等待至少2秒直到界面元素穩(wěn)定再觀察?!边@相當(dāng)于讓智能體在運(yùn)行時(shí)給自己“打補(bǔ)丁”注入針對(duì)當(dāng)前失敗場(chǎng)景的特定指引。策略記憶與檢索智能體可以將每次成功和失敗的經(jīng)驗(yàn)以結(jié)構(gòu)化的方式如任務(wù)描述 初始狀態(tài) 采取的動(dòng)作序列 結(jié)果狀態(tài) 成功/失敗原因存儲(chǔ)到一個(gè)記憶庫中。當(dāng)遇到類似的新任務(wù)或相同的失敗信號(hào)時(shí)它可以快速?gòu)倪@個(gè)記憶庫中檢索出歷史上有效的解決方案或需要避開的坑并將其作為上下文信息提供給LLM從而影響本次的決策。這就是“吃一塹長(zhǎng)一智”的數(shù)字化體現(xiàn)。3.3 基于強(qiáng)化學(xué)習(xí)的動(dòng)作策略微調(diào)對(duì)于更底層的、重復(fù)性的操作問題動(dòng)態(tài)提示可能不夠高效。這時(shí)可以引入輕量級(jí)的強(qiáng)化學(xué)習(xí)RL機(jī)制在推理時(shí)對(duì)動(dòng)作策略進(jìn)行在線微調(diào)。狀態(tài)-動(dòng)作價(jià)值函數(shù)在線更新智能體的每個(gè)動(dòng)作如在某個(gè)坐標(biāo)點(diǎn)擊都可以被評(píng)估。如果一系列動(dòng)作后任務(wù)成功了這些動(dòng)作會(huì)獲得正向獎(jiǎng)勵(lì)如果失敗了則獲得負(fù)向獎(jiǎng)勵(lì)。智能體可以在運(yùn)行時(shí)用一個(gè)非常小的、專門負(fù)責(zé)動(dòng)作選擇的模型或價(jià)值函數(shù)來快速更新這些“狀態(tài)-動(dòng)作對(duì)”的價(jià)值估計(jì)。下次再遇到相似界面狀態(tài)時(shí)它會(huì)更傾向于選擇歷史上帶來高價(jià)值的動(dòng)作如更精確的點(diǎn)擊位置而避免低價(jià)值動(dòng)作。探索-利用策略調(diào)整在未知環(huán)境中智能體需要一定的隨機(jī)探索來發(fā)現(xiàn)新解法。但在經(jīng)歷失敗后它可以動(dòng)態(tài)降低探索率更多地利用已知的有效策略或者轉(zhuǎn)向針對(duì)失敗點(diǎn)進(jìn)行有目的的探索例如只在之前點(diǎn)擊失敗的按鈕周圍小范圍嘗試其他坐標(biāo)。3.4 分層級(jí)的反思與重規(guī)劃?rùn)C(jī)制對(duì)于復(fù)雜的、多步驟的任務(wù)失敗可能需要更高層級(jí)的調(diào)整。子目標(biāo)反思與回溯當(dāng)任務(wù)在某個(gè)子目標(biāo)上卡住時(shí)智能體可以反思這個(gè)子目標(biāo)是否必須是否有替代路徑例如任務(wù)要求“從網(wǎng)站A下載報(bào)告然后用郵件發(fā)送”。如果網(wǎng)站A暫時(shí)無法訪問智能體可以反思并決定“子目標(biāo)‘從網(wǎng)站A下載報(bào)告’當(dāng)前不可行啟用備用方案從本地備份文件夾B中尋找最新的報(bào)告文件?!?然后它回溯任務(wù)規(guī)劃替換掉失敗的子目標(biāo)生成一個(gè)新的可行計(jì)劃。工具使用策略調(diào)整智能體可用的操作工具可能不止一套。比如要獲取一個(gè)文本框的內(nèi)容既可以通過模擬鼠標(biāo)選擇后復(fù)制也可以通過讀取應(yīng)用程序的可訪問性接口。如果一種方法持續(xù)失敗智能體可以反思并切換到另一種工具或方法。這些技術(shù)組件并非孤立而是需要被集成在一個(gè)統(tǒng)一的智能體架構(gòu)中。一個(gè)典型的推理時(shí)自我改進(jìn)循環(huán)可能是這樣的執(zhí)行與監(jiān)控智能體按初始計(jì)劃執(zhí)行動(dòng)作同時(shí)運(yùn)行失敗檢測(cè)模塊。失敗識(shí)別檢測(cè)模塊觸發(fā)確認(rèn)當(dāng)前步驟失敗。分析與歸因結(jié)合歷史記錄分析失敗可能的原因如元素X未找到點(diǎn)擊后無響應(yīng)。策略調(diào)整查詢策略記憶庫看是否有類似問題的解決方案。動(dòng)態(tài)修改提示詞加入更精確的元素描述或操作提醒。輕微調(diào)整動(dòng)作策略如點(diǎn)擊坐標(biāo)。重試或重規(guī)劃如果失敗點(diǎn)在當(dāng)前步驟用調(diào)整后的策略重試該步驟。如果失敗點(diǎn)涉及更高層規(guī)劃則啟動(dòng)重規(guī)劃生成新的步驟序列。經(jīng)驗(yàn)固化無論最終成功與否將這次“失敗-分析-調(diào)整”的完整經(jīng)歷存儲(chǔ)到記憶庫中供未來參考。4. 實(shí)戰(zhàn)構(gòu)建一個(gè)簡(jiǎn)單的推理時(shí)自我改進(jìn)智能體原型理論說了這么多我們來動(dòng)手設(shè)計(jì)一個(gè)極簡(jiǎn)化的原型看看核心思想如何落地。假設(shè)我們要構(gòu)建一個(gè)能操作特定Web應(yīng)用的智能體并為其添加基礎(chǔ)的推理時(shí)自我改進(jìn)能力。我們將使用基于LLM的架構(gòu)。4.1 基礎(chǔ)架構(gòu)搭建首先我們需要一個(gè)基礎(chǔ)的工作流觀察Observation使用工具如Selenium、Playwright獲取當(dāng)前網(wǎng)頁的DOM結(jié)構(gòu)或可訪問性樹并將其簡(jiǎn)化為L(zhǎng)LM可理解的文本描述。例如“頁面頂部有一個(gè)導(dǎo)航欄包含‘Home’ ‘Products’ ‘Contact’鏈接。主體部分有一個(gè)標(biāo)題為‘Login’的文本框其下方有一個(gè)‘Submit’按鈕?!彼伎寂c規(guī)劃Think Plan將用戶指令“請(qǐng)登錄系統(tǒng)”和當(dāng)前觀察到的狀態(tài)一起發(fā)送給LLM例如通過API調(diào)用OpenCUA-72B或類似開源模型。LLM的輸出需要被約束為一種特定的結(jié)構(gòu)化格式比如JSON{ thought: 用戶要求登錄。我看到了登錄框和提交按鈕。我需要先在登錄框中輸入用戶名然后可能需要找到密碼框輸入密碼最后點(diǎn)擊提交。, action: { type: click, selector: #username, // 假設(shè)的CSS選擇器 confidence: 0.9 } }執(zhí)行Act智能體解析LLM返回的JSON根據(jù)action字段執(zhí)行相應(yīng)的自動(dòng)化操作如用playwright.locator(#username).click()。循環(huán)執(zhí)行后再次觀察新狀態(tài)重復(fù)步驟1-3直到LLM輸出一個(gè)標(biāo)記任務(wù)完成的特殊動(dòng)作如{action: {type: finish}}。4.2 注入失敗檢測(cè)與改進(jìn)循環(huán)現(xiàn)在我們?cè)诨A(chǔ)循環(huán)中插入自我改進(jìn)的鉤子。第一步增強(qiáng)觀察與狀態(tài)對(duì)比在執(zhí)行動(dòng)作前我們不僅記錄屏幕的“描述”還可以記錄關(guān)鍵元素的“快照”。執(zhí)行動(dòng)作后我們?cè)俅斡^察。# 偽代碼示例 def execute_action_with_self_improvement(agent_state, llm_client): previous_observation agent_state[current_observation] planned_action agent_state[planned_action] # 來自LLM的規(guī)劃 # 執(zhí)行前記錄我們期望的變化基于LLM的‘thought’或簡(jiǎn)單規(guī)則 expected_change fAfter {planned_action}, the element {planned_action[selector]} should be focused/clicked, and maybe a new input field appears. # 執(zhí)行動(dòng)作 actual_success automation_tool.execute(planned_action) # 獲取執(zhí)行后的新觀察 new_observation get_observation() # 簡(jiǎn)單的失敗檢測(cè)邏輯 failure_detected False failure_reason # 檢測(cè)1動(dòng)作本身是否執(zhí)行成功如元素不存在無法點(diǎn)擊 if not actual_success: failure_detected True failure_reason fAction execution failed. Selector {planned_action[selector]} might be invalid or element not interactable. # 檢測(cè)2關(guān)鍵預(yù)期是否達(dá)成這里用簡(jiǎn)單字符串匹配模擬 elif password in expected_change.lower() and password not in new_observation.lower(): failure_detected True failure_reason fExpected a password field to appear after action, but not found in new observation. # 檢測(cè)3狀態(tài)是否長(zhǎng)時(shí)間無變化對(duì)比前后觀察的哈希值 elif compute_similarity(previous_observation, new_observation) 0.95: failure_detected True failure_reason fScreen state did not change significantly after action, might be stuck. if failure_detected: # 進(jìn)入改進(jìn)流程 improved_plan self_improve(agent_state, failure_reason, llm_client) return improved_plan # 返回新的行動(dòng)計(jì)劃外層循環(huán)用這個(gè)重試 else: # 正常更新狀態(tài)繼續(xù)下一步 agent_state[current_observation] new_observation return None # 指示繼續(xù) def self_improve(agent_state, failure_reason, llm_client): # 構(gòu)建改進(jìn)提示詞 improvement_prompt f 你是一個(gè)計(jì)算機(jī)操作智能體。你剛剛嘗試執(zhí)行一個(gè)動(dòng)作但失敗了。 失敗原因{failure_reason} 當(dāng)前屏幕狀態(tài)描述{agent_state[current_observation]} 你的原始任務(wù)目標(biāo)是{agent_state[original_goal]} 你剛剛計(jì)劃執(zhí)行的動(dòng)作是{agent_state[planned_action]} 請(qǐng)分析失敗原因并給出一個(gè)修正后的下一步行動(dòng)計(jì)劃。你的輸出必須是JSON格式 {{ analysis: 簡(jiǎn)短分析為什么失敗以及如何調(diào)整, new_action: {{ type: click|type|..., selector: 新的或修正后的選擇器, value: 如果需要輸入的話, confidence: 0.8 }} }} response llm_client.complete(improvement_prompt) # 解析response中的JSON返回new_action部分 return parse_new_action_from_response(response)第二步維護(hù)一個(gè)簡(jiǎn)易的策略記憶庫我們可以用一個(gè)內(nèi)存中的列表或小數(shù)據(jù)庫來存儲(chǔ)經(jīng)驗(yàn)。experience_db [] def record_experience(goal, initial_state, action, result_state, success, failure_reasonNone): experience { goal: goal, initial_state_hash: hash(initial_state), # 簡(jiǎn)化處理 action: action, result_state_hash: hash(result_state), success: success, reason: failure_reason, timestamp: time.time() } experience_db.append(experience) # 可以設(shè)置一個(gè)大小限制只保留最近N條經(jīng)驗(yàn) def retrieve_similar_experience(current_state, goal): current_hash hash(current_state) for exp in reversed(experience_db): # 從最新開始查 # 簡(jiǎn)單的相似度匹配目標(biāo)相似且初始狀態(tài)相似 if exp[goal] goal and abs(exp[initial_state_hash] - current_hash) SIMILARITY_THRESHOLD: return exp return None在self_improve函數(shù)中可以先查詢記憶庫similar_exp retrieve_similar_experience(current_obs, original_goal)。如果找到并且那次經(jīng)驗(yàn)是成功的可以直接采用當(dāng)時(shí)的action如果是失敗的可以在提示詞中明確加入“歷史上在類似狀態(tài)下嘗試動(dòng)作X導(dǎo)致了失敗原因是Y請(qǐng)避免?!?.3 原型運(yùn)行的注意事項(xiàng)與局限這個(gè)原型非常簡(jiǎn)陋但體現(xiàn)了核心思想。在實(shí)際操作中你會(huì)遇到更多挑戰(zhàn)狀態(tài)表示與相似度計(jì)算用字符串哈?;蚝?jiǎn)單匹配來比較“狀態(tài)”過于粗糙。真實(shí)場(chǎng)景需要更復(fù)雜的表示方法比如提取關(guān)鍵UI元素的特征向量。LLM的穩(wěn)定性要求LLM輸出嚴(yán)格JSON格式并且在改進(jìn)提示下能給出合理分析和新動(dòng)作這對(duì)提示詞設(shè)計(jì)和模型能力都有要求。可能需要多輪調(diào)試和少量示例Few-shot來穩(wěn)定其行為。改進(jìn)循環(huán)的終止條件必須設(shè)置一個(gè)最大重試次數(shù)或時(shí)間限制防止智能體在死循環(huán)中不斷“改進(jìn)”卻無法脫身。性能開銷每次失敗都調(diào)用LLM進(jìn)行分析和重新規(guī)劃會(huì)增加延遲和API成本。需要權(quán)衡改進(jìn)的收益與開銷。盡管有這些局限這個(gè)原型已經(jīng)能夠處理一些簡(jiǎn)單場(chǎng)景了比如第一次點(diǎn)擊#submitBtn失敗因?yàn)閷?shí)際ID是#submit-button失敗檢測(cè)觸發(fā)LLM在改進(jìn)提示下分析屏幕描述可能發(fā)現(xiàn)另一個(gè)高亮度的按鈕描述是“提交”從而輸出一個(gè)新的選擇器.primary-button智能體重試后成功。這個(gè)過程完全發(fā)生在一次任務(wù)執(zhí)行的推理過程中無需重新訓(xùn)練模型。5. 開源生態(tài)與未來展望OpenCUA-72B與超越當(dāng)我們討論“推理時(shí)自我改進(jìn)”這類前沿概念時(shí)開源社區(qū)和大型基礎(chǔ)模型的進(jìn)展是不可忽視的推動(dòng)力。像“OpenCUA-72B”這樣的模型從其命名推測(cè)可能是一個(gè)擁有720億參數(shù)的開源通用智能體模型如果屬實(shí)將為此提供強(qiáng)大的“大腦”基礎(chǔ)。更大的參數(shù)規(guī)模通常意味著更強(qiáng)的上下文理解、任務(wù)規(guī)劃和指令跟隨能力這對(duì)于在運(yùn)行時(shí)進(jìn)行復(fù)雜的失敗分析和策略調(diào)整至關(guān)重要。開源生態(tài)的價(jià)值在于提供了可復(fù)現(xiàn)、可修改、可研究的基線。開發(fā)者可以基于這樣的開源大模型構(gòu)建我們上面討論的改進(jìn)框架而不必從零開始訓(xùn)練一個(gè)昂貴的專用模型。社區(qū)可以共同貢獻(xiàn)各種“失敗-改進(jìn)”的經(jīng)驗(yàn)?zāi)J?、提示詞模板和記憶庫結(jié)構(gòu)加速這類智能體的實(shí)用化進(jìn)程。展望未來我認(rèn)為推理時(shí)自我改進(jìn)技術(shù)會(huì)朝著以下幾個(gè)方向發(fā)展更輕量、更快速的改進(jìn)機(jī)制目前嚴(yán)重依賴LLM進(jìn)行反思延遲高。未來可能會(huì)出現(xiàn)專用的、參數(shù)更小的“反思模型”或“策略校正器”專門負(fù)責(zé)快速診斷和微調(diào)與主規(guī)劃模型協(xié)同工作??缛蝿?wù)、跨應(yīng)用的通用經(jīng)驗(yàn)遷移一個(gè)智能體在操作瀏覽器時(shí)學(xué)會(huì)的“等待頁面加載”策略能否被抽象成通用規(guī)則應(yīng)用于操作桌面軟件如何構(gòu)建一個(gè)通用的“計(jì)算機(jī)操作常識(shí)”記憶庫讓智能體在新應(yīng)用上也能快速上手與模仿學(xué)習(xí)、強(qiáng)化學(xué)習(xí)的深度融合將推理時(shí)的改進(jìn)經(jīng)驗(yàn)以一種安全、高效的方式反哺到智能體底層模型的微調(diào)中實(shí)現(xiàn)從“在線學(xué)習(xí)”到“持續(xù)學(xué)習(xí)”的跨越讓智能體越用越聰明。安全與可控性的挑戰(zhàn)自我改進(jìn)是一把雙刃劍。智能體可能會(huì)“學(xué)習(xí)”到一些意想不到的、甚至有害的規(guī)避策略。如何為它的改進(jìn)過程設(shè)置安全護(hù)欄Safety Guardrails確保其行為始終符合設(shè)計(jì)者的意圖和倫理規(guī)范將是一個(gè)至關(guān)重要的課題。說到底構(gòu)建一個(gè)能從失敗中學(xué)習(xí)的計(jì)算機(jī)使用智能體就像教一個(gè)孩子學(xué)用電腦。你不可能預(yù)先教會(huì)他所有軟件的所有操作。但你可以教會(huì)他一些基本原則看屏幕反饋、嘗試不同的方法、記住什么管用、什么不管用。推理時(shí)自我改進(jìn)就是在給AI智能體注入這種“基本原則”。這條路還很長(zhǎng)但每一次讓智能體自己成功解決一個(gè)之前會(huì)失敗的任務(wù)都讓我們離真正智能、自主的數(shù)字助手更近了一步。在實(shí)際開發(fā)中從小處著手從一個(gè)具體的失敗場(chǎng)景開始構(gòu)建你的改進(jìn)循環(huán)你會(huì)對(duì)這個(gè)問題有更深刻、更實(shí)際的理解。