Mem0

Mem0 — это слой долговременной памяти для AI-агентов и LLM-приложений. Mem0 извлекает из диалогов значимые факты о пользователе, сохраняет их в виде эмбеддингов и при следующих обращениях находит релевантные воспоминания по семантическому сходству. Благодаря этому агент «помнит» предпочтения и контекст пользователя между сессиями.

Интеграция с YDB позволяет использовать YDB в качестве векторного хранилища для памяти Mem0 — без отдельной специализированной векторной базы данных. Интеграция работает поверх LangChain: Mem0 поддерживает векторные хранилища LangChain в качестве бэкенда, а YDB предоставляет совместимое хранилище через пакет langchain-ydb.

Примечание

Помимо векторного хранилища, Mem0 использует языковую модель (LLM) для извлечения фактов из диалога и эмбеддинг-модель для их векторизации. В примерах ниже используются модели OpenAI (требуется переменная окружения OPENAI_API_KEY), но подойдёт любой поддерживаемый Mem0 провайдер.

Установка

Для использования этой интеграции установите локальный YDB. Для получения дополнительной информации см. Установите и запустите YDB.

Установите Mem0 и пакет интеграции YDB с LangChain:

pip install -qU mem0ai langchain-ydb langchain-openai

Инициализация

Создайте векторное хранилище YDB средствами langchain-ydb и передайте его в конфигурацию Mem0 с провайдером langchain:

Ключ к моделям OpenAI ожидается в переменной окружения OPENAI_API_KEY — задайте её заранее в окружении или менеджере секретов.

from langchain_openai import OpenAIEmbeddings
from langchain_ydb.vectorstores import YDB, YDBSearchStrategy, YDBSettings
from mem0 import Memory

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

vector_store = YDB(
    embeddings,
    config=YDBSettings(
        host="localhost",
        port=2136,
        database="/local",
        table="mem0_memories",
        strategy=YDBSearchStrategy.COSINE_SIMILARITY,
    ),
)

memory = Memory.from_config({
    "vector_store": {
        "provider": "langchain",
        "config": {"client": vector_store},
    },
    "embedder": {
        "provider": "langchain",
        "config": {"model": embeddings},
    },
})

Сохранение фактов

Передайте Mem0 сообщения диалога — модель сама выделит из них факты и сохранит в таблицу YDB. Память разделяется между пользователями с помощью user_id:

memory.add(
    [
        {"role": "user", "content": "Привет! Меня зовут Алиса, я работаю архитектором."},
        {"role": "assistant", "content": "Рада знакомству, Алиса!"},
        {"role": "user", "content": "Предпочитаю примеры на Python."},
    ],
    user_id="alice",
)

Перед формированием ответа агент ищет релевантные воспоминания — Mem0 выполняет векторный поиск в YDB и возвращает факты, упорядоченные по сходству:

results = memory.search("На каком языке показывать примеры?", user_id="alice")
for item in results["results"]:
    print(f"{item['score']:.3f}  {item['memory']}")

Результат:

0.512  Предпочитает примеры на Python
0.231  Работает архитектором

Просмотр и удаление

Воспоминания пользователя можно получить или удалить целиком:

# все воспоминания пользователя
for item in memory.get_all(user_id="alice")["results"]:
    print(item["memory"])

# удалить все воспоминания пользователя
memory.delete_all(user_id="alice")
Предыдущая