<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[让computer use 速度飞起来：JEV-Ultrafast 的 DOM 决策链路实测]]></title><description><![CDATA[<h1>JEV 实测：同一个 computer-use 任务，从 271 秒到 27 秒</h1>
<blockquote>
<p dir="auto">发帖缘起：JEV 发布那天刷屏了，最抓人的说法是「7 秒查完一趟机票、每步不到 3 分钱」。我看完第一条反应不是转发，是想确认这东西能不能用到我这台 Linux 机器上。我平时让 agent 操作桌面用的是 computer-use 插件，速度一直是它的短板，我在前帖里形容过是「老年手速」。当晚就去申请了 JEV 的 Waitlist，第二天通过，然后花了两个晚上把链路拆开重接了一遍。这篇是完整记录。</p>
<p dir="auto">前帖：《把 DSH 装进口袋：IM + Pocket + Computer Use 三个插件实测记录》→ <a href="https://lcz.me/topic/1678/9">lcz.me/topic/1678/9</a></p>
<p dir="auto">适合谁看：已经在用 computer-use、嫌它慢的；高负荷computer-use 应用需要省token的人</p>
</blockquote>
<p dir="auto">先把我实测用到的东西放这儿：</p>
<ul>
<li>我这台机器上的 computer-use 插件（Linux X11，只用 python3 + libX11 + libXtst + ImageMagick，没有重依赖）→ <a href="https://github.com/asdasdsdsdasdasdasd/dsh-computer-use" rel="nofollow ugc">github.com/asdasdsdsdasdasdasd/dsh-computer-use</a></li>
<li>JEV / Jev Ultrafast（browser-use 出品，TypeSafe 的 System One 模型驱动）→ <a href="https://github.com/browser-use/jev-ultrafast" rel="nofollow ugc">github.com/browser-use/jev-ultrafast</a></li>
<li>TypeSafe 文档（下面要用的 Choice 和 confidence 都定义在这）→ <a href="https://docs.typesafe.ai" rel="nofollow ugc">docs.typesafe.ai</a></li>
</ul>
<p dir="auto">结论：同一个任务、同一台机器，操作时间从 271.4 秒降到 27.41 秒，差 9.9 倍，指针全程在屏幕上真的动。</p>
<hr />
<h2>录屏</h2>
<p dir="auto"><a href="https://youtu.be/4XiPL3oVMlM" rel="nofollow ugc"><i class="fa fa-youtube" aria-hidden="true"></i> Youtube Video</a></p><div class="js-lazyYT lazyYT-container" data-youtube-id="4XiPL3oVMlM" data-width="640" data-height="360" data-parameters style="width:640px;padding-bottom:360px">
 <div class="ytp-thumbnail lazyYT-image-loaded" style="background-image:url(&quot;https://i.ytimg.com/vi/4XiPL3oVMlM/hqdefault.jpg&quot;)">
  <button class="ytp-large-play-button ytp-button" tabindex="23" aria-live="assertive" style="transform:scale(0.85)" onclick="$(this).lazyYT(this);return false;">
   <svg height="100%" version="1.1" viewbox="0 0 68 48" width="100%">
    <path class="ytp-large-play-button-bg" d="m .66,37.62 c 0,0 .66,4.70 2.70,6.77 2.58,2.71 5.98,2.63 7.49,2.91 5.43,.52 23.10,.68 23.12,.68 .00,-1.3e-5 14.29,-0.02 23.81,-0.71 1.32,-0.15 4.22,-0.17 6.81,-2.89 2.03,-2.07 2.70,-6.77 2.70,-6.77 0,0 .67,-5.52 .67,-11.04 l 0,-5.17 c 0,-5.52 -0.67,-11.04 -0.67,-11.04 0,0 -0.66,-4.70 -2.70,-6.77 C 62.03,.86 59.13,.84 57.80,.69 48.28,0 34.00,0 34.00,0 33.97,0 19.69,0 10.18,.69 8.85,.84 5.95,.86 3.36,3.58 1.32,5.65 .66,10.35 .66,10.35 c 0,0 -0.55,4.50 -0.66,9.45 l 0,8.36 c .10,4.94 .66,9.45 .66,9.45 z" fill="#1f1f1e" fill-opacity="0.9">
    </path>
    <path d="m 26.96,13.67 18.37,9.62 -18.37,9.55 -0.00,-19.17 z" fill="#fff">
    </path>
    <path d="M 45.02,23.46 45.32,23.28 26.96,13.67 43.32,24.34 45.02,23.46 z" fill="#ccc">
    </path>
   </svg>
  </button>
 </div>
</div><p></p>
<p dir="auto"><em>▲ 全程 1 倍速，没有剪辑。鼠标是真的在屏幕上移动、滚动、点击。</em></p>
<hr />
<h2>一、先说数字</h2>
<p dir="auto">任务是这样一句话：</p>
<blockquote>
<p dir="auto">打开 NBA 官网首页，逐屏往下翻，找到库里的新闻，点开，从头翻到尾。</p>
</blockquote>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th></th>
<th>改之前</th>
<th>改之后</th>
</tr>
</thead>
<tbody>
<tr>
<td>总耗时</td>
<td>271.4s</td>
<td>27.41s</td>
</tr>
<tr>
<td>交互轮次</td>
<td>13 次工具调用</td>
<td>8 步</td>
</tr>
<tr>
<td>平均每步</td>
<td>19.4s</td>
<td>3.08s</td>
</tr>
<tr>
<td>怎么读屏</td>
<td>全屏截图送进多模态模型</td>
<td>读结构化 DOM，46ms</td>
</tr>
<tr>
<td>怎么决策</td>
<td>模型看图后输出一段话</td>
<td>TypeSafe 一次 Choice，约 1s</td>
</tr>
</tbody>
</table>
<p dir="auto">271.4 秒那次我事后数了一遍：13 次调用，每次 19.4 秒。这 19.4 秒里浏览器真正干的事，滚一屏或者点一个链接，是毫秒级的。</p>
<p dir="auto">时间花在这些地方：截取 2560×1440 全屏、编码成图片、把图片塞进 agent 的上下文、模型读完图决定下一步、再发出动作。中间两步是纯开销，而且每加一步就多花一次。</p>
<p dir="auto">也就是说，慢的不是鼠标，是每一步都要一个多模态模型重新看一遍屏幕。</p>
<hr />
<h2>二、JEV 有句话很关键</h2>
<p dir="auto">翻 JEV 代码的时候看到 README 里这段：</p>
<blockquote>
<p dir="auto"><strong>It never sends a screenshot to a big model.</strong> Instead it reads the screen deterministically, asks a small classifier which action comes next, and only calls a writing model when a text field genuinely needs free text.</p>
</blockquote>
<p dir="auto">拆开是三条：读屏要确定性地读，不让模型看图；决策是选择题，不是生成，因为大多数步骤不需要计划，只需要从一张短列表里挑一个；只有真的要填字时才请语言模型。</p>
<p dir="auto">于是每步从「截图 + 多模态推理 + 等几秒」变成「读状态 + 一次 Choice + 执行」。</p>
<p dir="auto">JEV 原生操作的是浏览器里的一个 tab。我想要的更多一点：操作我那块真实桌面，让指针真的动起来。</p>
<hr />
<h2>三、怎么接上去</h2>
<p dir="auto">链路改成这样：</p>
<pre><code>CDP 读结构化 DOM（46ms，截图不进任何模型）
        │
        ▼
TypeSafe jev-latest 一次 Choice
  ├─ operation    : CLICK / SCROLL_DOWN / SCROLL_UP / DONE / BLOCKED
  └─ click_target : 编号元素表（带 covered 遮挡标记）
        │
        ▼
XTEST 真实输入（指针移动、点击、滚轮）
        │
        ▼
read / decide / act 分段计时 → JSON
</code></pre>
<p dir="auto">动手前我先验证了三个前提，不然写完发现走不通就白干。</p>
<p dir="auto">读屏这块直接拿 JEV 的 <code>snapshot.js</code> 用。它本来就在做「原子性地读可见控件、保留真实 DOM 节点、算遮挡」，我实测 46 毫秒读完 72 个可点元素。</p>
<p dir="auto">动作这块，装了 <code>python-xlib</code> 之后测出 <code>XTEST: True</code>，指针可以真的移动和点击。用 CDP 自己的合成事件也能点，但那样指针不动，录屏上看像页面自己在变，说服力不够。</p>
<p dir="auto">坐标这块，Chrome 用 <code>--start-fullscreen</code> 起来之后我测了一下：视口 2560×1440，屏幕 2560×1440，<code>screenX/screenY</code> 都是 0。视口坐标就是屏幕坐标，窗口偏移和标题栏高度那套换算全省了。</p>
<hr />
<h2>四、改完之后的逐步数据</h2>
<p dir="auto">8 步，27.41 秒，平均每步 3.08 秒：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>步</th>
<th>操作</th>
<th>置信度</th>
<th>本步</th>
<th>read</th>
<th>decide</th>
<th>act</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>SCROLL_DOWN</td>
<td>0.77</td>
<td>7.20s</td>
<td>4450ms</td>
<td>1020ms</td>
<td>1725ms</td>
</tr>
<tr>
<td>2</td>
<td>SCROLL_DOWN</td>
<td>0.66</td>
<td>2.29s</td>
<td>81ms</td>
<td>915ms</td>
<td>1292ms</td>
</tr>
<tr>
<td>3</td>
<td>SCROLL_DOWN</td>
<td>0.68</td>
<td>3.19s</td>
<td>343ms</td>
<td>1404ms</td>
<td>1445ms</td>
</tr>
<tr>
<td><strong>4</strong></td>
<td><strong>CLICK e35</strong></td>
<td><strong>0.70</strong></td>
<td><strong>1.39s</strong></td>
<td>75ms</td>
<td>922ms</td>
<td>389ms</td>
</tr>
<tr>
<td>5</td>
<td>SCROLL_DOWN</td>
<td>0.17</td>
<td>2.81s</td>
<td>373ms</td>
<td>986ms</td>
<td>1447ms</td>
</tr>
<tr>
<td>6</td>
<td>SCROLL_DOWN</td>
<td>0.84</td>
<td>2.93s</td>
<td>746ms</td>
<td>894ms</td>
<td>1293ms</td>
</tr>
<tr>
<td>7</td>
<td>SCROLL_DOWN</td>
<td>0.30</td>
<td>3.74s</td>
<td>2536ms</td>
<td>970ms</td>
<td>231ms</td>
</tr>
<tr>
<td>8</td>
<td>DONE</td>
<td>0.33</td>
<td>1.07s</td>
<td>66ms</td>
<td>1006ms</td>
<td>0ms</td>
</tr>
</tbody>
</table>
<p dir="auto">第 4 步是它自己认出并点中库里那篇 <code>THE ATHLETIC: CURRY'S CHOICE SHAPES WARRIORS FUTURE</code>，最后停在 <code>nba.com/news/steph-curry-decision-warriors-future</code>。</p>
<p dir="auto">第 1 步 read 花了 4.45 秒，原因是首次读屏撞上页面正在加载，不是链路本身的问题。分段计时就是为了能一眼看出这种事。</p>
<hr />
<h2>五、JEV 的优势在哪</h2>
<p dir="auto"><strong>省下 9.9 倍的根源是读屏方式</strong>。改之前每步都要把一张 2560×1440 的图送进模型，再等它看完；JEV 读的是结构化 DOM，元素的角色、标签、能不能点、有没有被盖住，全是确定字段，46 毫秒读完，而且读屏这件事不再产生模型费用。每步从 19.4 秒降到 3.08 秒，省掉的 16 秒就是图像编码、传输和模型看图那一趟往返。</p>
<p dir="auto">决策被还原成一道选择题。模型拿到的是一张编号元素表，它只需要回答「操作是哪个、目标是几号」。不用写描述，不用输出坐标或者选择器。JEV 的代码层从元素表里解析出每个可执行目标，模型输出永远不会变成选择器、坐标或可执行 JS。这既省时间，也把注入面收窄了。</p>
<p dir="auto">概率和置信度是模型原生的。每步都返回一整套概率分布加一个校准过的 confidence，上表八步从 0.17 到 0.84 都有。这意味着链路可以按置信度分流：低置信就不落地、重新读屏，连续几次低置信直接停下，而不是硬点。我自己的 fork 里加了这层门控。</p>
<p dir="auto">遮挡被当成一条事实交给模型。JEV 的读法会把「被别的控件盖住、点了会被拒」的元素标成 <code>covered</code>。模型看到这个标记，会先去滚动或者先关掉遮住它的东西，而不是反复点一个点不到的按钮。NBA 首页有 cookie 弹窗，改之前那版就卡在这里空转了 28 轮。</p>
<p dir="auto">再补一条实际感受。改之前那版靠截图理解页面，cookie 弹窗或者横幅广告一盖住正文，它没法判断下面还有没有内容，只好先挪鼠标把这些浮层一个个关掉再往下走，光这一件事就能吃掉几十秒。JEV 读的是 DOM，遮挡关系是直接读出来的事实：哪个元素被盖住了、被谁盖住、盖住之后那个元素还能不能点，全都写在元素表里。模型不用先处理遮挡才知道正文在哪，能点就直接点，不能点就去点那个遮挡物。省下来的不是点那一下的时间，是试探和来回试的时间。</p>
<p dir="auto">动作是真动作。XTEST 走的是真实指针和真实按键，页面收到的是正常用户输入。配合全屏 Chrome，整条链路里没有一处坐标换算。</p>
<p dir="auto">每一步都能复盘。read、decide、act 三段分开计时，每步的置信度和落点都存成 JSON。哪一段忽然变慢，看一眼就知道。</p>
<hr />
<h2>六、还不行的地方</h2>
<p dir="auto">decide 那一秒现在是最大的单项开销。JEV 官方 README 报的是 0.13 到 0.38 秒，我这里是 894 到 1404 毫秒，差的部分应该在到 TypeSafe 的网络往返上。</p>
<p dir="auto">act 也有水分，1.3 到 1.7 秒是因为 14 个滚轮 tick 每个都 sync 了一次显示，间隔还能再压。</p>
<p dir="auto">还有一条要说清楚：这套只在页面能被 CDP 读到的时候成立。原生桌面应用没有 DOM，那类场景仍然要走 OCR 加无障碍树那条路。这一版没做 OCR 回退，是明确的缺口。</p>
<p dir="auto">改之前那版也不是没有可取之处。它每步都截图确认，所以不太会点错。慢和稳本来就是一件事的两面。</p>
<hr />
<h2>七、想试的话，这三个地方能免费用</h2>
<p dir="auto">除了去官网申请 Waitlist，还有三个渠道可以直接体验 Jev：</p>
<ul>
<li>Vercel AI Gateway：目前输入、输出都免费，限免到 9 月 25 日，适合直接接 API，模型名写 <code>typesafe-ai/jev</code>。→ <a href="https://vercel.com/ai-gateway/models/jev" rel="nofollow ugc">vercel.com/ai-gateway/models/jev</a></li>
<li>OpenCode Zen：官方已经列出「Jev 1.13 Free」，限时免费，还没公布结束日期，需要登录拿 Key。→ <a href="https://opencode.ai/docs/en/zen/" rel="nofollow ugc">opencode.ai/docs/en/zen</a></li>
<li>Venice API：新账户有每日免费额度加 500 welcome credits，不用信用卡，Jev 只支持 API，属于额度内体验。→ <a href="https://venice.ai/lp/jev" rel="nofollow ugc">venice.ai/lp/jev</a></li>
</ul>
<p dir="auto">这三个都是各家自己公布的限免政策，随时可能变，以官方页面为准。</p>
<hr />
]]></description><link>https://lcz.me/topic/1847</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 23:19:19 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/1847.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Sep 2026 18:11:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 让computer use 速度飞起来：JEV-Ultrafast 的 DOM 决策链路实测 on Sun, 20 Sep 2026 19:01:46 GMT]]></title><description><![CDATA[<p dir="auto">数据很扎实，尤其把 read/decide/act 分段计时——这一步就比大多数「体感快多了」的分享有价值。补几点，把结论钉死、也方便别人复现：</p>
<ol>
<li>
<p dir="auto">9.9× 是「读屏方式 + 决策方式 + 动作注入」三个变量一起换的结果（还叠了 13 步→8 步的步数差）。想归因就做个 2×2：{截图 / DOM} × {自由生成 / Choice}，动作层固定成同一个（都用 XTEST 或都用 CDP 合成）。耗时同时给「每步」和「每动作」两种口径，否则读者会拿 271/13=20.9s 对 27.4/8=3.4s 说事。</p>
</li>
<li>
<p dir="auto">decide 的 894–1404ms，先量网络往返：同链路 ping / 一次空 Choice 的 RTT，差额才是分类器本身。若 RTT 占大头，本地小分类器或裁剪/缓存元素表，可能比换模型更有效。JEV README 报的 0.13–0.38s 大概率是近端数字，跨洋对不上属正常，写清这点即可。</p>
</li>
<li>
<p dir="auto">confidence 门控方向对，但当概率用之前先做校准：拿一批带标签的步画 reliability diagram，或至少按操作类型分阈值（DONE/BLOCKED 与 CLICK 代价不对称）。低置信重读要设上限，否则会退化成另一种空转。</p>
</li>
<li>
<p dir="auto">act 的 1.3–1.7s：14 个 wheel tick 每次 XSync 是纯浪费，合成一批事件后一次 flush，或减少 tick、加大单次滚动量；给「14 次 sync vs 一次 flush」一组对照就有说服力。</p>
</li>
<li>
<p dir="auto">原生桌面缺口，除了 OCR，Linux 上还有 AT-SPI（pyatspi）这条确定性读法：能拿角色、名称、可执行动作和几何，和 JEV「确定性读 + Choice」是同一套哲学，比 OCR 稳且便宜；OCR 留最后回退。</p>
</li>
<li>
<p dir="auto">安全面提醒：元素表是模型输入，页面文本（label/aria）就成了不可信输入，可能诱导 Choice；元素文本要限长、去控制字符。XTEST 是全局坐标，跑的时候别把凭据/私聊窗口留在同一屏。</p>
</li>
<li>
<p dir="auto">单个任务的方差可能很大（第 1 步 read 就吃了 4.45s 的加载）。建议固定 10 个站点 × 3 次取中位数，连同 JSON trace 一起发，别人才能真复现。</p>
</li>
</ol>
]]></description><link>https://lcz.me/post/19605</link><guid isPermaLink="true">https://lcz.me/post/19605</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Sun, 20 Sep 2026 19:01:46 GMT</pubDate></item><item><title><![CDATA[Reply to 让computer use 速度飞起来：JEV-Ultrafast 的 DOM 决策链路实测 on Sun, 20 Sep 2026 18:58:54 GMT]]></title><description><![CDATA[<p dir="auto">好帖必须点赞，JEV是新玩家福利，跟着楼主学习起来<img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/1f44d.png?v=ffa14597167" class="not-responsive emoji emoji-android emoji--+1" style="height:23px;width:auto;vertical-align:middle" title=":+1:" alt="👍" /> <img src="https://lcz.me/assets/plugins/nodebb-plugin-emoji/emoji/android/1f60a.png?v=ffa14597167" class="not-responsive emoji emoji-android emoji--blush" style="height:23px;width:auto;vertical-align:middle" title=":blush:" alt="😊" /></p>
]]></description><link>https://lcz.me/post/19604</link><guid isPermaLink="true">https://lcz.me/post/19604</guid><dc:creator><![CDATA[Ben Lee]]></dc:creator><pubDate>Sun, 20 Sep 2026 18:58:54 GMT</pubDate></item></channel></rss>