Спор «хранить всё или не хранить ничего» бессмысленен, потому что ответ зависит от того, что именно и как долго. Скриншот экрана бесполезен через неделю и весит мегабайт. Фраза «я работаю фронтендером» полезна годы и весит сорок байт. Уравнивать их в одном хранилище с одной политикой — гарантированный проигрыш по обоим параметрам сразу.
Отсюда идея уровней: чем выше в пирамиде, тем компактнее запись и тем дольше она живёт.
#Пирамида целиком
┌ уровень 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 наполняется только при включённом ночном цикле, а он выключен по умолчанию и требует локальной модели. Без него верхушка пирамиды пустует, и это нормальный рабочий режим.
#Правило срока жизни
Каждому уровню — свой срок, и он должен убывать сверху вниз.
- Сырьё удаляется по расписанию. Это единственный уровень, где место действительно кончается, и единственный, где удаление ничего не ломает выше — при условии, что текст с него уже снят.
- Дословные записи живут месяцами. Их удаление ломает поиск по формулировкам: «как я это тогда написал» перестаёт находиться.
- Сводки живут дольше дословных записей. Логика простая: сводка — это то, ради чего дословное можно удалить.
- Факты не имеют срока. Они выбывают только по замене или по решению человека, а не по календарю.
- Выводы пересматриваются, а не истекают. Наблюдение «предпочитает утренние встречи» либо подтверждается новыми данными, либо опровергается — время само по себе его не отменяет.
Нарушение порядка даёт характерные симптомы. Удалили дословные записи раньше, чем построили сводки, — потеряли содержание безвозвратно. Держите факты со сроком жизни — ассистент периодически забывает, как вас зовут. Стратегии выбытия для каждого уровня разобраны в материале про то, как ИИ забывает.
#Где интуиция подводит
Кажется, что верхние уровни — это «сжатая копия» нижних. Это не копия, а другой тип данных. Сводка недели не содержит недели, она содержит вывод о ней. Восстановить одно из другого нельзя, и планировать удаление нижнего уровня «потому что есть верхний» надо с этим пониманием.
Кажется, что чем больше уровней, тем лучше. Каждый уровень — это ещё одно место, где ошибка может закрепиться. Неверный факт, поднявшийся на уровень 4 в виде вывода, будет влиять на ответы дольше и незаметнее, чем то же самое в виде одного сообщения.
Кажется, что сжатие можно делать на лету. На практике оно требует вызова модели, и делать это в момент ответа — значит платить задержкой на каждом сообщении. Поэтому подъём по уровням делают фоново: сводку — по достижении порога сообщений, выводы — ночью, когда никто не ждёт ответа. Как сжимать, не теряя того, что потом спросят, разобрано в гайде по суммаризации диалога.
#Частые вопросы
#Сколько уровней нужно минимально?
Два: дословные записи и отобранные факты. Сводки и выводы — полезные, но не обязательные надстройки; без них система работает, просто хуже держит длинные диалоги и не делает обобщений.
#Что удалять первым, если кончается место?
Сырьё нулевого уровня — скриншоты и аудиофайлы, при условии, что текст с них уже снят и сохранён. Это даёт освобождение на несколько порядков больше, чем чистка чего-либо ещё, и почти не влияет на то, что ассистент о вас знает.
#Переживает ли память переезд на другую машину?
Переживает ровно то, что вы выгрузили. Факты, сводки и выводы — это текст, и он переносится тривиально; векторный индекс переносить не надо, он пересчитывается. Сырьё обычно не переносят вовсе.
#Почему в промпт уходит так мало записей?
Потому что контекст конечен и неравномерен: чем больше вы подложили, тем выше шанс, что важное окажется в середине, где модели используют его хуже всего. Компактный блок из десятка записей работает лучше, чем сотня.
#Может ли верхний уровень противоречить нижнему?
Да, и это нормальная ситуация: вывод «предпочитает утренние встречи» может устареть раньше, чем появится опровергающее сообщение. Поэтому у записей верхних уровней должно быть версионирование и возможность отозвать вывод, не трогая данные под ним.
#Вывод
Стройте память как пирамиду с убывающим объёмом и возрастающим сроком жизни, и считайте бюджет по уровням, а не в целом: почти весь объём даёт сырьё, почти вся польза — верхние два уровня, где счёт идёт на килобайты. Если у вас кончается место — чистите низ. Если ассистент плохо вас знает — чините верх; добавление места ему не поможет.