SelfImprint: производственно-ориентированная каузальная память для диалоговых ИИ-агентов

Last updated: 2026-05-17Дизайн-документ SelfImprint — архитектуры долговременной памяти с типизированными каузальными связями, фазой рассуждения во сне и типоспецифичным затуханием для ИИ-ассистентов.

SelfImprint: производственно-ориентированная каузальная память для диалоговых ИИ-агентов

Технический препринт v0.2 — дизайн-документ

APERTURESyndicate OÜ, Таллинн, Эстония Май 2026


Статус. Это дизайн-документ. Он описывает архитектуру SelfImprint — системы памяти, предназначенной для персонализированных ИИ-ассистентов. Эмпирическая оценка на устоявшихся бенчмарках долговременной памяти запланирована как отдельная работа (Фаза 2). Числовые параметры по всему документу — это отправные точки, взятые из литературы по когнитивистике; в продакшене их потребуется перекалибровать на реальных пользовательских данных.


Аннотация

Большинство систем памяти для LLM-агентов сегодня делятся на два лагеря. Плоские хранилища фактов (Mem0, MemGPT/Letta) извлекают информацию по семантическому сходству, но рассматривают каждый факт как изолированную единицу. Подходы на основе графов знаний (Zep, GraphRAG) фиксируют некоторую структуру, но графы строятся пассивно из входных данных и не рассуждают о самих себе. У обоих лагерей три общих слепых пятна: они не моделируют каузальность между событиями, не думают о пользователе между сессиями и не забывают осмысленно.

SelfImprint выбирает другой подход. Граф использует пять типизированных каузальных связей, а не общие семантические ссылки. Веса узлов затухают экспоненциально с типоспецифичной скоростью, поэтому мимолётное раздражение исчезает за дни, а важное жизненное событие остаётся на месяцы. Между сессиями выделенный процесс рассуждения — фаза сна — сопоставляет паттерны по всему графу, выводит новые связи, формирует гипотезы и перекалибровывает важность. Гипотезы — это полноценные объекты с явными циклами обратной связи: они подтверждаются, опровергаются или архивируются как неразрешённые в пределах ограниченного срока жизни. Отдельный анонимизированный слой — CollectiveImprint — фиксирует наблюдения модели о собственных сбоях, защищённые адаптивной k-анонимностью.

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


1. Введение

1.1. Проблема

У базовых LLM-ассистентов нет постоянной памяти. Каждый разговор начинается с чистого листа. Пользователь заново устанавливает контекст, модель отвечает, сессия заканчивается, и в следующий раз всё забыто.

Индустрия латает эту проблему с 2024 года. OpenAI добавила Memory в ChatGPT. Anthropic выпустила Projects. Google добавила Recall в Gemini. Опенсорс- сообщество выпустило Mem0, MemGPT/Letta, Zep, LangMem, MemoryBank, A-MEM, Cognee и другие. Прогресс реален. Но три проблемы остаются упрямыми, и они особенно заметны на длинных временных горизонтах.

Отсутствует каузальность. Существующие системы могут сказать вам, что сказал пользователь. Им трудно сказать, почему это важно. Вопрос «почему пользователь сейчас в плохом настроении?» требует пройти по цепочке: событие вызвало чувство, чувство сформировало последующее поведение, поведение проявляется в текущем сообщении. Плоское извлечение достаёт последний узел и упускает цепочку. Нетипизированные графы вытягивают клубок ассоциаций и не могут определить, какие связи несут каузальный вес.

Между сессиями ничего не происходит. Память в текущих системах пассивна. Данные поступают, индексируются, выдаются по запросу. Между пользовательскими сессиями система не думает. Она не спрашивает, почему пользователь замолчал после какой-то темы три недели назад. Не замечает, что два, казалось бы, несвязанных упоминания на самом деле объединены одной нитью. Не формирует рабочие гипотезы, чтобы проверить их в следующем взаимодействии. Работы в духе рефлексии существуют в литературе об агентах (Reflexion, Generative Agents), но они не были интегрированы в производственные слои памяти.

Забывание либо отсутствует, либо наивно. Большинство систем либо хранят всё вечно, либо применяют равномерное затухание. Человеческая память устроена иначе. Травматичный момент у одних быстро тускнеет, у других держится долго; мелочи затухают стабильно; значимое событие десятилетней давности всё ещё может ощущаться близким. Текущие системы памяти ИИ этого не моделируют. Они либо помнят всё (и тонут в шуме), либо забывают по фиксированному расписанию (и теряют нюансы).

1.2. Что делает SelfImprint

SelfImprint напрямую закрывает эти три пробела. Ключевые особенности:

Каузальный граф знаний с пятью типизированными связями: caused_by (вызвано), followed_by (следует за), reinforces (усиливает), contradicts (противоречит), associated_with (ассоциировано с). Типизированные связи — не украшение; они позволяют фазе сна рассуждать над структурой графа, а не пробираться через неструктурированный текст.

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

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

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

CollectiveImprint — анонимизированный операционный слой. Паттерны, которые модель замечает в собственных сбоях, агрегируются между пользователями — но только когда как минимум k = max(10, 0.1% активных пользователей) разных пользователей демонстрируют один и тот же паттерн. Это операционное обучение без ущерба для приватности отдельного человека.

Реалии эксплуатации заложены изначально. Уровни горячего/тёплого/холодного хранения — потому что не каждый пользователь активен каждый день. Адаптивное планирование сна, привязанное к классу подписки и уровню активности. Оптимизация умного пропуска для тривиальных сессий, где нет ничего значимого для осмысления. Явная политика вывода, называющая то, что система никогда не станет выводить о пользователе, независимо от того, что позволяют данные.

1.3. Что действительно ново

Ни одна из отдельных идей сама по себе не нова. Графы знаний восходят к символьному ИИ 1970-х. Эббингауз описал кривую забывания в 1885 году. Сети памяти изучаются в нейронных системах с 2015 года. Reflexion и Generative Agents уже исследовали офлайн-циклы рефлексии.

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


2. Смежные работы

Область систем памяти для LLM-агентов заметно переполнилась с 2023 года. Вот как SelfImprint соотносится с основными направлениями работы.

MemGPT / Letta (Packer et al., 2023) представили память как задачу операционных систем. Три уровня — основной контекст (рабочий набор), хранилище отзыва (недавнее), архивное хранилище (глубокая история) — с явным перемещением между ними. Аналогия с ОС полезна, инженерия крепкая. Чего MemGPT не делает — не рассуждает о связях между фактами и не думает между сессиями. Его память — это хорошо организованный картотечный шкаф, а не граф.

Mem0 (Chhikara et al., 2024) идёт более простым путём: LLM извлекает факты из диалога, хранит их как структурированные записи, извлекает по сходству. Реализация чистая, API приятный. Как архитектура — это организованный RAG. Каузальной структуры нет, офлайн-анализа нет.

Zep и GraphRAG (Edge et al., Microsoft 2024) — ближайшие соседи. GraphRAG строит графы знаний из текста и использует обход графа при извлечении. Структурный подход верен, и он действительно превосходит плоское извлечение на вопросах, выигрывающих от объединения информации из разных документов. Но граф строится пассивно. Нет временного затухания, настроенного под тип факта, нет эмоционального взвешивания, нет офлайн-процесса рефлексии, нет гипотез как именованных сущностей. Граф — это снимок, а не развивающаяся модель.

MemoryBank (Zhong et al., 2024) ввела кривые забывания в память LLM — реальный вклад. Ограничение — единообразие: одна скорость затухания для всей памяти, нет графа, нет эмоционального измерения.

A-MEM исследовала автономное управление памятью, где LLM сама обновляет своё хранилище памяти. Это концептуально близко к рассуждению фазы сна, но работает без типизации структуры и жизненного цикла гипотез.

Cognee располагается больше на стороне инфраструктуры: опенсорс-фреймворк, объединяющий векторное, графовое и реляционное хранилище. Хорошая сантехника, но без предложения отдельной модели рассуждения.

Reflexion (Shinn et al., 2023) и Generative Agents (Park et al., 2023) происходят со стороны рассуждения агентов, а не архитектуры памяти. Ежедневный цикл рефлексии Парка для NPC в симулированном городе, насколько нам известно, — ближайший опубликованный предшественник фазы сна. SelfImprint расширяет это направление ограничениями эксплуатации, интеграцией с типизированным каузальным графом и явным управлением жизненным циклом гипотез.

2.1. Место SelfImprint

СвойствоMemGPT/LettaMem0Zep/GraphRAGMemoryBankA-MEMSelfImprint
Форма храненияМногоуровневаяПлоский списокГраф знанийСписок с затуханиемБанк памятиКаузальный граф
Типизированные каузальные связиНетНетЧастичноНетНетДа (5 типов)
Активное рассуждение между сессиямиНетНетНетНетЧастичноДа (фаза сна)
Типоспецифичное затуханиеНетНетНетЕдинообразноеНетДа
Эмоциональное взвешиваниеНетНетНетЧастичноНетДа
Гипотезы как сущностиНетНетНетНетНетДа
Цикл обратной связи гипотезНетНетНетНетНетДа
Слой CollectiveImprintНетНетНетНетНетДа
Адаптивное планированиеНетНетНетНетНетДа
Иерархия уровней храненияКонцептуальноНетНетНетНетДа
Явная политика выводаНетНетНетНетНетДа

Утверждение не в том, что какая-то отдельная строка уникальна в академическом смысле. Утверждение в том, что колонка в сумме даёт систему другого рода — ту, что спроектирована реально работать, а не просто публиковаться.


3. Архитектура

3.1. Поток данных

Когда пользователь отправляет сообщение:

  1. Эмбеддинг сообщения через bge-m3 (1024 измерения, мультиязычный).
  2. Многокритериальное извлечение по графу пользователя. Параллельно — поиск релевантных операционных подсказок в CollectiveImprint.
  3. Расширение извлечённых узлов на один шаг по их связям для захвата контекста.
  4. Сжатие получившегося подграфа в резюме на 400 токенов с помощью ASAI-mini Memory 9B.
  5. Передача резюме в основную модель как контекста для генерации ответа.

Когда пользователь прекращает отвечать и проходит достаточно времени, система входит в фазу сна: сначала проверяется, есть ли вообще о чём рассуждать, и если да — запускаются шесть аналитических операций, описанных в §3.5. Раз в неделю проходит периодическая уплотняющая обработка графа. Паттерны сбоев модели, замеченные у многих пользователей, вносят вклад в CollectiveImprint с учётом порога k-анонимности.

3.2. Граф

Типы узлов. Шесть классов:

  • fact (факт) — устойчивое утверждение о пользователе (имя, работа, местоположение, предпочтения).
  • event (событие) — то, что произошло в конкретный момент времени (упомянутое собеседование, переезд, разговор с кем-то).
  • emotional_note (эмоциональная заметка) — эмоциональная окраска взаимодействия, делится на позитивную и негативную.
  • person (человек) — кто-то из окружения пользователя.
  • open_loop (открытый вопрос) — тема, которую пользователь поднял, но не закрыл.
  • hypothesis (гипотеза) — узел, порождённый фазой сна, несущий is_inference: true.

Все узлы атомарны. Сложные сущности — «пользователь хочет работу в Google» — живут как единый узел с атрибутами, а не как подграф. Это упрощение важно: атомарность узлов делает обход дешёвым, а схему — читаемой.

Типы связей. Пять типизированных отношений:

  • caused_by — A произошло из-за B. Прямая каузальность.
  • followed_by — A случилось после B без заявленной каузальности.
  • reinforces — A усиливает важность B.
  • contradicts — A конфликтует с B.
  • associated_with — общая семантическая ассоциация, используется, когда ничего более конкретного не подходит.

Типизация связей — ключевое архитектурное решение. Фаза сна хочет задавать вопросы вроде «найти все цепочки caused_by длиннее трёх шагов» — это выполнимо на типизированном графе и невыполнимо на графе свободнотекстовых отношений.

Атрибуты узла: id, type, content (текст), embedding (1024 измерения), weight ∈ [0,1], created_at, last_reinforced_at, is_inference, is_pinned, decay_coefficient.

Атрибуты связи: from_node_id, to_node_id, type, confidence ∈ [0,1], is_inferred, created_at.

3.3. Затухание

Забывание моделируется как экспоненциальное затухание с типоспецифичными коэффициентами:

weight(t + 1 day) = weight(t) × decay_coefficient(type)

Ежедневно каждый незакреплённый узел теряет часть веса. Узлы, упавшие ниже 0.05, удаляются из активного графа (и могут архивироваться для возможного восстановления).

Начальные коэффициенты:

Тип узлаКоэффициент / деньВремя от 1.0 до удаления
emotional_note (негативная)0.5~4–5 дней
emotional_note (позитивная)0.85~18 дней
fact (обычный)0.92~36 дней
event (обычное)0.95~58 дней
event (значимое)0.98~148 дней
person0.97~98 дней
open_loop0.99~298 дней
pinned (любой тип)1.00никогда

Кривые экспоненциального затухания по типам узлов; пунктирная линия отмечает порог удаления 0.05 из §3.3
Кривые экспоненциального затухания по типам узлов; пунктирная линия отмечает порог удаления 0.05 из §3.3

Значения — смесь интуиции и литературы по когнитивистике о дифференциальных скоростях забывания (Tulving, 1972; Conway, 2005). Это не законы. В продакшене их нужно будет калибровать, и калибровка, вероятно, будет различаться между пользовательскими популяциями и сценариями использования.

Событие считается значимым, если в момент создания LLM-экстрактор присваивает ему оценку важности выше 0.8. Этот порог — ещё один гиперпараметр, и промпт, формирующий оценку, потребует тщательной калибровки в продакшене.

Когда узел упоминается снова, его вес растёт аддитивно, а не сбрасывается до 1.0:

weight = min(weight + 0.15, 1.0)

Это предотвращает игры на накопление — пользователь (или злоумышленник) не может накачать узел до максимальной важности, просто повторяя фразу. Но действительно повторяющиеся темы будут расти.

3.4. Сборка контекста

Основная модель никогда не видит граф. Она видит резюме на 400 токенов. Путь от графа к резюме — четырёхшаговый процесс.

Сборка контекста: взвешенное извлечение top-K, расширение по соседям и сжатие до 400 токенов для основной модели
Сборка контекста: взвешенное извлечение top-K, расширение по соседям и сжатие до 400 токенов для основной модели

Сначала — эмбеддинг текущего сообщения пользователя. Затем — извлечение top-K (K=20) узлов по взвешенной оценке: 0.5 × семантическое сходство + 0.2 × недавность + 0.3 × нормализованный вес. Параллельно — запрос к CollectiveImprint на предмет операционных подсказок, релевантных этому типу запроса (§3.7). Далее — расширение: для каждого извлечённого узла добавляются его прямые соседи независимо от типа связи. Именно это превращает изолированные факты в контекст. Без расширения вы знаете, что пользователь упомянул собеседование; с расширением вы знаете, что за собеседованием последовало раздражение, вызванное недостаточной подготовкой. Наконец — сжатие: расширенный подграф, обычно 30–60 узлов, сжимается до 400 токенов моделью ASAI-mini Memory 9B с явной инструкцией отдавать приоритет узлам с высоким весом, сохранять каузальные цепочки нетронутыми и выводить на поверхность всё, напрямую относящееся к текущему сообщению.

Результат — свободная проза на языке пользователя, а не структурированные данные. Основная модель получает её вместе с системной инструкцией: используй это, чтобы формировать ответ, но не цитируй. Пользователь должен ощущать себя запомненным, а не занесённым в картотеку. Эта последняя деталь важнее, чем кажется. Подайте модели сырую структурированную память — «user.name: X, user.job: Y» — и она выдаст ответы, читающиеся как запросы к базе данных. Подайте прозу с указанием не цитировать — и она органично встроит контекст.

3.5. Фаза сна

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

Модель. Фаза сна работает на ASAI-mini Memory 9B, а не на основной модели ассистента. Работа — это структурированное рассуждение над графом, а не творческая генерация; меньшая модель справляется с этим хорошо, и экономия на стоимости имеет значение, когда фаза сна запускается сотни раз в месяц на каждого активного пользователя.

Триггеры. Фаза сна требует одновременного выполнения двух условий: с последнего сообщения пользователя прошло не менее 30 минут, и либо локальное время — 3:00 ночи (глубокий ежедневный проход), либо с последней фазы сна прошло более 6 часов (регулярный проход для активных пользователей). Если пользователь начинает печатать во время фазы сна, текущая итерация прерывается или приостанавливается. Фаза сна никогда не прерывает активную сессию.

3.5.1. Шесть операций

По порядку:

Обнаружение паттернов сканирует узлы и активность за последние семь дней. Ищет темы, упомянутые три или более раз за неделю, корреляции между темами и временем суток или днём недели, тренды в эмоциональных заметках. Результат — структурированный список паттернов, который потребляют следующие операции.

Вывод связей использует эти паттерны, чтобы добавлять связи между ранее не связанными узлами. Если обнаружение паттернов находит, что упоминания стресса и упоминания конкретного коллеги склонны совпадать, вывод связей добавляет связь caused_by с уверенностью, отражающей силу корреляции. Новые связи несут is_inferred: true и начинаются с умеренной уверенности (0.4–0.6).

Формирование гипотез генерирует новые узлы типа hypothesis, тоже помеченные is_inference: true. Гипотеза — это утверждение, которое не наблюдалось напрямую, но следует из накопленной структуры — например, «возможно, пользователь испытывает выгорание». Эти узлы попадают в граф, но получают заниженный вес при сборке контекста.

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

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

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

3.5.2. Жизненный цикл гипотезы

Гипотезы живут не вечно. Каждая несёт временную метку создания, тайм-аут по умолчанию в 14 дней, список подтверждающих наблюдений и список опровергающих наблюдений.

На каждой фазе сна активные гипотезы проверяются:

  • Если подтверждающие свидетельства превышают опровергающие в 2 раза и общее количество свидетельств проходит порог, гипотеза превращается в наблюдаемый факт (is_inference: false).
  • Если опровергающие свидетельства превышают подтверждающие в 2 раза, гипотеза удаляется.
  • Если истекает 14-дневный тайм-аут без разрешения, гипотеза архивируется как неразрешённая — сохраняется для истории, но больше не используется в контексте.

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

3.6. Адаптивное планирование сна

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

Политика планирования по умолчанию привязана к подписке и активности:

Уровень пользователяЧастота снаГлубина
Платный, очень активный (5+ сообщений/день)ЕжедневноПолная
Платный, обычный (1–5/день)Раз в 2 дняПолная
Платный, лёгкий (1–7/неделю)ЕженедельноЛёгкая
Платный, спящий (1–4/месяц)ЕжемесячноЛёгкая
Бесплатный, активныйРаз в 3–7 днейПолная
Бесплатный, обычныйЕженедельноЛёгкая
Бесплатный, лёгкийРаз в две неделиЛёгкая
Любой, неактивен 30+ днейОтключено

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

Умный пропуск. Перед запуском полной фазы сна ASAI-mini Memory 9B делает дешёвую предпроверку — один вызов LLM, чтобы оценить, есть ли вообще о чём рассуждать. Предпроверка спрашивает: сколько новых сообщений с последнего сна, несут ли они эмоциональный сигнал, упоминают ли значимые события или открытые вопросы, есть ли что-то похожее на противоречие с существующими узлами? Если ответ — «ничего значимого», система пишет резюме в одно предложение и пропускает полный конвейер. Это экономит немало вычислений на пользователях, чьи недавние сессии состояли из пары технических вопросов и прощания.

Вместе адаптивное планирование и умный пропуск снижают стоимость фазы сна примерно в 3–5 раз по сравнению с наивной политикой «каждую ночь для всех».

3.7. CollectiveImprint

В архитектуре два слоя памяти, а не один. Персональный — это SelfImprint. Есть и общий слой — CollectiveImprint, — который хранит наблюдения модели о самой себе.

CollectiveImprint не содержит пользовательский контент. Что он содержит — операционные знания: «запросы паттерна X часто приводят к неудовлетворительным ответам», «подход A к задаче B работает; подход C обычно нет», «пользователи в этом контексте часто хотят уточнения до сути». Цель — дать системе способ учиться на собственных ошибках без переобучения весов.

Источник. После каждой фазы сна проблемные эпизоды помечаются — моменты, когда пользователь выразил недовольство, повторил вопрос с уточнением или исправил предыдущий ответ ассистента. Эти эпизоды очищаются от идентифицирующего содержимого, сводятся к признакам паттерна и подаются в CollectiveImprint как кандидаты в наблюдения.

Барьер приватности. Кандидат-наблюдение переходит в активный узел CollectiveImprint только после того, как k = max(10, 0.1% активных пользователей) разных пользователей продемонстрировали один и тот же паттерн. Формула масштабируется вместе с размером эксплуатации: инстанс на 10 тыс. пользователей использует k=10, инстанс на 100 тыс. — k=100 и так далее. Это адаптивная k-анонимность, следующая устоявшейся литературе о защите идентифицируемости отдельного человека через агрегацию (Sweeney, 2002), адаптированная под растущую популяцию.

Использование. Когда система собирает контекст для нового запроса, она запрашивает CollectiveImprint параллельно с графом пользователя. Если текущий запрос похож на класс запросов, для которого у CollectiveImprint есть известный паттерн, соответствующее наблюдение подмешивается в контекст как операционная подсказка. Это форма непрерывного обучения, не затрагивающая веса модели, — особенно полезная в эксплуатации, где циклы переобучения редки.

Будущее использование. Паттерны, накопленные в CollectiveImprint, — ценный обучающий сигнал. Они формируют естественную программу для дообучения последующих версий модели, список целей для улучшений в оценке и набор регрессионных тестов, гарантирующий, что известные слабые места остаются исправленными.

3.8. Хранение

3.8.1. Горячее, тёплое, холодное

Большинство пользователей неактивны большую часть времени. В типичных чат-продуктах 10–15% зарегистрированной пользовательской базы появляется в любую отдельно взятую неделю. Держать граф каждого пользователя горячим в основной базе данных — расточительно.

SelfImprint использует три уровня:

  • Горячий: активные пользователи (писали за последние 7 дней). Граф живёт в Neo4j, мгновенный доступ.
  • Тёплый: спящие пользователи (8–30 дней неактивности). Граф сериализуется в файл SYNX на SSD. Когда пользователь возвращается, граф перезагружается в Neo4j за 1–3 секунды.
  • Холодный: архивные пользователи (30+ дней). Файл SYNX на дешёвом хранилище (HDD или холодное объектное хранилище). Перезагрузка занимает 5–10 секунд — приемлемо для того, кто вернулся после месяца отсутствия.

Экономика ощутимо меняется. При 100 тыс. зарегистрированных пользователей обычно активны в любой момент 10–15 тыс. Многоуровневый подход позволяет горячей инфраструктуре масштабироваться под активную, а не зарегистрированную нагрузку.

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

3.8.2. Технологические решения

Граф живёт в Neo4j v5+ со встроенным векторным поиском. Более ранняя версия этого дизайна использовала Neo4j плюс Qdrant как внешний векторный индекс; текущий дизайн отказывается от Qdrant, потому что встроенный векторный поиск Neo4j закрывает сценарий использования и убирает головную боль синхронизации.

Между сессиями состояние графа сериализуется в SYNX, формат данных APERTURESyndicate. Структура из четырёх файлов: core.synx для закреплённых фактов и базового профиля, manifest.synx для индексов сессий и метаданных, domain/*.synx для тематических подграфов (работа, семья, увлечения) и sessions/*.synx для детальных трасс конкретных разговоров.

Эмбеддинги — bge-m3, 1024 измерения, мультиязычные. Мультиязычность важнее, чем кажется на первый взгляд, — пользователи переключаются между языками, и мы хотим, чтобы эмбеддинги оставались сопоставимыми при переключении.

3.9. Уплотнение графа

Графы знаний деградируют. За месяцы активного использования персональный граф накапливает тысячи связей, выводы с низкой уверенностью, конфликтующие узлы и материал, мёртвый, но не удалённый. Без явного уплотнения система сползает к тому, что мы неформально называем «связочным супом» — технически рабочим, семантически бессвязным.

SelfImprint запускает проход уплотнения еженедельно как часть глубокой фазы сна:

Затухание уверенности связи. У каждой связи есть значение уверенности. Выведенные связи начинаются с 0.4–0.6; наблюдаемые — с 0.9–1.0. Уверенность также затухает со временем, если связь не подкрепляется новыми наблюдениями. Связи ниже 0.1 удаляются.

Дедупликация узлов. Узлы с косинусным сходством выше 0.92 в пространстве эмбеддингов, относящиеся к одному типу, объединяются. Объединённый узел сохраняет наивысший вес, объединяет атрибуты и наследует объединение связей.

Удаление изолированных узлов. Узлы, оставшиеся без связей (после дедупликации), удаляются, если они не закреплены.

Бюджет связей на узел. Каждый узел ограничен 20 связями. При превышении лимита связи с наименьшей уверенностью отбрасываются. Это топологический регуляризатор против чрезмерной связности.

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

Жёсткий сброс как крайняя мера. Если граф деградировал настолько, что уплотнение уже не помогает (энтропия плюс обратная связь от пользователя вроде «ты как будто перестал меня понимать»), система может выполнить мягкий сброс: сохранить основные закреплённые факты и последние 30 дней, остальное заархивировать. Это неприятная операция, но каждой долгоживущей системе памяти нужен аварийный люк.


4. Политика вывода и приватность

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

4.1. Категории, которые система никогда не выводит

Фаза сна не генерирует гипотезы в следующих категориях, независимо от того, на что указывают данные:

  • Психиатрические или медицинские диагнозы.
  • Сексуальная ориентация или гендерная идентичность (если пользователь не заявил их прямо).
  • Политические взгляды.
  • Религиозные убеждения.
  • Конкретное финансовое положение.
  • Состояние здоровья (если только эксплуатация не является явно медицинской).
  • Иммиграционный статус.
  • Криминальная история или склонности.

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

4.2. Категории с высоким порогом

Некоторые выводы разрешены, но требуют значительно больше свидетельств, прежде чем попасть в граф как наблюдаемый факт, и живут дольше в виде гипотез:

  • Эмоциональные состояния (стресс, грусть, раздражение) отслеживаются для адаптации стиля общения, а не для диагностики. Ассистент может смягчиться с расстроенным пользователем; он не должен утверждать, что у пользователя депрессия.
  • Отношения с конкретными людьми отслеживаются как контекст, а не как оценки. Граф может отметить, что пользователь часто упоминает коллегу в негативном ключе; он не должен заключать, что эти отношения токсичны.
  • Долгосрочные цели и амбиции отслеживаются ради полезности на длинном горизонте.

4.3. Архитектура приватности

Все файлы SYNX зашифрованы при хранении алгоритмом AES-256. Персональные базы данных Neo4j изолированы, чтобы предотвратить утечки между разными пользователями.

Право на удаление встроено изначально. Пользователь может запросить полное стирание своего графа; соответствующая база данных и все файлы SYNX уничтожаются без возможности восстановления.

Более гранулярная операция забывания — «забудь про тему X» — удаляет все узлы, ссылающиеся на тему, и распространяет удаление через их связи.

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

4.4. Суверенитет данных APERTURESyndicate

В контексте эксплуатации APERTURESyndicate политика явная, а не подразумеваемая. Пользовательские данные не передаются третьим сторонам. Конкретно:

  • Пользовательские данные не используются для обучения моделей без явного согласия (opt-in).
  • Пользовательские данные не продаются и не передаются партнёрам без явного согласия.
  • Юридические запросы от государственных органов рассматриваются индивидуально. Запрос должен быть юридически обоснован; его рассматривает назначенный специалист; раскрывается только минимум данных, доказуемо необходимый для устранения задокументированной реальной угрозы.

Это в той же мере позиционирование, что и политика. В 2026 году многие провайдеры ИИ занимают неоднозначную позицию по государственным запросам данных. APERTURESyndicate занимает противоположную позицию: пользовательские данные принадлежат пользователю, и порог для раскрытия высок.


5. Дрейф личности

Когда система памяти работает месяцами с одним пользователем, возникает медленный режим отказа, не проявляющийся ни на одном стандартном бенчмарке: модель пользователя, которую строит система, постепенно отдаляется от реального пользователя. Новые гипотезы строятся на старых гипотезах. Подкрадывается предвзятость подтверждения. Через шесть месяцев система может уверенно ошибаться насчёт человека таким образом, что это ощущается интимно-достоверным.

Четыре меры снижения:

Ежемесячные сводки. Раз в месяц пользователь видит, что помнит система, — гипотезы, значимые узлы, накопленные допущения. Он может исправить, удалить, пометить как неверное. Это прозрачность, и это же самая сильная отдельная защита от дрейфа.

Якорь реальности. На каждой фазе сна гипотезы сверяются с диалогом за последние 30 дней. Гипотеза, не проявляющаяся в недавних взаимодействиях, теряет уверенность быстрее, чем предсказало бы одно только затухание по времени. Это ловит устаревшие допущения до того, как они укоренятся.

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

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


6. Режимы отказа

Кое-что неизбежно пойдёт не так. Вот как мы планируем с этим справляться.

Противоречивые узлы. По мере роста графа противоречия накапливаются. Пользователь работает в TechCorp, потом работает в DataInc; говорит, что любит свою работу, потом боится туда идти. Каждое новое противоречие создаёт связь contradicts. Фаза сна, во время перекалибровки важности, занижает вес более старого узла. После нескольких циклов затухания старый узел исчезает.

Ложные гипотезы. Фаза сна может генерировать правдоподобно звучащие, но неверные гипотезы. Защиты расположены слоями: флаг is_inference держит их видимыми как гипотезы при сборке контекста; порог свидетельств для перехода в факт высок; политика вывода прямо исключает самые опасные категории; а ограничения жизненного цикла не дают накапливаться близким промахам.

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

Мультиязычные разговоры. Пользователи переключаются между языками, иногда посреди разговора. bge-m3 сохраняет сопоставимость эмбеддингов между языками; рассуждение фазы сна выполняется на английском независимо от языка пользователя (ASAI-mini Memory 9B стабильнее на английском); сборка контекста возвращает прозу на языке последнего сообщения пользователя.

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

Долгосрочный связочный суп. Уже обсуждалось: еженедельное уплотнение с этим справляется.

Масштабируемость. Уровни горячий/тёплый/холодный решают основную часть проблемы масштабирования, но при очень большом числе пользователей (свыше 100 тыс.) изоляция персональных баз данных в Neo4j становится операционно неудобной. Шардирование по кластерам пользователей — естественный следующий шаг. Это инженерная работа, которую мы запланировали, но ещё не реализовали.


7. План оценки

Эмпирическая оценка — это Фаза 2 данной работы. План:

Бенчмарки. LongMemEval (Wu et al., 2024) — основная цель. Он структурирован вокруг пяти категорий — одна сессия, несколько сессий, временное рассуждение, обновление знаний, воздержание от ответа — которые хорошо согласуются с архитектурными утверждениями SelfImprint. LoCoMo (Maharana et al., 2024) — вторичная цель, предоставляющая многомесячные синтетические трассы диалогов.

Базовые модели для сравнения. Три: плоский RAG по истории разговора, Mem0 (извлечение LLM со структурированным хранением) и Zep/GraphRAG (существующий подход на графе знаний).

Контролируемые переменные. Одна и та же базовая модель, одна и та же модель эмбеддингов, один и тот же бюджет извлечения, одно и то же оборудование во всех системах. Единственная переменная — архитектура памяти.

Метрики. Точность на вопросах финальной сессии (точное совпадение, где применимо, LLM-как-судья для открытых вопросов). Разбивка по категориям для выявления, где SelfImprint выигрывает, а где проигрывает. Эффективность по стоимости: вызовы LLM на вопрос, общее время вычислений, пиковая память. Устойчивость: дисперсия между перезапусками, чувствительность к изменению гиперпараметров.

Абляции. Каждый крупный компонент нужно исключить по отдельности, чтобы понять его вклад:

  • Каузальные связи против нетипизированных связей.
  • Фаза сна против её отсутствия.
  • CollectiveImprint против только персонального слоя.
  • Типоспецифичное затухание против равномерного.
  • Умный пропуск против постоянного запуска.

Размер выборки. Не менее 50 вопросов на категорию бенчмарка для пригодных доверительных интервалов.

Бюджет. Реалистичная оценка: несколько H100-дней вычислений на GPU, плюс инженерные усилия на интеграцию базовых моделей и инфраструктуру абляций.


8. Открытые проблемы и дальнейшая работа

Помимо уже описанного в разделе о режимах отказа, остаётся несколько открытых направлений.

Калибровка гиперпараметров. Каждое число в этом документе — коэффициенты затухания, пороги важности, приращение усиления, k в CollectiveImprint — это отправная точка. Продакшен потребует эмпирической перекалибровки, возможно, для каждой пользовательской популяции отдельно.

Рассуждение о межпользовательских паттернах. Фаза сна сейчас работает на уровне отдельного пользователя. Отдельный вопрос — может ли CollectiveImprint, с его гарантиями анонимизации, выявлять паттерны на уровне популяции, полезные для улучшения самой архитектуры. При аккуратном подходе это исследовательское направление. При небрежном — проблема приватности.

Адаптация личности. SelfImprint подаёт контекст основной модели, но не меняет стиль модели. Глубокое знание пользователя могло бы оправдывать адаптацию стиля — мягче с эмоциональными пользователями, прямее с занятыми. Это не исследовано.

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

Мультимодальная память. Текущий SelfImprint работает только с текстом. Расширение на изображения, аудио и видео требует переосмысления и эмбеддингов, и структуры графа.

Федеративный CollectiveImprint. Несколько развёртываний SelfImprint — разные компании, разные домены — в принципе могли бы объединять свои наблюдения CollectiveImprint, сохраняя строгие гарантии приватности. Это потребовало бы инфраструктуры федеративного обучения, которой пока не существует.


9. Заключение

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

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

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


Литература

Anderson, J. R. (2007). How Can the Human Mind Occur in the Physical Universe? Oxford University Press.

Chhikara, P., Khant, D., Aryan, S., Singh, T., & Yadav, D. (2024). Mem0: Scalable Long-Term Memory for Production AI Agents. arXiv:2504.19413.

Conway, M. A. (2005). Memory and the Self. Journal of Memory and Language, 53(4).

Dwork, C., McSherry, F., Nissim, K., & Smith, A. (2006). Calibrating Noise to Sensitivity in Private Data Analysis. Theory of Cryptography Conference.

Ebbinghaus, H. (1885). Über das Gedächtnis. (Перевод: Memory: A Contribution to Experimental Psychology.)

Edge, D., Trinh, H., Cheng, N., et al. (2024). From Local to Global: A Graph RAG Approach to Query-Focused Summarization. Microsoft Research.

Maharana, A., Lee, D.-H., Tulyakov, S., et al. (2024). Evaluating Very Long-Term Conversational Memory of LLM Agents. ACL.

Packer, C., Wooders, S., Lin, K., Fang, V., et al. (2023). MemGPT: Towards LLMs as Operating Systems. arXiv:2310.08560.

Park, J. S., O'Brien, J. C., Cai, C. J., et al. (2023). Generative Agents: Interactive Simulacra of Human Behavior. UIST.

Shinn, N., Cassano, F., Berman, E., et al. (2023). Reflexion: Language Agents with Verbal Reinforcement Learning. NeurIPS.

Sweeney, L. (2002). k-Anonymity: A Model for Protecting Privacy. International Journal of Uncertainty, Fuzziness and Knowledge-Based Systems.

Tulving, E. (1972). Episodic and Semantic Memory. Organization of Memory.

Wu, D., Wang, H., Yu, W., et al. (2024). LongMemEval: Benchmarking Chat Assistants on Long-Term Interactive Memory. arXiv:2410.10813.

Zhong, W., Guo, L., Gao, Q., Ye, H., & Wang, Y. (2024). MemoryBank: Enhancing Large Language Models with Long-Term Memory. AAAI.


APERTURESyndicate OÜ, Таллинн, Эстония

Этот документ — версия 0.2, май 2026 года. Это дизайн-документ; эмпирические результаты появятся в сопутствующей работе.

SelfImprint: производственно-ориентированная каузальная память для диалоговых ИИ-агентов | AS Docs