Condividi tramite


Passaggio 6: Ospitare l'agente

Dopo aver creato l'agente, è necessario ospitarlo in modo che gli utenti e altri agenti possano interagire con esso.

Opzioni di hosting

Opzione Descrzione Ideale per
Protocollo A2A Esporre gli agenti tramite il protocollo agent-to-agent Sistemi multi-agente
Endpoint compatibili con OpenAI Esporre gli agenti tramite le API di completamento della chat o risposte Client compatibili con OpenAI
Funzioni di Azure (Durable) Eseguire agenti come Funzioni di Azure Durable Attività serverless e a esecuzione prolungata
Protocollo AG-UI Creare applicazioni dell'agente di intelligenza artificiale basate sul Web Frontend Web

Hosting in ASP.NET Core

Agent Framework offre librerie di hosting che consentono di integrare gli agenti di intelligenza artificiale in applicazioni ASP.NET Core. Queste librerie semplificano la registrazione, la configurazione e l'esposizione degli agenti tramite vari protocolli.

Come descritto in Panoramica degli agenti, AIAgent è il concetto fondamentale di Agent Framework. Definisce un wrapper LLM che elabora gli input dell'utente, prende decisioni, chiama gli strumenti ed esegue operazioni aggiuntive per eseguire azioni e generare risposte. Rendere disponibili gli agenti AI dall'applicazione ASP.NET Core non è semplice. Le librerie di hosting risolvono questo problema registrando gli agenti di intelligenza artificiale in un contenitore di inserimento delle dipendenze, consentendo di risolverli e usarli nei servizi dell'applicazione. Consentono anche di gestire le dipendenze dell'agente, ad esempio gli strumenti e l'archiviazione delle sessioni, dallo stesso contenitore. Gli agenti possono essere ospitati insieme all'infrastruttura dell'applicazione, indipendentemente dai protocolli usati. Analogamente, i flussi di lavoro possono essere ospitati e sfruttare l'infrastruttura comune dell'applicazione.

Libreria di hosting principale

La Microsoft.Agents.AI.Hosting libreria è la base per l'hosting degli agenti di intelligenza artificiale in ASP.NET Core. Fornisce estensioni per IHostApplicationBuilder per la registrazione e configurazione di agenti e flussi di lavoro di intelligenza artificiale. In ASP.NET Core, IHostApplicationBuilder è il tipo fondamentale che rappresenta il generatore per applicazioni e servizi ospitati, gestendo configurazione, logging, ciclo di vita e altro ancora.

Prima di configurare agenti o flussi di lavoro, registrare un oggetto IChatClient nel contenitore di inserimento delle dipendenze. Negli esempi seguenti viene registrato come singleton con chiave sotto il nome chat-model:

// endpoint is of 'https://<your-own-foundry-endpoint>.openai.azure.com/' format
// deploymentName is 'gpt-4o-mini' for example

IChatClient chatClient = new AzureOpenAIClient(
        new Uri(endpoint),
        new DefaultAzureCredential())
    .GetChatClient(deploymentName)
    .AsIChatClient();
builder.Services.AddSingleton(chatClient);

AddAIAgent

Registrare un agente di intelligenza artificiale con inserimento delle dipendenze:

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

Il metodo AddAIAgent() restituisce un IHostedAgentBuilder oggetto, che fornisce i metodi di estensione per configurare l'agente. Ad esempio, è possibile aggiungere strumenti all'agente:

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

È anche possibile configurare l'archivio sessioni (archiviazione per i dati della conversazione):

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

AddWorkflow

Registrare flussi di lavoro che coordinano più agenti. Un flusso di lavoro è essenzialmente un "grafico" in cui ogni nodo è un AIAgente gli agenti comunicano tra loro.

In questo esempio due agenti funzionano in sequenza. L'input dell'utente viene prima inviato a agent-1, che produce una risposta e lo invia a agent-2. Il flusso di lavoro restituisce quindi la risposta finale. Esiste anche un BuildConcurrent metodo che crea un flusso di lavoro dell'agente simultaneo.

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]);
});

Esporre il flusso di lavoro come AIAgent

Per usare le integrazioni dei protocolli (ad esempio A2A o OpenAI) con un flusso di lavoro, convertirlo in un agente autonomo. Attualmente, i flussi di lavoro non offrono funzionalità di integrazione simili autonomamente, quindi questo passaggio di conversione è obbligatorio:

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

Dettagli implementazione

Le librerie di hosting fungono da adattatori di protocollo che consentono di collegare protocolli di comunicazione esterni e l'implementazione interna AIAgent di Agent Framework. Quando si usa una libreria di integrazione dell'hosting, la libreria recupera il registro AIAgent dall'inserimento delle dipendenze, lo avvolge con middleware specifico del protocollo per tradurre le richieste in ingresso e le risposte in uscita e invoca AIAgent per elaborare le richieste. Questa architettura mantiene l'implementazione dell'agente indipendente dal protocollo.

Ad esempio, usando la libreria di hosting ASP.NET Core con l'adattatore del protocollo 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();

Suggerimento

Vedere gli esempi di Durable Functions di Azure per esempi di hosting senza server.

Installare il pacchetto di hosting di Azure Functions:

pip install agent-framework-azurefunctions --pre

Creare un agente:

from agent_framework.azure import AgentFunctionApp, AzureOpenAIChatClient
from azure.identity import AzureCliCredential


# 1. Instantiate the agent with the chosen deployment and instructions.
def _create_agent() -> Any:
    """Create the Joker agent."""

    return AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
        name="Joker",
        instructions="You are good at telling jokes.",
    )

Registrare l'agente con 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)

Eseguire in locale con Gli strumenti di base di Funzioni di Azure:

func start

Richiamare quindi:

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

Suggerimento

Per altri modelli, vedere l'esempio completo per il file eseguibile completo e gli esempi di hosting di Funzioni di Azure .

Passaggi successivi

Approfondimento:

Vedere anche