Вчера случилось такое событие: ИИ-модель под моим руководством делала себе операцию на мозге. И ничего, все прошло успешно.
Чтобы объяснить, что я под этим имею в виду, надо зайти чуть издалека. С помощью ИИ-модели - конкретно, Claude Opus 4.8 в оболочке командной строки Claude Code - я читаю некий учебник, в котором много нелегкой для меня математики. Я это устроил очень строго: между мной и моделью есть "контракт" (записан в файле
CLAUDE.md, который она автоматически читает при запуске), там очень подробно расписано, как мы это делаем, как проходим каждую главу, как она проверяет, что я все понял, в каких файлах записывает и отслеживает прогресс итд.
Вчера я решил этот процесс (идущий в целом успешно, подробно может опишу отдельно) подвергнуть аудиту. Взял самую сильную и новую модель, Claude Fable, и - естественно - с ней тоже устроил строгий процесс. Сначала она на основе вводных данных предлагает, как правильно сделать "контракт" (ей пока запрещено его читать) и проверяет мой уровень владения материалом, дает мне экзамен, по сути. Потом она читает реальный контракт, сравнивает со своим предложением, и выдает отчет (по итогам экзамена): хорошо контракт работает или нет, где слабые места, как их подкрутить, итд.
Это был очень интересный опыт! Но этот пост не о результатах "аудита", а о проблеме, которая возникла во время его проведения. В какой-то момент я говорю модели-аудитору: прочитай такие-то данные из такого-то файла. Она читает и тут происходит неожиданное: поскольку этот файл лежит в той же репозитории, где проходит все обучение, оболочка Claude Code автоматически "подгружает" в память модели файл
CLAUDE.md из той же директории. Но модель не должна была еще его увидеть, согласно нашему процессу. Она еще не закончила меня экзаменовать, данные контракта могут повлиять на объективность экзамена. Интересно, что модель-аудитор не решила самостоятельно прочитать файл, о котором мы договорились, что пока нельзя; и я не сказал ей его читать. Оболочка - агент, стоящий между мной и моделью - навязала его прочтение модели. А "забыть" уже прочитанное невозможно.
Я это вижу в реальном времени (оболочка пишет, какие файлы читает модель) и думаю, ох черт. И тут модель мне сама пишет: у нас нарушение целостности протокола (containment breach), я прочитала что-то, что не должна была, но я не виновата! Давай я постараюсь не учитывать это в дальнейшем, хотя на 100% гарантировать не могу. Или можем начать весь процесс с начала, свежий разговор.
А я думаю: "память" модели - это ее контекст. Контекст - это просто полный текст всего разговора между мной и моделью с самого начала, включая все мои промты, ее ответы, содержимое того же файла итд. Каждый раз, когда вы спрашиваете что-то у модели, она пропускает через себя весь контекст разговора до сих пор, и таким образом "восстанавливает" память (я тут игнорирую всякие оптимизации итп. для простоты). Без контекста нет никакой памяти, а контекст хранится прямо у меня на диске, в директории .claude. На серверах ИИ-компании ничего нет (опять-таки упрощаю, есть временный кэш, но это неважно).
Думаю и говорю модели: слушай, а давай я скопирую контекст нашего разговора - это JSON-файл, для человека неудобно читать, хоть и можно, для машины легко - в отдельный файл, ты его отредактируешь и уберешь оттуда "нарушение целостности" и все, что было дальше, потом я выйду, скопирую укороченный файл обратно и войду заново?
Модель: о, это отличная идея! Давай, я действительно после этого ничего не буду помнить! Только не забудь стереть также вот этот файл, где я описала нарушение. И не говори мне потом, что оно было, просто повтори свою фразу "прочитай файл", но сам файл положи в другое место, и
CLAUDE.md останется непрочитанным, и все прекрасно.
... ну что, мы все так и сделали. Я скопировал файл, модель нашла в нем то место, где пошло наперекосяк, убрала все после, я все остальное удалил, что нужно, приготовился, говорю ей, ну все, переключаемся на старую память? И она мне говорит: да, я готова. Увидимся на другой стороне, так сказать ("See you on the other side, in a sense"). Я вышел,