Automatizzare le attività del browser con lo strumento di automazione browser (anteprima)

Importante

Gli elementi contrassegnati (anteprima) in questo articolo sono attualmente in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliabile per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero avere funzionalità limitate. Per altre informazioni, vedere Condizioni supplementari per l'utilizzo delle anteprime di Microsoft Azure.

Questo articolo illustra come configurare e usare lo strumento di automazione browser con gli agenti Foundry per automatizzare i flussi di lavoro di esplorazione Web.

Tip

Prendere in considerazione l'aggiunta di questo strumento usando una casella degli strumenti. Usando una casella degli strumenti, è possibile riutilizzare lo strumento tra agenti e runtime, nonché centralizzare la gestione delle credenziali, il controllo delle versioni e l'imposizione dei criteri tramite un endpoint MCP gestito. Consulta la guida introduttiva di Toolbox.

Avviso

Lo strumento di automazione browser presenta rischi significativi per la sicurezza. Quando si usa lo strumento di automazione browser, un'intelligenza artificiale attiva sessioni di browser remoti per eseguire azioni e può usare le credenziali condivise in modo esplicito con l'agente, ad esempio per posta elettronica, account finanziari, social network e sistemi aziendali. L'agente di intelligenza artificiale può commettere errori e potrebbe essere ingannato da dati dannosi che potrebbero verificarsi su Internet.

L'utente è responsabile della revisione e del test delle applicazioni e dell'implementazione di mitigazioni di intelligenza artificiale responsabili. Utilizzando lo strumento di automazione del browser, l'utente riconosce di assumersi la piena responsabilità per qualsiasi utilizzo dello strumento e per tutte le conseguenze che ne derivano. Usare il giudizio per decidere quali credenziali fornire alle sessioni del browser. Vedi la nota sulla trasparenza di Foundry Agent Service.

Lo strumento di automazione browser (BAT) consente un'automazione scalabile e affidabile basata su browser all'interno degli agenti Foundry. BAT è disponibile come strumento MCP supportato dalle aree di lavoro Playwright, usate come livello di infrastruttura per browser headless. Si integra perfettamente con i flussi di lavoro agenti moderni, offrendo al tempo stesso sicurezza, osservabilità ed estendibilità di livello aziendale.

Browser Automation Tool (BAT) offre una piattaforma completa per l'automazione del browser tramite:

  • Spazi di lavoro Playwright (un servizio disponibile a livello generale) come livello di infrastruttura
  • Debug in tempo reale con Live View
  • Prendere il controllo per gli scenari con intervento umano
  • Supporto per l'esplorazione di siti Web privati (anteprima privata)
  • Osservabilità predefinita per l'affidabilità e l'ottimizzazione
  • Livelli di orchestrazione flessibili

Nota

La funzionalità del sito Web privato in Spazi di lavoro Playwright è attualmente disponibile in anteprima privata. Gli utenti interessati possono compilare questo modulo per la registrazione per l'anteprima privata.

Prerequisiti

Prima di iniziare, assicurarsi di avere:

  • Sottoscrizione Azure. Crearne uno gratuitamente.

  • ruolo Foundry User nel progetto Foundry, per lo sviluppo e l'uso quotidiano degli agenti.

    Importante

    I ruoli di Controllo degli accessi in base al ruolo di Foundry sono stati recentemente rinominati. Foundry User, Foundry Owner, Foundry Account Owner e Foundry Project Manager erano precedentemente denominati Azure AI User, Azure AI Owner, Azure AI Account Owner e Azure AI Project Manager. È possibile che i nomi precedenti vengano visualizzati in alcune posizioni durante l'esecuzione della ridenominazione. Gli ID ruolo e le autorizzazioni di base sono invariati dalla ridenominazione.

  • Ruolo Project Manager Foundry nel progetto Foundry se si crea la connessione del progetto.

  • Ruolo Collaboratore solo nel gruppo di risorse di destinazione durante la creazione dell'area di lavoro Playwright. Questo ruolo è necessario per il provisioning delle risorse. Attivarlo just in time tramite Microsoft Entra Privileged Identity Management (PIM) e disattivarlo dopo il provisioning. Gli sviluppatori dell'agente quotidiano e gli utenti di runtime non hanno bisogno di questo ruolo.

  • Progetto Foundry con un endpoint configurato.

  • Un modello di intelligenza artificiale distribuito nel progetto , ad esempio gpt-5.4. Confermare che sia il modello sia l'area del progetto supportino l'Automazione del browser in Supporto degli strumenti per area geografica e modello.

  • Risorsa dell'area di lavoro Playwright.

  • Una connessione di progetto configurata per l'area di lavoro Playwright.

Requisiti dell'SDK

Per gli esempi in Python, installare i pacchetti necessari:

pip install "azure-ai-projects>=2.0.0"

L'SDK di .NET è attualmente in anteprima. Per altre informazioni, vedere la guida introduttiva.

Configurazione

Ottieni l'endpoint del progetto: Apri il progetto nel portale Foundry e copia l'endpoint dalla pagina di panoramica del progetto. Il formato è https://{account-name}.services.ai.azure.com/api/projects/{project-name}.

Formato ID connessione: usare /subscriptions/{{subscriptionID}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.CognitiveServices/accounts/{{foundryAccountName}}/projects/{{foundryProjectName}}/connections/{{foundryConnectionName}}. È possibile trovare questo valore nella pagina dei dettagli dello strumento dopo aver connesso lo strumento di automazione browser.

Supporto per l'utilizzo

La tabella seguente illustra il supporto dell'SDK e della configurazione.

Supporto Foundry di Microsoft PYTHON SDK SDK di C# JavaScript SDK JAVA SDK REST API Configurazione dell'agente di base Configurazione dell'agente standard
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Come funziona

L'interazione inizia quando l'utente invia una query a un agente connesso allo strumento di automazione browser. Ad esempio, "Mostrami tutte le lezioni di yoga disponibili questa settimana dall'URL <url> seguente." Quando l'agente riceve la richiesta, Foundry Agent Service crea una sessione del browser isolata usando l'area di lavoro Playwright configurata. Ogni sessione è in modalità sandbox per privacy e sicurezza.

Il browser esegue azioni guidate da Playwright, ad esempio lo spostamento alle pagine pertinenti e l'applicazione di filtri o parametri in base alle preferenze dell'utente (ad esempio tempo, posizione e insegnante). Combinando il modello con Playwright, il modello può analizzare html o XML in documenti DOM, prendere decisioni ed eseguire azioni come la selezione di elementi dell'interfaccia utente, la digitazione e lo spostamento nei siti Web. Prestare attenzione quando si usa questo strumento.

Un flusso di esempio è:

  1. Un utente invia una richiesta al modello che include una chiamata allo strumento di automazione browser con l'URL a cui si vuole accedere.
  2. Lo strumento Di automazione browser riceve una risposta dal modello. Se la risposta contiene elementi di azione, tali elementi contengono azioni suggerite per avanzare verso l'obiettivo specificato. Ad esempio, un'azione potrebbe essere uno screenshot in modo che il modello possa valutare lo stato corrente con uno screenshot aggiornato o fare clic con coordinate X/Y che indicano dove deve essere spostato il mouse.
  3. Lo strumento Automazione browser esegue l'azione in un ambiente in modalità sandbox.
  4. Dopo l'esecuzione dell'azione, lo strumento automazione browser acquisisce lo stato aggiornato dell'ambiente come screenshot.
  5. Lo strumento invia una nuova richiesta con lo stato aggiornato e ripete questo ciclo fino a quando il modello smette di richiedere azioni o l'utente decide di arrestarsi.

Lo strumento di automazione browser supporta le conversazioni a più turni, consentendo all'utente di perfezionare la richiesta e completare gli scenari di riempimento dei moduli e di raschiatura Web.

Configurare Automazione Browser

Creare un'area di lavoro Playwright

  1. Nel portale Azure creare una risorsa Playwright Workspace.
  2. Dopo aver creato l'area di lavoro, passare a Impostazioni>Gestione accesso.
  3. Verificare che il metodo di autenticazione del token di accesso al servizio Playwright sia abilitato.
  4. Selezionare Genera token, immettere un nome ,ad esempio foundry-connection, e scegliere un periodo di scadenza.
  5. Copiare immediatamente il token. Non è possibile visualizzarla di nuovo dopo aver chiuso la pagina.
  6. Archiviare il token solo nella connessione al progetto Foundry. Non inserirlo nel codice sorgente, nei prompt o nei log dell'applicazione. Ruotarlo prima della scadenza e revocarlo immediatamente se è esposto.
  7. Nella pagina Panoramica dell'area di lavoro copiare l'endpoint del browser (inizia con wss://).
  8. Configurare un ruolo personalizzato con solo le autorizzazioni Playwright richieste dall'identità del progetto Foundry. Se un ruolo personalizzato non è disponibile, assegnare Collaboratore solo nell'ambito della risorsa dell'area di lavoro Playwright. Il token di accesso al servizio viene archiviato nella connessione al progetto; l'assegnazione di ruolo autorizza separatamente l'identità del progetto ad accedere alla risorsa dell'area di lavoro.

Connetti lo strumento Browser Automation in Foundry

  1. Passare al portale Foundry e selezionare il progetto.
  2. Selezionare Strumenti di compilazione>.
  3. Selezionare Crea una casella degli strumenti.
  4. Immettere il nome e la descrizione per la casella degli strumenti.
  5. In Strumenti fare clic su Aggiungi
  6. Selezionare Automazione browser e fare clic su Aggiungi strumento
  7. Immettere i campi obbligatori
    • Nome connessione: nome univoco per la connessione
    • Area di lavoro Playwright: selezionare la risorsa dell'area di lavoro Playwright.
    • Tipo di autenticazione: selezionare il tipo di autenticazione per la connessione.
  8. Selezionare Connetti.
  9. Fare clic su Pubblica per salvare la casella degli strumenti

Dopo aver creato la casella degli strumenti, è possibile visualizzare l'ID connessione Project nella pagina dei dettagli dello strumento. Utilizzare questo valore come ID di connessione per l'automazione del browser nel codice.

Aggiungere l'automazione del browser a una casella degli strumenti con l'interfaccia della riga di comando per sviluppatori Azure

Per aggiungere l'automazione del browser a una casella degli strumenti, usare l'interfaccia della riga di comando per sviluppatori Azure per creare un'area di lavoro Playwrite. Questo articolo presuppone che sia già disponibile una risorsa dell'area di lavoro Playwright. Vedere la sezione prerequisiti.

  1. Creare la connessione dell'area di lavoro Playwright.
azd ai connection create my-browser-conn \
  --kind PlaywrightWorkspace \
  --target wss://your-browser-endpoint.api.playwright.microsoft.com/playwrightworkspaces/browsers \
  --auth-type api-key \
  --key "<playwright-workspaces-access-token>"

--kind PlaywrightWorkspace richiede l'uso esatto delle maiuscole e minuscole (PascalCase).

  1. Definire la casella degli strumenti (my-toolbox.yaml)
description: Browser Automation toolbox
tools:
  - type: browser_automation_preview
    project_connection_id: my-browser-conn
  1. Creare la casella degli strumenti
azd ai toolbox create my-toolbox --from-file my-toolbox.yaml

Definizioni degli strumenti di automazione browser

Dopo aver eseguito un esempio, verificare che lo strumento sia stato chiamato usando il tracciamento in Microsoft Foundry. Per indicazioni sulla convalida dell'invocazione dello strumento, vedere Migliori pratiche per l'uso di strumenti nel servizio Microsoft Foundry Agent. Se si usa lo streaming, è anche possibile cercare browser_automation_preview_call gli eventi.

Nota

  • L'SDK di .NET è attualmente in anteprima. Per altre informazioni, vedere la guida introduttiva.
ProjectsAgentTool tool = new BrowserAutomationPreviewTool(
    new BrowserAutomationToolOptions(
        new BrowserAutomationToolConnectionParameters("<BROWSER_AUTOMATION_PROJECT_CONNECTION_ID>")
    )
);
const tools = [
  {
    type: "browser_automation_preview",
    name: "<OPTIONAL_TOOL_NAME>",
    description: "<Optional description for the model>",
    browser_automation_preview: {
      connection: {
          project_connection_id: "<BROWSER_AUTOMATION_PROJECT_CONNECTION_ID>"
      }
    }
  },
];

Utilizzare BrowserAutomationPreviewTool con un esempio di utilizzo degli agenti

L'esempio di Python seguente illustra come creare un agente di intelligenza artificiale con funzionalità di automazione del browser. Selezionare Prompt Agents per usare Azure AI Projects SDK per creare un agente prompt sul lato server o Hosted Agents per usare Agent Framework FoundryChatClient per creare un agente temporaneo in-process.

Agenti rapidi

import json
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
    PromptAgentDefinition,
  BrowserAutomationPreviewTool,
    BrowserAutomationToolParameters,
    BrowserAutomationToolConnectionParameters,
)

# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
BROWSER_CONNECTION_ID = "your-browser-automation-connection-id"

# Create clients to call Foundry API
project = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()

tool = BrowserAutomationPreviewTool(
    browser_automation_preview=BrowserAutomationToolParameters(
        connection=BrowserAutomationToolConnectionParameters(
            project_connection_id=BROWSER_CONNECTION_ID,
        )
    )
)

agent = project.agents.create_version(
    agent_name="MyAgent",
    definition=PromptAgentDefinition(
        model="gpt-4.1-mini",
        instructions="""You are an Agent helping with browser automation tasks. 
        You can answer questions, provide information, and assist with various tasks 
        related to web browsing using the Browser Automation tool available to you.""",
        tools=[tool],
    ),
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")

stream_response = openai.responses.create(
    stream=True,
    tool_choice="required",
    input="""
        Your goal is to report the percent of Microsoft year-to-date stock price change.
        To do that, go to the website finance.yahoo.com.
        At the top of the page, you will find a search bar.
        Enter the value 'MSFT', to get information about the Microsoft stock price.
        At the top of the resulting page you will see a default chart of Microsoft stock price.
        Click on 'YTD' at the top of that chart, and report the percent value that shows up just below it.""",
    extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)

for event in stream_response:
    if event.type == "response.created":
        print(f"Follow-up response created with ID: {event.response.id}")
    elif event.type == "response.output_text.delta":
        print(f"Delta: {event.delta}")
    elif event.type == "response.output_text.done":
        print(f"\nFollow-up response done!")
    elif event.type == "response.output_item.done":
        item = event.item
        if item.type == "browser_automation_preview_call":
            arguments_str = getattr(item, "arguments", "{}")

            # Parse the arguments string into a dictionary
            arguments = json.loads(arguments_str)
            query = arguments.get("query")

            print(f"Call ID: {getattr(item, 'call_id')}")
            print(f"Query arguments: {query}")
    elif event.type == "response.completed":
        print(f"\nFollow-up completed!")
        print(f"Full response: {event.response.output_text}")

print("\nCleaning up...")
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
print("Agent deleted")

Che cosa fa questo codice

In questo esempio viene creata una versione dell'agente con lo strumento di automazione browser abilitata, quindi viene inviata una richiesta che richiede all'agente di usare lo strumento. Elabora anche gli eventi di streaming in modo da poter osservare lo stato di avanzamento e le chiamate degli strumenti.

Input necessari

  • Un endpoint del progetto Foundry e un ID connessione di automazione del browser. Per informazioni dettagliate, vedere Configurazione .

Output previsto

Quando si crea l'agente, viene visualizzato un output simile al seguente:

Agent created (id: ..., name: ..., version: ...)

Durante lo streaming, è anche possibile visualizzare i delta e i dettagli delle chiamate agli strumenti. L'output varia in base al contenuto del sito Web e al comportamento del modello.

Agenti ospitati

Questo esempio usa FoundryChatClient del Microsoft Agent Framework per creare browser-automation-toolbox e connettersi al relativo endpoint MCP con FoundryToolbox. Installare i pacchetti con pip install agent-framework-foundry azure-ai-projects, sostituire PROJECT_ENDPOINT e BROWSER_CONNECTION_ID con i valori del progetto e accedere con az login. Per il modello completo della casella degli strumenti dell'agente ospitato, vedere l'esempio completo.

import asyncio

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient, FoundryToolbox
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
  BrowserAutomationPreviewToolboxTool,
    BrowserAutomationToolParameters,
    BrowserAutomationToolConnectionParameters,
)
from azure.identity import AzureCliCredential

PROJECT_ENDPOINT = "https://<account>.services.ai.azure.com/api/projects/<project>"
BROWSER_CONNECTION_ID = "your-browser-automation-connection-id"


async def main() -> None:
    credential = AzureCliCredential()

    # 1. Add the Browser Automation tool to a toolbox. Using a toolbox is the recommended way
    #    to give agents tools: you curate tools once and reuse the toolbox across agents.
    #    See /azure/foundry/agents/concepts/toolbox-overview
    project = AIProjectClient(endpoint=PROJECT_ENDPOINT, credential=credential)
    tool = BrowserAutomationPreviewToolboxTool(
        browser_automation_preview=BrowserAutomationToolParameters(
            connection=BrowserAutomationToolConnectionParameters(
                project_connection_id=BROWSER_CONNECTION_ID,
            )
        )
    )
    toolbox = project.toolboxes.create_version(
        name="browser-automation-toolbox",
        description="Toolbox with the Browser Automation tool",
        tools=[tool],
    )

    # 2. The toolbox exposes an MCP-compatible endpoint.
    TOOLBOX_MCP_URL = (
        f"{PROJECT_ENDPOINT}/toolboxes/{toolbox.name}"
        f"/versions/{toolbox.version}/mcp?api-version=v1"
    )

    # 3. Attach the toolbox to the hosted agent as an MCP tool.
, timeout=120.0)
    toolbox_tool = FoundryToolbox(credential, url=TOOLBOX_MCP_URL)

agent = Agent(
        client=FoundryChatClient(credential=credential),
        instructions=(
            "You help with browser automation tasks. Use the Browser Automation tool "
            "to navigate and read information from websites."
        ),
        tools=[toolbox_tool],
    )

    result = await agent.run(
        "Go to finance.yahoo.com, search for MSFT, click 'YTD' on the price chart, "
        "and report the year-to-date percent change."
    )
    print(f"Agent: {result.text}")


if __name__ == "__main__":
    asyncio.run(main())

Output previsto

L'agente naviga nel sito web live tramite lo strumento di automazione del browser nel toolbox e riporta il valore YTD che osserva. L'output varia in base al contenuto del sito Web:

Agent: The year-to-date change for MSFT is approximately +18.4%.

Per il modello completo della casella degli strumenti dell'agente ospitato, vedere l'esempio completo.


Utilizzare BrowserAutomationPreviewTool con un esempio di utilizzo degli agenti

Prima di eseguire questo esempio, completare i passaggi di installazione in Configurare Automazione browser.

L'esempio C# seguente illustra come creare un agente di intelligenza artificiale con funzionalità di automazione browser. Selezionare Prompt Agents per usare Azure AI Projects SDK per creare un agente prompt sul lato server o Hosted Agents per usare Microsoft Agent Framework per creare un agente temporaneo e in-process.

Agenti rapidi

Questo esempio usa metodi sincroni della libreria client di Azure AI Projects. Per un esempio che usa metodi asincroni, vedere l'esempio per l'uso di BrowserAutomationPreviewTool and Agents nell'Azure SDK per .NET repository in GitHub.

using System;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var browserConnectionId = "your-browser-automation-connection-id";

// Note that Browser automation operations can take longer than usual
// and require the request timeout to be at least 5 minutes.
AIProjectClientOptions options = new()
{
    NetworkTimeout = TimeSpan.FromMinutes(5)
};
AIProjectClient projectClient = new(endpoint: new Uri(projectEndpoint), tokenProvider: new DefaultAzureCredential(), options: options);

// Create the Browser Automation tool using the Playwright connection.
BrowserAutomationPreviewTool playwrightTool = new(
    new BrowserAutomationToolParameters(
        new BrowserAutomationToolConnectionParameters(browserConnectionId)
    ));

// Create the Agent version with the Browser Automation tool.
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
    Instructions = "You are an Agent helping with browser automation tasks.\n" +
    "You can answer questions, provide information, and assist with various tasks\n" +
    "related to web browsing using the Browser Automation tool available to you.",
    Tools = { playwrightTool }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "myAgent",
    options: new(agentDefinition));

// Create the response stream. Also set ToolChoice = ResponseToolChoice.CreateRequiredChoice()
// on the ResponseCreationOptions to ensure the agent uses the Browser Automation tool.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
CreateResponseOptions responseOptions = new()
{
    ToolChoice = ResponseToolChoice.CreateRequiredChoice(),
    StreamingEnabled = true,
    InputItems =
    {
        ResponseItem.CreateUserMessageItem("Your goal is to report the percent of Microsoft year-to-date stock price change.\n" +
            "To do that, go to the website finance.yahoo.com.\n" +
            "At the top of the page, you will find a search bar.\n" +
            "Enter the value 'MSFT', to get information about the Microsoft stock price.\n" +
            "At the top of the resulting page you will see a default chart of Microsoft stock price.\n" +
            "Click on 'YTD' at the top of that chart, and report the percent value that shows up just below it.")
    }
};
foreach (StreamingResponseUpdate update in responseClient.CreateResponseStreaming(options: responseOptions))
{
    if (update is StreamingResponseCreatedUpdate createUpdate)
    {
        Console.WriteLine($"Stream response created with ID: {createUpdate.Response.Id}");
    }
    else if (update is StreamingResponseOutputTextDeltaUpdate textDelta)
    {
        Console.WriteLine($"Delta: {textDelta.Delta}");
    }
    else if (update is StreamingResponseOutputTextDoneUpdate textDoneUpdate)
    {
        Console.WriteLine($"Response done with full message: {textDoneUpdate.Text}");
    }
    else if (update is StreamingResponseErrorUpdate errorUpdate)
    {
        throw new InvalidOperationException($"The stream has failed with the error: {errorUpdate.Message}");
    }
}

// Delete the Agent version to clean up resources.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);

Che cosa fa questo codice

Questo esempio crea una versione dell'agente con lo strumento di automazione browser abilitata, invia un prompt che richiede l'utilizzo dello strumento e stampa gli aggiornamenti di streaming mentre l'agente funziona tramite i passaggi del browser.

Input necessari

  • Un endpoint del progetto Foundry e un ID connessione di automazione del browser. Per informazioni dettagliate, vedere Configurazione .
  • Una connessione Playwright creata nel progetto Foundry.

Output previsto

Vengono visualizzati messaggi sullo stato di avanzamento dello streaming, ad esempio delta di testo, e una risposta completata. L'output varia in base al contenuto del sito Web e al comportamento del modello.

Agenti ospitati

Questo esempio crea la casella degli strumenti di Automazione browser con l'SDK per progetti di intelligenza artificiale Azure e quindi usa l'integrazione di Microsoft Agent Framework AddFoundryToolboxes per rendere lo strumento disponibile per l'agente ospitato. Installare i pacchetti di Agent Framework, impostare le AZURE_AI_PROJECT_ENDPOINTvariabili di ambiente , AZURE_AI_MODEL_DEPLOYMENT_NAMEe BROWSER_AUTOMATION_CONNECTION_ID e accedere con az login.

using System.IO;
using System.Runtime.CompilerServices;
using Azure.AI.AgentServer.Responses;
using Azure.AI.AgentServer.Responses.Models;
using Azure.AI.OpenAI;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;
using Microsoft.Extensions.DependencyInjection;
using OpenAI.Chat;

string projectEndpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT")
    ?? "https://<account>.services.ai.azure.com/api/projects/<project>";
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5-mini";
string browserConnectionId = Environment.GetEnvironmentVariable("BROWSER_AUTOMATION_CONNECTION_ID")
    ?? "your-browser-automation-connection-id";

var openAiEndpoint = new Uri(projectEndpoint).GetLeftPart(UriPartial.Authority);
DefaultAzureCredential credential = new();

// 1. Create the Browser Automation tool and add it to a toolbox. Using a toolbox is the
//    recommended way to give agents tools. See /azure/foundry/agents/concepts/toolbox-overview
AIProjectClient projectClient = new(endpoint: new Uri(projectEndpoint), tokenProvider: credential);
ProjectsAgentTool browserTool = new BrowserAutomationPreviewTool(
    new BrowserAutomationToolParameters(
        new BrowserAutomationToolConnectionParameters(browserConnectionId)
    ));
ToolboxVersion toolboxVersion = projectClient.AgentAdministrationClient
    .GetAgentToolboxes().CreateToolboxVersion(
        toolboxName: "browser-automation-toolbox",
        tools: [browserTool],
        description: "Toolbox with the Browser Automation tool");

// Create the hosted agent and register the toolbox integration.
AIAgent agent = projectClient.AsAIAgent(
    model: deploymentName,
    instructions: "You are a helpful assistant with access to the toolbox tools.",
    name: "hosted-toolbox-agent");

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
builder.Services.AddFoundryToolboxes(credential, toolboxVersion.Name);

var app = builder.Build();
app.MapFoundryResponses();
app.Run();

Output previsto

L'agente ospitato si connette allo strumento di automazione browser tramite l'endpoint MCP della casella degli strumenti e usa il browser per completare l'attività Web richiesta. L'output varia in base al contenuto del sito Web e al comportamento del modello:

Agent: The year-to-date change for MSFT is approximately +18.4%.

Per il modello completo della casella degli strumenti dell'agente ospitato, vedere l'esempio completo.


Ottenere un token di accesso:

AGENT_TOKEN=$(az account get-access-token --scope https://ai.azure.com/.default --query accessToken -o tsv)

Questo token di accesso è di breve durata. Mantienilo solo nella shell o nel processo attuale. Non eseguire mai il commit, archiviare, stampare o registrarlo. Eseguire di nuovo il comando dopo la scadenza. I flussi SDK usano DefaultAzureCredential dove supportato, ma queste richieste REST richiedono il token di connessione.

Il modo consigliato per aggiungere Automazione browser consiste nell'usare una casella degli strumenti, quindi collegare la casella degli strumenti all'agente come strumento MCP. Vedi Che cos'è una toolbox?

  1. Creare una casella degli strumenti che contiene lo strumento di automazione browser:
curl --request POST \
  --url "$FOUNDRY_PROJECT_ENDPOINT/toolboxes/browser-automation-toolbox/versions?api-version=v1" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{
    "description": "Toolbox with the Browser Automation tool",
    "tools": [
      {
        "type": "browser_automation_preview",
        "browser_automation_preview": {
          "connection": {
            "project_connection_id": "'"$BROWSER_AUTOMATION_PROJECT_CONNECTION_ID"'"
          }
        }
      }
    ]
  }'

La casella degli strumenti espone un endpoint compatibile con MCP in $FOUNDRY_PROJECT_ENDPOINT/toolboxes/browser-automation-toolbox/versions/<version>/mcp?api-version=v1, dove <version> è la versione restituita dalla chiamata precedente.

  1. Creare una connessione al progetto strumento remoto che punti all'endpoint della casella degli strumenti, usando un token Entra dell'utente in modo che l'identità del chiamante venga trasmessa (audience https://ai.azure.com).
azd ai connection create browser-automation-toolbox-conn \
  --kind remote-tool \
  --target "$FOUNDRY_PROJECT_ENDPOINT/toolboxes/browser-automation-toolbox/versions/<version>/mcp?api-version=v1" \
  --auth-type user-entra-token \
  --audience https://ai.azure.com
  1. Creare una risposta che usa la casella degli strumenti collegandola come strumento MCP.
curl --request POST \
  --url "${FOUNDRY_PROJECT_ENDPOINT}/openai/v1/responses" \
  --header "Authorization: Bearer ${AGENT_TOKEN}" \
  --header "Content-Type: application/json" \
  --header "User-Agent: insomnia/11.6.1" \
  --data @- <<JSON
{
  "model": "${FOUNDRY_MODEL_DEPLOYMENT_NAME}",
  "input": [
    {
      "role": "user",
      "content": [
        {
          "type": "input_text",
          "text": "Your goal is to report the percent of Microsoft year-to-date stock price change."
        },
        {
          "type": "input_text",
          "text": "Go to finance.yahoo.com, search for MSFT, select YTD on the chart, and report the percent value shown."
        }
      ]
    }
  ],
  "tools": [
    {
      "type": "mcp",
      "server_label": "toolbox",
      "server_url": "${FOUNDRY_PROJECT_ENDPOINT}/toolboxes/browser-automation-toolbox/versions/<version>/mcp?api-version=v1",
      "require_approval": "never",
      "project_connection_id": "browser-automation-toolbox-conn"
    }
  ]
}
JSON

Usare lo strumento di automazione del browser con un esempio di agenti

L'esempio TypeScript seguente illustra come creare un agente con lo strumento di automazione browser, eseguire attività di esplorazione Web ed elaborare le risposte di streaming con eventi di automazione del browser. Per una versione JavaScript di questo esempio, vedere l'esempio JavaScript per lo strumento di automazione del browser nel repository Azure SDK per JavaScript in GitHub.

import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const BROWSER_CONNECTION_ID = "your-browser-automation-connection-id";

const handleBrowserCall = (item: any) => {
  // TODO: support browser_automation_preview_call schema
  const callId = item.call_id;
  const argumentsStr = item.arguments;

  // Parse the arguments string into a dictionary
  let query = null;
  if (argumentsStr && typeof argumentsStr === "string") {
    try {
      const argumentsObj = JSON.parse(argumentsStr);
      query = argumentsObj.query;
    } catch (e) {
      console.error("Failed to parse arguments:", e);
    }
  }

  console.log(`Call ID: ${callId ?? "None"}`);
  console.log(`Query arguments: ${query ?? "None"}`);
};

export async function main(): Promise<void> {
  // Create clients to call Foundry API
  const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
  const openai = project.getOpenAIClient();

  console.log("Creating a toolbox with the Browser Automation tool...");

  // 1. Add the Browser Automation tool to a toolbox. Using a toolbox is the recommended
  //    way to give agents tools. See /azure/foundry/agents/concepts/toolbox-overview
  const toolbox = await project.toolboxes.createVersion(
    "browser-automation-toolbox",
    [
      {
        type: "browser_automation_preview",
        browser_automation_preview: {
          connection: {
            project_connection_id: BROWSER_CONNECTION_ID,
          },
        },
      },
    ],
    { description: "Toolbox with the Browser Automation tool" },
  );

  // 2. The toolbox exposes an MCP-compatible endpoint.
  const toolboxMcpUrl =
    `${PROJECT_ENDPOINT}/toolboxes/${toolbox.name}` +
    `/versions/${toolbox.version}/mcp?api-version=v1`;

  // 3. Create a remote-tool project connection that points at the toolbox endpoint.
  //    Use a user Entra token so the caller's identity is passed through
  //    (audience https://ai.azure.com). Create the connection once, for example
  //    with the Azure Developer CLI:
  //
  //    azd ai connection create browser-automation-toolbox-conn \
  //      --kind remote-tool \
  //      --target "<toolboxMcpUrl>" \
  //      --auth-type user-entra-token \
  //      --audience https://ai.azure.com
  const toolboxConnectionName = "browser-automation-toolbox-conn";

  // 4. Attach the toolbox to a prompt agent as an MCP tool.
  const agent = await project.agents.createVersion("MyAgent", {
    kind: "prompt",
    model: "gpt-4.1-mini",
    instructions: `You are an Agent helping with browser automation tasks. 
            You can answer questions, provide information, and assist with various tasks 
            related to web browsing using the Browser Automation tool available to you.`,
    tools: [
      {
        type: "mcp",
        server_label: "toolbox",
        server_url: toolboxMcpUrl,
        require_approval: "never",
        project_connection_id: toolboxConnectionName,
      },
    ],
  });
  console.log(`Agent created (id: ${agent.id}, name: ${agent.name}, version: ${agent.version})`);

  console.log("\nSending browser automation request with streaming...");
  const streamResponse = await openai.responses.create(
    {
      input: `Your goal is to report the percent of Microsoft year-to-date stock price change.
            To do that, go to the website finance.yahoo.com.
            At the top of the page, you will find a search bar.
            Enter the value 'MSFT', to get information about the Microsoft stock price.
            At the top of the resulting page you will see a default chart of Microsoft stock price.
            Click on 'YTD' at the top of that chart, and report the percent value that shows up just below it.`,
      stream: true,
    },
    {
      body: {
        agent_reference: { name: agent.name, type: "agent_reference" },
        tool_choice: "required",
      },
    },
  );

  // Process the streaming response
  for await (const event of streamResponse) {
    if (event.type === "response.created") {
      console.log(`Follow-up response created with ID: ${event.response.id}`);
    } else if (event.type === "response.output_text.delta") {
      process.stdout.write(event.delta);
    } else if (event.type === "response.output_text.done") {
      console.log("\n\nFollow-up response done!");
    } else if (
      event.type === "response.output_item.done" ||
      event.type === "response.output_item.added"
    ) {
      const item = event.item as any;
      if (item.type === "browser_automation_preview_call") {
        handleBrowserCall(item);
      }
    } else if (event.type === "response.completed") {
      console.log("\nFollow-up completed!");
    }
  }

  // Clean up resources by deleting the agent version
  // This prevents accumulation of unused resources in your project
  console.log("\nCleaning up resources...");
  await project.agents.deleteVersion(agent.name, agent.version);
  console.log("Agent deleted");

  console.log("\nBrowser Automation sample completed!");
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Che cosa fa questo codice

Questo esempio crea una versione dell'agente con lo strumento di automazione browser abilitata, invia un prompt che richiede l'utilizzo dello strumento ed elabora gli eventi di streaming, inclusi gli eventi di chiamata di automazione del browser, al loro arrivo.

Input necessari

  • Un endpoint del progetto Foundry e un ID connessione di automazione del browser. Per informazioni dettagliate, vedere Configurazione .

Output previsto

Viene visualizzato un "Agente creato..." messaggio, output di testo in streaming e, facoltativamente, dettagli delle chiamate del browser quando viene richiamato lo strumento. L'output varia in base al contenuto del sito Web e al comportamento del modello.

Usare l'automazione del browser grazie a un agente Java

Aggiornare questi valori nell'agente Java dopo aver creato la casella degli strumenti:

  • projectEndpoint - L'endpoint del progetto.
  • toolboxMcpUrl - Endpoint MCP per la versione della casella degli strumenti che contiene lo strumento di automazione browser.
  • toolboxConnectionName: nome della connessione del progetto remote-tool per l'endpoint della casella degli strumenti.

Aggiungi la dipendenza a pom.xml:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-ai-agents</artifactId>
    <version>2.4.0</version>
</dependency>

Tip

Consigliato: Per la maggior parte degli agenti, aggiungere lo strumento Di automazione browser tramite una casella degli strumenti e collegare la casella degli strumenti all'agente come strumento MCP. L'SDK di Java non espone ancora un'API di creazione della casella degli strumenti, quindi creare la casella degli strumenti usando l'esempio Python, l'API REST, C# o TypeScript o il portale Foundry e quindi fare riferimento al relativo endpoint MCP dall'agente Java come McpTool.

Limitazioni

  • Solo siti attendibili: usare questo strumento solo con i siti considerati attendibili. Evitare pagine che richiedono credenziali, pagamenti o altre azioni sensibili.
  • Volatilità delle pagine: le pagine Web possono cambiare in qualsiasi momento. L'agente potrebbe fallire se il layout della pagina, le etichette o i flussi di navigazione cambiano. Incorporare la gestione degli errori nei flussi di lavoro.
  • Applicazioni complesse a pagina singola con JavaScript: le SPA con contenuto dinamico potrebbero non essere gestite correttamente.

Considerazioni sul costo

Questo strumento usa una risorsa area di lavoro Playwright per eseguire sessioni del browser. Per informazioni sui prezzi e sull'utilizzo, vedere la documentazione dell'area di lavoro Playwright. Per indicazioni sull'ottimizzazione dell'utilizzo degli strumenti, vedere Best practices for using tools in Microsoft Foundry Agent Service.

Risoluzione dei problemi

L'agente non usa lo strumento

  • Verificare di aver creato l'agente con lo strumento di automazione browser abilitato.
  • Nella richiesta richiedere l'utilizzo dello strumento (ad esempio, tool_choice="required").
  • Usare la traccia in Microsoft Foundry per verificare se si è verificata una chiamata allo strumento. Per indicazioni, vedere le migliori pratiche per l'uso degli strumenti nel servizio agenti di Microsoft Foundry.

Errori di connessione o autorizzazione

  • Verifica che l'ID di connessione automatica del browser corrisponda all'ID di risorsa della connessione dell'area di lavoro in Playwright nel progetto.
  • Verificare che l'identità del progetto abbia accesso alla risorsa dell'area di lavoro Playwright.
  • Se di recente è stato ruotato il token di accesso Playwright, aggiornare la chiave di connessione del progetto Foundry.

errori Python SDK

  • Area di lavoro non trovata: verificare che l'endpoint del progetto usi il formato corretto: https://{account-name}.services.ai.azure.com/api/projects/{project-name}. Non utilizzare il formato di endpoint legacy di Azure ML.
  • Errori imprevisti relativi agli argomenti delle parole chiave: assicurarsi di usare la versione più recente di azure-ai-projects. Eseguire pip install "azure-ai-projects>=2.0.0" --upgrade per eseguire l'aggiornamento.
  • Errori di importazione: installare tutti i pacchetti necessari: pip install "azure-ai-projects>=2.0.0".

Timeout delle richieste

L'automazione del browser può richiedere più tempo rispetto alle richieste tipiche.

  • Aumentare il timeout del client (l'esempio C# imposta un timeout di 5 minuti).
  • Ridurre l'ambito del prompt( ad esempio, meno pagine e meno interazioni).

Eseguire la pulizia

  • Eliminare la versione dell'agente creata per il test.
  • Revocare o ruotare il token di accesso Playwright se non è più necessario.
  • Rimuovere la connessione al progetto se non è più necessaria. Per altre informazioni, vedere Aggiungi una connessione in Microsoft Foundry.

Scenari di esempio

  • Compilazione dei moduli: gestisce diversi tipi di modulo con convalida, DOM, autenticazione, conformità e supporto del ragionamento a più turni.

  • Scraping Web: consente di esplorare i siti autenticati per raschiare, confrontare e strutturare i dati tra le origini.

Nota sulla trasparenza

Esaminare la nota sulla trasparenza quando si usa questo strumento. Lo strumento di automazione browser è uno strumento in grado di eseguire attività del browser reali tramite prompt in linguaggio naturale, abilitando attività di esplorazione automatizzate senza intervento umano.

Esaminare le considerazioni sull'intelligenza artificiale responsabile quando si usa questo strumento.