Память

Ночная консолидация памяти: что мы называем «снами» и чего не обещаем

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

Начнём с исправления, а не с описания, потому что исправление важнее.

В нашей документации и в комментариях к коду фазовый ночной цикл обработки памяти — с фазами, со взвешенной формулой отбора кандидатов, с гейтом тишины — был приписан стороннему проекту Hermes Agent. Эта атрибуция неверна.

При сверке первоисточников 28.07.2026 такого механизма в официальной документации и в репозитории того проекта как штатной возможности найти не удалось. Что там есть — это открытый запрос на подобную функциональность: описание возможного будущего механизма со статусом «открыт», то есть нереализованного.

Из этого следует прямой вывод, и мы формулируем его без смягчений: фазы и формула — наша собственная проектная гипотеза, а не воспроизведённый чужой алгоритм. Мы не имеем права обосновывать безопасность или качество нашего ночного цикла тем, что «так сделано у зрелого проекта». Такого основания не существует.

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

#Короткий ответ: что это такое

«Сон» — не мистическая жизнь модели и не дообучение весов. Это набор фоновых задач, которые раз в сутки просматривают накопленное за период и предлагают изменения памяти.

Ключевое слово — предлагают. Цикл устроен по схеме «предложение, а не запись»: кандидаты и доказательства сначала фиксируются в журнале, затем отдельная детерминированная политика решает, что применить. Модель никогда не исполняет изменение памяти сама.

И второе ключевое: функция выключена по умолчанию. Соответствующий ключ настройки по умолчанию имеет значение «выключено», и включать его надо руками.

#Схема цикла

  ГЕЙТ ТИШИНЫ
  владелец писал недавно? ──да──▶ отложить до следующего тика
            │нет
            ▼
  ФАЗА 1 — сбор
  чат + текст с экрана + расшифровка речи
  за период (по умолчанию 7 дней)
  один вызов модели на документ, до 24 документов
  извлечение durable-фактов
  → кандидаты со счётчиками: частота, число сессий,
    свежесть, богатство
  БЕЗ записи в память
            │
            ▼
  ФАЗА 2 — обобщение
  один вызов модели: повторяющиеся темы периода
  → текст-наблюдение, недеструктивно, отдельным видом записи
            │
            ▼
  ФАЗА 3 — отбор и применение
  взвешенный балл каждого кандидата
  все кандидаты и доказательства → в журнал
  детерминированная политика: что можно применить
  → применяется только доказанное

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

#Формула отбора и её статус

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

балл = релевантность    · 0.30
     + частота          · 0.24
     + разнообразие     · 0.15
     + свежесть         · 0.15
     + консолидация     · 0.10
     + богатство        · 0.06

Кандидат рассматривается к применению, если балл превышает порог — по умолчанию 0.6.

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

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

#Риски автоматической записи в память

Раздел, ради которого стоит читать остальное. Автоматическая запись выводов модели в постоянную память — механизм с несколькими способами испортиться, и большинство из них проявляются не сразу.

1. Ошибка закрепляется сама собой. Неверный вывод, попав в память, возвращается в промпт следующего разговора. Модель видит его как данность, соглашается, и при следующей ночной обработке этот же факт получает дополнительное подтверждение. Ошибка усиливает сама себя.

2. Собственные рассуждения принимаются за наблюдения. Текст, сгенерированный на второй фазе, — это обобщение, а не факт. Если его безусловно подмешивать в промпт наравне с проверенными фактами, гипотеза модели превращается в «наблюдение о пользователе».

3. Чужая речь становится фактом о вас. Текст с экрана — это часто чужой профиль, чужая переписка, чужая статья. Расшифровка встречи содержит слова нескольких человек. Без определения говорящего утверждение постороннего легко превращается в утверждение о владельце.

4. Повторный вывод считается новым доказательством. Если одно и то же исходное сообщение обработано дважды, наивная реализация посчитает это двумя подтверждениями. Сила связи должна быть функцией независимых доказательств, а не числа повторов вывода модели.

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

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

#Что мы делаем против этих рисков

Честно: часть закрыта, часть нет.

Закрыто. Цикл не пишет в память напрямую — только предлагает, а применяет отдельная детерминированная политика, пропускающая лишь доказанные факты о владельце. Реплики из групповых чатов помечаются как недоверенные и не могут стать фактом о владельце. Прогон имеет аренду и ключ идемпотентности, поэтому два запуска на одном снимке дают один логический результат. Журнал ревизий добавляется только в конец. Гейт тишины откладывает прогон, если владелец недавно писал, — по умолчанию порог около часа.

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

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

Статусы остальных частей архитектуры — в разборе агентной архитектуры Persona.

#Где интуиция подводит

«Ночью ассистент учится». Не учится: веса модели не меняются. Меняется содержимое хранилища фактов, из которого потом собирается промпт. Это работа с данными, а не обучение.

«Раз обрабатывает ночью, значит бесплатно». Каждый документ — это вызов модели. На локальной модели вы платите временем процессора и электричеством, на облачной — деньгами. Предел в два десятка документов за прогон существует именно поэтому.

«Чем больше запомнит, тем лучше». Наоборот: память, забитая мелочами, ухудшает подбор релевантного. Отбор с порогом нужен не для экономии места, а для качества. Смежная тема — стратегии забывания.

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

#Когда это выключить

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

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

Если вам важна воспроизводимость ответов. Память, меняющаяся ночью, меняет и ответы на одни и те же вопросы.

Если данных мало. На нескольких разговорах отбирать нечего: частота и разнообразие — основные составляющие балла — не наберутся.

По умолчанию функция выключена именно поэтому: включать её имеет смысл осознанно, а не потому, что она была включена при установке.

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

#Правда ли, что фазовый ночной цикл — это алгоритм Hermes?

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

#Ассистент меняет память сам, без спроса?

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

#Обучается ли модель во время «сна»?

Нет. Веса модели не меняются вообще: ночной цикл читает накопленные данные и работает с хранилищем фактов. Термин «сон» — метафора для фонового прогона, а не описание процесса обучения.

#Сколько это стоит?

Каждый обработанный документ — это отдельный вызов модели, поэтому стоимость пропорциональна объёму накопленного. У нас стоит предел на число документов за прогон, чтобы ночная обработка не превращалась в неограниченный расход. На локальной модели платой становится время процессора.

#Можно ли откатить неверно записанный факт?

Журнал ревизий с доказательствами ведётся, и данные для отката есть. Интерфейса, который делает откат одним действием и показывает историю решений, сегодня нет — это записано у нас как проект, а не как готовая возможность.

#Почему функция выключена по умолчанию?

Потому что она требует вызовов модели, меняет содержимое памяти и полагается на эвристику, которую мы сами считаем непроверенной. Включённая по умолчанию она молча тратила бы ресурсы и накапливала неточности у людей, которые об этом не просили.

#Что делать, если ассистент «помнит» неправду?

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

#Вывод

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

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

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт