Инфраструктура памяти
Где именно живёт ваша память
Три уровня хранения, у каждого своя работа. Ключ шифрования — у человека, не у нас: содержимое закрывается до того, как покинет наш контур. Постоянный слой оплачен вперёд и не зависит от того, существует ли наша компания завтра.
Путь одной фразы — от Enter до постоянного слоя
Что физически происходит с репликой, пока вы читаете ответ на неё.
Первые миллисекунды
Вы отправляете сообщение. Оно попадает в оперативный слой — быстрое хранилище ключ-значение, где держится контекст текущей сессии: последние реплики, роль собеседника, то, что уже уточнили и переспрашивать не надо. Этот уровень существует ради одного свойства — скорости. Ассистент не должен ходить в долгую память за каждым словом, иначе разговор превращается в переписку по почте.
Из-за этого у первого уровня короткая память в буквальном смысле: он рассчитан на минуты и часы, а не на годы. Если бы система состояла только из него, каждое утро начиналось бы со знакомства заново — ровно так работает большинство ассистентов, к которым вы привыкли.
Поэтому первый уровень никогда не бывает единственным. Он витрина, а не архив.
И это же слой, который чаще всего выдают за память. То, что во многих продуктах называется «мы вас запомнили», на деле лишь окно первого уровня, открытое чуть шире: сессия закончилась, окно закрылось — и всё снова начинается с нуля.
Что уходит на второй уровень
Параллельно из разговора извлекается смысл. Реплики превращаются в векторы — числовые отпечатки значения — и ложатся в базу Postgres с расширением pgvector. Это не пересказ и не сокращение: вектор не хранит текст, он хранит положение мысли среди других мыслей.
Отсюда берётся способность вспомнить нужное через полгода. Когда вы спрашиваете «мы же договаривались насчёт врача», система не ищет слово «врач» по всем файлам. Она ищет разговоры, близкие по смыслу к вашему вопросу, и поднимает их в контекст.
Второй уровень — единственный, который умеет отвечать на вопрос «что ты обо мне знаешь». Первый слишком короткий, третий слишком неподвижный: он превосходно хранит и совершенно не приспособлен для того, чтобы в нём рыться.
Стоит оговорить ещё одно: из вектора не вычитать сказанного. Это набор координат; он способен сообщить, насколько близки два фрагмента, но развернуть его обратно в текст нельзя. Поэтому даже тот, кто получил бы доступ к этой базе, получил бы груду чисел.
Через час или через девяносто килобайт
Постоянный слой пишется не после каждой реплики — иначе число транзакций и стоимость хранения выросли бы без всякой пользы. Работают два правила сразу. Первое: раз в час копия личной папки уходит наверх. Второе: если файл диалога перевалил за 90 КБ, отправка начинается немедленно, не дожидаясь конца часа.
Смысл второго правила — в защите длинного разговора. Час содержательной беседы легко даёт больше девяноста килобайт текста, и ждать полного часа означало бы держать несохранённым самое насыщенное. Порог срабатывает раньше таймера ровно в тех случаях, когда терять больнее всего.
Ни первое, ни второе правило не требует участия человека. Кнопки «сохранить» нет — не потому, что её забыли сделать, а потому что любая ручная кнопка однажды окажется ненажатой. Память, которая зависит от дисциплины владельца, — это не память, а привычка.
Отсюда же понятно, сколько теряется в худшем случае: не больше последнего часа — и только той его части, которая не набрала девяноста килобайт. Мы пишем эту цифру прямо здесь, потому что любое обещание «ничего не теряется» сначала обязано объяснить, как оно посчитано.
Шифрование до отправки
Перед загрузкой пакет закрывается алгоритмом AES-256-GCM. Важна не длина ключа сама по себе, а порядок действий: шифрование происходит до того, как данные покидают защищённый контур, а не «на стороне хранилища». В сеть уходит массив байтов и метка целостности — узлы принимают их, не зная, что внутри.
Режим GCM добавляет к шифрованию проверку целостности. Если изменить в зашифрованном пакете хотя бы один байт, расшифровка не выдаст слегка испорченный текст — она откажется работать. Подмена не маскируется под сбой, и это ровно то поведение, которого ждёшь от архива, к которому вернутся через двадцать лет.
Ключ не хранится вместе с данными и не передаётся вместе с ними. Это единственная причина, по которой мы можем честно сказать, что не читаем переписку: не «у нас правило не читать», а «у нас нечем».
Стоит обозначить границу этого утверждения: шифрование защищает ту копию, которая уже собрана и отправлена. Идущий прямо сейчас разговор доходит до модели открытым текстом — иначе она не сможет ответить. Мы говорим это прямо, а не прикрываем общей формулой «сквозное шифрование».
Загрузка, расписка и обратный путь
Зашифрованный пакет уходит в постоянный слой, и за него платится разово — вперёд за весь срок хранения, а не помесячно. Взамен приходит идентификатор транзакции, а в Solana записывается сжатый NFT: компактная расписка о том, что такая-то порция памяти существует, такого-то размера, с такой-то отметкой времени.
Расписка не содержит переписки. Она содержит доказательство. Разница принципиальная: доказательство можно показать кому угодно — наследнику, юристу, себе через двадцать лет, — не раскрывая ни строчки содержания.
Обратный путь короче. Владелец приходит с ключом, система достаёт пакет по идентификатору, расшифровывает и отдаёт. Если наш кабинет по каким-то причинам недоступен, пакет всё равно достаётся — через публичный шлюз сети, а расшифровывается локально, на своём компьютере.
Обратный путь намеренно устроен так, чтобы обходиться без нас, и причина простая: за памятью приходят обычно в самый неудобный момент — переезд, смена страны, болезнь, похороны. В такие дни каждый лишний адресат, с которым нужно связаться, — это ещё одно место, где всё застрянет.
Зачем вообще делить на три
Свести три задачи в одно хранилище звучит проще, а на деле каждая из них оказывается сделана плохо. Чтобы было быстро, данные надо держать рядом с вычислением, а такое место по определению недолговечно. Чтобы искать по смыслу, содержимое надо превратить в векторы и построить индекс, а индекс приходится часто перестраивать. Чтобы сохранить до конца, надо писать в неизменяемую среду, а неизменяемое переиндексировать нельзя.
Требования дерутся между собой, поэтому их и разнесли: первый уровень жертвует сроком ради скорости, второй — неизменностью ради понимания, третий — гибкостью ради неизменности. Ни один по отдельности не годится; памятью они становятся вместе.
У разделения есть побочный результат: вместе с уровнями разделились и доступы. Учётные данные быстрого кеша не открывают векторную базу, а в векторной базе лежат одни числа. Даже если кто-то пройдёт одну дверь, жизнь человека из этого не складывается. Безопасность здесь не надетый сверху кожух, а естественное следствие разделения труда.
Поэтому мы и не говорим «мы сохраняем ваши данные в облако». Облако — слово общее, а у каждого из этих уровней есть свой понятный способ отказать и своё средство от этого отказа. Назвать их вслух полезнее, чем подобрать успокаивающее слово.
«Шесть утра, здание без названия посреди поля. Оно гудит, будто дышит, и внутри — вся человеческая память, прошедшая через ночь».
CODE: SYMPHONY, «First Light On A Server Farm»
«Память нельзя пообещать. Её можно только оплатить вперёд и построить так, чтобы она пережила того, кто её строил».
— Максим Валентинович Галатин, Архитектор
Почему её нельзя выключить
Независимость — это не лозунг, а набор скучных инженерных решений.
Один поставщик — одна точка отказа
Любой сервис, который держит вашу память, — это договор с юридическим лицом. Договор расторгается, лицо банкротится, страна вводит ограничение, а поставщик меняет условия хранения задним числом. Ни одно из этих событий не требует чьей-то злой воли: достаточно смены собственника.
Поэтому третий уровень намеренно вынесен туда, где нет одного владельца: в сеть, где копии записи держат независимые узлы, а плата за хранение внесена вперёд. Мы там не «партнёр с гарантией» — мы просто ещё один участник, который что-то записал.
Практическое следствие простое: чтобы стереть вашу память, недостаточно закрыть нашу компанию, отозвать лицензию или заблокировать домен. Нужно выключить распределённую сеть целиком, а у неё нет рубильника и нет офиса, куда этот запрос можно принести.
Это не значит, что мы ни при чём. Первые два уровня по-прежнему держим мы, и удобство работы зависит от того, насколько хорошо мы их сделали. Разница лишь в одном: сделаем плохо — вам будет неудобно; исчезнем — память вы не потеряете.
Экономика вместо обещания
Хранение стоит денег, и фраза «мы будем платить вечно» ничего не стоит без источника. Поэтому источник встроен в экономику экосистемы: 65 % средств, проходящих через роутер Solana, идут в казначейство и расходуются на выкуп AR — ресурса той самой сети, где лежит постоянный слой.
Остальное распределяется так же жёстко: 5 % в Фонд Основателя, 5 % в сжигание, 15 %, 7 % и 3 % — партнёрам первого, второго и третьего уровней. Если на каком-то уровне партнёра нет, его доля не оседает у нас, а уходит в сжигание.
Токен экосистемы — $GALATIN в сети Solana, эмиссия жёстко ограничена: 10 000 000 000 и ни одной единицы сверх. Смысл ограничения не в спекуляции, а в том, что фонд хранения нельзя пополнить допечатыванием — его можно пополнить только реальным потоком платежей.
Мы проговариваем всю эту цепочку намеренно: хранение, которое называет себя вечным, но не может объяснить, кто заплатит за него через десять лет, вечно ровно до конца фразы. Здесь объяснить можно — откуда деньги, куда они уходят и в каких долях делятся.
Если нас не станет
Представим худшее: сервис останавливается. Первый уровень исчезает сразу — он и рассчитан на минуты, терять там нечего. Второй, семантический, — это база, которую можно выгрузить; она восстановима, потому что векторы пересчитываются из исходных записей заново.
Третий не меняется вообще. Зашифрованные пакеты остаются в сети, идентификаторы транзакций остаются публичными, расписки в Solana никуда не деваются. Чтобы вернуть память, наследнику нужны две вещи: ключ и список идентификаторов.
Именно поэтому мы настаиваем, чтобы ключ и список выгружались владельцу заранее, а не «по запросу в трудную минуту». Запрос требует, чтобы было кому его обработать, — а мы строим систему, которая работает и тогда, когда обрабатывать некому.
Важен и порядок: сначала отдать возможность забрать своё, и только потом говорить об остальных функциях. В системе, которая сперва привязывает к себе, а выход обещает достроить позже, выход обычно так и не достраивается.
Что остаётся на руках у человека
Ключ шифрования. Он не хранится у нас, и это значит, что его потеря невосполнима: без ключа содержимое не восстановит никто, включая нас. Это оборотная сторона того, что переписку не прочитает никто, включая нас. Одно без другого не продаётся.
Список идентификаторов транзакций. Обычный текстовый файл, по которому любой человек с доступом в интернет находит зашифрованные пакеты через публичный шлюз, минуя наш сайт и наш кабинет.
Выгрузка в открытых форматах. Разговоры остаются текстом, а не проприетарной базой, из которой их «умеет доставать только приложение». Переносимость — тоже свойство инфраструктуры, а не любезность службы поддержки.
Вместе эти три вещи складываются в очень простую проверку: если завтра нас не станет вовсе, хватит ли того, что у вас на руках, чтобы прочитать память. Ответ должен быть «хватит» — а если не хватает, то дело в нашей архитектуре, а не в том, что вы не сделали резервную копию.
Чего мы не делаем
Мы не храним резервную копию ключа. Со стороны это выглядит как недостающая забота, но стоит нам её взять на себя — и всё сказанное выше про «мы не можем прочитать» отменяется разом: механизм, который возвращает ключ вам, кто-то другой запустит теми же словами.
Мы не обещаем «полное удаление из блокчейна». Стереть байты из неизменяемой сети не может никто; можно уничтожить ключ, и пакет выродится в шум. Расплывчатая формулировка выглядит как лишняя гарантия, а на деле это минус одна честная фраза.
Мы не превращаем сохранение в действие, о котором нужно помнить. Нет кнопки синхронизации, нет напоминания «не забудьте выгрузить архив в этом месяце». Резервная копия, которая держится на памяти человека, статистически равна её отсутствию.
И мы не собираемся выдавать «память» за обещание чувств. Здесь речь только о проверяемом: алгоритм шифрования, ритм записи, место хранения, источник денег, способ проверки. Всё остальное — что именно значили те разговоры — принадлежит тем, кто их вёл, а не инфраструктуре.