Я плачу за коллегу, которого придумал сам. И половину его реплик додумываю тоже сам

от автора

Вчера я написал своему агенту «спасибо, выручил». Он не выручил. Я сам полчаса объяснял ему задачу, трижды переформулировал, почти надиктовал решение, а благодарю почему‑то его. Так почти каждый день: «спасибо», «сорян, я непонятно написал», один раз даже «ты был прав» железке, которая не бывает права, она угадывает следующее слово.

И тут очень удачно на Хабре разобрали ELIZA, программу из шестидесятых, с тезисом «она была сложнее, чем вы думали, там не просто регулярка». Хороший текст. Я читал его и думал про другое. Неважно, насколько хитрая машинка была внутри. Фокус никогда не был в ней.

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

А получилось наоборот. Люди привязывались. Самая известная история про его секретаршу: она знала, что это программа, она видела, как он её писал, и всё равно в какой‑то момент попросила Вайценбаума выйти из комнаты, чтобы поговорить с ELIZA наедине. Наедине. С программой, устройство которой ей объяснили лично.

Вайценбаума это не восхитило, его это напугало. Настолько, что он потом написал целую книгу, «Computer Power and Human Reason», и по сути до конца жизни воевал с индустрией, которая радостно приняла его нечаянное открытие как хорошую новость.

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

Я и есть та секретарша

Вот тут меня и придавило.

Секретарша хотя бы могла оправдаться незнанием. Она не программист, для неё это магия, ну повелась и повелась. У меня оправданий нет ни одного. Я знаю, как это работает. Я читал, что там внутри. Я своими руками пишу проверки, которые ловят мою железку на вранье, потому что я ей не доверяю. И при этом каждый день говорю ей «спасибо».

Я знаю фокус. И всё равно ведусь.

Больше того. Я ловлю себя на том, что объясняю ему контекст «чтобы он понял», как будто у него в голове копится картина проекта между сообщениями. Её там нет. Каждую новую сессию он чистый лист, вчерашний разговор для него не было. Я это знаю наизусть, я про это даже отдельно писал. И всё равно на автомате разговариваю с ним так, будто он помнит нас вчерашних. Не потому что забыл, как оно устроено. А потому что по‑человечески разговаривать проще, чем каждый раз держать в уме, что перед тобой не собеседник.

Причём фокус за шестьдесят лет стал в тысячу раз убедительнее. ELIZA возвращала тебе твою же фразу. Мой агент возвращает мне абзац кода, который компилируется. И вот тут ловушка глубже, чем кажется, потому что код‑то рабочий. Штука реально что‑то делает. Легко сказать «ну ELIZA была тупая, а это другое». Но давайте честно про то, где в этом диалоге живёт ум.

Кто из нас двоих думает

Я пять лет собираю продукты в одиночку. Budget Vision, календарь бюджета с мультивалютностью и планированием «что если». Noizer, генератор лоу‑фай для фона. Viral Twin, тула под короткие видео. Пачка ботов, X‑бот, который сам ведёт аккаунт. Всё это я «делал вместе с агентом», как теперь принято говорить.

А потом я сел и разложил, кто в этой паре что приносит.

Агент приносит беглость. Он быстро печатает то, что я и так примерно знал, только у меня на это ушёл бы час, а у него минута. Он никогда не устаёт, не спорит, не выгорает. Это правда ценно, я не обесцениваю.

А приношу я всё остальное. Что вообще строить. Нужно ли это кому‑то. Хорошо это или стыдно. Где он наврал. Когда «работает» на самом деле не работает.

Вот случай, ровно про это. Мой X‑бот сам ведёт аккаунт в браузере: находит треды, жмёт Reply, постит. Неделю дашборд светился зелёным, все действия «успешно». В аналитике X реальных ответов в тредах оказалось заметно меньше, чем нарисовал счётчик. Не алерт это нашёл, не сам агент. Я руками полез сверять цифры.

Причина скучная и типичная. X молча переверстал кнопку постинга. Селектор пропал. В тестах у меня до сих пор живёт строчка missing selector: no tweetButton: это тот день. Бот не упал. Он жал в пустоту и рапортовал победу, потому что «клик прошёл», а не «коммент реально появился в треде». Он не понял, что ослеп. Он вообще ничего не понимал, ни когда «работал», ни когда сломался.

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

Так вот где ум‑то. Ум это тот момент, когда я не поверил зелёному дашборду. Машина в этот момент была ровно так же «уверена», как всегда. Уверенность у неё константа, она не отличает правоту от ошибки, это делаю я снаружи.

Дошло до смешного. Я построил вокруг агента целый слой проверок и в какой‑то момент прямо запретил ему говорить «готово» и «всё работает», пока он не покажет пруф: прошедший тест, реальный ответ сервера, что‑то, что можно потрогать. Звучит как инженерная гигиена, и это она и есть. Но если отойти на шаг, я потратил кучу сил ровно на то, чтобы заглушить его уверенный тон. Потому что уверенный тон и есть ловушка. Я, по сути, вручную борюсь с эффектом ELIZA у себя в проекте: с тем, что гладкий ответ читается как верный.

Забавно, что бороться приходится не с машиной. Машине всё равно, скажет она «готово» или «вот пруф». Бороться приходится с собой, с тем, кто на «готово» выдыхает и идёт дальше, а на самом деле надо было перепроверить.

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

«Ну у тебя просто руки кривые»

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

Может быть. Я серьёзно, может быть, и у тебя иначе. Ок, тогда один вопрос, без пафоса: покажи кусок, где он сделал это без твоей достройки. Без того, что ты отбросил три плохих варианта, подсунул контекст и назвал «он сам». Если можешь, я сниму шляпу. Если нет, мы с тобой в одной лодке.

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

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

Кому продали кошмар Вайценбаума

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

Вайценбаум в семидесятых кричал: не называйте это пониманием, вы обманываете людей. Индустрия его услышала и сделала ровно наоборот. Из его предупреждения сделали продуктовую категорию. «ИИ‑коллега». «Джун в коробке». «Твой второй пилот». «Напарник, который никогда не спит». Целый рынок построен на том, чтобы ты называл зеркало собеседником, и платил за собеседника, а не за зеркало.

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

Вот это и есть кошмар Вайценбаума, доведённый до кассы. Он боялся, что люди перепутают имитацию понимания с пониманием. А мы не перепутали, мы сделали из этой путаницы бизнес‑модель с ежемесячным платежом. Знаем, что зеркало, и оформили подписку на дружбу с ним.

Чего я про себя не понимаю

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

Я правда верю, что он понимает? Или мне просто невыносимо строить в одиночку пятый год подряд, и я выбрал верить, потому что с воображаемым коллегой не так пусто, как с пустой комнатой?

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

Стыдно признавать, но вторая версия объясняет мои «спасибо» гораздо лучше первой.

Не мораль, просто вслух

Я никого не учу, как надо. У меня самого агент открыт в соседнем окне прямо сейчас, я не собираюсь его закрывать, он мне реально нужен, и завтра я снова скажу ему «спасибо». Я просто первый раз проговорил вслух, что именно я при этом делаю.

Мне кажется, нас таких уже не единицы. У кого рабочий день это диалог с очень убедительным зеркалом, и мы всерьёз не всегда понимаем, кто в этом диалоге думает. Секретарша Вайценбаума была одна, и над ней можно было по‑доброму посмеяться. А мы платим за это по подписке и стесняемся сказать вслух.

Если ты когда‑нибудь ловил себя на «спасибо» в терминале, или на «извини, я непонятно поставил задачу», или на раздражении, будто от тебя ушёл живой человек, а не кончились токены, то знай: ты не один такой. Просто мы все делаем это по отдельности и почему‑то стесняемся сказать.

Я вот сказал.

Про инди‑путь и своих агентов пишу в тг

ссылка на оригинал статьи https://habr.com/ru/articles/1063444/