Память агента без вызова LLM: что даёт RE-call и чего стоит Mem0

Соло-разработчик с долгоживущим агентом на своём Postgres платит за каждую записанную «память» по-разному: ноль долларов на пути записи у RE-call против $7.29 в сопоставимом бенчмарк-workload у Mem0. В разборе gde03 сопоставляет два слоя — Mem0 с дистилляцией через LLM и RE-call, который на записи никогда не вызывает модель и хранит сырые реплики. Важнее итогового балла на BEAM то, что агент читает из извлечения как достоверный контекст: у Mem0 на вопросах с отказом от ответа до 46% реплик выглядят как факты без подтверждения в корпусе.
Два пути записи памяти агента
Архитектура памяти задаёт, что попадёт в контекст модели-ответчика при следующем запросе.
Mem0 при каждой записи вызывает LLM и сохраняет дистиллированную строку — сжатый итог диалога.
RE-call (MIT, pip install recall-rag) держит сырые реплики без модели на пути записи. Postgres + pgvector, без отдельной векторной БД и без очереди.
Материал — часть 4 серии «The Answerability Problem»; сравнение на корзине BEAM в миллион токенов — том же бенчмарк-наборе с нагрузкой около миллиона токенов. BEAM здесь контур тестов и бенчмарк (категории рассуждения о времени, отказ от ответа и др.), не продукт конкурента.
Mem0: диалог → LLM при записи → дистиллированная память → извлечение
RE-call: диалог → сырые реплики в Postgres → извлечение (модель не вызывается)
Разница на выходе: точность, счёт на записи памяти, исходящий трафик данных и форма ошибки, когда подтверждения в корпусе нет.
Где Mem0 обгоняет на рассуждениях о времени
На категории рассуждения о времени — второй худший для RE-call на BEAM — Mem0 0.567 против 0.408 у RE-call. Измерение с переранжированием выключено (по умолчанию --reranker none); ячейка с переранжированием в этом сравнении не измерена.
Диагноз автора: не провал ранжирования. Пять из семи «плохо проигранных» вопросов — уверенный неправильный ответ на форму «сколько дней между A и B». RE-call держит много сырых реплик с разными датами одного события; Mem0 схлопывает в одну дистиллированную строку («Sprint 1 deadline: February 15, 2024»).
Переранжирование в проекте — крупнейший прирост качества извлечения: hit@5 0.671 → 0.777 на LOCOMO (Part 2 серии), но включение переранжировщика стоит ~1 050 ms/query и примерно 4× wall clock.
Пост-публикационная правка в тексте: первоначальное утверждение про временной слой было преувеличено — окно валидности не заполнено, эвристика «побеждает самая новая дата» проверена и отвергнута; рабочий вариант в репозитории.
Счёт на записи памяти: $0 против $7.29
На идентичном benchmark workload таблица автора выглядит так:
| RE-call | Mem0 | |
|---|---|---|
| Вызовы LLM на построение памяти | 0 | 272 |
| tokens | 0 | 2,6 M |
| cost | $0 | $7.29 |
| wall clock записи | 67 s | 288 s (~4,3× медленнее) |
| где живут документы | ваш Postgres | LLM-провайдер, раз на каждую память |
$7.29 — предельная стоимость на одну бенчмарк-память, не подписка; масштабируется с каждой записанной памятью. RE-call на пути записи: предельные $0 при любом масштабе и любой цене upstream.
Для соло-разработчика с накоплением памяти в агентном цикле это не абстрактный «облачный счёт» — каждая новая память у Mem0 структурно требует дистилляции наружу. RE-call позиционируется для offline, air-gapped и privacy-bound развёртываний: локальные embeddings, PostgreSQL, который у вас уже развёрнут, без нового субпроцессора в DPA на пути записи.
Облачный embedder — измеренная опция, не default: wins на 16 из 17 held-out corpora, median +0.059 hit@5; 246 ms p50 против 45 ms local — каждый документ и query уходит с вашей машины.
Retrieve latency 77 ms против 104 ms автор помечает как directional only (разные backends, optimistic bootstrap CI).
46% выдумок: когда память агента врёт
Категория BEAM отказ от ответа: вопросы, где корректный ответ — «в корпусе этого нет» (n = 70).
Автор оценил опубликованные ответы Mem0 с судьёй Mem0:
- отказались ответить: 38, mean score 0.974
- ответили всё равно: 32, mean score 0.016
32 из 70 ≈ 46% — доля случаев, когда система отвечает, хотя подтверждения отсутствует.
Пример выдумки: на вопрос о feedback, который не записан, Mem0 ответил про «90% satisfaction rate» — извлечение подняло спекуляцию ассистента «achieving a 90% satisfaction rate is a strong start», модель-ответчик прочитала как факт.
Published score Mem0 на BEAM автор воспроизвёл до 0.0005 (0.6414 vs 0.6409) — бенчмарк не «подогнан» под вендора; иначе 46% выдумок не всплыли.
Для агентного workflow это критично: модель-ответчик, которая читает извлечение как достоверный контекст, получает правдоподобную статистику вместо молчания. Форма сбоя у RE-call другая — не «два балла на одной шкале».
Отказ RE-call от ответа: молчание против выдумки
Политика RE-call по умолчанию: корректно отказывается 23,3% времени при 9,3% ложных отказов — на 30 unanswerable + 270 answerable questions, conversations 0–14, $0 (probe needs no LLM); reranker off; best of five tested policies (более строгие policies net worse на BEAM 9:1 mix).
Entailment abstention — off by default (Part 2 — 2 000 слов, почему не спасает hard case).
Ограничения BEAM для интерпретации:
- Unanswerable questions score выше median top-1 cosine, чем answerable (0.676 vs 0.641) — adversarial construction; фигуры BEAM = upper bound на сложность.
- Scoring mix 9:1 против withholding; abstention ~10% BEAM — aggregate не годится для abstention claims.
- Нет paired BEAM aggregate в repo — только per-category cells и abstention probe.
LOCOMO и сильная модель-читатель: когда запас сжимается
На LOCOMO — другой бенчмарк, те же вопросы/генератор/судья, отличается только память — paired McNemar, n = 1 540. Примеры ячеек:
- gpt-4o-mini / gpt-4o-mini: RE-call 0.416, Mem0 0.378, p = 0.0059
- gpt-4o-mini / gpt-4o: RE-call 0.466, Mem0 0.412, p = 0.00018
- gpt-4o / gpt-4o: RE-call 0.484, Mem0 0.444, p = 0.0065
Holm–Bonferroni across five cells holds (largest adjusted p = 0.012).
Преимущество — свойство модели-читателя; запас сжимается, как усиливается генератор; на Claude Sonnet переворачивается (0.565 vs 0.608, n = 584, post pre-registration). Абсолютные числа 0.416–0.484 — не headline 92.5 из Part 1 leniency stack.
Контур тестов BEAM фиксирует gpt-5 как модель-ответчик и судью; published 64.1 — mean rubric-nugget score, pass rate того же run 70.14%.
Когда Mem0, когда RE-call
Явная рекомендация автора:
Mem0 / дистилляция через LLM — если нужны рассуждения о времени и multi-hop на плотном материале, сильная модель-читатель, стоимость на память приемлема, исходящий трафик к провайдеру модели допустим.
RE-call — если предельная стоимость памяти должна быть нулевой, данные не могут уходить наружу, нужен offline, прозрачное и переключаемое извлечение, или выдумка хуже, чем молчание.
Для компании с закупкой разговоров с клиентами и DPA/субпроцессорами это часто решают раньше точности. Соло без отдельного продакта выбирает между «платить и слать наружу на каждую память» и «держать сырые реплики в Postgres, который уже крутится».
Стек настраивается переключателями, оба режима измерены: embedder — hashing model, bge-small, bge-large, Voyage, OpenAI-compatible across 17 corpora; переранжирование — один флаг.
Автор строит следующий бенчмарк: каждое число пересчитывается за $0, без модели в цикле, git как база данных; оспаривание — pull request; RE-call на доске с неудобным баллом; поддельная заявка как fixture (проходит пять из шести механических проверок).
Источники
- gde03 — «The memory layer that never calls an LLM: what that buys, and what it costs» (Dev.to, 30 июля 2026, ~10 мин чтения; теги ai, opensource, discuss): Dev.to
- Фигуры и воспроизводимость:
results/FINDINGS.md§9d–§9p,RESULTS.md§9–§11; установка RE-call:pip install recall-rag(MIT)