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")