Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Lo stato all'interno di un agente segue gli stessi paradigmi delle applicazioni Web moderne. Agenti SDK fornisce alcune astrazioni per semplificare la gestione dello stato.
Come per le app Web, un agente è intrinsecamente senza stato. Un'istanza diversa dell'agente può gestire ciascun turno della conversazione. Alcuni agenti preferiscono questa semplicità: l'agente può operare senza informazioni aggiuntive oppure viene garantito che le informazioni necessarie siano all'interno del messaggio in arrivo. Per altri, è necessario lo stato (ad esempio quando la conversazione è stata interrotta o i dati sull'utente ricevuti in precedenza) affinché l'agente abbia una conversazione utile.
Perché è necessario lo stato?
La gestione dello stato consente all'agente di avere conversazioni più significative memorizzando alcuni aspetti relativi a un utente o a una conversazione. Ad esempio, se in precedenza si è parlato con un utente, è possibile salvare le informazioni precedenti su di esse, in modo che non sia necessario richiederlo di nuovo. Lo stato mantiene anche i dati per più tempo rispetto al turno corrente, in modo che l'agente mantenga le informazioni nel corso di una conversazione a più turni.
In relazione agli agenti, esistono alcuni livelli per usare lo stato: il livello di archiviazione, la gestione dello stato e AgentApplication.
Livello di archiviazione
Il livello di archiviazione parte dal back-end in cui vengono effettivamente archiviate le informazioni sullo stato. Puoi pensarlo come un'archiviazione fisica, ad esempio una memoria, in Azure o su un server di terze parti.
Agenti SDK include alcune implementazioni per il livello di archiviazione:
L'archiviazione in memoria implementa l'archiviazione in memoria a scopo di test. L'archiviazione dei dati in memoria è destinata solo a test locali perché questa risorsa di archiviazione è volatile e temporanea. I dati vengono cancellati ogni volta che l'agente viene riavviato.
Archiviazione BLOB di Azure si connette a un database di oggetti di Archiviazione BLOB di Azure.
L'archiviazione partizionata di Azure Cosmos DB si connette a un database NoSQL di Cosmos DB partizionato.
Per istruzioni su come connettersi ad altre opzioni di archiviazione, vedi Panoramica dell'archiviazione di Agenti SDK
Gestione dello stato
La gestione dello stato automatizza la lettura e la scrittura dello stato dell'agente nel livello di archiviazione sottostante. Lo stato viene archiviato come proprietà di stato, ovvero coppie chiave-valore che l'agente può leggere e scrivere tramite l'oggetto di gestione dello stato senza preoccuparsi dell'implementazione sottostante specifica. Tali proprietà di stato definiscono la modalità di archiviazione delle informazioni. Ad esempio, quando si recupera una proprietà definita come classe o oggetto specifico, si sa come verranno strutturati i dati.
Queste proprietà di stato sono raggruppate in "insiemi con ambito limitato", che sono semplici raccolte per facilitare l'organizzazione di tali proprietà. L'SDK include tre di questi "bucket":
- Stato utente
- Stato della conversazione
Tutti questi bucket sono classi secondarie della classe di stato dell'agente, che possono essere derivate per definire altri tipi di bucket con ambiti diversi.
Questi contenitori predefiniti hanno una visibilità specifica, che varia a seconda del contenitore.
- Lo stato utente è disponibile in qualsiasi turno in cui l'agente sta conversando con l'utente su tale canale, indipendentemente dalla conversazione
- Lo stato della conversazione è disponibile in qualsiasi turno in una conversazione specifica, indipendentemente dall'utente, ad esempio nelle conversazioni di gruppo
Lo stato utente e lo stato della conversazione sono definiti in base al canale. La stessa persona che usa canali diversi per accedere all'agente viene visualizzata come utenti diversi, uno per ogni canale e ognuno con uno stato utente distinto.
Le chiavi usate per ognuno di questi bucket predefiniti sono specifiche per l'utente e per la conversazione o l'agente. Quando si imposta il valore della proprietà di stato, la chiave viene definita internamente, con informazioni contenute nel contesto di turno per assicurarsi che ogni utente o conversazione venga inserito nel bucket e nella proprietà corretti. In particolare, le chiavi vengono definite come segue:
- Lo stato utente crea una chiave usando l'ID canale e l'ID. Ad esempio,
{Activity.ChannelId}/users/{Activity.From.Id}#YourPropertyName - Lo stato della conversazione crea una chiave usando l'ID canale e l'ID conversazione. Ad esempio,
{Activity.ChannelId}/conversations/{Activity.Conversation.Id}#YourPropertyName
Quando usare ogni tipo di stato
Lo stato della conversazione è adatto per tenere traccia del contesto della conversazione, ad esempio:
- Indica se l'agente ha chiesto all'utente una domanda e quale domanda
- Qual è l'argomento corrente della conversazione o qual è l'ultimo
- Registrazione della cronologia delle chat
Lo stato utente è utile per tenere traccia delle informazioni sull'utente, ad esempio:
- Informazioni utente non critiche, ad esempio nome e preferenze, impostazione di allarme o preferenza di avviso
- Informazioni sull'ultima conversazione che hanno avuto con l'agente
- Ad esempio, un agente del supporto tecnico del prodotto potrebbe tenere traccia dei prodotti che l'utente ha chiesto.
AgentApplication
- I gestori di route aggiunti verranno forniti con un'istanza di
TurnState. Accedere allo stato della conversazione o dell'utente da questa istanza. - Lo stato viene caricato e salvato automaticamente.