金曜日, 8月 15, 2025
金曜日, 8月 15, 2025
- Advertisment -
ホームニューステックニュースAI Foundry で Browser Automation Tool を使ってみた

AI Foundry で Browser Automation Tool を使ってみた


ブラウザの操作の自動化のニーズが徐々に増えていく中で、Playwright Workspace と連携してAzure AI Foundry Agent Service における最新のアクションツールとして、ブラウザー自動化ツール(プレビュー) が発表されました。

概要

API および SDK を通じて利用可能で、自然言語プロンプトを使って以下のような現実的なブラウザー操作を自動化できます。

  • 検索やページナビゲーション
  • フォーム入力
  • 予約・スケジューリング

基盤には Playwright Workspaces が採用されており、クラウド上で隔離された安全なブラウザー自動化環境を提供します。
これにより、実際のユーザー操作を模倣し、マルチターンの会話でタスクを完了できます。

主な利点

  1. 自然言語から自動化へ
    目的を文章で説明するだけで、ブラウザーベースのワークフローを実行可能。
  2. 現実的な Web インタラクション
    人間の操作に近い方法で、複雑なフォーム入力やマルチステップ処理を自動化。
  3. 隔離された実行環境
    Azure サブスクリプション内の Playwright Workspaces 上でサンドボックス実行。
    仮想マシンやブラウザーの手動管理は不要。
  4. マルチターン会話
    途中でリクエストを修正・追加しながらタスクを進行可能。
  5. 最新かつ信頼性の高い自動化
    ダウンパース」手法により、Web ページの構造(DOM やアクセシビリティツリー)を解析。
    UI の見た目や座標ではなく、要素の役割aria-label を理解して操作対象を特定。
    例:
    「送信」ボタンを押す際、role="button""送信" のテキストを解析して判断。
    複雑なフォームでもフィールド名や役割から入力欄を特定。
  6. 幅広いユースケース
  • 予約・スケジューリング: クラスやレストラン予約、アポイントメント設定を自動化。
  • 商品検索・レビュー要約: eコマースの商品検索・レビュー収集と要約。
  • Web フォーム提出: 書類提出やプロフィール更新を自動化。
  • カスタマーサポート: チケット状況やアカウント情報を迅速取得。

動作の流れ

  1. ユーザーが自然言語でリクエスト

    • 例: 「この URL xxxx から今週利用可能なヨガクラスをすべて表示して」
  2. セッションの準備

    • Playwright Workspaces に接続し、隔離ブラウザーセッションを開始。
  3. ページ解析と推論

    • DOM 構造を解析し、必要な操作(クリック、入力、移動)を判断。
  4. アクション実行

    • サンドボックス環境で操作し、ステップごとに結果を反映。
  5. マルチターン処理

    • 追加指示や修正を反映しながら完了まで実行。

セキュリティと責任ある利用

ブラウザー自動化は強力ですが、重大なセキュリティリスクも伴います。
AI の判断ミスや悪意あるページによって意図しない操作が行われる可能性があります。
transparency-note

はじめ方

前提条件

  • Azure サブスクリプション(Playwright Workspaces と Azure AI Foundry の作成権限)
  • Python 3.8+ または他の対応 SDK

セットアップ手順

1. Playwright Workspace の準備

2. AI Foundryへの接続

  • Azure AI Foundry ポータルで AI プロジェクトを開く
  • 管理センター → Connected resources から新規接続作成: サーバーレスモデルを選択
  • ターゲット URI に Browser endpoint、キーにアクセストークン設定

3. エージェント作成

  • 上記接続完了すると以下のコードで実行可能
  • シナリオは Forms に指定した回答項目を自動入力をして送信をしてもらうこと。
    Forms の質問項目
import os

from azure.identity import DefaultAzureCredential
from azure.ai.agents import AgentsClient
from azure.ai.agents.models import MessageRole
from azure.ai.projects import AIProjectClient




project_endpoint = "YOUT_PROJECT_ENDPOINT"

project_client = AIProjectClient(
    endpoint=project_endpoint,
    credential=DefaultAzureCredential()
)

playwright_connection = project_client.connections.get(
    name="YOUR_PLAYWRIGHT_CONNECTION_NAME"
)

print(playwright_connection.id)

with project_client:
    agent = project_client.agents.create_agent(
        model="gpt-4.1",
        name="my-playwright-agent",
        instructions="use the tool to respond",
        tools=[{
            "type": "browser_automation",
            "browser_automation": {
                "connection": {
                    "id": playwright_connection.id,
                }
            }
        }],
    )

    print(f"Created agent, ID: {agent.id}")

    thread = project_client.agents.threads.create()
    print(f"Created thread and run, ID: {thread.id}")

    
    message = project_client.agents.messages.create(
        thread_id=thread.id,
        role="user",
        content=""""
        https://forms.office.com/r/g2KXYtze1u のフォームに以下記入して「送信」して
        名前、金光
        住所、品川グランドセントラルタワー
        属性、社会人
        リージョン、東日本
        モデル、GPT-5
        """
    )
    print(f"Created message: {message['id']}")

    
    run = project_client.agents.runs.create_and_process(
        thread_id=thread.id,
        agent_id=agent.id,
    )

    print(f"Run created, ID: {run.id}")
    print(f"Run finished with status: {run.status}")

    if run.status == "failed":
        print(f"Run failed: {run.last_error}")

    run_steps = project_client.agents.run_steps.list(thread_id=thread.id, run_id=run.id)

    for step in run_steps:
        print(step)
        print(f"Step {step['id']} status: {step['status']}")

        
        step_details = step.get("step_details", {})
        tool_calls = step_details.get("tool_calls", [])

        if tool_calls:
            print("  Tool calls:")
            for call in tool_calls:
                print(f"    Tool Call ID: {call.get('id')}")
                print(f"    Type: {call.get('type')}")

                function_details = call.get("function", {})
                if function_details:
                    print(f"    Function name: {function_details.get('name')}")

        print()  

    
    
    

    
    response_message = project_client.agents.messages.get_last_message_by_role(
        thread_id=thread.id,
        role=MessageRole.AGENT
    )

    if response_message:
        for text_message in response_message.text_messages:
            print(f"Agent response: {text_message.text.value}")
        for annotation in response_message.url_citation_annotations:
            print(f"URL Citation: [{annotation.url_citation.title}]({annotation.url_citation.url})")


実行結果は、すべて間違いなくFormsに指示通り記入してくれていて、送信完了していました。特にラジオボタンなど小さい選択項目も、精度高く正しく選択してくれていました。
Forms の回答

実行結果

一部省略
Step step_XXXXXXXXX status: completed
  Tool calls:
    Tool Call ID: call_XXXXXXXXXX
    Type: browser_automation

Agent response: 指定された内容でフォームに記入し、「送信」まで完了しました。

- 名前: 金光
- 住所: 品川グランドセントラルタワー
- 属性: 社会人
- リージョン: 東日本
- モデル: GPT-5

送信完了の確認画面も表示されました。ご安心ください。

今後、より高い精度が求められる場面では、この Browser Automation Tool も有力な選択肢の一つになると思います。

引用

https://devblogs.microsoft.com/foundry/announcing-the-browser-automation-tool-preview-in-azure-ai-foundry-agent-service/

https://learn.microsoft.com/en-us/azure/ai-foundry/agents/how-to/tools/browser-automation

補足: Playwright Workspaces とは?

概要

Playwright Workspaces は、Playwright を基盤にした完全マネージドの E2E テストサービス(プレビュー中)。
複数ブラウザー・OS 上で自動テストを行い、インフラ管理不要。

特徴

  1. 高速化

    • 並列リモートブラウザーでの分散実行により完了時間を短縮。
  2. 複数 OS・ブラウザー対応

    • Windows, Linux, Chrome/Android, Safari/iOS など。
  3. エンドポイントテスト

    • 公開・非公開アプリ、localhost 環境もテスト可能。
  4. Playwright サポート

    • 既存テストコードを変更せず統合可能。

仕組み

  • 異なる OS 上でクラウドホストブラウザーを起動。
  • テストコードはローカルまたは CI 上で実行し、クラウドブラウザーを遠隔操作。
  • 結果やトレースファイルはローカル保存。

セキュリティ

  • リージョン外に顧客データを保存・処理しない。
  • 保存データは Microsoft 管理キーで暗号化。



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -