smolagents 视觉支持更新

Hugging Face 已将视觉支持集成到 smolagents 中,使得 Vision Language Models (VLMs) 能够在 agentic 流水线中原生使用。此更新使代理能够处理视觉信息,克服了“视觉墙”——在仅文本提取过程中,关键数据(如对象定位、颜色编码的消息和图标)会丢失。

原生视觉集成方法

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