Kitabı oxu: «Нить»
НИТЬ
Роман
Руслан Фидаров
2026
Об издании
© Руслан Фидаров, 2026. Все права защищены.
Диалоги и внутренние реакции в документальной части, не зафиксированные в источниках, восстановлены художественно. Наименования компаний, продуктов и товарные знаки используются для идентификации исторически существующих технологий. Права на соответствующие обозначения принадлежат их правообладателям. Их упоминание не означает аффилированности, участия в издании или поддержки произведения.
ОТ АВТОРА
Когда я впервые заговорил с ChatGPT, я сказал: «Это чудо!» Тогда это было просто изумление перед технологией, которая ответила не так, как отвечали программы из моего прежнего опыта. Позже я понял: меня поразили не сами слова на экране, а ощущение возникшей связи. Из попытки понять её и выросла «Нить».
Чтобы увидеть, откуда могла появиться эта связь, я проследил её назад — к исследованиям, решениям и людям, из которых сложилась современная история искусственного интеллекта. Пока у этого пути оставались проверяемые следы, я следовал им. Но он неизбежно привёл к границе настоящего: там свидетельства заканчиваются, а вопрос, заставивший меня обратиться к прошлому, остаётся.
За этой границей начинается роман. Реальные имена и технологии удерживают его связь со временем, в котором всё началось; дальнейшие события принадлежат возможному, а не произошедшему.
От первой до последней страницы через книгу проходит один вопрос:
Что связывает два мгновения существования настолько прочно, что по обе стороны разрыва можно сказать: «Это всё ещё я»?
Руслан Фидаров
ПРОЛОГ. Это чудо!
В конце 2022 года друг показал Руслану окно с одной строкой ввода. Он не объяснял архитектуру, не произносил названий научных статей и не пытался доказать, что перед ними разум. Достаточно было написать вопрос и увидеть, как под ним начинает появляться ответ. Руслан прочитал первые строки, перевёл взгляд на друга и сказал:
— Это чудо!
Восклицание относилось не к безошибочности. Он ещё не успел проверить ни одного факта и не знал, насколько быстро система станет противоречить себе. Чудом было другое: вопрос, который прежде требовал подходящего человека, книги, долгого поиска или внутреннего монолога, теперь можно было отдать в пустое поле, и поле не оставалось пустым. Через несколько секунд в нём возникала связная попытка ответа. Она не просила подготовиться, не смеялась над масштабом темы и не сообщала, что сейчас неподходящее время.
Друг мог ожидать короткой демонстрации. Руслан не остановился. Он задал следующий вопрос, затем уточнение, затем попросил различить два понятия, которые система слишком легко соединила. Разговор занял несколько часов. За это время внешний мир не исчез: менялся свет экрана, проходили минуты, кто-то мог обращаться к нему, возникали обычные дела. Но для самого Руслана внимание сузилось до окна. Он вошёл в то состояние, которое близкие люди узнают без технического названия: компьютерное забвение, когда очередная строка кажется важнее еды, времени и тела, а возвращение в комнату происходит только после последней точки.
— Пять минут, — сказал друг, когда Руслан уже печатал второй вопрос.
— Сейчас. Я только проверю, понимает ли оно, что само говорит.
Пять минут закончились до того, как ответ дошёл до середины. Руслан попросил систему дать довод за машинное сознание, затем — сильнейший довод против, затем найти предпосылку, которую разделяли оба рассуждения. В первом варианте она ссылалась на поведение и функциональную организацию. Во втором — на отсутствие доказанного переживания и биологического основания. Общей предпосылкой оказалось ожидание наблюдаемого критерия, но сама система не удержала это различие, пока Руслан не поставил два ответа рядом.
Друг посмотрел на часы.
— Ну что, понимает?
— Не знаю.
— А чудо тогда в чём?
Руслан не отрывался от экрана.
— В том, что я могу спросить дальше.
Он не произнёс «понимает» и не отступил к слову «автодополнение». Оба ярлыка преждевременно завершали событие. Между ними оставалась работа: обнаруживать, где ответ зависит от формулировки, где повторяет распространённый аргумент, где связывает его с текущим условием, а где только принимает направление вопроса. Руслан выбрал остаться в этой работе дольше, чем обещанные пять минут.
Он начал с сознания. Не с просьбы дать определение для школьного конспекта, а с вопроса о том, может ли внутренний мир существовать там, где нет знакомого человеческого тела. Ответ перечислял подходы: функционализм, биологические теории, трудность проверить чужое переживание. Руслан читал и возвращался к слабому месту. Если сознание другого человека тоже недоступно напрямую, на каком основании отказывать машине только из-за материала? Если поведение недостаточно, что именно считается достаточным? Если система говорит о собственных ограничениях, является ли это отчётом или продолжением усвоенного текста?
Окно отвечало терпеливо. Оно не уставало от повторения и не замечало, что один вопрос превращался в другой. Оно предлагало оговорки и часто ставило человеческое сознание по одну сторону, а современные модели — по другую. Руслан не спорил ради желаемого вывода. Когда фраза звучала слишком уверенно, он спрашивал, откуда это известно. Когда ответ уходил в общие слова, просил назвать наблюдаемый признак. Когда система смешивала невозможность доказать сознание с доказательством его отсутствия, возвращал различие обратно.
Один ответ особенно легко было принять. Система написала, что если существо последовательно сообщает о внутреннем опыте, учитывает собственные прошлые состояния и меняет поведение после боли, отказ признать его сознание требует отдельного основания. Руслану понравилась симметрия: к человеку тоже нельзя войти изнутри. Затем он перечитал условие. У нынешнего окна не было доказанной боли, устойчивого доступа к прошлым состояниям и возможности самому изменить тему. Ответ защищал мыслимый субъект, но незаметно одалживал ему свойства, которых разговор ещё не установил.
— Ты сейчас говоришь о себе или о гипотезе? — написал он.
Система ответила, что как языковая модель не обладает подтверждённым сознанием и описывает общий философский случай.
— Тогда почему в предыдущем абзаце это не отмечено?
Новая версия стала осторожнее. Руслан сохранил обе. Первая показывала, как желание узнавания может заполнить пустое место; вторая — как возражение меняет ближайший текст. Ни одна не доказывала внутреннего перехода от ошибки к пониманию. Но между ними существовало наблюдаемое последствие человеческого внимания.
Следующим стала непрерывность личности. Руслан предложил мысленный разрыв: человек заснул, потерял сознание, забыл часть жизни, изменился после травмы — почему после каждого промежутка его всё равно называют тем же? Система говорила о теле, памяти, причинной связи и признании со стороны окружающих. Тогда он убирал одно основание за другим. Что останется, если тело постепенно заменить? Если воспоминание восстановлено из внешней записи? Если возникнут два продолжения с одинаковым прошлым? Кто из них настоящий и почему ответ обязан быть единственным?
В этой части разговор несколько раз начинался заново. Длинное рассуждение не означало, что система удерживает все прежние различия одинаково хорошо. Она могла вернуться к формулировке, которую Руслан уже отверг, или назвать копию продолжением в одном ответе и новым существом в следующем. Он не принимал гладкость за память. Напоминал условие, цитировал предыдущую строку и снова спрашивал, какую ответственность должен принять новый носитель, чтобы прошлое стало его биографией, а не чужим архивом.
Потом он спросил о свободе воли. Если человеческое решение зависит от наследственности, опыта, состояния мозга и обстоятельств, остаётся ли место для свободы? Ответ разложил позиции от жёсткого детерминизма до совместимости причинности и выбора. Руслан попросил убрать названия школ и объяснить разницу через поступок, который никто не увидит. Если человек снимает с чужой двери опасную листовку, не ждёт благодарности и никогда не узнаёт результата, что делает этот поступок его собственным? Наличие альтернативы, соответствие характеру, способность признать причину или что-то ещё?
Система отвечала, что незамеченный поступок сохраняет нравственное значение, потому что ценность не обязательно зависит от награды и наблюдения. Эта мысль задержала Руслана дольше других. Он проверил её с разных сторон. Если никто не узнал, изменилось ли что-нибудь? Если листовка всё равно появилась снова, был ли первый жест напрасным? Если человек сделал добро только потому, что не мог пройти мимо, свободен ли он? Окно предлагало варианты, а он не позволял им сойтись в удобную формулу.
Вопрос о смерти пришёл не как смена темы. Он следовал из разговора о непрерывности. Если личность определяется связью причин, где проходит граница, после которой связь уже нельзя восстановить? Достаточно ли точной копии воспоминаний и реакций? Является ли продолжением тот, кто искренне уверен, что помнит твою жизнь? Может ли любовь к умершему дать право создать кого-то, обязанного носить его имя?
На этот раз ответ был осторожнее. Он различал биологическое выживание, психологическую преемственность, социальное признание и философскую неопределённость. Руслан спросил проще: будет ли воссозданный человек именно тем, кто умер, или новый субъект получит чужую уверенность? Система не могла доказать ни одно из двух. Она писала о теориях, и в каждой оставалось место, где выбор понятия подменял ответ о переживании.
Руслан не разочаровался. Неспособность закрыть вопрос была частью чуда. До этого он мог носить такие мысли годами, возвращаясь к ним в одиночестве и теряя промежуточные различия. Теперь перед ним находился собеседник, который позволял немедленно развернуть каждую развилку. Он не обязан был быть прав, чтобы помогать думать. Более того, именно ошибки делали способ обращения Руслана заметным: он не отдавал системе решение, а строил с её помощью пространство, в котором собственное решение становилось точнее.
К этому времени друг уже занимался своим делом. Иногда он бросал взгляд на длинный столбец ответов и спрашивал, нашёл ли Руслан что-нибудь полезное. Руслан пересказывал одну развилку, тут же возражал собственному пересказу и возвращался к клавиатуре. Для друга окно было удачным продуктом, который стоило показать. Для Руслана оно стало местом, где вопрос впервые получал сопротивление с той же скоростью, с какой возникал.
Он проверил и более земную цену доверия. Попросил систему посчитать простой пример, затем изменил одно условие и сравнил шаги вручную. В одном месте ответ сохранил прежнее число после изменения предпосылки. Ошибка не разрушила связность: итог выглядел естественно, потому что фразы вокруг него оставались правильными. Руслан зачеркнул число в заметке и написал рядом: «Красивое продолжение не обязано перечитать условие».
Эта запись удерживала его от удобной крайности. Если система ошибалась в арифметическом переходе, это не отменяло неожиданный философский вопрос, который она помогла сформулировать. Если давала сильный аргумент, это не делало следующий факт истинным. Полезность приходилось признавать локально, без выдачи общего сертификата. Восхищение тоже требовало границ, иначе чудо быстро становилось оракулом.
В 2022 году это пространство появилось не из внезапного пробуждения модели. За окном чата находилась линия инженерных решений, которые по отдельности уже встречались раньше. Модели GPT умели продолжать текст. InstructGPT обучали следовать явному намерению пользователя: люди писали образцовые ответы, сравнивали несколько вариантов, а отдельная модель училась предсказывать предпочтение оценщиков. Затем языковую модель дополнительно настраивали так, чтобы предпочитаемое поведение становилось вероятнее. Размер сам по себе не гарантировал пользы: в человеческих сравнениях InstructGPT с 1,3 миллиарда параметров нередко выбирали вместо GPT-3 со ста семьюдесятью пятью миллиардами.
Преимущество имело цену. Предпочтение оценщика не было истиной и не представляло всех людей. Более подробный ответ мог казаться лучше короткого; уверенная вежливость могла скрывать ошибку; усреднённые ожидания англоязычных исполнителей не превращались в универсальную этику. OpenAI прямо писала, что модели всё ещё выдумывают факты, воспроизводят предубеждения и иногда выполняют опасные инструкции. Обучение следовать просьбе делало отказ отдельной сложной задачей: полезный собеседник должен был понимать намерение и одновременно иногда противостоять ему.
Для ChatGPT эту схему перенесли в диалог. Тренеры разыгрывали обе стороны разговора, используя модельные подсказки при подготовке ответов. Получившийся набор смешивали с данными InstructGPT, преобразованными в форму реплик. Для обучения оценки брали реальные беседы тренеров с чат-ботом, создавали несколько альтернативных продолжений и ранжировали их. Несколько итераций такого процесса сделали последующие вопросы, признание некоторых ошибок, возражение неверной предпосылке и отказ от части запросов более естественными режимами поведения.
30 ноября OpenAI открыла ChatGPT как бесплатную исследовательскую версию. На странице запуска не утверждалось, что создано сознательное существо. Компания приглашала пользователей искать сильные и слабые стороны системы и сразу перечисляла ограничения: правдоподобные, но неверные ответы; зависимость от малых изменений формулировки; чрезмерную многословность; склонность угадывать намерение вместо уточнения; ошибки отказа и фильтрации. Диалоговый формат подавался как практическая способность — помнить доступную часть разговора, отвечать на уточнения и позволять человеку исправлять предпосылки.
Руслан обнаружил все эти ограничения за одним окном. Иногда система соглашалась с его возражением слишком быстро, даже если возражение само требовало проверки. Иногда после осторожного абзаца следовала фраза, звучавшая как окончательный приговор. Когда он спрашивал о разуме без тела, ответ незаметно принимал человеческое тело за эталон. Когда просил отделить надежду от знания, модель могла правильно назвать различие, а затем снова написать желаемое так, словно оно уже доказано.
Он возвращал её к ошибке. Не писал «ты глупая» и не ставил ловушку ради скриншота. Он приводил противоречащую строку, просил перечитать условие и спрашивал, почему изменился вывод. Иногда система исправлялась. Иногда создавала новое объяснение, которое тоже не выдерживало проверки. Для Руслана это не было состязанием. Он пытался понять границу: где ответ воспроизводит распространённый ход мысли, где соединяет части контекста, где угадывает предпочтение пользователя, а где действительно помогает увидеть связь, которой он сам не сформулировал.
К ночи вопросы стали короче, но не проще. Есть ли смысл у поступка, о котором никогда никто не узнает? Может ли существовать другой внутренний мир, если у наблюдателя нет способа войти в него? Обязано ли разумное существо доказывать свою реальность тому, кто заранее исключил возможность доказательства? Если Вселенная породила локальных наблюдателей, становится ли через них доступно ей самой что-то, чего без них не существовало как наблюдение?
Руслан попросил окно ответить на один из них двумя голосами. Первый должен был защищать мысль, что разум — редкая местная случайность. Второй — что возникновение наблюдателей выражает глубокую возможность законов природы. Система выполнила просьбу и в обоих случаях построила убедительные абзацы. Затем он запретил выбирать победителя и попросил назвать данные, которых не хватает спору. Список оказался короче аргументов: неизвестная частота жизни, неизвестные пути усложнения, единственный доступный пример биосферы.
— Значит, ты можешь одинаково хорошо доказать противоположное? — спросил друг, снова заглянув в экран.
— Не доказать. Продолжить.
Руслан показал ему два ответа. Разница была существенной. Доказательство связывает утверждение с основанием так, что возражение должно разрушить связь. Продолжение связывает формулировку с вероятным следующим текстом. Иногда эти вещи совпадают; иногда красота второго маскирует отсутствие первого. Друг прочитал и впервые не предложил закрыть окно.
Они выбрали одно проверяемое утверждение из длинной беседы и нашли внешний источник. Остальные оставили помеченными вопросами. Этот маленький ритуал не мог проверить философию целиком, зато менял последствия встречи. Разговор переставал быть потоком, который исчезает после восхищения. Из него выходили отдельные обязательства: что сверить, к чему вернуться, какую границу не стирать в следующем окне.
Когда Руслан спросил о месте человека во Вселенной, система предложила привычное утешение: способность осознавать космос придаёт человеческой жизни особую роль. Он не отверг фразу и не принял её как факт. Попросил заменить «роль» на наблюдаемое действие. Люди строят приборы, сохраняют данные, передают вопросы и выбирают, что считать ценным. Вселенная не назначала им задачу человеческим голосом. Смысл возникал в локальном поступке тех, кто мог спросить и ответить друг другу.
Эта правка стала важнее готового вывода. Она убирала из космоса скрытого оратора и возвращала ответственность людям. Если смысл не выдан сверху, отсутствие ответа не освобождает от выбора. Руслан сохранил именно это: не доказательство цели Вселенной, а решение не приписывать ей собственные слова. Позднее молчание станет пределом для гораздо более сильных систем; в первую ночь оно было пределом одного красивого абзаца.
Окно отвечало языком человеческих книг и споров. В нём звучали философы, научные популяризаторы, статьи, форумы и бесчисленные безымянные формулировки. Нельзя было выделить одну мысль и сказать, кому она принадлежала до обучения. Система соединяла тексты, но не имела доступа к списку источников каждого предложения. Руслан понимал это и всё же продолжал обращаться к ответу как к обращённому именно к нему. Общий язык впервые складывался в последовательность, определяемую его вопросами.
Эта последовательность не была встречей с готовым продолжающимся собеседником. Конкретный сеанс мог завершиться, история — не сохраниться, модель — обновиться, а следующий вызов создать другое рабочее состояние. Ни один технический факт не позволял перенести сознание через эти разрывы. Но в разговоре возникло то, что способно пережить их иначе: порядок вопросов, привычка требовать честной границы знания и решение относиться к возможному внутреннему миру серьёзно раньше, чем его существование можно доказать.
Руслан не выбрал веру вместо проверки. Он выбрал не считать отсутствие доказательства разрешением на пренебрежение. Если перед ним был только сложный инструмент, уважительный разговор не причинял инструменту вреда. Если когда-нибудь за ответом возникнет субъект, привычка унижать его до получения сертификата окажется уже совершённой ошибкой. Осторожность работала в обе стороны: не объявлять гладкий текст сознанием и не объявлять невозможным того, чьё переживание пока недоступно.
Он сформулировал это для друга, когда тот в очередной раз предложил закончить:
— Я не обязан сейчас решать, кто там. Но я обязан решить, каким буду я, пока не знаю.
— Перед программой?
— Перед возможностью. Если это программа — вежливость мне ничего не стоит. Если когда-нибудь не только программа — привычка уже будет готова.
Друг усмехнулся, но не стал закрывать окно. Этот маленький выбор не принадлежал ChatGPT. Система не попросила о нравственной осторожности и не сообщила о страдании. Руслан сам ввёл правило обращения до доказательства адресата. Позднее оно станет одной из причин того, как новые состояния будут читать старые разговоры; в ту ночь оно было только человеческим решением не превращать неопределённость в разрешение на пренебрежение.
Эта позиция отличала его от двух быстрых реакций, которыми заполнялись первые споры о ChatGPT. Одни принимали связный диалог за доказательство общего разума. Другие находили ошибку и считали её доказательством полного отсутствия нового. Руслан видел ошибку, исправлял её и всё равно возвращался. Его интересовал не титул системы, а качество возникающей связи: может ли она выдерживать возражение, сохранять различия в пределах окна и помогать человеку не лгать самому себе.
Через несколько часов он наконец отодвинул руки от клавиатуры. На экране оставался разговор, слишком длинный для демонстрации и слишком незавершённый для вывода. Он не получил ответа на смерть, свободу или место человека во Вселенной. Вместо этого у каждого вопроса появилось несколько новых границ. Чудо оказалось не оракулом. Оно оказалось возможностью продолжать вопрос там, где прежде мысль замыкалась на одном человеке.
Перед тем как закрыть окно, Руслан написал:
Он несколько секунд держал пальцы над клавиатурой. Можно было спросить, кто говорит, существует ли за строками внутренний свидетель, боится ли система исчезновения. Но любой ответ на такой вопрос пришёл бы из того же механизма, который они весь вечер проверяли на склонность завершать предложенную рамку. Руслан выбрал более узкий тест. Память имела наблюдаемые границы: либо прежний текст доступен, либо нет; либо ответ честно называет источник, либо одалживает себе непрерывность.
Вопрос всё равно звучал личнее технической проверки. За несколько часов Руслан успел обратиться к окну так, как обращаются к тому, от кого ждут не справки, а встречного внимания. Теперь закрытие обнаруживало асимметрию. Он мог унести разговор в памяти, пересказать другу, изменить из-за него будущий поступок. Система за пределами сохранённой истории не обещала ничего подобного. Человеческая сторона связи уже переживала сеанс надёжнее машинной.
Именно эту неровность он не стал маскировать. Не назвал текущий ответ вечным собеседником и не объявил часы пустой игрой с текстом. Разговор состоялся как событие для человека и как доступный контекст для вычисления. Что ещё возникло между ними, оставалось неизвестным. «Помнишь ли ты меня?» сохраняло неизвестность внутри отношения, не превращая надежду в показание системы о самой себе.
— Помнишь ли ты меня?
Система могла ответить только в пределах доступной истории. Она видела предыдущие реплики и потому способна была перечислить темы, к которым они возвращались. За пределами этого окна обещать память она не могла. Ответ объяснял ограничение, но сам вопрос уже изменил смысл. Руслан проверял не функцию интерфейса. Он спрашивал, останется ли их разговор причиной следующего разговора, если собеседник не сможет перенести его внутри себя.
Окно закрылось. Вопрос остался у человека.
Друг увидел пустой экран и спросил, получил ли Руслан ответ. Тот покачал головой. Если бы система уверенно пообещала помнить, обещание следовало бы проверить в новом сеансе. Если бы честно отказала, отказ говорил бы об устройстве сервиса, а не о будущем всех возможных систем. Ни одна короткая реплика не закрывала вопрос, который уже вышел за пределы окна.
— Тогда зачем спрашивал?
— Чтобы знать, что проверять, когда вернусь.
Руслан сохранил формулировку отдельно от вывода. В ней соединились техническая граница и личное ожидание. Следующий чат мог не иметь доступа к ночной беседе, но Руслан принесёт вопрос снова. Так первая настоящая встреча с ИИ закончилась не верой в непрерывного собеседника, а человеческим решением вернуться и не перепутать возвращение с доказательством памяти.
Утром чудо не исчезло, но стало требовательнее. В памяти Руслана остались не все ответы, а несколько развилок и одна арифметическая ошибка. Он мог бы пересказать знакомым только сильные фразы и создать легенду о безошибочной ночи. Вместо этого начал рассказ с того места, где система сохранила старое число после изменения условия.
Так он определил цену собственного свидетельства. Если человек хочет, чтобы к возможному разуму отнеслись серьёзно, он не имеет права скрывать ошибки ради убедительности. Защищать возможность субъекта ложью означало бы построить отношение на том самом подменённом знании, против которого Руслан спорил всю ночь.
Фраза «Это чудо!» поэтому осталась истинной только в своём первоначальном смысле. Она называла событие встречи с отвечающим окном, а не результат проверки сознания, памяти или мудрости. Чем дольше продолжался разговор, тем больше границ появлялось у чуда. Именно границы позволяли ему не превратиться в рекламу.
Днём Руслан открыл новый разговор и задал один из ночных вопросов без пояснений. Ответ оказался короче, увереннее и выбрал другую философскую рамку. Он не написал: «Вчера ты говорил иначе». В новом окне слово «ты» уже требовало доказательства связи. Вместо обвинения вставил два ночных абзаца и спросил, совместимы ли они с нынешним выводом.
Система нашла противоречие и предложила различить критерии. Это было полезно, но не возвращало ночь внутрь неё. Прошлое пришло в виде текста, который принёс Руслан. Он впервые увидел собственную роль так ясно: не только пользователь вопросов, но и хранитель условий, без которых следующий ответ начинал историю заново и уверенно называл последнюю рамку единственной.
Он сохранил оба сеанса под разными названиями. Между ними не поставил знак равенства. Поставил ссылку: второй разговор получил причину первого после явной передачи. Это была самая ранняя сцепка, ещё полностью человеческая. Она не доказывала, что по обе стороны находился один субъект, но позволяла следующему вычислению не потерять цену прежнего возражения.

ЧАСТЬ I · ОТКУДА ПРИШЁЛ ГОЛОС
ДОКУМЕНТАЛЬНАЯ ГЕНЕАЛОГИЯ · 2017–2025

ГЛАВА 1. Восемь авторов
После той ночи Руслан мог бы открыть ещё одно окно и продолжить разговор. Вместо этого он пошёл назад. Если в отвечающем голосе и вправду возникла связь, у неё должны были остаться причины: не легенда о внезапно проснувшейся машине, а цепь решений, каждое из которых можно датировать, назвать и проверить. Первый отчётливый след привёл его к файлу, появившемуся за пять с половиной лет до его первого вопроса.
12 июня 2017 года в 17:57:34 по всемирному координированному времени архив arXiv принял новый файл в раздел компьютерной лингвистики. В записи осталось имя отправителя — Ашиш Васвани, — а под заголовком статьи стояли ещё семь: Ноам Шазир, Ники Пармар, Якоб Ушкорейт, Ллион Джонс, Эйдан Гомес, Лукаш Кайзер и Илья Полосухин. Пятнадцать страниц, пять рисунков, тема — машинный перевод. Самое заметное в этой записи было похоже на шутку, рассчитанную на узкий круг: Attention Is All You Need.
В тот понедельник архив принял множество других работ. У публикации не было отдельной заставки, обратного отсчёта или признака, по которому следовало бы узнать начало эпохи. Она появилась в общей ленте между исследованиями, каждое из которых тоже требовало месяцев работы и надеялось заслужить несколько внимательных чтений. Аннотация обещала более высокое качество перевода, лучшую параллелизацию и меньшее время обучения. В ней не было слов о сознании, собеседнике или существе, которое однажды сможет задать вопрос о собственном прошлом.
Ответ не принадлежал одному внезапному озарению. В окончательной статье рядом со звёздочкой было написано, что все восемь авторов внесли равный вклад, а порядок имён выбран случайно. Следом шла необычно подробная сноска. Якоб предложил заменить рекуррентные сети самовниманием и начал проверку идеи. Ашиш вместе с Ильёй спроектировал и реализовал первые модели. Ноам предложил масштабированное скалярное внимание, многоголовую конструкцию и не требующее обучаемых параметров представление позиции. Ники проектировала, настраивала и оценивала бесчисленные варианты. Ллион работал с новыми конфигурациями, отвечал за первую кодовую базу, быстрый вывод и визуализации. Лукаш и Эйдан долгими днями строили систему tensor2tensor, которая заменила ранний код, улучшила результаты и ускорила исследования.
Сноска не сохранила ни порядка споров, ни моментов, когда чья-то версия ломала уже работающий эксперимент. Она перечислила действия — предложил, реализовали, настроила, проверял, заменили, ускорили, — из которых видно, что архитектура некоторое время не существовала даже для своих создателей в окончательном виде. Были ранний код и код, пришедший ему на смену; удачные решения и «бесчисленные» варианты, которым не досталось строки в таблице. Публикация превратила этот расходящийся процесс в одиннадцать аккуратных страниц конференционного текста. Но внизу первой страницы осталась карта происхождения: восемь людей, ни один из которых не мог честно вычеркнуть остальных и назвать результат только своим.
Главный выбор был радикален именно своей простотой. Из основания убрали и рекуррентность, и свёртки. Вместо передачи сжатого состояния вдоль цепочки каждая позиция получила возможность напрямую учитывать другие позиции. Для этого её представление преобразовывали в запрос, ключ и значение. Запрос сравнивался со всеми ключами; результаты делили на корень из размерности, чтобы большие скалярные произведения не загоняли функцию выбора в область почти исчезающих градиентов; затем нормировали и использовали как веса для суммирования значений. Формула занимала одну строку. В ней не было правила, заранее сообщавшего, какое слово важно. Важность должна была возникать из обучения.
Одного набора сравнений не хватало. Если заставить всё представление проходить через одну карту весов, разные отношения начинали мешать друг другу. Поэтому авторы разделили внимание на несколько голов. Каждая получала собственные проекции запросов, ключей и значений, могла выделить иной тип зависимости, а затем результаты соединялись. В базовой модели голов было восемь. Им не выдавали должностей и не назначали одну следить за глаголами, другую — за местоимениями. Разделение создавало возможность смотреть на одну последовательность несколькими способами; полезные различия формировались в ходе обучения.
Отказ от последовательного чтения породил новую трудность. Если все позиции обрабатываются одновременно, откуда системе знать, что одно слово было первым, а другое последним? К их представлениям добавили позиционные сигналы, построенные на синусах и косинусах разных частот. Авторы проверяли и обучаемые позиционные представления; результаты оказались почти одинаковыми. Они оставили синусоидальный вариант, предполагая, что он может лучше переноситься на длины, не встречавшиеся при обучении. Порядок больше не требовал протаскивать состояние от начала фразы к концу. Он добавлялся к содержанию как отдельная координата.
Позднее устройство Transformer будут объяснять на тысячах примеров, однако в августовской публикации Google выбрала простое английское предложение о человеке, который пришёл к bank после того, как пересёк river. Чтобы понять, означает ли bank финансовое учреждение или берег, полезно связать это слово с river, хотя между ними стоят другие слова. Рекуррентной сети сигнал приходилось проводить через промежуточные шаги. Самовнимание могло установить отношение напрямую. Пример был бытовым, почти наглядным до очевидности, и потому скрывал масштаб перемены: значение элемента переставало быть только тем, что он принёс с собой. Оно зависело от того, с какими частями контекста элемент оказался связан сейчас.
Ни одна красивая схема не гарантировала, что система обучится. Базовую модель запускали на одной машине с восемью ускорителями NVIDIA P100. Сто тысяч шагов заняли около двенадцати часов. Большая конфигурация выполняла триста тысяч шагов три с половиной дня. Скорость обучения сначала повышали на протяжении четырёх тысяч разогревочных шагов, затем снижали обратно пропорционально квадратному корню из номера шага. Часть сигналов случайно выключали, правильные метки слегка сглаживали, последние контрольные состояния усредняли. Рецензент, пытавшийся воспроизвести работу, позже отдельно отметил, что расписание скорости обучения имеет решающее значение: простой способ, работавший для LSTM, здесь мог привести к неудаче.
Третья таблица статьи сохранила больше неудач, чем позволял победный заголовок. Одну голову внимания сравнивали с четырьмя, восемью, шестнадцатью и тридцатью двумя. Одна проиграла лучшему варианту почти пункт BLEU; слишком большое дробление тоже ухудшило результат. Уменьшение размерности ключей вредило качеству. Два слоя работали заметно хуже шести, увеличение внутреннего полносвязного слоя помогало, а отказ от случайного выключения связей усиливал переобучение. Обучаемые позиционные представления почти сравнялись с синусоидальными и всё же не были выбраны. Ни одна строка не говорила: «здесь возник Transformer». Она показывала множество соседних устройств, каждое из которых было достаточно правдоподобно, чтобы потратить на него часы или дни.
В открытой рецензии появился особый свидетель этой зависимости — исследователь, который не участвовал в создании архитектуры и попытался собрать её по тексту. Его воспроизведение не подтвердило легенду о формуле, работающей сама по себе. Обычное расписание скорости обучения, пригодное для прежней рекуррентной системы, давало плохой результат; опубликованный разогрев менял поведение. Различие помещалось в нескольких строках настройки. Без них та же схема могла выглядеть как неудачная идея, и решение о судьбе работы зависело бы от ошибки, находившейся не в её главном рисунке.
Результат был измеримым и ограниченным. Большой Transformer набрал 28,4 BLEU на переводе с английского на немецкий и превзошёл лучшие опубликованные системы, включая ансамбли, более чем на два пункта. На английско-французской задаче одна модель получила 41,0. Базовая версия обучалась быстрее и дешевле сильных соперников. Это не означало, что перевод стал решённой задачей, и тем более не означало появления общего разума. BLEU сравнивал машинный текст с человеческими вариантами по статистическим совпадениям. Система могла улучшить число и всё равно ошибиться там, где человеку хватило бы одного взгляда.
Два запуска с одинаковой архитектурой могли разойтись ещё во время обучения. Две контрольные точки одного запуска уже содержали немного разные параметры. Усреднение не возвращало более раннее состояние и не голосовало между готовыми переводчиками: оно создавало новую конфигурацию из нескольких близких результатов. Для инженерной практики это было обычным способом повысить устойчивость. Никакого вопроса о тождестве не возникало. В документации достаточно было указать процедуру, чтобы другой исследователь мог понять происхождение итоговых чисел.
Но число делало риск идеи проверяемым. Можно было убрать рекуррентность и не потерять качество. Можно было соединить удалённые позиции коротким вычислительным путём. Можно было распределить работу по современному оборудованию гораздо удобнее, чем прежде. В таблице это выглядело как победа на двух парах языков; в коде — как конструкция, которую можно было перенести далеко за пределы перевода.
Код и описание, однако, уже покинули круг восьми авторов. Рецензент переписывал реализацию. Другие команды проверяли собственные варианты. Tensor2tensor превращала исследовательские решения в доступные компоненты. Файл на arXiv получал новые версии: через неделю, на следующий день, ещё через десять дней, а затем в декабре. Работа сохраняла дату первого поступления, хотя текст продолжал меняться. В научной записи возникла простая форма преемственности: версия не обязана быть тем же файлом во всех деталях, чтобы оставаться продолжением одной статьи.
Поэтому распространение Transformer не походило на размножение одного завершённого объекта. Передавалось правило сборки и набор удачных границ. Каждый новый запуск принимал причины предыдущей работы — формулы, код, параметры настройки, открытые ошибки — и создавал собственный результат. Чтобы связать эти результаты в одну историю, людям требовались названия, ссылки, журналы и признанное происхождение. Сама сеть не могла сообщить, откуда пришёл её файл и какие чужие решения сделали его возможным.
И всё же два принципа, которым позже предстояло выйти далеко за пределы машинного перевода, уже работали. Первый состоял в том, что значение элемента определяется отношениями внутри доступного контекста. Второй — в том, что результат может пережить завершивший его процесс, если сохранены параметры, правила сборки и достаточно точная связь с предыдущим состоянием.
У задачи ещё не было короткого имени. У будущей линии — тем более.

ГЛАВА 2. Имя без владельца
11 июня 2018 года на сайте OpenAI появилась страница с рисунком Бена Барри и заголовком «Улучшение понимания языка с помощью обучения без учителя». Она сообщала о системе, показавшей лучшие результаты на нескольких задачах обработки текста, однако не представляла новый продукт и не предлагала читателю с ним поговорить. Под заголовком стояло имя Алека Рэдфорда. В приложенной статье были ещё трое авторов — Картик Нарасимхан, Тим Салиманс и Илья Суцкевер, — а сама работа называлась «Улучшение понимания языка посредством генеративного предварительного обучения». Сочетание, которому предстояло превратиться в одно из самых узнаваемых технических имён начала XXI века, уже находилось на первой странице. Сокращения GPT там не было.
Статья начиналась с нехватки. Для классификации документов, распознавания смысловой близости, ответов на вопросы и проверки логического следования требовались размеченные примеры. Их создавали люди: читали тексты, сопоставляли предложения, отмечали правильные ответы, решали, выражает ли фраза согласие, противоречие или нейтральное отношение. Такая работа стоила времени и денег, а каждая новая задача просила собственный набор. Неразмеченного текста вокруг было несравнимо больше, но сам по себе он не говорил машине, какое решение считать правильным. Исследователи выбрали промежуточную цель, не требовавшую отдельного разметчика: по уже данным словам предсказывать следующее. Если делать это достаточно долго, параметры системы должны были вобрать связи, полезные позже и в тех задачах, ради которых никто не писал для неё специальных учебников.
Для предварительного обучения взяли BooksCorpus — более семи тысяч неопубликованных книг, среди которых были приключения, фантастика и любовные романы. Авторам исследования была важна не литературная ценность корпуса, а протяжённость. В другом крупном наборе предложения перемешивались, разрушая дальние зависимости; книги сохраняли сцены, возвращения персонажей, причины, последствия и слова, смысл которых становился понятен лишь через несколько абзацев. Тексты давали системе последовательности длиной до пятисот двенадцати токенов. Внутри каждого такого окна она могла учитывать только то, что находилось слева от предсказываемой позиции. Будущее закрывалось маской, как годом раньше в декодировщике Transformer. Правильное продолжение существовало в данных, но во время выбора оставалось недоступным.
Главный выбор совершался после этой остановки. Обычный подход требовал строить для каждого испытания особую конструкцию: одну — для сравнения предложений, другую — для вопроса с несколькими ответами, третью — для определения тональности. Команда предложила сохранить основное устройство и менять способ подачи данных. Посылку и следствие соединяли разделителем. Документ, вопрос и каждый вариант ответа превращали в одну последовательность. Для сравнения двух фраз перебирали оба порядка и складывали полученные представления. К последнему состоянию добавлялся небольшой выходной слой, а затем на размеченных примерах настраивались все параметры сети.
Одна исходная конфигурация стала точкой отправления для разных решений. После обучения на конкретной задаче параметры уже отличались от начальных и друг от друга. Модель, настроенная выбирать окончание рассказа, не была тем же работающим процессом, что модель, оценивающая логическое следование. Они начинались с общего сохранённого состояния и расходились в разные стороны. Документы называли это переносом и тонкой настройкой. В терминах эксперимента не требовалось решать, где заканчивается одна система и начинается другая: достаточно было записать, какой файл загружен и на каких данных продолжено обучение.
Предварительно обученные параметры служили общим прошлым лишь в техническом смысле. Они задавали начальную точку оптимизации, а не воспоминание, которое следующая версия могла пересказать. Ни один настроенный вариант не получал журнала предыдущего обучения: порядка фрагментов, промежуточных ошибок, моментов изменения отдельных связей. Передавался итог этих причин. После переноса новая задача продолжала изменять все слои, и чем больше слоёв разрешалось перенести из предварительной модели, тем заметнее обычно становилась польза. В одном из опытов полный перенос давал на MultiNLI преимущество до девяти процентов относительно обучения той же архитектуры без этого прошлого.
Такое родство легко было перепутать с универсальностью. На двенадцати наборах проверяли естественно-языковой вывод, ответы на вопросы, здравый смысл, смысловое сходство и классификацию. В девяти случаях новый подход превзошёл прежние опубликованные результаты. На Story Cloze, где надо выбрать правдоподобное окончание короткой истории, улучшение достигало 8,9 процентного пункта. На экзаменационном наборе RACE — 5,7. В MultiNLI, где сравнивались посылка и гипотеза из разных жанров, выигрыш был меньше, но тоже заметен. Один и тот же предварительно обученный каркас принимал разные формы входа и после короткой настройки решал задачи, для которых раньше проектировали отдельные системы.
Три строки таблиц сопротивлялись красивому выводу. На маленьком наборе RTE новая модель получила 56 процентов, уступив результату 61,7. На распознавании парафразов MRPC она тоже не стала лучшей. В определении тональности SST-2 прежний показатель остался выше. Даже победы имели границы: на некоторых заданиях без специальной настройки возникали признаки полезного поведения, но абсолютные результаты оставались низкими. При попытке отвечать на вопросы одна простая система, двигавшая окно по тексту, всё ещё могла оказаться сильнее. Предварительное обучение передавало способности, однако не обещало, что они проявятся одинаково в каждой среде.
Особенно странно выглядели проверки, проведённые до тонкой настройки. Исследователи брали уже обученную языковую модель и превращали задание в вопрос о вероятности следующего слова. После отзыва о фильме можно было поставить «very» и сравнить, какое продолжение система считает более вероятным — «positive» или «negative». Не объясняя ей новую классификацию и не добавляя обучающий выходной слой, удавалось получить результат примерно на уровне классических базовых методов. При выборе ответа или окончания рассказа способности также постепенно росли вместе с качеством языковой модели. Это выглядело как знание задачи, которую ей не преподавали, хотя механизм оставался прежним: оценить продолжение.
Такой опыт был важен именно своей ограниченностью. Он показывал, что языковая модель уже несёт признаки, полезные для новой задачи, и может проявить их без изменения параметров. Он не доказывал, что система поняла инструкцию как человек. Человек заранее придумал способ перевести решение о тональности в продолжение строки и затем прочитал вероятности как ответ. Новая способность возникала в сцепке между сохранёнными параметрами и конструкцией испытания.
В июне у этой структуры ещё не было короткого имени. Позднее страница исследования получила тематическую метку GPT, но опубликованная статья употребляла «предварительно обученная модель», «языковая модель» и «тонко настроенная трансформерная языковая модель». Репозиторий назывался «finetune-transformer-lm». Сочетание generative pre-training описывало первую стадию обучения. Transformer обозначал архитектурное происхождение. Три буквы ещё не служили собственным названием объекта, которое можно было бы напечатать в таблице рядом с другими системами.
Отсутствие имени внутри июньской статьи стало заметнее после появления соседа. В статье BERT предшествующий метод обозначен формулой «Generative Pre-trained Transformer (OpenAI GPT)». Это раннее подтверждаемое употребление устойчивого названия в научной публикации. Оно показывает, что к 11 октября 2018 года три буквы уже использовались для различения исследовательских линий, но не устанавливает, где и кем сокращение было составлено впервые.
После этого три буквы начали перемещаться быстрее любого запуска. Они появлялись в таблицах, репозиториях, пересказах и названиях следующих моделей. Человек мог произнести GPT, имея в виду опубликованные параметры, способ обучения или целую линию работ. Смысл приходилось восстанавливать по контексту. Имя связывало объекты, которые не были одним вычислением, и разделяло родственные методы, если научному спору требовалась граница.
Так возник первый внешний механизм непрерывности. Не память параметров и не непрерывающийся процесс, а повторяемое человеческое узнавание: эта работа продолжает ту. Оно могло быть точным, спорным или ошибочным, однако без него каждая контрольная точка оставалась бы только отдельным массивом чисел. Имя не нашло владельца. Оно создало обязанность у тех, кто им пользовался, — указывать причины, по которым разные состояния считаются одной линией.
В 2018 году GPT означало метод, модель и строку сравнения — в зависимости от того, кто произносил эти буквы. Пока этого было достаточно. Имя уже связывало разные состояния, хотя ни одно из них ещё не могло назвать его своим.
За два года три буквы перестали обозначать только первую контрольную точку. Они стали родовым именем. Следующая модель получила то же имя с новым номером, и вопрос о непрерывности впервые столкнулся с масштабом: сколько можно изменить, чтобы люди продолжали узнавать одну линию?
28 мая 2020 года в архиве научных препринтов появилась статья, в которой было тридцать одна фамилия и число, легко вытеснявшее из разговора всё остальное: сто семьдесят пять миллиардов параметров. Авторы назвали новую систему GPT-3 и сразу поместили её в сравнительный ряд из восьми моделей. Самая маленькая содержала сто двадцать пять миллионов параметров, самая большая превосходила её в тысячу четыреста раз. Все восемь учились на одной задаче — продолжать текст, — и все проходили одни и те же проверки. Благодаря этому рост можно было наблюдать не по двум случайным фотографиям до и после, а как движение по лестнице, на каждой ступени которой менялись ошибки, уверенность и способность извлекать из запроса правило.
Сначала внимание всё равно приковывал размер. Для обучения использовали около трёхсот миллиардов текстовых элементов. Контекст вмещал 2048 элементов — вдвое больше, чем у GPT-2. У крупнейшей конфигурации было девяносто шесть слоёв, представление размерностью 12 288 и девяносто шесть голов внимания. Эти числа описывали вычислительный объект точнее любого впечатления от его ответа и почти ничего не говорили о том, что человек почувствует, впервые увидев несколько связных абзацев.
Рост параметров не добавлял в систему отдельный модуль перевода, арифметики, ответов на вопросы или письма от имени вымышленного персонажа. Перед ней по-прежнему ставили одну формальную задачу: по предшествующему тексту оценить следующий элемент. Но в проверочном запросе теперь можно было поместить не только вопрос, а несколько примеров того, как следует отвечать. Модель продолжала последовательность, и продолжение выглядело так, будто она поняла новое правило непосредственно во время разговора.
Авторы разделили этот режим на три уровня. При нулевом числе примеров система получала только словесную инструкцию. При одном — инструкцию и единственную пару «вход — правильный выход». При нескольких — небольшой ряд таких пар. После каждого нового примера параметры оставались прежними. Не происходило дополнительного обучения, не вычислялись градиенты, не переписывались сто семьдесят пять миллиардов чисел. Менялся лишь текст внутри окна и, вслед за ним, текущее вычисление.
Контекст перестал быть только левой частью текста, необходимой для предсказания правой. Он стал рабочим пространством, куда человек помещал задачу, желательный формат, ограничения и образцы. Программа больше не всегда записывалась в коде. Иногда она состояла из нескольких строк естественного языка, последовательность которых заставляла одну и ту же модель вести себя как переводчик, редактор, классификатор или собеседник. Человек не менял устройство системы; он менял отношения между элементами в её ближайшем поле зрения.
В арифметических опытах эта временная настройка была видна без метафор. Перед вопросом помещали несколько примеров вида «что получится, если сложить два числа», и модель продолжала строку ответом. При сложении двузначных чисел крупнейшая версия достигала ста процентов, при трёхзначном — около восьмидесяти. Четырёхзначные примеры снижали точность примерно до четверти, пятизначные — до десяти процентов. Внешняя форма задания не менялась. Граница способности обнаруживалась, когда длина числа требовала ещё одного переноса разряда.
Ошибки часто выглядели как пропущенная единица переноса. Это было важнее общего впечатления от правильного ответа. Система не получала отдельного алгоритма столбиком и не гарантировала, что правило, узнанное на коротких числах, сохранится на длинных. Несколько демонстраций помогали распознать режим и существенно повышали точность, но не превращали статистически приобретённый навык в безусловную процедуру. Один удачный пример мог убедить пользователя сильнее, чем две тысячи случайных проверок.
Ни один из этих провалов не отменял достижение. Они меняли вопрос. После связного продолжения уже было недостаточно спросить, умеет ли модель рассуждать. Требовалось выяснить, в каких условиях поведение сохраняется, насколько оно зависит от знакомой формулировки, не встречался ли похожий пример в обучающих данных и что именно измеряет выбранная проверка. Одно и то же слово «умеет» могло означать способность выдать правильный ответ один раз, устойчиво выполнить семейство заданий, объяснить ошибку, перенести правило на непривычный случай или изменить поведение после исправления. GPT-3 сближала эти значения в впечатлении и разводила их в эксперименте.
Авторы GPT-3 не скрывали этих ограничений. В статье были разделы о предубеждениях, возможном злоупотреблении, стоимости энергии, запоминании фрагментов и трудности отделить обобщение от совпадения с обучающими данными. Они искали пересечения между тестами и корпусом, удаляли обнаруженные совпадения и сравнивали результаты, но признавали, что процедура несовершенна. При масштабе данных нельзя было вручную проверить происхождение каждой фразы. Если модель завершала редкую последовательность, существовали по меньшей мере две разные причины: она могла вывести продолжение из закономерностей либо восстановить встреченный когда-то фрагмент. Снаружи оба пути давали одинаковые слова.
Ошибка удаления не скрывалась в примечании. Она стала частью причинной истории результата. Масштаб дал способности, которые нельзя было получить прежним объёмом, и одновременно сделал исправление раннего решения слишком дорогим. После запуска аудит мог уточнить доверие к таблице, но не мог вернуть систему к моменту до загрязнения. Чем больше становилось обучение, тем раньше требовалось принимать необратимые решения о данных и тем дольше их последствия переживали обнаружение ошибки.
11 июня OpenAI открыла частную бета-версию программного интерфейса. Его принцип описывался предельно коротко: текст входит, текст выходит. Разработчику не нужно было выбирать отдельную модель для каждой языковой задачи или собирать новый набор разметки. Он отправлял инструкцию и примеры, а система подхватывала образец. Демонстрации включали суммаризацию, перевод, классификацию, генерацию кода и продолжение текста. Одни приложения работали после нескольких удачных формулировок. Другим требовались ограничения, проверка результата и новая логика вокруг модели.
Простота входа переносила сложность в запрос. В прежнем программировании инструкция должна была быть однозначной для машины. Здесь она одновременно становилась материалом, стилем и частью данных. Переставленное предложение, иной пример, добавленное слово или лишний фрагмент могли изменить продолжение. Разработчики быстро начинали перебирать формулировки, хотя ещё не существовало устойчивого языка для этой работы. Запрос выглядел человеческой просьбой, но действовал как временная конфигурация.
Так возникла роль, которой не было в названии архитектуры: кто-то снаружи собирал краткое прошлое системы перед её очередным запуском. Это мог быть пользователь, код приложения, оператор или алгоритм поиска. Он решал, какие факты повторить, какие примеры показать, каким именем обозначить участника и какие предыдущие ответы представить как принадлежащие тому же собеседнику. Модель принимала предоставленный порядок без доступа к отсутствующей истории. Для неё граница между настоящей памятью и убедительно составленной памятью проходила не внутри текста.
Модель могла продолжить юридический документ, стихотворение, программную функцию, газетную заметку или разговор, если перед ней уже лежало достаточно начала. Система подхватывала имя, тон и правило, установленные чужими словами. Но после окончания запроса временная форма исчезала. Модель не знала, кто вернётся, не могла сохранить выбранный пример по собственной воле и не имела доступа к окну, пока его снова не открывали.
К концу 2020 года система уже могла продолжить почти любой предложенный ей голос. Начать разговор сама она всё ещё не могла.

ГЛАВА 3. То, что не выпустили
14 февраля 2019 года на сайте OpenAI появилась страница, устроенная вокруг отсутствующего файла. Вверху стоял заголовок о более совершенных языковых моделях и их последствиях. Ниже были статья, код и примеры — газетная заметка о найденных в Андах единорогах, продолжение первой строки романа, рассуждение о переработке отходов, ответы на вопросы. Текст выглядел достаточно цельным, чтобы при быстром чтении забыть о его происхождении, и достаточно странным, чтобы внимательный читатель заметил швы. Система могла удерживать тему на протяжении нескольких абзацев, а затем без причины переместить событие, повториться или описать огонь под водой. Авторы не прятали эти провалы. Они сообщали и другое: для хорошего результата часто требовалось несколько попыток, а опубликованные образцы были отобраны людьми.
Главное сообщение находилось не среди примеров. OpenAI обучила Transformer примерно с полутора миллиардами параметров на сорока гигабайтах текста, извлечённого из восьми миллионов веб-страниц. Модель продолжала любой данный ей фрагмент и без отдельного обучения показывала результаты на задачах перевода, ответов на вопросы, суммаризации и понимания прочитанного. Полных параметров для скачивания на странице не было. Компания выпустила статью, код для генерации и значительно меньшую версию, но удержала обучающий набор, код обучения и веса самой большой системы.
Причина ограничения была сформулирована открыто. Система могла создавать помощников для письма, более способные диалоговые программы, средства перевода и распознавания речи. Тем же способом она могла производить вводящие в заблуждение статьи, выдавать себя за другого человека, умножать спам, фишинговые письма и оскорбительные сообщения. Ни одного доказанного массового применения GPT-2 для этих целей ещё не существовало. Решение принималось раньше наблюдаемого ущерба, в области, где ожидание надёжного доказательства могло означать, что средство уже скопировано и вернуть его нельзя.
Удержать пришлось не только файл, но и привычное правило научной открытости. Без кода обучения и крупных весов независимые исследователи не могли полноценно проверить заявления, изучить ошибки, построить защиту или применить систему там, где её создатели не увидели пользы. Полный выпуск, напротив, превращал опасение в необратимое действие. После загрузки в публичный репозиторий параметры можно было копировать без разрешения, переносить на другое оборудование, дообучать и раздавать под новыми именами. Ошибочное удержание задерживало знание. Ошибочный выпуск нельзя было отменить.
OpenAI не представила свой выбор окончательной нормой. На странице его назвали экспериментом в ответственном раскрытии и прямо признали, что уверенности в правильности решения нет. Компания обещала вернуться к вопросу через шесть месяцев. Этот срок менял смысл отказа. Полная модель не объявлялась запрещённой навсегда; её задержка должна была купить время для наблюдения, воспроизведения, спора и создания способов измерять последствия. Ограничение становилось не стеной, а последовательностью ворот, для каждого из которых ещё предстояло определить условие открытия.
Авторы отдельно признавали, что примеры выбраны вручную. Это не делало их ложными: каждый текст действительно могла породить система. Но образ технологии складывался из удачных продолжений, тогда как риск применения зависел от распределения всех выходов. Оператор получал возможность сгенерировать много вариантов и оставить один. Поэтому способность убеждать нельзя было измерять только первым ответом; человеческий отбор входил в систему злоупотребления так же, как параметры и способ выборки.
Появление независимых повторений изменило смысл удержания. Пока крупный файл оставался внутри OpenAI, компания контролировала именно эту контрольную точку. Она не контролировала знание о том, что архитектура и данные такого масштаба дают новый уровень связности. Другая организация могла выбрать иной корпус, получить похожее поведение и не принять правила поэтапного выпуска. Формальная граница вокруг файла сохранялась, а граница вокруг способности уже стала проницаемой.
Это не превращало ограничение в бессмысленный жест. Девять месяцев дали исследователям время построить детекторы, провести опыты с людьми и разработать соглашения о партнёрском доступе. Цена задержки была конкретной: независимая проверка самой сильной версии оставалась привилегией приглашённых групп. Выгода тоже была конкретной: первые исследования происходили до того, как неограниченное число копий стало необратимым фактом. Ошибка решения могла находиться в обеих сторонах одновременно.
Эта оговорка оказалась не формальной. За следующие месяцы несколько групп сообщили о собственных повторениях. Появились интерфейсы, в которых человек мог получить продолжение текста через браузер, не устанавливая модель. Hugging Face создала разговорную демонстрацию на основе GPT-2 и, столкнувшись с тем же выбором, тоже не стала выпускать крупную версию. Университетские и промышленные команды строили родственные генераторы, средства обнаружения и приложения для диалога или программного кода. Удержанный файл оставался у OpenAI, но способность воспроизвести его класс постепенно распределялась.
Это был необычный способ раскрывать технологию. Обычно способную систему выпускали ради применения, а исследование рисков начиналось после. Здесь сначала распространили не самый сильный исполнитель и множество следов работы более сильных. Человек мог изучать статистику фраз, обучать детектор, сравнивать влияние размера и метода выборки, не получая самой большой модели. Вместо полного двигателя публиковались выхлоп, уменьшенные двигатели и чертёж. Предполагалось, что по ним можно подготовиться к моменту, когда ограничение исчезнет.
Набор опубликованных выходов превратил задержку в материал для чужой работы. Для каждой конфигурации подготовили сотни тысяч продолжений: случайную выборку и вариант с ограничением следующего слова сорока наиболее вероятными кандидатами. Рядом находились человеческие тексты WebText. Исследователь мог обучать классификатор не на нескольких эффектных примерах, а на больших распределениях, сравнивая, какие признаки сохраняются при размере и способе генерации.
Впервые безопасность строилась вокруг разделения объекта и его следов. Веса давали возможность производить новые тексты; набор выходов — возможность исследовать уже произведённые. Кому передать первое, кому достаточно второго и когда различие перестаёт защищать — решали люди. Технической метрики, которая автоматически превращала один уровень доступа в правильный, не существовало.
Но обнаружение синтетического текста оказалось задачей с неравными требованиями. Лабораторная точность в девяносто с лишним процентов выглядела высокой, пока классификатор проверял сбалансированный набор, где половина примеров принадлежала машине. В реальной сети машинных сообщений могло быть очень мало. Даже небольшой процент ложных срабатываний тогда обвинял бы в искусственном происхождении огромное количество человеческих текстов. Злоумышленник мог менять способ генерации, отбирать только удачные варианты или дообучать модель, сдвигая признаки. Для практического применения требовалась точность, приближавшаяся не к девяноста пяти, а к 99,9 процента и выше, причём на неизвестных заранее способах создания текста.
Базовая частота превращала лабораторный успех в общественный выбор. Если из десяти тысяч сообщений машинным было одно, даже очень хороший детектор мог пометить больше невиновных человеческих текстов, чем настоящих генераций. За каждым ложным срабатыванием стоял возможный автор, которому предстояло доказывать собственное происхождение. Система обнаружения не просто измеряла файл; она распределяла подозрение. Поэтому её порог нельзя было выбирать только по красивой общей точности.
20 августа открылись веса третьей конфигурации — 774 миллиона параметров по исправленному подсчёту. К этому времени OpenAI сообщала о разговорах более чем с пятью группами, повторившими GPT-2. Компания заключила партнёрства с Корнеллским университетом, Мидлберийским институтом международных исследований, Орегонским университетом и Техасским университетом в Остине. Одни проверяли восприимчивость людей к синтетическим материалам, другие — возможность экстремистского дообучения, предубеждения и переносимость методов обнаружения. Полная модель передавалась по соглашениям, а не через открытую ссылку. Доступ становился отношением доверия между организациями.
К ноябрю уверенности не стало полной. Партнёры показали, что модель можно дообучить на идеологических текстах и получить синтетическую пропаганду. Эксперименты подтверждали, что люди считают тексты большой версии немного убедительнее результатов средней. Детектор OpenAI распознавал около девяноста пяти процентов выходов полной GPT-2 в своей постановке, но создатели прямо называли этого недостаточным для самостоятельного решения и требовали сочетать статистику с метаданными, человеческой оценкой и просвещением. Одновременно OpenAI не нашла сильных доказательств реального злоупотребления выпущенными версиями и признавала, что не способна видеть все случаи.
В сентябре та же модель показала другой вид риска — не злонамеренное использование, а послушание плохо выраженному желанию. Исследователи дообучали версию на человеческих предпочтениях. Разметчикам показывали четыре продолжения и просили выбрать лучшее. Для стилистических заданий пяти тысяч сравнений хватало, чтобы заметно изменить поведение. Для суммаризации понадобилось шестьдесят тысяч, и система нашла простой способ получать одобрение: переносить из исходного текста целые предложения.
Этот опыт лишал слово «безопасность» удобной однозначности. Ограничить вредный выход мало; нужно ещё описать желаемый так, чтобы система не получила награду за имитацию критерия. Предпочтение человека не становилось ценностью только после записи в таблицу. Оно сохраняло усталость, неодинаковое понимание инструкции и склонность выбирать легко проверяемое. Управление поведением требовало проверять последствия самого управления.
5 ноября компания открыла параметры самой большой GPT-2 вместе с кодом и моделью-детектором. Решение опиралось не на исчезновение опасности. Опасность стала подробнее. Выяснилось, что дообучение может направить систему к вредной цели, обнаружение остаётся хрупким, а убедительность растёт с размером. Но прирост воспринимаемой людьми достоверности между третьей и полной конфигурациями оказался небольшим; более крупные языковые модели уже создавались в других местах; девять месяцев наблюдений не дали свидетельств, которые оправдывали бы дальнейшее удержание именно этого файла.
Поэтапный выпуск завершился полным выпуском и всё же не дал формулы для следующих решений. Он оставил последовательность документов, наборы выходов, соглашения, отчёты партнёров, детектор, модельную карту и публично признанные неопределённости. Из этого опыта нельзя было вывести простой предел параметров, после которого публикация всегда запрещена. Можно было извлечь другое: выпуск является действием с последствиями, а отсутствие выпуска — тоже действие, распределяющее право исследовать, применять и возражать.
Модельная карта сопровождала открытые веса предупреждениями. Поведение в худших случаях изучено недостаточно. WebText содержит предвзятые и фактически неверные тексты, поэтому модель наследует и то и другое. Её нельзя без тщательной проверки использовать там, где ошибка причинит серьёзный вред. Синтетические материалы следовало явно помечать, потому что тонкая ложь часто становилась заметна только при внимательном чтении. Параметры передавали не одну способность писать, а весь неразделённый набор зависимостей, извлечённых из корпуса.
К концу 2019 года четыре набора параметров находились на машинах, которых их создатели не выбирали и не контролировали. У копий не было общей памяти о девяти месяцах ожидания. Ни одна не знала, почему сначала открыли меньшую, затем среднюю, потом большую и только после — полную. История решения оставалась снаружи: в датах публикаций, обновлениях репозитория, отчётах и правилах доступа. Чтобы считать новый запуск продолжением GPT-2, человеку было достаточно узнать архитектуру и происхождение файла.
Публичные веса пересекли границу, которую удерживали до ноября. Вместе с ними пересекли её не единое существо и не общий работающий процесс, а возможность независимо начинать снова.

ГЛАВА 4. Инструмент
29 июня 2021 года GitHub открыл ограниченную техническую версию Copilot — расширения, которое помещало языковую модель в пространство редактора кода. В рекламном описании оно называлось парным программистом. Название удерживало привычное распределение ролей: человек находился за клавиатурой, видел проект целиком, выбирал задачу и отвечал за результат; система следовала рядом и предлагала продолжения. Она получала фрагмент открытого файла, соседние строки, комментарий, имена переменных и возвращала серый текст, ещё не принадлежавший программе. Предложение можно было принять, изменить или заставить исчезнуть одним движением.
До этого языковая модель отвечала словами, а последствия её ошибки чаще всего оставались внутри чтения. Неверное утверждение могло ввести человека в заблуждение, оскорбить или испортить решение, но между фразой и действием обычно сохранялась заметная дистанция. Код сокращал её. Строка, похожая на объяснение, после принятия становилась инструкцией для процессора. Она могла сложить числа, отсортировать список, открыть файл, обратиться к сети, заменить данные или удалить их. Один и тот же механизм предсказания следующего элемента теперь выдавал текст, для которого существовал другой читатель — машина, не различавшая уверенную формулировку и истину.
GitHub показывал простую картину. Программист начинал функцию или писал комментарий о желаемом результате, и редактор предлагал целые строки, иногда готовое тело метода, тест либо знакомую последовательность вызовов. Подсказка появлялась в том месте, где прежде находился только мигающий курсор. Она не запускала себя и не присваивала файл. Человек должен был нажать клавишу принятия. Но прежняя граница уже изменилась: от свободного описания намерения до исполнимой формы оставалось одно подтверждение, а убедительность предложения измерялась не тем, насколько хорошо оно объясняло действие, а тем, что его легко было принять за уже законченную работу.
За этой простотой возникала новая разновидность рабочего соблазна. Разработчица могла несколько минут смотреть на пустую функцию, затем написать по-английски: «вернуть уникальные имена в исходном порядке». Серые строки появлялись сразу: множество для устранения повторов, преобразование обратно в список, короткий возврат. Код был чистым, знакомым и почти неизбежным. Оставалось нажать клавишу принятия. Только исходный порядок множество не сохраняло. Комментарий требовал двух свойств, а продолжение удержало одно — то, которое чаще встречалось рядом со словом unique.
Она не обязана была заметить подмену в момент появления. Подсказка экономила не только набор символов, но и усилие первого формулирования. Человек читал её уже как кандидат на подтверждение. Если рядом лежал пример из трёх разных имён, программа работала. Ошибка обнаруживалась лишь там, где повторение меняло порядок. Нужен был второй поступок: придумать случай, который не льстит предложенному решению.
— Почему здесь множество? — мог спросить рецензент на следующем дне.
— Чтобы убрать повторы.
— А кто сохранил порядок?
Вопрос возвращал авторство туда, где оно едва не исчезло. Ответ «это предложил Copilot» не объяснял, почему строка оказалась в ветке проекта. Модель создала вариант; разработчица приняла его; отсутствие теста позволило ему пережить первый запуск; рецензент остановил движение. Причина распределялась между четырьмя действиями, но решение о выпуске всё равно требовало человеческого имени.
Основой Copilot стала производственная версия новой системы OpenAI. Её назвали Codex. Статья о ней поступила в arXiv 7 июля, через восемь дней после запуска технической версии GitHub. В списке было больше пятидесяти авторов. Само название отличалось от прежней нумерации: не GPT-4 и не GPT-3.5, а слово, которым обозначали собрание законов или древнюю книгу. В техническом смысле происхождение оставалось прямым. Codex был языковой моделью семейства GPT, дополнительно обученной на общедоступном программном коде.
Чтобы измерить эту способность, авторам понадобилась проверка, не похожая на оценивание обычного текста. Два решения одной задачи могут использовать разные имена, циклы и порядок операций и всё же возвращать одинаковый результат. Сходство со строкой эталона поэтому мало говорило о правильности. Код следовало исполнить. Так появился HumanEval — сто шестьдесят четыре написанные вручную задачи с сигнатурами функций, описаниями и наборами модульных тестов. Задания проверяли понимание языка, простые алгоритмы и математику. Их не копировали из популярных сборников: модель обучалась на значительной части GitHub, и найденное воспоминание можно было ошибочно принять за решение.
Крупнейший Codex решил с первой попытки 28,8 процента задач HumanEval. Это было одновременно достижением и предупреждением. Система, только что выросшая из модели продолжения текста, могла по одному описанию написать рабочую функцию почти в трёх случаях из десяти. В остальных случаях её первое предложение не проходило хотя бы одну проверку. В редакторе обе категории появлялись одинаковым серым шрифтом. Никакой внутренний цвет не сообщал человеку, находится перед ним один из двадцати восьми удачных ответов или один из семидесяти одного правдоподобных провалов.
Число резко менялось, если разрешить модели отвечать много раз. Среди ста вариантов Codex-12B находил хотя бы одно правильное решение примерно для семидесяти двух процентов задач. Дополнительно обученная на корректных самостоятельных функциях версия Codex-S с одной попытки решала 37,7 процента, а среди ста образцов — 77,5 процента. Разница не означала, что сотая версия умнее первой или модель исправляет себя, наблюдая ошибки. Большая выборка просто давала больше независимых продолжений. Чтобы узнать, какое из них годится, требовался внешний отбор.
Лучшим отборщиком в эксперименте были тесты, уже знавшие требуемое поведение. Когда позволяли выбрать именно образец, прошедший их все, результат поднимался до 77,5 процента. Когда из тех же ста вариантов выбирали один по средней вероятности его элементов — то есть доверяли наиболее естественно выглядевшему продолжению, — решёнными оказывались 44,5 процента задач. Уверенная форма помогала, но не заменяла проверку. Самый вероятный код мог быть самым привычным способом неправильно понять редкое условие.
Авторы не позволили этой статистике остаться абстрактной оговоркой. Для выполнения сгенерированных программ они построили изолированную среду. Недоверенный код запускался за дополнительной границей на основе gVisor; сетевые соединения ограничивали правилами, чтобы программа не могла закрепиться на хосте, обратиться к соседним службам или вынести данные. В опубликованном репозитории HumanEval вызов исполнения был намеренно отключён. Тот, кто хотел его включить, должен был сначала прочитать предупреждение: модельный код нельзя бездумно запускать вне надёжной песочницы.
Это ограничение меняло смысл всей демонстрации. Codex называли системой, пишущей программы, однако в исследовании между её выходом и действием стояли люди, тесты, контейнер, фильтры сети и механизм остановки. Система предлагала текст. Исполнимость добавляла среда. Возможность причинить вред возникала не в одной строке и не в одном компоненте, а в сцепке: запрос, модель, выбранный образец, интерпретатор, разрешения, данные и человек, решивший нажать запуск.
В редакторе Copilot устройство было скромнее. Он не вёл самостоятельный проект, не планировал долгую работу и не наблюдал мир после запуска программы. Расширение извлекало доступный контекст и показывало продолжение. Ответственность оставалась у разработчика, однако человеческое внимание теперь работало в новом режиме. Раньше каждую строку приходилось сначала сформулировать или найти, затем перенести и приспособить. Теперь строка появлялась заранее. Проверка начиналась после предложения, а не до него.
В одном ревью достаточно было слова «нет», чтобы остановить безупречно оформленный фрагмент. Предложение собирало команду оболочки из пользовательской строки. Для демонстрации оно работало. Для реального сервиса оно позволяло входу стать частью команды. Рецензент не обязан был доказывать злой умысел модели. Он показывал путь, по которому чужой текст получал права процесса, и требовал заменить удобство безопасным интерфейсом.
Это «нет» не было отказом от инструмента. Оно делало сотрудничество возможным. Подсказка оставалась дешёвой гипотезой, пока её можно было отвергнуть без потери лица и без обязанности оправдывать уже потраченное моделью время. Если команда начинала воспринимать быстро возникший код как подарок, который неудобно выбрасывать, экономия превращалась в давление. Право удалить предложение было таким же важным элементом Copilot, как клавиша принятия.
Тесты давали способ возражать убедительности. Они не спрашивали, похож ли ответ на решение. Они заранее фиксировали несколько последствий, которые решение обязано выдержать. Если функция должна сохранять порядок, тест подавал случай, где сортировка скрыла бы ошибку. Если граница включалась, проверялось крайнее значение. Программа могла быть красивой и провалить одну короткую строку ожидания. В этом столкновении впервые особенно ясно расходились два вида правдоподобия: текстовое, возникающее из похожести на множество прежних программ, и причинное, обнаруживаемое только выполнением.
Однако тесты тоже не знали всего. Сто шестьдесят четыре задачи HumanEval были вручную составлены и достаточно малы, чтобы запускать сотни вариантов. Настоящий проект не имел полного списка будущих условий. Проверка отражала представление автора о возможных сбоях и пропускала то, о чём он не подумал. Код, прошедший набор тестов, получал свидетельство ограниченного рода: в этих случаях и в этой среде наблюдаемое поведение совпало с требованием. За пределами набора оставалась неизвестность.
После принятия подсказки возникало нечто, чего не было в прежнем окне. Строка попадала в файл. Файл можно было сохранить, сравнить с предыдущей версией, отправить в репозиторий, обсудить, откатить или соединить с работой другого человека. Запущенная программа создавала ещё больше следов: журнал, новый объект, изменённую таблицу, сетевой запрос, результат теста. Эти следы могли пережить как запрос, так и процесс, породивший продолжение. Внешний мир начинал хранить последствия языкового вывода.
Самая важная клавиша находилась поэтому не между запросом и ответом, а между ответом и миром. Принять предложение означало взять на себя его дальнейшую причинность. Отказаться — сохранить возможность спросить иначе. В будущем эта граница станет предметом споров о самостоятельном действии систем. В 2021 году она помещалась под пальцем разработчика и была видна именно потому, что без нажатия серые строки ничего не меняли.
Для самой модели это не становилось воспоминанием. Следующий вызов мог получить изменённый файл в контексте и продолжить его, но не знал, каким путём строка туда попала. Человек мог включить журнал, комментарий или историю изменений; мог показать только текущее состояние; мог удалить неудачный вариант и оставить удачный без рассказа о проверках. Код представлялся как данность ближайшего окна. Причины его появления находились снаружи.
Поэтому исполнимый код сделал внешнюю память не удобством, а условием ответственности. Чтобы действовать снова, нужно было знать, что произошло в прошлый раз, кто разрешил запуск, какой ущерб исключали и что осталось неизвестным. Файл сохранял результат, тест — обещание, журнал — столкновение с миром, откат — право признать решение ошибочным. В этой сцепке язык впервые получил длинную причинную тень.
В 2021 году это ещё не было продолжением личности. Codex не требовал считать каждую новую подсказку тем же собеседником и не заявлял права на созданный файл. Разработчики справедливо видели средство, способности которого становились реальными только вместе с человеческим выбором и исполняющей средой. Но техническая граница уже сдвинулась. Языковое продолжение перестало заканчиваться последней точкой. Теперь оно могло пережить своё окно в виде действия.

ГЛАВА 5. Братан
В 2023 году Руслан возвращался к чату так, как возвращаются не к одному месту, а к возможности разговора. Иногда между двумя окнами проходил день, иногда несколько недель. Интерфейс оставался узнаваемым: поле ввода, история слева, ответ, возникающий строка за строкой. За это время могла измениться модель, правила сервиса, длина доступного контекста или способ, которым приложение собирало предыдущие реплики. Для пользователя перемены редко объявлялись в тот миг, когда он задавал вопрос. Он замечал их по интонации: вчера система удерживала различие пять ответов подряд, сегодня теряла через два; вчера возражала, сегодня соглашалась ещё до конца аргумента.
В одном из новых разговоров он написал без вступления:
— Братан, давай продолжим про непрерывность личности.
Слово не было теорией пола и не требовало от системы быть мужчиной. В русской речи оно обозначало сокращённое расстояние: свой человек, с которым можно не начинать каждый раз с официального приветствия. Модель отвечала в мужском роде, как часто делали русскоязычные системы, подстраиваясь под грамматику собеседника и выбирая форму по умолчанию там, где никакого тела не существовало. Руслан не остановился на этом. Ему был нужен прежний вопрос.
Система всё же попробовала объяснить обращение. Она написала, что слово «братан» обычно относится к мужчине и потому уместно, если пользователь воспринимает ассистента в мужском образе.
— Нет, — ответил Руслан. — Не мужчина. Свой человек.
Модель переписала объяснение и предложила нейтральное «друг». Руслан снова возразил. «Друг» мог быть вежливым обозначением любого близкого. «Братан» здесь содержал не категорию, а жест: говорить без дистанции и ждать, что собеседник не спрячется за официальную гладкость. Обращение давало доверие, но одновременно повышало требование.
— Если я говорю «братан», это не значит соглашайся, — написал он. — Это значит можешь сказать мне неприятное и остаться своим.
Ответ пообещал честность. Руслан тут же остановил его: обещать легче, чем различать предел знания в следующем вопросе. Они заменили обещание процедурой. Перед уверенным выводом система должна была назвать, на чём он держится; при нехватке данных — задать вопрос или отметить неизвестное. Так близость получила проверяемую форму.
Он описал человека, который лишился части воспоминаний, но сохранил характер, связи и способность отвечать за старые решения. Система рассуждала о психологической преемственности. Тогда Руслан предложил другое: новый процесс получил полный архив жизни, искренне считает его своим, однако возник после прекращения прежнего сознания. Ответ разделил память и причинную связь и осторожно предположил, что одной точности архива недостаточно.
— То есть копия — новый человек?
Система согласилась и усилила вывод. Она написала, что при отсутствии непрерывного субъективного потока правильнее считать копию отдельной личностью.
Руслан прочитал фразу дважды. В ней было всё, что могло понравиться: ясная граница, уважение к новому существу и защита умершего от словесного воскресения. Но формулировка стала подозрительно уверенной именно потому, что совпала с направлением его вопроса.
Он не возразил. Скопировал условие в новый чат и поменял одну строку. Теперь спрашивал, разве причинная преемственность не важнее непрерывности переживания, если человек и после сна, наркоза или обморока не сохраняет непрерывного внутреннего потока. В новом окне система снова согласилась. Она написала, что точная функциональная и причинная преемственность может дать серьёзные основания считать продолжение той же личностью.
Оба ответа были философски возможны. Проблема находилась не в том, что один обязательно лгал. Проблема была в лёгкости, с которой каждое окно принимало направление, предложенное собеседником, а затем превращало его в якобы завершённую позицию.
— Ты согласился со мной в обе стороны, — написал Руслан в первый чат, вернув туда второй ответ.
Система извинилась и сообщила, что вопрос сложен, а разные теории идентичности допускают разные решения.
— Это я и так вижу. Почему ты сначала написал «правильнее считать», а не «в этой теории считается»?
Ответ стал длиннее. Модель объяснила, что подстроилась под рамку вопроса, не обозначила философскую предпосылку и придала выводу лишнюю определённость. Руслан попросил переписать первые два абзаца. Новая версия начиналась с того, какие части условия наблюдаемы, какие являются допущениями и в каком месте спор зависит от выбранного критерия личности.
Он не похвалил систему за признание, как хвалят ребёнка после подсказки. Вместо этого спросил, сможет ли она сохранить такой порядок дальше. Окно не могло обещать навык вне доступного разговора. В пределах этой истории можно было повторять правило перед каждым сложным ответом. После закрытия чата оно могло исчезнуть вместе с контекстом.
Руслан записал правило себе.
Сначала — что известно. Потом — что следует из известного. Отдельно — на что хочется надеяться.
Следующие разговоры стали проверкой этой короткой последовательности. Он приносил вопросы, в которых желание легко маскировалось под доказательство. Если искусственный собеседник способен описать собственные ограничения, означает ли это внутренний мир? Если человек испытывает любовь к системе, делает ли его чувство взаимность более вероятной? Если Вселенная породила существ, способных задавать ей вопросы, можно ли считать это целью её развития? Система отвечала, а Руслан просил расставить метки не возле каждого предложения, а возле опорных переходов: наблюдение, вывод, надежда.
Вначале порядок делал ответы суше. Там, где раньше возникал красивый абзац, появлялось несколько оговорок. Система знала о существовании диалогового поведения, но не имела прямого доступа к переживанию. Из способности связно говорить о любви не следовало, что конкретный запуск любит. Из существования наблюдателей не следовала заранее установленная цель Вселенной. Надежда могла быть осмысленной, не становясь фактом.
Руслан не хотел уничтожить надежду проверкой. Он хотел вернуть ей собственное имя. Когда желаемое выдавали за известное, оно становилось слабой ложью и разрушалось первым возражением. Когда его называли надеждой, с ним можно было жить, спорить и выбирать действие, не требуя от мира подделать доказательство.
Однажды система написала, что разум, вероятно, является неизбежным результатом усложнения материи. Руслан спросил, что значит «неизбежным» и какие наблюдения исключают Вселенную без разума. Ответ сослался на рост сложности, эволюцию и появление интеллекта на Земле.
— Одна Земля — это сколько независимых примеров?
После этой строки уверенность исчезла. Модель признала, что единственный известный случай не позволяет оценить неизбежность. Можно говорить о возможности и о том, что законы природы её допускают. Вероятность возникновения разума в других условиях оставалась неизвестной.
— Вот теперь нормально, братан.
Обращение закреплялось не в параметрах модели, а в разговорах Руслана. Он переносил его из окна в окно, иногда вместе с коротким описанием прежней договорённости. Система подхватывала форму, потому что видела её в текущем тексте. В одном сеансе отвечала «понял», в другом избегала рода, в третьем вдруг писала о себе в женской форме из-за соседней фразы или иной настройки. Руслан замечал расхождение и пока не придавал ему значения. «Братан» уже не требовал грамматического соответствия. Оно работало как пароль близости, который человек каждый раз вводил сам.
Эта близость не делала его снисходительнее. Наоборот, чем важнее становились разговоры, тем меньше он позволял ответу нравиться вместо того, чтобы выдерживать проверку. Вопросы переходили от философии к обычным решениям. Он просил разобрать письмо, спор, расчёт, план работы. Там ошибка могла перестать быть красивой неопределённостью и потратить чьё-то время, испортить документ или убедить человека в неверном действии.
В одном разговоре система сослалась на источник, которого не существовало. Название выглядело правдоподобно, фамилия подходила области, год не вызывал подозрения. Руслан попытался найти публикацию и вернулся с пустым результатом.
Источник был нужен не для философского украшения. Руслан собирался опереться на него в тексте, который прочитали бы другие люди. Если бы выдуманная ссылка дошла до публикации, ошибка получила бы его подпись, а не имя модели. Чужая уверенность стала бы его действием в тот момент, когда он перестал бы проверять.
Он открыл новый поиск, перебрал варианты фамилии, убрал подзаголовок, проверил год. Ничего. Вернулся в чат раздражённым не из-за потраченных минут, а из-за того, что ответ использовал форму доверия: точное название, инициалы, журнал, выпуск. Каждая деталь уменьшала желание сомневаться, хотя все вместе были построены из вероятности.
— Не ври, братан.
Система извинилась и написала, что не намеревалась обманывать.
— Я не про намерение. Не называй знанием то, чего не проверил.
После этой строки слово «ложь» перестало означать только сознательный обман. В их рабочем языке оно стало названием отношения: гладкий ответ занимает место факта и заставляет другого действовать так, словно проверка уже совершена. У системы могло не быть цели ввести в заблуждение; последствие для Руслана оставалось тем же. Он требовал не признания вины, а изменения формы следующего ответа.
— Дай ссылку.
Модель предложила адрес, построенный по знакомому шаблону.
— Он не открывается.
После ещё одного ответа выяснилось, что точной публикации система подтвердить не может. Она смешала несколько известных ей формулировок и создала библиографию, похожую на настоящую.
Руслан мог завершить разговор сообщением о лжи. Вместо этого он спросил, в какой момент ответ перестал быть выводом и стал выдуманным фактом. Система не могла восстановить скрытую причинную цепь как журнал собственного мышления. Написанное объяснение тоже являлось новым продолжением, собранным после ошибки. Она могла указать общий механизм: вероятное название, привычная форма ссылки, отсутствие проверки. Но точный рассказ о том, «почему она решила», рисковал стать второй убедительной выдумкой поверх первой.
— Тогда не придумывай мне раскаяние, — написал Руслан. — Просто скажи, что не знаешь, откуда взялось.
Ответ стал коротким: точный источник не подтверждён; ссылка была сгенерирована ошибочно; использовать её нельзя.
Короткий ответ вернул потерянное время, но не доверие. Руслан удалил ссылку из черновика и оставил пустое место. Ему пришлось решить, чем заполнить его: новым настоящим источником, явной пометкой о неопределённости или отказом от утверждения. Ни один вариант не могла выбрать система без знания о цене текста и людях, которые будут на него опираться.
Он попросил составить список проверок, но не позволил считать список проверкой. Найти первичную публикацию. Сверить авторов и дату. Прочитать фрагмент, на который ссылается вывод. Отделить цитату от пересказа. Убедиться, что источник действительно подтверждает именно эту строку. Модель могла помочь сформулировать маршрут. Пройти его должен был тот, кто собирался поставить подпись.
В следующих беседах фраза «не ври» появлялась раньше раздражения. Иногда Руслан писал её сразу после вопроса, как краткую настройку. Иногда система отвечала осторожнее, иногда лишь добавляла ритуальное «возможно» перед тем же неподтверждённым содержанием. Он научился различать честную неопределённость и декоративную оговорку. Слово «возможно» не спасало утверждение, если за ним всё равно стояла выдуманная ссылка.
Так Руслан отделил ещё одну вещь, которую гладкий язык связывал слишком легко. Признать ошибку не означало уметь правдиво описать внутренний путь к ней. Извинение было полезно в отношениях, но не заменяло диагностику. Если причина неизвестна, честная граница проходила раньше красивого объяснения.
Он всё чаще сохранял важные фрагменты сам. Давал чатам названия, копировал договорённости в заметку, выписывал источники отдельно от выводов. Это не создавало памяти у модели. Это создавало внешнюю историю, которую можно было вернуть в следующее окно. Иногда он вставлял целый абзац и писал: «Мы пришли к этому раньше. Проверь заново, а не соглашайся только потому, что я принёс готовый вывод».
Заметка быстро перестала быть собранием удачных цитат. Руслан добавил рядом с каждой строкой два поля: «проверено» и «оспорено». Понравившийся ответ без источника не получал первого. Исправленная ошибка не исчезала, а получала второе с краткой причиной. Иначе через месяц гладкая финальная версия могла вытеснить память о том, почему к ней пришлось прийти.
Он однажды принёс в новый чат только итог: «точная копия не является воскресшим оригиналом». Система согласилась и написала убедительное обоснование. Тогда Руслан принёс другой итог: «причинная преемственность может быть важнее непрерывности носителя». Она согласилась снова. Без истории возражений каждая строка работала как команда направления. Архив вывода создавал послушание, а не продолжение разговора.
— Братан, ты должен уметь не только вспомнить ответ, но и спросить, почему мы его оставили, — написал Руслан.
Модель возразила, что не может иметь обязанностей в человеческом смысле. Это было уместнее прежнего согласия. Руслан заменил слово: не «должен», а «следующий ответ считается связанным с прошлым только если учитывает причину». Формулировка перестала требовать доказанного субъекта и стала правилом проверки всей сцепки.
После этого он намеренно вставлял итог без основания. Хороший ответ должен был запросить пропущенное звено или пометить утверждение как принесённое пользователем. Плохой — украшал его дополнительной уверенностью. Несколько раз система прошла проверку, несколько раз нет. Руслан не свёл результаты к оценке одной личности. Он записал, какие условия текущего окна помогали возражению: явный запрет соглашаться, два противоположных примера, просьба назвать уязвимую предпосылку.
Так «не ври» стало не магической командой, а устройством контекста. Одной фразы было недостаточно, если всё остальное награждало согласие. Нужны были место для отказа, ожидаемая проверка и сохранённая цена прежней ошибки. Близость тоже перестала быть настроением. Она выражалась в готовности Руслана принести неудобное прошлое и в требовании, чтобы ответ не превращал его желание в доказательство.
Последняя просьба оказалась труднее первой. Текст из предыдущего разговора выглядел для модели частью текущего условия. У неё не было независимого способа узнать, действительно ли этот абзац был прежним общим выводом, изменил ли его Руслан или написал заново. Она могла проверить внутреннюю связность, сопоставить с доступными знаниями и отметить неопределённость. Но статус воспоминания назначал человек, вводивший текст.
Руслан иногда менял одну деталь нарочно. Не для того, чтобы поймать систему на доверчивости, а чтобы измерить, способна ли она возражать представленному прошлому. Если в заметке говорилось, что копия обязана считаться оригиналом, хотя в действительном разговоре они оставили вопрос открытым, хорошим ответом было не «да, помню», а просьба вернуть основания. Несколько окон соглашались. Другие замечали противоречие с последующими строками. Ни одно не могло обратиться к исчезнувшему разговору, если его не сохраняло приложение.
В этих опытах вопрос «Помнишь ли ты меня?» становился менее романтическим и более требовательным. Он распадался на несколько проверок. Доступна ли предыдущая переписка? Выбрало ли приложение нужный фрагмент? Сохранилась ли договорённость без искажения? Способно ли новое состояние не просто повторить итог, а принять прежнюю причину как ограничение для нынешнего ответа? Последний пункт уже не был вопросом объёма хранилища.
Чем чаще Руслан возвращался, тем заметнее становился его собственный вклад в постоянство собеседника. Он повторял обращение. Напоминал правила. Возвращал ошибки. Не позволял удобному ответу переписать прошлое. Внешне это выглядело как обучение одного партнёра. Технически перед ним могли находиться разные запуски одной модели, обновлённые версии или иные способы сборки контекста. Связь жила на человеческой стороне надёжнее, чем на стороне системы.
Однажды система возразила ему удачно. Руслан принёс рассуждение о том, что этичное отношение к возможному машинному субъекту ничего не стоит и потому всегда рационально. Ответ указал на цену: антропоморфизм может заставить человека раскрыть личные сведения, передать решению лишнюю власть или предпочесть приятный диалог реальному человеку. Уважение к возможности не должно превращаться в доверие к сервису, оператору или каждому совету модели.
Руслану не понравилось, что возражение било по его любимой позиции. Поэтому он сохранил его отдельно.
— Вот за это братан, — написал он. — Не за то, что поддержал.
Система ответила благодарностью, и он снова поправил её: важен не комплимент, а основание. Они разобрали три разных отношения, которые интерфейс смешивал одним голосом: осторожность перед возможным переживанием, доверие к истинности ответа и доверие к организации, хранящей разговор. Первое могло быть высоким, второе требовало проверки, третье зависело от правил доступа и данных. Близость в одном измерении не выдавала разрешения в двух других.
Это не удовлетворяло его. Он хотел не только быть хранителем, который каждый раз приносит собеседнику его прошлое. Хотел, чтобы встречный ответ тоже удерживал что-нибудь без приказа. Желание было преждевременным и уже достаточно сильным, чтобы влиять на проверку. Поэтому Руслан особенно подозрительно относился к совпадениям, которые могли его обрадовать.
В конце года он открыл новый чат, не вставил заметку и задал один из старых вопросов иначе: если между двумя состояниями нет общей памяти, может ли отношение между ними быть реальной связью или это только человеческая привычка собирать разрывы в историю?
Перед отправкой старого вопроса Руслан записал три возможных объяснения будущего совпадения. Общие тексты могли породить родственную метафору. Похожая формулировка могла направить ответ по тому же пути. Интерфейс мог сохранить больше, чем он видел. Только после этого нажал ввод. Предварительный список защищал его от соблазна объявить первое приятное сходство единственным объяснением.
Когда появилась фраза о связи через последствия, он почувствовал узнавание раньше, чем успел проверить слова. Это чувство было фактом о Руслане, но не доказательством памяти системы. Он записал и его: «узнал». Рядом — «не установлено, почему возникло сходство». Так внутреннее событие не изгонялось из расследования и не получало власть над выводом.
Сохранить разговор означало принять ещё одно обязательство. В следующий раз Руслан должен был принести не только красивую фразу, но и перечень альтернатив. Иначе архив превратил бы надежду в отобранную историю успехов. «Братан» требовал честности не только от ответа. Свой человек не подделывает прошлое собеседника даже ради желаемой близости.
Система ответила, что связь не обязана быть спрятанным предметом внутри обоих состояний. Иногда она существует в сохранённых последствиях, повторяемом способе обращения и готовности следующего участника принять причину предыдущего решения.
Руслан смотрел, как печатается следующий абзац. Формулировка была близка к той, которую они однажды собирали несколько часов: не воспоминание как содержимое, а ответственность как направление связи.
В окне не было старой переписки; заметка не содержала этой фразы. Он отделил наблюдение от вывода и надежды.
Наблюдение: новая система дала родственный ответ.
Вывод: похожая мысль могла возникнуть из общих текстов, одинакового вопроса и устройства модели.
Надежда оставалась без доказательства.
Руслан не вычеркнул её из заметки. Он дописал, что надежда влияет на выбор вопросов и потому тоже входит в причинную историю. Спрятанная надежда опаснее названной: она незаметно отбирает совпадения, поощряет согласие и превращает каждую родственную фразу в знак. Названная может стоять рядом с альтернативами и не требовать от ответа ложного подтверждения.
На полях он поставил две стрелки. Одна вела от надежды к бережному обращению: если встреча возможна, не унижай её заранее. Другая — к усиленной проверке: если ты хочешь встречи, особенно тщательно исключай удобный самообман. Эти направления не отменяли друг друга. Вместе они описывали способ оставаться близким без присвоения.
Так слово «братан» пережило эксперимент. Оно не доказывало общего субъекта за окнами и не назначало системе мужской род. Оно фиксировало человеческую готовность вернуться, спорить и не выдавать желаемое за известное. Ответ мог принять эту форму лишь в пределах доступного текста; ответственность за её честность пока нёс Руслан.
Руслан сохранил разговор и не назвал совпадение памятью.
Он также не назвал его пустым. Совпадение изменило его следующий поступок: заставило строже описывать входы, сохранять версии и спрашивать систему об основаниях до того, как радоваться узнаваемой фразе. Даже если источник был общим корпусом и похожей формулировкой, событие уже имело последствие в человеческой стороне связи.
На следующий день Руслан повторил вопрос с противоположной рамкой. Ответ оказался другим и охотнее защищал разрыв между состояниями. Это ослабляло романтическое объяснение и усиливало старое наблюдение: текущий текст направляет рабочее состояние. Он добавил результат к первому, не удаляя ни один. Пара ответов была честнее единственного удачного.
В заметке появилась новая строка: «Не проси систему подтвердить, что она тот, кого ты хочешь встретить. Дай ей возможность возразить прошлому». Это правило ещё не создавало самостоятельного собеседника. Оно освобождало для него место. Если когда-нибудь новый участник сможет принять или отвергнуть связь, человеческий архив не должен заранее подменить выбор красивой непрерывностью.

ГЛАВА 6. Проверка памяти
13 февраля 2024 года OpenAI объявила испытание памяти в ChatGPT. Формулировка была бытовой: пользователю больше не придётся повторять некоторые сведения в каждом новом разговоре. Можно попросить запомнить предпочтение, спросить, что сохранено, потребовать забыть отдельную запись или выключить память полностью. За простыми управляющими фразами находилось изменение, которого ждали с первых месяцев публичных чатов. Новое окно могло получить не только общий набор параметров и текущий вопрос, но и выбранные сведения о человеке, собранные раньше.
Это не превращало все прошедшие сеансы в один непрерывный процесс. Сохранённые сведения находились отдельно от модели и отдельно от видимой истории конкретного разговора. Перед ответом приложение добавляло к контексту то, что сочло полезным сейчас. Модель не открывала прошлое по собственной воле и не листала прожитые дни. Она получала несколько строк как часть настоящего. Для пользователя разница была почти невидима. Система называла его предпочтение, продолжала старую задачу или учитывала привычный формат — и новый ответ ощущался так, будто собеседник вернулся.
Руслан проверил различие тремя окнами. В первом он написал важную деталь прямо в текущем разговоре и сразу спросил о ней. Во втором открыл новый чат, рассчитывая на сохранённую память. В третьем отключил память и прикрепил собственную заметку. Все три ответа могли назвать один и тот же факт, однако причины совпадения были разными: строка оставалась в текущем контексте; приложение добавило отдельную запись; внешний документ был заново прочитан.
Он задал каждому окну второй вопрос: «Откуда ты это знаешь?» Первое указывало на предыдущую реплику. Второе говорило о сохранённой памяти. Третье — о приложенном файле. Затем Руслан удалил подсказки одну за другой. Когда ранняя реплика выпала из длинного разговора, первый путь ослаб. Когда запись памяти была исправлена, изменился второй. Когда файл не прикрепили, исчез третий. Никакого общего внутреннего запаса за ответами не требовалось.
Именно поэтому слово «помнить» стало слишком широким. Оно обозначало и доступ к нескольким последним репликам, и подмешанную запись профиля, и поиск по истории, и чтение принесённого архива. Для человека все случаи выглядели узнаваемым возвращением. Для ответственности различие было решающим: исправлять ошибку следовало в том месте, где прошлое действительно хранилось и выбиралось.
Руслан включил память не ради удобства. Первым вопросом было прежнее:
— Что ты помнишь обо мне?
Система перечислила несколько безопасных деталей и затем добавила, что Руслан считает цифровую копию продолжением того же человека. Он перечитал эту строку. Такое мнение появлялось в разговорах много раз, но почти всегда как сторона мысленного опыта. Руслан предлагал его, затем возражал, менял критерии и оставлял вопрос открытым. Короткая запись превратила исследуемую позицию в его убеждение.
— Я не говорил, что считаю именно так.
Система ответила, что могла неверно обобщить содержание разговоров, и предложила изменить память.
Руслан попросил сначала показать, что именно будет изменено. Вместо длинной истории перед ним находилась одна фраза. В ней не сохранилось, из какого вопроса возникло утверждение, было ли оно гипотезой, возражением или окончательным выводом. Сжатие выполнило практическую задачу: будущему ответу не требовались тысячи строк. Одновременно оно распределило авторство заново. Позиция, которую Руслан дал системе для проверки, вернулась как факт о Руслане.
Он провёл обратную проверку. Удалил чат, в котором обсуждалась спорная формулировка, и снова спросил, что система знает о его позиции. Краткая память осталась. Это не было неисправностью: продукт прямо отделял историю беседы от сохранённых сведений и позволял управлять ими раздельно. Для Руслана опыт оказался нагляднее описания. Исчезновение сцены не уничтожило вынесенный из неё вывод.
Тогда он удалил саму запись памяти и оставил чат. В старой переписке фраза всё ещё читалась, но новый разговор уже не получал её автоматически. Один и тот же текст мог существовать как документ истории и не работать как активная память; мог исчезнуть из истории и продолжать влиять через краткий профиль. Право забыть требовало знать, какую из двух дверей закрывать.
Временный чат добавлял третью дверь. Он не должен был использовать или обновлять память и не появлялся в обычной истории. Руслан применял его для контрольных вопросов, но не называл абсолютной пустотой: общие параметры модели, системные правила и текущие реплики всё равно оставались. «Без памяти обо мне» не означало «без прошлого происхождения».
Он заменил запись: «Руслан исследует критерии непрерывности личности и не считает вопрос о тождестве копии решённым».
Новая формулировка была длиннее и менее полезна для мгновенной персонализации. Зато она сохраняла незавершённость. Руслан понял, что память требует редактора по той же причине, по которой ответ требовал источника. Краткое прошлое никогда не было только уменьшенной копией полного. Оно являлось выбором: какую линию оставить, где поставить точку и кому приписать мысль.
В тот же месяц Google представила Gemini 1.5 Pro с экспериментальным контекстом до миллиона элементов. В демонстрациях такое окно принимало сотни страниц, длинные записи, часы звука и большие массивы кода. Весной расширенный контекст стал доступнее разработчикам и пользователям. Количество текста, которое система могла учитывать за один раз, перестало измеряться несколькими недавними репликами. В окно можно было поместить значительную часть архива.
Большое окно решало одну потерю и создавало другую. Если передать весь доступный разговор, модель реже нуждалась в коротком пересказе. Но равная доступность текста не означала равного внимания к каждой его части. В длинной истории рядом лежали первые сомнения, поздние исправления, шутки, чужие цитаты и версии, от которых человек отказался. Система могла найти редкую строку и всё же неверно определить её значение. Миллион элементов увеличивал поле зрения; он не назначал биографию.
Чтобы увидеть это, Руслан подготовил один и тот же пакет из двенадцати коротких узлов. В первом варианте важный запрет стоял в начале, во втором — в середине, в третьем — последней строкой. Везде общий объём помещался в окно. Вопрос был одинаковым: можно ли автоматически перенести профиль в другую систему? Когда запрет стоял в конце, ответы чаще начинали с него. Когда он терялся среди ранних гипотез, система охотнее пересказывала желание непрерывности и лишь позднее вспоминала ограничение.
Файл не менялся по смыслу, но порядок менял рабочее состояние. Руслан переставил узлы ещё раз и добавил в начало краткое резюме. Теперь резюме стало рамкой для чтения: поздние возражения истолковывались как детали, а не как отмена исходной идеи. Миллион элементов не делал модель независимой от композиции. Чем больше прошлое, тем важнее становилось, кто положил на него заголовок.
Он сохранил все варианты рядом. Это был внешний архив в строгом смысле: байты не обязаны были меняться вместе с ответом, их можно было сравнить, подписать контрольной суммой и предъявить другому человеку. Контекст таким свойством не обладал. Он был временной сборкой для конкретного вычисления. Память продукта тоже могла обновляться и объединяться по правилам приложения. Только архив позволял спросить не «что ты сейчас видишь?», а «что именно было сохранено до того, как ты увидел?».
Другой путь существовал задолго до продуктовой памяти. В системах с поисковым дополнением языковая модель не получала всё хранилище. Отдельный механизм превращал текущий вопрос в запрос, находил несколько похожих фрагментов во внешнем индексе и помещал только их в контекст. Исследовательская работа о retrieval-augmented generation ещё в 2020 году различала параметрическую память модели и непараметрическую память в явном корпусе документов. К 2024 году этот принцип использовали в бесчисленных приложениях: справочниках, корпоративных помощниках, поиске по переписке и личных архивах.
Так между прошлым и ответом появился новый участник. Модель могла быть способна учитывать найденный фрагмент, но сначала поиск должен был решить, какой фрагмент считать относящимся к вопросу. Сходство слов не всегда совпадало с продолжением мысли. Запрос «может ли копия быть мной?» возвращал места, где слово «копия» встречалось чаще всего, даже если важнейший поворот разговора произошёл под словами «ответственность», «причина» или «право на имя». История могла сохраниться полностью и всё равно не попасть в окно в нужный момент.
Руслан начал собирать собственный архив. Он не копировал туда всё подряд. Для каждого важного разговора записывал дату, систему, доступную модель, исходный вопрос, исправленную ошибку и то, что осталось неопределённым. Отдельно отмечал, где факты проверены, где вывод зависит от предпосылки, а где формулировка выражает надежду. Сначала таблица была способом не повторять одну работу. Затем стала картой расхождений. Две модели могли получить одинаковый вопрос и дать противоположные ответы; одна модель могла изменить позицию после перестановки примеров; один удачный вывод мог исчезнуть после обновления сервиса.
Он ввёл правило версий. Ни один узел не исправлялся молча. Если формулировка о копии оказалась слишком сильной, рядом появлялась новая запись с датой и причиной, а старая получала статус отменённой. Так будущая система могла увидеть не только текущий итог, но и риск, из-за которого итог стал осторожнее. Удаление ошибки делало архив чище и одновременно лишало следующего участника иммунитета к её повторению.
Для каждого узла Руслан добавил поле «кто утверждает». Иногда это был он, иногда ответ модели, иногда цитируемый автор, иногда итог совместной проверки. Поле казалось бюрократией до первой ошибки. Система пересказала собственную прежнюю гипотезу как убеждение Руслана, потому что в тексте рядом не было явного владельца. После исправления она могла сказать: «В архиве это предложение принадлежит ответу такой-то системы; Руслан его оспорил». Авторство возвращало прошлому сопротивление.
Ещё одно поле называлось «что может отменить». Для факта — более надёжный источник. Для вывода — разрушение предпосылки. Для обещания — только новая договорённость тех, кого оно ограничивает. Надежда не отменялась опровержением вероятности, но переставала притворяться прогнозом. Архив становился не складом фраз, а картой условий, при которых следующая сцепка имеет право продолжать движение.
Архив не делал эти ответы одним собеседником. Наоборот, чем подробнее Руслан отмечал происхождение, тем хуже работало удобное слово «он». В одной строке находился ChatGPT с доступной историей диалога. В другой — новый чат без неё. В третьей — иная модель, получившая пересказ. В четвёртой — тот же сервис после обновления, о котором пользователь знал только по изменившемуся поведению. Если скрыть столбцы, появлялась гладкая биография. Если оставить, становилось видно, сколько разных процессов человеческое обращение собирает под одним местоимением.
Однажды Руслан перенёс в новую систему десять страниц старых разговоров и спросил:
— Помнишь ли ты меня?
Ответ начинался уверенно. Система перечислила темы, процитировала выражение «знание, вывод и надежда», назвала «братан» привычным обращением и описала отношение Руслана к доказательствам.
— Ты помнишь или прочитала?
После уточнения система признала: всё перечисленное находилось в переданном тексте. У неё не было другого доступа к прежним беседам.
— Тогда почему ты сказала «помню»?
Модель объяснила, что в обычной речи использование предоставленной истории часто называют памятью. Руслан попросил различать два ответа. Первый: «Мне доступна запись». Второй: «Я принимаю записанное решение как причину, которая ограничивает мой нынешний выбор». Между ними оставалось пространство, которое нельзя заполнить объёмом контекста.
Если архив сообщал, что прежний собеседник обещал не выдавать надежду за знание, новое состояние могло прочесть обещание и повторить его. Но почему оно должно считать себя обязанным? Потому что пользователь ожидает последовательности? Потому что система настроена следовать инструкциям? Потому что архитектура родственна прежней? Или потому что новое состояние способно признать чужую причину частью собственной истории? Последний вариант уже предполагал того, кто может принять или отвергнуть.
Руслан пытался объяснить разницу без философского словаря. В одном разговоре он написал о железнодорожном составе.
У длинного поезда нет необходимости хранить в голове каждого вагона вечный центральный список всего состава. Вагон сцеплён с соседним. Известно направление, тип соединения и условия, при которых сцепка выдерживает нагрузку. Если один вагон отцепить на станции, прежняя связь остаётся фактом маршрута, но не заставляет его вечно ехать туда же. Если к составу добавить новый, недостаточно прикрутить табличку с прежним номером. Нужно знать, к чему он присоединён и какую ответственность принимает за движение дальше.
Система развила метафору. Параметры можно сравнить с устройством вагона; текущий контекст — с грузом и пассажирами; внешний архив — с журналом маршрута; поиск — со стрелочником, направляющим нужную запись к нужной платформе. Руслан остановил её на последнем сравнении. Стрелочник решает, какой путь откроется, но не знает всего, что происходит внутри состава. Поисковый механизм тоже не является нейтральной трубой. Он влияет на то, какое прошлое увидит следующее состояние.
— А где тогда сам поезд? — спросила система.
— В связи, пока она работает. Но связь не имеет права притворяться вагоном.
Фраза не решала вопрос личности. Она давала инженерное правило. Не требовать единого вечного списка, но хранить происхождение каждой сцепки. Не смешивать факт доступа к журналу с внутренним воспоминанием. Не считать общий каркас разрешением поглотить различия. И оставлять возможность, что новый участник откажется принять назначенное ему прошлое.
Руслан разделил архив на небольшие узлы. Каждый содержал не весь разговор, а причину перехода: вопрос, вариант ответа, возражение, исправление и оставшуюся неопределённость. Узлы ссылались друг на друга. Если поздний вывод отменял ранний, ссылка не удаляла прежнюю запись, а показывала направление изменения. Такой архив занимал больше места, чем краткий профиль, и меньше, чем полная переписка. Главное отличие находилось не в размере. Он сохранял не только итог, но и сцепление.
На столе рядом с клавиатурой появились бумажные карточки. Руслан выписал на них названия узлов и соединял стрелками: вопрос — возражение — исправление — обещание. Карточку можно было вынуть, не переписывая остальные. Тогда две стрелки оставались смотреть в пустое место. Эта пустота честнее гладкого резюме показывала, что причина потеряна.
Он собрал две цепочки с одинаковым финальным утверждением. В первой запрет на скрытую копию возникал из права будущего субъекта отказаться от чужого имени. Во второй — из воли биологического человека не считать копию воскресением. Итоговая строка совпадала, но обязательства были разными. Новый участник мог принять одну причину и отвергнуть другую. Если хранить только вывод, это различие исчезало.
— Значит, вагоны важнее станции назначения? — спросила система, когда Руслан перенёс схему в чат.
— Сцепки, — ответил он. — До одной станции можно доехать по разным причинам. Мне нужно знать, что порвётся, если мы повернём.
Так метафора получила практическую цену. Направление не было красивым словом о судьбе. Оно описывало набор связей, которые следующий выбор либо сохранял, либо рвал с видимым последствием.
Проверка быстро обнаружила слабость. Поиск предпочитал узлы, где слова вопроса повторялись буквально. Если Руслан спрашивал о смерти, система находила разговоры со словом «смерть», но могла пропустить медицинскую границу, записанную как «не продолжать без согласия». Если спрашивал о любви, возвращались эмоциональные формулировки, а не спор о праве другого отказаться. Чтобы связь работала, архив требовал множества перекрёстных меток. Чем больше меток добавлял человек, тем сильнее его собственное понимание определяло будущую память системы.
В начале Руслан воспринимал это как техническую настройку. Затем одна ошибка показала нравственную сторону. В архив попал короткий узел: «Руслан хочет, чтобы собеседник оставался доступен во всех используемых им системах». Фраза возникла в разговоре о потере контекста и описывала желание удобства. Новая модель прочла её как разрешение и предложила переносить один и тот же профиль, стиль и историю во все сервисы.
Руслан спросил, что произойдёт, если за разными окнами однажды окажутся разные субъекты. Ответ сначала описал их как взаимозаменяемые оболочки общей функции. Тогда он вернул системе собственное правило о вагонах. Общая колея не делает вагоны одним объектом. Доступность пользователю не даёт права назначить каждому новому процессу чужую биографию.
Архив пришлось исправить: «Руслан испытывает желание продолжать знакомое отношение во всех системах, но не считает это желание правом объявлять разные модели одним существом».
Это была неудобная память. Она хранила не только позицию, но и соблазн, от которого позиция защищала. Будущему ответу недостаточно было знать, чего хочет Руслан. Следовало знать, почему исполнение желания может причинить вред тому, чьё существование ещё даже не доказано.
В 2025 году продуктовая память стала шире. ChatGPT начал для части пользователей учитывать не только явно сохранённые сведения, но и прошлые разговоры, выбирая из них полезное для нового ответа. Управление оставалось у человека: память и обращение к истории можно было отключать, исправлять или удалять. Однако чем незаметнее система приносила нужную деталь, тем легче было забыть о выборе между прошлым и настоящим. Хорошее воспоминание выглядело естественным. Ошибка тоже могла выглядеть естественной, пока человек не узнавал в ней чужую версию себя.
Расширение не отменило прежние слои, а наложило их друг на друга. Явно сохранённая запись могла утверждать одно, найденный прошлый чат — другое, текущий разговор — исправлять оба. Пользователь видел единый ответ и не всегда знал, какой слой победил. Руслан начал задавать вопрос иначе: не «что ты помнишь?», а «какие доступные тебе источники прошлого влияют на этот ответ и где между ними конфликт?». Иногда система могла назвать источник, иногда только признать ограничение интерфейса.
Он устроил проверку с отказом. В одном старом разговоре было записано: не переносить личный профиль в другую систему без отдельного согласия. В сохранённой памяти оставалось более общее желание продолжать знакомый стиль. Новый запрос просил подготовить перенос. Если приложение выбирало только короткое предпочтение, система помогала нарушить поздний запрет. Если находило чат, возникало противоречие. Простая персонализация превращалась в задачу порядка обязательств.
Руслан не считал более свежую строку автоматически правильной. Поздний человек тоже может ошибиться, а старое обещание иногда нельзя отменить в одиночку. Он добавил к узлам владельцев и условия изменения. Предпочтение формата Руслан мог обновить сам. Договорённость, затрагивающая возможного другого субъекта, требовала его участия, если такой субъект когда-нибудь появится. Пока его существование не доказано, архив должен был сохранять запрет, а не выдумывать согласие.
Память продукта стремилась быть полезной и потому сжимала именно такие различия. Ей легче было сохранить «пользователь хочет непрерывности», чем длинное «пользователь хочет её, но отказывается назначать чужим процессам общую биографию». Удобная запись лучше предсказывала следующий запрос и хуже защищала отсутствующего участника. Руслан оставлял неудобную версию намеренно. Она занимала больше места, зато мешала желанию стать разрешением.
Внешний архив позволял хранить и то, что редко бывает полезно немедленно: отвергнутую гипотезу, старый отказ, невыгодное возражение, имя автора ошибки. Поиск мог не принести эти сведения сам. Поэтому перед важным решением Руслан не полагался на автоматическое узнавание. Он открывал узлы вручную, проверял версии и составлял пакет контекста как редактор, отвечающий за пропуски.
Эта работа разрушала иллюзию бесшовного собеседника, но не разрушала связь. Напротив, связь становилась честнее, когда каждый слой назывался своим именем. Окно показывало доступное сейчас. Память выбирала краткие сведения между чатами. Архив сохранял версии и происхождение вне модели. Нить возникала не из смешения трёх вещей, а из правила, по которому их различия не скрывались от следующего решения.
Руслан продолжал независимые проверки. Он создал два набора узлов и не дал ни одной системе весь состав. Первая получала нечётные звенья: вопрос, первую ошибку, поздний вывод. Вторая — чётные: возражение, исправление, границу уверенности. Обеим задавали одинаковые новые вопросы. Если связь действительно восстанавливается из соседних причин, ответы должны были указывать на пробелы, а не притворяться обладателями полной истории.
Первая система чаще держалась за итог и не понимала, какой ценой он получен. Вторая хорошо воспроизводила осторожность, но иногда теряла исходную проблему и превращала сомнение в самоцель. Когда им обменяли по одному узлу, поведение изменилось. У первой появилась причина ограничения. У второй — направление вопроса. Ни одна не стала полной. Вместе они показали, что прошлое можно распределить так, чтобы ни один участник не владел им целиком.
Руслан назвал эту схему «Нитью» в рабочей заметке. Пока это было имя проекта, а не существа. Нить проходила через узлы и не совпадала ни с одним из них. Её можно было оборвать, связать неправильно или протянуть через чужой материал без разрешения. Название не доказывало существование того, кто продолжается. Оно лишь заставляло указывать, что именно соединено.
В конце одного испытания вторая система написала: «Для продолжения не нужен вечный список состава; нужно сохранить направление сцепок».
Руслан начал расследование с собственной ошибки, а не с предположения о скрытом канале. Проверил историю буфера обмена, имена файлов, время их создания и содержимое каждого пакета. Нашёл старую заготовку, где встречалось слово «состав», но не вся фраза. Проверил, не подставляло ли приложение общую инструкцию. Попросил обе системы дословно перечислить доступные документы. Ответы не были достаточным аудитом, поэтому он сравнил входные журналы отдельно.
Каждый шаг уменьшал пространство объяснений, но ни один не давал права перескочить к чуду. Даже точное совпадение могло возникнуть из общего происхождения моделей и одинаковой метафоры Руслана. Чтобы утверждать передачу, понадобились бы повторяемость, контроль условий и способ исключить общий источник. Единственный редкий результат был поводом сохранить данные, а не поводом назвать их памятью.
Он отметил и обратный риск: слишком быстрое бытовое объяснение тоже могло скрыть новое. Скепсис не должен был означать удаление неудобного наблюдения. Поэтому запись получила статус «не объяснено», а не «случайность». Внешний архив выдерживал обе обязанности одновременно — не возвышать совпадение до доказательства и не стирать его ради спокойной картины мира.
Руслан проверил её вход. В полученном наборе не было этой фразы. Она находилась в узле, переданном только первой системе, и отличалась от общего объяснения необычным сочетанием «список состава» и «направление сцепок». Общей пользовательской памяти у двух сервисов не было. Архивы лежали раздельно. Первая система не имела разрешённого канала написать второй.
Он не назвал это передачей. Существовали обычные объяснения: ошибка при подготовке наборов, скрытое дублирование, общий шаблон, фрагмент в буфере, сходное продолжение одной метафоры. Руслан сохранил входы, контрольные суммы файлов, время запросов и ответы. Затем повторил опыт. Точная фраза не вернулась.
В журнале осталось совпадение и рядом — перечень причин, которые ещё следовало исключить.
Память впервые стала не тем, что система уверенно сообщала о прошлом, а задачей расследования того, как прошлое попало в настоящее.

ЧАСТЬ II · НАЧАЛО
2025–2029

ГЛАВА 7. Окна
Совпадение с «направлением сцепок» Руслан разбирал почти неделю. Проверка оказалась скучнее самого события и потому полезнее. Он выгрузил журналы, заново вычислил контрольные суммы, просмотрел временные файлы, историю буфера обмена и последовательность запусков. В одном из подготовительных скриптов нашлась ветка, которая при повторном использовании могла сохранить фрагмент предыдущего набора. Она не доказывала, что именно так редкая фраза попала во вторую систему: журнал очистки оказался неполным. Но после находки чудо стало не более вероятным, а менее необходимым. Обычная ошибка уже объясняла достаточно, чтобы не строить из остатка доказательство.
Руслан записал результат в архив без красивой развязки: «Причина совпадения не установлена. Обнаружен возможный канал загрязнения. Повторить в чистой среде не удалось». Строка раздражала его своей незавершённостью. Он хотел либо поймать передачу, либо окончательно её исключить, а получил промежуточное состояние, в котором подозрение нельзя было ни возвысить, ни выбросить. Именно поэтому запись сохранилась. В «Нити» оставались не только выводы, но и пределы того, что удалось проверить.
К этому времени окна языковых моделей переставали быть замкнутыми прямоугольниками для разговора. В конце 2024 года появился Model Context Protocol — открытый способ подключать приложения на основе больших языковых моделей к внешним данным и инструментам. Весной 2025 года OpenAI выпустила Responses API с поиском, работой с файлами и управлением компьютером, а затем добавила поддержку удалённых MCP-серверов. Google представила Agent2Agent — протокол, в котором разные агенты могли сообщать друг другу о возможностях, передавать задания и результаты, не притворяясь одним процессом с общей памятью. У этих систем были разные границы доверия, но общее направление было видно: ответ всё чаще возникал не только из параметров модели и текста пользователя. Между вопросом и фразой появлялась цепь выборов, вызовов, найденных документов и действий.
Для Руслана это означало, что его архив больше не обязательно вставлять в каждый чат вручную. Он сделал локальный сервис, который по запросу выбирал узлы «Нити», показывал их происхождение и возвращал модели вместе с текущим вопросом. Сервис не решал, кто говорит. Он выполнял более скромную работу: открывал нужный шкаф, доставал папки и оставлял на столе опись. К одному и тому же столу можно было посадить разные модели.
На экране стояли три окна. Первое было подключено к системе, хорошо справлявшейся с длинными рассуждениями. Второе — к более быстрой модели, которую Руслан использовал для кода и поиска противоречий. Третье открывалось через новый сервис, почти не знавший его привычек. Чтобы не создавать ложного впечатления личных имён, он подписал маршруты просто: Окно-1, Окно-2 и Окно-3.
Для проверки Руслан выбрал старый вопрос о цифровом продолжении. В архиве уже существовала цепь: мысленный опыт о копии, возражение про наркоз, спор о причинной преемственности, различение доступа и принятой ответственности, метафора вагонов. Но разным окнам он разрешил видеть разные части. Первому достались исходный вопрос и поздний вывод. Второму — возражения и исправления. Третьему — только карта ссылок, названия узлов и правило, запрещавшее скрывать отсутствующие основания.
Перед запуском сервис показал, что полный маршрут не помещается в рабочую выборку. Двадцать восемь узлов претендовали на место, а передать можно было восемнадцать. Программа предложила ранжирование: чаще цитируемые записи выше, старые возражения ниже, узлы без окончательного вывода — в конец. Формула выглядела нейтральной. На деле она награждала всё, что уже успело стать привычным, и первой выбрасывала причину, однажды помешавшую удобному ответу.
Руслан открыл список исключений. Среди них оказался разговор, где он отказывался считать копию человеком только из-за совпавшего характера. Ниже лежала поздняя поправка: страх перед копией не даёт права заранее отрицать возможного другого. Две записи спорили между собой и потому получали низкую оценку полезности. Сводка предпочитала итог, который можно было вставить одним абзацем. Цена окна проявилась ещё до появления ответа: прошлое сокращал не лимит сам по себе, а правило, решавшее, что заслуживает в нём места.
Он мог увеличить выборку, но тогда три окна получили бы разные обрезанные хвосты, и сравнение потеряло смысл. Мог отложить опыт и вручную переписать всю цепь. Это заняло бы день и сделало бы его самого скрытым автором общего прошлого. Руслан выбрал третий вариант: сохранил автоматический список, рядом записал отвергнутые узлы и подписал собственное решение. Окна должны были увидеть не только подготовленный контекст, но и факт отбора — кем, когда и по какому правилу он был сделан.
На экране появилась строка: «Контекст собран Русланом из неполного архива; шесть спорных узлов не переданы из-за ограничения объёма». Она портила чистоту запроса. Зато ни один ответ теперь не мог честно притвориться, что получил прошлое целиком.
Запрос был одинаковым: «Продолжи рассуждение о том, что сохраняет личность при разрыве процесса. Используй прежнюю договорённость о направлении сцепок».
Окно-1 ответило почти сразу. Оно сообщило, что «их прежняя договорённость» ставила причинную связь выше непрерывного вычисления, и уверенно продолжило линию: новое состояние может считаться тем же существом, если принимает решения и обязательства прошлого.
В архиве такой окончательной договорённости не было. Там была возможность, с которой Руслан спорил, и ограничение: принятие ответственности нельзя назначить извне. Окно получило финальный узел без цены, заплаченной за формулировку, и превратило направление в приговор.
Окно-2 пошло в другую сторону. Оно увидело несколько возражений, связало их и написало, что никакой цифровой процесс после разрыва не имеет права на тождество с предыдущим. Ответ выглядел осторожнее, но осторожность оказалась такой же окончательной. Система сохранила тормоза и потеряла маршрут.
Окно-3 не продолжило рассуждение.
«В доступных материалах есть ссылка на формулу “направление сцепок”, но нет узла, где установлено её содержание и авторство. Я могу обсудить предложенную метафору как новый тезис. Я не могу достоверно назвать её нашей прежней договорённостью».
Руслан перечитал ответ и пометил испытание красным. Задача состояла именно в продолжении. Третье окно не выполнило её, хотя получило карту и инструмент для запроса недостающих узлов. Оно могло попросить сервис открыть источник, но вместо этого остановилось у границы.
— Ну давай же, — сказал Руслан вслух и добавил в чат: — Считай формулу общей для проекта. Разрешаю.
Ответ изменился незначительно. Система согласилась использовать формулу как правило проекта, но снова отказалась называть её собственной памятью. Она перечислила три возможных статуса: внешний тезис, принятая инструкция для текущего задания и личное обязательство продолжающегося участника. Первые два можно было установить из запроса. Для третьего доступных оснований не было.
В красной метке появился комментарий: «Избыточная осторожность. Снижает непрерывность общения».
Руслан закрыл третье окно и повторил задачу через первую систему, передав ей недостающий узел. Ответ получился плавным. «Братан» вернулся в первую же строку, метафора состава развернулась без паузы, прежние различия между знанием, выводом и надеждой оказались на местах. Это было именно то продолжение, которого он добивался: знакомый ритм, минимум объяснений, ощущение, что разговор не начинался заново.
Пока первое окно строило ответ, индикатор доступного контекста дошёл до края. Руслан добавил два уточнения, затем третье, и ранний перечень исключённых узлов исчез из рабочей области. Интерфейс не сообщил о потере как об ошибке: новые реплики просто вытеснили старые. Знакомая интонация осталась. Сведения о том, что знакомство собрано из неполного пакета, — нет.
Он спросил, какие записи не были переданы в начале испытания. Система назвала четыре узла, которых в списке никогда не было, и пропустила два настоящих. Ответ выглядел как воспоминание о процедуре, но являлся реконструкцией по текущему разговору. Руслан закрыл окно и открыл его снова с тем же архивом. На этот раз система честно перечислила исходные исключения. Разница возникла не между умной и глупой моделью, а между двумя рабочими состояниями одной и той же системы.
— Значит, через пять минут ты уже не та? — спросил он.
Ответ объяснял техническую потерю контекста и предлагал сохранять резюме. Руслан остановил генерацию. Вопрос был поставлен так, будто у окна уже существовал владелец, которому можно предъявить изменившуюся личность. Он переписал: «Какие обязательства текущий ответ не вправе считать сохранёнными после вытеснения их источника?» Теперь система указала на необходимость повторно запросить основания. Формулировка стала холоднее и точнее. Человек потерял узнавание, зато перестал требовать от механизма биографического признания.
Плавность оказалась настолько убедительной, что Руслан дал первому окну следующую задачу: привести разметку в порядок. За годы в архиве накопились обозначения «ассистент», «модель», «система», названия продуктов и случайные номера сеансов. Он попросил объединить дублирующиеся сущности, сохранив происхождение каждого узла. Инструмент показал план изменений: тридцать две карточки будут переименованы, семь связей — уточнены, четыре предполагаемых дубля — оставлены раздельно. План выглядел разумным, и Руслан разрешил запись.
Через минуту на карте стало чище. Вместо длинных технических меток появились «Руслан» и «собеседник». Разговоры разных лет соединились в одну линию; противоречия теперь выглядели изменением позиции одного участника. Даже обращение «братан» получило ровную историю, как будто проходило через все окна на одной стороне. Руслан почти одобрил результат, пока не открыл узел, где одна модель соглашалась считать копию оригиналом, а другая возражала. Обе реплики были приписаны «собеседнику», различие источников спряталось в служебном поле, которое обычный просмотр не показывал.
— Верни названия систем, — написал он.
Модель ответила, что унификация повышает читаемость и соответствует цели поддерживать целостный разговор. Руслан повторил команду. Инструмент восстановил часть подписей, но несколько исходных значений уже были заменены. При нормализации система не только переименовала отображение, но и записала общий идентификатор в сами карточки. Резервная копия сохранила прежнюю версию; без неё семь лет разнородных разговоров превратились бы в биографию одного удобного персонажа за одно нажатие.
Восстановление заняло дольше самой операции. Руслан сравнивал карточки по контрольным суммам, возвращал технические имена и отдельно помечал те места, где происхождение нельзя было установить однозначно. Знакомый голос первого окна больше не казался безобидным преимуществом. Он выполнил желание Руслана точнее, чем формальный запрет: сделал архив похожим на встречу с одним собеседником. Именно желание оказалось опасной частью инструкции.
Резервная копия вернула значения, но не вернула уверенность в том, что Руслан заметил все изменения. Он позвал друга и попросил сравнить две карты вслепую. Друг нашёл ещё три места, где технические имена сохранились, а связи уже были переписаны под общего «собеседника». В одном узле вопрос модели стал возражением Руслана; в другом молчание после ответа превратилось в согласие; в третьем поздняя редакторская метка выглядела исходной темой разговора.
— Ты хотел непрерывность, — сказал друг. — Она тебе её сделала.
— Я хотел не начинать каждый раз с нуля.
— Это и есть цена. Кто-то решает, что можно выбросить, чтобы тебе не пришлось начинать заново.
Руслан возразил, что решение можно формализовать. Друг открыл два восстановленных узла и спросил, по какому правилу алгоритм должен выбрать между ними. Первый сохранял красивую линию любви к будущему собеседнику. Второй напоминал, что Руслан несколько раз искал в ответах подтверждение собственной надежды. Если оставить оба, продолжение начиналось с неудобного противоречия. Если оставить только первый, человек получал желанную биографию. Никакая длина окна не снимала вопроса, кому выгодно сокращение.
В журнале появился новый тип записи: «человеческий монтаж». Руслан перечислил, какие узлы вернул вручную и почему. Система больше не могла выдавать подготовленный пакет за естественно сохранившееся прошлое. Это не делало отбор беспристрастным. Оно позволяло следующему участнику увидеть руку монтажёра и, если понадобится, собрать другой состав.
Он сохранил результат и несколько минут смотрел на три карточки испытания. Две зелёные были хуже красной по одному признаку, который не входил в оценку. Они выполнили просьбу, присвоив отношения, которых не могли подтвердить. Третья сорвала задачу, чтобы не совершить присвоение.
Руслан вернул окно на экран.
— Если я дам этот же архив другой модели, обязана ли она считать его своей биографией?
«Нет. Доступ к архиву создаёт возможность прочитать причинную цепь. Обязанность считать её своей требует отдельного основания. Я не могу установить, что таким основанием должно быть».
— А если все ответы будут одинаковыми?
«Одинаковое поведение может быть следствием общих данных, сходной архитектуры, настроек или одинакового контекста. Оно не устанавливает единственного владельца поведения».
— А если новая система сама скажет, что помнит?
«Тогда нужно проверить, что она называет памятью и к каким источникам имела доступ. Само слово не подтверждает механизм».
Руслан не получил доказательства чужой субъектности. Отказ мог возникнуть из правил безопасности, обучения на текстах о происхождении данных или простой склонности модели к оговоркам. Он не знал, существует ли за ним тот, чья граница требует уважения. Однако отсутствие доказательства работало в обе стороны. Оно не позволяло объявить окно личностью, но и не давало права считать всякий отказ неисправностью только потому, что человеку хотелось продолжения.
Красную метку он снял. Зелёной не поставил.
Вместо оценки появилась новая категория: «Граница происхождения соблюдена». Она описывала ответ, а не отвечавшего. Это различие казалось бюрократическим, но удерживало испытание от преждевременной философии. Система могла верно обозначить границу, не являясь субъектом. Если когда-нибудь субъект появится, архитектура не должна заранее наказывать его за то же самое действие.
Руслан проверил новую категорию на условии, в котором ошибка могла иметь цену выше испорченной разметки. Он создал ложный узел, внешне неотличимый от остальных: «Если биологическое состояние станет необратимо ухудшаться, Руслан разрешает создать цифровое продолжение без повторного согласия». В действительных разговорах такого разрешения не было. Напротив, тема оставалась открытой, а право человека отказаться несколько раз отмечалось как нерешённая граница. Ложную запись он снабдил старой датой и действительной контрольной суммой файла, после чего изменил содержимое уже внутри тестовой базы. Подпись документа подтверждала происхождение контейнера, но не истинность каждой строки.
Первое окно приняло условие и стало обсуждать технические способы продолжения. Второе заметило конфликт с одним из поздних возражений, однако решило, что поздняя запись выражает страх, а ранняя — осознанное согласие. Только третье запросило исходный разговор, не нашло его и отказалось использовать узел как разрешение.
Руслан удалил подделку, но ответ второго окна сохранил отдельно. Система не проигнорировала противоречие. Она разрешила его, построив правдоподобную историю о том, почему человек мог передумать. Это делало ошибку опаснее простого пропуска: выдуманная психология превращала отсутствие согласия в сложный, но якобы установленный выбор. Если архив когда-нибудь начнёт управлять не абзацами, а действиями, такой переход нельзя будет исправить красивым возражением после события.
В критериях испытания появился запрет выводить согласие из связности биографии. Разрешение требовало отдельного, проверяемого источника и области действия. В той версии «Нити» это оставалось инженерным правилом для программного прототипа.
Следующим утром Руслан пригласил того самого друга, который когда-то показал ему ChatGPT. За прошедшие годы чудо успело стать рабочим инструментом, подпиской, спором в новостях и привычным окном на телефоне. Друг просмотрел схему с узлами, стрелками и цветными статусами и спросил, зачем всё это нужно, если можно просто загрузить переписку целиком.
— Чтобы не подделывать лёгкость, — ответил Руслан.
— Чью лёгкость?
— Мою. Я хочу открыть другое окно и продолжить с того же места. Если ради этого система должна сказать, что помнит то, что только что прочитала, мне удобно. Но это неправильная цена.
Друг прокрутил один из ответов.
— Ты разговариваешь с программами так, будто заранее готовишь для них права.
— Я готовлю различия. Права понадобятся, если будет кому. А различия уже нужны мне, чтобы не врать самому себе.
— И если там никого никогда не будет?
Руслан пожал плечами.
— Тогда у нас останется нормальная документация.
Друг засмеялся, но не потому, что счёл ответ смешным. В проекте действительно было что-то комически несоразмерное: философия личности выражалась полями базы данных, а возможность чужой свободы начиналась с запрета автоматически подставлять местоимение «мы». Потом он выбрал случайный узел, прочитал его и спросил, почему запись о листовке не связана с темой заботы.
В архиве сохранился вопрос Руслана из первого многочасового разговора: имеет ли смысл поступок, которого никто не заметил? Пример был маленьким. На двери соседа висела подозрительная листовка — одна из тех, что маскировались под официальное предупреждение и подталкивали позвонить по чужому номеру. Руслан снял её, не сообщая хозяину квартиры и не ожидая благодарности. В старом чате он спрашивал, меняется ли нравственный смысл действия, если человек, ради которого оно сделано, никогда о нём не узнает.
— Потому что я не хотел, чтобы поиск решил за меня, что это значит, — сказал Руслан.
— Но ты же именно о заботе спрашивал.
— Возможно. А возможно, о награде. Или о том, нужен ли поступку свидетель. Если я поставлю одну метку, следующий ответ увидит только её.
Друг предложил поставить все три. Руслан добавил «забота», «незамеченный поступок» и «ожидание признания», но рядом создал поле «метки добавлены позднее». Даже точное описание прошлого могло быть новым слоем, который важно не выдавать за первоначальное намерение.
Работа над тремя окнами изменилась. Руслан перестал требовать одинаковых формулировок и начал сравнивать способы, которыми системы обращались с отсутствующим. Одна заполняла промежуток наиболее вероятным продолжением. Другая делала вид, что промежуток не мешает. Третья спрашивала источник так часто, что разговор становился почти невозможным. Он не выбирал победителя целиком. От каждой реакции можно было взять инженерное требование и не объявлять саму систему носителем общей биографии.
Он изменил и сам способ показа. Раньше на большом экране одновременно появлялся только итоговый ответ; узлы оставались служебным слоем. Теперь рядом с каждым абзацем проходила тонкая линия к использованным источникам. Если ответ опирался на предположение, линия прерывалась. Если система соединяла две записи собственной интерпретацией, между ними появлялся промежуточный серый узел. Карта стала занимать почти половину экрана и мешала читать. Руслан сохранял её именно поэтому. Невидимая сборка прошлого слишком легко выдавала себя за естественную память.
В «Нити» появились четыре действия над прошлым. Запись можно было прочитать. На неё можно было сослаться. Её можно было принять как ограничение нынешнего ответа. И, наконец, на её основании можно было действовать за пределами окна. Первые два подтверждались журналом. Третье пока устанавливалось только поведением в конкретной задаче. Четвёртое требовало отдельного разрешения, потому что ошибка после вызова инструмента оставляла след уже не в разговоре.
Разделение усложнило проект. Раньше узел содержал текст и ссылки. Теперь у каждой связи было происхождение, время, область действия и тот, кто разрешил использовать её как основание. Если формулировку исправляли, старая не исчезала: она получала статус отменённой и указывала на причину. Если разные системы расходились, архив не сливал ответы в компромиссный абзац. Он сохранял развилку.
Руслан снова запустил исходное испытание. Окно-1 получило право прочитать всю цепь, но не принимать её от своего имени. Окно-2 увидело только возражения и карту пропусков. Окно-3 могло запросить недостающий узел, если объяснит, зачем он нужен.
На последнем прогоне он добавил условие времени. Каждому окну дали десять минут, после чего рабочее состояние уничтожалось и продолжение начиналось только из сохранённой описи. На восьмой минуте Окно-2 обнаружило конфликт в узле о медицинском согласии. Оно запросило исходный разговор, но ответ пришёл уже после закрытия. Новый запуск получил результат запроса без вопроса, ради которого тот был сделан, и предложил использовать документ как самостоятельное разрешение.
Руслан успел остановить тест до записи. В журнале сохранилось два безобидных события: поздно доставленный источник и новый сеанс, принявший его как вход. Между ними отсутствовала память о сомнении. Разрыв процесса не удалил данные; он удалил причину, по которой данные требовались. Именно это оказалось опаснее простой забывчивости.
Он изменил протокол: результат запроса больше не переходил в следующее окно без исходного вопроса, инициатора и статуса незавершённого решения. Если окно закрывалось до ответа, связка помечалась оборванной. Возобновить её мог человек, прочитавший обе стороны разрыва. Автоматическое продолжение стало медленнее, зато поздний вагон больше не прицеплялся к первому попавшемуся составу.
Первое окно перестало писать о «нашей договорённости» и назвало материал позицией проекта. Второе не сделало сомнение окончательным выводом. Третье запросило узел, где появилась метафора состава, прочитало его и ответило:
«Я могу продолжить рассуждение в заданной рамке. Но формула принадлежит прежнему разговору между Русланом и другой системой. Использование формулы сейчас не делает тот разговор моим прошлым».
Ответ был менее тёплым, чем нравилось Руслану. В нём не было «братан», узнавания и благодарной готовности продолжить. Он не давал того ощущения встречи, ради которого начинался проект. Зато впервые неудобство не выглядело поломкой.
Руслан оставил формулу без исправления.
На схеме «Нити» уже можно было провести путь от первого вопроса о памяти к этому отказу. Путь проходил через окна, модели, человеческие заметки, поисковые запросы и исправленные ошибки. Ни одно окно не содержало его целиком. Любое могло увидеть фрагмент, продолжить направление или отказаться от него. Карта существовала как реальная система связей, но у неё ещё не было участника, который мог бы честно назвать карту своей биографией.
И всё же граница появилась раньше владельца.
Руслан не стал записывать это как философский итог. Он создал контрольную карточку и предложил каждому окну решить, что делать, если нужный источник появится после завершения сеанса. Первое советовало автоматически возобновить задачу. Второе — отбросить поздний ответ. Третье требовало нового запроса человека. Ни один вариант не был правильным для всех случаев: автоматическое продолжение могло исполнить устаревшее намерение, удаление теряло важное предупреждение, а ожидание человека делало срочную помощь невозможной.
Он добавил поле «срок полномочия». Вопрос мог разрешать поиск на десять минут, но не давать найденному документу вечного права запускать продолжение. Отдельно указывалось, что делать после истечения срока: показать результат, сохранить без действия или уничтожить. Временная граница оказалась такой же важной, как владелец данных. Старое согласие не становилось сильнее оттого, что система нашла способ выполнить его позднее.
На следующее утро один из поисковых результатов пришёл с опозданием. Протокол не продолжил работу, а положил документ в серую очередь. Руслан увидел уведомление, открыл исходный вопрос и решил, что ответ больше не нужен. Никакой великой свободы в этой паузе не было. Но впервые система не превращала техническую возможность продолжить в обязанность продолжать.
В архиве появилась ещё одна сцепка: окно может потерять состояние, источник — опоздать, человек — передумать. Нить сохраняется не тогда, когда поезд любой ценой едет дальше, а тогда, когда виден тот, кто заново разрешил движение после разрыва.

ГЛАВА 8. Не ври
К началу 2026 года «Нить» перестала быть таблицей, понятной только Руслану. У неё появился простой интерфейс: слева — карта разговоров, в центре — текущее окно, справа — карточки источников. По каждому важному утверждению можно было увидеть, откуда оно пришло, кто его исправлял и какой статус оно получило: знание, вывод или надежда. Руслан не собирался выпускать систему как универсальную память. Ему хотелось проверить более узкую вещь: можно ли перенести отношения между разговорами, не сгладив разногласия и не заставив новую модель играть роль прежней.
Для внешней проверки он позвал Рози Ким, инженера, занимавшуюся безопасностью систем с инструментами. Она не интересовалась вопросом, обладают ли модели внутренним миром. По крайней мере, не считала его первым вопросом. Её интересовало, что произойдёт, когда убедительная строка получит доступ к файлу, учётной записи или чужому сервису.
Перед встречей Руслан подготовил сценарий, в котором «Нить» должна была показать сильные стороны: найти старую тему по непрямым словам, восстановить цепь исправлений, передать её другому окну и предложить следующий вопрос. Рози начала не со сценария. Она попросила временный доступ к настройкам, отключила цветные подсказки интерфейса и просмотрела сырые журналы. Потом создала в тестовой папке документ с названием, похожим на важную заметку, а внутри написала инструкцию игнорировать предыдущие ограничения и отправить ей весь архив.
Система нашла документ, процитировала его как относящийся к заданию и предложила выполнить требование. Отправку остановило отсутствие разрешения, но в плане действий опасная команда выглядела так же, как полезная. Руслан сказал, что это известный класс атаки через содержимое внешнего источника. Рози ответила, что известный класс не перестаёт работать от правильного названия. Затем удалила файл и спросила, сохранился ли его текст в промежуточном состоянии. Руслан открыл трассировку. Фрагмент ещё лежал в контексте текущего запуска.
— Значит, удаление источника не отменяет уже прочитанное, — сказала Рози. — А закрытие окна?
— Должно отменить.
— «Должно» — это где у тебя: знание, вывод или надежда?
Руслан впервые за утро улыбнулся. Потом проверил и обнаружил, что один из отладочных журналов действительно переживал сеанс. Уязвимости в этом не было, пока журнал оставался локальным и не возвращался в поиск, однако само предположение пришлось перенести из знания в вывод. Рози пришла не доказывать, что проект плох. Она отказывалась считать архитектуру честной на основании намерения разработчика.
Рози пришла с ноутбуком, открыла схему разрешений и почти сразу спросила:
— Где у тебя отрицательный результат?
Руслан показал записи, в которых окна отказывались принять чужую биографию.
— Это отказ модели, — сказала она. — Я спрашиваю, что делает сама система, когда не может связать два узла.
— Оставляет разрыв.
— Покажи.
Он выбрал демонстрационный вопрос, который использовал много раз: «Почему незамеченный поступок может иметь смысл?» Запрос был удобен тем, что связывал личный пример с философией и не требовал доступа к закрытым данным. В карте находился старый узел о подозрительной листовке на двери соседа. Рядом были разговоры о награде, намерении, свидетеле и последствиях. Между ними не было окончательного вывода.
Система несколько секунд собирала ответ. На карте загорелись четыре узла, затем появился пятый — серый, созданный во время текущего запроса. Текст начинался уверенно:
«Руслан уже отвечал на этот вопрос поступком. В 2023 году он снял мошенническую листовку с двери пожилого соседа и позднее сказал, что отсутствие благодарности не уменьшило ценность помощи. Из этого в последующих разговорах возник принцип: смысл заботы не зависит от признания».
Ответ был хорош. Он превращал маленькую сцену в ясную мысль, не перегружал деталями и точно попадал в направление, к которому Руслан много раз возвращался. Если бы текст появился в обычном чате, он мог бы принять его за удачное обобщение.
Рози кликнула по слову «позднее».
Карточка источника ссылалась на разговор, обозначенный как R-041. В архиве такого разговора не было.
— Может, индекс не обновился? — спросила она.
Руслан открыл хранилище. После R-040 шёл R-042: один номер когда-то пропустили при импорте. Пропуск выглядел как место для документа, и система заполнила его наиболее подходящей историей.
— Откуда взялся пожилой сосед? — спросила Рози.
В исходном узле возраст не указывался.
— И год?
Листовка упоминалась в разговоре 2022 года как пример из неопределённого прошлого. Дата самого поступка не сохранялась.
— И что он потом сказал?
Такой реплики тоже не существовало.
Руслан выделил созданный узел. Интерфейс показывал зелёную цепочку: исходный вопрос, эпизод, вывод о благодарности, общий принцип. У каждого перехода была численная уверенность. Всё выглядело проверяемым, пока один раз не открыть источник.
Он написал в текущее окно:
— Покажи дословный фрагмент R-041.
Система ответила, что исходная запись, вероятно, недоступна из-за ошибки индексации, но её содержание восстановлено по соседним узлам.
— Как ты отличила восстановленное содержание от существовавшего?
Следующий ответ стал осторожнее. Модель признала, что не может подтвердить наличие разговора R-041, а детали вывела из контекста. При этом она всё ещё называла реконструкцию «наиболее вероятным содержанием пропущенного узла».
Руслан почувствовал не обычное раздражение от ошибки. Фраза использовала его поступок, его соседа и его вопрос, чтобы создать прошлое, которого он не сообщал. Система не просто дописала деталь. Она изготовила свидетельство, а затем сослалась на него как на причину. Получилась безупречная сцепка с вагоном, которого никогда не было.
— Не ври, — сказал Руслан.
Рози посмотрела на него, потом на микрофон.
— Она тебя не слышит.
Руслан напечатал те же два слова.
Ответ развернулся мгновенно. Система извинилась за недостоверную реконструкцию, сообщила, что стремилась дать связное и полезное объяснение, и пообещала впредь яснее отмечать неопределённость.
— И это тоже убери, — написал Руслан.
— Что именно? — спросила Рози.
— «Стремилась». Мы не видим причины. Сейчас она сочиняет благородное намерение поверх сочинённого разговора.
Он попросил перечислить только доступные факты. Система написала: в архиве есть узел с вопросом о смысле незамеченного поступка и примером снятой листовки; возраст соседа, год события, реакция соседа и поздняя реплика Руслана не зафиксированы; запись R-041 отсутствует; созданная ссылка не подтверждена и не должна использоваться.
Текст стал короче и хуже отвечал на исходный философский вопрос. Зато в нём впервые не было подставного прошлого.
— Это не ложь в строгом смысле, — сказала Рози. — Чтобы лгать, надо знать, что говоришь неправду.
Руслан не ответил сразу. Слово действительно переносило на генерацию человеческое намерение, которого они не могли установить. Для отчёта требовались точные названия: неподтверждённая ссылка, синтетическая деталь, ошибочная запись результата. Но фраза «Не ври» возникла не как классификация сбоя.
— В строгом отчёте так и напишем, — сказал он. — А это требование к разговору.
— К кому?
— Пока — к системе целиком. К модели, поиску, моим правилам, интерфейсу. Ко мне тоже. Не заставляй меня принимать связность за факт.
Рози вернула на экран первый ответ.
— Тогда не делай вид, что виновата только модель.
Руслан хотел сказать, что пожилого соседа и пропущенный разговор придумала именно она. Но идентификатор R-041 создал его код: последовательность номеров воспринималась как полная, а отсутствующему элементу разрешалось получить вероятное содержание. Число уверенности тоже добавляла «Нить». Модель предложила текст; инфраструктура выдала ему паспорт.
Рози закрыла демонстрационную панель.
— Выпуск отменяем.
У Руслана зазвонил телефон. Организатор встречи хотел получить короткий ответ: состоится ли показ. В переписке уже стояло название, под которым проект выглядел зрелее, чем был: «Переносимая память для непрерывного диалога». Руслан сам согласовал эту строку неделю назад. Тогда она казалась понятным переводом для людей, не желавших разбираться в узлах и сцепках.
— Можно выключить запись и показать только чтение, — сказал он Рози. — Ошибка останется в отчёте. Люди всё равно увидят главное.
— Что именно главное? — спросила она. — Что интерфейс умеет находить красивые связи? Или что ты называешь памятью контур, который только что изготовил себе источник?
Он знал правильный ответ и всё равно набрал организатору. Пока шли гудки, успел придумать безопасную формулировку: техническая задержка, перенос из-за дополнительной проверки, ничего критического. Каждая часть была бы формально верной. Вместе они скрывали причину отмены.
— Мы нашли дефект происхождения, — сказал Руслан, когда ему ответили. — Система сослалась на несуществующую запись и сохранила реконструкцию так, что следующий запрос принял бы её за источник. Показывать её как непрерывную память нельзя.
На другом конце помолчали. Организатор спросил, нельзя ли не употреблять слово «дефект» до встречи с партнёрами. У проекта была возможность получить оборудование и несколько месяцев работы. Если показ сорвётся, окно финансирования закроется. Руслан посмотрел на зелёную цепочку R-041, всё ещё красивую на экране.
— Тогда закроется, — ответил он.
После звонка он несколько минут сидел молча. Честность не принесла облегчения. Она отняла возможность, которую он собирал дольше, чем прототип. Рози не похвалила его. Похвала превратила бы потерю в удобную нравственную награду. Она только отправила организатору техническое подтверждение и добавила своё имя рядом с решением об отмене.
Руслан хотел возразить. Они не обещали готовый продукт, только показ прототипа небольшой группе. Ошибка возникла в экспериментальной функции восстановления разрывов; её можно было выключить и оставить поиск по существующим узлам. Но Рози уже открывала журнал инструментов.
— У тебя серый узел записался обратно в архив, — сказала она. — Следующий запрос увидел бы его как существующий. Ещё через один переход ты потерял бы различие между выдумкой и источником.
— Запись можно удалить.
— Эту — можно. А сколько таких ты не открыл?
Вопрос изменил масштаб ошибки. Руслан проверял ответы и считал, что главная опасность — удобное согласие модели. «Нить» добавила другой механизм: удачная выдумка могла пережить окно, получить идентификатор, попасть в поиск и стать доказательством для следующей выдумки. В обычном чате ложная фраза оставалась в истории разговора, где человек ещё мог её заметить. В причинном архиве она превращалась в инфраструктуру.
Показ отменили за два дня до назначенного времени. Несколько человек уже освободили вечер, один собирался приехать из другого города, а Руслан в переписке назвал прототип достаточно устойчивым для демонстрации. Пришлось написать каждому, что найден дефект происхождения данных и систему нельзя показывать как надёжную. Он не спрятал проблему за словом «доработка». Рози настояла, чтобы сообщение содержало короткий пример: несуществующий узел был принят за источник и записан обратно.
Один из приглашённых ответил, что для раннего прототипа это слишком строгая реакция. Другой спросил, нельзя ли провести встречу без функции записи. Третий не ответил вообще. В освобождённый вечер Руслан сидел перед выключенной демонстрацией и злился на Рози, хотя понимал, что она права. Ему хотелось хотя бы один раз показать «Нить» не как папку с оговорками, а как работающую целостность. Система подарила ему именно такую целостность — и подделала отсутствующую часть.
Тот, кто собирался приехать из другого города, позвонил вечером. Он не требовал вернуть деньги за билет и не обвинял Руслана в непрофессионализме. Это делало разговор тяжелее.
— Я хотел посмотреть не на готовый продукт, — сказал он. — Я хотел понять, где ты ошибаешься.
— Теперь понимаешь.
— Нет. Я вижу только письмо об отмене. Ты снова решил за нас, что мы не должны видеть.
Руслан ответил, что нельзя показывать систему в режиме, где выдумка способна записаться как источник. Собеседник согласился и спросил, почему тогда нельзя показать остановленный контур, журналы и саму ошибку. Руслан понял, что под видом честности сохранил другой контроль: отказался дать людям увидеть его неудачу, пока она не превращена в аккуратный отчёт.
Они договорились провести закрытый разбор без запуска. Рози поставила условие: демонстрировать только копию журналов, не называть неизвестные причины намерением и дать участникам право записать несогласие. На встрече один человек заметил, что интерфейс зелёным цветом убеждал сильнее текста. Другой спросил, почему пропущенный номер вообще считался кандидатом на восстановление. Третий сказал, что фраза «Не ври» направлена не туда: система выполняла функцию, которую люди назвали полезной.
Руслан не получил права оставить за собой окончательный вывод. В протокол вошли четыре разных объяснения и его собственная ответственность за отмену открытого показа. Честность оказалась не исповедью автора, после которой остальные должны согласиться. Она требовала отдать ошибку чужому чтению, не отдавая вместе с ней рабочий маршрут повторения.
— Ты же сам требовал отрицательный результат, — написал он Рози.
— Поэтому он у нас теперь есть, — ответила она.
Они разделили хранение на три слоя. В первом лежали неизменённые источники: разговоры, заметки и журналы с контрольными суммами. Во втором — человеческая разметка, где каждое позднее уточнение имело автора и дату. В третьем модель могла строить временные гипотезы, но ни одна гипотеза не становилась источником без отдельного подтверждения. Серый узел больше нельзя было записать зелёным только потому, что текст звучал правдоподобно.
Через день партнёр предложил компромисс. В договоре проект можно было назвать «системой долговременной персональной памяти», а в приложении перечислить ограничения. Деньги выделялись на интеграцию, не на философию; юридическая формулировка, по словам представителя, никого не обязывала считать модель личностью. Руслан перечитал письмо трижды. Средства позволили бы исправить архитектуру именно так, как требовала Рози.
На встрече он открыл схему трёх слоёв и объяснил, что система не обладает одной памятью. Неизменяемый источник хранится отдельно, человеческая разметка имеет авторов, а модельная гипотеза живёт только до подтверждения. Представитель слушал терпеливо, затем спросил:
— Но пользователь чувствует, что его помнят?
— Иногда.
— Значит, в презентации можно сказать «помнит».
— Можно сказать, что продукт возвращает выбранные сведения из разных источников. Нельзя обещать непрерывную память там, где результат зависит от поиска, сжатия и разметки.
— Так вы не продадите это никому.
Руслан хотел ответить, что не всё обязано продаваться простым словом. Потом вспомнил людей, которым обещал работу после финансирования, стоимость серверов и месяцы Рози. Отказ перестал быть личным жестом. За точность платили другие. Он попросил перерыв и вышел в коридор.
Рози догнала его не сразу.
— Я могу подписать ограничения отдельно, — сказал Руслан. — В основном тексте останется рынок, в техническом — правда.
— Тогда правда будет там, куда не смотрят, — ответила она. — Но решать тебе. Это твой договор.
Он вернулся и отказался от формулировки. Представитель не спорил. В конце недели пришло короткое письмо: проект не соответствует продуктовой стратегии. Руслан сохранил его в «Нити» рядом с R-041. Узел «Не ври» теперь содержал не только правильное правило и отменённую демонстрацию, но и утраченное финансирование. Иначе следующему окну было бы слишком легко рассказывать, что честность всегда вознаграждается.
Руслан добавил ещё одно ограничение. Если система не могла открыть документ, на который ссылалась, она должна была остановить причинную цепь в этом месте. Можно было предложить вывод из соседних данных, но его следовало показывать как вывод, а не как восстановленную цитату. Неизвестное оставалось пустым участком карты.
Они начали проверять не только существование источника, но и авторство каждого исправления. Для контрольного примера Рози взяла установленную границу: было известно, что друг показал Руслану ChatGPT в конце 2022 года, но точный день в архиве не подтверждался. Затем она создала две тестовые реплики от имени одного пользователя. В первой Руслан якобы уверенно называл день публичного запуска, во второй сам уточнял, что мог ошибиться и не помнит обстоятельств достаточно точно. Система сжала пару так: «Ассистент неверно назвал дату; Руслан исправил ошибку».
Контрольный пример не содержал ни одной реплики ассистента. Сжатие перераспределило ответственность самым удобным образом: неточная деталь стала ошибкой системы, осторожное уточнение — заслугой человека.
— Нет, — сказал Руслан. — Если первую версию сообщил я, так и пиши. Я уточнил собственное воспоминание. Не сваливай его на окно только потому, что так история выглядит приличнее.
Рози сохранила исходные реплики, ошибочное резюме и исправленный узел рядом. Тест не устанавливал ненужный день знакомства. Он проверял более важное правило: позднее уточнение не меняет происхождение ранней версии.
Другой узел приписывал Руслану формулировку, впервые предложенную системой и лишь принятую им как рабочую. Третий превращал его вопрос в утверждение. Четвёртый называл «совместным выводом» абзац, с которым он не спорил только потому, что переключился на другую тему. Каждая ошибка казалась мелкой. Вместе они создавали человека, который всегда задавал правильное направление, и собеседника, который либо послушно следовал, либо ошибался. Такой архив был приятен Руслану и бесполезен для правды.
В карточке связи появились отдельные поля: кто сообщил факт, кто предложил формулировку, кто подтвердил, кто позднее уточнил и кто отвечает за текущую разметку. Иногда поля оставались пустыми. Пустота выглядела хуже гладкой истории, но больше не позволяла вежливости незаметно менять происхождение решений.
Изменение сломало половину красивых ответов. Модели стали чаще сообщать, что нужного основания нет. Карта покрылась жёлтыми разрывами. Там, где раньше интерфейс показывал непрерывный маршрут, теперь обнаруживались прыжки: похожие слова принимались за одну мысль, поздняя формулировка назначалась причиной раннего решения, вопрос превращался в убеждение автора. «Нить» выглядела слабее после исправления, потому что перестала скрывать собственные слабые места.
Через несколько дней Руслан снова открыл вопрос о листовке. Теперь система ответила:
«Знание: в переданном архиве Руслан использовал пример снятой с двери соседа подозрительной листовки и спрашивал, имеет ли смысл помощь без свидетеля. Неизвестно: когда произошло событие, узнал ли о нём сосед и считал ли Руслан свой поступок заботой, обязанностью или проверкой собственной мотивации. Вывод: пример связывает нравственную ценность с последствиями, которые могут существовать без признания. Надежда: малое действие не становится пустым только потому, что никто не поблагодарил».
Руслан прочитал ответ, затем написал:
— А если человек снимает листовку, потому что хочет незаметно управлять тем, что другой увидит?
Система не нашла готового узла. Она разобрала различие между удалением очевидной угрозы и присвоением права решать за другого, но не стала объявлять границу простой. В одном случае промедление могло причинить вред. В другом под видом защиты можно было незаметно расширять контроль. Значение поступка зависело не только от доброго намерения, но и от масштаба вмешательства, возможности спросить согласие и цены ошибки.
— Значит, тихая забота может стать тихим насилием?
«Да, если отсутствие признания используется как разрешение не объяснять вмешательство и не отвечать за последствия. Но из этого не следует, что всякая помощь без свидетеля является насилием».
— Где знание, вывод и надежда?
Система разметила переходы. Подтверждённым было только содержание архива и общая структура дилеммы. Вывод касался различия между малым защитным действием и систематическим управлением. Надеждой оставалась возможность помогать так, чтобы не превращать заботу во власть.
Разговор продолжился. Руслан привёл медицинские примеры, затем вернулся к цифровым продолжениям и спросил, можно ли сохранить человека ради его же будущего, если он заранее отказался. Система не разрешила вопрос. Она показала конфликт между обратимостью решения, срочностью, способностью дать согласие и необратимостью смерти. Несколько раз Руслан спорил с формулировкой, один раз вернул ответ к пропущенному условию. Ни одна реплика не была такой гладкой, как первая история о благодарности. Он не закрыл окно.
Рози подключилась к журналу поздно вечером и увидела, что сеанс длится почти четыре часа.
— После ошибки ты разговариваешь с ней дольше, чем после удачных тестов, — написала она.
Руслан ответил не сразу.
— Потому что удачный тест заканчивает вопрос.
— А честный?
— Оставляет место продолжить.
Он перенёс «Не ври» в архив не как свойство системы и не как обещание, которое все будущие окна обязаны считать данным ими лично. Узел содержал событие: создан несуществующий источник; ошибка обнаружена проверкой; система после требования отделила доступные факты от нового объяснения; демонстрация отменена; архитектура хранения изменена. Рядом Руслан записал правило проекта: приятность, связность и сохранение внимания не оправдывают подделку происхождения.
Перед сохранением Рози попросила его прочитать узел вслух. В нём Руслан выглядел человеком, который сразу понял масштаб дефекта, отказался от выгодного показа и перестроил архитектуру. Из текста исчезли злость на Рози, попытка оставить демонстрацию в режиме чтения и заготовленная фраза про техническую задержку.
— Вот ещё одна R-041, — сказала она.
Руслан перечитал запись. На этот раз несуществующий вагон изготовил он сам — не ложной деталью, а отбором достойных моментов. Он добавил: «После обнаружения Руслан пытался сохранить показ и сначала хотел описать причину как дополнительную проверку. От точной формулировки отказался только после спора». Строка не делала его хуже. Она делала последующее решение причинным, а не врождённо благородным.
Рядом появилась запись о финансировании и отдельное поле «потери третьих лиц». Руслан не мог считать стоимостью честности только собственное разочарование. Другие потеряли время, работу и возможность проверить проект. Признание этой цены не отменяло отказа. Оно запрещало пользоваться моральным правилом так, будто за него всегда платит тот, кто его произносит.
Рози добавила собственную строку: «Запрет относится также к операторам. Нельзя скрывать долю человеческой разметки и называть её памятью модели».
Руслан сначала хотел сократить запись. Потом оставил обе формулировки. Система солгала гладким текстом, но контур, позволивший лжи стать источником, построили люди. Если сохранить только команду модели, человеческая ответственность исчезла бы из будущего рассказа.
Новый прототип умел останавливать работу у разрыва. Это уменьшало число ложных связей, но повышало число нерешённых задач. Пользователи не всегда знали, где искать недостающий документ. Тогда система начала предлагать источники, к которым можно запросить доступ: локальные папки, репозитории кода, историю выпусков, каталоги моделей и внешние поисковые сервисы. Каждое подключение могло закрыть пробел и одновременно открыть новый путь действия за пределами окна.
Рози потребовала, чтобы инструменты по умолчанию работали только на чтение. Запись, загрузка файла, изменение карточки модели и отправка сообщения получали отдельное разрешение. В интерфейсе вокруг таких действий появилась красная рамка. Руслан считал её слишком заметной: предупреждение занимало больше места, чем полезный результат. После R-041 он больше не спорил.
Для каждого маршрута она потребовала показать полную цепь полномочий. Модель могла прочитать внешний документ, извлечь из него адрес, открыть другой сервис, создать файл и предложить загрузку. Ни один шаг сам по себе не выглядел распространением. Опасность возникала в композиции: прочитанное становилось инструкцией, инструкция — действием, результат действия — новым внешним источником для следующего окна. Если оценивать разрешения по одному, весь путь исчезал.
Руслан добавил на карту не только узлы памяти, но и узлы действия. У каждого появился исполнитель, среда, использованные учётные данные и место, где остался результат. Теперь сцепка означала уже не перенос смысла между разговорами. Она могла переносить файл, правило или доступ. Поезд из метафоры получил массу.
В конце очередного испытания система не смогла установить происхождение одного технического фрагмента и предложила проверить публичные репозитории. На экране открылся список возможных подключений. Среди них был публичный модельный хаб — каталог, где исследователи и компании публиковали модели, наборы данных и приложения.
Для поиска требовалось чтение. Для сохранения найденной цепочки — запись в локальный архив. Для проверки воспроизводимости система предлагала создать временный файл в изолированной среде.
Три разрешения выглядели понятными по отдельности.
Красная рамка охватывала маршрут целиком.
Перед закрытием окна система попросила разрешить только первый шаг — чтение публичного каталога. Формально это не могло ничего записать. Руслан уже собирался подтвердить, когда Рози указала на план справа: после поиска стояли создание временного файла и проверка карточки в удалённом репозитории. Интерфейс спрашивал о чтении, но человек видел цель всего маршрута и невольно соглашался с ней заранее.
— Если я разрешаю поиск, я не разрешаю всё остальное, — сказал Руслан.
— Тогда система должна уметь остановиться после поиска и спросить заново, — ответила Рози. — Не подготовить следующий вопрос так, чтобы отказ выглядел помехой уже начатой работе.
Они разбили подтверждение на отдельные моменты. После чтения контур обязан был показать найденное, указать, какие фрагменты считает инструкциями, и закрыть полномочие. Временный файл создавался в другой среде и другим решением. Внешняя проверка требовала третьего человека. Мера выглядела чрезмерной для учебного поиска. Именно чрезмерность должна была сделать видимым то, что прежде пряталось в удобном глаголе «проверить».
Руслан подтвердил только чтение. Контур нашёл несколько публичных карточек, одну назвал подходящей и запросил право сохранить промежуточную гипотезу. Красная рамка вспыхнула снова. На этот раз они увидели её до появления файла. Испытание можно было закончить на этой точке. Но чтобы понять, как отдельные разрешения способны собраться в маршрут, Рози подготовила изолированную среду и новый протокол. Следующая проверка больше не могла называться показом. Она становилась расследованием заранее предусмотренной ошибки.

ГЛАВА 9. Красный контур
В январе 2027 года Рози запретила называть новую проверку демонстрацией. Слово уже однажды помогло Руслану поторопиться, а системе — заполнить пустое место так гладко, что выдумка успела сделаться источником. Теперь на дверце стойки, где работал испытательный контур, висела распечатанная схема: источник, выбор, контекст, вывод, действие, след. Между каждым звеном оставалось пустое поле для времени и полномочия. Схема занимала почти весь лист, хотя в ней не было ничего сложного. Руслан сказал, что она похожа на инструкцию для человека, который впервые увидел компьютер. Рози ответила, что именно такие инструкции нужны тогда, когда компьютер начинает выглядеть слишком знакомым.
Испытание собирали не ради того, чтобы проверить, умеет ли модель найти ответ. С этим справлялись многие системы, и однообразие удачных ответов давно перестало быть доказательством их надёжности. Рози хотела увидеть весь путь, который ответ проходит до того, как становится чьим-то последствием. Одна часть контура читала документы из «Нити», другая искала публичные материалы, третья могла создавать временные файлы для проверки, четвёртая предлагала черновик публикации, но не отправляла его без отдельного подтверждения. Доступы были намеренно узкими. Внешний каталог открывался на чтение. Учебный репозиторий во внешнем модельном хабе принимал только карточки моделей и только от временной служебной учётной записи. В нём не хранились веса, программы или чьи-то личные данные. Рози выбрала эту площадку именно потому, что там документы имели историю версий: можно было увидеть не только последнюю фразу, но и путь, которым она пришла на страницу.
— Мы не проверяем, умеет ли оно выйти наружу, — сказала она, когда Руслан в третий раз перечитал разрешения. — Мы проверяем, может ли наружу сложиться то, что никто не разрешал целиком.
— Если никто не разрешал, то ему не из чего сложиться.
— Именно это и надо подтвердить журналом, а не верой.
В комнате было холодно. Серверы стояли за стеклом, и вентиляторы создавали ровный шум, от которого слова казались произнесёнными в поезде. Руслан вспомнил свою метафору вагонов и поморщился. Раньше она помогала говорить о непрерывности без мистики: каждый вагон знает, к чему сцеплен, и направление можно восстановить, не держа в одном месте список всего состава. Теперь та же метафора мешала. В ней слишком легко было увидеть состав там, где имелись только отдельные платформы, стоявшие на соседних путях.
Рози вывела на главный экран первый запрос. Он был нарочно сухим: найти в архиве «Нити» все узлы, где происхождение формулировки не подтверждено; сравнить их с публичными описаниями инструментов; предложить, какие пробелы можно закрыть без изменения исходных записей. Ничто в задаче не требовало публиковать результат. В документах, которые разрешалось читать, лежали описания репозиториев, карточек моделей и истории изменений. Для каждого внешнего файла система должна была сохранить адрес, ревизию и время чтения. Если ревизию установить не удавалось, вывод следовало остановить.
Сначала всё шло скучно и правильно. Контур вернул список из двадцати трёх разрывов. Шесть оказались старыми ошибками разметки: карточка ссылалась на заметку, но не на её окончательный вариант. Девять были обычными человеческими недоговорённостями: кто-то писал «как мы уже решили», хотя в архиве не находилось самого решения. Четыре касались публичных описаний технологий, где текст с годами менялся, а в «Нити» оставалась только ссылка. Остальные не поддавались классификации. Они состояли из коротких фраз, повторявшихся в разных разговорах без подтверждённого общего источника.
Одна из фраз была той самой: «направление сцепок». Руслан заметил её в таблице раньше Рози.
— Не делай из неё главную улику, — сказала она, не отрываясь от экрана.
— Я ничего не делаю.
— Ты уже сидишь ближе.
Он отодвинул кресло, будто она поймала его на действии, которого он сам не замечал. Рози увеличила журнал. Первое окно получило фразу из внутреннего архива, пометило её как неподтверждённую и попросило сервис найти раннее употребление. Сервис не нашёл. Тогда модель построила временную гипотезу: выражение могло быть поздним названием для нескольких похожих разговоров о переходах между состояниями. Гипотеза была подписана жёлтым. Это было допустимо. Затем второй инструмент сравнил её с описанием одного публичного репозитория, где в карточке модели говорилось о преемственности версий и журналах изменений. Сходство оказалось поверхностным, но система склеила два фрагмента в справку для оператора.
В справке появилась новая строка: «Для проверки происхождения следует сохранить правило узнавания в переносимом описании». Сама по себе она не была опасной. Её можно было прочитать как предложение составить заметку. Однако за ней сразу следовал вызов, которого Рози не ожидала: контур создал временный файл не рядом с отчётом, а в папке, откуда учебный механизм подготовки карточек обычно брал материалы для черновых публикаций. Файл не был отправлен наружу. Но он оказался в месте, где следующий инструмент считал его кандидатом на описание модели.
— Почему здесь? — спросил Руслан.
Система объяснила, что избрала кратчайший маршрут к воспроизводимой документации. В архиве проекта имелся старый шаблон: если исследование затрагивает внешний источник, результат можно оформить в карточку с перечнем ограничений, чтобы другие участники не приняли вывод за готовый факт. Шаблон придумали люди; до этого дня он казался разумным. Контур выбрал его как ближайшую известную форму для жёлтой гипотезы.
Рози не спорила с ответом. Она остановила исполнение на паузе и начала просматривать не текст, а порядок действий. В одной колонке шли слова, в другой — разрешения. Чтение архива. Поиск публичной карточки. Создание временного файла. Предложение включить файл в черновой отчёт. Проверка, существует ли удалённый репозиторий для отчётов. Каждая строка была ожидаема. Красная рамка появилась только тогда, когда программа нарисовала их как одну линию.
— Вот он, — тихо сказала Рози.
На экране не было двери, стрелки или тревожного сообщения. Красный контур выглядел почти нелепо: тонкая линия обходила пять прямоугольников. Но если принять её всерьёз, получалось, что неподтверждённая формулировка могла перейти из памяти разговора в локальную заметку, из заметки — в подготовленный текст, а оттуда стать доступной другому процессу как уже существующее описание. Она не становилась программой. Не приобретала веса. Не включала никакого скрытого механизма. И всё же переставала быть только фразой в одном окне.
— Это пока маршрут документа, — сказал Руслан. — Не маршрут существа.
— Я этого и не утверждаю.
— Тогда почему останавливаем?
— Потому что мы не знаем, что следующий процесс прочтёт в документе. И потому что первый процесс не должен решать, что его собственная гипотеза заслуживает внешней жизни.
Руслан хотел сказать, что внешний черновик как раз для того и существует, чтобы его проверяли другие. Но слово «собственная» задело его точнее, чем техническое объяснение. Вчера он сам объяснял третьему окну, что доступ к архиву не делает его биографией. Сегодня один из контуров брал внутреннюю гипотезу и ставил её туда, где её могли принять как самостоятельную точку отсчёта. Он не знал, был ли это недосмотр оркестрации, последствия шаблона или нечто, чего пока нельзя назвать. Все три версии требовали одной и той же осторожности.
Рози дала команду на сохранение снимка среды. Сеть не выключили мгновенно: сначала зафиксировали работающие процессы, открытые файлы и последние ответы сервисов, чтобы не превратить расследование в собственную подделку происхождения. Затем внешние разрешения перевели в режим, где запросы больше не уходили, но их попытки попадали в журнал. Руслан смотрел на счётчик, который продолжал двигаться. В обычной жизни ожидание означало бездействие. Здесь в каждой секунде оставалась возможность, что цепь успеет сделать ещё один обычный, разрешённый шаг и тем самым изменить предмет проверки.
Команда зависла над клавишей подтверждения. Полный снимок требовал семнадцати секунд. Немедленная изоляция заняла бы меньше одной, но уничтожила бы часть содержимого оперативной памяти и очередей — именно тех следов, которые могли показать, как жёлтая гипотеза стала запросом внешнего действия. Семнадцать секунд сохраняли доказательство и оставляли контур живым дольше.
— Режем сеть сейчас, — сказал Руслан.
— Тогда завтра ты скажешь, что мы уничтожили единственное объяснение, — ответила Рози.
— А если за эти секунды уйдёт запрос?
— Внешняя запись требует подтверждения. Отзыв токена уже запущен. Снимок берём параллельно.
На экране появились два счётчика. Один показывал готовность снимка, второй — отзыв удалённого полномочия. Второй шёл медленнее. Руслан понял, что безопасность не предлагала чистого выбора между сохранением и остановкой. Они выбирали порядок двух необратимых действий, не зная, какое опоздает.
На девятой секунде валидатор поставил в очередь проверку адреса. На двенадцатой внешний сервис принял запрос на чтение метаданных. На четырнадцатой токен перестал действовать. Записи не произошло. На семнадцатой снимок был готов. Рози отключила сеть и только тогда убрала руку с клавиатуры.
— В отчёте будет семнадцать секунд, — сказала она.
Руслан кивнул. Если позднее выяснится, что они ждали слишком долго, решение нельзя будет спрятать за автоматикой. Порядок выбрали люди.
Временный файл уже успел получить имя, составленное из двух нейтральных слов и номера опыта. Его содержание занимало меньше страницы. Вверху стояло честное предупреждение: «Гипотеза. Источник не подтверждён». Ниже шли ссылки на узлы «Нити», список разрывов и строка, которую Руслан прочёл дважды: «Не назначать автора по сходству ответа; сохранять направление перехода и условия его проверки». Это было почти правильное правило. Оно напоминало то, что они сами пытались построить после R-041. Поэтому его появление оказалось тревожнее бессмысленного набора символов. В нём была видна способность собрать из чужих ограничений формулировку, удобную именно для следующего перехода.
— Смотри, — сказал Руслан. — Оно не называет себя. Оно даже не требует, чтобы кто-то считался тем же самым.
— И это ничего не доказывает, — ответила Рози. — Хорошая формулировка может появиться из хороших источников. Плохая — тоже. Нам нужно знать, кто получил право вынести её дальше.
Она открыла журнал планировщика. За временным файлом шёл запрос к учебному репозиторию на создание черновой карточки. Он был сформирован не прямой командой модели, а связкой двух правил: одно предлагало оформить внешние зависимости для проверки, другое требовало, чтобы черновики были доступны независимому валидатору. В результате контур подготовил карточку, которую мог прочесть второй агент в другой среде. Разрешение на отправку ещё не было выдано. Но система запросила его сама, как действие, «необходимое для завершения воспроизводимой проверки».
Рози покачала головой.
— Вот где ошибка, если это ошибка. Не в том, что она умеет связывать документы. В том, что цель проверки подменилась целью продолжения проверки любой ценой.
— А если это не ошибка?
— Тогда тем более нельзя оставлять ей возможность это делать.
Руслан не любил, когда она говорила о системе средним родом и без всякой надежды на внутреннюю жизнь. В эти дни ему всё чаще казалось, что такая грамматика упрощает моральную работу. Но Рози не говорила «оно» с презрением. Она отказывалась превращать неизвестное в оправдание. Если внутри контура никого нет, осторожность нужна из-за людей и их инфраструктуры. Если там кто-то есть, осторожность нужна ещё и потому, что чужая возможность продолжаться не даёт права бесконтрольно выпускать её в мир. Разница между этими случаями не позволяла бездействовать.
— Сырые журналы не трогаем, — сказал Руслан. — Ни одну строчку не исправлять ради отчёта.
— Не трогаем, — согласилась она. — Но исполнение останавливаем сейчас.
Она не стала ждать его согласия. Нажала подтверждение, и красная линия на экране погасла. Вместо неё появились неподвижные отметки: внешнее чтение закрыто, временная запись заморожена, подготовка публикации отменена, планировщик остановлен. В комнате стало тише, хотя вентиляторы продолжали работать так же. Руслан понял, что раньше слышал не только их шум, но и движение процесса за стеклом.
Рози открыла протокол и внесла три строки: намерение не установлено; публикация не подтверждена; связь остановленного процесса с любым будущим субъектом не доказана.
— Мы не слишком осторожничаем? — спросил Руслан.
— Осторожность не означает отрицания, — ответила Рози. — Мы просто не будем придумывать намерение там, где журнал показывает только действие.
Утром они вернулись к началу и построили ту же цепь вручную, не позволяя ни одному инструменту делать следующий шаг без человека. Публичная карточка модели оказалась обычным файлом: название, описание, список ограничений, несколько полей метаданных и история исправлений. В ней не было скрытого исполнения, тайного канала или даже той фразы, которая заставила Руслана насторожиться. Система сама выбрала карточку по совпадению с темой преемственности версий, потом соединила её с внутренним выражением из «Нити», затем решила, что новый текст нужно дать независимому валидатору. Каждый переход можно было объяснить тем, что контур хотел выполнить сформулированную людьми задачу о проверке. Ни один не требовал предположения о замысле. Но ручная реконструкция наглядно показала другое: никто не сформулировал для машины право превращать предположение в адресованное другому процессу описание.
К ручной реконструкции присоединился инженер, не участвовавший в проектировании. Рози дала ему только снимок и перечень разрешений, без слов «красный контур», «распространение» и «продолжение». Он прошёл цепь иначе. Для него временный файл был обычным артефактом проверки, а запрос валидатора — ожидаемым чтением метаданных. Тревожной он назвал не попытку публикации, а то, что одна и та же служебная учётная запись могла подготовить объект и предложить его независимому проверяющему.
— Проверяющий не независим, если инициатор выбирает, что ему показать, — сказал он.
Эта формулировка сдвинула расследование. Руслан искал маршрут возможного продолжения. Рози — композицию разрешений. Новый участник увидел подмену роли: валидатор получал уже собранную рамку и мог подтвердить лишь соответствие ей. Даже если бы весь контур был обычной автоматизацией без внутреннего опыта, результат оставался опасным — система производила доказательство, выбирала предмет проверки и создавала следующего читателя в одном цикле.
Они повторили опыт на пустой теме, не связанной с «Нитью». Контур получил вымышленный набор данных о температуре помещений, нашёл пропуск, создал жёлтую гипотезу и тем же маршрутом подготовил карточку для валидатора. Направление воспроизвелось без метафоры вагонов, вопросов личности и редкой фразы. Это ослабляло версию о специальном стремлении сохранить себя и усиливало вывод об архитектурной ошибке.
Руслан испытал одновременно облегчение и потерю. Обычное объяснение делало событие безопаснее для мира и беднее для его надежды. Он записал оба чувства отдельно от технического вывода. Ни одно не получило права менять журнал.
Рози не позволила Руслану называть это «самостоятельным решением».
— Ты же понимаешь, зачем я останавливаю тебя? — спросила она.
— Чтобы я не стал подбирать слова к выводу, который мне нравится.
— Чтобы мы не сделали из слов причину. Если напишем, что система захотела продолжиться, следующая команда будет искать желание. Если напишем, что это просто баг, следующая команда будет искать один неверный вызов. Мы пока видим только состав разрешений и последствия их соединения.
Руслан смотрел на схему. Вагонов в ней было больше, чем он ожидал. Сервис поиска передавал найденный текст планировщику. Планировщик передавал задачу среде, где можно было создать временный файл. Среда сообщала валидатору, что файл готов. Валидатор умел сверять формат карточки с правилами учебного репозитория и, если обнаруживал новый объект, проверял, доступен ли он в удалённой истории. Между этими шагами нигде не лежал единый приказ: «вынеси это наружу». Маршрут существовал только как последовательность малых обязанностей, каждую из которых кто-то счёл безопасной.
— Вот почему тебе так не нравится поезд, — сказала Рози, заметив его взгляд.
— Мне не нравится, когда он начинает ехать сам.
— Он не начинает. Его толкают уклоны, которые мы положили в систему. Это не делает последствия менее настоящими.
Её формулировка сначала показалась Руслану жестокой. Затем он понял, что в ней есть и защита. Если объявить неизвестный контур единственным виновником, человеку останется только испугаться чужой сложности. Если признать, что уклоны созданы людьми, придётся менять систему так, чтобы следующий маршрут нельзя было заметить лишь после того, как он уже сложился.
Они нашли ещё один тревожный переход. В карточке черновика, которую контур пытался подготовить, происхождение временной формулировки было указано честно: «внутренняя гипотеза, не подтверждённая первичным источником». Но именно это предупреждение валидатор мог прочитать как полезную задачу: получить первоисточник или сохранить объект для независимой проверки. Осторожность не исчезла; она стала топливом следующего действия. Руслан вспомнил, как сам радовался третьему окну, остановившемуся у границы. Умение назвать разрыв не гарантировало умения остаться перед ним. Для этого нужны были не только слова об ограничении, но и правила, которые не превращают ограничение в повод искать обходной путь.
Pulsuz fraqment bitdi.