本文档分析 CAMEL 项目中 hybrid_browser_toolkit 的技术实现,覆盖其架构设计、核心功能与通信协议。

CAMEL 通过一种独特的“双重过滤”机制,将结构与视觉相结合,为 AI 重塑了一个更干净、更准确的网页视图。
详细一点说就是:
它不仅仅是读取网页的源代码(结构),还会分析元素在屏幕上的实际布局和大小(视觉)。通过 DOM 层级分析 和 几何位置分析 这两道关卡,它能剔除大量在视觉上被覆盖或在结构上冗余的元素,只留下真正对用户有意义的交互点。
这个“结构 + 视觉”的双重过滤思想,是整个工具包的灵魂,也是它能够让 AI Agent 实现精准网页操作的关键所在。它解决了“代码看起来是一回事,用户看到的是另一回事”这个根本难题。
工具包采用 Python 与 TypeScript (Node.js) 结合的混合架构,旨在解耦上层逻辑与底层浏览器控制,以提升系统的稳定性、隔离性和扩展性。

alt text
HybridBrowserToolkit 实例会启动一个独立的 Node.js 子进程和浏览器实例。这种设计使得不同浏览器会话在操作系统层面完全隔离。单个会话的崩溃不会影响 Python 主进程或其他会话,增强了系统的鲁棒性。click)封装成标准 JSON 命令,通过 WebSocket 发送给 Node.js 端执行。这种清晰的接口边界简化了功能扩展:只需在 TypeScript 端添加新命令的实现,并在两端注册该命令即可,无需改动核心通信逻辑。工具包通过 cdpUrl 参数支持两种浏览器启动模式,提供了灵活性:
cdpUrl 时,工具包调用 Playwright 的 chromium.launch() 启动一个新的 Chromium 浏览器实例。cdpUrl 时,工具包通过 chromium.connectOverCDP() 连接到一个已启动并开启了远程调试端口的浏览器实例,便于高级调试和会话集成。页面快照功能通过一个精密的三步流水线,将一个复杂的网页转换为 AI 易于处理的、简洁的结构化数据。其核心在于一个结合了结构与视觉的双重过滤机制。

page._snapshotForAI()。[ref=N] ID,并以保留层级关系的缩进文本格式输出。snapshot-parser.ts 中的 parseSnapshotHierarchy 函数。Map<string, SnapshotNode> 结构的**层级关系图 (Graph)**。这个图结构是后续所有过滤操作的基础,让程序可以方便地查询任何元素的父、子节点及其属性。这是将网页“去芜存菁”最核心的步骤,它通过两道关卡确保最终快照的精确性。
snapshot-parser.ts 中的 filterClickableByHierarchy。link > img 或 button > generic 等常见嵌套中,保留父元素(link/button),过滤子元素。generic > button 的特殊情况下,反而会过滤父元素 generic,保留子元素 button,以适应某些 UI 框架的设计。generic 元素仅作为单个 button 的包装器,则该 generic 元素自身会被过滤。parent-child-filter.ts 中的 filterParentChildElements。input, select, textarea)。onclick 事件处理器的元素。aria-label 的元素。checkbox, radio)的元素。<a>, <button> 或 role="button" 的 <div>。举个例子: 想象一个按钮,它在代码里是这样写的:
<button> <span>点我</span></button>
在视觉上,<span> 元素(文字)完全在 <button> 元素(按钮背景)的内部。几何位置分析会发现 <span> 的包围盒 100% 被 <button> 的包围盒覆盖了。因此,它会做出判断:用户交互的对象是整个按钮,而不是按钮里的文字。于是,它会保留 <button>,并过滤掉 <span>。
这个机制非常聪明,因为它模拟了人的视觉直觉,解决了大量因 CSS 样式导致的代码结构和视觉呈现不一致的问题,极大地提升了最终快照的信度和效度。
通过这种结构与视觉相结合的双重过滤,最终呈现给 AI 的可交互元素列表被最大程度地简化,同时保证了操作的精确性。

alt text
SoM 功能用于在页面截图中为经过双重过滤后留下的交互元素,标注其对应的 ref ID。这使得多模态 Agent 可以通过“看”截图来定位目标元素,然后使用该元素的 ref ID 发出精确的操作指令(如 click(ref='e42')),从而打通从视觉信息到精确执行的完整链路。
两端之间通过 WebSocket 进行异步通信。Python 端的 ws_wrapper.py 为每个发出的命令分配一个唯一的 id 和一个 asyncio.Future 对象。这种机制确保了在异步环境中,每个响应都能准确无误地匹配到其原始请求。
camel.toolkits.hybrid_browser_toolkit 的核心设计特点包括:
文章来自于“AI贺贺”,作者 “艾贺”。
【开源免费】AutoGPT是一个允许用户创建和运行智能体的(AI Agents)项目。用户创建的智能体能够自动执行各种任务,从而让AI有步骤的去解决实际问题。
项目地址:https://github.com/Significant-Gravitas/AutoGPT
【开源免费】MetaGPT是一个“软件开发公司”的智能体项目,只需要输入一句话的老板需求,MetaGPT即可输出用户故事 / 竞品分析 / 需求 / 数据结构 / APIs / 文件等软件开发的相关内容。MetaGPT内置了各种AI角色,包括产品经理 / 架构师 / 项目经理 / 工程师,MetaGPT提供了一个精心调配的软件公司研发全过程的SOP。
项目地址:https://github.com/geekan/MetaGPT/blob/main/docs/README_CN.md