打开 Google Flights,输入出发地、目的地、日期,勾选舱位,翻找结果——这一套动作,人类大概要花上一两分钟。TypeSafe 开源的浏览器智能体 Jev Ultrafast,把同样的流程压缩到了 7.1 秒。这个数字里包含了自然语言目标的解析、真实的文本生成,以及页面加载的等待时间。

它做的事情说起来不复杂:给它一个目标,它自己决定下一步点哪里、填什么。但真正值得看的,是它怎么把“点哪里”这件事拆成了一套可索引的动作空间。

打开网易新闻 查看精彩图片

每一次观察,都生成一张新的元素表

Jev 的工作方式不是记住某个网站的固定操作路径。它每观察一次页面,就产出一张全新的元素表,长这样:

  • [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。系统只会提供当前页面真正支持的操作和目标,不会让模型去猜一个不存在的按钮。

两个决策,一次网络往返

拿到元素表之后,Jev 要做的判断只有两件事:选哪个操作,选哪个元素。这两个决策被合并进同一次网络请求里完成。

这里有个细节值得注意。目标问题被设计成“推测性”的——如果操作是 CLICK,那么只有 click_target 能被执行。每个目标头里只包含与当前操作兼容的元素,不会出现“选了点击却返回一个输入框”这种错配。

原生下拉菜单的选择项,会带上一个观察到的元素或选项索引。也就是说,连“选第几个选项”这种信息,也是从页面上看来的,不是模型凭记忆编的。

策略里没有任何针对特定站点的动作脚本,也没有预先准备好的字段字符串。Flights 这个例子只提供了一个目标,然后独立验证结果。截图渲染器是在事后加标签的,它不驱动浏览器

文本生成只在需要打字时发生

整套流程里,小模型只在一种情况下被调用:当操作是 TYPE_TEXT 的时候。它负责写出要填进输入框的文字,写完就退出。

这个设计把大模型的调用次数压到了最低。点击、滚动、等待这些动作不需要生成任何文本,自然也不需要模型介入。真正需要“思考”的,只有填什么内容这一步。

示例配置里,TEXT_MODEL_API_KEY 用的是 OpenRouter 的密钥,当前演示跑的是 inception/mercury-2.5,并且关闭了推理。Gemini、GLM、DeepSeek 也可以通过 OpenAI 兼容的文本辅助接口接入,只要配置好对应的模型、端点和推理设置。

跑起来只需要几行命令

想自己试的话,流程是这样的:

  1. 克隆仓库:git clone https://github.com/browser-use/jev-ultrafast.git
  2. 进入目录并同步依赖:cd jev-ultrafast,然后 uv sync
  3. 复制环境变量文件:cp .env.example .env,填入 TYPESAFE_API_KEY 和 TEXT_MODEL_API_KEY
  4. 启动: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 检查即可,同时记得允许远程调试。