smolagents 视觉支持更新
Hugging Face 已将视觉支持集成到 smolagents 中,使得 Vision Language Models (VLMs) 能够在 agentic 流水线中原生使用。此更新使代理能够处理视觉信息,克服了“视觉墙”——在仅文本提取过程中,关键数据(如对象定位、颜色编码的消息和图标)会丢失。
原生视觉集成方法
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 这样的高容量模型在复杂的视觉导航任务中表现出更高的成功率。