Conectar-se a um ponto de extremidade de agente A2A do Serviço de Agente do Foundry (versão prévia)

Importante

Itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou ter recursos restritos. Para obter mais informações, consulte Supplemental Terms of Use for Microsoft Azure Previews.

Você pode estender os recursos do agente do Microsoft Foundry conectando-se a um ponto de extremidade remoto agent2Agent (A2A) que dá suporte ao protocolo A2A. A ferramenta A2A permite a comunicação agente a agente por meio de um protocolo padronizado, permitindo que seu agente do Foundry troque o contexto e colabore com agentes externos.

Este artigo mostra como configurar uma conexão A2A e chamar um ponto de extremidade A2A remoto a partir do seu agente do Serviço de Agente do Foundry.

Se você quiser expor seu próprio agente como um endpoint A2A que pode ser chamado por outros agentes, consulte Hospedar um endpoint de agente compatível com A2A.

Quando o agente do Foundry chama um agente remoto por meio da ferramenta A2A, o agente remoto processa a solicitação e retorna uma resposta. O agente do Foundry usa essa resposta para gerar uma resposta para o usuário e continua a gerenciar a conversa.

Para saber mais sobre como otimizar o uso da ferramenta, consulte as práticas recomendadas.

Dica

Considere adicionar essa ferramenta usando uma caixa de ferramentas. Usando uma caixa de ferramentas, você pode reutilizar a ferramenta entre agentes e runtimes, bem como centralizar o gerenciamento de credenciais, controle de versão e imposição de política por meio de um ponto de extremidade MCP gerenciado. Consulte o início rápido da caixa de ferramentas.

Nota

Migrando de agent.as_tool ou Connected Agents?

A ferramenta Agentes Conectados da API de Agentes clássica não está disponível no novo Serviço do Foundry Agent. Para conectar um agente a outro, use uma das seguintes abordagens:

Para obter um mapeamento completo das ferramentas clássicas de agente para seus substitutos na nova API, consulte disponibilidade das ferramentas de agente.

Pré-requisitos

  • Uma assinatura Azure com um projeto do Foundry ativo.

  • Uma implantação de modelo (por exemplo, gpt-4.1-mini) em seu projeto do Foundry.

  • Funções de Azure necessárias no projeto foundry:

    • Foundry Project Manager para criar a conexão do projeto A2A.
    • Usuário do Foundry para criar e testar o agente.

    Importante

    As funções RBAC do Foundry foram renomeadas recentemente. Foundry User, Foundry Owner, Foundry Account Owner e Foundry Project Manager eram anteriormente chamados de Usuário do Azure AI, Proprietário do Azure AI, Proprietário da conta do Azure AI e Gerente de Projeto do Azure AI. Você ainda pode ver os nomes anteriores em alguns lugares enquanto essa mudança de nome está sendo implementada. Os IDs das funções e as permissões principais não são alterados com a mudança de nome.

  • Instalação do SDK:

    • Python (disponibilidade geral): pip install "azure-ai-projects>=2.0.0"
    • C#: Azure.AI.Projects pacote NuGet
    • TypeScript: Node.js 22 ou mais recente e o pacote @azure/ai-projects npm. A ferramenta A2A está em versão prévia.
    • Java: dependência do Maven com.azure:azure-ai-agents:2.0.0
  • Valores a serem atualizados no código:

    • URL do ponto de extremidade do projeto (por exemplo, https://<resource>.ai.azure.com/api/projects/<project>).
    • Nome da implantação do modelo (por exemplo, gpt-4.1-mini).
    • Nome da conexão A2A (criado no portal do Foundry).
    • URI base A2A (opcional, necessário apenas para nãoRemoteA2A conexões).
  • Uma conexão A2A configurada em seu projeto do Foundry. Para obter exemplos de configuração de conexão e REST, consulte Criar uma conexão A2A.

  • Para um agente do Foundry como destino, use seu caminho base A2A, habilite o A2A de entrada e conceda à identidade de chamada a função Consumidor do Agente do Foundry ou superior no projeto de destino. Para ver o requisito da função, consulte Configurar a autenticação para solicitações recebidas.

  • Os agentes de destino do Foundry oferecem suporte às versões 1.0 e 0.3 do protocolo A2A. A versão 1.0 usa JSON-RPC. Há suporte apenas para a modalidade de texto e não há suporte para respostas de streaming. Para obter detalhes, consulte as limitações do A2A.

Suporte ao uso

A tabela a seguir mostra o SDK e o suporte à instalação.

Suporte ao Microsoft Foundry SDK do Python C# SDK SDK para JavaScript SDK do Java API REST Configuração básica do agente Configuração do agente padrão
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Criar uma conexão A2A

Crie uma conexão de projeto para o ponto de extremidade A2A para que você possa armazenar a autenticação com segurança e reutilizá-la entre as versões do agente.

Para obter detalhes sobre as abordagens de autenticação compatíveis, consulte Autenticação Agent2Agent (A2A).

Se você estiver se conectando a um agente do Foundry como destino, defina o destino da conexão para o caminho base A2A do agente de destino, https://{account}.services.ai.azure.com/api/projects/{project}/agents/{agent}/endpoint/protocols/a2a, e use o público-alvo https://ai.azure.com. Não defina um caminho para o cartão do agente. O Foundry resolve o caminho do cartão do agente padrão automaticamente e negocia a versão do protocolo A2A para você. Você também não precisa configurar o campo opcional send_credentials_for_agent_card, porque o Foundry não exige que a busca do cartão do agente inclua credenciais separadas. No entanto, o agente de destino deve ter o A2A de entrada habilitado; consulte Habilitar A2A de entrada em um agente do Foundry.

Para outros pontos de extremidade, se o ponto de extremidade exigir autenticação para ler seu cartão do agente, defina send_credentials_for_agent_card como true na definição da ferramenta A2A. Caso contrário, o Serviço do Agente recuperará o cartão do agente anonimamente por padrão. Para obter mais informações, consulte Credenciais para a solicitação de cartão do agente.

Criar a conexão no portal do Foundry

  1. Entre no Microsoft Foundry. Verifique se o interruptor da Nova Fundição está ativado. Estas etapas se referem ao Foundry (novo).
  2. Selecione Ferramentas.
  3. Selecione Ferramenta Conectar.
  4. Selecione a guia Personalizado.
  5. Selecione Agent2Agent (A2A) e, em seguida, selecione Criar.
  6. Insira um Nome e um ponto de extremidade do agente A2A.
  7. Em Autenticação, selecione um método de autenticação. Para autenticação baseada em chave, defina o nome da credencial (por exemplo) x-api-keye o valor do segredo correspondente.

Obtenha o identificador de conexão para o código

Use o nome da conexão no código. Seu código usa esse nome para recuperar a ID de conexão completa em runtime:

  • Python/C#/TypeScript: chame project.connections.get(connection_name) para obter o objeto de conexão e acesse connection.id.
  • API REST: inclua a ID de conexão no project_connection_id campo da definição da ferramenta A2A.

Criar um agente com a ferramenta A2A

Selecione Prompt Agents para usar o SDK de Projetos de IA Azure para criar um agente de prompt do lado do servidor ou Hosted Agents para usar o Agent Framework FoundryChatClient para criar um agente efêmero em processo.

Agentes de prompt

from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
    PromptAgentDefinition,
    A2APreviewTool,
)

# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
A2A_CONNECTION_NAME = "my-a2a-connection"
AGENT_NAME = "my-agent"

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

# Create the A2A tool from the project connection
a2a_connection = project.connections.get(A2A_CONNECTION_NAME)
tool = A2APreviewTool(
    project_connection_id=a2a_connection.id,
)

# Create the agent with the A2A tool
agent = project.agents.create_version(
    agent_name=AGENT_NAME,
    definition=PromptAgentDefinition(
        model="gpt-5-mini",
        instructions="You are a helpful assistant.",
        tools=[tool],
    ),
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")

Em seguida, envie uma solicitação para o agente e imprima a resposta:

# Send a request to the agent
response = openai.responses.create(
    tool_choice="required",
    input="What can the secondary agent do?",
    extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)
print(response.output_text)

# Clean up the created agent version
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)

Saída esperada

O agente responde com informações sobre os recursos do agente secundário, demonstrando uma comunicação A2A bem-sucedida.

Agentes hospedados

Este exemplo usa FoundryChatClient do Microsoft Agent Framework para criar o a2a-toolbox e conectar-se ao seu endpoint MCP com FoundryToolbox. Instale os pacotes com pip install agent-framework-foundry azure-ai-projects, substitua PROJECT_ENDPOINT pelo endpoint do seu projeto e faça login com az login. Para obter o padrão completo da caixa de ferramentas do agente hospedado, consulte o exemplo completo.

import asyncio

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient, FoundryToolbox
from azure.identity import AzureCliCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import A2APreviewToolboxTool

PROJECT_ENDPOINT = "https://<account>.services.ai.azure.com/api/projects/<project>"
A2A_CONNECTION_NAME = "my-a2a-connection"

# Create the A2A tool and add it to a toolbox
credential = AzureCliCredential()
project = AIProjectClient(endpoint=PROJECT_ENDPOINT, credential=credential)
a2a_connection = project.connections.get(A2A_CONNECTION_NAME)
toolbox = project.toolboxes.create_version(
    name="a2a-toolbox",
    description="Toolbox with the A2A tool",
    tools=[A2APreviewToolboxTool(project_connection_id=a2a_connection.id)],
)

Em seguida, anexe a caixa de ferramentas ao agente hospedado como uma ferramenta MCP e execute-a:

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

    # 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 are a helpful assistant.",
        tools=[toolbox_tool],
    )

    result = await agent.run("What can the secondary agent do?")
    print(f"Agent: {result.text}")


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

Saída esperada

O agente chama o agente secundário via o endpoint MCP a2a-toolbox e imprime a resposta consolidada:

Agent: The secondary agent can help with ...

Para obter o padrão completo da caixa de ferramentas do agente hospedado, consulte o exemplo completo.


Criar um agente com a ferramenta A2A

Este exemplo cria um agente que pode chamar um endpoint A2A remoto. Para obter as etapas de configuração da conexão, consulte Criar uma conexão A2A. Selecione Prompt Agents para usar o SDK do Azure AI Projects para criar um agente de prompt no servidor, ou Hosted Agents para usar o Microsoft Agent Framework para compor dois agentes no processo, expondo um agente como ferramenta de função de outro agente.

Agentes de prompt

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

var projectEndpoint = "https://<resource>.ai.azure.com/api/projects/<project>";
var a2aConnectionName = "my-a2a-connection";
var a2aBaseUri = "https://<a2a-endpoint>"; // Optional for non-RemoteA2A connections.

// Create project client to call Foundry API
AIProjectClient projectClient = new(endpoint: new Uri(projectEndpoint), tokenProvider: new DefaultAzureCredential());

// Create the A2ATool and provide it with the A2A connection ID
AIProjectConnection a2aConnection = projectClient.Connections.GetConnection(connectionName: a2aConnectionName);
A2APreviewTool a2aTool = new()
{
    ProjectConnectionId = a2aConnection.Id
};
if (!string.Equals(a2aConnection.Type.ToString(), "RemoteA2A"))
{
  if (string.IsNullOrWhiteSpace(a2aBaseUri))
    {
    throw new InvalidOperationException($"The connection {a2aConnection.Name} is of {a2aConnection.Type.ToString()} type and does not carry the A2A service base URI. Set a2aBaseUri before running this sample.");
    }
    a2aTool.BaseUri = new Uri(a2aBaseUri);
}

// Create the agent with the A2A tool
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-5-mini")
{
    Instructions = "You are a helpful assistant.",
    Tools = { a2aTool }
};
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "myAgent",
    options: new(agentDefinition));

Em seguida, envie uma solicitação para o agente e imprima a resposta:

// Send the request and print the response
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
CreateResponseOptions responseOptions = new()
{
    ToolChoice = ResponseToolChoice.CreateRequiredChoice(),
    InputItems = { ResponseItem.CreateUserMessageItem("What can the secondary agent do?") },
};
ResponseResult response = responseClient.CreateResponse(responseOptions);
Console.WriteLine(response.GetOutputText());

// Clean up the created agent version
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);

Saída esperada

O console exibe o texto de resposta do agente do ponto de extremidade A2A. Após a conclusão, a versão do agente é excluída para limpar os recursos.

Agentes hospedados

Este exemplo cria o a2a-toolbox com o SDK do Azure AI Projects e, em seguida, usa a integração AddFoundryToolboxes do Microsoft Agent Framework para tornar a ferramenta A2A disponível para o agente hospedado. Defina as variáveis de ambiente AZURE_AI_PROJECT_ENDPOINT, AZURE_OPENAI_ENDPOINT e AZURE_AI_MODEL_DEPLOYMENT_NAME e faça login com az login. Para obter o padrão completo da caixa de ferramentas do agente hospedado, consulte o exemplo completo.

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.Extensions.AI;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Foundry.Hosting;
using Microsoft.Extensions.DependencyInjection;
using OpenAI.Chat;

const string AgentInstructions = "You are a helpful assistant.";
const string AgentName = "A2AAgent";

string projectEndpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT")
    ?? "https://<account>.services.ai.azure.com/api/projects/<project>";
string a2aConnectionName = "my-a2a-connection";
string openAiEndpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
    ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5-mini";

DefaultAzureCredential credential = new();

// Create the A2A tool and add it to a toolbox
AIProjectClient projectClient = new(endpoint: new Uri(projectEndpoint), tokenProvider: credential);
AIProjectConnection a2aConnection = projectClient.Connections.GetConnection(connectionName: a2aConnectionName);
A2APreviewTool a2aTool = new() { ProjectConnectionId = a2aConnection.Id };
ProjectsAgentTool a2aProjectTool = a2aTool;
ToolboxVersion toolboxVersion = projectClient.AgentAdministrationClient
    .GetAgentToolboxes().CreateToolboxVersion(
        toolboxName: "a2a-toolbox",
        tools: [a2aProjectTool],
        description: "Toolbox with the A2A tool");

Em seguida, anexe a caixa de ferramentas ao agente hospedado:

// 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();

Saída esperada

Ao ser invocado, o agente hospedado chama o agente secundário por meio do endpoint MCP a2a-toolbox e imprime a resposta consolidada:

Agent: The secondary agent can help with ...

Para obter uma integração mantida do .NET Agent Framework, consulte Usar uma caixa de ferramentas com um agente hospedado.


Criar uma conexão A2A usando a API REST

Use esses exemplos para criar uma conexão de projeto que armazene suas informações de autenticação.

Obtenha um token de acesso de curta duração para o endpoint do Azure Resource Manager e mantenha-o na sessão atual do shell. Não imprima, registre, faça commit nem armazene o token. Solicite um novo token depois que ele expirar:

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

Baseado em chave

curl --request PUT \
  --url 'https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group_name}}/providers/Microsoft.CognitiveServices/accounts/{{foundry_account_name}}/projects/{{project_name}}/connections/{{connection_name}}?api-version=2025-04-01-preview' \
  --header "Authorization: Bearer $ARM_TOKEN" \
  --header 'Content-Type: application/json' \
  --data '{
    "tags": null,
    "location": null,
    "name": "{{connection_name}}",
    "type": "Microsoft.MachineLearningServices/workspaces/connections",
    "properties": {
      "authType": "CustomKeys",
      "group": "ServicesAndApps",
      "category": "RemoteA2A",
      "expiryTime": null,
      "target": "{{a2a_endpoint}}",
      "isSharedToAll": true,
      "sharedUserList": [],
      "Credentials": {
        "Keys": {
          "{{key_name}}": "{{key_value}}"
        }
      },
      "metadata": {
        "ApiType": "Azure"
      }
    }
  }'

Passagem de identidade gerenciada por OAuth

Essa opção tem suporte quando você seleciona OAuth Gerenciado no catálogo de ferramentas do Foundry.

curl --request PUT \
  --url 'https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group_name}}/providers/Microsoft.CognitiveServices/accounts/{{foundry_account_name}}/projects/{{project_name}}/connections/{{connection_name}}?api-version=2025-04-01-preview' \
  --header 'Authorization: Bearer {{token}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "tags": null,
    "location": null,
    "name": "{{connection_name}}",
    "type": "Microsoft.MachineLearningServices/workspaces/connections",
    "properties": {
      "authType": "OAuth2",
      "group": "ServicesAndApps",
      "category": "RemoteA2A",
      "expiryTime": null,
      "target": "{{a2a_endpoint}}",
      "isSharedToAll": true,
      "sharedUserList": [],
      "useCustomConnector": false,
      "connectorName": "{{connector_name}}",
      "Credentials": {},
      "metadata": {
        "ApiType": "Azure"
      }
    }
  }'

Passagem de identidade OAuth personalizada

O OAuth personalizado não dá suporte à operação de atualização. Crie uma nova conexão se você quiser atualizar determinados valores.

Se o aplicativo OAuth não exigir um segredo do cliente, omita ClientSecret.

Nota

Forneça cada escopo como uma cadeia de caracteres separada na Scopes matriz. Se suas ferramentas ou interface do usuário esperam escopos como uma única cadeia de caracteres, separe-os com um único espaço, não uma vírgula , o que segue a especificação OAuth 2.0.

curl --request PUT \
  --url 'https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group_name}}/providers/Microsoft.CognitiveServices/accounts/{{foundry_account_name}}/projects/{{project_name}}/connections/{{connection_name}}?api-version=2025-04-01-preview' \
  --header 'Authorization: Bearer {{token}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "tags": null,
    "location": null,
    "name": "{{connection_name}}",
    "type": "Microsoft.MachineLearningServices/workspaces/connections",
    "properties": {
      "authType": "OAuth2",
      "group": "ServicesAndApps",
      "category": "RemoteA2A",
      "expiryTime": null,
      "target": "{{a2a_endpoint}}",
      "isSharedToAll": true,
      "sharedUserList": [],
      "TokenUrl": "{{token_url}}",
      "AuthorizationUrl": "{{authorization_url}}",
      "RefreshUrl": "{{refresh_url}}",
      "Scopes": [
        "{{scope}}"
      ],
      "Credentials": {
        "ClientId": "{{client_id}}",
        "ClientSecret": "{{client_secret}}"
      },
      "metadata": {
        "ApiType": "Azure"
      }
    }
  }'

Identidade gerenciada do projeto Foundry

curl --request PUT \
  --url 'https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group_name}}/providers/Microsoft.CognitiveServices/accounts/{{foundry_account_name}}/projects/{{project_name}}/connections/{{connection_name}}?api-version=2025-04-01-preview' \
  --header 'Authorization: Bearer {{token}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "tags": null,
    "location": null,
    "name": "{{connection_name}}",
    "type": "Microsoft.MachineLearningServices/workspaces/connections",
    "properties": {
      "authType": "ProjectManagedIdentity",
      "group": "ServicesAndApps",
      "category": "RemoteA2A",
      "expiryTime": null,
      "target": "{{a2a_endpoint}}",
      "isSharedToAll": true,
      "sharedUserList": [],
      "audience": "{{audience}}",
      "Credentials": {},
      "metadata": {
        "ApiType": "Azure"
      }
    }
  }'

Identidade do agente

curl --request PUT \
  --url 'https://management.azure.com/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group_name}}/providers/Microsoft.CognitiveServices/accounts/{{foundry_account_name}}/projects/{{project_name}}/connections/{{connection_name}}?api-version=2025-04-01-preview' \
  --header 'Authorization: Bearer {{token}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "tags": null,
    "location": null,
    "name": "{{connection_name}}",
    "type": "Microsoft.MachineLearningServices/workspaces/connections",
    "properties": {
      "authType": "AgenticIdentityToken",
      "group": "ServicesAndApps",
      "category": "RemoteA2A",
      "expiryTime": null,
      "target": "{{a2a_endpoint}}",
      "isSharedToAll": true,
      "sharedUserList": [],
      "audience": "{{audience}}",
      "Credentials": {},
      "metadata": {
        "ApiType": "Azure"
      }
    }
  }'

Adicione a ferramenta A2A ao Serviço de Agente do Foundry

Obtenha um token de acesso:

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

Use AGENT_TOKEN para autorizar solicitações para o plano de dados do projeto.

A maneira recomendada de adicionar uma ferramenta A2A é por meio de uma caixa de ferramentas e anexar a caixa de ferramentas ao seu agente como uma ferramenta MCP. Veja o que é uma caixa de ferramentas?

  1. Crie uma caixa de ferramentas que contenha a ferramenta A2A:
curl --request POST \
  --url '{{project_endpoint}}/toolboxes/a2a-toolbox/versions?api-version=v1' \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "description": "Toolbox with the A2A tool",
    "tools": [
      {
        "type": "a2a_preview",
        "base_url": "{{a2a_endpoint}}",
        "project_connection_id": "{{project_connection_id}}"
      }
    ]
  }'

O kit de ferramentas expõe um endpoint compatível com MCP em {{project_endpoint}}/toolboxes/a2a-toolbox/versions/<version>/mcp?api-version=v1, em que <version> é a versão retornada pela chamada anterior.

  1. Crie uma conexão de projeto de ferramenta remota que aponte para o ponto de extremidade da caixa de ferramentas, usando um token Entra do usuário para que a identidade do chamador seja passada (audiência https://ai.azure.com).

    azd ai connection create a2a-toolbox-conn \
      --kind remote-tool \
      --target "{{project_endpoint}}/toolboxes/a2a-toolbox/versions/<version>/mcp?api-version=v1" \
      --auth-type user-entra-token \
      --audience https://ai.azure.com
    
  2. Crie uma versão do agente que use a caixa de ferramentas anexando-a como uma ferramenta MCP:

    curl --request POST \
      --url '{{project_endpoint}}/agents/{{agent_name}}/versions?api-version=v1' \
      -H "Authorization: Bearer $AGENT_TOKEN" \
      -H 'Content-Type: application/json' \
      -d '{
      "description": "Test agent version description",
      "definition": {
        "kind": "prompt",
        "model": "{{model}}",
        "tools": [
          {
            "type": "mcp",
            "server_label": "toolbox",
            "server_url": "{{project_endpoint}}/toolboxes/a2a-toolbox/versions/<version>/mcp?api-version=v1",
            "require_approval": "never",
            "project_connection_id": "a2a-toolbox-conn"
          }
        ],
        "instructions": "You are a helpful agent."
      }
    }'
    

Para excluir uma versão do agente, envie uma DELETE solicitação para o mesmo endpoint com o nome e a versão do agente.

Adicionar uma ferramenta A2A a uma caixa de ferramentas com a CLI do Desenvolvedor Azure

Crie uma conexão remote-a2a para o agente remoto e, em seguida, referencie-a em um YAML mínimo da caixa de ferramentas.

Etapa 1. Criar a conexão

Escolha a variante de autenticação necessária:

# No auth
azd ai connection create my-a2a-conn \
  --kind remote-a2a \
  --target https://your-remote-agent.azurecontainerapps.io \
  --auth-type none

# Custom-keys header
# Set A2A_AUTHORIZATION_HEADER in your shell without committing its value.
azd ai connection create my-a2a-conn \
  --kind remote-a2a \
  --target https://your-remote-agent.azurecontainerapps.io \
  --auth-type custom-keys \
  --custom-key "Authorization=$A2A_AUTHORIZATION_HEADER"

# OAuth — bring your own app registration
azd ai connection create my-a2a-conn \
  --kind remote-a2a \
  --target https://your-remote-agent.azurecontainerapps.io \
  --auth-type oauth2 \
  --authorization-url https://auth.example.com/authorize \
  --token-url https://auth.example.com/token \
  --client-id <oauth-client-id> \
  --client-secret <oauth-client-secret> \
  --scopes "<scope1> <scope2>"

# User Entra token (managed user identity passthrough)
azd ai connection create my-a2a-conn \
  --kind remote-a2a \
  --target https://your-remote-agent.azurecontainerapps.io \
  --auth-type user-entra-token \
  --audience "<entra-audience>"

# Project managed identity
azd ai connection create my-a2a-conn \
  --kind remote-a2a \
  --target https://your-remote-agent.azurecontainerapps.io \
  --auth-type project-managed-identity \
  --audience "<entra-audience>"

# Agentic identity
azd ai connection create my-a2a-conn \
  --kind remote-a2a \
  --target https://your-remote-agent.azurecontainerapps.io \
  --auth-type agentic-identity \
  --audience "<entra-audience>"
--auth-type Sinalizadores adicionais
none
custom-keys --custom-key "Header=Value" (repetível)
oauth2 --authorization-url, --token-url, --client-id, , --client-secret--scopes
user-entra-token --audience <entra-audience>
project-managed-identity --audience <entra-audience> (opcional)
agentic-identity --audience <entra-audience>

Etapa 2. Definir a caixa de ferramentas

# my-toolbox.yaml
description: Agent-to-Agent toolbox
connections:
  - name: my-a2a-conn

Etapa 3. Criar a caixa de ferramentas

azd ai toolbox create my-toolbox --from-file my-toolbox.yaml

Este exemplo demonstra como criar um agente de IA com recursos A2A usando o tipo de ferramenta a2a_preview e o cliente Azure projetos de IA. O agente se comunica com outros agentes e fornece respostas com base nas interações entre agentes usando o protocolo A2A.

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

const PROJECT_ENDPOINT = "https://<resource>.ai.azure.com/api/projects/<project>";
const A2A_CONNECTION_NAME = "my-a2a-connection";

// Create clients to call Foundry API
const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
const openai = project.getOpenAIClient();

// Get the A2A connection by name to retrieve its ID
const a2aConnection = await project.connections.get(A2A_CONNECTION_NAME);

// Add the A2A tool to a toolbox
const toolbox = await project.toolboxes.createVersion(
  "a2a-toolbox",
  [
    {
      type: "a2a_preview",
      project_connection_id: a2aConnection.id,
    },
  ],
  { description: "Toolbox with the A2A tool" },
);

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

Crie uma conexão de projeto de ferramenta remota que aponte para o ponto de extremidade da caixa de ferramentas. Use um token de usuário do Entra para que a identidade do chamador seja transmitida (público-alvo https://ai.azure.com). Crie a conexão uma vez, por exemplo, com a CLI do desenvolvedor do Azure:

azd ai connection create a2a-toolbox-conn \
  --kind remote-tool \
  --target "<toolboxMcpUrl>" \
  --auth-type user-entra-token \
  --audience https://ai.azure.com

Em seguida, anexe a caixa de ferramentas a um agente de prompt como uma ferramenta MCP e execute-a:

const toolboxConnectionName = "a2a-toolbox-conn";

// Attach the toolbox to a prompt agent as an MCP tool
const agent = await project.agents.createVersion("MyA2AAgent", {
  kind: "prompt",
  model: "gpt-5-mini",
  instructions: "You are a helpful assistant.",
  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})`);

// Send a request to the agent
const response = await openai.responses.create(
  {
    input: "What can the secondary agent do?",
  },
  {
    body: {
      agent_reference: { name: agent.name, type: "agent_reference" },
      tool_choice: "required",
    },
  },
);
console.log(response.output_text);

// Clean up the created agent version
await project.agents.deleteVersion(agent.name, agent.version);

Saída esperada

O console exibe o texto de resposta do agente do ponto de extremidade A2A. Após a conclusão, a versão do agente é excluída para limpar os recursos.

Usar a comunicação agente a agente no Java

Atualize esses valores em seu agente de Java depois de criar a caixa de ferramentas:

  • projectEndpoint — O ponto de extremidade do projeto.
  • toolboxMcpUrl — O ponto de extremidade MCP para a versão da caixa de ferramentas que contém a ferramenta A2A.
  • toolboxConnectionName — O nome da conexão de projeto de ferramenta remota para o ponto de extremidade da caixa de ferramentas.

Adicione a dependência ao seu pom.xml:

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

Dica

Recomendado: Para a maioria dos agentes, adicione a ferramenta A2A por meio de uma caixa de ferramentas e anexe a caixa de ferramentas ao seu agente como uma ferramenta MCP. O SDK Java ainda não expõe uma API de criação de caixa de ferramentas, portanto, crie a caixa de ferramentas usando o exemplo Python, API REST, C#ou TypeScript ou o portal do Foundry e, em seguida, referencie seu ponto de extremidade MCP do agente Java como um McpTool.

Solucionando problemas

Questão Causa Resolução
O agente não invoca a ferramenta A2A A definição do agente não inclui a configuração da ferramenta A2A Confirme se a definição do agente inclui a ferramenta A2A e se você configurou a conexão. Caso você esteja utilizando respostas, verifique se não está forçando o uso de outra ferramenta.
O agente não invoca a ferramenta A2A Prompt não requer agente remoto Atualize o prompt para exigir a chamada do agente remoto ou remova as configurações de escolha de ferramenta conflitantes.
Falhas de autenticação (401 ou 403) Incompatibilidade de tipo de autenticação de conexão Confirme se o tipo de autenticação da conexão corresponde aos seus requisitos de ponto de extremidade. Para autenticação baseada em chave, confirme se o nome da credencial corresponde ao que o ponto de extremidade espera (x-api-key ou Authorization).
O exemplo do SDK não consegue localizar a conexão Incompatibilidade de nome de conexão Confirme se o nome da conexão no código corresponde ao nome da conexão na Foundry.
Erros de rede ou TLS Ponto de extremidade inacessível ou certificado inválido Confirme se o ponto de extremidade é acessível publicamente e usa um certificado TLS válido. Verifique as regras de firewall e as configurações de proxy.
O agente remoto retorna uma resposta inesperada Incompatibilidade de formato de resposta Confirme se o agente remoto segue as especificações de protocolo A2A. Verifique se os tipos de conteúdo de resposta correspondem aos formatos esperados.
Tempo limite da conexão Agente remoto lento para responder Aumente as configurações de tempo limite ou verifique o desempenho do agente remoto. Considere implementar uma lógica de repetição com retirada exponencial.
Ferramenta A2A ausente em resposta Ferramenta não habilitada para o agente Recrie o agente com a ferramenta A2A explicitamente habilitada e verifique se a conexão está ativa e configurada corretamente.

Hospedar um endpoint de agente compatível com A2A

Você pode expor seu agente do Foundry diretamente como um ponto de extremidade A2A ativando o protocolo A2A no agente. Para ter acesso a instruções passo a passo, consulte Ativar entrada A2A em um agente do Foundry.

Se o agente for implantado fora do Serviço de Agente ou se você precisar de uma abordagem de hospedagem personalizada, use uma das alternativas a seguir.

Opção 1: registrar um agente A2A personalizado no Plano de Controle do Foundry

Se você já tiver um agente implantado fora do Serviço de Agente que dê suporte ao protocolo A2A, registre-o no Plano de Controle do Foundry para gerenciamento centralizado, observabilidade e governança.

  1. Implante seu agente compatível com A2A em qualquer endpoint acessível.
  2. Registre o agente no Plano de Controle do Foundry e selecione A2A como o protocolo.
  3. A Foundry gera uma URL de proxy e descobre seu cartão de agente em /.well-known/agent-card.json.

Após o registro, outros agentes podem se conectar ao agente por meio da URL do proxy. A Foundry fornece controle de acesso e monitoramento por meio do gateway de IA.

Para configurar a autenticação, consulte Agent2Agent (A2A) authentication.

Opção 2: criar um servidor A2A personalizado que encapsula um agente do Foundry

Crie um servidor A2A leve que delega ao agente do Foundry por meio da API de Respostas:

  1. Crie um servidor A2A usando o SDK oficial do A2A para seu idioma (Python, .NET ou JavaScript).
  2. Implemente o servidor para chamar o agente do Foundry por meio da API de Respostas.
  3. Apresente um cartão de agente em /.well-known/agent-card.json que descreva as funcionalidades do agente.
  4. Implante o servidor e registre-o no Plano de Controle do Foundry.

Para obter mais informações sobre os requisitos de protocolo A2A para servidores, consulte a especificação A2A.

Considerações para o uso de serviços que não são da Microsoft

Você está sujeito aos termos entre você e o provedor de serviços quando usa serviços e servidores não Microsoft conectados ("serviços não Microsoft"). De acordo com seu contrato que rege o uso dos serviços Microsoft Online, serviços não Microsoft são produtos não Microsoft. Ao se conectar a um serviço não Microsoft, você passa alguns dos seus dados (como conteúdo de prompt) para os serviços não Microsoft, ou seu aplicativo pode receber dados dos serviços não Microsoft. Você é responsável pelo uso de serviços não Microsoft e dados, juntamente com quaisquer encargos associados a esse uso.

Serviços não Microsoft, incluindo pontos de extremidade de agentes A2A, que você decide usar com a ferramenta A2A descrita neste artigo, são criados por terceiros, e não pela Microsoft. Microsoft não testou nem verificou esses endpoints de agente A2A. Microsoft não se responsabiliza por você ou por outras pessoas em relação ao uso de qualquer serviço não Microsoft.

Revise e monitore com cuidado os pontos de extremidade do agente A2A que você adiciona ao Serviço de Agente do Foundry. Confie em endpoints hospedados diretamente por provedores de serviços confiáveis, em vez de proxies.

A ferramenta A2A permite passar cabeçalhos personalizados, como chaves de autenticação ou esquemas, que um endpoint do agente A2A pode precisar. Examine todos os dados que você compartilha com serviços que não são da Microsoft, incluindo os pontos de extremidade do agente A2A, e registre em log os dados para fins de auditoria. Esteja ciente das práticas não Microsoft para retenção e localização de dados.