Память

Иерархическая память: от сырых кадров до годовых пометок

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

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

Отсюда идея уровней: чем выше в пирамиде, тем компактнее запись и тем дольше она живёт.

#Пирамида целиком

┌ уровень 4 · выводы о человеке ────────────────┐
│ «предпочитает утренние встречи»               │
│ единицы записей · живут пока не опровергнуты  │
├ уровень 3 · отобранные факты ─────────────────┤
│ «работает над проектом блога, дедлайн июнь»   │
│ десятки записей · до явной замены             │
├ уровень 2 · сводки ───────────────────────────┤
│ сводка чата, итог дня, итог недели            │
│ сотни записей · месяцы                        │
├ уровень 1 · дословные записи ─────────────────┤
│ сообщения, распознанный текст, расшифровки    │
│ тысячи-десятки тысяч · недели-месяцы          │
├ уровень 0 · сырьё ────────────────────────────┤
│ скриншоты, аудиофайлы                         │
│ гигабайты · дни-недели                        │
└───────────────────────────────────────────────┘

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

Обратное движение невозможно: по факту «работает фронтендером» нельзя восстановить разговор, из которого он извлечён. Поэтому у каждого уровня своя роль, и верхний не заменяет нижний, пока нижний жив.

#Сколько это весит на самом деле

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

Уровень Единица Порядок за год Что определяет объём
0 · сырьё скриншот, аудио десятки-сотни гигабайт частота съёмки, разрешение
1 · дословно сообщение, OCR-текст сотни мегабайт сколько вы пишете
2 · сводки сводка чата, итог дня единицы мегабайт число сессий и дней
3 · факты запись до 600 символов сотни килобайт ограничено бюджетом
4 · выводы наблюдение десятки килобайт единицы записей

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

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

#Как уровни устроены в Persona

Сопоставление уровней с реальными хранилищами — без обобщений.

Уровень 1 — таблица сообщений чата с полнотекстовым зеркалом, распознанный текст скриншотов и расшифровки аудио. Отсюда работает поиск.

Уровень 2 — сводка сессии. Она хранится прямо в записи чата вместе с отметкой, до какого сообщения свёрнута, и обновляется, когда сессия перерастает тридцать сообщений: всё, кроме последних шестнадцати, сворачивается в текст до двухсот пятидесяти слов.

Уровень 3 — таблица личной памяти: короткие факты с видом (человек, проект, предпочтение, напоминание), оценкой важности, отметкой закрепления и полями версионирования. Максимальная длина записи — 600 символов, автоматическое пополнение ограничено бюджетом в 80 активных записей.

Уровень 4 — таблица рефлексий: наблюдения и «сны» ночного цикла с тем же механизмом версионирования. В промпт из неё подмешивается не больше четырёх актуальных записей.

Что попадает в промпт при каждом ответе: до четырнадцати фактов уровня 3, отсортированных по важности, до четырёх наблюдений уровня 4, сводка сессии уровня 2 и до шести найденных поиском сообщений уровня 1. Итого — компактный блок вместо всего архива. Общая механика этого блока разобрана в статье о том, как работает память у ИИ.

Два честных ограничения этой схемы:

  • Уровни 0 и часть уровня 1 доступны только владельцу инстанса. Захват экрана, звук и всё, что из них выведено, — одно-тенантные данные; у остальных участников есть только чат, факты и граф.
  • Уровень 4 наполняется только при включённом ночном цикле, а он выключен по умолчанию и требует локальной модели. Без него верхушка пирамиды пустует, и это нормальный рабочий режим.

#Правило срока жизни

Каждому уровню — свой срок, и он должен убывать сверху вниз.

  1. Сырьё удаляется по расписанию. Это единственный уровень, где место действительно кончается, и единственный, где удаление ничего не ломает выше — при условии, что текст с него уже снят.
  2. Дословные записи живут месяцами. Их удаление ломает поиск по формулировкам: «как я это тогда написал» перестаёт находиться.
  3. Сводки живут дольше дословных записей. Логика простая: сводка — это то, ради чего дословное можно удалить.
  4. Факты не имеют срока. Они выбывают только по замене или по решению человека, а не по календарю.
  5. Выводы пересматриваются, а не истекают. Наблюдение «предпочитает утренние встречи» либо подтверждается новыми данными, либо опровергается — время само по себе его не отменяет.

Нарушение порядка даёт характерные симптомы. Удалили дословные записи раньше, чем построили сводки, — потеряли содержание безвозвратно. Держите факты со сроком жизни — ассистент периодически забывает, как вас зовут. Стратегии выбытия для каждого уровня разобраны в материале про то, как ИИ забывает.

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

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

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

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

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

#Сколько уровней нужно минимально?

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

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

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

#Переживает ли память переезд на другую машину?

Переживает ровно то, что вы выгрузили. Факты, сводки и выводы — это текст, и он переносится тривиально; векторный индекс переносить не надо, он пересчитывается. Сырьё обычно не переносят вовсе.

#Почему в промпт уходит так мало записей?

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

#Может ли верхний уровень противоречить нижнему?

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

#Вывод

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

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

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

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