AI エージェントがブラウザを自在に操作する:BrowserUse 入門


はじめに

近年、ChatGPT や Claude などの大規模言語モデル (LLM) を活用したアプリケーションが急速に増えています。これらのモデルを使えば、問い合わせに対する高度な応答や文章生成は容易になりました。しかし、多くの現実的なタスクには「ウェブサイトからの情報収集」や「フォーム送信」など、ブラウザを使った操作が不可欠です。
こうした課題を解決するために誕生したのが BrowserUse です。本記事では、BrowserUse の概要や主要機能、基本的な導入方法について紹介します。


BrowserUse とは?

BrowserUse は、Playwright を用いてブラウザを操作しながら、ChatGPT などの LLM による高度な意思決定・自動化を可能にする Python ライブラリです。具体的には、以下のような特徴があります。

  1. ブラウザ操作の自動化
    • HTML 要素の取得、クリック操作、スクロールなどを LLM が指示して自動的に実行
    • マルチタブ管理や複数コンテキストの同時実行に対応
  2. LangChain やその他 LLM との連携
    • LangChain を利用して、OpenAI や Anthropic など好みのモデルを組み合わせられる
    • AI エージェントに「ウェブブラウザを使ったタスク」を指示するだけで、ページ間の移動やフォーム入力を行える
  3. カスタムアクションの柔軟な追加
    • ユーザに確認や入力を求めるアクション
    • 取得した情報をファイルやデータベースに保存するアクション
    • Pydantic モデルでパラメータを定義して、自動型検証を行うことも可能
  4. 自己修正 (Self-correcting)
    • ブラウザ操作で予期せぬエラーが起きた場合や、ページ遷移の誤差が生じた場合に AI が挙動を補正し、タスク完了を支援
  5. 匿名の利用状況収集
    • 利用状況の統計を匿名で集計しており、.envANONYMIZED_TELEMETRY=false を設定すればオフにできる

インストール方法

BrowserUse は PyPI で配布されています。以下のコマンドで導入できます。

pip install browser-use

# 必要に応じてPlaywrightもインストール
playwright install

.env ファイルの設定

ブラウザ操作時に使う LLM の API キーを指定します。以下の例を .env ファイルにコピー・貼り付けして、キーを追加してください。

OPENAI_API_KEY=xxxxx
ANTHROPIC_API_KEY=xxxxx
ANONYMIZED_TELEMETRY=true

かんたんな使用例

# 日本語のコメントを付けたサンプルコード

from langchain_openai import ChatOpenAI
from browser_use import Agent
import asyncio

async def main():
    # ChatOpenAI は LangChain の OpenAI モデル
    agent = Agent(
        task="Google Flightsでバリ発オマーン行き片道航空券を2025年1月12日出発で検索し、最安値を教えてください。",
        llm=ChatOpenAI(model="gpt-4o"),  # GPT-4 を使った例
    )
    result = await agent.run()
    print("エージェントからの回答:", result)

asyncio.run(main())
  1. タスクを設定: task でブラウザを使って行わせたいタスクを記述します。
  2. LLM の指定: llm に任意のモデルを指定できます。
  3. 実行: agent.run() で実行し、結果が取得できるまで待機します。

カスタムアクション

BrowserUse では、標準的なブラウザ操作以外の独自アクションをエージェントに実行させることができます。たとえば、ユーザに追加情報を尋ねるアクションや、取得データをデータベースに保存するアクションなどです。

# Pydantic を使ったカスタムアクションの例

from browser_use.agent.service import Agent
from browser_use.browser.service import Browser
from browser_use.controller.service import Controller
from pydantic import BaseModel
from typing import Optional

controller = Controller()

# 同期的アクションの例
@controller.action('Ask user for information')
def ask_human(question: str, display_question: bool) -> str:
    return input(f"{question}\n入力してください: ")

# 非同期アクション + Pydantic モデルを使った例
class JobDetails(BaseModel):
    title: str
    company: str
    job_link: str
    salary: Optional[str] = None

@controller.action('Save job details which you found on page', param_model=JobDetails, requires_browser=True)
async def save_job(params: JobDetails, browser: Browser):
    print("ジョブ情報:", params)
    page = browser.get_current_page()
    page.go_to(params.job_link)
    # DB へ書き込むなど、独自の処理を行える

# カスタムアクションを登録したコントローラを使ってエージェントを作成
async def custom_action_example():
    from langchain_openai import ChatOpenAI
    llm = ChatOpenAI(model="gpt-4o")
    agent = Agent(
        task="取得した求人を保存して、詳細を開いてください。",
        llm=llm,
        controller=controller
    )
    await agent.run()

マルチタブ & 複数エージェントの並列実行

BrowserUse は、1つのブラウザ上で複数のタブ (コンテキスト) を作成できます。例えば 10 個のエージェントを同時に走らせたい場合は、各エージェントごとに browser.new_context() を呼び出すだけでOKです。

from browser_use.browser.service import Browser
from browser_use.agent.service import Agent

browser = Browser()

async def run_multiple_agents():
    for i in range(10):
        async with browser.new_context() as context:
            agent = Agent(task=f"タスク{i}", llm=model, browser_context=context)
            await agent.run()

ブラウザ設定

Playwright を使うため、さまざまなブラウザ設定が可能です。特に以下の設定はよく使われます。

  • headless: ヘッドレスモード(ブラウザを画面に表示しない)の ON/OFF
  • keep_open: スクリプト終了後もブラウザを開いたままにするかどうか
  • disable_security: クロスオリジン・リクエストの許可など
  • cookies_file: クッキーを永続化するためのファイルパス
  • minimum_wait_page_load_time: LLM にページ情報を提供する前の最小待機時間
  • maximum_wait_page_load_time: ページ読み込みを待つ最大時間

まとめ

BrowserUse は、LLM とウェブブラウザ操作の間の「接着剤」として機能し、AI エージェントがウェブ上の様々なタスクを実行できるようにします。ウェブスクレイピングやフォーム送信、オンラインサービスの操作など、人間が行っていた手間のかかる作業を大幅に省力化し、より高度な自動化を実現できます。

カスタマイズ等のご希望はお気軽にお問い合わせください。

この記事にご意見をお待ちしております

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です