A2A Barındırma

Agent Framework, Aracıdan Aracıya (A2A) protokolü aracılığıyla yapay zeka aracılarınızı kullanıma sunan barındırma paketleri sağlar. Barındırıldıktan sonra, A2A uyumlu herhangi bir istemci, istemcinin hangi çerçeve veya teknolojiyle oluşturulduğundan bağımsız olarak aracılarınızı keşfedebilir ve aracılarınızla iletişim kurabilir.

NuGet Paketleri:

Başlangıç Yapmak

ASP.NET Core barındırma paketini yükleyin (çekirdek paketini otomatik olarak çeker):

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

Aşağıdaki örnekte, A2A aracılığıyla tek bir aracı barındıran en düşük ASP.NET Core uygulaması gösterilmektedir. Yapay zeka sağlayıcısı olarak Microsoft Foundry'yi kullanır. Diğer seçenekler için bkz. Sağlayıcılar .

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

Aracıya artık A2A HTTP+JSON protokolü bağlamı üzerinden /a2a/weather-agent adresinden ulaşılabilir ve aracı kartı /.well-known/agent.json adresinde bulunabilir. A2A uyumlu tüm istemciler bu aracıyı bulabilir ve bu aracıyla iletişim kurabilir.

Protokol bağlamaları

A2A protokolü iki aktarım bağlaması tanımlar. Her ikisi de desteklenir:

Binding Yöntem Açıklama
HTTP+JSON MapA2AHttpJson Akış için standart HTTP istekleri ve Sunucu Tarafından Gönderilen Olaylar.
JSON-RPC MapA2AJsonRpc JSON-RPC 2.0, HTTP üzerinden.

İstemcilerin tercih ettikleri taşımayı seçebilmesi için her iki bağlamayı aynı anda eşleyebilirsiniz. Gerekirse farklı yollar kullanılabilir:

app.MapA2AHttpJson("weather-agent", "/a2a/weather-agent");  // HTTP+JSON
app.MapA2AJsonRpc("weather-agent", "/a2a/weather-agent");   // JSON-RPC

Temsilci Kartı

Aracı kartları , istemcilerin istek göndermeden önce özelliklerini bulabilmesi ve anlayabilmesi için aracınızın meta verilerini (ad, açıklama, sürüm ve desteklenen arabirimler) açıklar. Başlarken bölümünde basit bir aracı kartı gösterilir. Üretim kullanımı için tam olarak doldurulmuş bir kart sağlayın:

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 , Agent Framework barındırma paketleri tarafından değil, A2A SDK paketi ()A2A.AspNetCore tarafından sağlanır.

Tip

Her ana bilgisayar için yalnızca bir aracı kartı sunulabilir, bu nedenle bilinen yol üzerinden yalnızca bir aracı keşfedilebilir. Diğer aracılara url ile doğrudan ulaşılabilir. Daha fazla seçenek için bkz. Aracı Bulma .

AddA2AServer nasıl çalışır?

AddA2AServer yöntemi, bağımlılık ekleme kapsayıcısında anahtarlı A2AServer bir singleton kaydeder. Sunucu oluşturulduğunda, birkaç iç bileşeni çözümler veya oluşturur:

Bileşen Varsayılan Amaç
IAgentHandler A2AAgentHandler Gelen A2A isteklerini AIAgent öğesine yönlendirir. İletileri çevirir, aracıyı çalıştırır ve yanıtları A2A iletileri olarak döndürür.
AgentSessionStore InMemoryAgentSessionStore Aracının, aynı contextId kullanarak birden fazla istekte bağlamı koruyabilmesi için görüşme oturumlarını depolar.
ITaskStore InMemoryTaskStore Uzun süreli A2A işlemleri için iş durumunu izler.
AgentRunMode DisallowBackground Ajanın anlık iletiler yerine arka plan yanıtları (A2A görevleri) verip veremeyeceğini kontrol eder.

Warning

varsayılan InMemoryAgentSessionStore ve InMemoryTaskStore yalnızca geliştirme için tasarlanmıştır. Uygulama yeniden başlatıldığında durum kaybolur ve birden çok örnek arasında paylaşılmaz. Üretim kurulumları için kalıcı uygulamaları kaydedin.

Varsayılan ayarları geçersiz kılma

çağrısı AddA2AServeryapmadan önce anahtarlı hizmetleri DI kapsayıcısında kaydederek bu bileşenlerden herhangi birini değiştirebilirsiniz. Sunucu, anahtar olarak aracı adını kullanarak anahtarlanmış hizmetleri çözümler.

Özel oturum deposu - kalıcı konuşma depolaması için:

builder.Services.AddKeyedSingleton<AgentSessionStore>("weather-agent", new MyDurableSessionStore());

builder.AddA2AServer("weather-agent");

Özel görev deposu - dayanıklı görev izleme için:

builder.Services.AddKeyedSingleton<ITaskStore>("weather-agent", new MyDurableTaskStore());

builder.AddA2AServer("weather-agent");

Özel temsilci işleyicisi - istek işlemenin tam denetimini sağlamak için. Anahtarlı IAgentHandler bir kayıt yapıldığında, varsayılanın A2AAgentHandler tamamen yerini alır:

builder.Services.AddKeyedSingleton<IAgentHandler>("weather-agent", new MyCustomHandler());

builder.AddA2AServer("weather-agent");

Aracı çalıştırma modu - A2AServerRegistrationOptionsüzerinden yapılandırın:

builder.AddA2AServer("weather-agent", options =>
{
    options.AgentRunMode = AgentRunMode.DisallowBackground;
});

Birden çok aracı

Tek bir uygulamada birden çok aracı barındırabilirsiniz. Her bir ajan, kendi A2A sunucusunu ve uç noktasını alır.

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

Bu örnekte, her iki aracının da aracı kartı olmadığından istemcilerin uç nokta URL'lerini doğrudan bilmesi gerekir. MapWellKnownAgentCard ile aracı kartı keşfi ekleyebilirsiniz, ancak her ana bilgisayar için sadece bir temsilci tanıtılabilir. Bkz. Aracı kartı.

Arka plan yanıtları

Note

A2A'ya ait aracılar için arka plan yanıtları henüz desteklenmiyor. AgentRunMode varsayılan değeridirDisallowBackground, yani tüm yanıtlar anında A2A iletileri olarak döndürülür.

Sonraki Adımlar

Ayrıca bakınız