返回目录
开源项目自动化与 Agent 类新手

Jev Ultrafast —— 基于动态索引动作空间的浏览器 Agent

Browser Use 与 TypeSafe 合作的浏览器智能体:把页面转成带编号的可交互元素表,每次决策只发一次请求即可同时给出操作(operation)与目标(target),默认循环不使用截图;官方示例中 Zürich → London 的 Google Flights 搜索耗时 7.1 秒。

0 次阅读2026/09/22 发布
Jev Ultrafast —— 基于动态索引动作空间的浏览器 Agent 来源图片

社区作者 · zZz

它解决什么问题

项目用途

Jev Ultrafast 是一个「最快、最便宜」的网页智能体(web agent)。使用方式是把一个自然语言目标交给它,由 TypeSafe 的 Jev 决定「执行哪个操作 + 作用在哪个元素」上。只有当操作是 TYPE_TEXT 时,才会调用一个小型 LLM 生成要输入的文本。

配图 1 为项目横幅(Jev Ultrafast · Browser Use × TypeSafe),配图 2 为一次 1× 速度的 Google Flights 真实搜索演示(城市名由模型生成,操作/目标由模型动态决策)。

动作空间与决策机制

  • 每次观察(observation)都会生成一张新的元素表,例如:
  • [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。只会提供受支持的操作与目标。
  • 一次 TypeSafe 请求内同时给出:操作(如 CLICK)、click_target、type_text_target、select_target(如存在)。目标问题是「投机式(speculative)」的:如果操作是 CLICK,只有 click_target 会被执行。两个决策共用一次网络往返。
  • 每个 target head 只包含与当前操作兼容的元素;原生下拉选项带有观察到的元素/选项索引。
  • 策略中没有站点专用脚本,也没有预先准备好的字段字符串。Flights 示例只提供目标,并独立校验结果;截图层只是事后加标签,不驱动浏览器。

为什么快(官方列出的设计点)

  • 每个决策周期只发一次请求,操作头与目标头共享同一份观察状态。
  • 默认 agent 循环不使用截图:Jev 消费结构化状态;inspector 才选用截图,视频使用单独的连续录制。
  • 每个快照只做一次浏览器调用:原子读取可见控件及其名称、值和文本,并保留真实 DOM 节点的引用。
  • 校验所选目标:点击会检查文档、表单值、目标及邻近上下文;动画本身不会强制再次预测;输入前解析当前几何位置并拒绝被遮挡控件。
  • 等待「有用状态」:向 combobox 输入后等待可见建议,上限 200 ms;其他交互最多两个动画帧或 50 ms;这些读取发生在执行被记录之后。
  • 保持隐藏标签页继续渲染,用焦点模拟避免后台动画节流,而不切换 Chrome 的可见标签。
  • 只发送可见文本:屏幕外的正文和页脚不会填充模型上下文。
  • 复用被中断的文本请求:只有当文本助手的整个输入未变化时,生成值才会在「页面过旧」重试中保留。

安全边界

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

代码结构(文件职责)

  • agent.py:完整循环与文本助手交接
  • snapshot.js:原子 DOM 快照、带索引的控件、新鲜度保护
  • browser.py:浏览器连接、当前几何、执行
  • model.py:动态操作/目标头与文本生成
  • questions.py:模型指令
  • demo.py:本地 inspector

证据与限制

  • 当前视频是一次 7,073 ms 的 Google Flights 运行。计时从首次页面观察之后开始,包含模型调用、生成文本、浏览器操作、过期决策与加载等待。独立的全新检查会校验单程设置、Zürich、London、September 20, 2026 以及可见的航班选项。视频以 1× 播放,无开头停顿,结尾定格 0.5 秒。
  • 六次交替运行(模型与设置完全相同)中两个版本都是 3/3 通过;中位任务时间从 9.450 s 降到 7.092 s(减少 25%),中位浏览器协议调用从 1,092 降到 101。官方声明这只是同一个浏览器配置上单一任务的三次重复,不是通用可靠性基准。
  • 同一策略在 2.798 s 内打开了指定的 Wikipedia 文章,在 1.896 s 内通过了本地酒店搜索/筛选任务。运行、失败、源码哈希与测量边界见 performance.md。
  • 选择 DONE 仍需要独立的结果校验。DOM 读取器覆盖常见 HTML 与 ARIA 控件,并非完整的 accessible-name 规范。Shadow root、iframe、canvas、上传、弹出标签、嵌套滚动以及任意键盘控件仍在该 MVP 之外。启用的标签共享现有 Chrome 配置。

适用对象

需要在网页上执行端到端任务、关注单步延迟与调用成本、且希望自定义策略模型/端点的开发者与自动化团队;不适合要求完整可访问性规范覆盖或复杂 iframe/canvas 操作的场景。

— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。

安装 / 开始使用

以下为来源中给出的完整安装与首次运行步骤(顺序不可调换)。

1)准备环境

  • 需要 Python 环境管理工具 uv(来源未给出 uv 自身的安装命令,待核验)。
  • 需要 Google Chrome 浏览器;Chrome 通过 Browser Harness 连接,Browser Harness 由 uv sync 一并安装。
  • 需要两个 API Key:TYPESAFE_API_KEY(TypeSafe 请求)与 TEXT_MODEL_API_KEY(文本生成)。

2)克隆并同步依赖

bash
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.

在 .env 中填入 TYPESAFE_API_KEY 与 TEXT_MODEL_API_KEY。

3)启动本地 inspector 并跑第一个 demo

bash
uv run jev

然后打开 http://127.0.0.1:8766,点击 Start demo → Run automatically。

  • inspector 会显示带编号的元素、操作概率、目标概率以及已执行的动作。
  • 选择 “Choose next” 会在执行前暂停。

4)首次运行常见问题

  • 如果 Chrome 需要连接,运行 uv run browser-harness --doctor 排障;
  • 当浏览器弹出提示时,允许 Chrome 开启远程调试(Allow remote debugging);
  • 来源提示:启用的标签页会共享现有 Chrome profile。

5)文本模型配置说明

  • 示例配置中的 TEXT_MODEL_API_KEY 是一个 OpenRouter key。
  • 当前 demo 使用 inception/mercury-2.5,并关闭 reasoning。
  • Gemini、GLM、DeepSeek 也可以通过 OpenAI 兼容的文本助手使用;需要配置相应的模型、端点(endpoint)与 reasoning 设置。

6)作为库使用

python
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

7)换一个任务的示例

bash
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.'
bash
uv run --env-file .env python examples/flights.py --keep-open

说明:examples/flights.py --keep-open 会执行航班搜索,校验实际航线/日期/结果并保存 trace;它不会选择或预订航班。

8)开发与自检命令

bash
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 账号条。凭证与原始 trace 保持被忽略(ignored)状态。

来源教程配图

Jev Ultrafast · Browser Use × TypeSafe
配图 1 · Jev Ultrafast · Browser Use × TypeSafe查看原图
A real Google Flights search at 1× speed, with generated city names and dynamic operation/target decisions
配图 2 · A real Google Flights search at 1× speed, with generated city names and dynamic operation/target decisions查看原图

适用场景

用自然语言目标驱动 Chrome 完成网页端到端任务(如航班搜索
打开指定条目
酒店搜索与筛选)
构建低延迟
低调用成本的网页智能体(每个决策周期仅一次模型请求)
以结构化 DOM 状态替代截图的 agent 循环
降低视觉推理成本
在本田 inspector 中调试与观察操作概率
目标概率及每一步执行动作
作为 Python 库(jev_ultrafast.Agent)集成到自有自动化脚本中
切换 OpenRouter / OpenAI 兼容文本模型(inception/mercury-2.5
Gemini