milvus-logo
LFAI
Home
  • Integraciones
    • Agentes

Primeros pasos con Mem0 y Milvus

Open In Colab GitHub Repository

Mem0 es una capa de memoria inteligente para aplicaciones de IA, diseñada para ofrecer interacciones personalizadas y eficientes reteniendo las preferencias del usuario y adaptándose continuamente a lo largo del tiempo. Ideal para chatbots y herramientas basadas en IA, Mem0 crea experiencias fluidas y conscientes del contexto.

En este tutorial, cubriremos las operaciones esenciales de gestión de memoria de Mem0 (añadir, recuperar, actualizar, buscar, eliminar y realizar un seguimiento del historial de memoria) utilizando Milvus, una base de datos vectorial de código abierto y alto rendimiento que permite un almacenamiento y una recuperación eficientes. Esta introducción práctica le guiará a través de las operaciones de memoria básicas para ayudarle a crear interacciones de IA personalizadas con Mem0 y Milvus.

Preparación

Descarga de las bibliotecas necesarias

$ pip install mem0ai pymilvus

Si utilizas Google Colab, para habilitar las dependencias que acabas de instalar, es posible que tengas que reiniciar el tiempo de ejecución (haz clic en el menú "Tiempo de ejecución" en la parte superior de la pantalla y selecciona "Reiniciar sesión" en el menú desplegable).

Configurar Mem0 con Milvus

En este ejemplo utilizaremos OpenAI como LLM. Deberías preparar la clave api OPENAI_API_KEY como variable de entorno.

import os

os.environ["OPENAI_API_KEY"] = "sk-***********"

Ahora, podemos configurar Mem0 para utilizar Milvus como almacén de vectores

# Define Config
from mem0 import Memory

config = {
    "vector_store": {
        "provider": "milvus",
        "config": {
            "collection_name": "quickstart_mem0_with_milvus",
            "embedding_model_dims": "1536",
            "url": "./milvus.db",  # Use local vector database for demo purpose
        },
    },
    "version": "v1.1",
}

m = Memory.from_config(config)
  • Si sólo necesitas una base de datos de vectores local para datos a pequeña escala o prototipado, configurar la uri como un archivo local, por ejemplo./milvus.db, es el método más conveniente, ya que automáticamente utiliza Milvus Lite para almacenar todos los datos en este archivo.
  • Si tiene una gran escala de datos, digamos más de un millón de vectores, puede configurar un servidor Milvus más eficiente en Docker o Kubernetes. En esta configuración, por favor utilice la dirección del servidor y el puerto como su uri, por ejemplohttp://localhost:19530. Si habilita la función de autenticación en Milvus, utilice "<su_nombre_de_usuario>:<su_contraseña>" como token, de lo contrario no configure el token.
  • Si utiliza Zilliz Cloud, el servicio en la nube totalmente gestionado para Milvus, ajuste uri y token, que se corresponden con el Public Endpoint y la clave API en Zilliz Cloud.

Gestión de memorias de usuario con Mem0 y Milvus

Añadir una memoria

La función add almacena texto no estructurado en Milvus como una memoria, asociándolo con un usuario específico y metadatos opcionales.

Aquí, estamos añadiendo la memoria de Alice, "trabajando en mejorar mis habilidades de tenis", junto con metadatos relevantes para el contexto de Milvus.

# Add a memory to user: Working on improving tennis skills
res = m.add(
    messages="I am working on improving my tennis skills.",
    user_id="alice",
    metadata={"category": "hobbies"},
)

res
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab',
   'memory': 'Working on improving tennis skills',
   'event': 'ADD'}],
 'relations': []}

Actualizar una memoria

Podemos utilizar el valor de retorno de la función add para recuperar el ID de la memoria, lo que nos permite actualizar esta memoria con nueva información a través de update.

# Get memory_id
memory_id = res["results"][0]["id"]

# Update this memory with new information: Likes to play tennis on weekends
m.update(memory_id=memory_id, data="Likes to play tennis on weekends")
{'message': 'Memory updated successfully!'}

Obtener todas las memorias de un usuario

Podemos utilizar la función get_all para ver todas las memorias insertadas o filtrar por user_id en Milvus.

Observe que la memoria ha cambiado de "Trabajando para mejorar sus habilidades tenísticas" a "Le gusta jugar al tenis los fines de semana".

# Get all memory for the user Alice
m.get_all(user_id="alice")
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab',
   'memory': 'Likes to play tennis on weekends',
   'hash': '4c3bc9f87b78418f19df6407bc86e006',
   'metadata': None,
   'created_at': '2024-11-01T19:33:44.116920-07:00',
   'updated_at': '2024-11-01T19:33:47.619857-07:00',
   'user_id': 'alice'}]}

Ver el historial de actualizaciones de la memoria

También podemos ver el historial de actualización de la memoria especificando qué memory_id nos interesa a través de la función history.

m.history(memory_id=memory_id)
[{'id': '71ed3cec-5d9a-4fa6-a009-59802450c0b9',
  'memory_id': '77162018-663b-4dfa-88b1-4f029d6136ab',
  'old_memory': None,
  'new_memory': 'Working on improving tennis skills',
  'event': 'ADD',
  'created_at': '2024-11-01T19:33:44.116920-07:00',
  'updated_at': None},
 {'id': 'db2b003c-ffb7-42e4-bd8a-b9cf56a02bb9',
  'memory_id': '77162018-663b-4dfa-88b1-4f029d6136ab',
  'old_memory': 'Working on improving tennis skills',
  'new_memory': 'Likes to play tennis on weekends',
  'event': 'UPDATE',
  'created_at': '2024-11-01T19:33:44.116920-07:00',
  'updated_at': '2024-11-01T19:33:47.619857-07:00'}]

Buscar memoria

Podemos utilizar la función search para buscar la memoria más relacionada con el usuario.

Empecemos añadiendo otra memoria para Alice.

new_mem = m.add(
    "I have a linear algebra midterm exam on November 20",
    user_id="alice",
    metadata={"category": "task"},
)

Ahora, llamamos a get_all especificando el user_id para verificar que efectivamente tenemos 2 entradas de memoria para el usuario Alice.

m.get_all(user_id="alice")
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab',
   'memory': 'Likes to play tennis on weekends',
   'hash': '4c3bc9f87b78418f19df6407bc86e006',
   'metadata': None,
   'created_at': '2024-11-01T19:33:44.116920-07:00',
   'updated_at': '2024-11-01T19:33:47.619857-07:00',
   'user_id': 'alice'},
  {'id': 'aa8eaa38-74d6-4b58-8207-b881d6d93d02',
   'memory': 'Has a linear algebra midterm exam on November 20',
   'hash': '575182f46965111ca0a8279c44920ea2',
   'metadata': {'category': 'task'},
   'created_at': '2024-11-01T19:33:57.271657-07:00',
   'updated_at': None,
   'user_id': 'alice'}]}

Ahora podemos realizar search proporcionando query y user_id. Ten en cuenta que por defecto estamos utilizando la métrica L2 para la búsqueda de similitud, por lo que un score más pequeño significa mayor similitud.

m.search(query="What are Alice's hobbies", user_id="alice")
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab',
   'memory': 'Likes to play tennis on weekends',
   'hash': '4c3bc9f87b78418f19df6407bc86e006',
   'metadata': None,
   'score': 1.2807445526123047,
   'created_at': '2024-11-01T19:33:44.116920-07:00',
   'updated_at': '2024-11-01T19:33:47.619857-07:00',
   'user_id': 'alice'},
  {'id': 'aa8eaa38-74d6-4b58-8207-b881d6d93d02',
   'memory': 'Has a linear algebra midterm exam on November 20',
   'hash': '575182f46965111ca0a8279c44920ea2',
   'metadata': {'category': 'task'},
   'score': 1.728922724723816,
   'created_at': '2024-11-01T19:33:57.271657-07:00',
   'updated_at': None,
   'user_id': 'alice'}]}

Borrar memoria

También podemos delete una memoria proporcionando la correspondiente memory_id.

Eliminaremos la memoria "Le gusta jugar al tenis los fines de semana", ya que su memory_id ya ha sido recuperada, y llamaremos a get_all para verificar que la eliminación se ha realizado correctamente.

m.delete(memory_id=memory_id)

m.get_all("alice")
{'results': [{'id': 'aa8eaa38-74d6-4b58-8207-b881d6d93d02',
   'memory': 'Has a linear algebra midterm exam on November 20',
   'hash': '575182f46965111ca0a8279c44920ea2',
   'metadata': {'category': 'task'},
   'created_at': '2024-11-01T19:33:57.271657-07:00',
   'updated_at': None,
   'user_id': 'alice'}]}

Traducido porDeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

¿Fue útil esta página?