browser-use/jev-ultrafast

i. am. speed.

何であるか

Jev Ultrafast は、小さな言語モデル(LLM)が単一の自然言語目標を達成するためにウェブページを操作するオープンソースの ブラウザエージェント です。このシステムは、ページのスナップショットを繰り返し取得し、すべての可視コントロール(ボタン、コンボボックス、テキストボックスなど)を番号付きの表に変換し、その後LLMに 1つの操作(例:CLICKTYPE_TEXTSELECT)とその表から 1つのターゲット要素 を選ばせます。選択された操作がブラウザで実行され、次のスナップショットが取得され、このサイクルがモデルが DONE を返すか、タスクが完了したと確認されるまで繰り返されます。

この仕組みの鍵となるのは 動的でインデックス付きのアクション空間 です。固定の手書きセレクタではなく、ループの各反復で新しい可能操作リストを構築するため、ページの変更、ローディング遅延、UIアニメーションに対応でき、1回の決定ごとに1回のネットワークラウンドトリップ で済みます。


動作原理(概要)

  1. スナップショット – Chromeで動作する Browser Harness プロトコル経由で、極小のJavaScript(snapshot.js)がDOMを原子的に読み取り、UI要素の種類、ラベル、現在の値を含むリストを返します。
  2. プロンプト構築 – Python側(model.py)がスナップショットとユーザー提供の目標を短いプロンプトにフォーマットし、テキスト専用LLM(例:OpenRouterのinception/mercury‑2.5)に送信します。
  3. LLMの判断 – モデルは以下のJSONオブジェクトを返します:
    • operationCLICKTYPE_TEXTSELECTSCROLL_UPSCROLL_DOWNWAITDONEBLOCKED のいずれか。
    • target – その操作を受け入れられる要素のインデックス。
    • TYPE_TEXTの場合)入力するテキスト。
  4. 実行 – 選択された操作がハーネス経由でChromeに送信されます。実行前に、ターゲットがまだ存在し、隠れておらず、期待されるコントロールタイプと一致しているかを検証します。
  5. ループ – ステップ1〜4を、DONE が返されるまで繰り返し、必要に応じて検証ステップで目標が達成されたか確認します。

スナップショットには 可視テキスト とコントロールメタデータのみが含まれるため、モデルは大きなページデータブロブを見ることなく、プロンプトを短く、レイテンシを低く保つことができます。


なぜ重要なのか

  • 高速性 – デモではGoogle Flightsの検索を約7秒で完了。ブラウザプロトコル呼び出しは約100回(ナイーブ実装では1,000回以上)で、設計上ラウンドトリップを最小限に抑えています。
  • 汎用性 – サイト固有のスクリプトはポリシーに組み込まれていません。同じモデルで、フライト検索、Wikipediaナビゲーション、ホテル検索など、まったく異なるタスクに再利用可能です。目標文字列を変えるだけで。
  • 安全性 – エージェントは生のセレクタ、JavaScript、シェルコマンドを発行しません。すべてのモデル出力は有効なJSONで、実行前に現在のDOMと再検証されます。
  • 透明性 – オプションのUIインスペクタで、番号付き要素表、操作確率、ターゲット確率が表示され、意思決定プロセスを観察・デバッグ可能になります。

クイックスタート(Linux/macOS、Python 3.11+)

# 1. リポジトリをクローン
git clone https://github.com/browser-use/jev-ultrafast.git
cd jev-ultrafast

# 2. 依存関係をインストール(uvを使用、またはpipでも可)
uv sync          # 仮想環境を作成し、Python依存関係をインストール
# Browser‑harness(Chromeリモートデバッグ)は自動的に取得されます

# 3. APIキーを設定
cp .env.example .env
# .envを編集し、以下を追加:
#   TYPESAFE_API_KEY=…   # TypeSafeポリシーサービス用
#   TEXT_MODEL_API_KEY=… # OpenRouter(または互換)キー

# 4. デモUIを実行
uv run jev
# Chromeで http://127.0.0.1:8766 を開き、リモートデバッグを有効化し、
# 「Start demo → Run automatically」をクリック。

コード内でライブラリを使用する方法

from jev_ultrafast import Agent

with Agent(
    "https://www.google.com/travel/flights?hl=en",
    "2026年9月20日、チューリッヒからロンドンへの片道フライトを1人エコノミークラスで探す。一致するフライトオプションが表示されたら停止。",
) as agent:
    for state in agent.run():
        print(state["elapsed_ms"], state["status"])  # 進行状況情報

デモと同じ uv run --env-file .env python your_script.py コマンドで実行してください。

リポジトリには、コアエージェントを変更せずに開始URLや目標を変更できる小さな例題スクリプト(examples/run.pyexamples/flights.py)も含まれています。


制限事項(ドキュメントに記載)

  • 標準的なHTML/ARIAコントロールのみ対応。カスタムキャンバスエディタ、ファイルアップロードダイアログ、ポップアップウィンドウ、深いシャドウDOMツリーなどの複雑なウィジェットは、このMVPではサポートされていません。
  • LLMは テキスト生成TYPE_TEXT)にのみ使用されます。他の判断(どのボタンをクリックするか、どのオプションを選択するか)は、インデックス付き要素表を受け取るポリシーモデルが行います。
  • 結果の検証(DONE)は別ステップです。エージェントはモデルの主張が正しいと仮定せず、ページを確認してから判断します。
  • パフォーマンス数値は、1つのChromeプロファイルで数回の実行に基づいています。サイトやブラウザ間での信頼性保証ではありません。

次に見るべき場所

  • agent.py – 完全な意思決定ループとテキストヘルパーへの引き渡し。
  • snapshot.js – 原子的なDOM抽出ロジック。
  • browser.py – 低レベルのChrome DevTools Protocolラッパー。
  • model.py – 操作/ターゲットヘッドの構築とテキストモデルへの呼び出し。
  • performance.md – 詳細なタイミング分解と再現性ノート。

TL;DR

Jev Ultrafastは、小さなLLMがリアルなウェブブラウザを制御するコンパクトでオープンソースのシステムです。繰り返し(1)ページを番号付きUI要素リストに読み込み、(2)モデルに 1つの操作1つのターゲット を選ばせ、(3)そのアクションを実行します。この設計により、プロンプトは小さく、ネットワークトラフィックは少なく、全体のループは8秒未満で現実的なフライト検索タスクを完了できるほど高速でありながら、完全に観察可能で安全です。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト