Содержание
  1. Текущая продуктовая поверхность и границы сравнения
  2. Матрица решений по требованиям
  3. Учебный вход, маршрут и ручной контракт
  4. Свойства источников и невыполненный пример
  5. Отрицательные случаи и неизвестные значения
  6. Чужие цифры и универсальный победитель
  7. Частые вопросы
Подборки и сравнения

Mem0 или Letta: выбор памяти и агента

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

Mem0 или Letta: выбор памяти и агента решается по уровню приложения. Mem0 Platform и OSS дают подключаемый слой памяти с вызовами add и search внутри вашего кода. Letta Code даёт готовую агентную среду с MemFS и CLI. Сначала фиксируйте, что уже написано у вас, затем сверяйте требования с матрицей.

Текущая продуктовая поверхность и границы сравнения

Документация Mem0 описывает два способа запуска OSS: библиотека внутри приложения и self-hosted сервер в Docker с дашбордом, ключами на пользователя и журналом запросов. В библиотеке по умолчанию стоят OpenAI gpt-5-mini для LLM, OpenAI text-embedding-3-small для эмбеддингов, локальный Qdrant в /tmp/qdrant и SQLite для истории. У self-hosted сервера набор другой: Postgres с pgvector вместо локального Qdrant, те же OpenAI-модели по умолчанию и переопределение через переменные окружения. Разные defaults двух режимов — первое, что стоит развести до любых выводов о локальности.

Платформенный quickstart Mem0 показывает цикл из четырёх шагов: получить ключ, установить SDK, добавить память и найти её поиском. Одна фраза про вегетарианство и аллергию на орехи превращается в две отдельные записи с событиями ADD, каждая со своим идентификатором и категорией. Поиск возвращает обе записи с оценками совпадения. Документация отдельно отмечает, что память можно отдать агенту набором инструментов через Mem0 MCP, и тогда решение о сохранении принимает сам агент.

Letta Code устроена иначе. Quickstart предлагает веб-приложение с облачной песочницей и CLI, который запускает агентов на вашем компьютере и может использовать ваши ключи и тарифы провайдеров. Установка CLI требует Node.js версии 22.19 и выше. Память агента живёт в MemFS — файловой системе с версионированием через git, которую агент просматривает и правит. Документация по конфигурации памяти описывает команды /init для инициализации, /remember для явного обучения и /doctor для аудита структуры.

Граница сравнения проходит по уровню приложения. Mem0 закрывает хранение и поиск фактов о пользователе. Letta Code предоставляет среду работы агента и ведения его памяти. Сравнивать их как замены друг друга можно только в узком сценарии, где вам нужен готовый агент целиком.

Матрица решений по требованиям

Заполненная карта требований к трём учебным проектам выглядит так.

Проект Что уже есть Что требуется Решение для пилота
Helpdesk Собственный цикл агента написан Серверные add и search для памяти пользователей, оболочка приложения неизменна Mem0 Platform или OSS по политике размещения
RepoAssistant Пользователь работает в репозитории из CLI Готовый агент с общей памятью между разговорами Текущий Letta Code с MemFS
AirGap Изолированная машина без исходящих запросов Весь текст и обработка остаются на одной машине Ни один вариант не принят автоматически

В первом проекте Letta Code не является прямой заменой двух вызовов памяти: он приносит свою среду, а менять оболочку приложения нельзя. Во втором Mem0 отдельно не предоставляет всю рабочую среду агента. В третьем наличие CLI или слова OSS не закрывает требование: для Mem0 сначала отдельно выбираются локальные LLM, эмбеддинги и хранилище, для Letta отдельно проверяются среда, модель, память и синхронизация.

Матрица отвечает на архитектурную совместимость. Вопрос о том, какой продукт точнее запоминает, она не решает и не подменяет сравнительным запуском.

Учебный вход, маршрут и ручной контракт

Ниже — условный учебный вход для пилота Helpdesk. Условные значения служат проверкой контракта приложения.

PYTHON12 строк
# Учебный вход: сопоставление пользователя и scope на доверенном сервере.
# Клиент не выбирает произвольный чужой user_id.
SCOPES = {
    ("team_red", "project_Atlas"): {"region": "EU", "launch_date": "unknown"},
    ("team_blue", "project_Atlas"): {"region": "APAC", "launch_date": "unknown"},
}

def resolve_scope(authenticated_user: str, project: str) -> dict:
    key = (authenticated_user, project)
    if key not in SCOPES:
        raise PermissionError("scope не сопоставлен авторизацией приложения")
    return SCOPES[key]

Маршрут проверки: доверенный сервер сопоставляет вошедшего пользователя и scope, затем выполняет поиск по двум серверным scope. Ручной эталон — EU только для red и APAC только для blue, дата запуска у обоих unknown. Попытка blue подменить scope на red должна быть отвергнута авторизацией приложения до вызова памяти. Сам фильтр поиска такой авторизацией не считается.

Эти требования задают проверку приложения. Они не являются выполненным тестом Mem0.

Для RepoAssistant учебный контракт короче: команда /remember с фразой о размещении проекта Atlas в EU и неизвестной дате запуска, затем /memory для проверки реально сохранённой записи, затем /new и вопрос о регионе и дате. Ручной эталон — EU и unknown. Имя файла MemFS, ответ продукта и факт успешной синхронизации здесь не задаются: если после /new ничего не сохранено, проверка не пройдена.

Свойства источников и невыполненный пример

Документация прежнего V1 SDK Letta по блокам памяти описывает их как секции контекстного окна агента, которые остаются видимыми и не требуют извлечения поиском. Блок состоит из метки, описания, значения и лимита в символах. Блоки по умолчанию доступны на чтение и запись, а поле read_only запрещает агенту их менять. Один блок можно прикрепить к нескольким агентам, и тогда все они видят его данные в своём контексте.

В документации V1 SDK установка нового значения полностью заменяет содержимое блока. Это описание legacy-механизма. При одновременной правке из нескольких процессов побеждает последняя запись, и более ранние изменения теряются. Документация предлагает три меры: ставить read-only там, где агент не должен писать, править блоки напрямую только в контролируемых сценариях и учитывать в логике приложения полную замену.

Документация Letta по конфигурации памяти описывает MemFS как файловую систему с версионированием через git и команду /doctor для аудита размещения, дублирования и расхода токенов системного промпта. Там же упомянут режим dreaming: фоновые субагенты просматривают недавние разговоры и обновляют память, не прерывая активную работу.

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

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

Три отрицательных решения из карты требований стоит держать перед глазами.

Первое отрицательное решение — попытка встроить готовую CLI-среду в существующий контракт add/search без переделки. Такая интеграция несовместима с исходным требованием. Если оболочка приложения неизменна, а память нужна двумя вызовами, среда агента сюда не встаёт.

Второй ошибочный вывод — автоматическое признание Mem0 автономным на основании локального Qdrant. Размещение LLM и эмбеддингов проверяется отдельно. Локальное хранилище векторов само по себе не означает локальный вызов модели: в defaults библиотеки Mem0 стоят OpenAI-компоненты, и их нужно заменять отдельно.

Третья ошибка — обещание изоляции пользователей Letta Code через agent_id на основании старой статьи. Такое обещание переносит legacy API на текущий продукт. Документация по блокам памяти помечена как V1 SDK (legacy), и описанные там механизмы нельзя выдавать за текущий рекомендуемый маршрут встраивания.

Неизвестные значения в учебных контрактах помечены явно: дата запуска у обоих scope — unknown. Это нормальное состояние проверки. Заполнять unknown догадкой нельзя, иначе ручной эталон перестаёт быть эталоном.

Отдельно про AirGap: ни один вариант не принят автоматически. Для Mem0 нужно отдельно выбрать локальные LLM, эмбеддинги и хранилище. Для Letta нужно отдельно проверить среду, модель, память и синхронизацию. Наличие CLI на компьютере не означает, что все данные и вызовы модели остаются локально.

Чужие цифры и универсальный победитель

Сравнительные обзоры сторонних сайтов часто приводят цены, проценты попаданий и собственные бенчмарки. Эти числа описывают методику конкретного издания и его конфигурацию. Переносить их в решение о вашем приложении нельзя: они не проверяют ваш контракт и не подтверждают поведение продукта на ваших данных.

Практический порядок работы с чужими числами такой. Сначала найдите утверждение в первичной документации продукта. Затем проверьте, относится ли оно к той поверхности, которую вы собираетесь использовать: библиотека Mem0 и self-hosted сервер имеют разные defaults, а текущий Letta Code и материалы V1 SDK описывают разные маршруты. Если утверждение относится к другой поверхности, оно не переносится.

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

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

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

Mem0 и Letta — это конкуренты или разные уровни?

Это разные уровни приложения. Mem0 Platform и OSS дают подключаемый слой памяти с вызовами add и search внутри вашего кода. Letta Code даёт готовую агентную среду с CLI и памятью в MemFS. Прямая замена возможна только там, где вам нужен агент целиком.

Можно ли использовать Mem0 с Letta вместе?

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

Что выбрать для проекта с готовым циклом агента?

Mem0 Platform или OSS по политике размещения. Серверу нужны add и search для памяти пользователей, а оболочка приложения остаётся неизменной. Letta Code приносит свою среду и в этот контракт не встаёт.

Локальный Qdrant делает Mem0 полностью автономным?

Локальное хранилище векторов закрывает только одну часть стека. В defaults библиотеки Mem0 для LLM и эмбеддингов указаны OpenAI-компоненты, и их нужно заменять отдельно. Для изолированной машины сначала выбираются локальные LLM, эмбеддинги и хранилище.

Как проверить, что память действительно сохранилась?

В учебном контракте RepoAssistant порядок такой: /remember с фразой о размещении проекта Atlas в EU и неизвестной дате запуска, затем /memory для проверки реально сохранённой записи, затем /new и вопрос о регионе и дате. Ручной эталон — EU и unknown. Если после /new ничего не сохранено, проверка не пройдена.

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

3 материала