1. はじめに
Amazon Bedrock AgentCoreには、Webブラウザをエージェントが操作する「AgentCore Browser」があります。
業務に使用しているツールなどAPIをサポートしておらず、Webブラウザを使わざるを得ないようなケースでの使用が想定されます。
今回は、ブラウザベースの操作を実施するエージェントの実装について解説していきます。
※執筆中のため、随時追記・更新していきます。
2. 想定ユースケース
社内プロセスなど、ブラウザベースでの作業が必須のルーティン作業として、サンプルの出張申請Microsoft Formsを作成し、そこへの入力を試します。
3. 技術選定
Strands Agents
AWSのオープンソースのエージェントフレームワークで、@toolデコレーターで簡単にエージェントが使用するツールを定義できます。
AgentCore Browserも、エージェントが使用するツールとして指定します。
Strands Agentsを試した記事はこちらを参照ください。
https://qiita.com/hirotaka_s/items/35235e3b8239a06d885a
AgentCore Browser
概要
指示の内容に基づき、ブラウザセッションを操作します。
Stramds Agentのツールとして登録することで、LLMが考えながらブラウザを操作してくれます。
隔離されたコンテナ環境でブラウザセッションが起動されるため、ローカルRPAツールなどと比較して環境による不具合などに強いです。また、レコーディングや途中からの人による操作の引継ぎなども可能であり、幅広いユースケースに対応できる可能性があります。
料金は、アクティブなリソース消費量に対してのみ課金されるようです。
試してみる① Wiki要約
@toolでAgentCore Browser を使ってブラウザタスクを実行し、日本語で結果を返す。というツールを定義し、エージェントにwww.wikipedia.org を開いて、pythonに関する情報を検索し、内容を要約して教えてください。と指示してみます。
ツールを正しく使い、ページへのアクセス、ページ内の検索、内容の取得ができていることがわかります。
<thinking>User is asking for a summary of Python information from Wikipedia. I need to use the `run_browser_task` tool to open Wikipedia, search for Python, and retrieve the information. Then, I can summarize the information for the user.</thinking>
Tool #1: run_browser_task
<thinking>まず、ブラウザ操作の専門エージェントとして、WikipediaのURLを開いてPythonに関するページを検索し、その内容を要約する必要があります。Wikipediaのページにアクセスし、検索ボックスに「Python」と入力して検索し、結果を読んで要約を作成します。</thinking>
Tool #1: browser
<thinking>WikipediaのPythonページにアクセスして、Pythonの概要や歴史、機能、使用例などの情報を読み取り、要約を作成します。</thinking>
Tool #2: browser
<thinking>Pythonのページにアクセスして読み取り、必要な情報を要約します。</thinking>
Tool #3: browser
<thinking>Pythonのページから取得した情報を要約します。</thinking>
Pythonは、グイド・ヴァンロッサムに...(略)
実行中にAWSコンソールを開くと、実際のブラウザを操作していることがわかります。画面はレコーディングをして証跡を残すこともできます。

試してみる② Amazon検索
次に、少し重めのサイト(Amazon)での商品検索を試してみます。
エージェントへのプロンプトをhtamazon.co.jp からpythonの入門書を検索して、上位3件を教えてください。に変更します。
実行してみたところ、下記のエラーでうまくいっていません。
~~~略
<response> 申し訳ありませんが、amazon.co.jp の検索結果を読み込む際に問題が発生しており、上位3件のPythonの入門書を表示することができません。お手数ですが、今しばらくお待ちいただくか、別の方法で検索をお試しください。 </response>
出力詳細とAWSコンソールを確認すると、商品検索まではうまくいっているもののページが重くうまく内容を読み取れていないようです。

試しに、LLMをapac.amazon.nova-lite-v1:0からjp.anthropic.claude-haiku-4-5-20251001-v1:0に変更してみたところ、うまく動作しました。
アウトプットを見ると、Claudeの推論でアプローチを改善しながらタスクを進めることで最終的に成功したようです。
Tool #10: browser
タイトルと価格は取得できました。URLと著者情報を取得するために、セレクタを改善します。
Tool #11: browser
良好です!著者情報が取得できました。次にURLを修正します。
Tool #12: browser
URLが取得できました!著者情報がまだ正確でないので、改善します。
Tool #13: browser
著者情報を別の方法で探してみます。各商品ページにアクセスして確認するか、より詳細に検査します。
Tool #14: browser
素晴らしい!著者情報が見つかりました。より正確に抽出します。
~~~略
Tool #23: browser
HTMLが切れています。別の方法で確認します。
Tool #24: browser
不思議です。innerTextでは¥が見えているのに、スクリプトでは見えません。文字列をそのまま使用します。
Tool #25: browser
価格抽出ロジックが改善が必要です。より正確に取得します。
Tool #26: browser
完璧です!全ての情報が正確に取得できました。ブラウザを閉じます。
LLMの特性や操作対象ページの特徴、プロンプトなどを目的に応じて最適化していくことが求められます。
試してみる③ フォーム入力
最後に、ダミーの出張申請フォームをMicrosoft Formsで作成し、操作できるか試してみます。
エージェントへのプロンプトをhttps://forms.office.com/r/xxx を開いて、ダミーの出張申請をしてください。に変更します。
下記のアウトプットが出力され、正常に申請ができているようです。
Microsoft Formsのリンクを開いて、ダミーの出張申請を行います。
Tool #1: run_browser_task
フォームを開いて内容を確認し、ダミーデータで出張申請を完了させます。
Tool #1: browser
フォームを開きます。
Tool #2: browser
ページの内容を確認します。
~~~~~~
略
~~~~~~
Tool #34: browser
完璧です。すべてのフィールドが入力されました。日付を確認します。
Tool #35: browser
すべてのフィールドが正しく入力されました。提出ボタンをクリックします。
Tool #36: browser
提出完了を確認するためにスクリーンショットを撮ります。
~~~~~~
略
~~~~~~
ダミーの出張申請がMicrosoft Formsに正常に提出されました。
**提出した主要情報:**
- **申請者**: 田中太郎
- **部署**: 第二計画屋
- **出張期間**: 2025年1月15日~17日(3日間)
- **出張目的**: 主要取引先との販売促進のためのサイト訪問
- **申請金額**: 150,000円
- 交通費: 40,000円
- 宿泊費: 80,000円
- 日当: 30,000円
- **承認者**: 高橋藁急(管理部)
フォームが正常に提出され、確認メッセージが表示されました。
操作中にAWSコンソールを確認したところ、問題なく入力を進めていました。
