smolagents 視覺支援更新

Hugging Face 已將視覺支援整合到 smolagents 中,使得 Vision Language Models (VLMs) 能在代理管道中原生使用。此更新使代理能處理視覺資訊,克服了「視覺牆」——在此牆中,關鍵資料(如物體定位、顏色編碼訊息和圖示)在純文字提取過程中會遺失。

原生視覺整合方法

smolagents 提供兩種主要方法將圖像傳遞給代理,具體取決於視覺資料是靜態還是動態。

初始化時的靜態圖像輸入

對於如 Document AI 或分析帶有視覺元素的長 PDF 等使用案例,圖像可以在任務開始時只傳遞一次。這可以通過向 run 方法提供圖像列表來實現:

agent.run("Describe these images:" , images=[image_1, image_2])

這些輸入會被存儲在 TaskSteptask_images 屬性中,並與提示一起傳遞給模型。

透過回調的動態圖像輸入

對於視覺狀態會變化的環境(例如網頁瀏覽器),必須動態地將圖像添加到代理的記憶體中。smolagents 透過 MultiStepAgent 類及其 ReAct 框架循環來實現此功能。

在 ReAct 循環的每個步驟結束時,代理會執行 agent.step_callbacks 中定義的所有函數。透過建立自訂回調,開發者可以將新圖像記錄到代理記憶體中 ActionStepobservation_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-72BGPT-4o 這樣的高容量模型在複雜的視覺導航任務中展現出更高的成功率。

Sources