🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
Главная
  • Интеграции
    • Агенты

Начало работы с Mem0 и Milvus

Open In Colab GitHub Repository

Mem0 - это интеллектуальный слой памяти для приложений ИИ, предназначенный для обеспечения персонализированного и эффективного взаимодействия за счет сохранения пользовательских предпочтений и непрерывной адаптации с течением времени. Идеально подходящий для чат-ботов и инструментов, управляемых искусственным интеллектом, Mem0 создает бесшовные, учитывающие контекст взаимодействия.

В этом уроке мы рассмотрим основные операции управления памятью Mem0 - добавление, извлечение, обновление, поиск, удаление и отслеживание истории памяти - с использованием Milvus, высокопроизводительной векторной базы данных с открытым исходным кодом, которая обеспечивает эффективное хранение и извлечение информации. Это практическое введение проведет вас через основные операции с памятью, чтобы помочь вам создать персонализированное взаимодействие ИИ с Mem0 и Milvus.

Подготовка

Загрузите необходимые библиотеки

$ pip install mem0ai pymilvus

Если вы используете Google Colab, для включения только что установленных зависимостей вам может потребоваться перезапустить среду выполнения (нажмите на меню "Runtime" в верхней части экрана и выберите "Restart session" из выпадающего меню).

Настройка Mem0 с помощью Milvus

В этом примере мы будем использовать OpenAI в качестве LLM. Вы должны подготовить api ключ OPENAI_API_KEY в качестве переменной окружения.

import os

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

Теперь мы можем настроить Mem0 на использование Milvus в качестве векторного хранилища.

# 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)
  • Если вам нужна локальная база данных векторов только для небольших данных или прототипирования, установка uri в качестве локального файла, например,./milvus.db, является наиболее удобным методом, так как он автоматически использует Milvus Lite для хранения всех данных в этом файле.
  • Если у вас большой объем данных, скажем, более миллиона векторов, вы можете настроить более производительный сервер Milvus на Docker или Kubernetes. В этом случае используйте адрес и порт сервера в качестве uri, например,http://localhost:19530. Если вы включили функцию аутентификации на Milvus, используйте "<ваше_имя_пользователя>:<ваш_пароль>" в качестве токена, в противном случае не задавайте токен.
  • Если вы используете Zilliz Cloud, полностью управляемый облачный сервис для Milvus, настройте uri и token, которые соответствуют публичной конечной точке и ключу API в Zilliz Cloud.

Управление пользовательскими воспоминаниями с помощью Mem0 и Milvus

Добавление памяти

Функция add сохраняет неструктурированный текст в Milvus в виде памяти, связывая его с конкретным пользователем и дополнительными метаданными.

Здесь мы добавляем в 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': []}

Обновление воспоминания

Мы можем использовать возвращаемое значение функции add для получения идентификатора памяти, что позволит нам обновить эту память новой информацией с помощью 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!'}

Получить всю память для пользователя

Мы можем использовать функцию get_all для просмотра всех вставленных воспоминаний или фильтрации по user_id в Milvus.

Обратите внимание, что память теперь изменилась с "Работает над улучшением навыков игры в теннис" на "Любит играть в теннис по выходным".

# 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'}]}

Просмотр истории обновления памяти

Мы также можем просмотреть историю обновления воспоминаний, указав интересующий нас memory_id с помощью функции 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'}]

Поиск памяти

Мы можем использовать функцию search для поиска наиболее связанного с пользователем воспоминания.

Для начала добавим еще одну память для Алисы.

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

Теперь мы вызываем get_all, указывая user_id, чтобы убедиться, что у нас действительно есть 2 записи памяти для пользователя 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'}]}

Теперь мы можем выполнить search, предоставив query и user_id. Обратите внимание, что по умолчанию мы используем метрику L2 для поиска сходства, поэтому меньшее значение score означает большее сходство.

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'}]}

Удаление памяти

Мы также можем delete память, предоставив соответствующее memory_id.

Мы удалим память "Любит играть в теннис по выходным", поскольку ее memory_id уже была получена, и вызовем get_all, чтобы убедиться, что удаление прошло успешно.

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'}]}

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?