让smolagents在无需浏览器堆栈的情况下处理受保护和JS渲染页面
摘要
作者描述了使用如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设置?
相似文章
Show HN:通过逆向工程将Web应用转化为代理工具
一个基于浏览器的代理,能够逆向工程Web应用API,自动生成代理工具,实现无需修改代码的深度集成。
一种简单的代理网络访问模式:搜索、获取、浏览,但将原始页面保留在主上下文之外
本文提出了一种更简洁的 Agent 网页访问模式,通过将功能拆分为三个独立的通道——搜索(search)、抓取(fetch)和浏览器(browser),并借助一个阅读器子代理(reader subagent)避免原始页面进入主上下文,从而显著降低 Token 消耗和上下文污染。
@svpino: 我还没见过在浏览器中运行的智能体不让人觉得是取巧之作。我试过无头浏览器,但无法…
Santiago (@svpino) 讨论了在浏览器中运行AI智能体的挑战,而 @ego_agent 宣布了 'ego lite',一个内核级重建,旨在让AI智能体更快、更可靠。
大多数智能体框架忽略的网页读取原语,以及我为它构建的开源版本
一名开发者构建了一个大多数智能体框架忽略的开源网页读取原语,弥补了智能体工具中缺失的一项能力。
为代理提供每个网站的类型化工具优于通用刮刀——文章
这篇文章介绍了如何为AI代理提供针对每个网站的类型化工具,这些工具通过LLM派生并缓存提取模式,从而超越通用刮刀,使调用更具确定性、成本更低、更可靠,同时通过将数据锚定在源HTML中来防止幻觉。