3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Amazon Bedrock & Azure OpenAI】自律型AIエージェントbrowser-use によるブラウザ操作を試してみた

Last updated at Posted at 2025-08-12

はじめに

生成AI―とりわけCopilotやChatGPTなどの活用は、ここ数年で驚くほど急速に浸透してきました。 私自身、特に調査・文章の校閲・実装のフェーズにおいて、これらのAIがもたらす時間圧縮の効果を強く実感しています。もはや、AIなしでは仕事が成立しにくくなってきていると感じるほどです。:airplane:
今回は、Microsoft AI Tour Tokyo 2025で紹介されて以来、ずっと気になっていた「ブラウザ操作型の自律的AIエージェント」について調査を行いました。 その調査結果と、実際に試してみた内容をレポートとしてまとめます。

ブラウザ操作型AIエージェントのプレイヤー

前述のイベントでは日立様のブースにてOpenAI「Operator」をご説明頂きました。
早速OpenAI「Operator」を使ってみたかったのですがPro(月額200ドル)は個人だと
なかなか壁が高く、まずは他にどんなものがあるかを調べてみました。

プレイヤー 特徴 費用 備考
OpenAI「Operator」 高度なAIエージェント機能で、自然言語から複雑な操作を実行 月額$200(Pro) 法人向け
Convergence AI 自然言語で指示 → Webページを自律的に操作 無料/Pro(月額$20) Salesforceが買収、websiteが403:angel_tone2:
Google「Project Mariner」 Google製AIエージェントで、ブラウザ操作を自動化 非公開(社内テスト段階) 一部報道では社内利用中心との記載あり
Anthropic「Computer Use」 Claudeを活用したAIエージェントで、Web操作を支援 非公開 Claude 3と連携、開発中との情報あり
Microsoft「OmniParser V2」 Webページの構造解析と自動操作に特化 非公開 Microsoft Researchによる実験的プロジェクト
Browser-Use オープンソースのAIエージェント。自然言語でWeb操作を自動化 無料(オープンソース) / Pro(月額$30) MITライセンス。API利用時は別途課金

調査したところ、Browser-Useが利用できそうだったので、少し触ってみました。:sunny:

browser-useとは

browser-useは、AIエージェントがWebブラウザを自動操作するためのツールです。 プロダクト構成にPlaywrightを利用しており、AIが人間のようにWebページを「見て」「理解して」「操作する」ことを可能にします。

このライブラリは、自然言語による指示からWeb上の複雑な操作を自律的に実行できる点が特徴です。 HTML構造の解析に加え、スクリーンショットを用いた視覚的認識も可能で、フォーム入力やボタン操作、複数タブの管理など、従来の自動化ツールを超える柔軟性を備えています。

また、GPT-4やClaudeなどのLLMと連携することで、APIが公開されていないWebサービスでも画面操作を通じて自動化が可能です。 オープンソースであるため、業務フローに合わせたカスタマイズや拡張も容易で、AIエージェント開発の強力な選択肢となっています。

構築・実行手順

本記事では、Amazon Bedrock(anthropic.claude-3-5-sonnet)とAZURE OPenAIを使って本当にbrowser-useで東京の天気を取得することができるのかを試してみます。
公式ドキュメントのクイックスタートを参考に進めましたが、若干ハマりました。

1. 利用環境の準備(Amazon Bedrock)

公式ドキュメントの「Supported Models」を確認すると、各モデルを利用する際に必要なキーの設定方法が記載されています。

  • OpenAI
  • Anthropic
  • AWS Bedrock (multiple providers)
  • Azure OpenAI
  • Gemini
  • Groq

今回使用する anthropic.claude-3-5-sonnet は AWS Bedrock 経由で提供されるモデルなので、「AWS Bedrock (multiple providers)」の項目を参照する必要があります。最初は「Anthropic」のセクションを見て、ANTHROPIC_API_KEY= に Bedrock の短期または長期 API キーを設定するのかと思ってしまいました。しかし、実際にはそうではなく、IAMで作成したポリシーに基づいて、AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY を設定する必要があります。

AWSアカウントの作成は、以前に記事を作成しましたのでご参照ください。
【AWS Bedrock入門】【0から始める】VSCodeからBoto3でAmazon Bedrock(ナレッジベース&生成AI)を操作する_2025.7時点

2. 利用環境の準備(ローカルPCの設定)

2-1. uvのインストール

公式ドキュメントがUVで仮想環境を作成する手順なので、事前準備としてuvをインストールします。VSCodeのターミナルから実行しましたが、powershellを起動しても良いです。

PS > powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Get-Command uv を実行しても、インストール直後はコマンドが認識されずエラーになる場合があります。 そのため、VS Codeを一度再起動してください。再起動後に改めて Get-Command uv を実行することで、コマンドが正しく認識されていることを確認できます。

2-1. python仮想環境を作成 

PS > uv venv --python 3.11

※zsacler環境ではGitHubへのDL処理が走るので3.13※インストールしたpythonで実行すること

Quickstartに沿って実行するとカレントディレクトリに仮想環境が作成されます。

image.png

この後ハマってしまいトラブルシューティングに時間がかかりました。
実はuv は高速な仮想環境構築ツールですが、環境によっては pip を含まない最小構成になることがあります。特に Windows や Python 3.11.x の一部環境では ensurepip が必要になることがあります。アクティベートした後にpython -m pip --versionでコマンドが通るか確認してください。

ちなみにこのコマンドで pip が仮想環境にインストールされます。

PS > .\.venv\Scripts\python.exe -m ensurepip --upgrade

が、後から考えるとuv pip hogeの方がスマートですね。↓以降はuvの記載に修正しました。:sunglasses:

2-2. python仮想環境をアクティベート

powershellの場合、このコマンドになります。

PS > .venv\Scripts\Activate.ps1

※うまくいかなかったらこちらを参照
https://zenn.dev/takuya_zenn/articles/30394f9aa58427

切り替われば、先頭に(仮想環境名)が表示されるようになります。

PS > where.exe python
(XXXXXXXXX)PS > where.exe python

powershellでの仮想環境切り替えコマンドは以下の通りです。

# 仮想環境を有効化
PS > .\.venv\Scripts\Activate.ps1

# 仮想環境を終了(グローバルに戻る)
(XXXXXXXXX)PS > deactivate

# 現在のPythonのパスを確認 .\.venv配下であればOK
(XXXXXXXXX)PS > where.exe python

# 現在のpipのパスを確認 .\.venv配下であればOK
(XXXXXXXXX)PS > where.exe pip

2-3. browser-useとplaywrightのインストール

Quickstartに沿ってbrowser-useとplaywrightのインストールします。

# browser-useの最小構成がインストールされます※boto3は対象外
(XXXXXXXXX)PS > uv pip install browser-use
# 仮想環境内のPythonを使ってplaywright installを実行しています
(XXXXXXXXX)PS > uv run playwright install

$env:UV_HTTP_TIMEOUT=60; uv pip install browser-use --native-tls
※zsacler環境ではGitHubへのDL処理が走るので --native-tls を付与
uv pip install playwrightも必要

(XXXXXXXXX)PS > $env:UV_HTTP_TIMEOUT=60; uv pip install browser-use --native-tls
(XXXXXXXXX)PS > uv pip install playwright --native-tls
(XXXXXXXXX)PS > uv run playwright install

Amazon Bedrock を利用するには、browser-use に AWS 関連の依存パッケージを追加インストールする必要があります。

(XXXXXXXXX)PS > uv pip install browser-use[aws]

このコマンドを実行しない場合、browser-use の実行時に以下のようなエラーが発生します。

ERROR [browser_use.Agent🅰 2810 on 🆂 2810 🅟 36] ❌ Result failed 1/3 times: `boto3` not installed. Please install using `pip install browser-use[aws] or pip install browser-use[all]`
INFO [browser_use.Agent🅰 2810 on 🆂 2810 🅟 36] 📍 Step 1: Ran 1 actions in 7.29s: ❌ 1
INFO [browser_use.Agent🅰 2810 on 🆂 2810 🅟 36] 📍 Step 2: Evaluating page with 0 interactive elements on: about:blank
ERROR [browser_use.Agent🅰 2810 on 🆂 2810 🅟 36] ❌ Result failed 2/3 times: `boto3` not installed. Please install using `pip install browser-use[aws] or pip install browser-use[all]`
INFO [browser_use.Agent🅰 2810 on 🆂 2810 🅟 36] 📍 Step 2: Ran 1 actions in 0.07s: ❌ 1
INFO [browser_use.Agent🅰 2810 on 🆂 2810 🅟 36] 📍 Step 3: Evaluating page with 0 interactive elements on: about:blank
ERROR [browser_use.Agent🅰 2810 on 🆂 2810 🅟 36] ❌ Result failed 3/3 times: `boto3` not installed. Please install using `pip install browser-use[aws] or pip install browser-use[all]`
INFO [browser_use.Agent🅰 2810 on 🆂 2810 🅟 36] 📍 Step 3: Ran 1 actions in 0.05s: ❌ 1
ERROR [browser_use.Agent🅰 2810 on 🆂 2810 🅟 36] ❌ Stopping due to 3 consecutive failures
INFO [browser_use.BrowserSession🆂 2810:**** #72] 🛑 Closing cdp_url=http://127.0.0.1:****/ browser context <Browser type=<BrowserType name=chromium executable_path=C:\Users\***\AppData\Local\ms-playwright\chromium-1181\chrome-win\chrome.exe> version=139.0.7258.5>
INFO [browser_use.BrowserSession🆂 2810:**** #72] ↳ Killing browser_pid=***** ~\AppData\Local\ms-playwright\chromium-1181\chrome-win\chrome.exe (terminate() called)

AgentHistoryList(all_results=[
  ActionResult(is_done=False, success=None, error='`boto3` not installed. Please install using `pip install browser-use[aws] or pip install browser-use[all]`', attachments=None, long_term_memory=None, extracted_content=None, include_extracted_content_only_once=False, include_in_memory=False),
  ActionResult(is_done=False, success=None, error='`boto3` not installed. Please install using `pip install browser-use[aws] or pip install browser-use[all]`', attachments=None, long_term_memory=None, extracted_content=None, include_extracted_content_only_once=False, include_in_memory=False),
  ActionResult(is_done=False, success=None, error='`boto3` not installed. Please install using `pip install browser-use[aws] or pip install browser-use[all]`', attachments=None, long_term_memory=None, extracted_content=None, include_extracted_content_only_once=False, include_in_memory=False)
], all_model_outputs=[])

※必要に応じて、browser-use[all] を使ってすべてのオプション機能を一括でインストールすることもできます

(XXXXXXXXX)PS > uv pip install browser-use[all]

3. エージェントの作成(Amazon Bedrock)

3-1. Bedrock用のエージェントを作成

.venv配下にagent.pyを作成します。公式ドキュメントはOpenAI用なのでAWSBedrockを利用する形にカスタマイズしています。

image.png

# agent.py

from browser_use.llm import ChatAWSBedrock
from browser_use import Agent
from dotenv import load_dotenv
#from browser_use.browser.browser import Browser, BrowserConfig
load_dotenv()

import asyncio

# Claude 3.5 Sonnet を東京リージョンで使用
llm = ChatAWSBedrock(
    model="anthropic.claude-3-5-sonnet-20240620-v1:0",
    aws_region="ap-northeast-1",  # 東京リージョン
)

async def main():
    agent = Agent(
        task="Googleで東京の最新の天気予報を調べてください",
        llm=llm,
#        browser_config=BrowserConfig(headless=True)
    )
    result = await agent.run()
    print(result)

asyncio.run(main())

3-2. 環境設定ファイルの作成しAPI keysを設定

1.利用環境の準備(Amazon Bedrock) で作成したアクセスキーを使って公式ドキュメントを通り、設定します。

# 今回は使いません
OPENAI_API_KEY=
ANTHROPIC_API_KEY=

# AWS Bedrockの場合はIAMで作成したアクセスキーを設定する
AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AWS_DEFAULT_REGION=ap-northeast-1

# AZURE OpenAIの場合はこの変数にAPIキーを設定する
AZURE_OPENAI_ENDPOINT=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AZURE_OPENAI_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

4. エージェントの実行(Amazon Bedrock)

それでは、準備ができたので、実行してみます。なんか動き出しましたね!

(XXXXXXXXX)PS > python .\agent.py

powershell03.png

あれ!途中で落ちちゃいます・・・

(browseruse0811) PS C:\Users\***> python .\agent.py
INFO     [browser_use.telemetry.service] Anonymized telemetry enabled. See https://docs.browser-use.com/development/telemetry for more information.
INFO     [browser_use.agent.service] 💾 File system path: C:\Users\***\AppData\Local\Temp\browser_use_agent_********-****-****-****-************_**********
INFO     [browser_use.agent.service] 📸 Screenshot service initialized in: C:\Users\***\AppData\Local\Temp\browser_use_agent_********-****-****-****-************_**********/screenshots
INFO     [browser_use.Agent🅰 **** on 🆂 **** 🅟 20] 🧠 Starting a browser-use agent 0.5.11 with base_model=anthropic.claude-3-5-sonnet-20240620-v1:0 +vision extraction_model=anthropic.claude-3-5-sonnet-20240620-v1:0 +file_system
INFO     [browser_use.Agent🅰 **** on 🆂 **** 🅟 20] 🚀 Starting task: Googleで東京の最新の天気予報を調べてください
INFO     [browser_use.BrowserSession🆂 ****:None #88] 🎭 Launching new local browser playwright:chromium keep_alive=False user_data_dir= ~\.config\browseruse\profiles\default
INFO     [browser_use.utils] ✅ Extensions ready: 3 extensions loaded (uBlock Origin, I still don't care about cookies, ClearURLs)
INFO     [browser_use.BrowserSession🆂 ****:None #88]  ↳ Spawning Chrome subprocess listening on CDP http://127.0.0.1:***** with user_data_dir= ~\.config\browseruse\profiles\default
INFO     [browser_use.BrowserSession🆂 ****:***** #88] 🌎 Connecting to newly spawned browser via CDP http://127.0.0.1:***** -> browser_pid=***** (local)
WARNING  [bubus.helpers] ⚠️  System overload detected: CPU: 100.0%. Consider reducing concurrent operations to prevent hanging.
INFO     [browser_use.Agent🅰 **** on 🆂 **** 🅟 40] 📍 Step 1: Evaluating page with 0 interactive elements on: about:blank
ERROR    [browser_use.Agent🅰 **** on 🆂 **** 🅟 40] ❌ Result failed 1/3 times:
 ("('Expected structured output but no tool use found in response', 502)", 502)
INFO     [browser_use.Agent🅰 **** on 🆂 **** 🅟 40] 📍 Step 1: Ran 1 actions in 17.79s: ❌ 1
WARNING  [browser_use.sync.service] ⚠️ Event send timed out after 10 seconds: ?▶ CreateAgentTaskEvent#****
INFO     [browser_use.Agent🅰 **** on 🆂 **** 🅟 40] 📍 Step 2: Evaluating page with 0 interactive elements on: about:blank
ERROR    [browser_use.Agent🅰 **** on 🆂 **** 🅟 40] ❌ Result failed 2/3 times:
 ('Too many requests, please wait before trying again.', 429)
INFO     [browser_use.Agent🅰 **** on 🆂 **** 🅟 40] 📍 Step 2: Ran 1 actions in 10.47s: ❌ 1
INFO     [browser_use.Agent🅰 **** on 🆂 **** 🅟 40] 📍 Step 3: Evaluating page with 0 interactive elements on: about:blank
ERROR    [browser_use.Agent🅰 **** on 🆂 **** 🅟 40] ❌ Result failed 3/3 times:
 ('Too many requests, please wait before trying again.', 429)
INFO     [browser_use.Agent🅰 **** on 🆂 **** 🅟 40] 📍 Step 3: Ran 1 actions in 68.57s: ❌ 1
ERROR    [browser_use.Agent🅰 **** on 🆂 **** 🅟 40] ❌ Stopping due to 3 consecutive failures
WARNING  [bubus.helpers] ⚠️  System overload detected: CPU: 92.3%. Consider reducing concurrent operations to prevent hanging.
INFO     [browser_use.BrowserSession🆂 ****:***** #88] 🛑 Closing cdp_url=http://127.0.0.1:***** browser context  <Browser type=<BrowserType name=chromium executable_path=C:\Users\***\AppData\Local\ms-playwright\chromium-1181\chrome-win\chrome.exe> version=139.0.7258.5>
INFO     [browser_use.BrowserSession🆂 ****:***** #88]  ↳ Killing browser_pid=***** ~\AppData\Local\ms-playwright\chromium-1181\chrome-win\chrome.exe (terminate() called)

AgentHistoryList(all_results=[
  ActionResult(is_done=False, success=None, error='("(\'Expected structured output but no tool use found in response\', 502)", 502)', attachments=None, long_term_memory=None, extracted_content=None, include_extracted_content_only_once=False, include_in_memory=False),
  ActionResult(is_done=False, success=None, error="('Too many requests, please wait before trying again.', 429)", attachments=None, long_term_memory=None, extracted_content=None, include_extracted_content_only_once=False, include_in_memory=False),
  ActionResult(is_done=False, success=None, error="('Too many requests, please wait before trying again.', 429)", attachments=None, long_term_memory=None, extracted_content=None, include_extracted_content_only_once=False, include_in_memory=False)
], all_model_outputs=[])

メモリの問題?まあ確かに100%になってるけども、そんな感じの落ち方じゃないな。:thinking:
そうなんです、無料枠だとService Quotasが低く設定されているんですよね。:frowning2::weary::scream::cold_sweat:
有料枠にするかクォータ引き上げ申請で回避できるとあったのですが、時間がかかりそうなので以降の調査は今後行うこととして、仕方がないのでAzureで進めてみます。:basketball_player_tone4:

5. 利用環境の準備(Azure AI Foundry)

衝撃!! AzureのUIが劇的に進化している!!

UIが大きく変わっていて戸惑いましたが、クイックスタートに沿って設定を進めることでスムーズに対応できました 😲 2025年3月時点では、Azure OpenAI を作成した後にリンク経由で Azure AI Foundry に遷移する流れでしたが、 現在は Azure AI Foundry ポータルから直接プロジェクトの設定が可能になっています。

💡操作がよりシンプルで、処理速度も向上している印象です!

詳しい手順は、Microsoft公式のクイックスタートガイドがとても参考になります👇

モデルを選択します:woman:

そのままデプロイします:bathtub:

APIキーが画面に表示されるので、こちらを.envファイルに記載します。:point_up:

6. エージェントの作成(Azure AI Foundry)

Azure AI Foundry用のエージェントを作成します
.venv配下にagent2.pyを作成します。公式ドキュメントはChatOpenAI用なのでAzure AI Foundryを利用する形にカスタマイズしています。
image.png

# agent2.py

from browser_use.llm import ChatAzureOpenAI
from browser_use import Agent
from dotenv import load_dotenv
#from browser_use.browser.browser import BrowserConfig
load_dotenv()

import asyncio

# Azure OpenAI GPT-4.1 を使用
llm = ChatAzureOpenAI(
    model="gpt-4.0"
)

async def main():
    agent = Agent(
        task="Googleで東京の最新の天気予報を調べてください",
#        llm=llm,
         llm=llm
#        browser_config=BrowserConfig(headless=True)
    )
    result = await agent.run()
    print(result)

asyncio.run(main())

4. エージェントの実行(Azure AI Foundry)

それでは、実行してみます。今度はうまくいくでしょうか?

(XXXXXXXXX)PS > python .\agent2.py

Browser-Useが起動し始めました。

次に進みましたね!!:clap:

ログを見てみます。responseとcostが表示されています。

ちなみに3,4回実行してみるとこの程度の料金でした。1回10~20円程度ですかね。
デフォルトでuse visionがonなので費用を抑えるのであれば調整してもいいかもしれません。

以上です。ご精読頂きありがとうございました。
本記事内のリンク先について執筆の参考にさせていただきました。


以下のサイトが非常に参考になりましたので、ご紹介させていただきます。

●browser-useの基礎理解

browser-useの基本的な仕組みや構成要素(Agent、Controller、Browser、DOM)について丁寧に解説されています。Playwrightとの関係や、LangChain・LLMとの連携方法も具体的に紹介されており、導入を検討している方にとって非常に有益な内容です。

●Browser UseのWeb UIを使いながらAIエージェントの業務システムへの適用を考える

今回はWebUIに触れていませんが、AIエージェントを業務に本格導入する際には、非常に重要なインターフェースになると感じています。browser-useのWeb UIは、Pythonコードを直接書かなくても、GUIベースでAIエージェントの設定・実行ができるように設計されているのですが、Web UIのセットアップ手順や機能概要、実際の操作例が丁寧に紹介されています。AIエージェントをGUIで扱いたい方にとって、非常に参考になる内容です。

●新しいブラウザ操作系エージェントのworkflow-useがかなり良さそうな予感

browser-useの拡張版とも言える「workflow-use」は、事前に定義したワークフローに基づいてAIがブラウザ操作を行う仕組みで、自然言語による曖昧な指示ではなく、明確な操作手順をJSON形式で定義・実行できるのが特徴です。

●browser-useによるブラウザ操作自動化のサンプル集

実際に動作するコードとともに、browser-useの基本から応用までを網羅的に紹介されています。具体的にはPlaywrightを使ったヘッドレスモード、@controller.action を使ったフォーム入力やファイルアップロードなどのカスタムアクションを追加、複数タブの操作や並列処理、CAPTCHAへの対応や取得データのファイル保存などの実装が掲載されています。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?