Hotdry.
ai-systems

Vibium:Selenium 创始人的浏览器自动化新架构,AI 与人类操作的无缝切换

分析 Vibium 基于 WebDriver BiDi 与 MCP 协议的浏览器自动化架构,解析 AI 与人类操作的状态同步机制与工程实现参数。

引言:从 Selenium 的遗产到 AI 时代的浏览器自动化

当 Jason Huggins 在 2004 年创建 Selenium 时,他可能没有想到这个工具会成为 Web 自动化测试的事实标准。近二十年后,作为 Selenium、Appium 的创始人,Huggins 再次出手,推出了 Vibium—— 一个专为 AI 时代设计的浏览器自动化基础设施。

Vibium 的定位很明确:"Selenium Test Automation for AI"。正如 Huggins 在 Test Guild 采访中所说:"Whatever we did with Selenium for the web, whatever we did with Appium for mobile, we are doing with AI." 这不仅仅是另一个自动化工具,而是对浏览器自动化架构的重新思考。

架构解析:WebDriver BiDi + MCP 协议的双重创新

WebDriver BiDi:解决 Selenium 的 flakiness 问题

传统 Selenium WebDriver 基于 HTTP 协议,采用请求 - 响应模式。这种单向通信存在明显的性能瓶颈和稳定性问题。Vibium 的核心技术基础是 WebDriver BiDi(Bi-Directional Protocol),这是一个由浏览器厂商和 Selenium 社区共同开发的下一代浏览器自动化协议。

BiDi 协议的关键创新在于:

  • WebSocket 双向通信:取代 HTTP 轮询,实现实时双向数据流
  • 浏览器主动推送事件:浏览器可以主动发送控制台日志、网络请求、DOM 变更等事件
  • 内置稳定性机制:借鉴了 Playwright 和 Puppeteer 的成功经验

正如 Huggins 解释的:"If you wanted Selenium to stop being flaky, what would you do differently? Start with WebSocket-based communication."

MCP 协议:AI 原生的接口设计

Vibium 的第二个架构创新是原生支持 MCP(Model Context Protocol)。MCP 是 Anthropic 提出的标准协议,用于 LLM 与外部工具的交互。通过 MCP 集成,Vibium 可以直接被 Claude Code 等 AI 工具调用,实现自然语言驱动的浏览器自动化。

这种设计使得 AI 代理能够:

  • 通过自然语言指令控制浏览器
  • 实时获取浏览器状态反馈
  • 在遇到问题时请求人类协助

工程实现:Clicker 二进制与 JS 客户端的协同设计

Clicker:单一 Go 二进制(~10MB)

Vibium 的核心是一个名为 Clicker 的 Go 二进制文件,它集成了四个关键功能:

  1. 浏览器管理:自动检测并启动支持 BiDi 的 Chrome 浏览器
  2. BiDi 代理:WebSocket 服务器,路由命令到浏览器
  3. MCP 服务器:stdio 接口,供 LLM 代理调用
  4. 自动等待:在交互前轮询元素,减少 flakiness

Clicker 的设计哲学是 "隐形"—— 开发者只需 npm install vibium,二进制文件会自动下载并运行,无需手动配置。

JS/TS 客户端:开发者友好的双模式 API

Vibium 提供了灵活的 JavaScript/TypeScript 客户端,支持同步和异步两种编程模式:

同步 API(REPL 友好)

const { browserSync } = require('vibium')
const fs = require('fs')

const vibe = browserSync.launch()
vibe.go('https://example.com')
const png = vibe.screenshot()
fs.writeFileSync('screenshot.png', png)
vibe.quit()

异步 API(现代应用)

import { browser } from 'vibium'
import fs from 'fs/promises'

const vibe = await browser.launch()
await vibe.go('https://example.com')
const png = await vibe.screenshot()
await fs.writeFile('screenshot.png', png)
await vibe.quit()

这种双模式设计既满足了交互式开发的需求,也支持现代异步应用架构。

AI 集成:状态同步与无缝切换机制

MCP 工具集:自然语言驱动的浏览器控制

通过 MCP 集成,AI 代理可以直接使用以下工具:

工具 描述
browser_launch 启动浏览器(默认可见)
browser_navigate 导航到 URL
browser_find 通过 CSS 选择器查找元素
browser_click 点击元素
browser_type 在元素中输入文本
browser_screenshot 捕获视口截图
browser_quit 关闭浏览器

集成命令极其简单:

claude mcp add vibium -- npx -y vibium

状态同步:AI 与人类操作的协作模式

Vibium 的核心创新之一是支持 AI 与人类操作的无缝切换。传统自动化工具在遇到问题时要么失败,要么需要复杂的异常处理。Vibium 采用了不同的策略:

  1. 智能回退而非失败:当 AI 无法找到元素时,可以请求人类协助或尝试替代路径
  2. 状态持久化:浏览器状态可以在 AI 和人类操作之间保持同步
  3. 上下文传递:操作历史和环境上下文在切换过程中不会丢失

这种设计使得工作流可以动态调整:AI 处理常规任务,人类介入复杂场景,然后 AI 继续执行。

可落地参数:部署配置、性能调优与监控要点

部署配置参数

环境变量配置

# 跳过浏览器自动下载(如果已手动管理)
VIBIUM_SKIP_BROWSER_DOWNLOAD=1

# 自定义缓存目录
VIBIUM_CACHE_DIR=/custom/cache/path

# 浏览器启动参数
VIBIUM_BROWSER_ARGS="--headless --disable-gpu"

平台支持矩阵

平台 架构 状态
Linux x64 ✅ 支持
macOS x64 (Intel) ✅ 支持
macOS arm64 (Apple Silicon) ✅ 支持
Windows x64 ✅ 支持

性能调优参数

连接池配置

// 最大并发浏览器实例
const vibe = await browser.launch({
  maxInstances: 5,
  connectionTimeout: 30000,  // 30秒连接超时
  commandTimeout: 60000      // 60秒命令超时
})

内存优化

  • Clicker 二进制:~10MB 内存占用
  • 每个浏览器实例:建议预留 512MB-1GB 内存
  • 缓存目录:默认使用平台标准缓存路径

监控与告警要点

关键指标监控

  1. 连接成功率:BiDi WebSocket 连接建立成功率
  2. 命令响应时间:平均命令执行延迟
  3. 元素查找成功率:CSS 选择器匹配成功率
  4. 截图性能:截图操作耗时分布
  5. 内存使用:浏览器进程内存占用

健康检查端点: Vibium 通过 WebSocket 端口 :9515 提供服务,可以通过简单的连接测试进行健康检查:

# 检查 Clicker 是否运行
curl -s http://localhost:9515/health || echo "Clicker not running"

# 测试 WebSocket 连接
websocat ws://localhost:9515 -E

错误处理与重试策略

智能重试配置

const vibe = await browser.launch({
  retryPolicy: {
    maxRetries: 3,
    retryDelay: 1000,  // 1秒延迟
    retryableErrors: [
      'element not found',
      'timeout',
      'network error'
    ]
  }
})

错误分类处理

  1. 可恢复错误:元素未找到、网络超时 → 自动重试
  2. 不可恢复错误:浏览器崩溃、内存不足 → 重启实例
  3. 业务逻辑错误:验证失败、断言错误 → 记录并继续

与传统工具的对比分析

与 Selenium 的对比

维度 Selenium Vibium
通信协议 HTTP (单向) WebSocket BiDi (双向)
AI 集成 需要额外适配层 原生 MCP 支持
安装复杂度 需要独立 driver 单一二进制,自动下载
稳定性 依赖显式等待 内置智能等待
性能 请求 - 响应延迟 实时事件驱动

与 Playwright/Puppeteer 的对比

维度 Playwright/Puppeteer Vibium
设计目标 开发者友好的自动化 AI 原生的自动化
协议层 基于 CDP 基于标准 WebDriver BiDi
跨浏览器 多浏览器支持 目前主要 Chrome
AI 集成 需要自定义集成 开箱即用的 MCP
状态管理 会话级别 AI - 人类协作级别

风险与限制评估

当前限制

  1. 生态系统成熟度:项目于 2025 年 12 月刚发布到 npm,生态系统仍在建设中
  2. 浏览器支持:目前主要支持 Chrome,跨浏览器兼容性待验证
  3. 社区规模:相比成熟的 Selenium,社区支持和第三方插件有限
  4. 生产就绪度:虽然架构先进,但大规模生产部署经验尚缺

迁移风险评估

低风险迁移场景

  • 新项目采用 Vibium 作为自动化基础
  • AI 辅助的测试生成和探索
  • 研究性质的自动化项目

中高风险迁移场景

  • 大规模现有 Selenium 测试套件迁移
  • 对浏览器兼容性要求严格的生产环境
  • 关键业务依赖的自动化流水线

未来演进方向

短期路线图(V1)

根据 Vibium 的公开路线图,V1 版本聚焦于:

  • 核心浏览器控制循环的稳定
  • MCP 协议和 JS 客户端的完善
  • 基础文档和教程建设

中期规划(V2)

V2 路线图包括:

  • Python 和 Java 客户端:扩展语言支持
  • Cortex:内存和导航层,增强状态管理
  • Retina:录制扩展,支持操作录制和回放
  • 视频录制:完整的操作过程录制
  • AI 驱动的定位器:智能元素查找和识别

长期愿景

Huggins 将 Vibium 的愿景描述为 "Waymo for web apps"。这意味着:

  • 业务级别的自动化:关注 "用户能否完成购买" 而非 "点击哪个按钮"
  • 自适应路径规划:类似自动驾驶的实时路径调整
  • 零配置部署:完全自动化的环境设置和配置

实施建议与最佳实践

渐进式采用策略

  1. 评估阶段(1-2 周):

    • 在非关键项目中试用 Vibium
    • 评估 AI 集成的实际效果
    • 测试与现有工具的兼容性
  2. 试点阶段(2-4 周):

    • 选择特定业务场景进行深度集成
    • 建立监控和告警体系
    • 收集性能基准数据
  3. 扩展阶段(1-2 月):

    • 逐步扩大使用范围
    • 建立内部最佳实践文档
    • 培训团队掌握新工具

团队技能转型

随着 Vibium 这类 AI 原生工具的出现,测试工程师的技能需求也在变化:

重要性提升的技能

  1. 领域专业知识:对业务逻辑的深入理解
  2. 提示工程:与 AI 协作的自然语言表达能力
  3. 测试编排:而非脚本维护
  4. 词汇掌握:有效与 AI 协作的专业术语

重要性降低的技能

  1. 低级别的脚本编写
  2. 手动元素定位和等待处理
  3. 复杂的异常处理代码

结论:浏览器自动化的范式转移

Vibium 代表了浏览器自动化领域的一次重要范式转移。它不仅仅是 Selenium 的替代品,而是为 AI 时代重新设计的自动化基础设施。通过 WebDriver BiDi 和 MCP 协议的双重创新,Vibium 解决了传统自动化工具的多个痛点:

  1. 稳定性提升:双向实时通信减少 flakiness
  2. AI 原生集成:自然语言驱动的自动化成为可能
  3. 人类 - AI 协作:支持无缝的状态切换和协作
  4. 简化部署:单一二进制,自动环境配置

正如 Huggins 在职业生涯中成功预测了 Web 和移动时代的测试需求,Vibium 是他对 AI 时代测试基础设施的答案。虽然项目仍处于早期阶段,但其架构设计和理念已经显示出巨大的潜力。

对于正在探索 AI 时代自动化解决方案的团队,Vibium 值得密切关注和评估。它可能不仅是现有工具的补充,而是定义下一代自动化标准的重要尝试。


资料来源

  1. Vibium GitHub 仓库:https://github.com/VibiumDev/vibium
  2. Test Guild 深度分析:https://testguild.com/vibium-the-new-selenium/
  3. WebDriver BiDi 规范:https://w3c.github.io/webdriver-bidi/
查看归档