Memora: sistema de memoria escalable para tareas de largo plazo
(github.com/microsoft)Resumen general
-
Objetivo
- Un framework de memoria que ayuda a los agentes de IA a extraer automáticamente información necesaria de conversaciones y documentos, y a almacenarla y recuperarla a largo plazo
-
Diseño central
- Conserva intacto el
Memory value, que es el texto original completo, y usaPrimary abstractionyCue anchorspara la búsqueda
- Conserva intacto el
-
Diferenciador principal
- Busca una estructura que reduzca la pérdida de información y la ambigüedad en la recuperación frente al RAG común que embebe directamente todo el texto original
-
Funciones principales
- Soporta extracción automática de memoria, eliminación de duplicados, fusión y actualización, búsqueda semántica, búsqueda por palabras clave y búsqueda multinivel basada en LLM
-
Casos de uso
- IA conversacional de largo plazo, sistemas multiagente, servicios personalizados y gestión de conocimiento basada en documentos
-
Estado actual
- Es un proyecto abierto con licencia MIT basado en Python que incluye benchmarks y funciones experimentales, aunque todavía está cerca de una etapa inicial de publicación
Introducción
Resolver la complejidad de la gestión de memoria en agentes
-
En el desarrollo tradicional de agentes de IA, el desarrollador debe encargarse directamente de los siguientes problemas
- decidir qué información guardar como memoria
- determinar cuándo actualizar o borrar la información almacenada
- recuperar recuerdos relacionados con la pregunta del usuario
- gestionar recuerdos duplicados o en conflicto
-
Memora busca manejar este ciclo de vida de la memoria dentro del framework
-
Así, los desarrolladores pueden concentrarse más en las funciones del agente y en la generación de respuestas que en la lógica de almacenamiento y recuperación de bajo nivel
Límites de las arquitecturas de memoria existentes
-
En los sistemas RAG comunes
- se divide el texto original de documentos o conversaciones en fragmentos de cierto tamaño
- cada fragmento se embebe y se guarda en una base de datos vectorial
- se recuperan los fragmentos semánticamente cercanos a la pregunta
-
Este enfoque es sencillo de implementar, pero puede generar los siguientes problemas
- un contexto largo queda dividido en varios fragmentos
- la información con expresiones similares se almacena de forma duplicada
- una similitud semántica simple puede no coincidir con la intención real de la pregunta
- si solo se guarda un resumen comprimido, pueden perderse detalles
-
Las bases de conocimiento tipo grafo son útiles para representar relaciones, pero implican la carga de mantener continuamente el esquema y la estructura relacional
Desarrollo
Separar el texto original de la estructura de búsqueda
- Cada memoria en Memora está compuesta por tres elementos
Memory value
- Es la información completa que realmente se almacena
- Conserva el texto original y los detalles sin comprimirlos
- No se incluye directamente en el índice de búsqueda
- Su función es mantener el contexto original sin pérdida de información
Primary abstraction
- Es el resumen representativo que indica de qué trata esa memoria
- Se genera una por cada memoria
- Se usa como criterio para búsqueda, actualización, fusión y eliminación de duplicados
- Funciona como unidad estándar que representa la identidad de la memoria
Cue anchors
- Son múltiples pistas semánticas para acceder a una memoria
- Se construyen combinando personas, objetos, eventos, atributos clave y otros elementos
- A un mismo recuerdo se le pueden vincular varias pistas
- Forman una estructura de muchos a muchos donde varios recuerdos pueden compartir la misma pista
Indexación selectiva de los elementos de búsqueda
-
Memora no indexa directamente todo el texto original
-
En la búsqueda real solo utiliza la siguiente información
- Primary abstraction
- Cue anchors
-
Cuando termina la búsqueda, devuelve el
Memory valueoriginal asociado -
Objetivos de esta estructura
- separar la representación de búsqueda de la información realmente almacenada
- mantener conciso el índice de búsqueda
- preservar intactos los detalles del texto original
- reducir el ruido semántico que puede surgir al embeber el texto original
Una forma intermedia entre RAG y las estructuras de grafo
-
Ofrece pistas de búsqueda más estructuradas que un RAG convencional
-
No define todas las relaciones con un esquema rígido como una base de datos de grafos
-
Busca sumar una capa de abstracción sobre la memoria para obtener al mismo tiempo flexibilidad y estructura
-
Dirección central
- el texto original se guarda en formato libre
- para la búsqueda y la conexión se usan representaciones estructuradas
- la estructura de almacenamiento y la estructura de búsqueda se gestionan de manera independiente
Flujo de procesamiento desde la creación de memoria hasta la respuesta
1. Recolección de memoria
-
El agente procesa una conversación o un documento
-
A partir del contenido extrae automáticamente la siguiente información
- datos fácticos
- eventos y experiencias
- procedimientos y formas de trabajo
-
Las conversaciones largas se dividen en episodios por tema
-
La información clave se transforma en entradas de memoria estructuradas
2. Almacenamiento inteligente
-
Usa la base de datos vectorial ChromaDB como almacenamiento predeterminado
-
Almacena memorias usando embeddings semánticos
-
Cuando entra información nueva, la compara con memorias existentes
-
Sobre información similar o duplicada realiza las siguientes acciones
- eliminación de duplicados
- fusión con recuerdos existentes
- actualización de información desactualizada
-
De forma opcional, genera un
Cue indexpara soportar búsqueda estructurada
3. Recuperación adaptativa
- Ofrece varias estrategias de búsqueda según el tipo de pregunta y la configuración
Búsqueda semantic
- Calcula la similitud vectorial entre la pregunta y las representaciones de memoria
- Su implementación es simple y se puede aplicar a preguntas generales
- Puede encontrar información semánticamente parecida aunque la expresión sea distinta
Búsqueda prompted
- El LLM realiza el proceso de búsqueda por etapas
- Ajusta repetidamente los términos y el alcance de la búsqueda a partir de los resultados iniciales
- Es adecuada para preguntas complejas o que requieren combinar varios recuerdos
- Como añade llamadas extra al LLM, puede aumentar el costo y el tiempo de respuesta
Búsqueda hybrid
- Combina la búsqueda semántica basada en vectores con búsqueda por BM25 y palabras clave
- Aprovecha tanto la similitud semántica como la coincidencia exacta de palabras
- Es útil para reducir omisiones al buscar nombres propios, nombres de productos, código o fechas
Búsqueda GRPO
- Usa una política de recuperación entrenada con aprendizaje por refuerzo
- Aprende el método mismo para seleccionar las memorias necesarias para una pregunta
- Busca reemplazar la búsqueda iterativa basada en LLM por un modelo ajustado localmente
- Actualmente se clasifica como una función experimental
4. Generación de respuestas
- Organiza las memorias recuperadas en un formato definido
- Inserta ese contenido en el prompt del LLM
- El LLM genera la respuesta usando tanto la pregunta como los recuerdos recuperados
- Busca que la respuesta esté fundamentada en la memoria almacenada
Funciones de gestión para mantener la calidad de la memoria
-
A diferencia de un repositorio plano que solo sigue agregando memorias, gestiona el estado de las memorias existentes
-
Principales funciones de gestión
- eliminar recuerdos duplicados
- fusionar recuerdos similares
- actualizar hechos modificados
- reorganizar la estructura de memoria
-
Usa
Primary abstractioncomo criterio para actualizar e integrar memorias -
Busca reducir el problema de acumulación ilimitada de duplicados con el paso del tiempo
Soporte para distintos tipos de memoria
- Es posible representar varios tipos de recuerdos configurando de forma distinta el valor de memoria y el método de abstracción
Memoria factual
- Información relativamente estable como personas, lugares, atributos o configuraciones
- Ejemplo: lugar de trabajo de un usuario específico, herramientas preferidas, stack tecnológico de un proyecto
Memoria episódica
- Eventos o conversaciones ocurridos en un momento concreto
- Ejemplo: lo decidido en una reunión pasada, el proceso para resolver un error específico
Memoria procedimental
- Métodos de trabajo o procedimientos repetibles
- Ejemplo: procedimiento de despliegue de servidor, secuencia para revisar errores, reglas para generar documentos
Compartición y aislamiento de memoria en entornos multiagente
-
Varios agentes que operan en el mismo entorno pueden usar un espacio de memoria compartido
-
La información almacenada por un agente puede ser reutilizada por otros agentes
-
También se puede restringir el alcance de la memoria por agente o por rol
-
Efectos esperados
- reducir la duplicación de conocimiento entre agentes
- mejorar el traspaso de tareas
- mantener la consistencia de la información compartida de un proyecto
-
Con funciones de control de acceso y aislamiento, la arquitectura soporta compartición selectiva y protección de privacidad
Separación entre infraestructura de almacenamiento y estructura de representación
-
Está diseñado para que la forma de representar la memoria no dependa fuertemente de un almacenamiento específico
-
La estructura del proyecto incluye conectores para las siguientes bases de datos
- ChromaDB
- Redis
-
Puede aplicarse a entornos de almacenamiento local o remoto
-
Aunque cambie el backend de almacenamiento, se puede mantener la estructura de abstracciones y pistas de la memoria
Forma básica de uso
- Requiere Python 3.10 o superior
- Después de clonar el repositorio de GitHub, se instala el paquete
- Se crea un
MemoraClienty se especifica un identificador de usuario o agente - Se usa
add()para agregar conversaciones o documentos a la memoria - Se usa
query()para realizar búsqueda semántica - Se usa
advance_query()para realizar búsquedas avanzadas en modo Prompted o GRPO
Estructura de integración con agentes
-
Al recibir un mensaje del usuario, primero recupera las memorias relacionadas
-
Genera una respuesta usando los resultados de búsqueda y la pregunta del usuario
-
Organiza la respuesta generada y el mensaje del usuario como un solo registro conversacional
-
Luego vuelve a guardar esa conversación en Memora
-
Proceso repetitivo
- recibir la pregunta
- recuperar recuerdos relacionados
- generar la respuesta
- guardar la conversación
- reutilizarla en preguntas posteriores
Evaluación del rendimiento de memoria a largo plazo
Benchmark LoCoMo
-
Evalúa la capacidad de recuperación de recuerdos en conversaciones de larga duración
-
Principales tipos de evaluación
- preguntas de una sola etapa
- preguntas multietapa que combinan varias informaciones
- preguntas sobre relaciones temporales
- preguntas abiertas
-
Se pueden probar combinaciones de Semantic, Prompted,
Cue indexy otras opciones
Benchmark LongMemEval
- Evalúa la capacidad de un sistema de memoria a largo plazo para manejar distintos tipos de preguntas
- Puede aplicar configuraciones de memoria episódica y búsqueda semántica
- Sirve para verificar retención de información y rendimiento de recuperación en entornos reales de conversación prolongada
Entrenamiento de políticas de búsqueda basadas en GRPO
-
Función experimental para aprender el procedimiento de búsqueda como una política de aprendizaje por refuerzo
-
Etapas del proceso
- generar rutas de búsqueda con la política actual
- evaluar fundamento, duplicación y costo de los resultados
- calcular ventajas relativas de grupo
- entrenar la política de búsqueda con el método GRPO
-
Presenta como ejemplo modelos de la familia Qwen 3B o 7B y ajuste fino con LoRA
-
El entrenamiento requiere GPU
-
Objetivos
- reducir el costo de llamar a un LLM externo en cada búsqueda
- construir estrategias de recuperación optimizadas para datos y tareas específicas
-
Limitaciones
- se necesitan datos de entrenamiento y criterios de evaluación
- se añade gestión adicional de entrenamiento y operación del modelo
- para usuarios generales, es más complejo de aplicar de inmediato que la búsqueda semantic
Principales ventajas
- Permite conservar los detalles del texto original sin comprimirlos
- La separación entre representación de búsqueda e información real hace más clara la estructura de memoria
- Permite tratar de manera sistemática la eliminación de duplicados y la actualización de memoria
- Se puede elegir entre búsqueda semántica, por palabras clave, con LLM o con aprendizaje por refuerzo
- Puede gestionar en un solo framework memoria factual, episódica y procedimental
- Varios agentes pueden compartir los mismos recuerdos
- Busca integrarse con relativamente pocos cambios en sistemas de agentes ya existentes
- Puede soportar tanto estructuras de almacenamiento local como remoto
Limitaciones estructurales y puntos de atención
- La calidad de
Primary abstractionyCue anchorsinfluye directamente en el rendimiento de recuperación - Si la abstracción generada automáticamente es imprecisa, la información puede quedar fuera de la búsqueda aunque el texto original sea correcto
- Una arquitectura que no indexa directamente el texto original puede quedar en desventaja para buscar frases muy específicas o información escasa
- Durante la eliminación de duplicados y la fusión, eventos distintos podrían integrarse por error en un solo recuerdo
- La búsqueda prompted puede aumentar costos y latencia por las múltiples llamadas al LLM
- El enfoque GRPO requiere GPU, datos de entrenamiento y un sistema de evaluación, lo que eleva la complejidad operativa
- La memoria compartida en sistemas multiagente exige diseñar con claridad permisos de acceso y aislamiento de información
- Si se almacenan datos personales o conversaciones sensibles, hacen falta políticas separadas de cifrado, borrado y retención
- El repositorio público no tiene releases y muestra pocos contribuidores y métricas de uso, por lo que es difícil considerar suficientemente validada su estabilidad para operación a gran escala
Conclusión
Un enfoque de memoria a largo plazo con una capa de acceso estructurada
-
Memora propone alejarse del enfoque de vectorizar simplemente todo el texto original y plantea la siguiente estructura
- los detalles se conservan en
Memory value - el significado representativo se expresa con
Primary abstraction - las distintas rutas de búsqueda se construyen con
Cue anchors
- los detalles se conservan en
-
Su valor central está en el equilibrio entre preservación de la información y eficiencia de recuperación
-
Tiene más potencial de uso en los siguientes entornos que en una simple búsqueda documental
- agentes personalizados que interactúan con usuarios durante largos periodos
- sistemas que acumulan continuamente gran cantidad de documentos técnicos y de trabajo
- entornos donde agentes con distintos roles comparten conocimiento
- proyectos que necesitan reutilizar decisiones pasadas y procedimientos de trabajo
Hace falta validarlo antes de adoptarlo
-
En una aplicación real, primero conviene verificar los siguientes elementos
- la calidad de la abstracción y de la generación de
Cuepara documentos en coreano - la precisión de recuperación comparada con un RAG existente
- la tasa de error en el proceso de fusión de memorias
- el crecimiento de datos y la velocidad de búsqueda en operación a largo plazo
- el costo de las API de LLM y embeddings
- la forma de almacenamiento de datos personales y el control de acceso
- la calidad de la abstracción y de la generación de
-
En una etapa inicial, es apropiado hacer un PoC pequeño sobre parte de los documentos clave y comparar el rendimiento con RAG convencional y con búsqueda híbrida
Aún no hay comentarios.