August 7

Я хотел разгрузить голову. В итоге начал строить вторую память

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

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

В одной переписке можно несколько часов обсуждать идею, принимать решения, что-то менять, отбрасывать лишнее. В какой-то момент кажется, что картина наконец сложилась.

Открываешь новую — и значительную часть приходится рассказывать заново.

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

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

На коротких задачах это почти незаметно. На длинных постепенно возникает странное ощущение: вместо движения вперёд я всё чаще восстанавливаю собственное прошлое.

В предыдущей статье я писал о второй памяти скорее как об идее. О месте, куда можно вынести часть накопленного опыта, решений и наблюдений, чтобы не продолжать хранить всё только в голове.

В июле я решил не только рассуждать об этом, а попробовать собрать такую систему технически.

Тогда всё выглядело довольно просто.

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

Примерно в этот момент стоило заподозрить, что простым этот проект уже не будет.

Начать я решил с дневника

Не с базы знаний по работе, не с архива всех принятых решений и не с попытки сразу сохранить всю жизнь.

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

Дневник показался хорошей проверкой именно потому, что в реальной жизни никто не разговаривает аккуратными строками из таблицы.

Я могу написать:

Утренний протеин и добавки.

Могу прислать фотографию и добавить:

Одна таблетка.

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

Но если вернуться к этой записи через полгода, возникает много вопросов.

Какой именно протеин? Какие добавки? Одна таблетка чего? Это действительно было принято или только лежало рядом на столе?

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

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

Иначе вместо второй памяти довольно быстро получится очень уверенная художественная литература о собственной жизни.

Потом начался ремонт

Сначала мне казалось, что основная задача — надёжно сохранить запись и потом её получить.

Но проект повёл себя как ремонт квартиры.

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

Запись нужно не только сохранить. Нужно понять, к чему она относится. Не потерять исходный текст. Не перепутать предположение с фактом. Уметь исправить ошибочное понимание, не переписывая прошлое. Проверить, что данные действительно записались, а не просто появилось красивое сообщение «готово».

Потом возникают права доступа, резервные копии, восстановление после остановки, повторная обработка и ещё несколько вопросов, которые совершенно не интересовали меня в тот момент, когда я написал «утренний протеин».

В какой-то момент вокруг довольно простого дневника выросла целая конструкция.

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

Вот здесь я, кажется, и свернул не туда.

Я слишком рано начал строить большую систему вокруг ещё не законченного пользовательского сценария.

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

Всё описано, но живой путь пока не подтверждён.

До этого отдельные части уже удавалось проверить на реальных записях: данные сохранялись и читались обратно. Но последняя проверка показала, что весь путь целиком я пока честно подтвердить не могу.

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

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

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

Самым дорогим оказалось не хранение данных

А потом я увидел, куда на самом деле уходят деньги и время.

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

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

В какой-то момент я понял, что значительная часть ресурсов уходит не на развитие системы, а на объяснение самой системе, что с ней происходило вчера.

На этом и сгорали токены. Много.

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

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

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

Тут я понял, что всё это время думал немного не о том.

Я пытался решить, как сохранить информацию.

Хотя сохранить её — как раз самая простая часть.

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

Настоящая вторая память должна не только помнить прошлое. Она должна понимать, какая его часть важна именно сейчас.

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

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

В общем, за первый месяц я понял: ценность памяти не в объёме сохранённого, а в качестве контекста, который она возвращает.

Почему одного хранилища оказалось мало

Изначально мне хотелось просто перестать каждый раз заново рассказывать собственную историю.

Но постепенно запрос стал шире.

Мне понадобилось не только место, которое помнит, но и личный ассистент, способный удерживать продолжение работы.

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

И тут началась другая путаница.

Для такой системы слова «обсуждалось», «запланировано», «сделано» и «проверено» должны означать совершенно разные вещи.

В обычной переписке они легко смешиваются. Идея может несколько раз повториться и начать восприниматься как готовая функция. Красивое описание будущего состояния постепенно превращается в отчёт о настоящем.

Человек обычно восстанавливает разницу по интонации и общей истории разговора. Значит, здесь её приходится хранить явно.

Иначе она будет очень хорошо помнить то, чего на самом деле никогда не происходило.

С самостоятельностью тоже всё оказалось не так романтично.

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

Выглядело забавно, пока речь шла только о сообщениях.

Но если система может менять данные или запускать действия, уже недостаточно просто сказать ей: «продолжай».

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

В итоге запрос на личного ассистента для меня сильно приземлился. Мне не нужен голос, который красиво отвечает на всё подряд. Нужен помощник, который помнит, где остановилась задача, достаёт нужный кусок прошлого и не говорит «готово» раньше времени.

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

Но теперь хотя бы понятно, где я свернул не туда. Я пытался сразу строить систему на вырост, хотя сначала стоило научиться честно помнить одну обычную фразу.

Ту самую: «утренний протеин и добавки».

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

А пока это всё ещё стройка.