はじめに
近年、ChatGPT や Claude などの大規模言語モデル (LLM) を活用したアプリケーションが急速に増えています。これらのモデルを使えば、問い合わせに対する高度な応答や文章生成は容易になりました。しかし、多くの現実的なタスクには「ウェブサイトからの情報収集」や「フォーム送信」など、ブラウザを使った操作が不可欠です。
こうした課題を解決するために誕生したのが BrowserUse です。本記事では、BrowserUse の概要や主要機能、基本的な導入方法について紹介します。
BrowserUse とは?
BrowserUse は、Playwright を用いてブラウザを操作しながら、ChatGPT などの LLM による高度な意思決定・自動化を可能にする Python ライブラリです。具体的には、以下のような特徴があります。
- ブラウザ操作の自動化
- HTML 要素の取得、クリック操作、スクロールなどを LLM が指示して自動的に実行
- マルチタブ管理や複数コンテキストの同時実行に対応
- LangChain やその他 LLM との連携
- LangChain を利用して、OpenAI や Anthropic など好みのモデルを組み合わせられる
- AI エージェントに「ウェブブラウザを使ったタスク」を指示するだけで、ページ間の移動やフォーム入力を行える
- カスタムアクションの柔軟な追加
- ユーザに確認や入力を求めるアクション
- 取得した情報をファイルやデータベースに保存するアクション
- Pydantic モデルでパラメータを定義して、自動型検証を行うことも可能
- 自己修正 (Self-correcting)
- ブラウザ操作で予期せぬエラーが起きた場合や、ページ遷移の誤差が生じた場合に AI が挙動を補正し、タスク完了を支援
- 匿名の利用状況収集
- 利用状況の統計を匿名で集計しており、
.env
でANONYMIZED_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())
- タスクを設定:
task
でブラウザを使って行わせたいタスクを記述します。 - LLM の指定:
llm
に任意のモデルを指定できます。 - 実行:
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/OFFkeep_open
: スクリプト終了後もブラウザを開いたままにするかどうかdisable_security
: クロスオリジン・リクエストの許可などcookies_file
: クッキーを永続化するためのファイルパスminimum_wait_page_load_time
: LLM にページ情報を提供する前の最小待機時間maximum_wait_page_load_time
: ページ読み込みを待つ最大時間
まとめ
BrowserUse は、LLM とウェブブラウザ操作の間の「接着剤」として機能し、AI エージェントがウェブ上の様々なタスクを実行できるようにします。ウェブスクレイピングやフォーム送信、オンラインサービスの操作など、人間が行っていた手間のかかる作業を大幅に省力化し、より高度な自動化を実現できます。
カスタマイズ等のご希望はお気軽にお問い合わせください。
コメントを残す