Подключение к конечной точке агента A2A из службы агента Foundry (предварительная версия)

Важно

Элементы, помеченные (предварительная версия) в этой статье, в настоящее время находятся в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или могут иметь ограниченные возможности. Дополнительные сведения см. в разделе Supplemental Terms of Use for Microsoft Azure Previews.

Примечание

Сведения об оптимизации использования средств см. в рекомендациях.

Вы можете расширить возможности агента Microsoft Foundry, подключився к удаленной конечной точке Agent2Agent (A2A), поддерживающей протокол A2A. Инструмент A2A обеспечивает коммуникацию между агентами, облегчая совместное использование контекста между агентами на базе модели Foundry и внешними конечными точками агентов через стандартный протокол. В этом руководстве показано, как настроить подключение и вызвать удаленную конечную точку A2A из сервиса агента Foundry.

Совет

В этой статье описывается, как вызвать удаленную конечную точку A2A с помощью агента Foundry. Если вы хотите открыть собственный агент в качестве конечной точки A2A, которую могут вызывать другие агенты, см. раздел "Размещение конечной точки агента, совместимой с A2A" позднее в этой статье.

Подключение агентов через средство A2A и рабочий процесс с несколькими агентами:

  • С помощью средства A2A: когда агент A вызывает агент B с помощью средства A2A, ответ агента B возвращается к агенту А. Агент А затем суммирует ответ и создает ответ для пользователя. Агент A сохраняет контроль и продолжает обрабатывать входные данные будущих пользователей.
  • Использование многоагентного рабочего процесса: когда агент A вызывает агента B через рабочий процесс или другую оркестрацию с участием нескольких агентов, агент B полностью отвечает на запросы пользователя. Агент A не в курсе. Агент B обрабатывает все последующие входные данные пользователя. Дополнительные сведения см. в разделе Построение рабочего процесса в Microsoft Foundry.

Поддержка использования

В следующей таблице показана поддержка пакета SDK и настройки.

поддержка Microsoft Foundry пакет SDK Python C# SDK JavaScript SDK пакет SDK Java REST API Базовая настройка агента Настройка стандартного агента
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Необходимые условия

  • Подписка Azure с активным проектом Foundry.
  • Развертывание модели (например, gpt-4.1-mini) в вашем проекте Foundry.
  • Необходимая роль Azure: для ресурса Foundry Contributor или Owner для управления и Azure AI User для создания агента.
  • Установка пакета SDK:
    • Python (GA): pip install "azure-ai-projects>=2.0.0"
    • C#: пакет NuGet Azure.AI.Projects
    • TypeScript (GA): @azure/ai-projects пакет npm
    • Java: зависимость Maven com.azure:azure-ai-agents:2.0.0
  • Значения для обновления в коде:
    • URL-адрес конечной точки Project (например, https://<resource>.ai.azure.com/api/projects/<project>).
    • Имя развертывания модели (например, gpt-4.1-mini).
    • Имя подключения A2A (созданное на портале Foundry).
    • Базовый URI A2A (необязательно, требуется только для подключений, отличных от RemoteA2A).
  • Подключение A2A, настроенное в проекте Foundry. Примеры настройки подключения и REST см. в разделе "Создание подключения A2A".

Создание подключения A2A

Установите соединение проекта для вашей конечной точки A2A, чтобы безопасно хранить данные аутентификации и повторно использовать их в различных версиях агента.

Дополнительные сведения о поддерживаемых подходах к проверке подлинности см. в статье Agent2Agent (A2A).

Создание подключения на портале Foundry

  1. Войдите в Microsoft Foundry. Убедитесь, что переключатель New Foundry включен. Эти действия относятся к Foundry (new).
  2. Выберите "Сервис".
  3. Нажмите кнопку "Подключить".
  4. Выберите вкладку "Пользовательский ".
  5. Выберите Agent2Agent (A2A) и нажмите кнопку "Создать".
  6. Введите имя и конечную точку агента A2A.
  7. В разделе "Проверка подлинности" выберите метод проверки подлинности. Для проверки подлинности на основе ключей задайте имя учетных данных (например, x-api-key) и соответствующее значение секрета.

Получение идентификатора подключения для использования в коде

Используйте имя подключения в коде. Код использует это имя для получения полного идентификатора подключения во время выполнения:

  • Python/C#/TypeScript: вызов project.connections.get(connection_name) для получения объекта подключения, а затем доступ к connection.id.
  • REST API: включите идентификатор подключения в project_connection_id поле определения средства A2A.

Пример кода

Создание агента с помощью средства A2A

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

a2a_connection = project.connections.get(A2A_CONNECTION_NAME)

tool = A2APreviewTool(
    project_connection_id=a2a_connection.id,
)

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

user_input = input("Enter your question (e.g., 'What can the secondary agent do?'): \n")

stream_response = openai.responses.create(
    stream=True,
    tool_choice="required",
    input=user_input,
    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.text.done":
        print(f"\nFollow-up response done!")
    elif event.type == "response.output_item.done":
        item = event.item
        if item.type == "remote_function_call":
            print(f"Call ID: {getattr(item, 'call_id')}")
            print(f"Label: {getattr(item, 'label')}")
    elif event.type == "response.completed":
        print(f"\nFollow-up completed!")
        print(f"Full response: {event.response.output_text}")

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

Ожидаемые выходные данные

Агент отвечает, предоставляя информацию о возможностях вторичного агента, демонстрируя успешное взаимодействие между агентами A2A. Вы видите потоковый текст с разностями при генерации ответа, после чего отображается сообщение о завершении. Выходные данные включают идентификатор последующего ответа, изменения в текстах и окончательное резюме о возможностях вспомогательного агента.

Создание агента с помощью средства A2A

В этом примере создается агент, который может вызывать удаленную конечную точку A2A. Инструкции по настройке подключения см. в разделе "Создание подключения A2A".

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.

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.");
    }
    // Provide the service endpoint as a baseUri parameter
    // if the connection is not of a RemoteA2A type.
    a2aTool.BaseUri = new Uri(a2aBaseUri);
}
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
    Instructions = "You are a helpful assistant.",
    Tools = { a2aTool }
};
// Create the Agent version with the A2A tool.
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "myAgent",
    options: new(agentDefinition));

// Create the response and make sure we are always using tool.
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);

// Print the Agent output.
if (response.Status != ResponseStatus.Completed)
{
    throw new InvalidOperationException($"Response did not complete. Status: {response.Status}");
}
Console.WriteLine(response.GetOutputText());

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

Ожидаемые выходные данные

В консоли отображается текст ответа агента из конечной точки A2A. После завершения версия агента удаляется для очистки ресурсов.

Создание подключения A2A с помощью REST API

Используйте эти примеры для создания подключения к проекту, в котором хранятся сведения о аутентификации.

Чтобы получить маркер доступа для конечной точки Azure Resource Manager, выполните следующие действия.

az account get-access-token --scope https://management.azure.com/.default --query accessToken -o tsv

На основе ключей

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": "CustomKeys",
      "group": "ServicesAndApps",
      "category": "RemoteA2A",
      "expiryTime": null,
      "target": "{{a2a_endpoint}}",
      "isSharedToAll": true,
      "sharedUserList": [],
      "Credentials": {
        "Keys": {
          "{{key_name}}": "{{key_value}}"
        }
      },
      "metadata": {
        "ApiType": "Azure"
      }
    }
  }'

Управляемая передача удостоверений OAuth

Этот параметр поддерживается при выборе управляемого OAuth в каталоге инструментов 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"
      }
    }
  }'

Сквозная передача пользовательской идентификации OAuth

Пользовательский OAuth не поддерживает операцию обновления. Создайте новое подключение, если требуется обновить определенные значения.

Если вашему приложению OAuth не требуется секрет клиента, опустите его ClientSecret.

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"
      }
    }
  }'

Управляемое удостоверение проекта 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"
      }
    }
  }'

Удостоверение агента

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": "AgenticIdentity",
      "group": "ServicesAndApps",
      "category": "RemoteA2A",
      "expiryTime": null,
      "target": "{{a2a_endpoint}}",
      "isSharedToAll": true,
      "sharedUserList": [],
      "audience": "{{audience}}",
      "Credentials": {},
      "metadata": {
        "ApiType": "Azure"
      }
    }
  }'

Добавьте средство A2A в службу агента Foundry

Получение токена доступа:

az account get-access-token --scope https://ai.azure.com/.default --query accessToken -o tsv

Используйте этот маркер, как {{agent_token}} в запросе.

Создание версии агента с помощью средства A2A

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": "a2a_preview",
         "base_url": "{{a2a_endpoint}}",
         "project_connection_id": "{{project_connection_id}}"
      }
    ],
    "instructions": "You are a helpful agent."
  }
}'

Чтобы удалить версию агента, отправьте DELETE запрос в ту же конечную точку с именем агента и версией.

В этом примере показано, как создать агент ИИ с возможностями A2A с помощью типа средства a2a_preview и клиента Azure AI Projects. Агент может взаимодействовать с другими агентами и предоставлять ответы на основе взаимодействия между агентами с помощью протокола A2A.

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

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

export async function main(): Promise<void> {
  const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
  const openAIClient = project.getOpenAIClient();

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

  // Create the agent with A2A tool
  const agent = await project.agents.createVersion("MyA2AAgent", {
    kind: "prompt",
    model: "gpt-4.1-mini",
    instructions: "You are a helpful assistant.",
    // Define A2A tool for agent-to-agent communication
    tools: [
      {
        type: "a2a_preview",
        project_connection_id: a2aConnection.id,
      },
    ],
  });
  console.log(`Agent created (id: ${agent.id}, name: ${agent.name}, version: ${agent.version})`);

  // Prompt user for input
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
  });

  const userInput = await new Promise<string>((resolve) => {
    rl.question("Enter your question (e.g., 'What can the secondary agent do?'): \n", (answer) => {
      rl.close();
      resolve(answer);
    });
  });

  // Send request and stream the response
  const streamResponse= await openAIClient.responses.create(
    {
      input: userInput,
      stream: true,
    },
    {
      body: {
        agent: { 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") {
      const item = event.item as any;
      if (item.type === "remote_function_call") {
        // Add your handling logic for remote function call items here
        const callId = item.call_id;
        const label = item.label;
        console.log(`Call ID: ${callId ?? "None"}`);
        console.log(`Label: ${label ?? "None"}`);
      }
    } else if (event.type === "response.completed") {
      console.log("\nFollow-up completed!");
    }
  }

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

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

Ожидаемые выходные данные

В консоли отображается потоковый текст ответа, так как агент A2A обрабатывает запрос. Вы увидите идентификатор ответа на последующие действия, разностные тексты, напечатанные в stdout, и сообщения о завершении. Версия агента удаляется после завершения взаимодействия.

Использование обмена данными между агентами в Java

Обновите эти значения в примере:

  • projectEndpoint — конечная точка проекта.
  • model — имя развернутой модели.
  • a2aConnectionId — идентификатор подключения A2A в проекте Foundry.

Добавьте зависимость в вашу pom.xml:

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

Создание агентов с помощью средства "агент — агент"

import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.ResponsesClient;
import com.azure.ai.agents.models.AgentReference;
import com.azure.ai.agents.models.AgentVersionDetails;
import com.azure.ai.agents.models.A2APreviewTool;
import com.azure.ai.agents.models.AzureCreateResponseOptions;
import com.azure.ai.agents.models.PromptAgentDefinition;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;

import java.util.Collections;

public class AgentToAgentExample {
    public static void main(String[] args) {
        String projectEndpoint = "https://<resource>.ai.azure.com/api/projects/<project>";
        String a2aConnectionId = "<a2a-connection-id>";

        AgentsClientBuilder builder = new AgentsClientBuilder()
            .credential(new DefaultAzureCredentialBuilder().build())
            .endpoint(projectEndpoint);

        AgentsClient agentsClient = builder.buildAgentsClient();
        ResponsesClient responsesClient = builder.buildResponsesClient();

        // Create agent-to-agent tool with connection ID
        A2APreviewTool a2aTool = new A2APreviewTool()
            .setProjectConnectionId(a2aConnectionId);

        // Create agent with agent-to-agent tool
        PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-4.1-mini")
            .setInstructions("You are a coordinator agent that can communicate with other agents.")
            .setTools(Collections.singletonList(a2aTool));

        AgentVersionDetails agent = agentsClient.createAgentVersion("a2a-agent", agentDefinition);
        System.out.printf("Agent created: %s (version %s)%n", agent.getName(), agent.getVersion());

        // Create a response
        AgentReference agentReference = new AgentReference(agent.getName())
            .setVersion(agent.getVersion());

        Response response = responsesClient.createAzureResponse(
            new AzureCreateResponseOptions().setAgentReference(agentReference),
            ResponseCreateParams.builder()
                .input("What can the secondary agent do?"));

        System.out.println("Response: " + response.output());

        // Clean up
        agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
    }
}

Устранение неполадок

Проблема Причина Разрешение
Агент не вызывает средство A2A Определение агента не включает конфигурацию средства A2A Убедитесь, что определение агента включает средство A2A и настроено подключение. Если вы используете ответы, убедитесь, что не принуждаете к использованию другого средства.
Агент не вызывает средство A2A Запрос не требует удаленного агента Обновите запрос, чтобы требовать вызова удаленного агента или удалить конфликтующие параметры выбора средства.
Сбои проверки подлинности (401 или 403) Несоответствие типа проверки подлинности подключения Убедитесь, что тип проверки подлинности подключения соответствует требованиям конечной точки. Для проверки подлинности на основе ключей убедитесь, что имя учетных данных соответствует ожидаемой конечной точке (x-api-key или Authorization).
Пример пакета SDK не может найти подключение Несоответствие имени подключения Убедитесь, что имя подключения в коде соответствует имени подключения в Foundry.
Ошибки сети или TLS Недоступная конечная точка или недействительный сертификат Убедитесь, что конечная точка является общедоступной и использует допустимый сертификат TLS. Проверьте правила брандмауэра и параметры прокси-сервера.
Удаленный агент возвращает непредвиденный ответ Несовместимость формата ответа Убедитесь, что удаленный агент соответствует спецификациям протокола A2A. Убедитесь, что типы контента ответа соответствуют ожидаемым форматам.
Время ожидания подключения Удаленный агент медленно отвечает Увеличьте параметры времени ожидания или проверьте производительность удаленного агента. Рассмотрите возможность реализации логики повторных попыток с экспоненциальной задержкой.
Отсутствует инструмент A2A в ответе Инструмент не активирован для агента Повторно создайте агент с явно включенным средством A2A и убедитесь, что подключение активно и правильно настроено.

Размещение конечной точки агента, совместимого с A2A

Агент Foundry можно предоставить непосредственно в качестве конечной точки A2A, включив протокол A2A в агенте. Для получения пошаговых инструкций см. раздел «Включить входящие A2A в агенте Foundry».

Если ваш агент развернут за пределами сервиса агента или требуется кастомный подход к размещению, используйте один из следующих вариантов.

Вариант 1. Регистрация настраиваемого агента A2A в панели управления Foundry

Если у вас уже есть агент, развернутый вне службы Agent Service, поддерживающий протокол A2A, зарегистрируйте его в контрольной плоскости Foundry для централизованного управления, наблюдаемости и соблюдения регламентов.

  1. Разверните агент, совместимый с A2A, в любой доступной конечной точке.
  2. Зарегистрируйте агент в плоскости управления Foundry и выберите A2A в качестве протокола.
  3. Foundry создает прокси URL и обнаруживает карточку агента на /.well-known/agent-card.json.

После регистрации другие агенты могут подключаться к агенту по URL-адресу прокси-сервера. Foundry обеспечивает управление доступом и мониторинг через шлюз искусственного интеллекта.

Сведения о настройке проверки подлинности см. в разделе "Проверка подлинности Agent2Agent (A2A).

Вариант 2. Создание пользовательского сервера A2A, который упаковывает агент Foundry

Создайте облегченный сервер A2A, который использует API ответов для делегирования вашему агенту Foundry.

  1. Создайте сервер A2A с помощью официального пакета SDK A2A для вашего языка (Python, .NET или JavaScript).
  2. Реализуйте сервер для вызова агента Foundry через API ответов.
  3. Представьте карточку агента на /.well-known/agent-card.json, которая описывает возможности вашего агента.
  4. Разверните сервер и зарегистрируйте его в плоскости управления Foundry.

Дополнительные сведения о требованиях протокола A2A для серверов см. в спецификации A2A.

Рекомендации по использованию служб, не являющихся службами Microsoft

Вы подчиняетесь условиям соглашения между вами и поставщиком услуг при использовании подключенных служб и серверов, не относящихся к Microsoft ("сторонние услуги"). В соответствии с вашим соглашением, регулирующим использование онлайн-сервисов Microsoft, сторонние службы не являются продуктами Microsoft. При подключении к службе, отличной от Microsoft, вы передаете некоторые данные (например, содержимое запроса) в не службы Майкрософт или приложение может получать данные из не службы Майкрософт. Вы несете ответственность за использование немайкрософтовских сервисов и данных, а также за любые расходы, связанные с этим использованием.

Сторонние разработчики, а не Microsoft, создают негосовские службы Microsoft, включая конечные точки агента A2A, которые вы решили использовать с инструментом A2A, описанным в этой статье. Microsoft не тестировала или не проверила эти конечные точки агента A2A. Microsoft не несет ответственности перед вами или другими относительно использования вами любых услуг, не относящихся к Microsoft.

Внимательно просмотрите и отслеживайте точки связи агента A2A, которые вы добавляете в Foundry Agent Service. Опирайтесь на конечные точки, размещенные доверенными поставщиками услуг, а не прокси-серверами.

Средство A2A позволяет передавать пользовательские заголовки, такие как ключи проверки подлинности или схемы, которые могут потребоваться конечной точке агента A2A. Просмотрите все данные, которыми вы делитесь с неназванными службами, включая конечные точки агента A2A, и запишите их в журнал для аудита. Помните о методах хранения и расположения данных, отличных от Microsoft.