Содержание
  1. Что именно хранит Mem0 и где граница задачи
  2. Три режима: Platform, библиотека, self-hosted server
  3. Полный исходный набор и копируемый маршрут Platform
  4. Ручной эталон и результаты реального запуска
  5. Отрицательный случай и неизвестные значения
  6. Условия доступа и что проверить перед стартом
  7. Частые вопросы
  8. Материал входит в подборки
Обзоры

Mem0: память для ИИ-агента

7 ноября 2026 · 9 минут чтения

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

Что именно хранит Mem0 и где граница задачи

Документация проекта на docs.mem0.ai описывает Mem0 как слой, дающий агентам долговременную память, которая сохраняется между сессиями, инструментами и запусками. Это определение стоит разложить на три разные вещи, которые часто путают.

Первое — извлечённые факты. Когда вы отправляете в Mem0 пару сообщений, движок вытаскивает из них отдельные утверждения и сохраняет каждое своей записью. В быстром старте на docs.mem0.ai/platform/quickstart фраза про вегетарианство и аллергию на орехи превращается в две записи: «Is a vegetarian» и «Allergic to nuts». Каждая получает свой идентификатор, категорию и оценку совпадения при поиске.

Второе — история сообщений. Это сырой диалог, который вы передаёте в вызове. Он служит входом для извлечения, но сам по себе памятью не становится.

Третье — память в весах модели. Веса языковой модели не меняются от ваших вызовов. Mem0 подставляет найденные факты в контекст запроса, и модель отвечает, опираясь на них. Документация прямо говорит: передайте эти воспоминания модели как контекст, и она ответит тем, что уже знает о пользователе.

Граница задачи отсюда простая. Mem0 отвечает за извлечение, хранение и поиск фактов. За то, как приложение использует найденное, отвечает ваше приложение. Если поиск вернул пустой результат, приложение не должно дописывать догадку в ответ.

Слой Что содержит Кто управляет
Извлечённые факты Отдельные утверждения с id и категорией Mem0
История сообщений Сырой диалог, вход для извлечения Ваше приложение
Память в весах модели Отсутствует, веса не меняются Провайдер модели
Контекст запроса Найденные факты, подставленные в промпт Ваше приложение

Три режима: Platform, библиотека, self-hosted server

Документация проекта на docs.mem0.ai/open-source/overview называет open-source версию тем же движком памяти, что и Platform, но работающим на вашей инфраструктуре. README проекта на GitHub перечисляет три способа запуска и их назначение.

Библиотека подходит для тестов и прототипов. Установка — pip install mem0ai или npm install mem0ai, дальше вызов Memory(). Панели управления и ключей здесь нет.

Self-hosted server — это Docker-стек с панелью, ключами на каждого пользователя и журналом аудита запросов. Запуск через make bootstrap поднимает сервер, панель и первый ключ.

Cloud Platform — вариант без собственной инфраструктуры: регистрация на app.mem0.ai, затем встраивание слоя памяти через SDK или ключи.

Важное различие в умолчаниях. У библиотеки по умолчанию LLM — OpenAI gpt-5-mini, эмбеддинги — OpenAI text-embedding-3-small, векторное хранилище — локальный Qdrant в /tmp/qdrant, история — SQLite в ~/.mem0/history.db, реранкер отключён до настройки. У self-hosted server умолчания другие: векторное хранилище — Postgres с pgvector, а модели переопределяются переменными окружения. Эти два набора нельзя объединять в одну инструкцию: конфигурация библиотеки и сервера различается.

Критерий Библиотека Self-hosted server Cloud Platform
Для чего Тесты, прототипы Команды на своей инфраструктуре Продакшен без своей инфраструктуры
Установка pip или npm install docker compose up Регистрация на app.mem0.ai
Панель Нет Есть Есть
Ключи и авторизация Нет Есть Есть
Векторное хранилище по умолчанию Локальный Qdrant Postgres + pgvector Управляется сервисом

Полный исходный набор и копируемый маршрут Platform

Учебный пример ниже задан целиком. Пользователь A говорит: «В ответах предпочитаю русский язык. Работаю с Python». Пользователь B говорит: «В ответах предпочитаю английский. Работаю с Java». Это заданные учебные входные данные.

Маршрут Platform повторяет шаги из быстрого старта: установка, ключ, добавление, поиск. Ключ берётся из переменной окружения, в код он не вписывается.

PYTHON20 строк
import os
from mem0 import MemoryClient

client = MemoryClient(api_key=os.environ['MEM0_API_KEY'])

client.add(
    [{'role': 'user', 'content': 'В ответах предпочитаю русский язык. Работаю с Python'}],
    user_id='A',
)
client.add(
    [{'role': 'user', 'content': 'В ответах предпочитаю английский. Работаю с Java'}],
    user_id='B',
)

result = client.search(
    'Какой язык ответа и стек предпочитает пользователь?',
    filters={'user_id': 'A'},
)
memories = [item['memory'] for item in result['results']]
print(memories)

Документация проекта на docs.mem0.ai/platform/quickstart показывает тот же порядок: установить SDK, задать ключ, вызвать add с массивом сообщений и user_id, затем search с фильтром. Поиск возвращает записи, отсортированные по совпадению с вопросом, и каждая запись несёт поля user_id, agent_id, app_id, run_id, categories, metadata и score.

Поля agent_id, app_id и run_id в примере быстрого старта возвращаются пустыми. Это нормально: они заполняются, когда память привязана к агенту, приложению или конкретному запуску. Для привязки к пользователю достаточно user_id.

Ручной эталон и результаты реального запуска

Ручной эталон — это требование к результату извлечения, которое вы формулируете до запуска. Для нашего набора он выглядит так: A → язык ru, стек Python; B → язык en, стек Java. Приёмка проверяет смысл извлечённых фактов.

Заполненная матрица приёмки:

Проверка Ожидание Что означает расхождение
A / язык ru Извлечение потеряло предпочтение языка
A / стек Python Стек не попал в факты
B / язык en Факты пользователей перепутаны
B / стек Java Стек не попал в факты
A / город неизвестно Поиск вернул факт, которого не было во входе
C / язык неизвестно Поиск затронул чужую область

Последние две строки — отрицательные проверки. Проводите пилот на изолированном учебном наборе без ранее сохранённых фактов для A, B и C. Пользователь A не называл город, пользователя C в этом наборе нет. Неподтверждённое утверждение о городе отвергают и разбирают отдельно: причиной может быть ошибка извлечения или смешение данных. Результат поиска по C проверяют на нарушение заданной области.

Что в реальном запуске заранее неизвестно: точные идентификаторы записей, порядок выдачи, числовые оценки score и дословные формулировки фактов. Документация проекта показывает пример, где одна фраза даёт две записи с оценками 0.87 и 0.81, но эти числа относятся к её собственному примеру. Ваш запуск даст свои значения.

Отсюда правило приёмки: сравнивайте смысл извлечённых фактов. «ru» и «предпочитает русский язык» — одно и то же требование. А вот город у пользователя, который его не называл, — провал независимо от формулировки.

Отрицательный случай и неизвестные значения

Отрицательный случай проверяется так же строго, как положительный. Задайте вопрос о городе A и проверьте, что приложение сообщает об отсутствии сведений о городе. Поиск может вернуть другие сохранённые факты A; они не подтверждают ответ на этот вопрос. Для отсутствующего в учебном наборе пользователя C отдельно проверяют пустую область поиска.

Порядок действий:

  1. Добавьте факты для A и B, как в маршруте выше.
  2. Выполните поиск по A с вопросом про город.
  3. Проверьте возвращённые факты: подтверждения города в них быть не должно, а итоговый ответ должен оставить город неизвестным.
  4. Выполните поиск по пользователю C, которого нет в данных.
  5. Проверьте, что список результатов пуст.
  6. Убедитесь, что при пустой выдаче приложение не добавляет догадку в ответ.

Шестой шаг — самый важный и самый пропускаемый. Если поиск вернул пусто, а приложение всё равно написало «вероятно, вы из Москвы», вы обошли весь смысл слоя памяти. Пустой результат — это корректный ответ, и приложение должно его так и передать.

Отдельно про область поиска. Параметр user_id и фильтры задают, где искать, но сами по себе не являются границей доступа между арендаторами. Приложение обязано получать идентификатор пользователя из доверенного сеанса. Если клиент присылает user_id в теле запроса, он может прислать чужой.

Неизвестные значения стоит зафиксировать в матрице заранее. Точные id, порядок, score и формулировки вы не предскажете. Предсказать можно только смысл: какой факт должен найтись, а какой — нет.

Условия доступа и что проверить перед стартом

Для Platform нужен аккаунт и ключ из панели. Документация проекта на docs.mem0.ai/platform/quickstart называет предварительные требования: аккаунт Mem0 Platform, ключ API, Python 3.10+, Node.js 18+ или cURL. CLI требует Node.js 18+ либо Python 3.10+.

Отдельный путь — регистрация агента. Документация проекта на docs.mem0.ai/introduction описывает четыре терминальные команды, которые создают аккаунт и ключ без почты и панели, с возможностью заявить владение позже. README проекта приводит тот же сценарий: установка CLI, mem0 init --agent --agent-caller, добавление и поиск. Владелец-человек может позже забрать аккаунт командой с почтой, ключ и воспоминания сохраняются.

Для open-source версии аккаунт не нужен. Библиотека ставится локально, self-hosted server поднимается через Docker. У self-hosted server авторизация включена по умолчанию; при обновлении со сборки без авторизации README советует задать ADMIN_API_KEY, зарегистрировать администратора через мастер или отключить авторизацию только для локальной разработки.

Чего в источниках нет, того в инструкцию не переносим: конкретных тарифов, квот и лимитов запросов. Их стоит смотреть в панели своего аккаунта перед тем, как закладывать нагрузку.

Перед стартом проверьте по списку:

  • Ключ читается из переменной окружения, в коде и логах его нет.
  • Идентификатор пользователя приходит из доверенного сеанса.
  • Проверка неизвестного города сохраняет ответ «неизвестно», а поиск по отсутствующему пользователю C проверяет пустую область.
  • Выбор режима соответствует задаче: прототип, своя инфраструктура или продакшен без своей инфраструктуры.
  • Умолчания библиотеки и сервера не смешаны в одной конфигурации.

Частые вопросы

Что такое Mem0 простыми словами?
Это слой памяти для приложений с ИИ. Он вытаскивает отдельные факты из переписки, хранит их и возвращает по запросу. Документация проекта описывает его как память, которая сохраняется между сессиями, инструментами и запусками.

Чем Platform отличается от open-source версии?
Open-source версия — тот же движок памяти, работающий на вашей инфраструктуре. Platform — управляемый вариант без собственной инфраструктуры. Библиотека и self-hosted server различаются умолчаниями хранилища и моделей.

Как подключить Mem0 к своему агенту на Python?
Установите SDK, задайте ключ из переменной окружения, вызовите add с сообщениями и user_id, затем search с фильтром. Документация проекта показывает этот порядок в быстром старте на Python, JavaScript, cURL и в CLI.

Почему поиск возвращает пустой результат?
Пустая выдача означает, что этот поиск не вернул воспоминаний. Проверьте сохранение нужного факта и фильтр пользователя. Вопрос без подтверждённого ответа может вернуть другие факты того же пользователя; приложение должно сообщить, что запрошенное значение неизвестно.

Можно ли запустить Mem0 на своём сервере?
Да, self-hosted server — это Docker-стек с панелью, ключами на пользователя и журналом аудита. README проекта приводит запуск через make bootstrap, который поднимает сервер, панель и первый ключ. Авторизация включена по умолчанию.

Читайте также

3 материала