Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het Agent Framework biedt hostingpakketten waarmee uw AI-agents beschikbaar worden gesteld via het A2A-protocol (Agent-to-Agent). Zodra deze wordt gehost, kan elke A2A-compatibele client uw agents detecteren en communiceren, ongeacht met welk framework of welke technologie de client is gebouwd.
NuGet-pakketten:
-
Microsoft.Agents.AI.Hosting.A2A.AspNetCore - ASP.NET Core-eindpunttoewijzing voor A2A-protocolbindingen. Dit pakket omvat transitief
Microsoft.Agents.AI.Hosting.A2A. - Microsoft.Agents.AI.Hosting.A2A - Kernhostinglogica voor het overbruggen van AI-agents naar het A2A-protocol (serverregistratie, aanvraagafhandeling, sessiebeheer).
Aan de slag
Installeer het ASP.NET Core-hostingpakket (het haalt automatisch het kernpakket op):
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
In het volgende voorbeeld ziet u een minimale ASP.NET Core-toepassing die als host fungeert voor één agent via A2A. Microsoft Foundry wordt gebruikt als de AI-provider. Zie Providers voor andere opties.
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();
De agent is nu bereikbaar via /a2a/weather-agent de A2A HTTP+JSON-protocolbinding en de agentkaart is detecteerbaar op /.well-known/agent.json. Elke A2A-compatibele client kan deze agent detecteren en communiceren.
Protocolbindingen
Het A2A-protocol definieert twee transportbindingen. Beide worden ondersteund:
| Binding | Methode | Beschrijving |
|---|---|---|
| HTTP+JSON | MapA2AHttpJson |
Standaard HTTP-aanvragen en Server-Sent gebeurtenissen voor streaming. |
| JSON-RPC | MapA2AJsonRpc |
JSON-RPC 2.0 over HTTP. |
U kunt beide bindingen tegelijkertijd toewijzen, zodat klanten hun voorkeursvervoer kunnen kiezen. Indien nodig kunnen verschillende paden worden gebruikt:
app.MapA2AHttpJson("weather-agent", "/a2a/weather-agent"); // HTTP+JSON
app.MapA2AJsonRpc("weather-agent", "/a2a/weather-agent"); // JSON-RPC
Agentkaart
Agentkaarten beschrijven de metagegevens van uw agent- naam, beschrijving, versie en ondersteunde interfaces, zodat clients de mogelijkheden ervan kunnen detecteren en begrijpen voordat aanvragen worden verzonden. In de sectie Aan de slag wordt een minimale agentenkaart getoond. Geef voor productiegebruik een volledig gevulde kaart op:
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 wordt geleverd door het A2A SDK-pakket (A2A.AspNetCore), niet de Agent Framework-hostingpakketten.
Tip
Er kan slechts één agentkaart per host worden geleverd, zodat slechts één agent kan worden gedetecteerd via het bekende pad. Andere agents kunnen nog steeds rechtstreeks per URL worden bereikt. Zie AgentDetectie voor meer opties.
Hoe AddA2AServer werkt
De AddA2AServer methode registreert een gekeyde A2AServer singleton in de afhankelijkheidsinjectiecontainer. Wanneer de server is gebouwd, worden verschillende interne componenten opgelost of gecreëerd.
| Onderdeel | Verstek | Purpose |
|---|---|---|
IAgentHandler |
A2AAgentHandler |
Verbindt inkomende A2A-aanvragen met de AIAgent. Vertaalt berichten, voert de agent uit en retourneert antwoorden als A2A-berichten. |
AgentSessionStore |
InMemoryAgentSessionStore |
Slaat gesprekssessies op zodat de agent context kan onderhouden over meerdere aanvragen met hetzelfde contextId. |
ITaskStore |
InMemoryTaskStore |
Houdt de taakstatus bij voor langlopende A2A-bewerkingen. |
AgentRunMode |
DisallowBackground |
Hiermee bepaalt u of de agent achtergrondreacties (A2A-taken) kan retourneren in plaats van directe berichten. |
Warning
De standaardwaarde InMemoryAgentSessionStore en InMemoryTaskStore zijn alleen bedoeld voor ontwikkeling. De status gaat verloren bij het opnieuw opstarten van de toepassing en wordt niet gedeeld tussen meerdere exemplaren. Registreer duurzame implementaties voor productie-implementaties.
Standaardinstellingen overschrijven
U kunt een van deze onderdelen vervangen door sleutelservices te registreren in de DI-container voordat u aanroept AddA2AServer. De server lost sleutelservices op met behulp van de agentnaam als de sleutel.
Aangepaste sessieopslag : voor permanente gespreksopslag:
builder.Services.AddKeyedSingleton<AgentSessionStore>("weather-agent", new MyDurableSessionStore());
builder.AddA2AServer("weather-agent");
Aangepast taakarchief : voor het bijhouden van duurzame taken:
builder.Services.AddKeyedSingleton<ITaskStore>("weather-agent", new MyDurableTaskStore());
builder.AddA2AServer("weather-agent");
Aangepaste agenthandler - om volledige controle te nemen over de verwerking van aanvragen. Wanneer een sleutel IAgentHandler is geregistreerd, wordt de standaardwaarde A2AAgentHandler volledig vervangen:
builder.Services.AddKeyedSingleton<IAgentHandler>("weather-agent", new MyCustomHandler());
builder.AddA2AServer("weather-agent");
Agentuitvoeringsmodus - configureren via A2AServerRegistrationOptions:
builder.AddA2AServer("weather-agent", options =>
{
options.AgentRunMode = AgentRunMode.DisallowBackground;
});
Meerdere agents
U kunt meerdere agents hosten in één toepassing. Elke agent krijgt een eigen A2A-server en -eindpunt:
// 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();
In dit voorbeeld heeft geen van beide agents een agentkaart, dus clients moeten de eindpunt-URL's rechtstreeks kennen. U kunt agentkaartdetectie toevoegen met MapWellKnownAgentCard, maar slechts één agent kan per host worden geadverteerd. Zie agentkaart.
Achtergrondantwoorden
Note
Antwoorden op de achtergrond worden nog niet ondersteund voor A2A-gehoste agents. De AgentRunMode standaardwaarde is DisallowBackground, wat betekent dat alle antwoorden worden geretourneerd als directe A2A-berichten.