ESC
开源 2 分钟阅读

Browser Use 开源 jev-ultrafast:动态索引动作空间的极速浏览器智能体,7.1 秒完成 Google Flights 搜索

Browser Use 联合 TypeSafe 推出开源项目 jev-ultrafast,一个采用动态、可索引动作空间的浏览器智能体。只需一个自然语言目标即可执行操作,实测 7.1 秒在 Google Flights 上完成苏黎世至伦敦的航班搜索,任务耗时中位数降低 25%,浏览器协议调用从 1092 次降至 101 次,默认循环不依赖截图。

来源:GitHub

Jev Ultrafast · Browser Use × TypeSafe

Jev Ultrafast ⚡

一个拥有动态、可索引动作空间的浏览器智能体。

只需给它一个目标。TypeSafe 的 Jev 会选择一个操作和一个元素。只有当操作为 TYPE_TEXT 时,小模型才会生成文本。

7.1 秒内在 Google Flights 上完成苏黎世→伦敦的搜索。 包含一个自然语言目标、实际的文本生成以及加载等待。

A real Google Flights search at 1× speed, with generated city names and dynamic operation/target decisions

观看 MP4 · 性能数据 · 阅读核心循环

动作空间

每次观察都会生成一个新的元素表:

[1] button    Change ticket type · Round trip
[2] combobox  Where from?        · San Francisco
[3] combobox  Where to?          · empty
[4] textbox   Departure          · empty
...

操作包括 CLICK、TYPE_TEXT、SELECT、SCROLL_UP、SCROLL_DOWN、WAIT、DONE 和 BLOCKED。系统只提供受支持的操作和目标。

                      one TypeSafe request
                     ┌───────────────────────────┐
page → element table → operation                 │
                     │ click_target              │
                     │ type_text_target          │
                     │ select_target, if present │
                     └─────────────┬─────────────┘
                         use the matching target
                                   │
                    CLICK [7] ─────┤──→ browser
                TYPE_TEXT [3] ─────┘
                          ↓
                   small LLM → text → browser

目标问题是投机性的。如果操作是 CLICK,只有 click_target 可以执行。两次决策,一次网络往返。每个目标头只包含兼容的元素。原生下拉选项携带观察到的元素/选项索引。

策略中没有任何针对特定站点的动作脚本或预置字段字符串。Flights 示例只提供一个目标并独立验证结果。截图渲染器是在事后添加标签;它并不驱动浏览器。

试用

git clone https://github.com/browser-use/jev-ultrafast.git
cd jev-ultrafast
uv sync
cp .env.example .env
# Add TYPESAFE_API_KEY and TEXT_MODEL_API_KEY.
uv run jev

打开 http://127.0.0.1:8766 并点击 Start demo → Run automatically。检查器会显示带编号的元素、操作概率、目标概率以及已执行的动作。Choose next 会在执行前暂停。

Chrome 通过 Browser Harness 连接,由 uv sync 安装。如果需要连接,可运行 uv run browser-harness --doctor。在提示时允许 Chrome 远程调试。

在示例配置中,TEXT_MODEL_API_KEY 是一个 OpenRouter 密钥。当前演示使用关闭推理功能的 inception/mercury-2.5。Gemini、GLM 和 DeepSeek 也可以使用 OpenAI 兼容的文本助手;请配置相应的模型、端点和推理设置。

作为库使用

from jev_ultrafast import Agent

with Agent(
    "https://www.google.com/travel/flights?hl=en",
    "Find one-way flights from Zurich to London on September 20, 2026, "
    "for one adult in economy. Stop when matching flight options are visible.",
) as agent:
    for state in agent.run():
        print(state["elapsed_ms"], state["status"])

使用 uv run --env-file .env python your_script.py 运行。同一策略可以运行不同的任务:

uv run --env-file .env python examples/run.py \
  --url https://en.wikipedia.org/wiki/Main_Page \
  --goal 'Find and open the Wikipedia article about Gödel's incompleteness theorems.'

uv run --env-file .env python examples/flights.py --keep-open 会执行航班搜索,检查实际的航线/日期/结果,并保存其轨迹。它不会选择或预订航班。

它为什么快

  • 每个决策周期只发一次请求。 操作头和目标头共享同一个观察状态。
  • 默认智能体循环不使用截图。 Jev 消费结构化状态。检查器可选择启用截图;视频使用的是单独的持续屏幕录制。
  • 每个快照只调用一次浏览器。 原子化读取可见控件及其名称、值和文本。保留对实际 DOM 节点的引用。
  • 验证选定的目标。 点击会检查文档、表单值、目标和附近上下文。仅有动画不会强制重新预测。在输入前解析当前几何信息并拒绝被遮挡的控件。
  • 等待有用的状态。 在组合框中输入后,等待可见建议出现,上限 200 毫秒。其他交互最多等待两个动画帧或 50 毫秒。这些读取发生在执行被记录之后。
  • 保持隐藏标签页持续渲染。 焦点模拟可防止后台动画节流,而无需切换 Chrome 的可见标签页。
  • 只发送可见文本。 屏幕外的文章正文和页脚不会填满模型上下文。
  • 复用被中断的文本请求。 只有当文本助手的完整输入未发生变化时,已生成的值才能在过期页面重试后继续使用。

每个执行的目标都从观察到的节点解析。执行器会重新检查页面新鲜度和点击遮挡情况。模型输出永远不会变成选择器、坐标、shell 命令或可执行的 JavaScript。文本助手的输出必须能解析为一个小的 JSON 对象后才会被输入。

小到可以通读

文件职责
agent.py完整循环与文本助手交接
snapshot.js原子化 DOM 快照、索引控件、新鲜度守卫
browser.py浏览器连接、当前几何信息、执行
model.py动态操作/目标头与文本生成
questions.py模型指令
demo.py本地检查器

证据与局限

当前视频是一段 7,073 毫秒 的 Google Flights 运行。计时从初始页面观察之后开始,包括模型调用、生成的文本、浏览器工作、过期决策和加载等待。一次全新的独立检查验证了单程设置、苏黎世、伦敦、2026 年 9 月 20 日以及可见的航班选项。视频以 1× 播放,开头无停顿,结尾有 0.5 秒停顿。

在使用相同模型和设置的六次交替运行中,两个版本都通过了 3/3。任务时间中位数从 9.450 秒降至 7.092 秒,降幅 25%;浏览器协议调用中位数从 1,092 降至 101。这是在单个浏览器配置文件上对一个任务的三次重复,并非通用的可靠性基准。

同一策略在 2.798 秒 内打开了指定的 Wikipedia 文章,并在 1.896 秒 内通过了一项本地酒店搜索/筛选任务。运行记录、失败情况、源码哈希和测量边界见 performance.md。

选择 DONE 后仍需独立的结果验证。DOM 读取器处理常见的 HTML 和 ARIA 控件,而非完整的可访问名称规范。Shadow roots、frames、canvas、上传、弹出标签页、嵌套滚动和任意键盘控件仍在此 MVP 之外。所属标签页共享现有的 Chrome 配置文件。

开发

uv run ruff check .
uv run pytest
node --check jev_ultrafast/static/app.js
node --check jev_ultrafast/snapshot.js
uv build

测试离线运行。uv run python scripts/check_guards.py 可在本地浏览器中检查真实控件,无需模型调用。在线示例和录制脚本会产生付费 API 调用。scripts/record_flights.py <new-folder> 捕获原始浏览器时间戳;scripts/render_demo.py <recording-folder> 以 1× 渲染经验证的运行并裁掉 Google 账户条。凭据和原始轨迹保持被忽略。


Browser Use · Browser Harness · TypeSafe speculative fan-out