Krok 7: Hostování agenta

Jakmile vytvoříte agenta, musíte ho hostovat, aby s ním mohli pracovat uživatelé a další agenti.

Možnosti hostování

Možnost Description Nejlepší pro
Protokol A2A Expozice agentů prostřednictvím protokolu Agent-to-Agent Systémy s více agenty
Koncové body kompatibilní s OpenAI Zpřístupnění agentů pomocí rozhraní API pro dokončování chatu nebo odpovědi Klienti kompatibilní s OpenAI
Rozšíření Durable Zajištění odolnosti agentů a pracovních postupů jazyka C# a Python na Azure Functions nebo v místním výpočetním prostředí Dlouhotrvající a spolehlivé úlohy
Protokol AG-UI Vytváření webových aplikací agenta AI Webové front-endy

Hostování v ASP.NET Core

Agent Framework poskytuje hostitelské knihovny, které umožňují integrovat agenty AI do aplikací ASP.NET Core. Tyto knihovny zjednodušují registraci, konfiguraci a zveřejnění agentů prostřednictvím různých protokolů.

Jak je popsáno v přehledu agentů, AIAgent je základním konceptem rozhraní Agent Framework. Definuje "obálku LLM", která zpracovává vstupy uživatelů, provádí rozhodnutí, volá nástroje a provádí další práci pro provádění akcí a generování odpovědí. Zveřejnění agentů AI z vaší aplikace ASP.NET Core není triviální. Hostitelské knihovny to řeší registrací agentů AI v kontejneru injektáže závislostí, což vám umožní je vyřešit a používat ve vašich aplikačních službách. Umožňují také spravovat závislosti agentů, jako jsou nástroje a úložiště relací, ze stejného kontejneru. Agenty je možné hostovat společně s infrastrukturou aplikací nezávisle na protokolech, které používají. Podobně je možné pracovní postupy hostovat a využívat společnou infrastrukturu vaší aplikace.

Základní knihovna hostování

Knihovna Microsoft.Agents.AI.Hosting je základem pro hostování agentů AI v ASP.NET Core. Poskytuje rozšíření pro registraci a konfiguraci agentů umělé inteligence a pracovních postupů pro IHostApplicationBuilder. V ASP.NET Core je IHostApplicationBuilder základním typem, který představuje tvůrce pro hostované aplikace a služby a spravuje konfiguraci, protokolování, životní cyklus a další.

Před konfigurací agentů nebo pracovních postupů zaregistrujte IChatClient v kontejneru pro injekci závislostí. V následujících příkladech je pod názvem chat-model registrován jako klíčový singleton:

// endpoint is your Microsoft Foundry project endpoint
// deploymentName is 'gpt-4o-mini' for example

IChatClient chatClient = new AIProjectClient(
        new Uri(endpoint),
        new DefaultAzureCredential())
    .GetProjectOpenAIClient()
    .GetProjectResponsesClient()
    .AsIChatClient(deploymentName);
builder.Services.AddSingleton(chatClient);

Výstraha

DefaultAzureCredential je vhodný pro vývoj, ale vyžaduje pečlivé zvážení v produkčním prostředí. V produkčním prostředí zvažte použití konkrétních přihlašovacích údajů (např ManagedIdentityCredential. ) k zabránění problémům s latencí, neúmyslnému testování přihlašovacích údajů a potenciálním bezpečnostním rizikům z náhradních mechanismů.

PřidatAIAgent

Registrace agenta AI pomocí injektáže závislostí:

var pirateAgent = builder.AddAIAgent(
    "pirate",
    instructions: "You are a pirate. Speak like a pirate",
    description: "An agent that speaks like a pirate.",
    chatClientServiceKey: "chat-model");

Metoda AddAIAgent() vrátí metodu IHostedAgentBuilder, která poskytuje rozšiřující metody pro konfiguraci agenta. Do agenta můžete například přidat nástroje:

var pirateAgent = builder.AddAIAgent("pirate", instructions: "You are a pirate. Speak like a pirate")
    .WithAITool(new MyTool()); // MyTool is a custom type derived from AITool

Můžete také nakonfigurovat úložiště relací (úložiště pro data konverzací):

var pirateAgent = builder.AddAIAgent("pirate", instructions: "You are a pirate. Speak like a pirate")
    .WithInMemorySessionStore();

AddWorkflow

Zaregistrujte pracovní postupy, které koordinuje více agentů. Pracovní postup je v podstatě "graf", kde každý uzel je AIAgent, a agenti spolu komunikují.

V tomto příkladu pracují dva agenti postupně. Uživatelský vstup se nejprve odešle agent-1, který vytvoří odpověď a odešle ji do agent-2. Pracovní postup pak vypíše konečnou odpověď. Existuje také BuildConcurrent metoda, která vytvoří souběžný pracovní postup agenta.

builder.AddAIAgent("agent-1", instructions: "you are agent 1!");
builder.AddAIAgent("agent-2", instructions: "you are agent 2!");

var workflow = builder.AddWorkflow("my-workflow", (sp, key) =>
{
    var agent1 = sp.GetRequiredKeyedService<AIAgent>("agent-1");
    var agent2 = sp.GetRequiredKeyedService<AIAgent>("agent-2");
    return AgentWorkflowBuilder.BuildSequential(key, [agent1, agent2]);
});

Zpřístupnit pracovní postup jako agent AIAgent

Pokud chcete použít integrace protokolů (například A2A nebo OpenAI) s pracovním postupem, převeďte je na samostatného agenta. Pracovní postupy v současné době neposkytují podobné možnosti integrace sami, takže tento krok převodu je nutný:

var workflowAsAgent = builder
    .AddWorkflow("science-workflow", (sp, key) => { ... })
    .AddAsAIAgent();  // Now the workflow can be used as an agent

Podrobnosti implementace

Hostitelské knihovny fungují jako adaptéry protokolu, které přemostňují externí komunikační protokoly a interní implementaci Agent Frameworku. Pokud používáte integrační knihovnu pro hostování, knihovna načte zaregistrovanou AIAgent z injektáže závislostí, obalí ji do middlewaru specifického pro protokol, jenž překládá příchozí požadavky a odchozí odpovědi, a volá AIAgent, aby zpracovalo požadavky. Tato architektura udržuje implementaci agenta nezávislou na protokolu.

Například pomocí knihovny hostování ASP.NET Core s adaptérem protokolu A2A:

// Register the agent
var pirateAgent = builder.AddAIAgent("pirate",
    instructions: "You are a pirate. Speak like a pirate",
    description: "An agent that speaks like a pirate.");

// Expose via a protocol (e.g. A2A)
builder.Services.AddA2AServer();
var app = builder.Build();
app.MapA2AServer();
app.Run();

Návod

Příklady Azure Functions a místního hostování najdete v ukázkách Durable Agents.

Nainstalujte balíček pro hostování Azure Functions, klienta Foundry a ověřovací balíček Azure:

pip install agent-framework-azurefunctions agent-framework-foundry azure-identity

Vytvoření agenta:

# 1. Instantiate the agent with the chosen deployment and instructions.
def _create_agent() -> Any:
    """Create the Joker agent."""
    return Agent(
        client=FoundryChatClient(
            project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
            model=os.environ["FOUNDRY_MODEL"],
            credential=AzureCliCredential(),
        ),
        name="Joker",
        instructions="You are good at telling jokes.",
    )

Zaregistrujte agenta v AgentFunctionApp:

# 2. Register the agent with AgentFunctionApp so Azure Functions exposes the required triggers.
app = AgentFunctionApp(agents=[_create_agent()], enable_health_check=True, max_poll_retries=50)

Spouštět místně pomocí nástrojů Azure Functions Core Tools:

az login
pip install -r requirements.txt
# Start Azurite and copy local.settings.json.template to local.settings.json first.
func start

Pak volejte:

curl -X POST http://localhost:7071/api/agents/Joker/run \
  -H "Content-Type: text/plain" \
  -d "Tell me a short joke about cloud computing."

Návod

Podívejte se na úplnou ukázku kompletního spustitelného souboru a ukázky hostování Azure Functions pro další vzory.

Hostování s protokolem A2A

Port Go poskytuje hostování A2A prostřednictvím a2aprovider, který zabalí agenta do obslužné rutiny HTTP kompatibilní s protokolem Agent-to-Agent.

Note

Hostování rozšíření Durable Není aktuálně dostupné pro Go. Nejnovější stav sady Go SDK najdete v úložišti Agent Framework Go.

Vytvoření agenta:

import (
    "github.com/microsoft/agent-framework-go/agent"
    "github.com/microsoft/agent-framework-go/provider/a2aprovider"
    "github.com/microsoft/agent-framework-go/provider/foundryprovider"

    "github.com/a2aproject/a2a-go/v2/a2a"
    "github.com/a2aproject/a2a-go/v2/a2asrv"
)

a := foundryprovider.NewAgent(endpoint, token, foundryprovider.ModelDeployment(model), foundryprovider.AgentConfig{
    Instructions: "You are a helpful assistant.",
    Config: agent.Config{
    },
})

Zpřístupněte agenta prostřednictvím A2A:

url := "http://localhost:5000"
card := &a2a.AgentCard{
    Name:               "MyAgent",
    Description:        "A helpful assistant.",
    Version:            "1.0.0",
    DefaultInputModes:  []string{"text"},
    DefaultOutputModes: []string{"text"},
    Capabilities:       a2a.AgentCapabilities{Streaming: false},
    SupportedInterfaces: []*a2a.AgentInterface{
        a2a.NewAgentInterface(url, a2a.TransportProtocolJSONRPC),
    },
}

mux := http.NewServeMux()
requestHandler := a2asrv.NewHandler(
    a2aprovider.NewExecutor(a, a2aprovider.ExecutorConfig{}),
    a2asrv.WithExtendedAgentCard(card),
)
mux.Handle("/", a2asrv.NewJSONRPCHandler(requestHandler))
mux.Handle(a2asrv.WellKnownAgentCardPath, a2asrv.NewStaticAgentCardHandler(card))

log.Println("A2A server listening on :5000")
http.ListenAndServe(":5000", mux)

Návod

Úplný příklad spustitelného klienta A2A najdete v úplné ukázce klienta A2A .

Další kroky

Jděte hlouběji:

Viz také