返回博客

Browser Use + Jev:网页 Agent 为什么能在 7 秒内完成一次航班搜索

开发工具2026-09-19约 16 分钟Browser AgentBrowser UseJev浏览器自动化DOM动态动作空间Agent工程GPT88

浏览器 Agent 长期有两个很现实的问题:慢,以及贵。

它们通常要反复读取页面、构造动作、调用模型、等待结果,再把新的页面状态交回模型。只要任务包含多个点击、筛选、输入和跳转,几十秒甚至几分钟很常见;如果每一步都使用通用大模型输出自然语言,成本也会随着动作数快速上涨。

2026 年 9 月,Browser Use 创始人 Gregor Zunic 发布了一段 Browser Use + Jev 的实测视频:在真实网页中搜索一段航班,演示画面标注为原速,流程用时约 7 秒,帖子披露的单次成本为 0.0039 美元。中文帖作者 AYi_AInotes 随后对这段演示进行了详细解读,并把它视为网页智能体从“每一步都让大模型慢慢思考”转向“让专用策略快速执行”的一个案例。

本文把两条 X 帖子放在一起整理,重点不是复述“快到不可思议”的宣传语,而是分析这次演示背后的工程结构:动作空间如何被缩小、DOM 状态如何取代整张截图、Jev 如何负责决策、小模型如何只在需要输入文字时接管,以及这些数字应该怎样验证。

原始视频与配图

原帖视频已经保存在本文资源目录中,下面的图片是 X 帖子提供的原始视频缩略图。

Browser Use + Jev 航班搜索演示封面

视频资源信息:H.264、1104×720、约 7.57 秒。视频中展示的是从打开航班页面、填写查询条件到得到结果的连续过程;原帖强调视频以 1 倍速播放。

一、两条来源分别说了什么

Gregor Zunic 的原始帖子

Gregor Zunic 的英文原帖给出了最小但最关键的实验描述:

  • Browser Use 与 Jev 组合运行;
  • 一次航班搜索约 7 秒完成;
  • 公开披露的成本为 0.0039 美元;
  • 每一步使用新的动作空间;
  • Agent 直接面对 DOM 状态空间;
  • 需要输入文字时,使用小型语言模型作为回退;
  • 演示视频没有加速,按 1 倍速播放;
  • 项目以开源 Browser Agent 的形式发布。

原帖没有给出完整的实验脚本、网络环境、网页稳定性、失败率、重复次数、模型版本与成本核算公式。因此,7 秒和 0.0039 美元应被视为这次演示的公开案例数据,不能直接当作所有网页、所有账号和所有任务的性能承诺。

AYi_AInotes 的中文解读

AYi 的中文帖把这次演示放进更大的行业叙事中:传统浏览器 Agent 往往依赖截图、完整 DOM 或通用模型的自然语言推理,而 Jev 这种不以自然语言输出为主的模型,更适合直接产生结构化动作决策。

中文帖重点强调了三个变化:

  1. 动作空间按当前页面动态生成,而不是每一步都暴露一整套固定动作。
  2. 大量页面跳转和点击交给高速策略模型,文字输入才交给小模型。
  3. 通过专用模型与小模型回退的组合,减少自然语言输出带来的 Token 和延迟开销。

其中“成本砍掉 450 倍”“毫秒级点击”等表述属于中文转述中的强调,不是 Gregor 原帖提供的完整对照实验。工程判断应优先使用原始视频、原始帖子和可重复脚本,而不是直接沿用二次解读中的夸张数字。

二、关键结构:不是让一个模型包办所有动作

传统浏览器 Agent 常被设计成一个大循环:

读取页面截图或大段 DOM
  → 通用大模型理解页面
  → 生成自然语言或工具调用
  → 浏览器执行
  → 重新读取页面
  → 再次请求模型

这个结构的优点是通用,缺点也很明显:

  • 每一步输入可能很大;
  • 页面无关区域会占用上下文;
  • 模型输出中包含大量解释性文本;
  • 点击、选择和跳转都要经过同一种昂贵推理路径;
  • 任何一个页面状态变化都可能触发完整重算。

Browser Use + Jev 的演示更像一种分层执行器:

当前网页状态
  → 生成本步可用动作空间
  → Jev 选择点击 / 选择 / 导航动作
  → 浏览器执行
  → 只在需要文本时调用小模型
  → 进入下一步

重点不是把一个“大模型”换成另一个“更快的模型”,而是重新划分任务边界:视觉理解、页面状态表示、动作选择、文字生成和浏览器执行不必全部由同一个模型承担。

三、第一层优化:动态动作空间

固定动作空间的问题

如果每一步都把所有可能的浏览器操作暴露给模型,动作空间可能包含:

  • 点击任意可交互元素;
  • 输入任意文本;
  • 选择下拉项;
  • 滚动、返回、刷新和打开新标签页;
  • 读取页面、等待、截图和执行脚本;
  • 处理弹窗、日期选择器和分页控件。

动作越多,模型越难判断当前真正可行的选项,也越容易出现无效调用和重复尝试。

动态动作空间的思路

动态动作空间只把当前状态下真正可用、与任务相关的动作交给策略模型:

页面状态 S_t
  → 识别当前可操作元素
  → 根据任务过滤动作
  → 生成 A_t = {a1, a2, ..., an}
  → 选择下一动作 a_t

在航班搜索场景中,输入起点、输入终点、选择日期和点击搜索,不需要和页面上所有导航链接、广告入口、帮助按钮一起竞争。动作数量减少后,模型决策不只更快,也更容易校验。

动作空间必须包含语义和约束

动作空间不能只是元素编号,还需要带上足够的结构化信息:

字段用途
action_id稳定标识当前动作
rolebutton、textbox、combobox 等元素角色
name可读的可访问名称或页面标签
target元素定位信息或浏览器内部引用
allowed_args该动作接受的参数
risk是否会提交、购买、发送或产生外部副作用
state_version防止用旧页面状态操作新页面

这样,策略模型输出的不是任意文本,而是可以被运行时验证的动作对象。

四、第二层优化:从截图优先转向 DOM 状态优先

截图对视觉任务很有价值,但对于大量标准网页操作来说,截图并不是最紧凑的状态表示。一个网页截图需要模型重新识别文字、按钮、输入框和当前焦点;而 DOM、可访问性树和浏览器事件状态可以直接表达很多确定信息。

DOM 状态能提供什么

对于标准表单,DOM 或可访问性树通常能告诉 Agent:

  • 当前有哪些输入框;
  • 输入框的标签、占位符和当前值;
  • 哪些按钮处于可用状态;
  • 下拉框有哪些选项;
  • 某个元素是否隐藏、禁用或被遮挡;
  • 页面是否已经进入加载、完成或错误状态。

这类信息适合直接服务于动作生成和校验。

DOM 优先不等于完全不要视觉

真实网页仍然存在这些情况:

  • 关键内容绘制在 Canvas 中;
  • 页面依赖复杂 CSS 或虚拟列表;
  • DOM 文本与视觉位置不一致;
  • 弹窗、遮罩和焦点状态只能通过画面确认;
  • 图表、地图和图片内容需要视觉理解。

更可靠的方案是按任务选择状态表示:

标准表单 / 链接 / 按钮 → DOM / Accessibility Tree
视觉布局 / Canvas / 图表 → 截图或视觉模型
两者冲突 → 暂停并做状态复核

如果只相信 DOM,可能漏掉遮罩和视觉层状态;如果每一步都只看截图,又会牺牲速度和成本。正确目标是让视觉成为按需能力,而不是唯一入口。

五、第三层优化:Jev 负责动作,语言模型负责文字

Gregor 原帖明确写到,系统使用“小型语言模型回退来输入文字”。这意味着浏览器 Agent 的能力被拆成至少两条路径:

动作决策路径:Jev → 点击、选择、跳转、状态推进
文字输入路径:小模型 → 生成或修正要输入的文本

这是一种很实用的模型路由方式。

为什么文字输入值得单独处理

点击搜索按钮是有限动作;但在输入框中填入机场、人名、商品名或地址,往往需要:

  • 生成目标文本;
  • 处理用户原始意图;
  • 做拼写和格式转换;
  • 解决页面自动补全;
  • 判断是否需要清空旧值;
  • 处理多语言和特殊字符。

这类任务仍然需要语言理解,不适合强行压缩成纯动作分类。

Fallback 不是失败,而是能力边界

好的回退机制不是“主模型失败后随便找一个模型”,而是事先定义哪些动作由谁负责:

动作默认执行者回退条件
点击按钮Jev / 专用策略模型目标元素不存在、状态版本过期
选择日期Jev / 结构化动作模型日历是 Canvas 或状态无法确认
输入城市小型语言模型 + 浏览器输入文本需要生成、改写或纠错
读取航班结果DOM 解析器页面结构异常时转截图/视觉解析
提交订单人工确认或高风险策略任何付款、发送或不可逆操作

这能把模型能力与风险边界同时写进系统,而不是依赖模型临场判断。

六、7 秒和 0.0039 美元应该怎样理解

这两个数字很吸引人,但发布到工程文档时必须把它们放回实验上下文。

时间不是单纯的模型延迟

端到端耗时至少包含:

浏览器启动与页面加载
  + 页面网络请求
  + DOM / Accessibility Tree 读取
  + 动作决策
  + 浏览器动作执行
  + 等待页面状态稳定
  + 结果解析

因此,“7 秒”可能受网络、缓存、航班网站响应、浏览器实例是否预热、动作数量和等待策略影响。复现实验时,必须同时记录模型时间和浏览器时间,而不能只看接口响应时间。

成本也不只等于输出 Token

一次浏览器任务的成本可能包括:

  • 策略模型输入和输出;
  • 文字输入回退模型;
  • 页面内容预处理;
  • 视觉模型调用;
  • 浏览器基础设施;
  • 代理、验证码和重试;
  • 失败任务和人工接管。

原帖公开的 0.0039 美元是一次演示的账单结果。要把它变成可用的成本指标,至少需要补充任务成功率、P50/P95 延迟、平均动作数、回退比例和失败重试次数。

七、浏览器 Agent 的工程化架构

如果要把这类思路接入 GPT88 或自建 Agent 平台,可以将系统拆成六层:

任务层:用户目标、约束、完成标准
  ↓
状态层:DOM、Accessibility Tree、截图、网络和页面事件
  ↓
动作层:动态动作空间、动作 Schema、状态版本
  ↓
策略层:快速动作模型、文字模型、视觉模型
  ↓
执行层:浏览器驱动、等待、重试、取消和权限
  ↓
审计层:轨迹、成本、延迟、失败原因和人工接管

任务层:先定义完成标准

“查航班”不是完整任务定义。至少要明确:

  • 出发地、目的地和日期;
  • 单程还是往返;
  • 是否允许转机;
  • 需要返回哪些字段;
  • 是否只读,还是允许提交;
  • 结果为空时如何处理。

目标越明确,动态动作空间越容易收敛,结果也越容易评测。

状态层:保留原始事实

状态层应该保存可复核的页面事实,而不是只传给模型一个摘要:

  • 页面 URL 和时间;
  • DOM 或可访问性树快照;
  • 截图引用;
  • 网络与加载状态;
  • 当前焦点和输入值;
  • 页面状态版本。

这样发生误点击时,团队能判断是页面识别错、动作生成错,还是浏览器执行错。

执行层:所有副作用动作都要有门禁

读取航班结果可以自动完成;选择日期通常也可以自动完成;但购买、发邮件、提交表单、发布内容和删除数据,必须进入更高等级的风险策略。

只读查询       → 自动执行
可逆筛选       → 自动执行 + 状态校验
外部提交       → 明确确认
付款 / 删除     → 人工确认 + 幂等键 + 审计记录

速度优化不能绕开风险控制。一个每次都很快但偶尔自动下单的 Agent,不是高质量 Agent。

八、如何设计一套可复现的基准测试

不要只录一条“最顺利”的演示视频。建议至少准备四类任务:

测试集目标
标准路径页面稳定、字段清晰、无弹窗
页面变化文案、排序、元素位置或 DOM 结构变化
输入困难多语言、拼写错误、自动补全、日期格式
异常路径超时、空结果、登录过期、弹窗遮挡

每条任务记录:

{
  "task_id": "flight-search-001",
  "success": true,
  "elapsed_ms": 7100,
  "action_count": 8,
  "text_fallback_count": 1,
  "visual_fallback_count": 0,
  "retry_count": 0,
  "estimated_cost_usd": 0.0039,
  "human_takeover": false
}

关键指标至少包括:

  • 任务成功率;
  • P50、P95 和最大耗时;
  • 平均动作数;
  • 文字和视觉回退比例;
  • 无效动作率;
  • 页面变化后的恢复率;
  • 人工接管率;
  • 单次任务成本;
  • 高风险动作拦截率。

只有在这些指标都被记录后,才有资格比较“Jev + Browser Use”和其他浏览器 Agent 路线。

九、对 GPT88 接入的启发

这次演示最值得借鉴的不是某一个模型名字,而是路由思想:让不同模型处理最适合自己的输出形态。

在 GPT88 的统一 API 层,可以把浏览器 Agent 的模型路由做成显式配置:

browser_agent:
  state: dom_first
  action_model: jev-or-validated-fast-policy
  text_model: gpt-6-astra
  vision_model: validated-vision-model
  max_actions: 24
  allow_external_submit: false
  require_confirmation_for:
    - purchase
    - send
    - delete

需要特别注意:上面的模型名是路由示意,不代表 GPT88 控制台一定已经提供同名模型。真正接入前,应通过当前模型目录确认可用 ID、输入输出格式、计费单位和上下文限制。

一个可靠的 GPT88 浏览器 Agent 适配层,还应该记录:

  • 实际使用的模型 ID;
  • 每一步的状态摘要和动作 Schema;
  • 是否发生模型回退;
  • 每次调用的 request ID、耗时和费用;
  • 浏览器页面版本和截图/DOM 快照引用;
  • 用户是否确认过外部副作用。

否则,出现一次“视频里很快、线上却很慢”的问题时,团队无法判断是模型、页面、网络、回退还是重试导致的。

十、常见误区

误区一:7 秒代表所有网页任务都能 7 秒完成

错。它是一个具体演示。登录、验证码、复杂电商页面、动态表格、跨域 iframe、Canvas 应用和慢网络都可能显著增加耗时。

误区二:DOM 优先等于不需要截图

错。DOM 适合结构化交互,截图适合视觉状态。系统应该在两种状态表示之间按需切换。

误区三:策略模型越快,Agent 就越可靠

错。可靠性还取决于状态新鲜度、动作校验、执行回执、重试策略、权限和副作用门禁。

误区四:回退模型越多越好

错。没有明确触发条件的回退会掩盖主模型失败,也会让成本、延迟和输出归属变得不可解释。

误区五:演示视频就是基准测试

错。视频可以证明某次运行发生过,但不能单独证明平均性能、失败率、鲁棒性或生产可用性。

十一、落地检查清单

  • 任务目标、成功标准和只读/写入边界已定义。
  • DOM、可访问性树、截图和网络状态的使用顺序已定义。
  • 动态动作空间只暴露当前任务真正需要的动作。
  • 每个动作包含参数、目标元素、状态版本和风险等级。
  • Jev/快速策略模型与文字模型的职责已分开。
  • 回退触发条件、最大次数和成本上限已记录。
  • 外部提交、付款、删除等动作默认需要确认。
  • 轨迹保存了页面状态、动作、结果、模型 ID 和 request ID。
  • 基准测试覆盖标准路径、页面变化、输入困难和异常路径。
  • 指标包含成功率、P95 延迟、成本、回退率和人工接管率。
  • 线上输出明确标注主模型还是回退模型完成了任务。

来源与边界

原始英文帖子:Gregor Zunic|Browser Use + Jev = Ultrafast。

中文解读帖:AYi_AInotes|Browser Agent 实测:7 秒完成航班搜索。

开源项目:browser-use/jev-ultrafast。

本文保留了两条来源的核心事实和原始演示媒体,并把中文帖中的工程解读与 GPT88 接入建议单独展开。7 秒、0.0039 美元、1 倍速、动态动作空间、DOM 状态和小模型文字回退属于来源披露或来源明确转述;架构图、验收清单和 GPT88 配置示例是本文的工程化整理,不代表原项目的完整内部实现,也不构成所有网页场景的性能保证。