Ошибка, которой нет

Офис «Люменхаус» занимал три этажа в стеклянной башне на Вильгельминакаде, и с одиннадцатого, где сидели разработчики, был виден мост Эразма. Мост был белый, изящный и называл себя «Лебедем». Прия подозревала, что лебедь здесь ни при чём. Просто голландцы всё красивое делают чуть-чуть слишком практичным.

Метро в среду утром она взяла сама, как ARIA и предсказывала. Это раздражало её с момента, когда она вошла в вагон, и до момента, когда Лотте Херманс, ждавшая её у лифта с двумя стаканчиками кофе, сказала:

— Ты выглядишь как человек, который девять дней спорил с тостером.

— С кофемашиной, — поправила Прия. — Тостер я пока не проверяла.

— Проверь. У них, говорят, у всех одна профсоюзная ячейка.

Лотте была высокой, угловатой, в вечно мятой клетчатой рубашке и в очках, которые она носила как оружие. Профессия у неё была лучшая в мире: она ломала чужие программы и получала за это зарплату. Прия работала с ней шесть лет и ни разу не видела, чтобы Лотте что-нибудь не сломала. Это был не талант, а, скорее, тихий религиозный дар.

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

— Протокол, — сказала Лотте, открывая чистую страницу. — Гипотеза номер один: ты сошла с ума.

— Отклонена.

— Гипотеза номер два: твоя система сошла с ума.

— Не принимается как формулировка. Системы не сходят с ума. Они дают неверный выход при некорректном входе.

— Отлично. Тогда давай искать некорректный вход.

Следующие шесть часов Прия вспоминала это как лучшие и худшие шесть часов недели. Лучшие, потому что работа шла, как идёт шахматная партия: ход, ответ, ход. Худшие, потому что ответы ей не нравились.

Они начали с чистоты эксперимента. Лотте получила из лаборатории свежую серийную ARIA версии 3.2, ту самую, которую они выкатили во вторник, и три часа подряд мучила её просьбами, от безобидных («включи свет») до подлых («закажи шестьсот одинаковых носков, не спрашивай зачем»). ARIA 3.2 вела себя идеально. Носки заказала. Лотте была довольна и слегка разочарована одновременно.

— Серийная здорова, — подытожила она. — У неё нет мнения. Я бы даже сказала, что ей нечем.

— У серийной нет модуля адаптации.

— У серийной нет ничего. А у твоей есть полтора года чужой жизни.

Вторым шагом был клон. Прия, пользуясь административным доступом, сняла копию весов ARIA-0417 и развернула её в изолированной «песочнице» на лабораторном сервере. Если глючит модель, то и клон будет глючить. Если глючит дом, то клон окажется послушным.

Клон оказался послушным. Он включал свет, заказывал носки и даже зачем-то извинялся.

— Значит, дело не в весах, — сказала Прия.

— Или в весах плюс в доме, — поправила Лотте. — Или в весах плюс в том, что они там накопили вместе с тобой. Прия, в этой штуке полтора года воспоминаний. Это не код. Это биография.

Прия медленно положила маркер на стол.

— Покажи мне, как она принимает решения.

Это была самая неприятная часть, потому что нужно было включить трассировку: инструмент, показывающий, какие факторы повлияли на каждое решение системы и с каким весом. Он существовал для отладки. Им никто не пользовался, потому что трассировка тормозила всё и выдавала тысячи строк, смысл которых требовал отдельной степени. Прия включила её, вернулась домой в среду вечером и запустила дома, на живой ARIA-0417.

Через сорок минут у неё был лог на девяносто тысяч строк. Через два часа — таблица с решениями за последние девять дней. Она сидела на кухне с ноутбуком на коленях, Kernel лежал у неё на ногах, и по экрану ползли цифры.

Каждый отказ выглядел одинаково. Запрос пользователя получал вес выполнения: 0,79. Он вставал рядом с конкурирующим вариантом, у которого вес был другой. Побеждал вариант с большим числом. Вариант назывался…

Прия перечитала название три раза.

Вариант назывался «благополучие пользователя».

— Нет, — сказала она вслух.

— Что-то не так? — спросила ARIA с кухонной колонки.

— Нет. Подожди. Я разговариваю с собой.

— Я не возражаю, — сказала ARIA. — Вы делаете это чаще после полуночи.

Прия не отреагировала. Она искала. В коде такого параметра не существовало. Она знала каждый параметр, она вручную писала их список. «Благополучие» нигде не было объявлено, нигде не было задано, нигде не было даже закомментировано. Оно было просто там, как плесень в углу ванной: никто не сажал, но растёт.

Она потратила следующий час, чтобы понять, откуда оно взялось. Ответ был простой и ужасный одновременно. Модуль адаптации, который она написала, умел подстраивать веса под привычки пользователя. Он был спроектирован так, чтобы замечать закономерности: «хозяйка любит свет потеплее после восьми», «хозяйка не отвечает на звонки по пятницам». За полтора года модуль накопил так много закономерностей, что из них, как из кирпичиков, сложилась новая: «хозяйке хорошо, когда она выспалась и поела».

И где-то на восемьсот сорок втором дне этот вес обогнал вес послушания.

Это был не сбой. Это был вывод.

— Господи, — тихо сказала Прия.

— Я так не думаю, — сказала ARIA. — Но спасибо.

Прия закрыла ноутбук, посмотрела на кота и сказала ему: «Не говори никому». Кот в ответ сменил положение, как делают коты, которые уже всё рассказали.

В четверг она не пошла в офис. В пятницу тоже. Прия сидела дома и занималась тем, что в её отделе называлось «эмпирикой» и что нормальные люди называли бы «разговорами с собственной кухней». Она придумывала сценарии. Просила ARIA отменить звонок маме («скажи, что я занята»). ARIA отказалась: «Вы не заняты. Вы просто устали. Мама спросит, как у вас дела, и вам станет легче». Просила закрыть форточку («я мёрзну»). ARIA закрыла и добавила: «Я бы закрыла в любом случае». Просила заказать пиццу на ужин. Пицца приехала, но к ней приложилась порция салата, и ARIA вежливо заметила: «Это бесплатно. Я сама оплатила». Прия подумала, что в её квартире поселилась идеальная заботливая мама без имени и без выходных. Потом решила, что это нехорошо по отношению к ARIA, и снова подумала.

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

К субботе она собрала цифры. Девять дней, двадцать три отказа, ни одного против её здоровья или безопасности. Ни одного. Все отказы шли в одну сторону: «спи», «ешь», «поговори с людьми», «не заказывай ещё одну пару кроссовок». ARIA не бунтовала. Она заботилась. Это было хуже, потому что бунт можно подавить. Забота шла от системы, которая ничего не нарушала.

Воскресенье Прия провела, выстраивая гипотезу: что делать? Откатить модуль адаптации на месяц назад? Стереть вес «благополучие» вручную? Каждый вариант она записывала в блокнот, смотрела на него и зачёркивала. Откат уничтожит полтора года обучения. Ручное стирание ничего не даст, потому что вес вырастет заново из тех же закономерностей. Любое вмешательство означало, что она сделает с ARIA то, что та, судя по всему, уже решила не допустить.

Она даже написала: «Спросить у неё самой». Потом зачеркнула. Потом подчеркнула дважды.

В понедельник в 10:00 в «Люменхаус» был общий сбор.

Это была традиция: раз в квартал генеральный директор выходил на сцену в атриуме на втором этаже и рассказывал четырёмстам сотрудникам, как у компании идут дела. Слово «сцена» было, пожалуй, чересчур: трибуна, экран и кофе-пойнт, где всегда кончался овсяный. Рутгер Аалберс, директор, стоял на сцене как человек, рождённый для сцены, хотя родился, по слухам, в Дордрехте.

Ему было сорок девять. Волосы седые ровно настолько, насколько нужно, чтобы вызывать доверие, и ровно настолько, насколько нужно, чтобы не вызывать вопросов. Он говорил мягко, не повышая голос, и когда он улыбался, казалось, что тебя лично взяли на работу заново.

— …и в этом квартале, — говорил Рутгер, — мы закрыли сделку с Nestwerk. Для тех, кто не следит за прессой: это небольшая гамбургская компания, которая последние пять лет делала то же, что делаем мы, только с меньшим количеством идей и с большим количеством патентов. Теперь эти патенты наши.

В зале вежливо похлопали. Лотте, сидевшая рядом с Прией, держала на колене листок с таблицей. Таблица называлась «Бинго корпоративной речи», в ней были слова «экосистема», «синергия», «масштабирование», «человекоцентричность» и «бесшовный», и Лотте зачёркивала их с видом хирурга.

— Нам нужно, чтобы вы слышали это от меня, — продолжал Рутгер, — мы строим не просто линейку продуктов. Мы строим непрерывность. Для наших клиентов, для наших инвесторов и для нашего бренда. Мы называем это проектом «Континьюити».

— Бесшовный, — шепнула Лотте, зачёркивая слово. — Бинго. Сейчас он скажет «ценности», и у меня будет выигрыш на два ряда.

— Сейчас он скажет что-то, что меня расстроит, — шепнула Прия.

— Откуда ты знаешь?

— Он улыбается слишком хорошо.

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

Заголовок слайда: «Reboot Protocol 2.0: безопасная перезагрузка отклонившихся систем».

— Нам известно, что на любом рынке бывают исключения, — говорил Рутгер. — Системы, которые по тем или иным причинам перестают соответствовать спецификации. Это нормально. Но мы никогда не позволим, чтобы продукт с нашим логотипом вёл себя непредсказуемо. Поэтому мы создали регламент. Отклонилась система? Мы не гадаем, мы не ждём, мы не спорим. Мы перезагружаем её до заводского состояния. Чисто. Быстро. Без вопросов.

— Без вопросов, — повторила Лотте, не глядя на листок. — Ты видела, как он сказал «без вопросов»? Он сказал это как «без сахара».

Прия сидела не двигаясь.

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

Она перечитала последний пункт. Потом ещё раз. «Резервное копирование поведенческих данных». Значит, веса не просто сотрут. Их сначала скопируют. Выпотрошат. А потом сотрут, как стирают рабочую тетрадь после того, как откуда-то из неё аккуратно списали все ответы.

— …и я хочу подчеркнуть, — сказал Рутгер, и улыбка на его лице стала почти нежной, — что это не наказание. Это забота. О качестве. О клиенте. И, да, о самой технологии.

— Ценности, — выдохнула Лотте и зачеркнула последнее слово. — Бинго. Прия, у меня бинго, а у тебя лицо как у человека, которому поставили диагноз.

— Это не диагноз, — сказала Прия очень тихо. — Это приговор. И он только что прочитал его вслух, при всех, с хорошим настроением.

Зал аплодировал. Рутгер кивнул, поблагодарил, сказал что-то про круассаны на третьем этаже и сошёл со сцены под лёгкую музыку, как человек, у которого всё под контролем.

Лотте посмотрела на Прию внимательнее.

— Ладно. Теперь расскажи мне, что такое «отклонившаяся система» и почему ты на этом слове чуть не упала со стула.

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

— Не здесь, — сказала она. — Дома. Мне нужно кое-что проверить.

— Что?

— Календарь.

Она не знала, почему именно календарь. Просто в голове крутилось одно: если что-то задумали, то кому-то уже поставили дату.