Condividi tramite


Panoramica dell'architettura dell'agente

Questo articolo illustra i concetti chiave dell'architettura di Agent Framework, inclusi i principi fondamentali, gli obiettivi di progettazione e gli obiettivi strategici.

Obiettivi

L'elemento Agent Framework è stato sviluppato tenendo presenti le seguenti priorità chiave:

  • Il framework del Semantic Kernel costituisce la base per implementare le funzionalità degli agenti.
  • Più agenti di tipi diversi possono collaborare all'interno di una singola conversazione, ognuno dei quali contribuisce alle proprie funzionalità uniche, integrando l'input umano.
  • Un agente può interagire e gestire più conversazioni simultanee contemporaneamente.

Agente

La classe astratta Agent funge da astrazione principale per tutti i tipi di agenti, fornendo una struttura di base che può essere estesa per creare agenti più specializzati. Questa classe di base costituisce la base per implementazioni di agenti più specifiche, che sfruttano tutte le funzionalità del kernel per eseguire le rispettive funzioni. Vedere tutti i tipi di agente disponibili nella sezione Tipi di agente .

L'astrazione del kernel Agent semantico sottostante è disponibile qui.

L'astrazione del kernel Agent semantico sottostante è disponibile qui.

Gli agenti possono essere richiamati direttamente per eseguire attività o essere orchestrati da modelli diversi. Questa struttura flessibile consente agli agenti di adattarsi a vari scenari conversazionali o basati su attività, fornendo agli sviluppatori strumenti affidabili per la creazione di sistemi intelligenti e multi-agente.

Tipi di agente nel kernel semantico

Thread agente

La classe astratta AgentThread funge da astrazione principale per i thread o lo stato della conversazione. Estrae i diversi modi in cui lo stato della conversazione può essere gestito per agenti diversi.

I servizi dell'agente con stato spesso archiviano lo stato della conversazione nel servizio ed è possibile interagire con esso tramite un ID. Altri agenti possono richiedere che l'intera cronologia delle chat venga passata all'agente in ogni chiamata, nel qual caso lo stato della conversazione viene gestito localmente nell'applicazione.

Gli agenti con stato in genere funzionano solo con un'implementazione AgentThread corrispondente, mentre altri tipi di agenti possono funzionare con più tipi di AgentThread. Ad esempio, AzureAIAgent richiede un oggetto corrispondente AzureAIAgentThread. Ciò è dovuto al fatto che il servizio Agente di intelligenza artificiale di Azure archivia le conversazioni nel servizio e richiede chiamate di servizio specifiche per creare un thread e aggiornarlo. Se viene usato un tipo di thread dell'agente diverso con AzureAIAgent, interrompiamo rapidamente per un tipo di thread inaspettato e viene sollevata un'eccezione per avvisare il chiamante.

Orchestrazione dell'agente

Importante

Le funzionalità di orchestrazione dell'agente in Agent Framework si trovano nella fase sperimentale. Sono in fase di sviluppo attivo e possono cambiare significativamente prima di passare alla fase di anteprima o candidato al rilascio.

Annotazioni

Se hai utilizzato il AgentGroupChat modello di orchestrazione, tieni presente che non è più supportato. È consigliabile che gli sviluppatori usino il nuovo GroupChatOrchestration modello. Qui è disponibile una guida alla migrazione.

Il framework di orchestrazione agente nel kernel semantico consente il coordinamento di più agenti per risolvere in modo collaborativo attività complesse. Fornisce una struttura flessibile per definire il modo in cui gli agenti interagiscono, condividono informazioni e delegano le responsabilità. I componenti e i concetti principali includono:

  • Modelli di orchestrazione: Modelli predefiniti come Concurrent, Sequential, Handoff, Group Chat e Magentic consentono agli sviluppatori di scegliere il modello di collaborazione più adatto per il proprio scenario. Ogni modello definisce un modo diverso per consentire agli agenti di comunicare ed elaborare le attività (vedere la tabella Modelli di orchestrazione per informazioni dettagliate).
  • Logica di trasformazione dei dati: Le trasformazioni di input e output consentono ai flussi di orchestrazione di adattare i dati tra agenti e sistemi esterni, supportando sia tipi di dati semplici che complessi.
  • Human-in-the-loop: Alcuni modelli supportano il concetto di human-in-the-loop, consentendo agli agenti umani di partecipare al processo di orchestrazione. Ciò è particolarmente utile per gli scenari in cui è necessario il giudizio umano o l'esperienza.

Questa architettura consente agli sviluppatori di creare sistemi intelligenti e multi-agente in grado di affrontare problemi reali attraverso la collaborazione, la specializzazione e il coordinamento dinamico.

Allineamento dell'agente con funzionalità del kernel semantico

Il Agent Framework si basa sui concetti e sulle funzionalità fondamentali che molti sviluppatori hanno ben appreso all'interno dell'ecosistema Semantic Kernel. Questi principi di base fungono da blocchi predefiniti per la progettazione di Agent Framework. Sfruttando la struttura familiare e le funzionalità del kernel semantico, Agent Framework estende le sue funzionalità per abilitare comportamenti più avanzati e autonomi dell'agente, mantenendo al contempo la coerenza con l'architettura più ampia del kernel semantico. Ciò garantisce una transizione uniforme per gli sviluppatori, consentendo loro di applicare le proprie conoscenze esistenti per creare agenti intelligenti e adattabili all'interno del framework.

Plug-in e chiamate di funzioni

I plug-in sono un aspetto fondamentale del kernel semantico, consentendo agli sviluppatori di integrare funzionalità personalizzate ed estendere le funzionalità di un'applicazione di intelligenza artificiale. Questi plug-in offrono un modo flessibile per incorporare funzionalità specializzate o logica specifica dell'azienda nei flussi di lavoro di intelligenza artificiale di base. Inoltre, le funzionalità dell'agente all'interno del framework possono essere notevolmente migliorate usando plug-in e sfruttando le chiamate di funzione. In questo modo gli agenti possono interagire dinamicamente con servizi esterni o eseguire attività complesse, espandendo ulteriormente l'ambito e la versatilità del sistema di intelligenza artificiale all'interno di applicazioni diverse.

Informazioni su come configurare gli agenti per l'uso dei plug-in qui.

Messaggi dell'agente

La messaggistica dell'agente, inclusa sia l'input che la risposta, si basa sui tipi di contenuto di base del kernel semantico, fornendo una struttura unificata per la comunicazione. Questa scelta di progettazione semplifica il processo di transizione dai modelli tradizionali di completamento della chat a modelli basati su agenti più avanzati nello sviluppo di applicazioni. Sfruttando i tipi di contenuto semantic kernel familiari, gli sviluppatori possono integrare facilmente le funzionalità degli agenti nelle applicazioni senza dover revisionare i sistemi esistenti. Questa semplificazione garantisce che, mentre si evolve dall'intelligenza artificiale conversazionale di base agli agenti più autonomi e orientati alle attività, il framework sottostante rimane coerente, rendendo il processo di sviluppo più veloce ed efficiente.

Suggerimento

Informazioni di riferimento sulle API:

Creazione di modelli

Il ruolo di un agente è principalmente modellato dalle istruzioni ricevute, che ne determinano il comportamento e le azioni. Analogamente alla chiamata di un prompt, le istruzioni di un Kernelagente possono includere parametri basato su modelli, sia valori che funzioni, che vengono sostituiti dinamicamente durante l'esecuzione. Ciò consente risposte flessibili e in grado di supportare il contesto, consentendo all'agente di regolare l'output in base all'input in tempo reale.

Inoltre, un agente può essere configurato direttamente usando una configurazione del modello di richiesta, fornendo agli sviluppatori un modo strutturato e riutilizzabile per definirne il comportamento. Questo approccio offre uno strumento potente per la standardizzazione e la personalizzazione delle istruzioni degli agenti, garantendo la coerenza tra vari casi d'uso mantenendo al tempo stesso l'adattabilità dinamica.

Altre informazioni su come creare un agente con il modello Semantic Kernel sono disponibili qui.

Specifica dichiarativa

La documentazione sull'uso delle specifiche dichiarative sarà presto disponibile.

Importante

Questa funzionalità si trova nella fase sperimentale. Le funzionalità in questa fase sono in fase di sviluppo e soggette a cambiamenti prima di passare alla fase di anteprima o alla versione candidata al rilascio.

Registrazione dei tipi di agente personalizzati

Per usare un agente personalizzato con il sistema di specifiche YAML dichiarativo, è prima necessario registrare la classe dell'agente nel registro agenti. Questa operazione è necessaria affinché il AgentRegistry possa riconoscere e costruire l'agente durante l'analisi del campo type: nella specifica YAML.

Per registrare un tipo di agente personalizzato, usare il @register_agent_type decorator:

from semantic_kernel.agents import register_agent_type, Agent, DeclarativeSpecMixin

@register_agent_type("custom_agent")
class CustomAgent(DeclarativeSpecMixin, Agent):
    ...

La stringa fornita all'elemento Decorator (ad esempio, "custom_agent") deve corrispondere al tipo: campo nella specifica YAML.

Dopo la registrazione, è possibile istanziare l'agente personalizzato usando il modello dichiarativo, ad esempio tramite AgentRegistry.create_from_yaml(...).

DeclarativeSpecMixin aggiunge il supporto per metodi come from_yaml, from_dict, e resolve_placeholders, che consentono di costruire l'agente da una specifica YAML o dizionario.

@classmethod
async def from_yaml(cls, yaml_str: str, *, kernel=None, plugins=None, prompt_template_config=None, settings=None, extras=None, **kwargs):
    # Resolves placeholders and loads YAML, then delegates to from_dict.
    ...

@classmethod
async def from_dict(cls, data: dict, *, kernel=None, plugins=None, prompt_template_config=None, settings=None, **kwargs):
    # Normalizes and passes spec fields to _from_dict.
    ...

@classmethod
@abstractmethod
async def _from_dict(cls, data: dict, *, kernel, prompt_template_config=None, **kwargs):
    # Subclasses implement this to create the agent from a dict.
    ...

@classmethod
def resolve_placeholders(cls, yaml_str: str, settings=None, extras=None) -> str:
    # Optional: override this to customize how environment or runtime placeholders are resolved in YAML.
    return yaml_str

Suggerimento

Qualsiasi agente personalizzato deve ereditare da DeclarativeSpecMixin per abilitare la costruzione basata su YAML e deve essere registrato nel Registro di sistema usando @register_agent_type.

Questa funzionalità non è disponibile.

Passaggi successivi