化實(shí)戰(zhàn))
1. 為什么要做一個(gè)能“看見”屏幕的編碼代理1.1 傳統(tǒng)編碼代理為什么操作不了 GUI做 AI 編碼代理的人不算少但大部分代理都活在終端里你說一句需求它改幾個(gè)文件跑幾條命令再給你貼一段輸出。這套流程在處理“寫代碼、調(diào)接口、查日志”這類任務(wù)時(shí)確實(shí)順手可一旦目標(biāo)換成老舊的 Windows 窗體程序、Electron 應(yīng)用、設(shè)計(jì)軟件、網(wǎng)后臺(tái)系統(tǒng)傳統(tǒng)代理就立刻變成了盲人摸象——因?yàn)樗究床灰娖聊弧N疫@幾周一直在折騰一個(gè)偏向“動(dòng)手”的 AI 編碼代理目標(biāo)很直接讓代理除了會(huì)改代碼還能像人一樣操作圖形界面。最后做出來的東西是一個(gè)免費(fèi)工具單文件就能跑支持調(diào)用鍵盤鼠標(biāo)完成點(diǎn)擊、輸入、拖拽同時(shí)通過 MCP 協(xié)議接入外部工具和業(yè)務(wù)系統(tǒng)。今天這篇就是把整個(gè)項(xiàng)目的設(shè)計(jì)思路、實(shí)現(xiàn)細(xì)節(jié)和踩過的坑一并記錄下來給同樣在搗鼓 AI 自動(dòng)化、被“代碼改得動(dòng)但界面點(diǎn)不動(dòng)”這件事卡住的朋友一些參考。為什么會(huì)存在這個(gè)盲區(qū)因?yàn)閭鹘y(tǒng)的編碼代理依賴的是文件系統(tǒng)和命令行它天然缺少“視覺”和“操作”兩個(gè)通道。我讓代理去改一個(gè)配置文件它能通過讀取和寫入輕松搞定但讓它在登錄界面里找到用戶名輸入框這就完全不是一回事了。沒有截圖能力沒有屏幕坐標(biāo)系沒有鼠標(biāo)鍵盤事件代理連按鈕在哪都不知道。你可以給它配一個(gè) OCR 腳本但那只是孤立的工具和代理的推理過程無法形成閉環(huán)。1.2 給代理裝上“手和眼睛”我想要的不是“能用腳本臨時(shí)湊合”而是一個(gè)真正具備閉環(huán)能力的代理它能截圖、能看到界面元素能規(guī)劃下一步動(dòng)作能真實(shí)地移動(dòng)鼠標(biāo)點(diǎn)擊目標(biāo)然后再截一張圖確認(rèn)操作結(jié)果。整個(gè)過程就像給代理裝上了手和眼睛它不再是只改文件的暗房間工人而是能直接面對(duì)用戶界面的操作員。這件事真正做起來很有意思。很多 GUI 自動(dòng)化工具一直都在比如按鍵精靈那一類但它們是“錄制好的固定腳本”遇到界面變化就傻眼。而把我做的代理接上大模型之后它可以根據(jù)截圖實(shí)時(shí)推理彈窗位置偏移了也能隨機(jī)應(yīng)變。關(guān)鍵點(diǎn)在于模型必須有自己的判斷邏輯而不是機(jī)械執(zhí)行預(yù)錄步驟。這也引出了這個(gè)項(xiàng)目的第二個(gè)關(guān)鍵詞 MCP。GUI 操控負(fù)責(zé)解決“表面操作”MCP 負(fù)責(zé)解決“背后數(shù)據(jù)”。如果我只做 GUI代理最多像個(gè)點(diǎn)鼠標(biāo)的機(jī)器人如果只做 MCP代理又回到了數(shù)據(jù)管道里。兩者結(jié)合起來代理才能做到真正意義上的“眼手腦并用”。2. 技術(shù)選型為什么是 MCP 單文件方案2.1 MCP 不是錦上添花而是標(biāo)準(zhǔn)接口先聊 MCP 協(xié)議??赡苡行┤说谝淮谓佑|這個(gè)概念簡(jiǎn)單說MCP 的全稱是 Model Context Protocol模型上下文協(xié)議它在 AI 代理和外部工具之間定義了一個(gè)統(tǒng)一的信息交換規(guī)范。類比生活場(chǎng)景的話它有點(diǎn)像 USB-C 接口以前你給設(shè)備充電要準(zhǔn)備各種線現(xiàn)在一根線通用MCP 做的事情類似——讓不同的 AI 客戶端、不同的工具服務(wù)端能夠用同一種方式對(duì)話不用為每種工具各寫一套私有接口。我在選型時(shí)本來也考慮過自己定義一套工具調(diào)用的 JSON 協(xié)議后來想想還是放棄了。道理很簡(jiǎn)單生態(tài)。MCP 是社區(qū)在共同推進(jìn)的標(biāo)準(zhǔn)從文件系統(tǒng)、數(shù)據(jù)庫(kù)到瀏覽器操作已經(jīng)有大量現(xiàn)成的服務(wù)器實(shí)現(xiàn)。我自己寫一套協(xié)議等于重新發(fā)明輪子而且要自己維護(hù)文檔、處理兼容性最后用戶還不買賬。使用 MCP代理的行為對(duì)用戶是透明的他們拿已有的工具直接接進(jìn)來就能用學(xué)習(xí)成本低很多。從架構(gòu)角度講MCP 把工具注冊(cè)和調(diào)用過程抽象成了標(biāo)準(zhǔn)信息單元??蛻舳素?fù)責(zé)發(fā)現(xiàn)工具服務(wù)端負(fù)責(zé)執(zhí)行中間用 JSON-RPC 通信。所以我只需要實(shí)現(xiàn)一個(gè)輕量的 MCP 客戶端把工具列表暴露給模型即可后續(xù)每次增加功能都只是添加一個(gè)工具函數(shù)而不是改動(dòng)核心流程。2.2 單文件交付背后的工程取舍標(biāo)題里寫了“單文件運(yùn)行”這也是我花費(fèi)心思最多的部分。做一個(gè)需要安裝幾十個(gè)依賴的項(xiàng)目不難難的是讓別人用一個(gè)文件就能跑起來。我在打包時(shí)用過不少工具最后選擇了把運(yùn)行時(shí)依賴內(nèi)嵌進(jìn)一個(gè)可執(zhí)行文件里支持 Linux、Windows、macOS 三個(gè)平臺(tái)文件體積控制在一個(gè)很小的量級(jí)。對(duì)于有跨平臺(tái)需求的讀者建議用各自平臺(tái)原生支持的打包方式來做比如在 Windows 上使用打包相關(guān)工具鏈在 macOS 上用對(duì)應(yīng)的腳本盡量保證不依賴外部運(yùn)行環(huán)境。單文件交付帶來的好處非常明顯不需要配置 Python 解釋器、不需要安裝 Node 運(yùn)行時(shí)、不需要處理包沖突下載下來 chmod x 就能跑特別適合塞進(jìn) CI 或者拿給同事做演示。但也有代價(jià)最直接的就是軟件體積和啟動(dòng)速度的取舍內(nèi)嵌依賴會(huì)讓二進(jìn)制體積變大。另外單文件在部署時(shí)需要處理臨時(shí)目錄的權(quán)限問題有些系統(tǒng)不允許可執(zhí)行文件在隨機(jī)位置寫配置我通過把配置路徑設(shè)定在用戶目錄下規(guī)避了這個(gè)坑。還有一個(gè)工程細(xì)節(jié)值得展開。所謂“單文件運(yùn)行”不僅是把代碼打包它意味著程序內(nèi)的一切資源都要一體化。我項(xiàng)目里的 GUI 操控模塊、MCP 客戶端模塊、提示詞模板、默認(rèn)配置全部以嵌入方式編譯進(jìn)二進(jìn)制避免運(yùn)行時(shí)還要找外部資源文件。好處是用戶再怎么把文件從根目錄挪到子目錄程序都能正常工作壞處是如果用戶想自定義資源就需要通過外部配置文件覆蓋默認(rèn)值而這個(gè)在 GUI 層面是透明的。3. 核心實(shí)現(xiàn)GUI 操控鏈路是怎么打通的3.1 GUI 操控鏈路截圖、識(shí)別、規(guī)劃、執(zhí)行整個(gè) GUI 操控模塊的核心是一條循環(huán)鏈路可以概括為四步截圖、識(shí)別、規(guī)劃、執(zhí)行。第一步代理調(diào)用底層截圖接口拿到當(dāng)前屏幕畫面第二步視覺識(shí)別模型或本地模板匹配算法從畫面中定位出候選操作區(qū)域第三步大模型根據(jù)用戶指令和識(shí)別結(jié)果規(guī)劃出具體的動(dòng)作序列比如點(diǎn)擊某個(gè)坐標(biāo)、向某個(gè)輸入框發(fā)送文本第四步執(zhí)行器調(diào)用系統(tǒng)輸入接口完成鼠標(biāo)或鍵盤操作。這四步里最容易被低估的是“識(shí)別”環(huán)節(jié)。如果你只用本地模板匹配界面稍有變化就會(huì)失效如果完全依賴視覺大模型做識(shí)別每次執(zhí)行都調(diào)用云端接口延遲和費(fèi)用又不劃算。我目前采用的是一種分層策略先通過本地截圖把圖像壓縮到合理分辨率再借助可選配的視覺描述模型生成版面描述只有在遇到復(fù)雜界面元素時(shí)才會(huì)請(qǐng)求云端大模型細(xì)化分析。這樣既不犧牲識(shí)別能力也能把普通場(chǎng)景的響應(yīng)時(shí)間控制在可接受的范圍內(nèi)。規(guī)劃環(huán)節(jié)同樣需要仔細(xì)設(shè)計(jì)。模型輸出動(dòng)作不能只給一句“點(diǎn)擊登錄按鈕”這種描述必須輸出結(jié)構(gòu)化的動(dòng)作指令。我給模型設(shè)計(jì)了統(tǒng)一的動(dòng)作格式里面包含動(dòng)作類型、目標(biāo)元素的描述、必要時(shí)附帶優(yōu)先級(jí)和等待條件。模型執(zhí)行完動(dòng)作后系統(tǒng)還會(huì)主動(dòng)觸發(fā)一次驗(yàn)證也就是重新截圖由模型判斷是否達(dá)到了預(yù)期狀態(tài)這一點(diǎn)對(duì)防止“盲點(diǎn)”至關(guān)重要。3.2 輸入模擬與坐標(biāo)映射執(zhí)行環(huán)節(jié)涉及的操作系統(tǒng)接口比較敏感。Windows 上我使用的是系統(tǒng)提供的輸入事件發(fā)送接口macOS 上使用的是對(duì)應(yīng)的輔助功能接口Linux 下則通過擴(kuò)展輸入設(shè)備接口實(shí)現(xiàn)。這些接口本身不難難的是坐標(biāo)映射。我試過縮放比例不同的屏幕遇到最多的問題就是坐標(biāo)錯(cuò)位。比如圖像識(shí)別得到目標(biāo)在截圖中位于 1000x600 的位置但實(shí)際屏幕是 1920x1080截圖被壓縮過那就必須在執(zhí)行時(shí)把截圖坐標(biāo)轉(zhuǎn)換回真實(shí)屏幕坐標(biāo)。這個(gè)轉(zhuǎn)換公式其實(shí)不復(fù)雜就是等比縮放關(guān)鍵是必須在截圖時(shí)記錄當(dāng)時(shí)的屏幕尺寸和縮放比例而不是事后猜。還有一個(gè)隱蔽問題一條軸上可能接了兩個(gè)不同縮放比例的顯示器鼠標(biāo)跨越屏幕時(shí)坐標(biāo)會(huì)跳變。我目前的處理方式是暫時(shí)只操作主屏幕多屏幕的支持還在后續(xù)計(jì)劃里。文本輸入也是很容易翻車的地方。很多程序的輸入框看起來普通但對(duì)字符編碼的要求很嚴(yán)格直接通過鍵盤事件逐字符發(fā)送遇到中文輸入法就經(jīng)常出差錯(cuò)。我后來改用剪貼板中轉(zhuǎn)的方式先把要輸入的文本寫入剪貼板再模擬 CtrlV 粘貼。這樣效率高也規(guī)避了輸入法狀態(tài)干擾。代價(jià)是剪貼板內(nèi)容會(huì)被覆蓋所以執(zhí)行前我會(huì)先備份原剪貼板內(nèi)容操作完再恢復(fù)。3.3 MCP 工具注冊(cè)的極簡(jiǎn)實(shí)現(xiàn)MCP 這一塊我理解的實(shí)現(xiàn)核心就是“注冊(cè) 路由”。我給代理內(nèi)置了一個(gè)工具注冊(cè)表每個(gè)工具包含名字、描述、參數(shù)結(jié)構(gòu)、實(shí)際函數(shù)地址。模型通過名字調(diào)用工具路由層校驗(yàn)參數(shù)后調(diào)用對(duì)應(yīng)函數(shù)結(jié)果返回給模型。這樣設(shè)計(jì)的好處是新增工具只需寫一個(gè)符合規(guī)范的函數(shù)注冊(cè)進(jìn)表里完全不需要改大模型側(cè)的代碼。我寫過一個(gè)最簡(jiǎn)示例來驗(yàn)證 MCP 工作流程大概長(zhǎng)這樣# 偽代碼展示 MCP 工具注冊(cè)的基本結(jié)構(gòu) TOOL_REGISTRY {} def register_tool(name, description, params_schema): def decorator(func): TOOL_REGISTRY[name] { description: description, params_schema: params_schema, handler: func } return func return decorator register_tool( nameclick_element, description在屏幕上點(diǎn)擊指定名稱的界面元素, params_schema{element_name: {type: string}} ) def click_element(element_name: str): # 調(diào)用 GUI 執(zhí)行器 coord find_element_on_screen(element_name) return {x: coord.x, y: coord.y}這只是演示用的骨架代碼但核心邏輯已經(jīng)完整了。實(shí)際項(xiàng)目中這個(gè)注冊(cè)表會(huì)跨越多個(gè)模塊有操作文件的工具、有執(zhí)行命令的工具、有讀取數(shù)據(jù)庫(kù)的工具還有上面截圖里看到的 GUI 操控工具。所有工具統(tǒng)一走 MCP 協(xié)議暴露給模型外部客戶端不管是用什么語言寫的只要能傳遞 JSON-RPC 請(qǐng)求就能復(fù)用同一套工具。4. 實(shí)操下載、啟動(dòng)和第一次跑通4.1 環(huán)境要求與最小配置雖然目標(biāo)是不依賴一堆環(huán)境但 GUI 操控本身仍然需要系統(tǒng)層面的支持。在 macOS 上需要給終端授予輔助功能權(quán)限在 Windows 上某些受保護(hù)窗口需要以管理員權(quán)限運(yùn)行Linux 上則要給進(jìn)程 DISPLAY 或 Wayland 相關(guān)的環(huán)境變量。這幾個(gè)前置條件我在項(xiàng)目文檔里標(biāo)得很清楚避免用戶啟動(dòng)以后發(fā)現(xiàn)點(diǎn)不了、截不了圖再回頭排查。啟動(dòng)方式非常簡(jiǎn)單。下載對(duì)應(yīng)平臺(tái)的文件后直接運(yùn)行chmod x ai-agent ./ai-agent第一次啟動(dòng)它會(huì)創(chuàng)建一個(gè)配置文件默認(rèn)使用本地模型還是云端模型取決于你選擇哪種接入方式。如果你有大模型的 API 密鑰填寫到配置項(xiàng)里即可如果你什么都不配置它也能啟動(dòng)但只能執(zhí)行那些不依賴大模型推理的簡(jiǎn)單命令比如截圖保存。這里我給的建議是先跑通最簡(jiǎn)單的截圖功能再逐步加入模型推理和動(dòng)作執(zhí)行一次引入一個(gè)變量出了問題才好定位。4.2 實(shí)操驅(qū)動(dòng)一個(gè)桌面程序完成數(shù)據(jù)錄入我隨手搭一個(gè)場(chǎng)景展示這套工具在真實(shí)環(huán)境里是怎么工作的。假設(shè)我需要讓代理打開 Windows 自帶的計(jì)算器執(zhí)行幾個(gè)數(shù)值相加再把結(jié)果界面截圖保存下來。用戶只需要輸入一行自然語言代理會(huì)自動(dòng)完成后續(xù)解析和動(dòng)作編排。正常情況下代理會(huì)按下面的邏輯拆解任務(wù)調(diào)用啟動(dòng)相關(guān)工具打開計(jì)算器應(yīng)用等待窗口出現(xiàn)截圖確認(rèn)界面狀態(tài)識(shí)別數(shù)字按鈕在屏幕上的位置逐個(gè)點(diǎn)擊數(shù)字再點(diǎn)擊加號(hào)點(diǎn)擊等號(hào)后截圖識(shí)別結(jié)果是否出現(xiàn)保存最終截圖到指定路徑我這里截取一段動(dòng)作解析器實(shí)際輸出供參考{ actions: [ {type: open_app, app: calculator}, {type: wait, condition: window_visible, timeout: 5}, {type: click_text, text: 5}, {type: click_text, text: }, {type: click_text, text: 3}, {type: click_text, text: }, {type: screenshot, save_to: result.png} ] }這段 JSON 是模型規(guī)劃完之后的最終輸出實(shí)際效果中它能夠穩(wěn)定地完成操作因?yàn)槊恳徊街g都有等待條件不會(huì)出現(xiàn)按鈕還沒渲染出來就點(diǎn)上去的情況。這套“動(dòng)作序列 條件等待”的設(shè)計(jì)是很多 GUI 自動(dòng)化工具容易忽視的地方。固定延遲的方案雖然實(shí)現(xiàn)簡(jiǎn)單但遇到性能波動(dòng)就亂了等待條件能讓執(zhí)行過程具備自適應(yīng)能力。4.3 連接你自己的 MCP 工具以數(shù)據(jù)庫(kù)為例GUI 是代理的“手”數(shù)據(jù)是代理的“腦”兩者都需要。項(xiàng)目支持用戶按 MCP 標(biāo)準(zhǔn)添加自己的工具比如連接一個(gè)數(shù)據(jù)庫(kù)讓代理能夠查詢、更新數(shù)據(jù)。配置方式也很簡(jiǎn)單在配置里聲明一個(gè) MCP 服務(wù)器地址和工具前綴代理啟動(dòng)時(shí)會(huì)自動(dòng)拉取工具列表。以 MySQL 或 Oracle 這類數(shù)據(jù)庫(kù)為例我可以把數(shù)據(jù)庫(kù)操作封裝成兩個(gè)工具query 和 execute。注冊(cè)結(jié)構(gòu)大致如下{ mcp_servers: [ { name: database, url: http://127.0.0.1:8080/mcp, auth_type: token, tools: [query, execute] } ] }連接成功后模型的每次數(shù)據(jù)庫(kù)操作都會(huì)不再依賴硬編碼 SQL而是直接通過查詢工具獲取表結(jié)構(gòu)、分析數(shù)據(jù)、再生成更新語句。很多人在配置 MCP 時(shí)容易忽視鑒權(quán)比如直接把 token 寫到配置文件里我強(qiáng)烈不建議這么做特別是代理文件單文件運(yùn)行后可能被拷貝到多處環(huán)境應(yīng)該通過環(huán)境變量或密鑰管理服務(wù)動(dòng)態(tài)注入。5. 踩坑實(shí)錄與排查速查表5.1 最常翻車的 5 個(gè)節(jié)點(diǎn)第一坑是系統(tǒng)級(jí)權(quán)限。macOS 上經(jīng)常出現(xiàn)“能截圖但無法執(zhí)行點(diǎn)擊操作”原因是輔助功能權(quán)限沒有授給啟動(dòng)代理的那個(gè)終端程序。這個(gè)問題藏得很深截圖權(quán)限和輔助功能權(quán)限是分開管理的必須到系統(tǒng)設(shè)置里分別授予。第二坑是高分辨率屏幕的坐標(biāo)偏移。如果你用的顯示器是 2K 或 4K 級(jí)別并且開啟了系統(tǒng)縮放那識(shí)別出來的坐標(biāo)如果直接使用大概率點(diǎn)偏。必須通過縮放因子換算。換算公式非常簡(jiǎn)單但如果你截圖時(shí)用的分辨率和畫面實(shí)際輸出分辨率不一致就會(huì)出問題。我后來統(tǒng)一采用“截圖分辨率 物理屏幕分辨率”的策略從源頭避免差異。第三坑是窗口層級(jí)遮擋。有時(shí)候目標(biāo)窗口不是最前面那個(gè)或者有彈窗蓋住了按鈕截圖里能看到按鈕位置但實(shí)際點(diǎn)擊卻被擋住了。解決辦法是執(zhí)行點(diǎn)擊前先調(diào)用一次窗口置前操作把目標(biāo)窗口帶到最上層。第四坑是輸入法干擾。前面已經(jīng)提到的剪貼板方案能解決絕大多數(shù)文本輸入問題但還是有特例。一些金融類的安全輸入控件會(huì)禁止模擬粘貼這時(shí)候只能走逐鍵輸入而逐鍵輸入又會(huì)被輸入法攔截。我的處理辦法是強(qiáng)制在操作前切換到英文輸入狀態(tài)雖然不強(qiáng)求但能在多數(shù)場(chǎng)景下正常工作。第五坑是 MCP 工具超時(shí)。模型調(diào)用數(shù)據(jù)庫(kù)工具時(shí)如果查詢時(shí)間超過預(yù)設(shè)的超時(shí)閾值整個(gè)動(dòng)作鏈都會(huì)被中斷。這個(gè)坑排查起來很隱蔽表面看起來像是模型變笨了實(shí)際上是下游工具超時(shí)導(dǎo)致的上下文缺失。我建議把工具超時(shí)設(shè)置得足夠?qū)捤刹⑶覍?duì)可能長(zhǎng)時(shí)間運(yùn)行的查詢?cè)O(shè)置獨(dú)立超時(shí)。5.2 問題排查速查表下面這張表是我自己排查問題時(shí)最常用的對(duì)照依據(jù)現(xiàn)象可能原因快速驗(yàn)證/解決方法截圖黑屏或空白屏幕錄制權(quán)限未授予到系統(tǒng)設(shè)置授予權(quán)限重啟終端能截圖但點(diǎn)擊無效輔助功能權(quán)限未授予在權(quán)限設(shè)置中勾選對(duì)應(yīng)終端或進(jìn)程點(diǎn)擊位置偏右/偏上屏幕縮放比例未正確計(jì)算確認(rèn)截圖分辨率與物理分辨率一致窗口彈窗蓋住目標(biāo)窗口層級(jí)問題點(diǎn)擊前執(zhí)行窗口置前操作輸入中文亂碼輸入法狀態(tài)干擾使用剪貼板粘貼或臨時(shí)切換英文輸入法MCP 工具調(diào)用超時(shí)服務(wù)端處理慢或地址不通檢查服務(wù)地址、防火墻、超時(shí)閾值代理無法識(shí)別按鈕界面元素對(duì)比度過低提高截圖清晰度使用增強(qiáng)對(duì)比度預(yù)處理單文件在 Linux 啟動(dòng)失敗缺少執(zhí)行權(quán)限或動(dòng)態(tài)庫(kù)chmod x 檢查優(yōu)先選靜態(tài)編譯版本這張表覆蓋了我遇到的大部分問題。如果你的使用場(chǎng)景與我的環(huán)境不同建議在排查時(shí)先記錄一下問題發(fā)生的上下文尤其是截圖和模型輸出很多時(shí)候問題根源在上下文信息不足而不是工具本身出錯(cuò)。6. 局限與后續(xù)可擴(kuò)展的方向6.1 現(xiàn)在還不能做到的事情必須坦誠(chéng)地說這個(gè)項(xiàng)目目前還不夠完美。第一對(duì)復(fù)雜界面的識(shí)別準(zhǔn)確度仍然有限。比如一個(gè)表格里有多行按鈕模型可能會(huì)點(diǎn)錯(cuò)行。我目前的辦法是在提示詞里補(bǔ)充更多的上下文約束但這屬于軟性優(yōu)化硬性問題還是要靠更好的視覺模型去解決。第二多屏幕支持還很初級(jí)副屏上的窗口操作經(jīng)常出現(xiàn)坐標(biāo)錯(cuò)位我強(qiáng)烈建議當(dāng)前版本先只在單屏幕上使用。第三安全機(jī)制還有提升空間。代理一旦擁有操控 GUI 的權(quán)限就意味著它能夠點(diǎn)擊任何按鈕這在不加約束的情況下是有風(fēng)險(xiǎn)的操作所以我在設(shè)計(jì)時(shí)加入了操作確認(rèn)模式讓用戶在執(zhí)行高風(fēng)險(xiǎn)動(dòng)作前看到動(dòng)作序列。這些局限性不影響它作為一個(gè)實(shí)驗(yàn)工具的日常使用但離“全職幫你操作電腦”還有距離。我在項(xiàng)目規(guī)劃里給它設(shè)定的定位是“一個(gè)可信賴的助手而不是可以扔出去不管的替身”。安全問題不能偷懶尤其是模型偶爾會(huì)規(guī)劃出一些預(yù)料之外的動(dòng)作時(shí)手動(dòng)確認(rèn)是最后一道防護(hù)。6.2 我會(huì)繼續(xù)怎么改后續(xù)的優(yōu)化方向上我給自己列了一個(gè)不錯(cuò)的清單。首先是視覺識(shí)別能力升級(jí)計(jì)劃接入更細(xì)粒度的小尺寸視覺模型讓它能夠直接輸出按鈕和輸入框的邊界框減少對(duì)云端模型的依賴。其次是動(dòng)作鏈的持久化與回放把一次成功的操作記錄保存下來遇到相同場(chǎng)景時(shí)可以直接復(fù)用省去重復(fù)的模型推理。最后是 MCP 工具生態(tài)的擴(kuò)展后續(xù)打算把更多常用工具封裝成 MCP 服務(wù)至少是瀏覽器控制、郵件處理和文件轉(zhuǎn)換這三類高頻需求。單文件運(yùn)行這個(gè)特性我還會(huì)繼續(xù)保留因?yàn)樗墙档陀脩羯鲜珠T檻最好的方式。我會(huì)在打包流程中進(jìn)一步優(yōu)化體積和啟動(dòng)速度讓下載體驗(yàn)更像一個(gè)原生應(yīng)用而不是一個(gè)需要逐步手工安裝配置的復(fù)雜工具鏈。最后分享一個(gè)小習(xí)慣無論任務(wù)看起來有多簡(jiǎn)單我每次都會(huì)保證在執(zhí)行完操作后截一張圖回傳模型做確認(rèn)這個(gè)反饋閉環(huán)表面上會(huì)多花一點(diǎn)時(shí)間但它實(shí)際上救了我很多次。每次自以為點(diǎn)擊已經(jīng)成功了截圖出來才發(fā)現(xiàn)彈窗還在那里。自動(dòng)化的世界里守住每一個(gè)驗(yàn)證節(jié)點(diǎn)比追求速度重要得多。這也是這個(gè)項(xiàng)目做下來最值得記住的一條經(jīng)驗(yàn)。