1. 项目概述:为AI Agent打造的无头浏览器工作站
如果你正在为你的AI Agent寻找一个高效、稳定且零成本的“眼睛”和“手”,来浏览和操作网页,那么Gbrow绝对值得你花时间深入了解。这不仅仅是一个基于Playwright的浏览器自动化工具,它更像是一个专为AI Agent设计的、开箱即用的工作站。它的核心创新在于,彻底摒弃了目前主流的、依赖昂贵视觉大模型(如GPT-4V、Claude 3 Vision)来“看懂”网页截图的方法,转而利用浏览器内置的无障碍访问树来“阅读”页面。这个思路的转变,带来了速度、成本和可靠性三个维度的巨大提升。
简单来说,Gbrow让你的Agent不再需要为每一次页面解析支付API费用,也不再需要忍受数秒的等待延迟。它通过一个轻量的HTTP服务器,为Agent提供了一套完整的浏览器操作指令集,从导航、读取到点击、填表,一应俱全。无论是构建一个自主完成复杂多步任务的Web Agent,还是开发一个需要实时监控网页信息变化的自动化工具,Gbrow都能提供一个坚实、优雅的基础设施。
2. 核心设计思路:为什么是无障碍树?
在深入代码和命令之前,我们必须先理解Gbrow最根本的设计哲学:用结构化数据替代像素图像。这是它区别于其他所有“AI浏览器”工具的核心。
2.1 传统视觉方案的瓶颈
当前,让AI理解网页的主流做法是“截图+视觉大模型”。流程通常是:用无头浏览器(如Playwright)打开页面,截取一张PNG或JPEG图片,将这张图片发送给GPT-4o或Claude 3等具备视觉能力的模型,然后等待模型返回对页面元素的描述,如“左上角有一个搜索框”、“中间有一个登录按钮”。
这个方法存在几个无法忽视的痛点:
- 成本高昂:每次调用视觉API都需要付费,即使是简单的页面,单次成本也在0.01美元左右。对于需要高频、持续交互的Agent来说,这笔开销会迅速累积。
- 速度缓慢:截图、上传图片、模型推理、返回结果,整个链条下来通常需要3到10秒。这在需要快速响应的交互场景中是难以接受的延迟。
- 可靠性存疑:视觉模型的输出存在不确定性,可能误解元素类型(把链接误认为按钮),或者无法准确定位动态加载的内容。此外,API服务的稳定性、密钥过期等问题也会导致整个流程中断。
- 信息缺失:截图丢失了页面的所有结构化信息。模型无法直接知道一个输入框的
name属性是什么,一个链接的精确href目标是什么,一个下拉框有哪些可选值。这些信息对于精准操作至关重要。
2.2 无障碍访问树:被忽视的宝藏
浏览器为了辅助残障人士(如使用屏幕阅读器的视障用户),早已构建了一套完整的页面语义化描述体系,即无障碍访问树。这棵树不是给“看”的,而是给“读”和“理解”的。
这棵树包含了页面上每个交互元素的角色(role,如button、link、textbox)、名称(name)、状态(state,如disabled、checked)以及层级关系。屏幕阅读器正是依靠这棵树来告诉用户:“这是一个提交按钮”、“这是一个要求输入用户名的文本输入框”。
Gbrow的聪明之处在于,它通过Playwright的page.accessibility.snapshot()方法,直接获取这棵结构化的树。对于AI Agent来说,这相当于获得了一份现成的、机器可读的页面“说明书”,而不是一张需要费力解读的“照片”。
2.3 Gbrow的解决方案架构
Gbrow的架构非常清晰,它扮演了一个“翻译官”和“执行者”的角色:
- 持久化服务器:启动一个长期运行的HTTP服务器(基于Bun),并保持一个Chromium浏览器实例在后台运行。这避免了为每个命令都重新启动浏览器的巨大开销。
- 命令翻译层:Agent通过发送简单的HTTP POST请求(如
{"command": "goto", "args": ["https://example.com"]})来下达指令。Gbrow服务器接收后,将其翻译成对应的Playwright API调用。 - 基于引用的交互:当Agent请求页面快照(
snapshot命令)时,服务器返回的不是图片,而是基于无障碍树生成的文本化树状结构,其中每个可交互元素都被赋予一个唯一的引用ID,如@e1、@e2。后续的点击(click @e1)、填表(fill @e2 “hello”)等操作,都直接使用这个引用,无需关心复杂的CSS选择器。 - 资源与生命周期管理:内置了标签页管理、自动超时关闭(默认30分钟无活动后关闭)和简单的令牌认证,使其更适合在生产环境中作为后台服务运行。
这个设计使得Agent与浏览器的交互变得极其高效和稳定。一次页面“阅读”通常在100毫秒内完成,成本为零,并且获取的信息是精确、结构化的。
3. 环境部署与核心配置详解
理解了“为什么”之后,我们来看“怎么做”。Gbrow的部署非常灵活,你可以通过ClawHub一键安装,也可以手动克隆部署。
3.1 两种部署方式对比与实操
方式一:通过ClawHub安装(推荐用于OpenClaw生态)这是最快捷的方式,尤其如果你已经在使用OpenClaw框架。
clawhub install gbrow执行这条命令后,ClawHub工具会自动完成以下工作:
- 定位你的OpenClaw工作空间目录(通常是
~/.openclaw/workspace/skills)。 - 将Gbrow的Git仓库克隆到该目录下。
- 自动执行项目内的
setup.sh脚本。
注意:使用ClawHub的前提是你已经安装并配置好了OpenClaw环境。如果你只是单独想使用Gbrow的HTTP服务器功能,而不依赖OpenClaw的Agent调度,那么手动安装是更清晰的选择。
方式二:手动Git克隆部署(通用性强)这种方式让你对整个部署过程有完全的控制权,也便于后续的代码审查和自定义修改。
# 1. 进入你希望安装的目录,例如创建一个专门的tools目录 mkdir -p ~/ai-tools && cd ~/ai-tools # 2. 克隆Gbrow仓库 git clone https://github.com/ashish797/Gbrow.git cd Gbrow # 3. 运行安装脚本 bash setup.sh让我们深入看看setup.sh脚本做了什么,这对排查潜在问题很有帮助:
- 检查并安装Bun:Gbrow使用Bun作为JavaScript运行时,因为它启动更快、集成度更高。脚本会检查Bun是否已安装,如果没有,它会尝试通过官方脚本安装。有时网络原因可能导致安装失败,此时你需要手动安装Bun(
curl -fsSL https://bun.sh/install | bash)。 - 安装Node.js依赖:通过
bun install安装playwright等必要的npm包。 - 安装浏览器:通过
bunx playwright install chromium安装Playwright所需的Chromium浏览器。这一步可能会耗时较长,并且对网络环境比较敏感。如果失败,可以尝试设置国内镜像源,或者手动下载Chromium。 - 处理Docker化问题:脚本内包含了对
chromiumSandbox: false的配置处理,这是为了在Docker或某些Linux安全配置下能正常运行无头Chrome。
3.2 首次运行与验证
安装完成后,启动服务器:
bun run src/server.ts如果一切顺利,你会在终端看到类似以下的输出,表明服务器已在特定端口(通常是35983)启动,并生成了认证令牌:
Gbrow server starting... Server running on http://127.0.0.1:35983 Token saved to .gstack/browse.json这个.gstack/browse.json文件是关键,它存储了连接服务器所需的端口号和令牌(Token)。Gbrow使用简单的Bearer Token进行认证,防止未经授权的访问。
你可以立即用一个快速的cURL命令来验证服务器是否工作:
# 读取连接配置 PORT=$(python3 -c “import json; print(json.load(open(‘.gstack/browse.json’))[‘port’])”) TOKEN=$(python3 -c “import json; print(json.load(open(‘.gstack/browse.json’))[‘token’])”) # 测试获取当前URL(初始应为 about:blank) curl -s -X POST “http://127.0.0.1:${PORT}/command” \ -H “Authorization: Bearer ${TOKEN}” \ -H “Content-Type: application/json” \ -d ‘{“command”:”url”}’如果返回{“result”:”about:blank”},恭喜你,Gbrow服务器已经成功运行!
实操心得:在服务器启动后,我建议立即执行一次
goto命令访问一个简单页面(如https://example.com),然后再执行snapshot命令。这能一次性验证导航和页面读取两个核心功能是否正常。有时浏览器实例初始化后首次加载可能会稍慢,第一次测试失败可以重试一次。
4. 核心命令全解与实战应用
Gbrow的强大,体现在它那一套精心设计的命令集上。这些命令覆盖了Web自动化的绝大多数场景。下面我们分类详解,并配上实战用例。
4.1 导航与页面管理
导航是浏览器操作的基础。Gbrow的导航命令直观且稳定。
goto <url>:核心导航命令。它会阻塞直到页面加载完成(触发load事件)。对于大量依赖JavaScript渲染的现代单页应用(SPA),仅load事件可能不够。虽然Gbrow本身未直接暴露等待网络空闲或特定元素出现的参数,但你可以通过组合命令来实现。实战技巧:在goto一个SPA页面后,紧接着执行一个js命令,注入一段等待特定选择器出现的脚本,可以更可靠地确认页面已就绪。例如:# 先导航 curl ... -d ‘{“command”:”goto”,”args”:[“https://app.example.com/dashboard”]}’ # 等待某个代表加载完成的元素出现 curl ... -d ‘{“command”:”js”, “args”:[“(async () => { await page.waitForSelector(‘.data-loaded’); return ‘ready’; })()”]}’back/forward/reload:历史记录操作和刷新。在需要模拟用户回退或重试的场景下非常有用。url:获取当前页面的URL。常用于在一系列操作后确认是否到达了预期页面,或者用于记录日志。
标签页管理是Gbrow相较于直接使用Playwright的一个显著优势,它让多任务处理变得简单。
tabs:列出所有打开的标签页,返回索引和URL。这对于管理多个并行任务至关重要。tab N:切换到第N个标签页(索引从0开始)。所有后续命令将在该标签页的上下文中执行。newtab:打开一个新标签页并导航到about:blank,同时自动切换到新标签页。closetab:关闭当前标签页。如果关闭后还有其他标签页,会自动切换到剩余的第一个标签页。
注意事项:标签页的索引在关闭后可能会发生变化。例如,你有标签页0,1,2,关闭了标签页1,那么原来的标签页2会变成新的标签页1。在执行
closetab后,如果逻辑依赖于固定的标签页索引,最好重新调用一次tabs命令来获取最新的状态。
4.2 页面内容读取:无障碍树快照的艺术
snapshot是Gbrow的灵魂命令。它有几个关键的标志(flag)来定制输出,适应不同场景。
snapshot(无参数):返回完整的无障碍树。信息最全,但可能包含大量用于布局的generic容器节点,对于Agent来说可能过于冗长。snapshot -i:最常用。只返回可交互元素(Interactive elements),如按钮(button)、链接(link)、输入框(textbox)、复选框(checkbox)等。这极大地简化了Agent的决策空间,让它专注于“可以操作什么”。# 假设访问 https://github.com/login 后执行 snapshot -i 可能返回: @e1 [textbox] “Username or email address” [required=true] @e2 [textbox] “Password” [required=true] [password=true] @e3 [button] “Sign in” @e4 [link] “Forgot password?” @e5 [link] “Create an account”snapshot -c:紧凑模式。移除那些没有语义信息的空generic节点,让树的结构更清晰。snapshot -d N:限制树的深度为N层。对于非常复杂的页面,可以避免获取过于庞大的数据。snapshot -s <CSS选择器>:只获取匹配特定CSS选择器的元素及其子元素的无障碍树。这在处理页面中某个特定部件(如一个评论框、一个表单)时极其有用。snapshot -D:与上一次快照进行差异对比。返回发生变化的部分。这对于监控页面内容更新(如价格变动、新消息提示)是一个高效的功能,Agent无需每次都解析整个页面。snapshot -a:生成带注解的截图。在截图图片上,为每个元素叠加其引用ID(如@e1)。这是一个强大的调试和验证工具,可以直观地看到快照中的引用对应到页面的哪个具体位置。
其他读取命令:
text:返回清理后的页面纯文本。这对于只需要内容摘要而不需要交互的场景(如新闻抓取)很合适,但它丢失了所有的结构化和可操作信息。links:以文本 -> href的格式列出页面上所有超链接。快速获取所有导航选项。forms:以JSON格式列出页面上所有表单及其字段(名称、类型、值等)。对于需要批量处理表单数据的Agent,这个命令提供了直接的结构化数据。html [selector]:获取原始HTML。当无障碍树无法提供足够的信息(例如需要获取某个元素的特定># 1. 前往GitHub command: goto, args: [“https://github.com”] # 2. 假设已登录,点击右上角‘+’号,然后点击‘New issue’ # 首先,获取可交互元素快照 command: snapshot, args: [“-i”] # LLM分析快照,识别出“+”按钮的引用可能是 @e10,“New issue”链接的引用可能是 @e15 command: click, args: [“@e10”] # 可能需要短暂等待下拉菜单出现 command: js, args: [“new Promise(resolve => setTimeout(resolve, 500))”] command: snapshot, args: [“-i”] command: click, args: [“@e15”]选择仓库:
# 3. 进入创建Issue页面,需要选择仓库。假设页面有一个仓库选择搜索框。 command: snapshot, args: [“-i”] # LLM识别出仓库选择输入框,引用为 @e20 command: fill, args: [“@e20”, “ashish797/Gbrow”] # 输入目标仓库名 command: press, args: [“Enter”] # 或者等待下拉列表出现后点击选择项 # 等待页面跳转到该仓库的Issue创建页 command: js, args: [“await page.waitForNavigation({waitUntil: ‘networkidle’})”]填写Issue内容:
# 4. 填写Issue标题和内容 command: snapshot, args: [“-i”] # 识别标题输入框 (@e30) 和内容编辑框 (@e31) command: fill, args: [“@e30”, “登录按钮点击无响应”] command: click, args: [“@e31”] # 聚焦到内容框 command: type, args: [“@e31”, “## 问题描述\n在登录页面,点击‘Sign in’按钮后,页面无任何反应,控制台也没有错误输出。\n\n## 复现步骤\n1. 访问 https://example.com/login\n2. 输入用户名和密码\n3. 点击‘Sign in’按钮\n\n## 预期行为\n应跳转到用户仪表盘。\n\n## 环境\n- 浏览器:Chrome 最新版\n- Gbrow Agent”]选择标签并提交:
# 5. 添加标签(如‘bug’) command: snapshot, args: [“-i”] # 识别标签输入框或下拉菜单 (@e40) command: click, args: [“@e40”] command: type, args: [“@e40”, “bug”] command: press, args: [“Enter”] # 6. 最后,识别并点击‘Submit new issue’按钮 (@e50) command: click, args: [“@e50”] # 7. 验证是否成功:等待跳转,并检查新页面的URL是否包含‘/issues/’字样 command: js, args: [“await page.waitForNavigation()”] command: url, args: [] # LLM判断返回的URL是否符合成功创建Issue的格式
这个流程展示了Agent如何像人类一样,通过“观察”(snapshot)-“决策”(LLM分析)-“行动”(click,fill)的循环,完成一个复杂的多步骤任务。Gbrow提供的稳定、快速的“观察”和精准的“行动”能力,是整个链条可靠运行的基础。
6. 深入原理:无障碍树与引用系统的实现剖析
要真正用好Gbrow,甚至在其基础上进行定制开发,有必要了解其内部是如何将浏览器的无障碍树转化为那套简洁的引用命令的。
6.1 从ariaSnapshot()到结构化文本
Playwright的page.accessibility.snapshot()方法返回的是一个嵌套的JSON对象。一个简单的按钮可能如下所示:
{ “role”: “button”, “name”: “Submit”, “value”: “”, “children”: [] }Gbrow的任务是将这棵树扁平化、序列化,并为每个可交互节点分配一个唯一的引用ID(如@e1)。这个过程大致如下:
- 遍历与过滤:深度优先遍历整个无障碍树。根据
snapshot命令的标志(如-i)过滤节点。例如,-i模式下只保留role属于[‘button’, ‘link’, ‘textbox’, ‘checkbox’, ‘radio’, ‘combobox’, ‘slider’, ...]等列表的节点。 - 分配引用:为每个保留的节点按遍历顺序分配一个递增的ID(
e1,e2, …)。 - 生成描述行:将每个节点的重要属性格式化成一行文本。例如,对于一个禁用的文本输入框,可能生成:
@e5 [textbox] “Email Address” [required=true] [disabled=true]。方括号[]内的部分是属性。 - 构建映射表:在内存中维护一个从引用ID(
@e5)到PlaywrightLocator对象的映射。这个Locator是Playwright用于定位和操作页面元素的核心对象。当后续click @e5命令到来时,Gbrow就能通过这个映射表快速找到对应的元素并执行点击操作。
6.2 引用系统的优势与局限
优势:
- 稳定性:引用基于无障碍树中节点的顺序和角色,只要页面结构不发生剧烈变化(如整个区块被动态替换),引用在单次页面会话内是相对稳定的。这比依赖可能变化的CSS类名或XPath要可靠。
- 语义化:引用直接对应到语义化的交互元素(按钮、输入框),Agent无需理解复杂的CSS选择器语法。
- 高效:定位元素时,直接使用预先构建的
Locator映射,速度极快。
局限与注意事项:
- 会话依赖性:引用ID仅在当前浏览器页面会话(从
goto到页面刷新或导航到全新页面)内有效。页面刷新后,整个无障碍树会重新生成,引用ID也会重置。 - 动态内容:对于通过JavaScript动态插入到DOM中的元素,只有在执行新的
snapshot后,它们才会被分配引用ID。因此,在操作动态加载的内容前,通常需要先获取一次新的快照。 - 非标准控件:某些高度自定义的UI组件(如用一堆
div模拟的下拉菜单)可能无法被浏览器正确识别为标准的无障碍角色(如combobox)。这会导致Gbrow无法将其识别为可交互元素。这是所有基于无障碍树方案的共同挑战。
6.3 与直接使用Playwright的对比
你可能会问,既然底层是Playwright,为什么不直接用Playwright的Python或Node.js库?
Gbrow提供的抽象层解决了几个关键问题:
- 状态持久化:直接写脚本,浏览器通常在脚本结束后就关闭了。Gbrow的服务器模式让浏览器实例和页面状态得以长期维持,适合长时间运行的Agent。
- 协议标准化:Gbrow定义了一套简单的HTTP JSON协议。这意味着你的Agent可以用任何语言(Python, Go, Rust, Java)编写,只要它能发HTTP请求。这解耦了Agent逻辑和浏览器自动化环境。
- 内置最佳实践:引用系统、自动等待、标签页管理、错误处理等,都是Web自动化中的常见需求。Gbrow将其封装好,你无需从头实现。
- 与AI Agent框架集成:作为OpenClaw的一个Skill,Gbrow可以无缝接入其工作流,被Agent自然调用。它也可以作为独立的MCP(Model Context Protocol)服务器,被其他支持MCP的AI应用使用。
7. 常见问题排查与性能优化指南
在实际使用中,你可能会遇到一些问题。以下是一些常见情况的排查思路和优化建议。
7.1 启动与连接问题
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
运行bun run src/server.ts失败,提示bun: command not found | Bun运行时未正确安装或未加入PATH。 | 1. 确认Bun已安装:which bun。2. 若未安装,参考Bun官网手动安装。3. 安装后,可能需要重启终端或运行source ~/.bashrc(或对应shell的配置文件)。 |
| 启动服务器时卡在“Installing Chromium…”或报网络错误。 | 网络问题导致Playwright下载Chromium失败。 | 1.设置镜像源(推荐):在运行安装脚本前,设置环境变量PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors。或者使用bunx playwright install chromium --channel=chromium --with-deps并尝试。2. 手动下载:根据Playwright文档,手动下载Chromium并放置到指定缓存目录。 |
cURL命令返回{“error”:”Unauthorized”}或连接被拒绝。 | 1. 认证令牌错误。2. 服务器未在运行。3. 端口被占用。 | 1. 检查.gstack/browse.json中的token值,确保cURL命令中的Bearer ${TOKEN}与之完全一致。2. 检查服务器进程是否仍在运行 (`ps aux |
| 在Docker容器内启动失败。 | Chromium在容器内需要额外的沙箱配置。 | Gbrow的setup.sh已尝试处理。如果仍有问题,确保在启动Playwright浏览器时显式设置chromiumSandbox: false。检查Docker运行权限,可能需要添加--cap-add=SYS_ADMIN或使用--security-opt seccomp=unconfined(有安全风险,仅用于测试)。 |
7.2 运行时操作问题
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
click @eX失败,提示元素不可见或不可交互。 | 1. 元素被遮挡(弹窗、浮动层)。2. 元素在视口外。3. 页面尚未加载完成或元素是动态出现的。 | 1. 使用snapshot -a生成带注解的截图,确认@eX是否正确对应目标元素。2. 尝试在点击前先滚动元素到视图:可以发一个js命令执行滚动操作。3.最重要的:增加等待。在触发动态加载的操作(如点击搜索按钮)后,先等待一段时间或等待特定元素出现,再执行snapshot获取新的引用。使用js命令配合page.waitForSelector或page.waitForTimeout。 |
snapshot返回的元素列表不全,缺少动态加载的内容。 | 快照捕获的是执行命令瞬间的DOM状态。对于滚动加载、点击按钮后显示的内容,需要先触发加载行为。 | 1. 模拟用户交互:先scroll down或click加载更多按钮。2. 然后等待网络空闲或元素出现:js await page.waitForLoadState(‘networkidle’)或js await page.waitForSelector(‘.new-item’)。3. 最后再执行新的snapshot。 |
fill命令执行了,但表单提交时提示输入为空。 | 某些现代前端框架(如React, Vue)依赖于输入事件来更新数据状态。fill直接设置value属性可能不会触发这些事件。 | 改用type命令,它模拟了真实的键盘输入,会触发input、change等事件。如果还不行,可以尝试fill后,再通过js命令手动触发一个dispatchEvent(new Event(‘input’))。 |
引用@eX在执行几次操作后失效或指向错误元素。 | 页面发生了重新渲染或导航,旧的DOM元素被替换,但引用映射表未更新。 | 导航或导致页面主体刷新的操作后,必须重新执行snapshot来获取新的引用映射。这是使用引用系统最重要的纪律。 |
7.3 性能与稳定性优化
- 合理使用快照标志:频繁使用
snapshot -i而非无参数的snapshot,可以大幅减少数据传输量和Agent的解析负担。只有在需要分析完整页面结构时才使用完整快照。 - 避免不必要的快照:在连续的交互操作之间(例如,连续点击同一个页面的多个按钮),如果页面结构没有变化,可以复用之前的快照和引用,无需每次都重新获取。
- 设置合理的超时与等待:在
goto或可能引发导航的click之后,使用js命令进行智能等待(如waitForSelector),比固定的sleep更高效、更稳定。 - 管理标签页生命周期:对于独立的任务,尽量使用
newtab在新标签页中操作,完成后closetab。这可以避免任务间状态污染。但也不要过度创建标签页,以免消耗过多内存。 - 监控服务器资源:Gbrow服务器和Chromium进程会占用内存。对于长期运行的服务,建议监控内存使用情况,并利用
autoShutdown功能(默认30分钟)清理闲置会话,或在业务逻辑中主动关闭不再需要的浏览器实例(Gbrow目前通过超时管理,未来版本可能提供显式关闭命令)。
8. 进阶应用与生态整合
Gbrow的设计使其易于集成到更广泛的AI Agent生态系统中。
作为独立的HTTP服务:这是最通用的模式。任何能发送HTTP请求的程序都可以成为Gbrow的客户端。你可以用Python的requests库、Go的net/http包,甚至直接在命令行中用curl进行测试和原型开发。
集成到OpenClaw Skill:Gbrow本身就是作为OpenClaw的一个Skill被创建的。在OpenClaw框架中,Agent可以像调用本地函数一样自然地调用browse_goto,browse_snapshot等能力,框架会帮你处理与Gbrow服务器的通信。这为构建复杂的、具备Web操作能力的智能体提供了“开箱即用”的便利。
适配MCP(Model Context Protocol):MCP是新兴的AI应用与工具之间的标准协议。Gbrow的HTTP JSON接口很容易被包装成一个MCP服务器。这样,任何兼容MCP的AI应用(如某些增强型的ChatGPT客户端)都可以直接发现并使用Gbrow的浏览器功能,而无需通过OpenClaw。
扩展与定制:Gbrow的代码结构清晰。如果你需要额外的命令(例如,获取某个区域的截图、执行更复杂的鼠标操作),可以修改src/server.ts中的命令处理逻辑,添加新的Playwright API调用。社区也可以基于此构建更垂直的工具,例如专注于电商数据抓取、社交媒体管理的增强版Gbrow。
我个人在实际使用Gbrow构建自动化工作流时,最大的体会是它成功地在“功能强大”和“易于使用”之间找到了一个绝佳的平衡点。它没有试图用AI去解决所有问题,而是巧妙地利用浏览器已有的、成熟的无障碍基础设施,为AI Agent提供了一个高速、免费且极其可靠的感知通道。当你不再需要为每一次“页面看一眼”而付费和等待时,构建能够长时间运行、执行复杂链式任务的Web Agent就从一个昂贵的实验,变成了一个切实可行的工程方案。当然,它要求你的Agent具备一定的逻辑规划能力来解析结构化的树并做出决策,但这正是当前LLM所擅长的。Gbrow负责“可靠地做”,LLM负责“聪明地想”,这种分工协作的模式,在我看来,是当前实现实用AI Agent的一条非常清晰的路径。