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)

22 pointsby rahimnathwani2 コメント

要約

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

全文翻訳

Jev Ultrafast ⚡ 動的でインデックス化されたアクション空間を持つブラウザエージェントです。単一のゴールを与えると、TypeSafeのJevが操作と要素を選択します。小さなLLMは、操作がTYPE_TEXTの場合にのみテキストを生成します。Googleフライトでチューリッヒからロンドンまで7.1秒。1つの自然言語ゴール、実際のテキスト生成、およびロード待機時間を含みます。MP4を見る・測定値・ループを読む アクション空間 すべての観測は新しい要素テーブルを生成します。 [1] ボタン チケットタイプを変更する・往復 [2] コンボボックス 出発地・サンフランシスコ [3] コンボボックス 目的地・空欄 [4] テキストボックス 出発日・空欄 ... 操作は、CLICK、TYPE_TEXT、SELECT、SCROLL_UP、SCROLL_DOWN、WAIT、DONE、BLOCKEDです。サポートされている操作とターゲットのみが提供されます。 1つのTypeSafeリクエスト ┌───────────────────────────┐ ページ → 要素テーブル → 操作 │ │ click_target │ │ type_text_target │ │ select_target, 存在する場合 └─────────────┬─────────────┘ 一致するターゲットを使用する │ 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互換のテキストヘルパーを使用できます。適切なモデル、エンドポイント、および推論設定を構成してください。 jev_ultrafast からライブラリを使用します。 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ミリ秒まで表示される候補を待ちます。他のインタラクションは、最大2つのアニメーションフレームまたは50ミリ秒を受け取ります。これらの読み取りは、実行がログに記録された後に行われます。 非表示タブのレンダリングを維持します。フォーカスエミュレーションは、Chromeの表示タブを切り替えることなく、バックグラウンドアニメーションのスロットリングを防ぎます。表示されているテキストを送信します。オフスクリーンの記事本文やフッターはモデルコンテキストを埋めません。 中断されたテキストリクエストを再利用します。生成された値は、テキストヘルパーの入力全体が変更されない場合にのみ、ページ再試行が失敗しても存続します。実行された各ターゲットは、観測されたノードから解決されます。エグゼキューターは、ページの鮮度とクリックのオクルージョンを再チェックします。モデル出力が決してセレクター、座標、シェルコマンド、または実行可能なJavaScriptになることはありません。テキストヘルパーの出力は、入力前に小さなJSONオブジェクトとして解析される必要があります。小さすぎると読めません。 ファイル ファイル ジョブ agent.py 完全なループとテキストヘルパーのハンドオフ snapshot.js アトミックDOMスナップショット、インデックス化されたコントロール、鮮度ガード browser.py ブラウザ接続、現在のジオメトリ、実行モデル model.py 動的な操作/ターゲットヘッドとテキスト生成の質問 questions.py モデルの指示 demo.py ローカルインスペクター 証拠と制限 現在のビデオは7,073ミリ秒の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