以下の内容はhttps://blog.generative-agents.co.jp/entry/2025/08/01/154127より取得しました。


「AIエージェントキャッチアップ #43 - BrowserGym」を開催しました

ジェネラティブエージェンツの大嶋です。

「AIエージェントキャッチアップ #43 - BrowserGym」という勉強会を開催しました。

generative-agents.connpass.com

アーカイブ動画はこちらです。

www.youtube.com

BrowserGym

今回は、Webエージェント研究のためのフレームワーク「BrowserGym」をキャッチアップしました。

BrowserGymのGitHubリポジトリはこちらです。

github.com

今回のポイント

BrowserGymとは

BrowserGymは、Webエージェントの研究を加速するための、オープンで使いやすく拡張可能なフレームワークとして開発されています。

Playwrightをベースとして、ブラウザ操作のエージェントを簡単に動かすことができるようになっています。

一般ユーザー向けではなく、あくまで研究用のツールとして位置づけられています。

BrowserGymが対応しているベンチマーク

BrowserGymには標準で以下のベンチマークが含まれています。

  • MiniWoB
  • WebArena
  • VisualWebArena
  • WorkArena
  • AssistantBench
  • WebLINX (static benchmark)

新しいベンチマークを追加する際はAbstractBrowserTaskクラスを継承することで実装できます。

また、BrowserGymのすべてのベンチマークを実行するためのフレームワーク「AgentLab」も提供されています。

github.com

BrowserGymのデモエージェントを動かす

実際にBrowserGymのデモエージェントを動かしてみた様子を紹介します。

github.com

openended の実行

以下のコマンドでデモエージェントをopenendedというタスク名で実行しました。

python demo_agent/run_demo.py --task_name openended --start_url https://www.google.com

すると、ブラウザが起動してユーザーの指示を待つ状態となりました。

「BrowserGymについて調べて」といった指示をすると、エージェントがブラウザを操作する様子を見ることができます。

AssistantBenchを実行した様子

デモエージェントを使い、AssistantBenchのタスクも実行してみました。

huggingface.co

実行したタスクは「What's the lowest price a Single Family house was sold in Queen Anne in January 2023?」という、不動産情報を検索するタスクです。

python demo_agent/run_demo.py --task_name visualwebarena.398

実行すると、エージェントがタスクを進める様子を見ることができました。

デモエージェントの改造

BrowserGymの動作のしくみが気になったので、デモエージェントを改造してみました。

以下のように、デモエージェントの内部でOpenAIのAPIを呼び出している部分を書き換え、人間がアクションを入力するようにしました。

-        response = self.openai_client.chat.completions.create(
-            model=self.model_name,
-            messages=[
-                {"role": "system", "content": system_msgs},
-                {"role": "user", "content": user_msgs},
-            ],
-        )
-        action = response.choices[0].message.content
+        print("<system_msgs>")
+        for msg in system_msgs:
+            print(msg["text"])
+        print("</system_msgs>")
+        print("<user_msgs>")
+        for msg in user_msgs:
+            print(msg["text"])
+        action = input("Enter your action: ")

この状態でデモエージェントを実行すると、標準出力にシステムメッセージとユーザーメッセージが表示され、人間がアクションを入力することになります。

プロンプトには、現在のページのアクセシビリティツリーが含まれていることが分かります。

  :
# Current page Accessibility Tree

RootWebArea 'Google'
        [22] navigation ''
                [24] link 'Googleについて'
                [25] link 'ストア'
                [31] link 'Gmail'
                [33] link '画像を検索する'
                [36] button 'Google アプリ', expanded=False
                        [37] image ''
                [39] link 'ログイン'
                        StaticText 'ログイン'
        [47] image ''
        [77] search ''
                [87] image ''
                [91] combobox '検索', autocomplete='both', hasPopup='listbox', expanded=False, controls='Alh6id'
                [103] button '音声で検索'
                        [104] image ''
                [106] button '画像で検索'
                        [107] image ''
                [237] button 'Google 検索'
                [238] button "I'm Feeling Lucky"
  :

また、以下のように、アクションの候補も含まれます。

  :
# Action Space
  :
scroll(delta_x: float, delta_y: float)
    Examples:
        scroll(0, 200)

        scroll(-50.2, -100.5)
  :
fill(bid: str, value: str)
    Examples:
        fill('237', 'example value')

        fill('45', 'multi-line\nexample')

        fill('a12', 'example with "quotes"')
  :
click(bid: str, button: Literal['left', 'middle', 'right'] = 'left', modifiers: list[typing.Literal['Alt', 'Control', 'ControlOrMeta', 'Meta', 'Shift']] = [])
    Examples:
        click('a51')

        click('b22', button='right')

        click('48', button='middle', modifiers=['Shift'])
  :

LLMがアクションとしてclick("91")のように出力すると、その内容が実行されてブラウザが操作されるということです。

アクションの仕組み

BrowserGymでclick("91")のようなアクションがどのように実行されるのかを調べたところ、大まかに以下の流れで実行されているようでした。

  1. LLMが文字列形式のアクション(例:"click(91)")を出力
  2. to_python_code()メソッドで、この文字列をPythonコードに変換
  3. 変換されたPythonコードをexecute_python_code()で実行(内部ではexec()でコードを実行)

BrowserGymのコードには、scroll・fill・clickなどのアクションと対応する関数が含まれています。

github.com

このような関数を普通に呼び出すのではなくexec()を使っているのは変わった実装ですが、あくまで研究用のツールということもありあまり深い理由はないのかもしれません。

次回のご案内

以上、今回は「BrowserGym」をキャッチアップしました。

次回は「AIエージェントキャッチアップ #44 - Strands Agents」ということで、先日バージョン1.0がリリースされたAWS製のフレームワーク「Starnds Agents」がテーマです!

generative-agents.connpass.com

ご興味・お時間ある方はぜひご参加ください!

また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!




以上の内容はhttps://blog.generative-agents.co.jp/entry/2025/08/01/154127より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14