Administrar estado

El estado dentro de un agente sigue los mismos paradigmas que las aplicaciones web modernas. El SDK de agentes proporciona algunas abstracciones para facilitar la administración de estado.

Al igual que con las aplicaciones web, un agente no tiene estado inherentemente. Una instancia diferente del agente puede controlar cualquier turno determinado de la conversación. Para algunos agentes, se prefiere esta simplicidad: el agente puede funcionar sin información adicional o se garantiza que la información necesaria esté dentro del mensaje entrante. Para otros usuarios, el estado (por ejemplo, donde la conversación se dejó o los datos recibidos anteriormente sobre el usuario) es necesario para que el agente tenga una conversación útil.

¿Por qué necesito el estado?

Mantener el estado permite que el agente tenga conversaciones más significativas al recordar ciertas cosas sobre un usuario o una conversación. Por ejemplo, si ha hablado con un usuario anteriormente, puede guardar información anterior sobre ellos para que no tenga que solicitarla de nuevo. El estado también mantiene los datos durante más tiempo que el turno actual, de modo que el agente mantenga la información a lo largo de una conversación multiturno.

En lo que respecta a los agentes, hay algunas capas para usar el estado: la capa de almacenamiento, la administración de estado y AgentApplication.

Capa de almacenamiento

A partir del back-end, donde realmente se almacena la información de estado, es la capa de almacenamiento. Puede considerar esto como el almacenamiento físico, como en memoria, Azure o un servidor de terceros.

El SDK de agentes incluye algunas implementaciones para la capa de almacenamiento:

El almacenamiento de memoria implementa el almacenamiento en memoria con fines de prueba. El almacenamiento de datos en memoria está pensado solo para pruebas locales, ya que este almacenamiento es volátil y temporal. Los datos se borran cada vez que se reinicia el agente.

Azure Blob Storage se conecta a una base de datos de objetos de Azure Blob Storage.

El almacenamiento con particiones de Azure Cosmos DB se conecta a una base de datos NoSQL de Cosmos DB con particiones.

Para obtener instrucciones sobre cómo conectarse a otras opciones de almacenamiento, consulte Introducción al almacenamiento del SDK de agentes

Administración de estados

La administración de estado automatiza la lectura y escritura del estado del agente en la capa de almacenamiento subyacente. El estado se almacena como propiedades de estado, que son pares clave-valor que el agente puede leer y escribir a través del objeto de administración de estado sin preocuparse por la implementación subyacente específica. Esas propiedades de estado definen cómo se almacena esa información. Por ejemplo, al recuperar una propiedad que definió como una clase o un objeto específicos, sabe cómo se estructurarán esos datos.

Estas propiedades de estado se agrupan en "categorías" con ámbito específico, que son solo colecciones para ayudar a organizar esas propiedades. El SDK incluye tres de estos "cubos":

  • Estado del usuario
  • Estado de conversación

Todos estos cubos son subclases de la clase de estado del agente, que se puede derivar para definir otros tipos de cubos con distintos ámbitos.

Estos cubos predefinidos se limitan a una determinada visibilidad, en función del cubo:

  • El estado del usuario está disponible en cualquier momento que el agente esté conversando con ese usuario en ese canal, independientemente de la conversación
  • El estado de conversación está disponible en cualquier momento en una conversación específica, independientemente del usuario, como en las conversaciones de grupo.

El estado del usuario y el estado de la conversación se definen por canal. La misma persona que usa canales diferentes para tener acceso al agente aparece como usuarios diferentes, uno para cada canal y cada uno con un estado de usuario distinto.

Las claves usadas para cada uno de estos cubos predefinidos son específicas del usuario y la conversación, o agenth. Al establecer el valor de la propiedad de estado, la clave se define internamente, con información contenida en el contexto de turno para asegurar que cada usuario o conversación se coloca en la categoría y propiedad correctas. En concreto, las claves se definen de la siguiente manera:

  • El estado del usuario crea una clave mediante el identificador de canal y desde el identificador. Por ejemplo: {Activity.ChannelId}/users/{Activity.From.Id}#YourPropertyName
  • El estado de la conversación crea una clave mediante el identificador de canal y el identificador de conversación. Por ejemplo: {Activity.ChannelId}/conversations/{Activity.Conversation.Id}#YourPropertyName

Cuándo usar cada tipo de estado

El estado de la conversación es adecuado para realizar un seguimiento del contexto de la conversación, como:

  • Si el agente hizo una pregunta al usuario y qué pregunta era
  • Cuál es el tema actual de la conversación o cuál fue el último
  • Registro del historial de chats

El estado del usuario es adecuado para realizar un seguimiento de la información sobre el usuario, como:

  • Información de usuario no crítica, como el nombre y las preferencias, una configuración de alarma o una preferencia de alerta
  • Información sobre la última conversación que tuvieron con el agente
    • Por ejemplo, un agente de soporte técnico de productos podría realizar un seguimiento de los productos sobre los que ha preguntado el usuario.

AgentApplication

  • Los controladores de ruta que agregue se proporcionarán con una instancia TurnState. Obtenga acceso a la conversación o al estado de usuario desde esta instancia.
  • El estado se carga y guarda automáticamente.