🤖 Generative AI: как ускорить разработку с помощью Github Copilot и Databricks English SDK
Давайте разберемся, что же могут помощники и SDK, а чего от них ожидать еще рано. Рассмотрим наиболее популярные решения от Github и Databricks: варианты использования и их ограничения. Также поговорим о перспективах профессии AI-инженера.
Развитие генеративного ИИ открыло перед инженерами множество возможностей. За последний год количество областей, где могла бы пригодиться его помощь, растет как на дрожжах. Это привело к значительному увеличению спроса среди разработчиков: новый уровень абстракции и изменение подхода к разработке. То, что когда-то называлось разработкой СППР, превратилось в отдельную специализированную профессию AI-инженера. Это полноценная инженерная позиция, на которую начали активно нанимать. Почему?
Проблематика
Проблема скорости в разработке программного обеспечения остро стоит перед любой компанией: она не только должна зарабатывать, но и продолжать инвестировать в технологии, поддерживающие ее развитие. Очевидно, что стейкхолдеры ожидают определенной скорости разработки, а клиенты — наличия конкретной функциональности, которую они хотят видеть в ваших продуктах. В идеальном мире разработчики, конечно, могли бы свободно кодить, тестировать, рефакторить и деплоить код в своем темпе. Однако реальность такова, что бизнесу требуется быстрый релиз необходимой функциональности.
Важно понимать, что AI, как и реальные инженеры, будет совершать ошибки. Например, при использовании SDK постоянно генерировался код с ошибкой, однако, стоило мне чуть изменить свой запрос — генерация прошла успешно, и я смог запустить рабочий код. Зная об ограничениях таких инструментов и обладая достаточным опытом программирования, вполне реально обходить эти проблемные места в коде или исправлять их с учетом контекста задачи. Все зависит от сложности постановки задачи по вашей функциональности.
1. Github Copilot
Основан на Open AI Codex — модели машинного обучения, которая может преобразовывать естественный язык в код. Анализируя комментарии и существующий код, Codex предлагает предложения для отдельных строк кода, а также целых функций, по ходу кодинга. По сути, это специализированная версия GPT-3, которая настроена для задач программирования, СППР.
Copilot повышает эффективность разработчиков, сводя к минимуму время, которое они тратят на поиск документации, написание повторяющегося кода и автодополнения наиболее часто используемых паттернов. Используя Copilot, проще фокусироваться на программировании — говорит вам реклама, но не все так просто. Важно быть опытным разработчиком, который уже разбирается в текущей кодовой базе, чтобы заюзать помощника в своих целях, а не подчиняться, порой, странным блокам кода, которые, конечно, сработают, но будут далеки от эффективности и элегантности.
Варианты использования
Навигация по новому коду
Часто при входе в новый проект приходится разбираться с большими блоками кода, которые отвечают за ту или иную функциональность. Такая ситуация возникает, когда мы сталкиваемся с унаследованным кодом без четкого понимания бизнес-контекста или когда работаем с новыми либами без хорошей документации. Copilot Labs помогает разработчикам переводить код с одного языка программирования на другой и предоставляет пошаговое объяснение фрагментов кода. Особенно важно, когда нужна комплексная оценка кодовой базы с целью ее рефакторинга или отказа от нее. Используя функцию Explain
для понимания кода, можно ускорить понимание сложных блоков кода, а иногда и перефразировать его даже на другом языке. Важно понимать, что качество такого перевода сильно зависит от сложности кода, с которым вы сталкиваетесь.
Код-ревью
Copilot X включает в себя Copilot для запросов PR, который предлагает автоматическое описание, а Gentest еще и предлагает тесты. Получайте подсказки и предложения от помощника при вводе комментария об изменении какого-либо блока кода. Очень специфичный, но вполне реальный кейс. Copilot Labs делает это довольно легко, позволяет провести даже сложный код-ревью на нескольких языках.
Рефакторинг и дебаг
Как правило, в этом случае нужно дописывать код после помощника. Copilot не любит компилируемый код, поэтому мне пришлось самостоятельно подключить библиотеку отдельной инструкцией, чтобы избежать сбоев при рефакторинге. Также Copilot изначально не мог использовать ORM (поскольку он не видел, что я его применял ранее), поэтому пришлось подсказать ему через комментарий, чтобы намекнуть ему на то, как можно это применить. Отладка работает, очень удобно, когда у вас вдруг код не компилируется: можно его скормить помощнику и попросить проанализировать проблему. Он подумает и выразит свое мнение. К сожалению, это редко работает на коде, который использует внешние библиотеки, но простую ошибку все же подскажет.
Написание тестов и регулярок
Хотя генерация тестов с помощью Copilot — это тоже генерация кода, просто для тестирования я бы выделил ее в отдельную тему. Создание модульных тестов часто — нудная и утомительная работа, особенно если вы стремитесь охватить различные сценарии: основные варианты использования, краевые условия, ошибочные ситуации и т. д. Важно понимать, что только базовые сценарии, лежащие на поверхности, будут покрыты помощником. Конечно, он ничего не знает о ваших требованиях. Возможно, позже ему и получится скормить их, например, от ваших аналитиков.
Гораздо веселее сэкономить на возне с регулярными выражениями. Как же я этого ждал! Для меня — это боль, составлять такие выражения и валидировать их: иногда тебе кажется, что ты все учел, но находится строка, которую конструкция не покрывает. Вместо этого вы можете написать простой комментарий с тем, какую конструкцию из текста хотите выделить регуляркой, чтобы сразу же получить предложения Copilot. Неплохо!
Результат использования
Copilot обучен на большом количестве общедоступного кода, что позволяет ему генерировать фрагменты кода, функции и даже целые классы в зависимости от контекста и ваших требований. Он может помочь с повторяющимися задачами, предложить альтернативные имплементации и помочь запилить нудный код, который часто так не хочется придумывать самому. Он поддерживает широкий спектр языков программирования и легко интегрируется с популярными редакторами кода, но я бы не рассчитывал на хорошую поддержку для редкого языка — могу быть уверенным только при использовании с Python, Java. В целом, помощник направлен на повышение производительности разработчиков за счет сокращения времени, затрачиваемого на написание шаблонного кода, и предоставления подсказок по ходу кодинга, что в конечном итоге упрощает и ускоряет процесс кодирования. Но и в качестве компаньона для обучения новому языку или решению вашей проблемы — вполне подходит.
Важно понимать, что у него, как и любой другой технологии существуют ограничения: чем специфичнее кейс, тем слабее помощь. Не стоит ждать чудес при использовании внешних либ или редких языков. Да, и если у вас большой опыт в разработки он, конечно, вряд ли вас удивит, скорее, позабавит.
2. Databricks English SDK
Как заявляет Databricks, они поняли, что за годы существования Spark-комьюнити накопило огромную кодовую базу готовых решений, на которой они смогли обучить свою языковую модель. Это включает в себя множество открытых проектов, включая либы и готовые решения, вопросы с ответами в виде кода, дополненная документация по API, туториалы и книги. Они интегрировали в Spark эту информацию в виде нового языка. Рассмотрим, какие функции поддерживает новый SDK на английском, который гораздо проще для аналитика или исследователя данных, чем изучение особенностей DSL на Scala, Python, Java.
Варианты использования
Получение данных в DataFrame
Можно дать команду на поиск в интернете, и Spark, используя LLM для определения наиболее вероятного (и подходящего) результата по вашему запросу, будет интегрировать полученные данные в Spark. Пару предложений — и DataFrame готов.
Операции DataFrame
SDK предлагает все возможные функции для сформированного DataFrame, которые вы обычно подбираете вручную: трансформации, кеширование, построение графиков. Просто введите запрос, например, сформировать выборку с фильтром по дате и стоимости.
Пользовательские функции (UDF)
SDK поддерживает упрощенный процесс создания UDF. С помощью простого декоратора вам нужно только ввести запрос, а SDK обрабатывает завершение кода. Эта значительно упрощает процесс создания пользовательских функций, позволяя вам сосредоточиться на описании требований к ней. Конечно, UDF должна быть простой, выполнять только одно действие. Справедливости ради эта рекомендация была и при самостоятельной имплементации.
Кэширование
SDK включает кэширование для повышения скорости выполнения, получения воспроизводимых результатов и снижения нагрузки на сеть. Тут все как обычно. Вот только включение кеширования не всегда происходит. В этом случае вам придется дописывать код самостоятельно. Изменять существующие предложения SDK не умеет.
Результат использования
SDK упрощает работу с таблицами Spark и DataFrame, покрывая базовые функции получения данных, их трансформации и фильтрации. LLM компилирует эти ваши английские инструкции в код PySpark и SQL. Вряд ли сейчас это поможет вам, если у вас большой опыт разработки на Spark (хотя пару раз кодогенерация меня приятно удивила). Однако, если вы только вкатываетесь в это направление, хотите распараллелить генерацию аналитического отчета или подготовку данных для своей модели, не владея DSL, вполне реально сократить время обучения, тем самым начать использовать Spark в своей ежедневной работе.
Заключение
Такие инструменты, как Github Copilot и Databricks English SDK for Spark изменяют разработку, понижая входной порог для новичков. Выполняя функции СППР, Copilot помогает писать код более эффективно и с меньшими усилиями, а English SDK — так вообще написать целый пайплайн. Важно отметить, что этот инструмент опирается на данные, полученные от ваших запросов, и не способен читать мысли, хотя иногда так может показаться. Предлагая варианты кода, адаптированные к контексту проекта, можно быстрее погрузиться в него, изучить технологии, которые в нем используются, и иногда — повысить продуктивность за счет автоматизации рутины: шаблонного кода, тестов, регулярок и других однотипных задач в разработке.
Если программирование напрямую не связано с вашей ежедневной работой или вы только вкатываетесь в новую технологию, то помощник способен ускорить этот процесс. Это очень полезно для задач на стыке сфер аналитики, исследования и обработки данных, а также если вы хотите быть первопроходцем в новой абстракции над кодингом. Если вы хотите стать специалистом новой профессии AI-инженера, то вам определенно стоит пройти курс, чтобы понимать возможности и ограничения технологий, основанных на LLM. Важно отметить, что AI-инженеров не следует путать с ML инженерами, которые в основном занимаются созданием моделей с нуля и их внедрением. Ожидается, что в ближайшие годы спрос на AI-инженеров значительно вырастет, превысив спрос на инженеров ML. Посмотрим, свершится ли это предсказание.