Compartir vía


Uso de memoria con agentes

Advertencia

La memoria del agente del Kernel Semántico es una funcionalidad experimental, está sujeta a cambios y solo se finalizará en función de los comentarios y la evaluación.

A menudo es importante que un agente recuerde información importante. Esta información se puede conservar durante la duración de una conversación o a largo plazo para abarcar varias conversaciones. La información se puede aprender de interactuar con un usuario y puede ser específica de ese usuario.

Llamamos a esta información recuerdos.

Para capturar y conservar memorias, admitimos componentes que se pueden usar con un AgentThread para extraer memorias de los mensajes que se agregan al hilo y proporcionar esas memorias al agente según sea necesario.

Uso de Mem0 para la memoria del agente

Mem0 es una capa de memoria autoevaluada para aplicaciones LLM, lo que permite experiencias de inteligencia artificial personalizadas.

Se Microsoft.SemanticKernel.Memory.Mem0Provider integra con el servicio Mem0, lo que permite a los agentes recordar las preferencias del usuario y el contexto a lo largo de múltiples hilos de conversación, habilitando una experiencia de usuario fluida.

Cada mensaje agregado al subproceso se envía al servicio Mem0 para extraer memorias. Para cada invocación de un agente, Mem0 se consulta por las memorias que coinciden con la solicitud de usuario proporcionada, y cualquier memoria se agrega al contexto del agente durante esa invocación.

El proveedor de memoria Mem0 se puede configurar con un identificador de usuario para permitir almacenar memorias sobre el usuario, a largo plazo, en varios subprocesos. También se puede configurar con un identificador de subproceso o usar el identificador de subproceso del subproceso del agente, para permitir memorias a corto plazo que solo están asociadas a un único subproceso.

Este es un ejemplo de cómo usar este componente.

// Create an HttpClient for the Mem0 service.
using var httpClient = new HttpClient()
{
    BaseAddress = new Uri("https://api.mem0.ai")
};
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Token", "<Your_Mem0_API_Key>");

// Create a Mem0 provider for the current user.
var mem0Provider = new Mem0Provider(httpClient, options: new()
{
    UserId = "U1"
});

// Clear any previous memories (optional).
await mem0Provider.ClearStoredMemoriesAsync();

// Add the mem0 provider to the agent thread.
ChatHistoryAgentThread agentThread = new();
agentThread.AIContextProviders.Add(mem0Provider);

// Use the agent with mem0 memory.
ChatMessageContent response = await agent.InvokeAsync("Please retrieve my company report", agentThread).FirstAsync();
Console.WriteLine(response.Content);

Opciones de Mem0Provider

Mem0Provider se puede configurar con varias opciones para personalizar su comportamiento. Las opciones se proporcionan mediante la Mem0ProviderOptions clase para el Mem0Provider constructor.

Opciones de ámbito

Mem0 proporciona la capacidad de limitar los recuerdos por aplicación, agente, subproceso y usuario.

Las opciones están disponibles para proporcionar identificadores para estos ámbitos, de modo que las memorias se puedan almacenar en mem0 bajo estos identificadores. Vea las ApplicationId, AgentId, ThreadId y UserId propiedades en Mem0ProviderOptions.

En algunos casos, es posible que desee usar el identificador de hilo del agente en el lado del servidor cuando utilice un agente basado en servicios. Sin embargo, es posible que el subproceso no se haya creado todavía cuando el objeto Mem0Provider se esté construyendo. En este caso, puede establecer la opción ScopeToPerOperationThreadId en true, y Mem0Provider usará el identificador de AgentThread cuando esté disponible.

Mensaje de contexto

La opción ContextPrompt permite modificar el aviso predeterminado que precede a las memorias. La solicitud se usa para contextualizar las memorias proporcionadas al modelo de IA, de modo que el modelo de IA sepa qué son y cómo usarlos.

Uso de la memoria de pizarra para el contexto Short-Term

La característica de memoria de pizarra permite a los agentes capturar y conservar la información más relevante de una conversación, incluso cuando se trunca el historial de chat.

Cada mensaje agregado a la conversación se procesa mediante Microsoft.SemanticKernel.Memory.WhiteboardProvider para extraer requisitos, propuestas, decisiones y acciones. Estos se almacenan en una pizarra y se proporcionan al agente como contexto adicional en cada invocación.

Este es un ejemplo de cómo configurar la memoria de pizarra:

// Create a whiteboard provider.
var whiteboardProvider = new WhiteboardProvider(chatClient);

// Add the whiteboard provider to the agent thread.
ChatHistoryAgentThread agentThread = new();
agentThread.AIContextProviders.Add(whiteboardProvider);

// Simulate a conversation with the agent.
await agent.InvokeAsync("I would like to book a trip to Paris.", agentThread);

// Whiteboard should now contain a requirement that the user wants to book a trip to Paris.

Ventajas de la memoria de pizarra

  • Short-Term Contexto: conserva información clave sobre los objetivos de las conversaciones en curso.
  • Permite el truncamiento del historial de chat: admite el mantenimiento del contexto crítico si se trunca el historial de chat.

Opciones de WhiteboardProvider

WhiteboardProvider se puede configurar con varias opciones para personalizar su comportamiento. Las opciones se proporcionan mediante la WhiteboardProviderOptions clase para el WhiteboardProvider constructor.

MaxWhiteboardMessages

Especifica un número máximo de mensajes que se conservarán en la pizarra. Cuando se alcanza el máximo, se quitarán los mensajes menos valiosos.

ContextPrompt

Al proporcionar el contenido de la pizarra al modelo de IA, es importante describir para qué sirven los mensajes. Esta configuración permite invalidar la mensajería predeterminada que está incorporada en el WhiteboardProvider.

WhiteboardEmptyPrompt

Cuando la pizarra está vacía, WhiteboardProvider genera un mensaje que indica que está vacío. Esta configuración permite anular la mensajería predeterminada integrada en el WhiteboardProvider.

PlantillaDeAvisoDeMantenimiento

WhiteboardProvider usa un modelo de IA para agregar, actualizar o quitar mensajes en la pizarra. Tiene un mensaje integrado para realizar estas actualizaciones. Esta configuración permite superar este aviso integrado.

Los parámetros siguientes se pueden usar en la plantilla:

  • {{$maxWhiteboardMessages}}: el número máximo de mensajes permitidos en la pizarra.
  • {{$inputMessages}}: los mensajes de entrada que se van a agregar a la pizarra.
  • {{$currentWhiteboard}}: el estado actual de la pizarra.

Combinación de Mem0 y memoria de pizarra

Puede usar tanto Mem0 como la memoria de pizarra en el mismo agente para lograr un equilibrio entre las capacidades de memoria a largo plazo y a corto plazo.

// Add both Mem0 and whiteboard providers to the agent thread.
agentThread.AIContextProviders.Add(mem0Provider);
agentThread.AIContextProviders.Add(whiteboardProvider);

// Use the agent with combined memory capabilities.
ChatMessageContent response = await agent.InvokeAsync("Please retrieve my company report", agentThread).FirstAsync();
Console.WriteLine(response.Content);

Al combinar estas características de memoria, los agentes pueden proporcionar una experiencia más personalizada y contextual para los usuarios.

Pasos siguientes

Próximamente

Más información próximamente.

Próximamente

Más información próximamente.