Overview
Las interacciones estándar de la IA carecen de estado: una vez finalizada la sesión, el modelo pierde todo el contexto de la conversación. La memoria del agente transforma estas interacciones sin estado en flujos de trabajo adaptativos y con estado, al proporcionar a los agentes un almacén de conocimiento persistente que abarca múltiples conversaciones. El agente aprende de su entorno, actualiza este almacén y recupera la información necesaria para las tareas posteriores.
A diferencia de una ventana de contexto temporal que se restablece después de cada sesión, la memoria del agente garantiza que este no vuelva a empezar desde cero. Sin ella, un agente no puede recordar a los usuarios recurrentes, las decisiones anteriores ni los flujos de trabajo establecidos.
MongoDB Atlas Agent Engine introduce un servicio de memoria dedicado para gestionar la persistencia de datos en todos tus proyectos. Este servicio analiza las conversaciones en segundo plano para capturar información duradera, al tiempo que permite a las aplicaciones escribir recuerdos en el almacenamiento.
Cómo funciona la memoria
La memoria opera en dos capas distintas, diferenciadas por la duración y la estructura de los datos: memoria a corto plazo y memoria a largo plazo. Un proceso de extracción en segundo plano transforma la información a corto plazo en conocimiento a largo plazo.
Memoria a corto plazo
La memoria a corto plazo (MCP) almacena el historial de conversaciones en orden cronológico. La plataforma registra cada intervención en tiempo real a medida que ocurre. Cuando el agente necesita contexto conversacional inmediato de las intervenciones recientes, lo consulta en la MCP.
De la conversación a la memoria
El motor Atlas Agent convierte los turnos conversacionales en memoria duradera a través de un ciclo de vida de tres etapas:
Registro de turnos: A medida que el agente interactúa con los usuarios, la plataforma registra cada turno en la memoria a corto plazo.
Generación de instantáneas: Cuando una sesión alcanza un número de mensajes configurado o un umbral de inactividad, un proceso en segundo plano recopila el historial de la conversación en una instantánea resumida.
Extracción LLM: Un modelo de lenguaje extenso (LLM, por sus siglas en inglés) analiza la instantánea y extrae el conocimiento duradero en los tipos de memoria a largo plazo apropiados.
Dado que la extracción se realiza de forma asíncrona, la grabación de los turnos nunca bloquea la respuesta del agente. El conocimiento extraído de una sesión se almacena en la memoria a largo plazo para conversaciones posteriores, en lugar de estar disponible en el siguiente turno inmediato. Los turnos recientes permanecen disponibles de inmediato a través de la memoria a corto plazo, y el conocimiento extraído aparece poco después.
Memoria a largo plazo
La memoria a largo plazo perdura entre sesiones y retiene el conocimiento duradero extraído de las conversaciones. La plataforma crea memoria a largo plazo mediante la síntesis de la memoria a corto plazo o a través de la escritura directa.
Para los agentes implementados en la plataforma, esta registra automáticamente las conversaciones como memoria a corto plazo y extrae la memoria a largo plazo a partir de ella, aunque los agentes pueden escribir directamente en la memoria a largo plazo cuando sea necesario. Las aplicaciones externas suelen escribir en la memoria a corto plazo utilizando el kit de desarrollo de software (SDK) para la extracción de datos de la plataforma. También pueden escribir directamente en la memoria a largo plazo, a través del SDK o del protocolo de contexto del modelo de memoria (MCP).
Tipos de memoria a largo plazo
La plataforma organiza la memoria a largo plazo en cuatro tipos especializados:
Memoria semántica: Almacena hechos etiquetados.
Memoria episódica: Almacena interacciones y conversaciones pasadas como episodios discretos.
Memoria procedimental: Almacena instrucciones y flujos de trabajo reutilizables, paso a paso.
Memoria taxonómica: Almacena términos del dominio y sus definiciones.
Las siguientes secciones describen cada tipo en detalle.
Memoria semántica
La memoria semántica almacena información etiquetada sobre un usuario o una aplicación. Un dato es conocimiento que se mantiene relevante más allá de la conversación que lo generó. Por ejemplo, un dato puede registrar el aeropuerto de origen de un usuario o su preferencia por los asientos de ventanilla.
El motor de agentes Atlas crea memoria semántica mediante extracción en segundo plano y escrituras directas:
Extracciónde antecedentes: Extrae información de instantáneas de conversaciones y consolida la información duplicada o actualizada a lo largo del tiempo.
Direct escribe: Guarda un dato con
save_semantic(label=..., text=...).
Para recuperar un dato, utilice get_semantic para buscarlo por etiqueta o search_semantic para encontrar datos por significado. La memoria semántica se incluye por defecto en build_context, por lo que los datos relevantes aparecen en el contexto que recupera su agente.
El siguiente ejemplo guarda un dato, lo recupera por su etiqueta y busca en el chat por su significado:
from agentic_platform_memory import ( Memory, MemoryRequestContext, ) memory = Memory( api_key="<your-access-token>", project_id="<your-project-id>", ) chat = memory.bind( MemoryRequestContext( user_id="user_1", session_id="thread_123", ) ) chat.save_semantic( label="home-airport", text="The user's home airport is Boston.", ) fact = chat.get_semantic("home-airport") hits = chat.search_semantic("home airport")
Memoria episódica
La memoria episódica almacena conversaciones pasadas como episodios resumidos. Un episodio registra lo sucedido en una conversación, incluyendo las decisiones tomadas y sus consecuencias. La memoria episódica responde a la pregunta de qué debería saber un agente sobre las interacciones pasadas de un usuario.
El motor Atlas Agent crea memoria episódica mediante extracción en segundo plano y escrituras directas:
Extracciónde fondo: Extrae los episodios y sus participantes de las instantáneas de las conversaciones.
Direct escribe: Guarda un episodio con
save_episode(title=..., content=...).
Los episodios persisten a lo largo de las conversaciones. Un agente puede recordar lo sucedido en una conversación durante otra posterior.
Para recuperar episodios, utilice search_episodes para buscarlos por significado o list_episodes para listar los episodios de un usuario. La memoria episódica es una de las fuentes predeterminadas en build_context, por lo que se incluyen los episodios relevantes.
El siguiente ejemplo guarda un episodio, lo busca y muestra una lista de los episodios del usuario:
from agentic_platform_memory import ( Memory, MemoryRequestContext, ) memory = Memory( api_key="<your-access-token>", project_id="<your-project-id>", ) chat = memory.bind( MemoryRequestContext( user_id="user_1", session_id="thread_123", ) ) chat.save_episode( title="Vacation planning", content="Planned a summer trip to Lisbon.", ) episodes = chat.search_episodes("trip to Lisbon") recent = chat.list_episodes()
Memoria procedimental
La memoria procedimental almacena procedimientos reutilizables: los flujos de trabajo paso a paso que sigue un agente para completar una tarea específica. Un procedimiento describe cómo realizar una acción, como comparar opciones de vuelo o procesar una solicitud de reembolso.
El motor de agentes Atlas crea memoria procedimental mediante extracción en segundo plano y escrituras directas:
Extracción de fondo: Extrae procedimientos reutilizables de instantáneas de conversaciones.
Escrituras directas: Guarda un procedimiento con
save_procedure(procedure=..., description=..., content=...).
Para recuperar procedimientos, utilice discover_procedures para buscar candidatos mediante consulta o get_procedure para cargar el procedimiento completo por nombre. La memoria procedimental requiere una activación explícita en build_context, no las opciones predeterminadas semánticas y episódicas.
El siguiente ejemplo guarda un procedimiento y lo recupera:
from agentic_platform_memory import ( Memory, MemoryRequestContext, ) memory = Memory( api_key="<your-access-token>", project_id="<your-project-id>", ) chat = memory.bind( MemoryRequestContext( user_id="user_1", session_id="thread_123", ) ) chat.save_procedure( procedure="compare-flights", description="Compare flight options.", content="Rank flights by price, stops, and total travel time.", ) candidates = chat.discover_procedures("compare flights") full = chat.get_procedure("compare-flights")
Memoria taxonómica
La memoria taxonómica almacena términos de dominio y sus definiciones. Un término define el significado de una palabra dentro de un dominio, como por ejemplo, qué es un red-eye en la gestión de viajes. A diferencia de las memorias específicas de cada usuario, la memoria taxonómica es un conocimiento compartido del dominio, disponible para todos los usuarios y conversaciones de un proyecto.
El motor Atlas Agent crea memoria taxonómica mediante extracción en segundo plano y escrituras directas:
Extracción de contexto: Extrae términos y sus dominios de instantáneas de conversaciones.
Escritura directa: Guarda un término con
save_taxonomic(domain=..., term=..., definition=...).
Para recuperar un término, utilice get_taxonomic_term para buscarlo por dominio y término, o search_taxonomic para buscar términos por significado. Utilice list_domains para listar los dominios de su proyecto. La memoria taxonómica requiere una activación explícita en build_context.
El siguiente ejemplo guarda un término, lo lee y lo busca:
from agentic_platform_memory import ( Memory, MemoryRequestContext, ) memory = Memory( api_key="<your-access-token>", project_id="<your-project-id>", ) chat = memory.bind( MemoryRequestContext( user_id="user_1", session_id="thread_123", ) ) chat.save_taxonomic( domain="airline", term="red-eye", definition="An overnight flight that lands the next morning.", ) definition = chat.get_taxonomic_term("airline", "red-eye") matches = chat.search_taxonomic("overnight flight", domain="airline") domains = chat.list_domains()
Elegir un tipo de memoria
Una vez que determine que la información debe perdurar más allá de una sola conversación, seleccione un tipo de memoria a largo plazo en función de la estructura y el uso previsto de los datos.
Tipo de memoria | Qué almacena | Alcance | Pregunta clave |
|---|---|---|---|
Semántico | Hechos etiquetados persistentes | Usuario | ¿Qué sabe el agente que es verdad? |
Episódico | Historiales de interacción y resultados resumidos | Usuario | ¿Qué ocurrió en conversaciones anteriores? |
Procesal | Flujos de trabajo reutilizables paso a paso | Usuario | ¿Cómo debería el agente realizar esta tarea? |
Taxonomía | Términos y definiciones del dominio | A nivel de proyecto (compartido) | ¿Qué significa este término de dominio? |
Distinguir entre tipos
Si la información parece abarcar varias categorías, evalúe en qué punto de estos límites operativos se ubica:
Hecho versus Evento (Memoria Semántica versus Episódica): La memoria semántica almacena un estado o verdad actual, como el asiento preferido de un viajero o su aeropuerto de origen. La memoria episódica almacena la narrativa histórica de la interacción en la que se discutió o utilizó esa preferencia, como una conversación pasada sobre la reserva de un vuelo.
Conocimiento versus ejecución (semántica versus procedimental): La memoria semántica proporciona información que el agente recuerda, como los límites de equipaje permitidos. La memoria procedimental proporciona instrucciones que el agente ejecuta, como la secuencia de pasos necesarios para buscar y comparar vuelos.
Contexto del usuario frente a estándares del dominio (semántico frente a taxonómico): La memoria semántica registra detalles específicos del usuario, como el nivel de viajero frecuente. La memoria taxonómica define la terminología estándar compartida en todo el proyecto, como los criterios que definen un nivel élite o un vuelo nocturno.
Combinación de tipos de memoria
Los tipos de memoria son complementarios, no mutuamente excluyentes. Un mismo agente suele consultar varios tipos de memoria dentro del mismo flujo de trabajo. Por ejemplo, un agente de reservas de viajes podría consultar:
Memoria semántica para recordar el aeropuerto de origen del viajero, su preferencia de asiento y su número de viajero frecuente.
Memoria episódica para repasar conversaciones, itinerarios reservados y vuelos cancelados de viajes anteriores.
Memoria procedimental para ejecutar el flujo de trabajo paso a paso para comparar opciones de vuelo o volver a reservar una conexión cancelada.
Memoria taxonómica para interpretar la terminología de la industria aérea, como
open-jaw routing,layoverored-eye.
Si sus datos no se ajustan a ninguno de los cuatro tipos predefinidos, puede declarar tipos de memoria personalizados. Para obtener más información, consulte la sección «Declarar tipos de memoria personalizados» en la guía «Agregar memoria a su agente».
Configurar la extracción de memoria
La extracción en segundo plano se ejecuta para los tipos de memoria que están habilitados en el bloque memory.extraction de project-config.yaml. Para extraer un tipo de memoria, agréguelo a la lista enabled:
memory: extraction: enabled: - semantic - episodic - procedural - taxonomic
Cada tipo habilitado ejecuta su propio controlador de extracción, que destila ese tipo de memoria a partir de instantáneas de la conversación.
La lista enabled se aplica a la extracción automática en segundo plano. Su aplicación aún puede guardar cualquier tipo de memoria integrada con el SDK, incluso cuando la extracción automática para ese tipo esté desactivada.
Para habilitar el servicio de memoria y aplicar la configuración de extracción a un proyecto implementado, consulte la guía Agregar memoria a su agente.
Recuperar memoria
Su agente consulta y lee la memoria a través de dos modos de recuperación distintos: contexto ensamblado o registros sin procesar.
Contexto ensamblado: Formatea un único bloque de texto listo para mostrar a tu agente. Los métodos
build_contextybuild_context_from_sourcesconsultan los tipos de memoria seleccionados, clasifican y eliminan duplicados de las coincidencias, y ajustan los resultados a tu presupuesto de tokens.Registros sin procesar: Devuelve objetos de datos estructurados para la lógica de aplicación personalizada. Utilice
searcho los métodos de búsqueda por tipo para inspeccionar o filtrar registros en el código.
Por defecto, los constructores de contexto buscan en la memoria episódica y semántica. Para incluir la memoria a corto plazo, procedimental o taxonómica, enumere esas fuentes en enabled_sources.
El siguiente ejemplo crea contexto para una sesión de chat, incluyendo memoria procedimental:
from agentic_platform_memory import ( Memory, MemoryRequestContext, ) memory = Memory( api_key="<your-access-token>", project_id="<your-project-id>", ) chat = memory.bind( MemoryRequestContext( user_id="user_1", session_id="thread_123", ) ) context = chat.build_context( query="What is relevant to the next trip-planning task?", enabled_sources={"episodic", "semantic", "procedural"}, )
Nota
Un agente implementado en la plataforma recibe un cliente app.memory preconfigurado con su identidad ya establecida por el entorno de ejecución. Una aplicación independiente construye Memory y se vincula a sí misma con user_id y session_id.
Alcance y visibilidad de la memoria
Todos los registros de memoria están aislados al proyecto en el que se crean. Los datos nunca cruzan los límites del proyecto. Dentro de un proyecto, la plataforma controla el acceso a los registros con dos ámbitos de visibilidad:
Privado: Accesible únicamente para la identidad de usuario asociada al registro. Las memorias semánticas, episódicas y procedimentales tienen por defecto el valor
private.Org: Accesible para cualquier usuario del proyecto. La memoria taxonómica se establece por defecto en
orgporque las definiciones de dominio y la terminología están pensadas para ser compartidas en todo el proyecto.
Cuando un agente realiza una lectura o búsqueda, la plataforma restringe las lecturas al proyecto y al ámbito de usuario del solicitante, de modo que los resultados solo contienen registros que el solicitante puede leer.
Importante
Identidad de memoria de la cuenta de servicio
Cuando una cuenta de servicio invoca un agente implementado, el motor de agentes de Atlas utiliza la identidad de la propia cuenta de servicio como identidad de memoria en tiempo de ejecución. La plataforma ignora cualquier valor user_id del usuario final que proporcione la solicitud de invocación o el indicador agentengine invoke --user-id.
Las operaciones automáticas de grabación, extracción, consolidación y app.memory utilizan esta identidad resuelta. Como resultado, las invocaciones que se autentican a través de la misma cuenta de servicio comparten un ámbito de usuario de memoria.
Esta limitación se aplica únicamente a los agentes desplegados que invoca una cuenta de servicio. El servicio de memoria independiente, con ámbito de proyecto, no se ve afectado. Este servicio continúa aceptando valores explícitos de user_id y session_id del emisor.
Para aislar la memoria por usuario final, llame al servicio de memoria independiente desde su aplicación y pase los valores user_id y session_id explícitos en cada llamada. Para obtener más información, consulte la sección "Uso del servicio de memoria independiente".
Próximos pasos
Para obtener información sobre cómo habilitar la memoria para su agente,consulte Agregar memoria a su agente.
Para obtener información sobre cómo usar la memoria sin una implementación completa del agente, consulte Uso del servicio de memoria independiente.