Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Agent Framework fournit des packages d’hébergement qui exposent vos agents IA via le protocole Agent-to-Agent (A2A). Une fois hébergé, tout client compatible A2A peut découvrir et communiquer avec vos agents, quelle que soit l’infrastructure ou la technologie avec laquelle le client a été créé.
Packages NuGet :
-
Microsoft.Agents.AI.Hosting.A2A.AspNetCore - Mappage des points de terminaison pour ASP.NET Core avec les liaisons de protocoles A2A. Ce package inclut
Microsoft.Agents.AI.Hosting.A2Ade manière transitive . - Microsoft.Agents.AI.Hosting.A2A - Logique d’hébergement principale pour le pontage des agents IA au protocole A2A (inscription du serveur, gestion des demandes, gestion des sessions).
Premiers pas
Installez le package d’hébergement ASP.NET Core (il extrait automatiquement le package principal) :
dotnet add package Microsoft.Agents.AI.Hosting.A2A.AspNetCore --prerelease
dotnet add package A2A.AspNetCore --prerelease
dotnet add package Azure.AI.Projects --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.Foundry --prerelease
L’exemple suivant montre une application minimale ASP.NET Core qui héberge un seul agent via A2A. Il utilise Microsoft Foundry en tant que fournisseur d’INTELLIGENCE artificielle : consultez Fournisseurs pour obtenir d’autres options.
using A2A;
using A2A.AspNetCore;
using Azure.AI.Projects;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
string endpoint = builder.Configuration["AZURE_AI_PROJECT_ENDPOINT"]
?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
string model = builder.Configuration["AZURE_AI_MODEL"] ?? "gpt-4o-mini";
// 1. Create and register the "weather-agent" agent in the DI container.
builder.Services.AddKeyedSingleton<AIAgent>("weather-agent", (sp, _) =>
{
return new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(
model: model,
instructions: "You are a helpful weather assistant.",
name: "weather-agent");
});
// 2. Register the A2A server for the "weather-agent" agent.
builder.AddA2AServer("weather-agent");
var app = builder.Build();
// 3. Map A2A protocol endpoints for the "weather-agent" agent.
app.MapA2AHttpJson("weather-agent", "/a2a/weather-agent");
// 4. Serve a minimal agent card for the "weather-agent" agent discovery.
app.MapWellKnownAgentCard(new AgentCard
{
Name = "WeatherAgent",
Description = "A helpful weather assistant.",
SupportedInterfaces =
[
new AgentInterface
{
Url = "http://localhost:5000/a2a/weather-agent",
ProtocolBinding = ProtocolBindingNames.HttpJson,
ProtocolVersion = "1.0",
}
]
});
app.Run();
L’agent est désormais accessible via /a2a/weather-agent la liaison de protocole HTTP+JSON A2A, et sa carte d’agent est détectable à l’adresse /.well-known/agent.json. Tout client compatible A2A peut découvrir et communiquer avec cet agent.
Liaisons de protocole
Le protocole A2A définit deux liaisons de transport. Les deux sont pris en charge :
| Binding | Méthode | Description |
|---|---|---|
| HTTP+JSON | MapA2AHttpJson |
Requêtes HTTP standard et événements Server-Sent pour la diffusion en continu. |
| JSON-RPC | MapA2AJsonRpc |
JSON-RPC 2.0 sur HTTP. |
Vous pouvez mapper les deux liaisons simultanément afin que les clients puissent choisir leur transport préféré. Différents chemins d’accès peuvent être utilisés si nécessaire :
app.MapA2AHttpJson("weather-agent", "/a2a/weather-agent"); // HTTP+JSON
app.MapA2AJsonRpc("weather-agent", "/a2a/weather-agent"); // JSON-RPC
Carte de l’agent
Les cartes d’agent décrivent les métadonnées de votre agent ( nom, description, version et interfaces prises en charge) afin que les clients puissent découvrir et comprendre ses fonctionnalités avant d’envoyer des requêtes. La section Prise en main affiche une carte d’agent simplifiée. Pour une utilisation en production, fournissez une carte entièrement remplie :
using A2A;
using A2A.AspNetCore;
app.MapWellKnownAgentCard(new AgentCard
{
Name = "WeatherAgent",
Description = "A helpful weather assistant.",
Version = "1.0",
DefaultInputModes = ["text"],
DefaultOutputModes = ["text"],
SupportedInterfaces =
[
new AgentInterface
{
Url = "http://localhost:5000/a2a/weather-agent",
ProtocolBinding = ProtocolBindingNames.HttpJson,
ProtocolVersion = "1.0",
}
]
});
Note
MapWellKnownAgentCard est fourni par le package sdk A2A (A2A.AspNetCore), et non par les packages d’hébergement Agent Framework.
Conseil / Astuce
Une seule carte d’agent peut être servie par hôte. Un seul agent est donc détectable via le chemin connu. D’autres agents peuvent toujours être atteints directement par URL. Pour plus d’options, consultez Découverte de l’agent .
Comment fonctionne AddA2AServer
La méthode AddA2AServer enregistre un singleton par clé A2AServer dans le conteneur d’injection de dépendances. Lorsque le serveur est construit, il résout ou crée plusieurs composants internes :
| Composant | Default | Objectif |
|---|---|---|
IAgentHandler |
A2AAgentHandler |
Acheminer les requêtes A2A entrantes vers le AIAgent. Traduit les messages, exécute l’agent et retourne des réponses sous forme de messages A2A. |
AgentSessionStore |
InMemoryAgentSessionStore |
Stocke les sessions de conversation afin que l’agent puisse gérer le contexte entre plusieurs requêtes avec le même contextId. |
ITaskStore |
InMemoryTaskStore |
Suit l'état des tâches pour les opérations A2A de longue durée. |
AgentRunMode |
DisallowBackground |
Contrôle si l’agent peut retourner des réponses en arrière-plan (tâches A2A) au lieu de messages immédiats. |
Avertissement
La valeur par défaut InMemoryAgentSessionStore et InMemoryTaskStore est destinée au développement uniquement. L’état est perdu lors du redémarrage de l’application et n’est pas partagé entre plusieurs instances. Pour les déploiements de production, inscrivez des implémentations durables.
Remplacement des paramètres par défaut
Vous pouvez remplacer l’un de ces composants en inscrivant des services avec clé dans le conteneur IoC avant d’appeler AddA2AServer. Le serveur résout les services clés à l’aide du nom de l’agent comme clé.
Magasin de sessions personnalisé : pour le stockage de conversation permanente :
builder.Services.AddKeyedSingleton<AgentSessionStore>("weather-agent", new MyDurableSessionStore());
builder.AddA2AServer("weather-agent");
Magasin de tâches personnalisé - pour le suivi des tâches durable :
builder.Services.AddKeyedSingleton<ITaskStore>("weather-agent", new MyDurableTaskStore());
builder.AddA2AServer("weather-agent");
Gestionnaire d’agent personnalisé : pour prendre le contrôle total du traitement des demandes. Lorsqu’un keyed IAgentHandler est inscrit, il remplace entièrement la valeur par défaut A2AAgentHandler :
builder.Services.AddKeyedSingleton<IAgentHandler>("weather-agent", new MyCustomHandler());
builder.AddA2AServer("weather-agent");
Mode d’exécution de l’agent - configurer via A2AServerRegistrationOptions:
builder.AddA2AServer("weather-agent", options =>
{
options.AgentRunMode = AgentRunMode.DisallowBackground;
});
Plusieurs agents
Vous pouvez héberger plusieurs agents dans une seule application. Chaque agent obtient son propre serveur et point de terminaison A2A :
// Register agents in DI.
builder.Services.AddKeyedSingleton<AIAgent>("weather-agent", (sp, _) =>
{
return new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(model: model, instructions: "You are a helpful weather assistant.", name: "weather-agent");
});
builder.Services.AddKeyedSingleton<AIAgent>("scientist", (sp, _) =>
{
return new AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(model: model, instructions: "You are a scientist.", name: "scientist");
});
// Register A2A servers.
builder.AddA2AServer("weather-agent");
builder.AddA2AServer("scientist");
var app = builder.Build();
// Map endpoints.
app.MapA2AHttpJson("weather-agent", "/a2a/weather-agent");
app.MapA2AHttpJson("scientist", "/a2a/scientist");
app.Run();
Dans cet exemple, aucun agent n’a de carte d’agent. Les clients doivent donc connaître directement les URL de point de terminaison. Vous pouvez ajouter la découverte de cartes d’agent avec MapWellKnownAgentCard, mais un seul agent peut être annoncé par hôte : voir Carte Agent.
Réponses en arrière-fond
Note
Les réponses en arrière-plan ne sont pas encore prises en charge pour les agents hébergés par A2A. La valeur AgentRunMode par défaut est DisallowBackground, ce qui signifie que toutes les réponses sont renvoyées sous forme de messages A2A immédiats.