Puede integrar MongoDB con Mem0, una capa de memoria de código abierto para agentes y asistentes de IA que extrae, almacena y recupera hechos de las conversaciones a lo largo del tiempo. Cuando configure Mem0 para utilizar MongoDB como su almacén de vectores, Mem0 mantiene la memoria del agente en sus colecciones de MongoDB. Utiliza MongoDB Vector Search para la recuperación semántica y MongoDB Search para la recuperación de palabras clave de texto completo.
Empezar
Para completar un tutorial que configura Mem0 para usar MongoDB, consulta Introducción a la integración de MongoDB Mem0.
Instalación
Mem0 requiere Python v3.10 o posterior y PyMongo v4.13.2 o posterior. Para instalar las últimas versiones de Mem0 y PyMongo, ejecute el siguiente comando:
pip install mem0ai pymongo
Uso
Para usar MongoDB como almacén de vectores Mem0, pase un diccionario de configuración a Memory.from_config() que establezca la clave provider del diccionario vector_store en mongodb.
Seleccione la pestaña Basic initialization para ver un ejemplo básico de configuración de MongoDB y Mem0, o seleccione la pestaña Custom configuration para ver cómo configurar la integración con configuraciones personalizadas.
Para inicializar el almacén de vectores, especifique su cadena de conexión de MongoDB, el nombre de la base de datos, el nombre de la colección y el número de dimensiones que produce su modelo de incrustación. El siguiente ejemplo establece estas claves en el diccionario vector_store.config:
import os from mem0 import Memory config = { "vector_store": { "provider": "mongodb", "config": { "mongo_uri": os.environ["MONGODB_URI"], "db_name": "mem0_db", "collection_name": "agent_memory", "embedding_model_dims": 1536, }, } } m = Memory.from_config(config)
El diccionario de configuración también acepta las claves llm y embedder, que puede utilizar para reemplazar los modelos de OpenAI por defecto con cualquier proveedor compatible con Mem0. En el siguiente ejemplo se establecen estas claves opcionales:
import os from mem0 import Memory config = { "llm": { "provider": "openai", "config": { "model": "gpt-4o-mini", "temperature": 0.1, "max_tokens": 2000, }, }, "embedder": { "provider": "openai", "config": { "model": "text-embedding-3-small", "embedding_dims": 1536, }, }, "vector_store": { "provider": "mongodb", "config": { "mongo_uri": os.environ["MONGODB_URI"], "db_name": "mem0_db", "collection_name": "agent_memory", "embedding_model_dims": 1536, }, }, "history_db_path": os.path.expanduser("~/.mem0/history.db"), } m = Memory.from_config(config)
El valor de la clave embedding_model_dims en el diccionario vector_store.config debe coincidir con el número de dimensiones que produce el incrustador configurado.
Cuando llama por primera vez al método Memory.from_config(), Mem0 crea la colección de destino si aún no existe y crea un índice de búsqueda vectorial de MongoDB y un índice de MongoDB Search en la colección. Debido a que estos índices se compilan de forma asíncrona, las búsquedas pueden devolver resultados vacíos hasta que finalice la creación de índices.
Cuando establece la clave provider en mongodb, Mem0 lee su configuración de MongoDB del diccionario config anidado dentro del diccionario vector_store. Ese diccionario acepta las siguientes claves. Cada clave es opcional y recurre al valor por defecto especificado, pero debe establecer mongo_uri para conectarse a cualquier implementación que no sea local.
Clave | Necesidad | Descripción |
|---|---|---|
| Opcional | La cadena de conexión para la implementación de MongoDB. Se establece en |
| Opcional | El nombre de la base de datos que contiene la colección de memoria. Se establece en |
| Opcional | El nombre de la colección que almacena documentos de memoria. Se establece en |
| Opcional | El número de dimensiones en los vectores de incrustación. Se establece en |
Métodos
Esta sección describe los métodos proporcionados por la clase Memory. Cada método opera en la colección que configuras en el diccionario vector_store.config.
Para limitar un método a un usuario, agente o ejecución de conversación específico, pasa un diccionario filters que contenga al menos una de las claves user_id, agent_id o run_id.
add()
El método add() extrae hechos de una conversación y los guarda en tu colección como documentos de memoria. Si ya existe una memoria semánticamente equivalente para la entidad, Mem0 actualiza esa memoria en lugar de crear un documento duplicado.
El siguiente ejemplo pasa una conversación al método add() y limita la memoria resultante a un usuario específico:
messages = [ {"role": "user", "content": "I'm moving to Berlin next month."}, {"role": "assistant", "content": "I'll remember that you're relocating to Berlin."}, ] result = m.add(messages, user_id="alice") print(result)
Parameter | Necesidad | Descripción |
|---|---|---|
| Requerido | La conversación se centra en extraer hechos de, ya sea como una lista de diccionarios |
| Condicional | Un identificador para el usuario al que pertenece la memoria. Debe proporcionar al menos una de las claves |
| Condicional | Un identificador para el agente al que pertenece la memoria. Obligatorio si no proporcionas un valor |
| Condicional | Un identificador para una ejecución o sesión de conversación específica. Obligatorio si no proporcionas un valor |
| Opcional | Los pares clave-valor para adjuntar a cada documento de memoria que esta llamada guarda. Puede consultar estos valores mediante el parámetro |
| Opcional | La fecha después de la cual Mem0 excluye la memoria de los resultados. |
| Opcional | Si Mem0 utiliza el LLM para extraer hechos discretos antes de almacenarlos. Por defecto, |
| Opcional | El tipo de memoria que se va a almacenar. |
| Opcional | Una solicitud de extracción personalizada que anula la plantilla de extracción de hechos por defecto. |
get()
El método get() recupera un único documento de memoria por su valor de ID sin ejecutar una búsqueda vectorial.
El siguiente ejemplo recupera una memoria directamente por su ID:
memory = m.get(memory_id="<memory-id>") print(memory)
El parámetro memory_id es obligatorio y acepta el valor id del documento de memoria que se va a recuperar. Si no existe ninguna memoria con ese ID, el método get() devuelve None.
buscar()
El método search() ejecuta una búsqueda semántica en el índice de búsqueda vectorial de MongoDB y devuelve las memorias más relevantes para un string del query.
El siguiente ejemplo busca en los recuerdos de un usuario específico los cinco resultados más relevantes:
results = m.search( query="Where does Alice live?", filters={"user_id": "alice"}, top_k=5, ) for mem in results["results"]: print(mem["memory"], "- score:", mem["score"])
Parameter | Necesidad | Descripción |
|---|---|---|
| Requerido | La query en lenguaje natural que Mem0 utiliza para generar la incrustación de búsqueda. |
| Opcional | Las condiciones de filtro que se aplicarán junto con la query semántica. Debe contener al menos una de las claves |
| Opcional | El número máximo de resultados a devolver. Se establece por defecto en |
| Opcional | La puntuación mínima de relevancia que una memoria debe cumplir para aparecer en los resultados. Se establece por defecto en |
| Opcional | Si Mem0 vuelve a clasificar los resultados antes de devolverlos. El valor por defecto es |
| Opcional | Si se debe incluir un desglose de |
| Opcional | La fecha que Mem0 utiliza para resolver expresiones de tiempo relativas en la query. |
| Opcional | Si se deben incluir memorias cuyo |
obtener_todos()
El método get_all() devuelve los documentos de memoria almacenados para una entidad determinada sin ejecutar una búsqueda semántica. Utilice este método para mostrar el historial completo de memoria de una entidad.
El siguiente ejemplo devuelve e imprime todos los recuerdos de un usuario específico:
all_memories = m.get_all(filters={"user_id": "alice"}) for mem in all_memories["results"]: print(mem["id"], mem["memory"])
Parameter | Necesidad | Descripción |
|---|---|---|
| Opcional | Las condiciones de filtro que identifican las memorias que se van a devolver. Debe contener al menos uno de |
| Opcional | El número máximo de documentos para devolver. Se establece por defecto en |
| Opcional | Si se deben incluir memorias cuyo |
update()
El método update() reemplaza el texto de un documento de memoria existente. Mem0 vuelve a calcular la incrustación a partir del nuevo texto y actualiza el documento en su lugar.
El siguiente ejemplo reemplaza el texto de una memoria existente:
m.update(memory_id="<memory-id>", text="Alice relocated to Berlin in July 2025.")
Parameter | Necesidad | Descripción |
|---|---|---|
| Requerido | El valor |
| Opcional | El texto de reemplazo para la memoria. Mem0 calcula y almacena una nueva incrustación para este texto. |
| Opcional | Los metadatos de reemplazo para el documento de memoria. |
| Opcional | La fecha después de la cual Mem0 excluye la memoria de los resultados. |
borrar()
El método delete() borra un único documento de memoria de su colección.
El siguiente ejemplo elimina una memoria por su ID:
m.delete(memory_id="<memory-id>")
El parámetro memory_id es obligatorio y acepta el valor id del documento de memoria que se va a borrar.
delete_all()
El método delete_all() borra todos los documentos de memoria para una entidad determinada de tu colección.
El siguiente ejemplo borra todas las memorias de un usuario específico:
m.delete_all(user_id="alice")
Parameter | Necesidad | Descripción |
|---|---|---|
| Opcional | Borra todas las memorias de este usuario. Debe proporcionar al menos uno de |
| Opcional | Borra todas las memorias de este agente. |
| Opcional | Borra todas las memorias para esta ejecutar o sesión. |
history()
El método history() devuelve el historial de ediciones de una sola memoria, incluida cada versión del texto y el tipo de evento. Mem0 almacena este historial en una base de datos SQLite local en lugar de en MongoDB. Para cambiar dónde Mem0 guarda esa base de datos, establezca la clave history_db_path en su diccionario de configuración.
El siguiente ejemplo recupera e imprime el historial de ediciones de una memoria:
history = m.history(memory_id="<memory-id>") for entry in history: print(entry["event"], entry["old_memory"], entry["new_memory"])
El parámetro memory_id es obligatorio y acepta el valor id del documento de memoria cuyo historial desea recuperar.
restablecer()
El método reset() realiza las siguientes acciones:
Borra su colección de MongoDB y sus índices de MongoDB búsqueda vectorial y MongoDB Search
Restablece la base de datos del historial local
Vuelve a crear la colección y sus índices desde cero
Utilice este método para borrar todas las memorias en lugar de utilizar el método delete_all() para eliminarlas una entidad a la vez.
m.reset()
reset() no acepta ningún parámetro y borra toda la memoria que Mem0 ha almacenado a través de esta instancia Memory.
close()
El método close() libera la conexión local de SQLite que Mem0 utiliza para la base de datos del historial. Este método no afecta a su conexión de MongoDB.
m.close()
close() no acepta ningún parámetro. Mem0 lo llama automáticamente si utiliza la instancia Memory como administrador de contexto.
índice de búsqueda
Mem0 crea los siguientes índices en tu colección la primera vez que se conecta. También puedes crear o inspeccionar estos índices manualmente. Para obtener más información, consulte Cree un índice de MongoDB búsqueda vectorial.
El índice de búsqueda vectorial de MongoDB se denomina <collectionName>_vector_index, donde <collectionName> es el nombre de la colección que almacena documentos de memoria. El índice utiliza la siguiente definición:
{ "fields": [ { "type": "vector", "path": "embedding", "numDimensions": 1536, "similarity": "cosine" } ] }
El índice de búsqueda de MongoDB se denomina <collection-name>_text_search_index y utiliza la siguiente definición:
{ "mappings": { "dynamic": false, "fields": { "payload": { "type": "document", "fields": { "data": { "type": "string" }, "text_lemmatized": { "type": "string" } } } } } }
Mem0 utiliza el índice de búsqueda de MongoDB Search para ejecutar búsquedas por palabras clave que complementan los resultados semánticos de search(). Si el índice no existe, Mem0 registra una advertencia y devuelve solo resultados semánticos.
Recursos adicionales
Para obtener más información sobre cómo usar Mem0 con MongoDB, consulte: