让smolagents在无需浏览器堆栈的情况下处理受保护和JS渲染页面

Reddit r/ArtificialInteligence 工具

摘要

作者描述了使用如ZenRows等服务的自定义抓取工具替换smolagents内置的VisitWebpageTool,以处理受保护和JS渲染的网页,从而在无需浏览器堆栈的情况下改善AI代理的网络数据访问。

我一直在使用Hugging Face smolagents构建小型研究代理,内置的VisitWebpageTool在静态HTML页面上运行良好,但在受保护或JavaScript密集的页面上会失效。在一个Walmart产品页面上,它返回了机器人检查文本("Robot or human?")而不是产品数据,而代理仍然像处理真实内容一样对其进行推理。当整个工作流程依赖于实时网络数据时,这就成了一个问题。我实施的修复方案是用一个可以处理反机器人措施和JS渲染的自定义抓取工具替换VisitWebpageTool,然后直接将其插入CodeAgent。在我的情况下,我使用ZenRows作为抓取层,但这种模式可以与任何可信的检索后端一起工作。以下是我的想法:定义一个带有工具装饰器的fetch_page(url: str) -> str函数。在文档字符串中描述该工具的功能和使用时机,因为smolagents在运行时从函数签名和文档字符串构建模型看到的工具描述。将此工具注册到CodeAgent的工具列表中,与模型和其他所需工具一起。在代理提示中,要求其使用fetch_page进行任何URL检索,而不是依赖内置的浏览功能。这使代理能够从动态和受保护的页面获得完整的Markdown支持,无需维护自己的浏览器或代理堆栈,也无需更改整体的CodeAgent工作流程。你们如何在smolagents或类似框架中处理网络访问:自定义抓取工具、MCP服务器还是自己的Playwright设置?
查看原文

相似文章