Итоги года мобильной разработки с использованием NLP

Сегодня NLP (Natural Language Processing) — это полноценный инструмент разработчика. Он может облегчить жизнь профессионалу, взяв на себя рутинные задачи, и осложнить жизнь любителю, введя его в заблуждение. Мы в Globus IT больше года применяем различные NLP при разработке программного обеспечения.

В сентябре на технической секции GP Days2023 я рассказал, какие решения и подходы сработали у команды Globus IT, в каких случаях NLP-инструменты добавили лишней работы и по каким кейсам еще нет однозначных выводов, а также поделился рекомендациями по применению NLP в разработке.

Поделились с коллегами опытом, предлагаю вам также подключиться к дискуссии. Кому легче смотреть видео — можно сразу перейти к записи.

Итоги года мобильной разработки с использованием NLP

Команда Globus IT использует ChatGPT в связке с CoPilot. Почему именно они? Обе эти системы могут значительно упростить процесс написания кода для различных задач по разработке мобильных приложений и серверной части. И лучше всего эти два инструмента работают в связке, дополняя друг друга.

ChatGPT работает как чат-бот и может описывать файлы, классы и код целых блоков по вашим запросам. Он обеспечивает интерфейс для взаимодействия с нейронной сетью и позволяет получить исходный код на основе вашего описания. Это удобно, если у вас есть конкретные идеи или структуры, которые вы хотите реализовать.

CoPilot с другой стороны интегрируется в IDE, например Xcode, и предлагает автодополнение кода на основе вашей текущей разработки. Он может дописывать целые функции, блоки кода и классы целиком, что значительно ускоряет рабочий процесс.

Начнем с успешных кейсов применения нейросетей:

  • Переписывание старого кода. Например, у вас есть кодовая база на Objective-C и вам нужно перевести эту часть приложения на Swift. В ChatGPT это отлично реализовано: перевод проходит моментально и безупречно. Мы не сразу поверили в такую эффективность, поэтому проверяли результаты байт за байтом. Но кусок шифрованных данных, переведенный на Swift, действительно совпадал с исходными байтами, что приятно удивило.
  • Перенос кода с однои платформы на другую. Обычно у нас есть две параллельные платформы: iOS и Android. Изначально мы пишем для них на Swift и Kotlin соответственно. ChatGPT помогает переносить модели и даже компоненты пользовательского интерфейса между двумя этими платформами. Сложности могут возникнуть при работе с текстовыми и встроенными экранами, но в целом использование ChatGPT позволяет сэкономить временной ресурс, что делает этот инструмент ценным для разработчиков.
  • Структурирование неструктурированных данных. Еще один интересный кейс — это работа с неструктурированными данными. Если у вас есть большие объемы текстовой информации в разных форматах, например XML, JSON или даже просто текстовые файлы, и вам необходимо привести их к единому виду данных, то NLP поможет оперативно обработать их, существенно сэкономив время.
  • Изменение стилеи готового кода/текста. Когда у вас уже есть какой-то готовый код, текст письма или любой другой написанный контент и вы хотите изменить его стилистику, формат или перевести его на другой язык, вам пригодится возможность ChatGPT регенерировать ответ. Она позволяет получить еще один вариант контента с тем же смыслом, но в другом стиле.
  • Написание инструкции. У нас есть успешный кейс написания инструкции для публикации iOS-приложения в сторе с помощью ChatGPT. Это сложная задача, и нейросеть способна выполнить ее правильно, даже не вдаваясь в детали. Вы можете указать количество пунктов, которые вы хотите видеть в инструкции, и ChatGPT разделит ее соответствующим образом. Вам как эксперту все же придется валидировать итоговый текст, но это проще, чем писать с нуля.
  • Написание юнит-тестов. В мобильной разработке часто пренебрегают написанием юнит-тестов, считая, что это лишняя трата времени, особенно в случае частых изменений кода. Однако с помощью NLP этот процесс может быть автоматизирован. Вы получите приложение, которое не только работает, но и покрыто юнит-тестами на заданный вами процент. Это значительно повышает качество вашего продукта и обеспечивает надежность его работы.
  • Генерация Stub-данных. В нашем случае мы столкнулись с ситуацией, когда к товарам было необходимо создать описания и отзывы. ChatGPT и CoPilot помогли нам генерировать отзывы от разных «пользователей» с разными уровнями удовлетворенности продуктом за считанные минуты. Если у вас есть приложение, которое необходимо заполнить фейковыми данными, описаниями или текстом для демонстрационных целей, то этот кейс вам точно пригодится. Более того, сгенерированные данные можно легко структурировать в формат JSON или XML в зависимости от ваших потребностей. И конечно же, вы всегда можете нажать кнопку «регенерировать», чтобы получить новый набор данных, если вам не нравится предыдущий.

Однако, несмотря на положительный опыт, есть кейсы, для которых NLP-системы могут оказаться менее подходящими. Важно понимать, что эти инструменты не всегда могут обеспечивать необходимую точность и безопасность, особенно в сложных проектах. Важно разумно подходить к использованию NLP для написания кода и учитывать особые требования и ограничения каждого конкретного проекта.

Далее рассмотрим ситуации, когда нельзя быть абсолютно уверенным, что NLP сработает и сэкономит вам время, а не наоборот — потратит ваше время, не дав желаемого результата:

  • Неконкретизированные запросы. Если ваш запрос недостаточно конкретен, то вы получите ответ, далекий от того, что вам нужно. Вам придется вступить в диалог с ChatGPT и постепенно уточнять свой запрос. Примером может служить ситуация, когда вы просто пишете, что хотите мобильное приложение. И ChatGPT предлагает различные варианты, но они могут не соответствовать вашим ожиданиям и потребностям.
  • Необходимость в абсолютной точности. Все нейронные сети ошибаются и не способны обеспечить 100%-й результат. Даже при выполнении математических операций или арифметических действий. Поэтому в случаях, где точность критична, лучше использовать другие методы, которые обеспечивают надежный результат.
  • Одним из серьезных ограничений ChatGPT является выборка, на которой он обучался. Она охватывает данные только до сентября 2021 года. Это означает, что нейросеть не обладает актуальной информацией и не может предоставить ответы на вопросы, связанные с событиями или данными, появившимися после этой даты. Конечно, существуют плагины, которые позволяют ChatGPT загружать информацию с веб-сайтов по ссылкам. Но даже если вы предоставите ссылку на новый фреймворк или актуальные данные, успех не гарантирован.
  • Обучение стажеров. Студенты и молодые специалисты мечтают, что ChatGPT напишет диплом или будет выполнять большую часть задач за них. Однако такое использование нейросетей может иметь свои негативные последствия. Если ChatGPT пишет код вместо стажера, молодой специалист не углубляется в детали и особенности написанного, не полностью понимает, как и что он создал. В этом случае его обучение становится менее эффективным. Лучше отдать ChatGPT выполнение рутинных задач или работу с текстами, чтобы дать ученику возможность сосредоточиться на более сложных задачах.
  • Преодоление «боязни чистого листа». У многих людей есть страх начать с нуля. Они сомневаются в выборе подхода и боятся ошибиться. В таком случае ChatGPT может оказать медвежью услугу. Например, при разработке мобильного приложения вы можете спросить ChatGPT: «Начать с нативной разработки или выбрать кросс-платформенный фреймворк?» — но получите разные ответы на один и тот же вопрос при каждой генерации. Поэтому не стоит всецело полагаться на ответы чат-бота. Важно быть экспертом в своей области, оценивать полученную информацию и принимать обоснованные решения на основе своего опыта и знаний.

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

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

  • Вы не обладает экспертизой в определенной области. Например, если вы разработчик iOS и обращаетесь к ChatGPT с просьбой написать приложение на Android, вы получите результат, который не сможете объективно оценить. Поэтому потратите много времени на исправление ошибок и решение проблем, которые сразу были бы видны эксперту.
  • Работа над объемными задачами. Представьте, что у вас есть большой проект, например мобильное приложение для iOS, которое включает множество экранов, паттернов и других компонентов. Скорее всего, у ChatGPT просто не хватит ресурсов, чтобы обработать такой огромный объем информации из ограничений по количеству токенов и базе знаний.
  • Нельзя рассматривать нейронные сети как универсальные инструменты, которые одинаково хорошо справляются со всеми задачами. Различные NLP-системы специализированы на работе с разными типами данных: текстом, изображениями, аудиофайлами. Если у вас есть узкая специализированная задача, поищите нейросети, созданные для решения именно их. Это существенно повысит ваши шансы на успех.
  • Проброс результатов одной нейронной сети в другую. При обработке данных первая нейросеть может допустить ошибки, которые перейдут во вторую и умножатся на два. Лучше остановиться на одной хорошо подобранной нейронной сети, чем экспериментировать с их комбинированием, рискуя получить ненадежные результаты.
  • Создание визуальных компонентов. Даже при многократных попытках уточнения запроса, ChatGPT не всегда может создать визуал, соответствующий вашим ожиданиям. Известный случай, описанный Полом Хадсоном, который попытался использовать ChatGPT для создания визуального компонента часов. Даже в четвертой версии промпта он оказался неспособным понять концепцию аналоговых часов со стрелками.

Также есть ряд кейсов, по которым не существует единого мнения: стоит ли использовать в них нейросети или нет.

Первый такой кейс — оценка проектов на основе технического задания и текстов от заказчика. ChatGPT поможет разбить информацию на пункты и предоставит оценку работы в часах, но анализ и валидация результата со стороны эксперта все равно потребуется. Еще одним нюансом является глубина знаний ChatGPT. Даже в четвертой версии у него не всегда хватает экспертизы, чтобы учесть тонкости при оценке проектов.

Другой сомнительный кейс — поиск утечек памяти в коде. ChatGPT может предоставить общие рекомендации, но для конкретизации потребуется глубокое понимание проблемы и знание кода. Последний случай связан с написанием кода по рукописным макетам. Попытки использования ChatGPT для этой задачи не дали никаких положительных результатов.

В заключении еще раз подчеркнем, что успешность применения NLP может варьироваться в зависимости от различных факторов. Важно постоянно экспериментировать и тестировать различные инструменты, так как построение промтов для каждого из них может существенно отличаться. Использование NLP-систем требует внимательности и валидации результатов со стороны эксперта, но, несмотря на существующие ограничения, их использование в разработке программного обеспечения помогает значительно ускорить процесс и дает положительные результаты.

Помните, что область применения нейронных сетей еще не определена полностью и, возможно, именно вы найдете новые и полезные способы использования NLP в будущем. Экспериментируйте, изучайте новые возможности и внимательно подходите к выбору инструментов, чтобы максимально эффективно использовать их в вашей работе.
Пишите в комментах, как вы используете NLP и каких результатов добились!

1212
Начать дискуссию