Обещание больших языковых моделей (LLM) для мира разработки ПО — превратить кодеров в архитекторов. Однако не все LLM созданы одинаковыми, пишет на портале The New Stack Питер Шнайдер, старший продакт-менеджер Qt Group.

Заменит ли генеративный ИИ (GenAI) программистов? Скорее всего, нет. А вот человек, использующий GenAI, может. Но с учетом того, что сегодня существует множество LLM, опыт может быть разным.

Если вам сложно разобраться во всех этих LLM, вы не один такой. Мы наблюдаем настоящую гонку вооружений. Одних только предложений GenAI от Google несколько — новейшие открытые модели под названием Gemma являются последним примером стремительного сокращения размеров моделей (похоже, их пора назвать малыми языковыми моделями — Small Language Models).

Более актуальным для сообщества DevOps является молниеносный темп разработки LLM, специально предназначенных для генерации кода, таких как недавно обновленная Code Llama 70B. Естественно, GenAI напугал многих разработчиков. Почти половина из них в одном из недавних исследований выразила опасения, что их нынешний набор технических навыков не позволит им преуспеть в мире GenAI.

Но действительно ли эти опасения оправданы? Сообщения о исчезновении человека-программиста могут быть сильно преувеличены. У людей может быть даже больше времени, чтобы подготовиться к миру, в котором доминирует GenAI, чем они думают.

На самом деле, более уместным вопросом для разработчика будет не «Заберет ли GenAI мою работу?», а скорее «Какую LLM мне использовать?».

Слишком большие, чтобы преуспеть в кодинге

Перспективы LLM для мира разработки программного обеспечения заключаются в превращении кодеров в архитекторов. Однако не все LLM созданы одинаковыми, и стоит разобраться, почему вообще появляются небольшие LLM.

Более мощные основные модели, такие как GPT-4 и Claude 2, все еще могут решить менее 5% реальных проблем GitHub. ChatGPT все еще много галлюцинирует: поддельные переменные или даже концепции, которые устарели уже более десяти лет назад. Кроме того, он заставляет бессмыслицу выглядеть очень хорошо. Вы можете попытаться «соорудить подсказку», как выбраться из этой бессмыслицы, но существует определенный предел количества полезного контекста — слишком много контекста приводит к более запутанным и случайным результатам, причем за счет увеличения вычислительной мощности.

Более серьезная проблема с LLM для кодирования — это доверие. Исторически сложилось так, что основные LLM без разбора «всасывают» все, что есть в Сети, как большой цифровой пылесос, без особой прозрачности в отношении того, откуда они берут данные. Но если хотя бы один процент кода, который поставляет компания, содержит код другой организации, защищенный авторским правом, это уже проблема. Вы можете представить себе кошмарный сценарий отзыва продукта, когда у поставщика нет возможности на лету отсортировать сомнительный код.

Однако ландшафт LLM быстро меняется.

Достаточно ли LLM специализированы для кодинга?

Когда в начале года вышло обновлении Code Llama 70B, это было похоже на попытку исправить недостаток внимания к кодингу среди основных LLM. Модель предлагается в трех разных размерах: 7 млрд., 13 млрд. и 34 млрд. параметров. Она также обучена на 500 млрд. лексем кода и данных, связанных с кодом, и содержит большое контекстное окно из 100 000 лексем.

Наиболее интересной, с теоретической точки зрения, является Code Llama Python, версия Code Llama, специализированная для Python — в основном из-за того, что она представляет собой эволюцию LLM в будущем. В отличие от некоторых моделей от конкурентов, эта посвящена исключительно программированию на одном конкретном языке и обучена примерно на 100 млрд. дополнительных лексем кода Python. Такой уровень индивидуального моделирования для конкретных сценариев использования — именно то, что нужно индустрии.

Однако еще предстоит выяснить, насколько полезным окажется что-то вроде Code Llama для разработчиков. Загляните на Reddit, и, судя по всему, первый вердикт будет таков: модель вызывает недовольство, в том числе из-за сложного формата подсказок, слишком строгих ограждений и, что особенно важно, галлюцинаций. Последний пункт — еще одно справедливое напоминание о том, что любая модель хороша лишь настолько, насколько хороши данные, на которых она обучена.

Но как бы то ни было, подход к созданию LLM на заказ привлек внимание к тому факту, что большие языковые модели — не единственный способ добиться успеха в генерации кода с помощью ИИ. Мы видим, как это отражается в набирающей обороты индустрии небольших, более узконаправленных LLM, специализирующихся на кодировании — таких, как BigCode, Codegen и CodeAlpaca. Еще одна модель — StarCoder — несмотря на размер всего в 15,5 млрд. параметров превосходит в оценочных тестах такие крупные модели, как PaLM, LaMDA и LLaMA.

У каждого из этих вариантов есть плюсы и минусы, но самое главное, что малые модели будут гораздо безопаснее для использования, чем большие. Если вы кодируете на C++, действительно ли вам нужна LLM, набитая неактуальными знаниями вроде «кто был третьим президентом США?». Чем меньше пул данных, тем проще поддерживать актуальность, тем дешевле обучение модели и тем меньше вероятность того, что вы случайно украдете чьи-то данные, защищенные авторским правом.

Командам DevOps в 2024 г. будет полезно тщательно изучить все доступные на рынке варианты LLM, а не останавливаться на самых заметных. Возможно, даже стоит использовать несколько вариантов для разных сценариев использования.

Но вернемся к насущному вопросу...

Заменит ли GenAI человека?

Смогут ли какие-либо из этих инструментов GenAI стать заменой настоящим программистам? Если точность кода, предоставляемого моделями в ответ на запросы, не возрастет до приемлемых пределов погрешности (т. е. 98-100%), то, скорее всего, нет.

Однако давайте предположим, что GenAI достигнет этого предела погрешности. Означает ли это, что роль инженера-программиста изменится, и вы будете просто просматривать и проверять код, созданный ИИ, а не писать его? Такая гипотеза может оказаться ошибочной, если верить принципу «четырех глаз». Это один из важнейших механизмов внутреннего контроля рисков, предписывающий, чтобы любая деятельность, связанная с существенным риском (например, доставка ПО), была проверена и перепроверена вторым, независимым и компетентным лицом. Если только ИИ не будет переклассифицирован как независимая и компетентная форма жизни, то в ближайшее время он не должен стать одной парой глаз в этом уравнении.

Если и существует будущее, в котором GenAI станет способным к сквозной разработке и созданию человеко-машинных интерфейсов, то это не ближайшее будущее. LLM могут выполнять адекватную работу по взаимодействию с текстом и элементами изображения. Существуют даже инструменты, позволяющие преобразовывать веб-дизайн в код фронтенда. Однако, по сравнению с кодированием, ИИ гораздо сложнее в одиночку справиться с дизайном, связанным с графикой и рабочими процессами UI/UX (хотя и не невозможно). Кодирование — это также лишь одна часть разработки. Остальное — это инвестирование в нечто новое, выяснение аудитории, воплощение идей в нечто реализуемое и полировка. Вот где проявляется человеческий фактор.

Независимо от того, насколько хороши LLM, для программистов всегда должен действовать один принцип: относитесь к любому коду, как к своему собственному. Делайте экспертную оценку и спрашивайте своего коллегу: «Хороший ли это код?». Никогда не доверяйте ему слепо.