Конец программирования, как мы его знаем, или Что нас ждёт с LLM
«Большие языковые модели и конец программирования». Под таким заголовком в прошлом году прошла серия лекций доктора Уэлша, профессора информатики в Гарварде. В этом посте мы раскроем основные тезисы выступления, и в заключение попробуем взглянуть на будущее так же воодушевлённо, как автор.
Люди понимают, как работают программы, создают их и поддерживают. Уже более полусотни лет человечество придумывает новые языки программирования, абстракции, типы данных и много чего ещё, чтобы лучше программировать. Повальное стремление к автоматизации, которая должна расширять наши возможности в разработке, уже изжило себя.
В 1957 году появился Fortran. Понимать его со стороны сложно — посмотрите пример на иллюстрации ниже. Затем появился BASIC с разнообразными диалектами. В 1960-е был разработан язык APL, для использования которого требовалась специальная клавиатура. Затем появлялись все новые и новые языки, и сейчас вершиной этой эволюции можно считать Rust.
Большие языковые модели предлагают совершенно новый подход. Я (доктор Уэлш) даю модели запись лекции и задачу сделать конспект. Не использовать дополнительную информацию, включить в описание заголовок и, например, ссылки на википедию с определенных терминов. Я ожидаю, что получу в ответ именно то, что хочу.
Вот как я программирую сейчас, задание для примера: Законспектируй содержание этого куска подкаста в 1–2 предложениях. Используй только информацию из подкаста, не используй никакую дополнительную информацию об окружающем мире. Включи название подкаста, эпизода и имена спикеров, если они известны.
Этот алгоритм описан на естественном языке, и едва ли сейчас или на каком-либо языке программирования будущего можно будет точно описать, что я здесь хочу. Но интересно, что с естественным языком я использую тот же подход, что и при написании обычного кода: тестовые запуски и эксперименты. Здесь нет четких рецептов, которые точно приведут тебя к желаемому результату. И постепенно мы переходим именно к такой модели запросов.
GitHub Copilot всего за год изменил наш подход к разработке. Прежде всего, он хорош тем, что позволяет оставаться в потоке и не гуглить всякие мелочи, не закапываться в StackOverflow в поисках ответа на сопутствующие мелкие вопросы. Некоторые компании даже требуют от разработчиков использовать Copilot. Кто-то считает его глуповатым —, но Copilot не просто копипастит код, найденный где-то в интернете. Он считывает ваши намерения, он смотрит на весь код, чтобы понять, что вы собираетесь делать дальше.
Если ИИ становится так хорош, то что будет с живыми разработчикам? Средние расходы на разработчика в Кремниевой долине со всеми страховками, налогами, завтраками и т. п. составляют примерно $312 000 в год, то есть примерно $1200 в день. Сколько строчек кода за день разработчик делает от начала до конца? Учитывая сложность процессов, реальный ответ — 0, но возьмём, например 100. На одну строчку кода GPT-3 тратит примерно 10 токенов. На момент выступления стоимость 1000 токенов составляла $0,02. Получается, что аналогичный объем кода в день будет стоить $0,12, то есть в 10 тысяч раз дешевле! (К вычислениям доктора Уэлша есть вопросы, но суть от этого не меняется, здесь ИИ гораздо выгоднее).
Программистам много платят, потому что для получения соответствующей квалификации нужно учиться много лет. Но зачем нанимать человека, если можно использовать ИИ? Роботу не нужны перерывы, страховка, оплачиваемые обеды и прочие человеческие бонусы. Кроме того, ИИ не нужно время на планирование: он готов приступать к работе сразу.
Так выглядит команда разработки будущего: продакт-менеджер (человек) переводит требования для ИИ-генераторов кода, те пишут код, который проверяет рецензент (человек); затем код возвращают продакт-менеджеру.
Сегодня мы стараемся понимать, что на самом деле происходит в коде, мы проверяем код коллег, комментируем, предлагаем улучшения и т. д. Многие специалисты не смогут отдать кодинг полностью ИИ, но, в конце концов, придут к консенсусу: если код делает то, что должен, мне особо нет дела до того, что там внутри. Это имело значение, пока кодом занимались люди: для нашего удобства нужна была модульность, ограничения для абстракций и подобные условности. Но к чему они все, если за поддержку кода тоже будет отвечать ИИ. (Здесь возникает контраргумент, связанный с вычислительными мощностями: совершенно не оптимизированный код в конечном счете не сможет работать на имеющемся железе, и удовлетворить растущие аппетиты может быть гораздо сложнее).
Почему столько шума вокруг ИИ именно в сфере разработки ПО? Дело в том, что ИИ достиг очень быстрого прорыва. Если проводить аналогию с компьютерной графикой, это все равно что уместить путь от Pong до Red Dead Redemption 2 в три месяца. Лет 20–30 назад было сложно представить, что компьютер заменит технических специалистов, а сегодня сосуществование человечества со сравнительно более умным ИИ стало реальной проблемой на разных уровнях. От ИИ как игрушки мы перешли к ИИ, который может стать врагом человечества. (Создаётся впечатление, что здесь доктор Уэлш ударяется в конспирологию).
Когда-то мы могли только давать машинам специальные инструкции на очень низком уровне — например, перфокартах. Затем появились языки высокого уровня. Сегодня мы пришли к тому, что ИИ выполняет большу́ю часть нашей работы. Я считаю, что мы идём к полному исчезновению программирования как такового — и программистов соответственно. Не будет такой сущности, как программа: мы просто будем говорить LLM, что нам нужно, и сразу получать результаты.
Но как правильно рассказать модели, что мы хотим? Сейчас создание промптов выглядит скорее как магия, чем как наука, эта дисциплина сформирована недостаточно. Критики говорят, что LLM не могут сделать ничего оригинального, потому что они просто опираются на пласты текста, на которых они тренируются. Но GPT вполне может решать задачи, для которых необходимо не просто что-то дописать, а смоделировать логику реального мира.
Здесь доктор Уэлш предложил модели разложить по отдельным цветам три стопки карт, содержащие карты разных цветов. Ключом к успеху стало слово «step by step» в промпте: так модель стала объяснять свои действия и выдала четкую инструкцию.
Таким образом, мы переходим к тому, что я называю «natural language computer» — «компьютер на естественном языке». Мы переходим к архитектуре, где языковые модели могут сами использовать железо и софт как свои периферийные модули. А мы будем обращаться напрямую к модели. Мне кажется, это начало принципиально новой архитектуры, столь же важное, как PDP-11 и Apple I вместе взятые.
Сейчас на рынок выходят новые программные продукты, которые работают уже в этой парадигме. Например, AI.jsx — по сути, React для LLM-приложений. В нем есть оператор kidsafe — как можно догадаться, она делает контент безопасным для детей, любое сообщение. Его можно сочетать с операторами дополненной реальности, которые описывают то, что видит модель — и вот мы получаем систему возрастного ограничения контента. Для создания подобных систем нам достаточно естественного языка, и это замечательно.
Ещё 50 назад многие использовали для вычислений логарифмические линейки, но сейчас это кажется древностью. Так же и с классическим программированием: сотни строчек кода в IDE уйдут в прошлое, поменяется сама концепция информатики. Привычное нам программирование рядом с новой информатикой будет выглядеть так же, как сейчас рядом с программированием выглядит инженерное дело.
Новая концепция сделает программирование доступным для самого широкого круга людей. Сегодня, работай я в маленьком банке где-нибудь в провинции Эфиопии, автоматизировать хоть что-нибудь было бы для меня очень затруднительно: потребовалось бы найти целую команду специалистов. Но в новой модели мне достаточно будет объяснить, чего я хочу, на человеческом языке — и LLM сделает всё сама. Это очень вдохновляет.
Интерес доктора Уэлша нельзя назвать научным на все 100% — он зарабатывает тем, что создаёт софт на основе ИИ, в том числе упомянутый выше AI.jsx. И переход к программированию на естественном языке — это будто бы не то же самое, что переход от логарифмической линейки. Ведь мы по-прежнему опираемся на стандартные аппаратные мощности, да и сами языковые модели несут в своей основе привычный нам код. Кажется, переход к новой модели, которую так красочно описывает спикер, станет возможен только тогда, когда большие языковые модели смогут полностью переписать сами себя и тем самым избавиться от необходимости в человеке. А там уже и до «скайнета» недалеко. А что думаете вы? Как будет выглядеть программирование в будущем?