Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Umožňuje A2AAgent vaší aplikaci připojit se ke vzdáleným agentům, kteří jsou vystaveni prostřednictvím protokolu Agent-to-Agent (A2A). Zabalí každý koncový bod kompatibilní s A2A jako standard AIAgent, takže můžete používat známé metody jako RunAsync a RunStreamingAsync pracovat se vzdálenými agenty bez ohledu na to, s jakou architekturou nebo technologií byly vytvořeny.
Začínáme
Přidejte do projektu požadovaný balíček NuGet:
dotnet add package Microsoft.Agents.AI.A2A --prerelease
Zjišťování agentů
Před komunikací se vzdáleným agentem A2A ho musíte zjistit a vytvořit AIAgent instanci. Protokol A2A definuje tři strategie zjišťování, které podporuje rozhraní Agent Framework.
identifikátor URI Well-Known
Agenti A2A mohou zjistit svou kartu agenta na standardizované cestě: https://{domain}/.well-known/agent-card.json.
A2ACardResolver Použijte k načtení karty a vytvoření agenta v jednom volání:
using A2A;
using Microsoft.Agents.AI;
// Initialize a resolver pointing at the remote agent's host.
A2ACardResolver resolver = new(new Uri("https://a2a-agent.example.com"));
// Resolve the agent card and create an AIAgent in one step.
AIAgent agent = await resolver.GetAIAgentAsync();
// Use the agent.
Console.WriteLine(await agent.RunAsync("Hello!"));
Tip
GetAIAgentAsync také přijímá volitelný A2AClientOptions parametr pro výběr protokolu.
zjišťování Catalog-Based
V podnikových prostředích nebo veřejných marketplacech se karty agentů často spravují centrálním registrem. Pokud již máte AgentCard získaný z takového registru, převeďte ho přímo na AIAgent:
using A2A;
using Microsoft.Agents.AI;
// Assume agentCard was retrieved from a registry or catalog.
AgentCard agentCard = await GetAgentCardFromRegistryAsync("travel-planner");
AIAgent agent = agentCard.AsAIAgent();
Console.WriteLine(await agent.RunAsync("Plan a trip to Paris."));
Přímá konfigurace
V případě úzce propojených systémů nebo vývojových scénářů, ve kterých je koncový bod agenta známý předem, vytvořte A2AClient přímo a převeďte ho na AIAgent:
using A2A;
using Microsoft.Agents.AI;
// Create a client pointing at the known agent endpoint.
A2AClient a2aClient = new(new Uri("https://a2a-agent.example.com"));
AIAgent agent = a2aClient.AsAIAgent(name: "my-agent", description: "A helpful assistant.");
Console.WriteLine(await agent.RunAsync("What can you help me with?"));
Výběr protokolu
Agenti A2A můžou vystavit více vazeb protokolu, jako jsou HTTP+JSON a JSON-RPC. Ve výchozím nastavení se upřednostňují protokoly HTTP+JSON před protokolem JSON-RPC. Slouží A2AClientOptions.PreferredBindings k explicitnímu řízení použité vazby protokolu:
Note
Vzdálený agent A2A musí být dostupný v koncovém bodu, který podporuje vybranou vazbu protokolu.
using A2A;
using Microsoft.Agents.AI;
A2ACardResolver agentCardResolver = new(new Uri("https://a2a-agent.example.com"));
AgentCard agentCard = await agentCardResolver.GetAgentCardAsync();
// Prefer HTTP+JSON protocol binding. For JSON-RPC, set PreferredBindings = [ProtocolBindingNames.JsonRpc]
A2AClientOptions options = new()
{
PreferredBindings = [ProtocolBindingNames.HttpJson]
};
AIAgent agent = agentCard.AsAIAgent(options: options);
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate."));
Streaming
A2A podporuje streamování odpovědí prostřednictvím Server-Sent Událostí. Umožňuje RunStreamingAsync přijímat aktualizace v reálném čase, protože vzdálený agent zpracovává požadavek:
using A2A;
using Microsoft.Agents.AI;
A2ACardResolver resolver = new(new Uri("https://a2a-agent.example.com"));
AIAgent agent = await resolver.GetAIAgentAsync();
await foreach (var update in agent.RunStreamingAsync("Write a short story about a robot."))
{
if (!string.IsNullOrEmpty(update.Text))
{
Console.Write(update.Text);
}
}
Odezvy na pozadí
Agenti A2A podporují odpovědi na pozadí pro zpracování dlouhotrvajících operací. Když vzdálený agent A2A místo okamžité zprávy vrátí úlohu, poskytuje rozhraní agenta token pokračování, který můžete použít k dotazování výsledků nebo opětovné připojení k přerušeným datovým proudům.
Dotazování na dokončení úkolu
V případě scénářů bez streamování použijte AllowBackgroundResponses k získání tokenu pokračování a dotazování, dokud se úloha nedokončí:
using A2A;
using Microsoft.Agents.AI;
A2ACardResolver resolver = new(new Uri("https://a2a-agent.example.com"));
AIAgent agent = await resolver.GetAIAgentAsync();
AgentSession session = await agent.CreateSessionAsync();
// AllowBackgroundResponses must be true so the server returns immediately with a continuation token
// instead of blocking until the task is complete.
AgentRunOptions options = new() { AllowBackgroundResponses = true };
// Start the initial run with a long-running task.
AgentResponse response = await agent.RunAsync(
"Conduct a comprehensive analysis of quantum computing applications in cryptography.",
session,
options: options);
// Poll until the response is complete.
while (response.ContinuationToken is { } token)
{
// Wait before polling again.
await Task.Delay(TimeSpan.FromSeconds(2));
// Continue with the token.
response = await agent.RunAsync(session, options: new AgentRunOptions { ContinuationToken = token });
}
Console.WriteLine(response);
Opětovné připojení streamu
Ve scénářích streamování může každá aktualizace obsahovat token pro pokračování. Pokud dojde k přerušení datového proudu, pomocí tokenu se znovu připojte a získejte stream odpovědí od začátku:
using A2A;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
A2ACardResolver resolver = new(new Uri("https://a2a-agent.example.com"));
AIAgent agent = await resolver.GetAIAgentAsync();
AgentSession session = await agent.CreateSessionAsync();
ResponseContinuationToken? continuationToken = null;
await foreach (var update in agent.RunStreamingAsync(
"Conduct a comprehensive analysis of quantum computing applications in cryptography.",
session))
{
// Save the continuation token to reconnect later if the stream is interrupted.
// Continuation tokens are only returned for long-running tasks. If the A2A agent
// returns a message instead of a task, the continuation token will not be initialized.
if (update.ContinuationToken is { } token)
{
continuationToken = token;
}
}
// If the stream was interrupted and a continuation token was captured,
// reconnect to the response stream using the saved continuation token.
if (continuationToken is not null)
{
await foreach (var update in agent.RunStreamingAsync(
session,
options: new() { ContinuationToken = continuationToken }))
{
if (!string.IsNullOrEmpty(update.Text))
{
Console.WriteLine(update.Text);
}
}
}
Note
Agenti A2A podporují opětovné připojení streamu (získání stejného streamu odpovědí od začátku), ne obnovení streamu z konkrétního bodu v datovém proudu.
Note
Dokumentace k agentům PythonU A2A bude brzy k dispozici.