Способность 01 · помнить [ИССЛЕДОВАНИЕ · РЕЗУЛЬТАТЫ]

Память: концепция и измеренные результаты

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

Концепция

Три принципа, на которых стоит память

Слой истины не галлюцинирует Источник истины — обычные Markdown-документы под версионным контролем. В хранилище нет ни одной строчки, порождённой моделью: вся «умность» — детерминированные алгоритмы поверх. Каждая версия каждого документа сохраняется навсегда и доступна для аудита.
Знания компилируются один раз Вместо того чтобы перечитывать первоисточники на каждый вопрос, корпус один раз превращается в связанную базу знаний — и дальше агент отвечает по ней. Ссылки между документами — явные и автоматические (упоминание имени документа простым текстом само становится связью, с учётом русской морфологии).
Карантин доверия Всё новое попадает в память со статусом «на проверке»; в выдачу ассистентов идёт только подтверждённое человеком. Изменение подтверждённого документа автоматически возвращает его в карантин — подпись человека привязана к содержимому, а не к названию.

Всё работает в изолированном контуре заказчика: ни документы, ни векторы, ни запросы не покидают периметр.

Архитектура

Граница генеративности: детерминированный слой и агент

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

Слой истины git-репозиторий Markdown с вики-ссылками · человекочитаемый · версионируемый
↓ атомарная запись: git-фиксация → одна транзакция
детерминированный слой · без генеративной LLM
Реляционный индекс + граф связей документы · полнотекстовый поиск (морфология) · рёбра графа · журнал событий
Векторный слой эмбеддинги bge-m3 · pgvector · копия графа
Гибридный поиск лексический + семантический (RRF) + графовая экспансия по связям
↓ карантин доверия: на проверке → подтверждено
Агент-читатель — генерация ответа единственный генеративный компонент
Явная вики-ссылка Ghost — на отсутствующий документ Упоминание — имя в тексте (морфология)

Три типа рёбер графа строятся на момент записи, без обращения к модели: явные ссылки, «призрачные» (разрешаются автоматически, когда упоминаемый документ появляется) и упоминания по имени с учётом словоизменения.

Методология

Как мерили: два корпуса, ручной референс, четыре типа вопросов

Эталон строился вручную: для каждого вопроса ответ выверялся чтением первоисточников — референс по построению равен 100%. Вопросы четырёх типов: точные термины (идентификаторы, номера, версии), парафразы без словарных совпадений, multi-hop (ответ размазан по нескольким связанным документам) и негативные (ответа в корпусе нет). Метрики — попадание нужного документа в топ-5 выдачи и полнота: найдены ли все документы, требуемые для полного ответа.

Корпус Состав Вопросов Что проверяет
Дистиллированная база знаний 29 заметок, написанных по кодовой базе сервиса 100 Память как конспект: что теряется при сжатии знаний
Реальный корпоративный корпус 68 живых документов компании: контрагенты, договоры, процессы 50 Память как есть: документы без адаптации под поиск
Результаты

Гибрид «лексика + семантика + связи» находит 88–89% против ручного референса

89% точность на реальном корпусе (референс = 100%)
27% → 80% полнота multi-hop-вопросов после включения графа связей
секунды индексация корпуса — без вызова генеративной LLM
Режим поиска База знаний (100 вопросов) Корп-корпус (50 вопросов)
Полнотекстовый (русская морфология) 71% 78%
Семантический + граф связей 81% 80%
Гибридный протокол (всё вместе) 88% 89%
Graphiti — открытый движок графа знаний, LLM-экстракция (Qwen2.5-7B, Q4_K_M) 42% (по фактам — 67%)

Средний hit@5 по трём содержательным категориям вопросов. Сравнение с Graphiti — честное, но с оговоркой: он работал «из коробки» с локальной моделью экстракции Qwen2.5-7B-Instruct (Q4_K_M, Ollama, Apple M3 Max — условие изолированного контура), тогда как наша система — в настроенном виде. Показательна цена: его индексация того же корпуса заняла 2 часа 4 минуты и ~500 обращений к генеративной модели — почти на три порядка дольше наших ≈10 секунд и при нуле таких обращений у нас, и на связанных корпусах это не купило качества.

Масштабирование

Проверено на 3600 документах: запись ускорена в 3,7 раза, чтение не деградирует

×3,7 ускорение записи на 3600 документах после оптимизации
O(N) → O(log N) три «горячих» запроса записи переведены в индексный доступ
≈50 000 связей в графе — чтение держит латентность и качество

Чтобы проверить поведение под нагрузкой, мы загрузили открытый корпус из 3600 статей русской Википедии. Исходная реализация содержала на пути записи операции, линейные по числу связей, — из-за этого время записи документа росло с объёмом (в 5 раз при росте корпуса в 14 раз), а суммарная загрузка вела себя выражённо сверхлинейно. Анализом планов выполнения рост удалось локализовать до трёх запросов сложности O(N) и устранить стандартными средствами СУБД — индексами и переносом нормализации в SQL. После этого запись масштабируется практически линейно: рост времени записи документа сократился с 6,3× до 1,4×, а на 3600 документах полная загрузка ускорилась в 3,7 раза — при полном сохранении семантики связей (число рёбер графа совпало до единицы).

Документов Полная загрузка (до → после) Запись, мс/документ (до → после)
1000 119 с → 62 с 237 → 124
2000 359 с → 130 с 359 → 130
3600 880 с → 236 с 550 → 147

Путь чтения при этом не деградирует: полнотекстовый и векторный поиск сохраняют латентность и качество выдачи до 3600 документов и ≈50 000 связей. Мы намеренно сначала измерили деградацию на открытом корпусе, а затем устраняли её — и показываем обе кривые, а не только финальную.

Что мы поняли

Четыре вывода, которые переносимы на любую память

Лексика и семантика промахиваются на разном Точные идентификаторы надёжнее находит полнотекстовый поиск, парафразы — векторный. Порознь — 67–80%, вместе — 88–89%. Гибрид не оптимизация, а условие работоспособности.
Связи дают полноту, а не первый хит Графовая экспансия почти не меняет «нашёлся ли лучший документ», но утраивает шанс собрать все документы ответа: 27% → 80% на multi-hop-вопросах. Для вопросов, где ответ размазан по базе, граф — главный вклад.
Детерминизм дешевле экстракции На корпусах, где связи уже проставлены людьми (базы знаний, вики), автоматическое связывание по именам с учётом морфологии обходит LLM-экстракцию сущностей по качеству — при цене индексации почти на три порядка ниже и нулевом риске галлюцинаций в хранилище.
Память — ускоритель, не оракул Разрыв с референсом честный: примерно каждый четвёртый–десятый вопрос требует возврата к первоисточникам. Правильный протокол для агента: сначала память, при сомнении — источник. На вопросы без ответа в корпусе система должна отвечать «не знаю» — это зона генератора, и мы её отдельно контролируем карантином доверия.
Границы честности

Что эти цифры не доказывают

  • Вопросы и эталоны готовил один исследователь — общий словарь завышает абсолютные цифры и может влиять даже на относительный порядок режимов. Проверка на независимой разметке — впереди.
  • Измерялось качество поиска, а не конечных ответов: «нужный документ в топе» — необходимое, но не достаточное условие правильного ответа.
  • Качество измерялось на корпусах в десятки документов; масштаб проверялся отдельно — до 3600 документов и ≈50 000 связей: запись переведена в линейный режим, чтение не деградирует. Поведение на корпусах от десятков до сотен тысяч документов и мультиязычных хранилищах — следующий этап.
Статус · честный

Работает у нас, готовится к вам

Память уже работает внутри FOXOPS: агенты в разработке ПО пишут в неё выводы и достают контекст в новых сессиях; корпоративные документы компании ищутся через тот же контур. Впереди — темпоральный слой фактов («что было верно тогда»), измерение экономии токенов агентных сессий и дистрибутивная реализация для поставки в контур заказчика.