smolagents 視覺支援更新
Hugging Face 已將視覺支援整合到 smolagents 中,使得 Vision Language Models (VLMs) 能在代理管道中原生使用。此更新使代理能處理視覺資訊,克服了「視覺牆」——在此牆中,關鍵資料(如物體定位、顏色編碼訊息和圖示)在純文字提取過程中會遺失。
原生視覺整合方法
smolagents 提供兩種主要方法將圖像傳遞給代理,具體取決於視覺資料是靜態還是動態。
初始化時的靜態圖像輸入
對於如 Document AI 或分析帶有視覺元素的長 PDF 等使用案例,圖像可以在任務開始時只傳遞一次。這可以通過向 run 方法提供圖像列表來實現:
agent.run("Describe these images:" , images=[image_1, image_2])
這些輸入會被存儲在 TaskStep 的 task_images 屬性中,並與提示一起傳遞給模型。
透過回調的動態圖像輸入
對於視覺狀態會變化的環境(例如網頁瀏覽器),必須動態地將圖像添加到代理的記憶體中。smolagents 透過 MultiStepAgent 類及其 ReAct 框架循環來實現此功能。
在 ReAct 循環的每個步驟結束時,代理會執行 agent.step_callbacks 中定義的所有函數。透過建立自訂回調,開發者可以將新圖像記錄到代理記憶體中 ActionStep 的 observation_images 屬性。這使得模型能在決定下一步之前,看到其先前行動的直接影響。
建立具備視覺功能的網頁瀏覽器代理
Hugging Face 透過使用 helium 庫(建立於 selenium 上)和 CodeAgent 創建一個自主網頁瀏覽器代理來展示這些更新的實用性。
技術實作
要實作具備視覺功能的瀏覽器代理,將使用以下組件:
- 自訂工具: 為自動化庫難以處理的操作建立專用工具,例如用於導航的
go_back()和使用 CSS 選擇器關閉彈出視窗的close_popups()。 - 視覺回調: 已實作一個
save_screenshot回調,以捕捉瀏覽器當前狀態為 PNG,轉換為 PIL 圖像,並在每個步驟結束時將其分配給step_log.observations_images。 - 模型配置: 所有模型均支援圖像。在使用
TransformersModel搭配 VLM 時,必須在初始化期間將flatten_messages_as_text參數設為False,以確保圖像被正確處理。
範例工作流程
在提供的範例中,一個 CodeAgent 被指派找出 GitHub 趨勢最高倉庫的頂級作者的總提交數。該代理結合使用 helium 進行頁面互動、自訂工具進行導航,以及 VLM(例如 Qwen2VL-72B)來視覺解讀頁面佈局並導航至正確的個人資料頁。
模型相容性與效能
視覺支援已整合到 smolagents 模型套件中。視覺相關任務的效果在很大程度上取決於所使用的 VLM 的強度。Hugging Face 指出,像 Qwen2VL-72B 或 GPT-4o 這樣的高容量模型在複雜的視覺導航任務中展現出更高的成功率。