
AI Agent浏览器控制人工智能AI 应用【免费下载链接】jev-ultrafastFastest and cheapest web agent项目地址https://gitcode.com/gh_mirrors/je/jev-ultrafast点击查看免费下载本文基于 docs/performance.md 的官方测量记录结合仓库源码剖析 jev-ultrafast 如何把一个自然语言目标 动态操作/元素选择 小模型文本生成的浏览器 Agent 跑进7 秒级包含一次严格的对照实验设计匹配运行对比、时间开销的去向分解、独立结果验证的方式以及当前实现的明确边界。读完你将掌握这套性能报告的测量口径、底层优化手段快照、守卫、等待策略、文本替换与可复现的检查流程并能据此自行评估或复刻同类 Agent 的性能。核心事实来源原始性能报告 docs/performance.md、配套测量 JSONdocs/flights-measurement.json、docs/full-speed-measurement.json、docs/flights-prepared-measurement.json、docs/measurement.json以及核心实现 jev_ultrafast/agent.py、jev_ultrafast/snapshot.js、jev_ultrafast/browser.py、jev_ultrafast/model.py。导读一次 7 秒级真实网页任务意味着什么je v-ultrafast 的当前演示在7.073 秒1× 速度内完成了 Google Flights 的真实查询任务从一条自然语言目标出发全程使用动态控件——由 TypeSafe 的 Jev 在一次请求中同时选择操作 目标元素只有在操作为TYPE_TEXT时才由 Mercury 小模型生成城市字符串。整个视频帧未做加速、无开场停顿、计时从首页初始观察后的第一次预测开始、到最终接受的DONE选择结束期间包含了模型请求、浏览器执行、页面加载与被丢弃的过期决策。本文要回答三个问题这个数字是怎么测出来的测量口径与对照设计时间到底花在了哪里耗时构成为了更快它改了什么底层机制每个问题都能在仓库源码与测量 JSON 中找到一一对应的证据。测量环境与对照实验设计报告中的优化版更快并非随口一说而是建立在可控输入的交替对照实验上。原文定义的匹配运行条件如下任何复现都必须满足六轮交替运行3 轮原始版本baseline 3 轮优化版本candidate交替执行共 6 次同一个任务、同一个已有 Chrome 配置profile任务为Find one-way flights from Zurich to London on September 20, 2026, for one adult in economy. Stop when matching flight options are visible. Do not select or book a flight.任务哈希记录于 docs/full-speed-measurement.json 的task_hash字段两端使用相同的自然语言目标、独立的结果校验器、1120×780 视口、TypeSafejev-1.13.0、inception/mercury-2.5文本模型、关闭文本推理、相同的 action/request 预算两次计时均排除初始导航每次运行各自创建并关闭自己的标签页6 次尝试全部计入未发生任何 provider 失败或校验失败原文All six attempts are included; no provider or verification failures occurred。匹配运行对比表原文数据配对原始运行时间优化运行时间校验结果111.214 s6.964 s双双通过28.984 s7.913 s双双通过39.450 s7.092 s双双通过中位数9.450 s7.092 s3/3 各自通过优化版本在三对中全部更快任务时间中位数降低25.0%9.450 s → 7.092 s、TypeSafe 请求中位数从22 → 17、浏览器协议调用CDP 调用中位数从1,092 → 101——后者是数量级的下降这与源码中一次浏览器快照读完整页控件的设计直接对应。报告对结论强度非常克制这点值得强调3 对数据不足以构成强统计结论双侧符号检验 p 0.25。这是一次受控输入的小型对照比较不是广义 Agent 基准Google、网络响应、路由与浏览器缓存仍是活的未冻结。版本与可追溯性原始对照臂是冻结源码commit68c077bf79caca4e817b8e8a5854b2efa0c81ff6。两臂均使用 Mercury 作为文本模型因此运行时间对比不会把辅助模型更换混入代码变更。每次运行的源码哈希source_hashes覆盖 jev_ultrafast/questions.py、jev_ultrafast/agent.py、jev_ultrafast/model.py、jev_ultrafast/browser.py 等、模型设置、token 计数、辅助模型成本、浏览器版本、协议调用计数与校验结果全部记录在 docs/full-speed-measurement.json 中。对照实验中的差异可以从source_hashes直接读出baseline 臂的browser.py哈希为d2b0e468c2dac3f4d3cbba51f3619fe26fe44fb1554446363d8d1aff5efe22f2而 candidate 臂的browser.py为6ef6c0cf9041f648c49bb09adf6b83d73ba301de5e87ffdeb03b0a4ce9e487ab并且 candidate 臂多出snapshot.jse50473501c8fb8e70f3b21866d987393e3f2315c639d638bd477d170e81ed78d——正是原子 DOM 快照这一核心优化的引入点。时间都花在哪里耗时构成与机制改进原文用一段高度浓缩的文字概括了优化的本质这里结合源码逐条展开。旧循环为什么慢无效决策 重复读取可访问性树 海量 DOM 节点解析The original loop invalidated decisions on every DOM mutation, including animations. It also read the accessibility tree repeatedly and resolved hundreds of DOM nodes.旧的观测路径每次 DOM 变化包括动画都判定决策失效需要重新预测反复读取完整的可访问性树AX tree并解析数百个 DOM 节点。这些成本在 docs/full-speed-measurement.json 的 baseline 运行 CDP 计数里一目了然CDP 方法baseline 单次典型计数candidate 单次典型计数Accessibility.getFullAXTree300DOM.resolveNode8280Runtime.evaluate146–15871–77DOM.getBoxModel/DOM.getNodeForLocation各 100baseline 每轮都要拉全量 AX 树 30 次、resolveNode828 次candidate 臂完全没有getFullAXTree、DOM.resolveNode、getBoxModel、getNodeForLocation调用只保留Runtime.evaluate执行快照脚本和输入事件Input.dispatchMouseEvent/Input.dispatchKeyEvent/Input.insertText。新快照一次浏览器调用读完全部常见控件The new snapshot reads common HTML/ARIA controls in one browser call.对应实现是 jev_ultrafast/snapshot.js 的 IIFE一次Runtime.evaluate内完成节点身份缓存window.__jevFast持有WeakMap真实节点 → 代码自有的递增 ID与MapID → 活节点引用被替换的元素获得新 ID、断开的引用被剪除、导航后由cache.pageKey()基于performance.timeOrigin等信号重启缓存。这些 ID 不是 CDP 后端节点 ID而是代码自有的、用于执行时找回真实节点的身份角色识别显式role优先其次按标签回退BUTTON/SUMMARY→buttonA→linkSELECT→comboboxINPUT[typecheckbox|radio]→checkbox/radiotext/email/url/tel→textbox 等见role(e)名称解析name(e)按顺序尝试aria-labelledby引用、aria-label、label、按钮value、alt、子文本、title、placeholder——这是常见 HTML/ARIA 控件而非完整 accessible-name 算法见文末限制可见性与安全过滤跳过aria-hidden/inert祖先、checkVisibility不可见、:disabled、aria-disabled、密码/文件/隐藏输入以及中心点落在视口外的元素操作展开可编辑元素textbox/searchbox/spinbutton或可编辑 combobox生成fill与clickOpen …两类操作原生SELECT为每个未选中选项生成带元素/选项索引的select操作滚动与WAIT作为控制操作追加可见文本提取用 TreeWalker 收集视口内可见文本上限 6000 字符——离屏的文章正文和页脚不会灌进模型上下文语义标记marker与page_key用于页面新鲜度比较见下节快照同时返回guards每个目标元素的上下文守卫快照。脚本尾部把操作列表截断到250 个候选omitted_actions记录被截断数量被截断的候选不可被选择——这是 docs/design.md 中最多保留 250 个动作候选在快照层的落实。快照脚本的调用链见 jev_ultrafast/browser.py 的browser_operationevaluate(READ_STATE)随后用fingerprint()对url/text/actions/scroll计算 SHA-256 指纹。点击守卫比较选中目标与邻近上下文而非无差别重预测Click guards compare the selected target and nearby context, plus document/form state.jev_ultrafast/snapshot.js 的cache.guard(e)生成每个目标元素的守卫签名节点 ID、角色、名称、value/checked/selectedIndex/readOnly、:disabled、aria-disabled、aria-expanded/aria-checked/aria-selected、href以及作用域内最多 6000 字符的innerTextclosest(form,dialog,[roledialog],article,li,tr,[rolerow])。执行前jev_ultrafast/browser.py 的fresh(page, action)对 click/select 目标比较[pageKey, guard]对其它操作比较marker——即语义状态比较而非 DOM 变更计数。文档明确这是实用启发式而非证明守卫按作用域设计有意允许无关的可见更新通过。执行前的最终检查在browser_operation的act分支重新解析目标节点、验证isConnected、可点性、当前几何getBoundingClientRect中心点、elementFromPoint命中测试若被遮挡则抛StalePage重新观察。这正是原文说的Current geometry and hit-testing still run before input。等待策略autocomplete 到达后才做决策A brief event-based combobox wait lets suggestions arrive before asking Jev to choose from an incomplete popup.对应 jev_ultrafast/browser.pyobserve()开头的after_input逻辑交互后下一次观测前先等待至多两个动画帧或 50ms对可编辑 ARIA combobox 的fill则改为等待aria-controls/aria-owns指向的弹层中出现可见的[roleoption]上限 200mssetTimeout(finish, autocomplete ? 200 : 50)。这样避免了在 autocomplete 弹层尚未渲染完时就付费做一次预测的浪费。显式WAIT操作本身固定 100ms录制不做网络加速network loading is never fast-forwarded。文本生成是真的 LLM 输出Text comes from an actual LLM: the recorded run generatedZurich in 581 msandLondon in 346 ms.docs/flights-measurement.json 的text_calls记录了两次调用Where from?字段生成 Zurichlatency 581msWhere to?字段生成 Londonlatency 346ms模型均为inception/mercury-2.5。底层实现见 jev_ultrafast/model.py 的field_text()发送TEXT_VALUE系统提示要求返回恰好一个键text的 JSON 对象不输出注释/代码/浏览器动作缺失值返回{text: null}解析后校验set(output) {text}、非空、长度 ≤ 2000任何不符合都什么都不输入。代码不提取引号内字面量——早期原型复制引号字符串的捷径已被移除docs/design.md 的What changed after the first demo。文本替换的修复同样有源码对应fill分支先派发Input.dispatchKeyEventkeya、commands:[selectAll]显式触发浏览器的 select-all 命令再用Input.insertText插入文本因此现有输入内容会被替换而非追加。modifiers按平台区分darwin4 即 Meta其余2 即 Ctrl。失败路径的收尾修正After the timed runs, native-select interruption handling was tightened: uncertain mutation results stop instead of being treated as retryable stale reads.在计时与录制完成之后原生SELECT的中断处理被收紧当Runtime.evaluate在actselect时抛出异常现在直接抛RuntimeError(Dropdown execution was interrupted; inspect before retrying.)——因为 change 事件可能已经触发不能再当作可重试的过期读。该路径由离线故障注入与本地浏览器检查覆盖Flights 任务本身不使用原生 SELECT其计时与录制哈希保持不变docs/full-speed-measurement.json 的final_source_note有同样声明。主录制的内容细节当前主演示录制的测量docs/flights-measurement.json包含17 次 Jev 请求、10 次交互 1 次显式 WAITbrowser_actions: 11、2 次文本辅助调用Jev 延迟中位数178 ms搜索在5.217 s执行Search点击见actions数组executed_ms: 5217最终校验完成7.073 s——最后一段间隔包含 Google 结果加载、状态变化与完成决策保留在视频中随后是一次WAIT与DONE计时口径从首页初始观察后的第一次预测开始到被接受的 DONE 选择结束包含文本生成、模型请求、浏览器工作、过期决策与加载浏览器启动、初始导航、独立的运行后校验都在时钟之外视频规格186 帧连续屏幕录制 初始截图使用原始时间戳无开场停顿0.5 秒结尾停顿仅裁剪顶部账户/导航条Token 与成本全部请求累计90,558 TypeSafe 输入 token / 6,325 输出 tokenOpenRouter 报告两次文本调用花费$0.00006272——这只是文本辅助成本不是总任务成本TypeSafe 响应只含 token 计数、不含计费美元金额浏览器成本也被排除。动作时间线从 docs/flights-measurement.json 的actions数组提取elapsed_ms均为相对计时起点步骤操作目标生成文本文本延迟相对时刻1CLICKChange ticket type · Round trip——0.372 s2CLICKOne way——0.725 s3TYPE_TEXTWhere from?Zurich581 ms1.770 s4CLICKZürich, Switzerland自动建议——1.959 s5TYPE_TEXTWhere to?London346 ms2.875 s6CLICKLondon, United Kingdom自动建议——3.085 s7CLICKOpen Departure——3.520 s8CLICKSunday, September 20, 2026——3.810 s9CLICKDone · Search…——4.136 s10CLICKSearch——5.320 s11WAITWait for the page to update——5.594 s注意第 3、4 步的模式TYPE_TEXT生成城市名后必须再点击匹配的自动建议条目Zürich, Switzerland / London, United Kingdom这正是 jev_ultrafast/questions.pyNEXT_ACTION规则中的A typed query still needs its matching autocomplete suggestion selected。text_latency_ms字段把文本生成延迟与决策延迟latency_msJev 返回延迟分开记录便于复核算力去向。其它独立检查同一策略、不同任务除 Google Flights 外同一策略还通过了两个独立检查这些是单独的冒烟检查不是匹配的速度对照任务耗时独立结果Wikipedia打开哥德尔不完备定理词条2.798 s精确的文章 URL本地酒店 fixture搜索 Lisbon、Design、Free cancellation、打开 Casa Flora1.896 s酒店属性 三个筛选全部生效本地浏览器检查覆盖被移动/替换/隐藏/禁用的控件、字段与复选框属性、改变的邻近上下文、遮罩overlay阻挡、原生 select 执行、真实文本替换、autocomplete 到达、导航。离线测试覆盖模型契约、过期重试、中断的变更、辅助模型校验、独立行程校验——对应 tests/test_agent.py如test_invalid_choice_is_rejected参数化校验非法 TypeSafe 响应、test_one_index_per_node_with_operation_specific_targets验证每节点一个索引 按操作分目标、以及test_all_heads_are_one_request_and_only_matching_head_executes验证所有头部同一次请求、只有匹配的操作头能执行。另有一组早期的 fixture 基线docs/measurement.json作者编写的酒店 fixture 完成 5 个动作平均约1,086 / 1,242 / 1,311 ms每轮 6 次 Jev 调用该数字不是 Google Flights 结果使用 GLM 生成文本的单独 fixture 运行耗时 4,650 msz-ai/glm-5.3-flash生成 Lisbon。开发历程被保留的迭代尝试原文明确区分变更代码的开发尝试与上面的匹配对照冻结候选之前原始运行时有一次通过9.302 s两个可访问性树 / 语义守卫候选9.395 s、10.157 s第一个直接 DOM 候选8.697 s 但因名称/值提取不完整而独立校验失败递归 label 与 combobox 值修复后后续已验证诊断依次为 8.051、8.631、8.395、8.385、7.741 s一个 Mercury 诊断通过7.559 s。文本辅助模型的小规模探针用两个真实航班字段上下文、以 Gemini 2.5 Flash Lite、Gemini 3.1 Flash Lite 与 Mercury 2.5 各调用六次调用全部返回了正确值Mercury 随后通过了实时 Flights、Wikipedia 与本地筛选检查。这不建立普遍语义准确性——更早的探针曾拒绝一个交换了出发/目的地的模型以及一个输出评论而非合法 JSON 的模型。任何自行接入文本模型的人都会遇到同样的校验防线jev_ultrafast/model.py 的validate_choice()严格检查 choice 是否在候选中、概率集合与候选一致、概率非负且和为 1、置信度 ∈ [0,1]不合法直接抛错且不执行任何动作。更早的 11.387 秒录制与录制后 12.898 秒的策略回归记录在冻结提交68c077bf…的原始性能报告本文顶部已给出该提交哈希与对比 JSON旧的预置步骤原型保留在 docs/performance-prepared.md其 12.884 秒录制、17 次 Jev 请求、0 次文本生成调用等细节见该文件原始时间戳帧保留在忽略的本地产物中。限制这个速度的边界在哪里报告在最后用一整节划清能力边界必须如实保留DOM 读取器支持常见 HTML 与 ARIA 控件不实现完整 accessible-name 算法不遍历 shadow roots 与 framesjev_ultrafast/snapshot.js 的name(e)顺序即证据作用域化的点击守卫有意允许无关的可见更新——这是实用启发式Canvas、上传、新标签页、嵌套滚动、任意键盘组件仍不支持合法操作仍可能出错模型可能选择合法但错误的目标DONE永远不是独立的成功证据——每次运行都依赖独立的运行后校验见测量 JSON 的verification字段search_page / one_way / origin / destination / date / year / results 七项检查全true并附可见航班文本快照。原文反复强调的定位是This is a small controlled-input comparison, not a broad agent benchmark——三对交替运行、单一浏览器 profile、一个任务、实时网站。任何将 7.073 s 泛化为通用 Agent 性能的引用都超出该文档的声明范围。如何自行复核与复现仓库提供了完整的复核工具链全部为只读、可离线或可控成本执行离线模型契约测试uv run pytesttests/test_agent.py不调用付费 API覆盖非法响应拒绝、每节点单索引、单请求多头部、过期重试、文本缓存失效、缺失凭据、等待与最终行程校验uv run ruff check .、node --check jev_ultrafast/snapshot.js为配套静态检查见 README.md 的 Development 节本地浏览器守卫检查uv run python scripts/check_guards.py在无模型调用的情况下于本地浏览器中检查真实控件移动/替换/隐藏/禁用、遮罩、原生 select、真实文本替换、autocomplete 到达、导航录制与渲染scripts/record_flights.py new-folder捕获原始浏览器时间戳scripts/render_demo.py recording-folder以 1× 渲染已验证的运行并裁掉 Google 账户条——两者都对应本文描述的计时口径初始观察后起表、独立校验收尾、无开场停顿、0.5 秒结尾停顿库调用方式uv run --env-file .env python examples/flights.py --keep-open执行航班搜索、检查实际路线/日期/结果并保存 trace不选择或预订航班通用任务可用examples/run.py --url … --goal …README.md 的 Use the library 节。复现测量的前提当前仓库实际内容为准TypeSafejev-1.13.0决策模型、OpenRouter 上的inception/mercury-2.5文本模型TEXT_MODEL_REASONINGnone关闭推理、TEXT_MODEL_BASE_URLhttps://openrouter.ai/api/v1、Chrome/152 系浏览器、1120×780 视口、已有 Chrome profile这些参数逐条记录在 docs/full-speed-measurement.json 的configuration与browser_version字段。对照实验如需与冻结基线对齐需检出68c077bf79caca4e817b8e8a5854b2efa0c81ff6版本源码。结论7.073 秒是一个可追溯、可复算的数字——它由冻结基线对照、独立的七项结果校验、逐请求的 CDP/token/latency 明细与明确的计时边界共同支撑。速度的来源不是更聪明的预测而是把循环里每一次决策的开销削薄一次快照读全页、语义守卫代替无差别重预测、autocomplete 等 200ms、文本由小模型生成并用 select-all 原生替换。理解这些机制与边界比记住一个秒数更有价值。赞分享AI Agent浏览器控制人工智能AI 应用【免费下载链接】jev-ultrafastFastest and cheapest web agent项目地址https://gitcode.com/gh_mirrors/je/jev-ultrafast点击查看免费下载相关推荐jev-ultrafast 浏览器智能体7.1秒搜遍Google Flights航班实测演示全流程深度解读jev ultrafast 浏览器智能体7.1秒搜遍Google Flights航班实测演示全流程深度解读 jev ultrafast 是一个主打“最快、最AI Agent浏览器控制人工智能AI 应用jev-ultrafast做不到什么浏览器Agent的能力边界、已知限制与路线图清单jev ultrafast做不到什么浏览器Agent的能力边界、已知限制与路线图清单 jev ultrafast 是目前速度最快、成本最低档的开源浏览器AgeAI Agent浏览器控制人工智能AI 应用Jev Ultrafast 深度指南一个动态、带索引动作空间的浏览器 Agent 是如何把决策延迟压到 7 秒级的Jev Ultrafast 深度指南一个动态、带索引动作空间的浏览器 Agent 是如何把决策延迟压到 7 秒级的 本指南以仓库根目录 README.md hAI Agent浏览器控制人工智能AI 应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考