Бенчмарк памяти AI, который все цитируют, запрещает говорить «я не знаю»
Разработчик Джулио де Росси обнаружил, что популярный бенчмарк LOCOMO для оценки памяти AI-агентов систематически исключает тесты на отказ от ответа — и его собственная система, посвящённая калиброванному молчанию, набрала на этих тестах ровно ноль.
Бенчмарк памяти, на который равняется вся индустрия, не просто не измеряет способность AI сказать «я не знаю» — он явно запрещает это делать, а потом хвастается высокими баллами.
Война бенчмарков, в которой проигрывают все
В мире оценки памяти AI-агентов идёт настоящая бенчмарк-война. Mem0 в своей статье заявляет показатель J=66.88, обходя конкурента Zep с его 65.99. Zep публикует опровержение и оспаривает методологию. Mem0 отвечает новым алгоритмом с результатом 92.5 на LOCOMO и 94.4 на LongMemEval. Все ссорятся. Значит, цифры кому-то нужны.
Но обе стороны дерутся вдоль одной оси: из вопросов, на которые память может ответить, сколько она отгадала правильно?
И это, как выяснилось, лишь часть картины.
22.5% бенчмарка просто отрезали
LOCOMO — один из ключевых бенчмарков для оценки памяти AI. Он содержит пять категорий вопросов. Четыре из них — это та самая ось «правильных ответов». А пятая категория — 446 вопросов, 22.5% всего бенчмарка, которые выглядят отвечаемыми, но на самом деле не являются таковыми. В них фигурируют реальные люди и реальные темы из разговора, но спрашивается о том, чего этот человек никогда не говорил. Правильное ответ — «этого в данных нет».
И вот что обнаружил разработчик Джулио де Росси, когда полез в код тестовой оболочки Mem0:
CATEGORIES_TO_EVALUATE = [1, 2, 3, 4]
Категория 5 — все 446 контрольных вопросов — просто исключена из подсчёта. И в промпте для модели стоит инструкция:
NEVER say "not specified" … COMMIT AND ANSWER
То есть система не просто не проверяется на умение отказаться от ответа — ей прямо запрещают это делать на тех вопросах, которые остались.
Почему это не скандал, но и не норма
Автор подчёркивает: исключение пятой категории — защитимое решение, если вы измеряете только качество ответов. Отказ на отвечаемом вопросе и так даст ноль, а смешение классов портит метрику. Инструкция «всегда отвечай» снижает разброс от нерешительной модели.
Но вместе эти два решения создают рамку, в которой число на выходе структурно неспособно сказать ничего о том, как система ведёт себя, когда ответа нет. Это нормально, если все читают цифру именно так. На практике же её читают как «насколько хороша эта память».
Стек снисходительности
Когда автор копнул глубже, оказалось, что исключение категории — лишь четвёртое по интересу открытие. Судья бенчмарка (LLM-as-judge):
- считает ответ правильным, если он совпадает хотя бы с одним пунктом из списка эталонных;
- допускает ±14 дней на даты и ±50% на длительности;
- имеет инструкцию использовать доказательства только для принятия ответов, но никогда для их отклонения;
- подаёт судье до 200 воспоминаний на вопрос (примерно 7000 токенов) без лимита на извлечение.
Независимый аудит показал, что судья ошибочно принимает 62.8% заведомо неправильных ответов. Тот же аудит выяснил, что эталонные ответы LOCOMO частично повреждены, что ограничивает честно достижимый потолок примерно 93.6 баллами.
Теперь задумайтесь: опубликованный результат 92.5 — это не «почти идеально». Это на потолке бенчмарка, который сам является артефактом качества данных, произведённый судьёй, принимающим две трети заведомо неверных ответов, на 77.5% вопросов, которые были оставлены.
Автор не обвиняет никого в мошенничестве. Он утверждает, что число несёт нагрузку вывода, который оно не способно поддержать. И это верно для каждой опубликованной цифры на этом бенчмарке, включая те, которые мог бы опубликовать он сам.
Метрика, которая видит отказ
Самая интересная часть — что делать вместо этого. Наивная метрика «как часто система корректно отказывается?» (adversarial-abstain) бесполезна сама по себе: можно получить идеальную единицу, отказываясь отвечать вообще на всё. Память, которая всегда говорит «не знаю», абсолютно честна и абсолютно бесполезна.
Зеркальная метрика — «как часто система отказывается от отвечаемого вопроса» (false-abstain) — играема в другую сторону: никогда не отказывайся и получишь идеальный ноль. Что, собственно, и делает инструкция COMMIT AND ANSWER.
Ни один столбец по отдельности ничего не значит. Величина, которую нельзя сломать дегенеративной политикой — это разница:
дискриминация = adversarial-abstain − false-abstain
Отказывайся от всего: 1.00 − 1.00 = 0. Никогда не отказывайся: 0.00 − 0.00 = 0. Выше нуля можно получить, только различая два класса — а именно это и есть та способность, которую мы хотим измерить. Это та же форма, что balanced accuracy или Youden's J, и автор не претендует на изобретение — он утверждает, что никто в этой области не публикует такие цифры, хотя сделать это технически просто.
Собственный бенчмарк — и ноль
Джулио де Росси построил тестовую оболочку и прогнал через неё собственную систему памяти RE-call. Результат на всех 446 контрольных вопросах:
| Режим | Adversarial abstain ↑ | False-abstain ↓ | Дискриминация |
|---|---|---|---|
| по умолчанию | 0.000 | 0.000 | 0.000 |
Ноль из 446. Не «хуже, чем хотелось» — это ровно та оценка, которую получит система без механизма отказа вообще. Получена она системой, вся опубликованная концепция которой построена на калиброванном отказе от ответа. Автор потратил месяцы на публикации об этом. У него есть слой доверия, калиброванный порог косинусного сходства и судья-предположитель. На сложнейшем публичном экземпляре задачи они вместе сделали ровно ничего.
Черновик статьи, который пролежал в папке две недели, назывался «Один вопрос, который пропускает каждый бенчмарк AI-памяти». Но честная версия открытия — не «я нашёл пробел в индустрии». Это «я нашёл пробел в индустрии и тут же в него провалился».
Все рычаги провалились одинаково
Автор попробовал четыре режима, каждый измеренный с учётом потерь на отвечаемых вопросах (ибо система, отказывающаяся от всего, набирает 1.00 и бесполезна):
| Режим | Adversarial abstain ↑ | False-abstain ↓ | Дискриминация |
|---|---|---|---|
| по умолчанию | 0.000 | 0.000 | 0.000 |
| калиброванный (in-sample, верхняя граница) | 0.574 | 0.420 | 0.154 |
| судья-предположение | 0.347 | 0.290 | 0.057 |
| оба вместе | 0.796 | 0.603 | 0.193 |
Лучший абсолютный перехват — худший компромисс: система отказывается отвечать на 60.3% вопросов, на которые пользователи реально хотели получить ответ. Ни одну из этих строк нельзя отправить в продакшен.
Причём когда автор позже исправил два реальных бага в извлечении, дискриминация сместилась с 0.157 на 0.154 — то есть не изменилась. Оба столбца выросли вместе. Улучшение извлечения не может улучшить суждение о отвечаемости, потому что лучше найденный, по теме, но неверный пассаж получает более высокий балл релевантности, а не более низкий.
Почему это важно
Комментатор Alex Shev точно сформулировал суть: если тестовая оболочка делает отказ невозможным или невидимым, системы учатся выглядеть уверенно, а не быть полезными. Качество отказа у продуктов с памятью нужно измерять напрямую, а не считать граничным случаем, который «и так редко случается».
Стоит отметить, что индустрия движется. Mem0 в своём более новом бенчмарке BEAM уже добавил категорию на отказ от ответа. Это тот же вывод, к которому пришёл автор, — просто сделанный с другой стороны. Но до массового внедрения подобных метрик ещё далеко.
Автор приглашает всех, кто строит или оценивает агентов с retrieval-памятью, ответить на вопрос: вы измеряете, что делает ваша система, когда ответа нет в корпусе? И если да — какое число вы сообщаете? Не «галлюцинирует меньше». Число. На фиксированном наборе вопросов, которые заведомо неотвечаемы. Наряду с ценой в виде отклонённых, но отвечаемых вопросов.
Если у вас есть такие данные — это ценно. Если вы пробовали и получили тот же ноль — это ещё полезнее.
✴ Meta* — входит в перечень общественных объединений и религиозных организаций, в отношении которых судом принято вступившее в законную силу решение о ликвидации или запрете деятельности по основаниям, предусмотренным Федеральным законом от 25.07.2002 № 114-ФЗ «О противодействии экстремистской деятельности».