К книге
Генеративный искусственный интеллект. Как ИИ меняет нашу жизнь и работу6 Повышаем производительность: ИИ как помощник. 6.2. Пишем код вместе с LLM
60%
6 Повышаем производительность: ИИ как помощник. 6.2. Пишем код вместе с LLM
81

Неудивительно, что среди первых пользователей больших языковых моделей было много технических специалистов и программистов. И одним из наиболее распространенных практических применений LLM является помощь в написании кода. Ранее мы упоминали Copilot от GitHub как ведущий продукт в этой области. Copilot основан на модели Codex от OpenAI, которая прошла тонкую настройку для написания кода по миллионам репозиториев GitHub13. К другим моделям для генерации кода относятся CodeWhisperer от Amazon (см. http://mng.bz/QPAe), Ghostwriter от Replit (см. http://mng.bz/XNvM) и StarCoder с открытым исходным кодом (см. http://mng.bz/yQlE). Модели в некотором смысле легче писать код, чем выполнять другие типы генеративных задач, поскольку код структурирован и в нем много повторяющихся шаблонов. В прозе люди редко используют одни и те же фразы по несколько раз, а вот в программе мы можем встретить функции, которые вызываются неоднократно. Эти модели создавались, чтобы выступать в качестве помощника по программированию: по мере того как вы пишите код, модель автоматически предлагает варианты продолжения. Другая возможность – вы можете попросить модель написать целый фрагмент кода, например функцию, просто сформулировав в виде документационной строки (docstring) [80] ее описание на естественном языке и указав язык программирования. Хотя иногда модель выдает неверные решения, особенно для сложных функций, чаще она выполняет задачу правильно с первой попытки, что значительно ускоряет работу.

Поскольку генеративные модели были обучены интерпретировать код, некоторые LLM можно использовать в качестве компьютерного терминала или командной строки, а также в качестве игрушечных баз данных. DiagramGPT, работающая на базе GPT‐4 и созданная компанией по разработке инструментов для мозгового штурма и построения диаграмм Eraser, является лишь одним из примеров новых возможностей LLM (см. http://mng.bz/MBNm). Она принимает на вход данные или описание их структуры [81], текстовое описание какой-либо системы/процесса или фрагмент программного кода и создает их визуальную диаграмму, чтобы человек, незнакомый с кодом, схемой или системой, мог легко представить, что происходит.

Рис. 6.4. Документационная строка, созданная с помощью ChatGPT, правильно описывает данную функцию и ее аргументы

Если мы продолжим говорить о выполнении рутинных задач с помощью LLM, то есть еще одно применение, связанное с программированием, в котором эти модели преуспевают, – это написание документации. С точки зрения простых соображений конфиденциальности нецелесообразно вставлять проприетарный код во внешний API, но для неконфиденциальных функций мы можем ввести промпт с кодом в Copilot или другую LLM и запросить, чтобы модель создала комментарии, объясняющие работу функции, добавила документационную строку, описание типов аргументов, а также другие улучшения, которые сделают готовый код более читабельным. На рис. 6.4 показан пример документационной строки, сгенерированной с помощью ИИ.

Некоторые LLM, которые не были созданы специально для целей программирования, тоже могут быть хорошими помощниками в написании кода. Например, регулярные выражения (regex) – это, как известно, сложная, но важная парадигма в программировании. С помощью регулярного выражения можно задать определенный шаблон, а затем искать фрагменты текста, соответствующие шаблону или отдельным его частям. Различные символы могут указывать, какие буквы и цифры нужно искать, сколько их должно быть и какие части строки игнорировать. Регулярные выражения часто используются для извлечения из текста таких данных, как адреса электронной почты или номера телефонов. Для наглядности приведем пример регулярного выражения для извлечения адресов электронной почты: /^([a-z0–9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,63})$/. Недавно одной из нас понадобилось довольно сложное регулярное выражение, и мы попросили GPT‐4 написать его. GPT‐4 не только выдал правильное регулярное выражение, но и смог пояснить, что означает каждый символ в его ответе. На рис. 6.5 показано более простое регулярное выражение, созданное ChatGPT. Другие пользователи сообщали о применении ChatGPT для написания аналогичным образом макросов Excel14.

Написание кода – это область коллективных усилий, в которой люди всегда делились кодом, повторно его использовали и адаптировали для других целей. Давайте вспомним платформу Stack Exchange, популярный источник данных для обучения LLM, упомянутый в главе 2. Stack Overflow – самый популярный сайт экосистемы Stack Exchange, где люди задают друг другу вопросы по программированию: обычно те, кто спрашивает, описывают свою задачу, показывают несколько строк кода, выдающих ошибку, и просят совета знающих людей. Лучшие ответы на Stack Overflow содержат не только исправленные фрагменты кода, но и подробные объяснения причины возникновения ошибки в первоначальном коде, возможно, из-за неверного понимания концепций или из-за особенностей определенных языков программирования. LLM могли бы выполнять ту же функцию, что и сообщество из миллионов людей, и предоставлять ответы быстрее, чем самый быстрый из пользователей Stack Overflow.

Рис. 6.5. Фрагмент ответа ChatGPT на запрос создать регулярное выражение для извлечения идентификаторов пользователей в социальных сетях. В полном ответе были приведены регулярные выражения для идентификаторов в X (Twitter), Instagram [82], Facebook* и LinkedIn. Здесь мы видим, что регулярное выражение описано правильно, но имя пользователя X на самом деле варьируется от 4 до 15 символов

В мире LLM-помощников в программировании по-прежнему имеет значение опыт. Copilot может писать программы как человек, поскольку был обучен на коде, написанном людьми. Однако, как и созданный человеком код, его решения могут быть неэффективными или не учитывать крайние случаи. LLM – специалисты по воспроизведению шаблонов и стилей программирования, и разработчикам все равно нужно критически подходить к их ответам, учитывая состав и требования своей программы. Знание основных концепций информатики и передовых практик в области разработки программного обеспечения, пожалуй, может стать еще более важным теперь, когда LLM научились писать большую часть простейшего кода. Мы считаем, что в ближайшем будущем наибольшую пользу принесут не LLM, полностью заменяющие программистов, а специалисты, которые смогут с помощью LLM быстро осваивать и применять на практике различные специфические синтаксисы или библиотеки.

Предыдущая главаГлава 81 из 135Следующая глава