HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

Jev Ultrafast: A browser agent with a dynamic, indexed action space

Jev Ultrafast: A browser agent with a dynamic, indexed action space (github.com)

55 pointsby rahimnathwani4 コメント

要約

Jev Ultrafastは、動的でインデックス化されたアクション空間を持つブラウザエージェントです。自然言語の単一ゴールを与えると、エージェントは操作と要素を選択し、必要に応じてLLMがテキストを生成してブラウザを操作します。このシステムは、観測された状態から要素テーブルを生成し、操作とターゲットの決定を効率的に行い、ネットワークラウンドトリップを最小限に抑えることで、高速なブラウザ操作を実現します。

全文翻訳

Jev Ultrafast ⚡

[画像: Jev Ultrafast · Browser Use × TypeSafe]

重要

Browser Use Cloud のウェイティングリストが公開されました。 クラウド上の超高速ブラウザエージェントへの早期アクセスをご利用ください。ウェイティングリストに参加する →

動的でインデックス化されたアクション空間を持つブラウザエージェント。

1つの目標を与えてください。TypeSafe の Jev は、操作と要素を選択します。小さなLLMは、操作が TYPE_TEXT の場合にのみテキストを書き込みます。

チューリッヒ → ロンドンを Google フライトで 7.1 秒で。 自然言語の目標、実際のテキスト生成、および読み込み待機時間を含みます。

[画像: 実際の Google フライト検索を 1 倍速で、生成された都市名と動的な操作/ターゲットの決定]

MP4 を視聴する · 測定結果 · ループを読む

アクション空間

すべての観測は新しい要素テーブルを生成します。

[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 です。サポートされている操作とターゲットのみが提供されます。

                      1回のTypeSafeリクエスト
                     ┌───────────────────────────┐
ページ → 要素テーブル → 操作                 │
                     │ click_target              │
                     │ type_text_target          │
                     │ select_target, if present │
                     └─────────────┬─────────────┘
                         一致するターゲットを使用
                                   │
                    CLICK [7] ─────┤──→ ブラウザ
                TYPE_TEXT [3] ─────┘
                          ↓
                   小さなLLM → テキスト → ブラウザ

ターゲットの質問は推測的です。操作が CLICK の場合、click_target のみが実行可能です。2つの決定、1回のネットワークラウンドトリップ。各ターゲットヘッドには互換性のある要素のみが含まれます。ネイティブのドロップダウン選択肢は、観測された要素/オプションのインデックスを運びます。

ポリシーには、サイト固有のアクションスクリプトや準備されたフィールド文字列はありません。フライトの例は目標を提供し、結果を独立して検証します。スクリーンショットレンダラーは後からラベルを追加します。ブラウザを操作するわけではありません。

試してみる

git clone https://github.com/browser-use/jev-ultrafast.git
cd jev-ultrafast
uv sync
cp .env.example .env
# TYPESAFE_API_KEY と TEXT_MODEL_API_KEY を追加してください。
uv run jev

http://127.0.0.1:8766 を開き、「Start demo → Run automatically」をクリックします。インスペクターには、番号付き要素、操作の確率、ターゲットの確率、および実行されたアクションが表示されます。「Choose next」は実行前に一時停止します。

Chrome は uv sync によってインストールされる Browser Harness を介して接続します。接続が必要な場合は uv run browser-harness --doctor を実行してください。プロンプトが表示されたら、Chrome でリモートデバッグを許可してください。

TEXT_MODEL_API_KEY は、例の設定ファイルにある OpenRouter キーです。現在のデモでは、推論を無効にして inception/mercury-2.5 を使用しています。Gemini、GLM、DeepSeek も OpenAI 互換のテキストヘルパーを使用できます。適切なモデル、エンドポイント、推論設定を構成してください。

ライブラリを使用する

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 で実行します。同じポリシーで異なるタスクを実行できます。

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

uv run --env-file .env python examples/flights.py --keep-open はフライト検索を実行し、実際のルート/日付/結果を確認して、そのトレースを保存します。フライトの選択や予約は行いません。

なぜ動くのか

  • 決定サイクルごとに1つのリクエスト。 操作とターゲットのヘッドは同じ観測状態を共有します。
  • デフォルトのエージェントループではスクリーンショットを使用しません。 Jev は構造化された状態を消費します。インスペクターはスクリーンショットを選択的に使用し、ビデオは個別の連続スクリーンキャストを使用します。
  • スナップショットごとに1回のブラウザ呼び出し。 可視コントロール、その名前、値、テキストをアトミックに読み取ります。実際の DOM ノードへの参照を保持します。
  • 選択されたターゲットを検証します。 クリックは、ドキュメント、フォーム値、ターゲット、および近接するコンテキストをチェックします。アニメーションだけでは、別の予測を強制しません。現在のジオメトリを解決し、入力前に覆われたコントロールを拒否します。
  • 有用な状態を待ちます。 コンボボックスへの入力後、最大 200 ms で可視の提案を待ちます。その他のインタラクションは、最大2つのアニメーションフレームまたは50 ms を取得します。これらの読み取りは、実行がログに記録された後に行われます。
  • 非表示タブのレンダリングを維持します。 フォーカスエミュレーションは、Chrome の表示タブを切り替えることなく、バックグラウンドアニメーションのスロットリングを防ぎます。
  • 表示されているテキストを送信します。 オフスクリーンの記事本文やフッターは、モデルのコンテキストを埋めません。
  • 中断されたテキストリクエストを再利用します。 生成された値は、テキストヘルパーの入力全体が変更されない限り、古いページの再試行でも保持されます。

実行されたすべてのターゲットは、観測されたノードから解決されます。エグゼキュータは、ページの鮮度とクリックの隠蔽を再チェックします。モデル出力がセレクタ、座標、シェルコマンド、または実行可能な JavaScript になることはありません。テキストヘルパーの出力は、入力前に小さな JSON オブジェクトとして解析される必要があります。

読むのに十分な小ささ

ファイルジョブ
agent.py完全なループとテキストヘルパーのハンドオフ
snapshot.jsアトミック DOM スナップショット、インデックス化されたコントロール、鮮度ガード
browser.pyブラウザ接続、現在のジオメトリ、実行
model.py動的な操作/ターゲットヘッドとテキスト生成
questions.pyモデルの指示
demo.pyローカルインスペクター

証拠と限界

現在のビデオは 7,073 ms の Google フライト実行です。タイミングは初期ページ観測後に開始され、モデル呼び出し、生成されたテキスト、ブラウザの作業、古い決定、および読み込み待機時間を含みます。新しく独立したチェックにより、片道設定、チューリッヒ、ロンドン、2026年9月20日、および表示されているフライトオプションが検証されます。ビデオは 1 倍速で再生され、開始時のホールドはなく、終了時のホールドは 0.5 秒です。

同じモデルと設定で交互に6回実行した結果、両方のバージョンが 3/3 で合格しました。タスクの中央値時間は 9.450 秒 → 7.092 秒 に減少しました(25% 削減)。中央値ブラウザプロトコル呼び出しは 1,092 → 101 に減少しました。これは、1つのブラウザプロファイルで1つのタスクを3回繰り返したものであり、一般的な信頼性ベンチマークではありません。

同じポリシーで、要求された Wikipedia 記事を 2.798 秒 で開き、ローカルのホテル検索/フィルタータスクを 1.896 秒 で完了しました。実行、失敗、ソースハッシュ、および測定境界は performance.md にあります。

DONE の選択でも、独立した結果検証が必要です。DOM リーダーは一般的な HTML および ARIA コントロールを処理しますが、完全なアクセシブル名仕様は処理しません。シャドウルート、フレーム、キャンバス、アップロード、ポップアップタブ、ネストされたスクロール、および任意のキーボードウィジェットは、この MVP の範囲外です。所有するタブは既存の Chrome プロファイルを共有します。

開発

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 アカウントストリップを切り抜きます。認証情報と生のトレースは無視されます。


Browser Use · Browser Harness · TypeSafe speculative fan-out