/
Автор: Таулли Т.
Теги: искусственный интеллект оргсвязь программирование программное обеспечение кодирование информационные технологии
ISBN: 978-601-12-4129-8
Год: 2025
Текст
AI-Assisted Programming
Better Planning, Coding, Testing,
and Deployment
Тот
Beijing • Boston. Farnham • Sebastopol • Tokyo
Taulli
o·REILLv·
Том Тауми
Программирование
спомощью
искусственного
интемекта
Улучшенное планирование, кодирование,
тестирование и развертывание
Астана
«АЛИСТ»
2025
УДК
ББК
004.89
32.988.02-018.2
Т23
Таулли Т.
Т23
Программирование с помощью искусственного интеллекта: пер. с англ.
Астана: АЛИСТ,
2025. -
240
-
с.: ил.
ISBN 978-601-12-4129-8
Книга посвящена практике использования инструментов искусственного ин
теллекта для всех этапов создания кода: от разработки требований и планирования
до проектирования, написания, отладки и тестирования. Предложена методология
модульного программирования, которая эффективно сочетается с подходом гене
рации кода с применением ИИ. Рассмотрены основные возможности и сценарии
использования инструментов ИИ для разработки, оценены плюсы и минусы попу
лярных систем. Показаны перспективы применения универсальных языковых моделей
{LLM),
таких как
ChatGPT, Gemini, Claude
и других, для решения задач програм
мирования. Также рассмотрено применение широкого спектра специализирован
ных систем
(GitHub Copilot, Tabnine, Cursor, Amazon CodeWhisperer).
Освещены
вопросы инженерии промптов, автоматизации рутинных задач, таких как создание
регулярных выражений, применения низкокодового и бескодовоrо программиро
вания и др.
Для широкого круга разработчиков
ББК
УДК 004.89
32.988.02-018.2
© 2025 ALIST LLP
Authorized Russian translation of the English edition of Al-Assisted Programming ISBN 9781098164560
© 2024 Тот Taulli.
This translation is puЫished and sold Ьу permission ofO'Reilly Media, Inc., which owns or controls all rights to
and sell the same.
Авторизованный перевод с английского языка на русский издания
puЫish
AJ-Assisted Programming ISBN 9781098164560
© 2024 Тот Taulli.
Перевод опубликован и продается с разрешения компании-правообладателя
ISBN 978-1-098-16456-О
ISBN 978-601-\2-4\29-8
(англ.)
(каз.)
O'Reilly Media, Inc.
© Tom Taulli, 2024
© Издание на русском
языке. ТОО "ЛЛИСТ",
2025
Содержание
ВЫСОКАЯ ОЦЕНКА КНИГИ
«ПРОГРАММИРОВАНИЕ С ПОМОЩЬЮ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА» ................................
9
ВСТУПИТЕЛЬНОЕ СЛОВО ..............................................................................................................
11
ПРЕДИСЛОВИЕ ...............................................................................................................................
13
О чем эта книга
14
15
16
16
16
17
17
18
.............................................................................................................................
В чем отличие этой книги ............................................................................................................
Для кого эта книга ........................................................................................................................
Условные обозначения, используемые в книге .........................................................................
Примеры использования кода .....................................................................................................
Онлайн-обучение O'Reilly ...........................................................................................................
Как с нами связаться .....................................................................................................................
Благодарности ...............................................................................................................................
ГЛАВА
1. Новый МИР для РАЗРАБОТЧИКОВ .............................................................................. 19
20
Генеративный искусственный интеллект ................................................................................... 23
Преимущества ............................................................................................................................... 24
Минимизация поиска ............................................................................................................ 24
Ваш консультант ................................................................................................................... 26
Интеграция с IDE .................................................................................................................. 27
Рефлексия вашей кодовой базы ........................................................................................... 28
Целостность кода .................................................................................................................. 29
Генератор документации на платформе искусственного интеллекта .............................. 30
Модернизация ....................................................................................................................... 30
Недостатки .................................................................................................................................... 34
Галлюцинации ....................................................................................................................... 34
Интеллектуальная собственность ........................................................................................ 35
Конфиденциальность ............................................................................................................ 36
Безопасность .......................................................................................................................... 36
Данные для обучения ........................................................................................................... 37
Предвзятость ......................................................................................................................... 38
Новый путь для разработчиков ................................................................................................... 38
Карьера .......................................................................................................................................... 39
Разработчик 1Ох? .......................................................................................................................... 40
Профессиональные навыки разработчика .................................................................................. 40
Заключение .................................................................................................................................... 41
Эволюция и революция ................................................................................................................
ГЛАВА
2. КАК РАБОТАЕТ ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ С ИСПОЛЬЗОВАНИЕМ
ИСКУССТВЕННОГО ИНТЕЛЛЕКТ А .................................................................................................
Основные функции .......................................................................................................................
43
43
Подбор кода и завершение с учетом контекста в сопоставлении с интеллектуальным
завершением кода
......................................................................................................................... 44
Компиляторы по сравнению с инструментами программирования на основе
искусственного интеллекта ..................................................................................................
45
6
1 Содержание
Уровни возможностей ..................................................................................................................
47
(LLM) ..................... 49
Эволюция ............................................................................................................................... 49
Модель трансформера .......................................................................................................... 51
OpenAI Playground ................................................................................................................ 54
Токены ................................................................................................................................... 55
Использование платформы .................................................................................................. 56
Оценка больших языковых моделей ........................................................................................... 60
Типы больших языковых моделей .............................................................................................. 63
Выбор ИИ-инструмеlffОв проfl)аммирования ............................................................................ 66
Заключение .................................................................................................................................... 67
Генеративный искусственный интеллект и большие языковые модели
ГЛАВА 3. ОПЕРАТИВНОЕ ПРОЕКТИРОВАНИЕ••••••••••••••••••••••••••••••••••••••••••••••••••••••·••••••·•·••·•·•·••••••• 69
Наука и искусство .................................................................................................................
70
...................................................................................................................................... 70
Промпт ........................................................................................................................................... 71
Контекст ........................................................................................................................................ 72
Инструкции ................................................................................................................................... 72
Суммаризация ....................................................................................................................... 73
Классификация текста .......................................................................................................... 74
Рекомендации ........................................................................................................................ 75
Локализация .......................................................................................................................... 75
Ввод содержимого ........................................................................................................................ 77
сt>ормат ........................................................................................................................................... 77
Передовой опыт ............................................................................................................................ 79
Будьте конкретны ................................................................................................................. 79
Сокращения и технические термины .................................................................................. 80
Техники обучения с примерами и без ................................................................................. 80
Ключевые слова .................................................................................................................... 81
Методика промIТТОв по цепочке размышлений (СоТ) ....................................................... 82
Наводящие вопросы ............................................................................................................. 83
Промm на примеры и аналогии .......................................................................................... 83
Снижение галлюцинаций ............................................................................................................. 84
Безопасность и конфиденциальность ......................................................................................... 85
Автономные агенты искусственного интеллекта ...................................................................... 86
Заключение .................................................................................................................................... 89
Проблемы
ГЛАВА 4. Gпнuв CoPILOT ........................................................................................................... 91
GitHub Copilot ............................................................................................................................... 91
Цены и версии ....................................................................................................................... 92
Пример использования: проfl)аммирование аппаратных средств .................................... 93
Пример использования: Shopify .......................................................................................... 94
Пример использования: Accenture ...................................................................................... 96
Безопасность .......................................................................................................................... 96
Приступая к работе ....................................................................................................................... 97
Среда Codespaces и Visual Studio Code ....................................................................................... 98
Рекомендации ........................................................................................................................ 99
Комментарии ....................................................................................................................... 102
Чат ........................................................................................................................................ 102
Внутренний чат ................................................................................................................... 107
Открытые вкладки ..............................................................................................................
Интерфейс командной строки ...........................................................................................
108
109
Партнерская npofl)aммa Copilot ................................................................................................ 11 О
Заключение .................................................................................................................................. 111
Содержание
1 7
ГЛАВА S. ОстАЛЬНЬIЕ ИНСfРУМЕНТЬI ПРОГРАММИРОВАНИЯ НА ОСНОВЕ
ИСКУССfВЕННОГО ИВТЕЛЛЕКТ А ...............................................................................................
113
CodeWhisperer от Amazon .......................................................................................................... 113
Duet AI от Google для разработчиков ....................................................................................... 115
Tabnine ......................................................................................................................................... 117
Replit ............................................................................................................................................ 118
CodeGPT ...................................................................................................................................... 121
Cody.............................................................................................................................................. 122
CodeWP ........................................................................................................................................ 124
Warp ............................................................................................................................................. 125
Bito AI .......................................................................................................................................... 127
Cursor ........................................................................................................................................... 128
Code Llama ................................................................................................................................... 130
Остальные модели с открытым исходным кодом .................................................................... 131
StaЫeCode ............................................................................................................................ 131
AlphaCode ............................................................................................................................ 132
PolyCoder ............................................................................................................................. 132
CodeT5 ................................................................................................................................. 132
Компании, производящие корпоративное проrраммное обеспечение .......................... 133
Заключение .................................................................................................................................. 134
ГЛАВА 6. СНА тGРТ И ДРУГИЕ БОЛЬШИЕ ЯЗЬIКОВЬIЕ МОДЕЛИ ОБЩЕГО НАЗНАЧЕНИЯ ......... 13S
ChatGPT ....................................................................................................................................... 135
GРТ-4 ........................................................................................................................................... 136
Навигация по ChatGPТ ............................................................................................................... 137
Мобильное приложение ..................................................................................................... 140
Пользовательские запросы ................................................................................................. 141
Просмотр с помощью Bing ........................................................................................................ 141
Утомительные задачи ................................................................................................................. 145
Реrулярные выражения ...................................................................................................... 146
Стартовый код ..................................................................................................................... 147
GitHub READМE ................................................................................................................. 148
Кросс-браузерная совместимость ............................................................................................. 149
Команды Bash ............................................................................................................................. 150
GitНub Actions ............................................................................................................................. 150
Плагины ....................................................................................................................................... 151
Плагин Codecademy ............................................................................................................ 152
Плагнн AskYourDataЬase .................................................................................................... 153
Плагин Recombinant AI ...................................................................................................... 154
GPТs ............................................................................................................................................. 154
Gemini .......................................................................................................................................... 156
Приложения ......................................................................................................................... 158
Проrраммнрование в Gemini ............................................................................................. 159
Claude ........................................................................................................................................... 161
Заключение .................................................................................................................................. 163
ГЛАВА 7. IIДЕН, ПЛАНИРОВАНИЕ И ТРЕБОВАНИЯ •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••·•• 165
Мозговой штурм .........................................................................................................................
Исследование рынка ...................................................................................................................
Тенденции развития рынка ................................................................................................
Общий адресный рынок .....................................................................................................
КонкуренЦИJ1 ................................................................................................................................
Требования ..................................................................................................................................
Документ с требованиями к продукrу ..............................................................................
СпецификаЦИJ1 требований к проrраммному обеспечению ............................................
165
167
170
171
172
174
175
176
8
1 Содержание
Интервью
.............................................................................................................................
..........................................................................................................................
Стиль ....................................................................................................................................
Подходы к планированию проекта ...........................................................................................
Разработка через тестирование ..........................................................................................
Разработка веб-дизайна ......................................................................................................
Заключение ..................................................................................................................................
Белая доска
177
178
180
181
183
185
188
ГЛАВА
8. ПРОГРАММИРОВАНИЕ ................................................................................................ 189
189
191
191
193
194
195
196
198
Ninja Code ............................................................................................................................ 198
Метод извлечения ............................................................................................................... 199
Разделение условий ............................................................................................................ 200
Переименование .................................................................................................................. 200
Мертвый код ........................................................................................................................ 201
Функции ....................................................................................................................................... 202
Объектно-ориентированное программирование ..................................................................... 204
Фреймворки и библиотеки ......................................................................................................... 205
Данные ......................................................................................................................................... 206
Разработка фронтенда ................................................................................................................ 208
Каскадные таблицы стилей CSS ........................................................................................ 209
Создание графики ............................................................................................................... 21 О
Инструменты на основе искусственного интеллекта ...................................................... 21 1
АРТ-интерфейсы .......................................................................................................................... 213
Заключение .................................................................................................................................. 214
Что в реальности? .......................................................................................................................
Мотивы, помогающие принять решение ..................................................................................
Обучение .....................................................................................................................................
Комментарии ...............................................................................................................................
Модульное программирование ..................................................................................................
Начало работы над проектом .....................................................................................................
Автозаполнение ..........................................................................................................................
Рефакторинг ................................................................................................................................
ГЛАВА
И РАЗВЕРТЫВАНИЕ ........................................................
215
Отладка ........................................................................................................................................
Документация ..............................................................................................................................
Код-ревью ....................................................................................................................................
Модульные тесты ................................................................................................................
Запросы на извлечение .......................................................................................................
Развертывание .............................................................................................................................
Обратная связь с пользователями .....................................................................................
Запуск ...................................................................................................................................
Заключение ..................................................................................................................................
215
216
218
219
222
224
225
227
228
ГЛАВА
9. ОТЛАДКА, ТЕСТИРОВАНИЕ
10. Выводы .................................................................................................................... 229
Интенсивный процесс обучения ...............................................................................................
Основные преимущества ...........................................................................................................
Но есть и недостатки ..................................................................................................................
Оперативное проектирование это не только искусство, но и наука ................................
За гранью программирования ....................................................................................................
Искусственный интеллект не заменит вас на работе ..............................................................
Заключение ..................................................................................................................................
229
229
230
231
232
232
233
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ .........................................................................................................
234
ОБ АВТОРЕ ...................................................................................................................................
238
ОБ ИЗОБРАЖЕНИИ НА ОБЛОЖКЕ .......................................................................................
239
Высокая оценка книги
«Программирование с помощью
искусственного интеллекта»
Когда мы в течение шести недель добавили векторный поиск в
ChatGPT,
Cassandra, Copilot
и
то с помощью этого метода мы и смогли соблюсти сроки. Но большинст
ву разработчиков еще предстоит воспользоваться преимуществами подобных инст
рументов с искусственным интеллектом. Книга Тома
-
отличный метод для нача
ла работы, которая сэкономит вам время, которое вы тратите на эксперименты и
исправление ошибок.
-
Джонатан Эллис
(Jonathan E//is),
DataStax
соучредитель и технический директор
Книга «Программирование с помощью искусственного интеллекта»
-
это замеча
тельный труд, в котором отражен опыт Тома, его знания и умения, и где он знако
мит читателей с современным развитием разработки программного обеспечения,
позволяя каждому желающему писать код.
-
Джастин Дорфман
(Justin Dorfman),
Sourcegraph
менеджер сообщества разработчиков открытого кода в
Искусственный интеллект стремительно меняет подход разработчиков к созданию
программного обеспечения. Начиная с редакторов кода и заканчивая терминалом и
многим
другим,
помощь
искусственного
интеллекта
становится
повсеместной.
Книга «Программирование с помощью искусственного интеллекта» должна стать
первой книгой для любого разработчика, пытающегося получить максимальную
отдачу от использования искусственного интеллекта в своем ежедневном рабочем
процессе.
-
Зак Ллойд
генеральный директор и соучредитель
(Zach Lloyd),
компании Warp
10
Высокая оценка книrм «Проrраммирование с помощью искусственного интеллекта»
Книга Тома Таулли
(Tom Taulli) -
это хорошо структурированный путеводитель о
том, как инструменты с поддержкой искусствеmюго интеллекта, такие как ChatGPТ,
моrут изменить правила работы для разработчиков: не только для тех, кто только
начинает свою карьеру, но и для ОПЪIТНЪIХ экспертов. Он делится своими полезны
ми наблюдеНЮ1Ми о взлетах и падениях в процессе кодирования с использованием
искусственного интеллекта, во многом похожими на мой собственный пуп. от мар
кетинга и бизнеса до запуска функций для нашего приложения в производство.
Книга будет полезна программистам, которые желают использовать искусственный
mпеллект как часть своего инструменrария.
(Тitus
Capilnean),
-
Титус Капwтеан
соучредитель
Private Market Labs
Искусственный интеллект изменил правила разработки. Каждому программисту
придется научиться работать с такими инструментами, как GitНub
Copilot.
Книга
Тома показывает, как это сделать.
-
Мадду Судхакар
(Muddu Sudhakar).
Aisera
генерш~ьный директор и соучредитель компании
Вступительное слово
По окончании Калифорнийского университета в начале 1990-х годов я думал, что
стану профессором. Но когда меня наняла компания
IBM,
мне очень понравилась
индустрия технологий. Обратного пуrи уже не было. В дальнейшем я работал в та
ких компаниях, как VМware,
Pivotal, ЕМС
и
SGI.
Затем мною было основано несколько новых проектов. Мой последний проект
Aisera,
-
в котором разрабатываются генеративные решения для предприятий на ос
нове искусственного интеллекта. Наша платформа обеспечивает обслуживание
клиентов, работу с сотрудниками, корпоративный поиск, службы технической под
держки и
AIOps.
На протяжении своей карьеры я наблюдал за развитием многих инновационных
технологий, таких как появление и развитие Интернета, облачных вычислений, мо
бильных устройств и глубокого обучения. Однако была одна область технологий, в
которой прогресс был незначительным: разработка программного обеспечения.
Меня, как учредителя, это, конечно, очень расстраивало. Нам часто хотелось сде
лать некоторые вещи, но не получалось из-за нехватки опыта и знаний у наших ин
женерных команд. Но с появлением и развитием программирования на основе ис
кусственного интеллекта ситуация в корне изменилась. Это сделало компанию
Aisera более динамичной,
что способствовало нашему росту.
Теперь, когда я нанимаю разработчика, я хочу знать, знаком ли он с технологиями
по работе с искусственвым интеллектом. Как он использует эту мощную техноло
гию, чтобы быстрее выполнять утомительные процессы и быстрее разработать код?
Итог: на мой взгляд, умение работать с инструментами программирования, в кото
рых задействован искусственный интеллект, является очень важным качеством.
По словам генерального директора
Microsoft
струменты «становятся стандартным
Сатьи Наделы
(Satya Nadella),
набором для любого разработчика ... >►
эти ин
Но чтобы понять, как использовать возможности искусственного интеллекта в про
граммировании, нужен другой подход. Здесь все не так, как в обычной разработке.
Вам нужно понять, как применять генеративные системы искусственного интел
лекта. Именно в этом поможет данная книга Тома Таулли
(Tom Taulli).
Он по,1.гото-
12
Вступительное слово
вил учебник для всех разработчиков, которые хотят освоить программирование с
использованием искусственного интеллекта. В книге раскрыты основные темы и
приведено множество полезных примеров. Кроме того, книга написана в увлека
тельной манере, что делает тему доступной.
-
Мудду Судхакар
генеральный директор
(Muddu Sudhakar,)
и соучредитель компании Aisera
Предисловие
Я начал заниматься программированием еще в начале 80-х. Моим первым компью
тером был
всего
8
Atari 400 -
не самый мощный компьютер с мембранной клавиатурой,
Кбайт оперативной памяти и программами, загружаемыми с кассет. Я изу
чил язык программирования
BASIC
и начал создавать простые игры и приложения.
Я был полностью увлечен этим.
Естественно, со временем я начал работать на более мощных машинах. Постепенно
мною были освоены такие языки, как
Pascal,
С и С++. Но
IDE
(интегрированная
среда разработки) практически не менялись, за исключением подсветки синтаксиса
и функций отладки.
Все кардинально изменилось с появлением такого мощного и эффективного инст
румента разработки как
GitHub Copilot
и технология
ChatGPT.
Эксперименты с
этим инструментом и технологией были похожи на тот момент, когда я впервые
взял в руки
iPhone -
это стало для меня настоящим событием.
Обращаясь к
Или в
ChatGPT на обычном, естественном языке, я попросил написать код.
VS Code я набирал фрагмент функции, а GitHub Copilot генерировал блок
кода. Часто это было похоже на моментальное попадание в яблочко. А еще я ис
пользовал
ChatGPT,
чтобы превращать изображения в код.
Однако истинная ценность этих инструментов заключается в том, что они способ
ны решать многие утомительные задачи вместо разработчиков. Кому нравится во
зиться с rеgех-операторами, собирать воедино команды
bash
или действия
GitHub?
Уж точно не мне. А если для этих целей применить инструменты программирова
ния с использованием искусственного интеллекта? Так они «едят эту дрянь на зав
трак».
Но, как оказалось, эти инструменты с применением искусственного интеллекта мо
гут быть полезны не только для кодирования. Я начал использовать
ChatGPT
для
мозгового штурма и разработки требований для приложений и даже для создания
модульных тестов.
Мне не потребовалось много времени, чтобы убедиться, что программирование с
использованием возможностей искусственного интеллекта должно стать одним из
обязательных навыков для программистов.
14
Предисповие
Так что да, я видел большую необходимость в написании этой КНИПI. Я составил
набросок и предлоЖИJI его издаrельству
O'Reilly. Там сразу же увидели перспективу.
Писать книгу бЬ1Ло очень инrересно, и я многому научился. Я также общался со
многими талантливыми разработчиками, и они дали мне очень хорошие идеи и со
веты.
Но программирование с применением искусственного интеллекта быстро развива
ется. Именно поэтому у моей книги есть сопутствующий репозиторий на GitНub.
Маrериал будет пополняться, и я расскажу о других важных событиях в этой увле
кагельной области.
Спасибо, что ВЗJ1ЛИ в руки эту книгу! Я надеюсь, что она будет для вас не только
познавательным, но и цеННЬIМ руководством в вашем путешествии.
О чем эта книга
Крагкий обзор по каждой главе:
♦ Г1ава
1 «Новый мир для разработчиков»:
глава начинается с рассказа о том, как
генерагивный искусственный инrеШiект меняет npaвWia работы для разработчи
ков. Здесь говорится, как инструмешы с применением искусственного интел
лекта помогают разработчикам больше думать об общей картине и меньше
-
о
тонкостях и технических деталях кодирования. В главе также заrронута история
языков программирования. Кроме того, подробно рассмотрены передовые тех
нологии искусственного интеJUiекта, например GРТ-4.
♦
Глава
2 «Как работает
технология кодирования с применением искусственного
интеллекта»: в начале главы рассказывается о rенеративном искусственном ин
теллекте и о том, что трансформерные модели и большие языковые модели
имеют большое значение в мире программирования. Кроме того, в главе расска
зывается о работе с ~инrерфейсом
OpenAI's Playground. в часrности
показано,
как можно использовать модели искусственного инrеллекта и настраивать их в
соответствии с вашими потребностхми в программировании.
♦ Глава
3
«Оперативное проектирование»: информацJ1Я, содержащаяся в этой
главе, поможет в использовании инструмепrов программирования с применени
ем искусственного инrеллекта. В этой главе вы найдете множество практиче
ских советов. Например, как справиться с многословными или запутанными
промmами и не дать искусственному интеллекту придумать что-то свое. Кроме
того, в этой главе разбираются ключевые части промmа, и показывается, как их
можно эффективно использовать.
♦ Гшва
4
рументе
((Инструмент
этом мощном инст
GitНub
возможности, такие
-
GitHub Copilot»: здесь идет речь об
Copilot. Рассматриваются его основные
как создание кода с коммепrариями, чат и использование интерфейса командной
строки, основанного на искусственном интеллекте. Также вы узнаете о том, как
настроить систему для создания собственных кодовых баз.
Предисловие
♦ Глава
5
1 15
«Другие инструменты программирования с применением искусственно
го интеллекта»: в данной главе мы подробно рассмотрим другие ведущие инст
румеlffЬI программировании с использованием искусственного mпеллекта, такие
как
Amazon CodeWhisperer, Duet
А1 от
Google
и
Replit.
И это лишь некоторые
из них.
♦ Глава
6 «ChatGPT и
другие алгоритмические модели, обученные с использовани
ем больших объемов данньvr»: :щесь рассказывается о том, как использовать эти
инструменты Д11J1 решени,r таких задач, как работа с регулярными выражени,rми,
стартовый код и GitНub
♦ Глава
7 «Идеи,
Actions.
планирование и требования»: в данной главе основное внимание
у деm1етс11 использованию чатботов Д11J1 запуска проектов по разработке про
rраммноrо обеспечеНЮ1. Будут рассмотрены такие темы, как мозговой штурм,
исследование рынка, составление требований и разработка на основе тестирования.
♦ Глава
8
«Кодирование»: рассматриваются общие сценарии разработки, буль то
работа с
API,
использование модульного проrраммироваНЮI или рефакторинr.
Также рассматривается работа с функциями и объектно-ориентированное
np<r
rраммирование.
♦ Глава
9 «Отладка,
тестирование и развертывание»: эта глава посвящена менее
«rламурным» этапам разработки. Здесь рассматриваются такие темы, как ис
правnение ошибок, использование Д11J1 анализа кода инструментов проrраммн
ровани,r с поддержкой искусственного интеллекта, создание модульных тестов и
описание запросов на внедрение.
♦ Глава
10
«Выводы»: подведение итогов книги, в котором внимание акцентиру
ется на основных моментах.
В чем отличие этой книги
Разработчики программного обеспечени,r любят точность. Когда вы вводите в про
грамму определенные входные данные, всеrда получаете однн и тот же результат.
В течение долrоrо времени эта детерминированная логика была сердцем и душой
программного обеспечения.
Но когда вы используете инструменты программирования с поддержкой искусст
венного интеллекта, все становиrся немного иначе. Результаты, получаемые при
использовании данной технолоrин, похожи на бросок костей, поскольку все рабо
тает на основе веропностн. Коrда вы просите искусственный mпеллект написать
код и делаете несколько попыток, вводя одни и те же данные, вы каждый раз буде
те получать разные результаты. Конечно, поначалу это немного озадачивает, но как
только вы поймете, что к чему, сразу увидите, что затраченные вами усили,r не на
прасны и оно тоrо стоиr. Именно поэтому в книrе присутствует глава, посвященная
разработке проМIПов. Эrа глава поможет вам в освоении нового подхода к про
граммированию.
Предисловие
16
Для кого эта книга
Книга предназначена для всех разработчиков, независимо от того, только ли вы
начинаете, или уже много лет работаете в данной сфере.
Условные обозначения, используемые в книге
В этой книге используются следующие типографские условные обозначения:
Курсив
Обозначение новых терминов, URL-aдpecoв, адресов электронной почты, имен и
расширений файлов.
Моноширинный
шрифт
Используется в листингах программ, а также в самих главах для обозначения та
ких элементов программы, как имена переменных или функций, базы данных,
типы данных, переменные окружения, операторы и ключевые слова.
Полужирный моноширинный шрифт
Показывает команды или другой текст, который должен быть введен пользова
телем вручную с клавиатуры.
Курсивный моноширинный шрифт
~
Обозначает текст, который должен быть заменен на значения, заданные пользователем, или на значения, определяемые контекстом.
~
Этот элемент обозначает общее замечание.
Примеры использования кода
Дополнительные материалы (примеры кода, упражнения и т. д.) доступны для за
грузки по адресу
https://github.com/ttaulli/AI-Assisted-Programming-Book.
Если у вас возникли технические вопросы или проблемы с использованием приме
ров кода, пожалуйста, отправьте письмо по адресу
Цель этой книги
-
support@oreilly.com.
помочь вам в работе. В основном приведенные в книге при
меры кода вы можете использовать в своих программах и документации. Вам не
нужно обращаться к нам за разрешением, если только вы не воспроизводите зна
чительную часть кода. Например, написание программы, использующей несколько
Предисловие
1
17
фрагментов кода из этой книги, не требует разрешения. Однако для продажи или
распространения примеров из книг
O'Reilly
требуется разрешение. Для ответа на
вопрос в виде ссылки на эту книгу и примера кода разрешение не требуется. Ис
пользование в документации вашего продукта большого количества примеров из
этой книги требует соответствующего разрешения.
Мы приветствуем, но не требуем указания авторства. Авторство обычно включает
ISBN (Международный стан
дартный книжный номер). Например: «AI-Assisted Programming Ьу Тот Taulli
(O'Reilly). Copyright 2024 Tom Taulli, 978-1-098-16456-0».
название книги, имя и фамилию ее автора, издателя и
Если, по вашему мнению, использование примеров кода выходит за рамки добро
совестного
адресу
использования
или
вышеуказанного разрешения,
свяжитесь с нами
по
permissions@oreilly.com.
Онлайн-обучение
O'Reilly
Более
40
лет компания
O'Reilly Media
предоставляет
услуги по обучению технологиям и ведению бизнеса, а
также распространяет знания и опыт, помогая компаниям
добиваться успеха.
Наша сеть экспертов и рационализаторов делится своими знаниями и опытом с по
мощью книг, статей и нашей платформы онлайн-обучения. Платформа онлайн
обучения
O'Reilly
предоставляет вам доступ по требованию к обучающим курсам,
углубленным курсам, интерактивным средам кодирования и обширной коллекции
текстов и видеоматериалов от
O'Reilly
и более
200 других издательств.
https://oreilly.com.
Для получе
ния дополнительной информации посетите сайт
Как с нами связаться
Комментарии и вопросы, касающиеся этой книги, направляйте издателю:
O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol,
СА
954 72
800-889-8969
(в Соединенных Штатах или Канаде)
707-827-7019
(международный или местный)
707-829-0104
(Факс)
support@oreilly.com
https://www.oreilly.com/about/contact.html
18
ПрЕWtсповие
Для этой книги у нас создана веб-страница, на каrорой размещены исправле11НJ1,
примеры и любая дополнительная информацих. Вы можете зайти на эту страницу
по адресу bttps://oreil.ly/Al-assisted-programmiвg.
Новости и информацию о наших книrах и курсах можно найти на сайге
bttps://oreilly.com.
Найдите нас на
Link.edln: bttps://linkedin.com/company/oreilly-media.
Смотрите нас на YouTuЬe: bttps://youtuЬe.com/oreillyпledia.
Благодарности
Я хочу поблагодарить сотрудников
O'Reilly,
каrорые вложили душу в эту книгу и
приложшш все усилия, чтобы воплоппь ее в жизнь: Николь Батrерфилд
Butterfield),
Ширу Эванс
(Shira Evans)
и Брайана Герина
(Brian Guerin).
(Nicole
Мне таюJ[е
помогали выдающиеся технические рецензепrы. Среди них Роха Бойна
Boina),
(Roja
(Abraham Borg), Сара Ким (Sarah Кim), Эбубечукву (Нне1П1а)
(EЬuЬechukwu (Nnenna) Oguaju-Dike) и Гаурав Дешмуп (Gaшav
Абрахам Борг
Огуаджу-Дайк
Deshmukh).
ГЛАВА
1
Новый мир для разработчиков
С
2011
по
2016
год Андрей Карпати
(Andrej
Кarpathy,
bttps://oreil.ly/m4tFk)
в Стэн
форде занимался исследованием архиrектуры нейронных сетей и задач комnь~
ного зрения, включая разбиение изображений на пиксели. Параллельно он работал
в
Google,
где разрабатывал систему распознавания объектов в видеороликах для
OpenAI, а
Tesla в должности стар
командой, создававшей систему Autopilot.
YouTuЬe. Спустя нек(Лорое время Карпати стал одним из сооснователей
затем возглавил направление искусственного ИJПеллекта в
шего директора, руководя
Можно с уверенностью сказать, что он
-
один из лучших программистов в мире.
Андрей также мастерски владеет словом. В
по
предварительным
подсчетам
почrи
Twitter у
800
него множество поклонников,
ООО подписчиков.
После того
как
ChatGPТ вышел на рынок, он написал в Твкпере (bttps://oreil.ly/9kВmX):
Самый новый и популярный язык программирования
- английский.
Он не mуrил. Эrо была не просто поэтическая ода программированию, а взгruщ
в будущее, где при вводе проМIПов 1 на естественном языке можно будет создавать
компьютерный код, причем, судя по всему, на любом языке. Эrо как двуязычный
джинн в вашем компьютере, гmовый перевести ваши :желания на английском .изыке
в кодовые команды.
Затем появился твит
(bttps://oreiLly/ajgl ),
в К(Лором прозвучало мнение других
разработчиков:
Copilot
значительно ускорил процесс кодирования и теперь трудно представlПЪ,
что я вернусь к «ручному кодированию». Я все еще учусь им пользоваrъся, но
он уже пишет около
80%
моеrо кода, с точностью до 800/о. Эrо даж:е не совсем
кодирование, я просто подсказываю и редактирую.
Андрей Карпати
(Andrej
Кarpathy) высоко оценил GitНub
Copilot
(Л
Microsoft,
н~
вое достmкение в области программирования с помощью искусственного ИJПеллек
та. Но вскоре появилось много других инструмеJПов. Т eмm..r внедрения инноваций
поражали воображение.
1
Промпr (prompt) -
это текстовая команда или запрос, ИНС"I])укции или подсказка, кото
рую пользоваrель предостав.ш1ет нейросети дт1 генерации ответа, текста, изобрurеНЮ1, кода
или вьmО11Неmu1 друrих задач.
-
Ред.
Глава
20
1
Теперь для всех программистов обычная среда программирования может показать
ся густыми джунглями. Но что это за новый мир инструментов, основа которых
искусственный интеллект? В чем они сильны, а в чем
-
-
нет? И как разобраться во
всем этом новом мире, чтобы стать грамотным программистом, использующим для
своей работы все возможности искусственного интеллекта?
Эта книга станет вашим путеводителем, который поможет ответить на перечислен
ные и многие другие вопросы. Основное внимание в ней мы уделим использованию
инструментов на основе искусственного интеллекта, чтобы писать код не только
быстрее, но и эффективнее, а также с большим удовольствием. Итак, давайте засу
чим рукава и отправимся в путешествие в программирование с помощью искусст
венного интеллекта.
Эволюция и революция
Основной темой эволюции языков программирования является абстракция. Это
необычный способ описать, как по мере развития технологий происходит упроще
ние использования систем для разработчиков. Если утомительная и кропотливая
работа над деталями уходит на второй план, разработчики могут сосредоточиться
на главном. Это стало движущей силой инноваций, позволившей совершить такие
прорывы, как Интернет, облачные вычисления, мобильная связь и искусственный
интеллект.
На рис.
1.1
показана эволюция абстракции на протяжении десятилетий.
Давайте рассмотрим историю развития языков программирования более подробно,
начиная с 1940-х годов:
♦
Переход с машинного языка на ассемблер
На заре компьютерной эры программистам приходилось возиться с ноликами
и единичками, чтобы подчинить машины своей воле. Но затем появился язык
ассемблера, содержащий буквенно-цифровые инструкции, что упрощало коди
рование и снижало вероятность ошибок.
♦ Языки высокого уровня
В 1950-х гг. были разработаны высокоуровневые языки программирования, та
кие как
Fortran
и
COBOL.
простых английских слов:
Они позволяли программистам писать код на основе
DISPLAY, READ,
WRIТE и
лятор преобразовывал эти слова в двоичный код (О и
IF/THEN/ ELSE. Компи
1), который мог понять
компьютер. В то же время люди, не имеющие технического образования, как
правило, могли прочитать код, чтобы разобраться в том, как он работает. Появ
ление языков высокого уровня стало мощнейшим катализатором развития ком
пьютерной индустрии.
♦
Процедурное программирование
В языках программирования С и
Pascal
было введено понятие процедурного
программирования. Оно позволяет объединять несколько последовательно вы-
Новый мир для разработчиков
21
полняемых операторов в маленькие подпрограммы, называемые функциями 2 .
Это похоже на то, как если бы вы спрятали сложный механизм решения задачи в
коробочку и далее просто использовали его, не заглядывая внутрь. Благодаря
этому стало возможным многократное использование функций и их сопровож
дение, а управление колоссальными по размерам программными проектами уп
ростилось.
2022 год и последующий период:
программирование с помощью
искусственного интеллекта
(Gi!Hub Cop1lot/ChatGPТ)
2010-е: машинное обучение
и искусственный интеллект
(ТeпsorF rom/PyТorch)
~,/~
I1990-е языки сценариев или скриптовые
языки
ls:;;~
(Python/Ruby)
({-'б
~
1980-е объектно-ориентированное
программирование (C++/Java)
f-s,.
r">j<oo
1970-е· процедурное программирование
(C/Pascal)
1950-е: языки высокого уровня
(Fortran/COBOL)
1940-е· от машинного языка к языку
ассе мб пер
Рис.
1.1.
Абстракция языков программирования и инструментальных средств развивалась
на протяжении десятилетий
♦
Объектно-ориентироваююе программирование (ООП)
Самыми популярными компьютерными языками этого типа являются С++ и
Java.
Объектно-ориентированное
программирование
обеспечило
совершенно
новый уровень абстракции, позволив программистам моделировать реальные
объекты с помощью классов и объектов, заключая в них как данные, так и моде
ли поведения. ООП позволило обеспечить модульность и приблизиться к интуи
тивному решению задач.
♦ Языки сценариев и веб-разработка
Языки программирования
Python, Ruby
и
JavaScript
упрощают решение многих
задач низкого уровня, связанных с программированием. Они содержат обшир2
В Pascal также есть понятие процедуры -
значения.
-
Ред.
это функция, не возвращающая какого-либо
Глава
22
1
ные библиотеки и встроенные структуры данных, упрощая общие задачи про
граммирования и сокращая объем кода, необходимого для их вьmшmения.
♦ Машинное обучение и искусственный интеллект
С развитием искусственного интеллекта и машинного обучения специализиро
ванные библиотеки и фреймворки, такие как
TensorFlow
и
Pitch,
позволили из
бавиться от многих сложных математических деталей программирования. Эrо
дало возможность разработчикам сосредоточиться на архитектуре моделей и
процессах обучения .
♦ Программирование с помощью искусственного интеллекта
Конечно, последний участник этого повествования
-
программирование с по
мощью искусственного ИIПелЛекта, например, GРТ-4 и других больших языко
вых моделей
(LLM, Large Language Model).
Эrо похоже на то, как команда неви
димых помощников готова по вашему приказу сгенерировать код.
Давайте рассмотрим
ChatGPT,
простой пример.
Для этого
мы
воспользуемся чатботом
который хорошо умеет создавать код. С помощью проМIПа мы попросим
систему сделать то, что нам нужно. Предположим, мы введем следующее задание:
Промпт: Написать на языке
Python
программу, которая проверяет, ЯD.Шlется ли за
данное целое число четным или нечетным, и выводит результат.
На рис.
1.2
показан ответ
Рис.
ChatGPT.
1.2. Если дать задание чатботу ChatGPТ на создание
кода,
в ответе будет содержаться не только листинr, но и пояснение к нему
В результате мы получаем листинг кода, сопровождаемый необходимыми коммен
тариями. Также есть объяснение, как работает программа. Вы можете нажать кнопку
Новый мир для разработчиков
Копировать в правом верхнем углу, чтобы вставить код в ваш
1
23
IDE (Integrated
интегрированная среда разработки) и запустить его.
Development Environment,
Генеративный искусственный интеллект
Прежде чем углубляться в работу инструментов программирования, использующих
технологии искусственного интеллекта (ИИ), стоит сначала познакомиться с его
генеративным направлением. Именно генеративный ИИ лежит в основе множества
современных интеллектуальных систем. Эго область, ориентированная на создание
нового, оригинального контента. На рис.
1.3
представлена схема, иллюстрирующая
взаимосвязь различных типов искусственного интеллекта.
Рис.
1.3. Существуют различные типы
искусственного интеллекта, и их можно представить
в виде вложенных друr в друга подмножеств, внуq>и которых находится генеративный
искусственный юпеллект, а в нем
Искусственный интеллект
-
-
большие языковые модели
это большой набор инструментов. В нем собраны все
системы, способные с присущим человеческому интеллекту умением ВЬПIОЛЮIТЪ
задачи. ИИ основан на машинном обучении
(Machine learning или
МL). Вместо того
чтобы выполнять четкие инструкции, системы машинного обучения предоставляют
аналитические данные, основанные на обработке большого количества информа
ции. В основе машинного обучения лежат сложные алгоритмы, которые позволяют
делать прогнозы и принимать решения без жесткого кодирования.
Если заглянуть глубже, мы попадем в область глубокого обучения
DL)-
(deep learning,
более узкое направление машинного обучения, основанное на использова
нии нейронных сетей с множеством скрытых слоев. Именно из этой структуры и
возник термин глубокое обучение. Такие многослойные модели продемонстрирова
ли выдающиеся результаты в задачах распознавания изображений, речи и других
сложных видов обработки данных.
В
основе
(GenAI)-
глубокого
обучения
лежит
генеративный
искусственный
интеллект
направление, позволяющее создавать новые данные на основе изучен
ной информации.
Gemini, Claude
GenAI
и LLaМA
использует большие языковые модели, такие как GРТ -4,
2.
Эrи мощные архитектуры, часто называемые базовыми
24
Глава
1
моделями, способны генерировать текст, неотличимый от человеческого, благодаря
современным алгоритмам и обучению на масштабных корпусах данных.
При этом искусственный интеллект
-
зто гораздо больше, чем просто языковые
модели. Генеративные системы обладают мультимодальными возможностями: они
создают не только тексты, но и изображения, аудио и видео, открывая новые гори
зонты в цифровом творчестве.
В следующей главе мы более подробно рассмотрим, как работает генеративный
ИИ. А сейчас давайте обсудим преимущества и недостатки инструментов для про
граммирования, созданных на основе искусственного интеллекта.
Преимущества
Инструменты для программирования на основе ИИ призваны расширить возмож
ности разработчиков, позволяя им сосредоточиться на решении сложных задач и
внедрении инноваций, а не на выполнении монотонных действий или сложной де
тализации кода. Вот почему в
GitHub
используется название
Copilot
(что в переводе
означает «второй пилот»). Речь идет о вашем надежном друге и помощнике в «ка
бине пилота», который справляется с запутанными и зачастую утомительными ас
пектами кодирования, позволяя вам сосредоточиться на главном.
В следующих разделах мы расскажем о преимуществах и практическом примене
нии этих мощных систем.
Минимизация поиска
Разработчики часто оказываются в роли цифровых детективов, выслеживая досад
ные ошибки или разгадывая загадочный код. Когда они сталкиваются с проблемой,
их первым желанием становится обратиться к
Быстрый поиск, фрагмент кода, и вуаля
-
Google
или посетить
разработчики снова в
Stack Overflow.
своей IDE.
Но иногда этот процесс может превратиться в тяжкое испытание. Обсуждение на
сервисе
Stack Overflow
может завести в тупик. Вы продолжаете поиск, но ничего не
можете найти. Однако есть еще один раздел, который в какой-то степени может
помочь, и вы проводите дальнейшие исследования, изучая некоторые смежные те
мы. Вы даже ищете видео на
YouTube.
Промучившись над проблемой более
30
ми
нут, вы, наконец, решаете эту задачу.
Да, все разработчики сталкивались с этим. Интересно, что в опросе разработчиков
(https://oreil.Iy/WQ6De),
проведенном сервисом
тором приняли участие более
70
Stack Overflow
в
2022
году, в ко
ООО разработчиков, отмечается, что большинство
разработчиков сталкивались с такой проблемой. Выяснилось, что
тов затрачивают на поиск ответов более
30
день. Согласно исследованию, «команда из
поиск ответов/решений от
333
до
651
минут в день, а
50
62% респонден
25% - более часа в
разработчиков суммарно теряет на
часа в неделю».
Новый мир для разработчиков
1
25
Как было бы здорово найти способ прорваться сквозь дебри утомительных поисков
и мгновенно отыскать нужное решение! И именно здесь на сцену выходит искусст
венный интеллект
-
наш виртуальный союзник, своеобразный «рыцарь в сияющих
доспехах». По данным исследований
зующих
GitHub Copilot,
Microsoft,
более
90%
разработчиков, исполь
отмечают, что с его помощью им удается решать задачи
значительно быстрее.
Чтобы проверить это на практике,
Microsoft
провела эксперимент:
95
профессио
нальных программистов были разделены на две группы и получили задание
- на
GitHub Copilot, за
писать НТТР-сервер на
Разработчики, работавшие с
вершили задачу в
быстрее (https://oreil.ly/ТtsA0), чем их коллеги,
JavaScript.
среднем на 55%
не использовавшие инструмент.
И не только
Microsoft
поет дифирамбы. Компания
провела научное исследование
более
40
(https://oreil.ly/xOLj3),
McKinsey & Company
также
в котором приняли участие
разработчиков со всей территории США и Азии, с разным опытом работы
и образованием. В течение нескольких недель они выполняли три обычные задачи:
генерацию кода, рефакторинг и документирование.
Что получилось в итоге? Когда речь зашла о разработке документации для поддер
жания кода в чистоте и порядке, в лидеры выбились инструменты на основе ИИ,
сократившие временные затраты вдвое. При создании нового кода и рефакторинге
инструменты на основе ИИ показали почти такие же результаты.
Однако при решении более сложных задач инструменты на базе ИИ продемонстри
ровали куда менее впечатляющие результаты: сокращение времени разработки со
ставило менее
10% (https://oreil.ly/c_7sx).
Примечательно, что это ускорение не сказалось на качестве кода
-
показатели
ошибок, читаемости и удобства поддержки остались на прежнем уровне. Более то
го, программные инструменты с поддержкой ИИ обеспечили лишь незначительное
улучшение этих характеристик. Впрочем, как показало исследование, во многом
это объяснялось тем, что разработчики применяли их преимущественно в итераци
онном режиме работы.
Исследование
♦
McKinsey
пришло к следующим выводам:
Облегчение рутинной работы
Инструменты на основе ИИ отлично справляются с такими рутинными задача
ми, как автозаполнение функций кода, помощь в завершении кода в режиме ре
ального времени и автодокументирование кода. Выполняя эти задачи, они осво
бождают
разработчиков
для
решения
более
сложных
задач
и
быстрого
развертывания программных функций.
♦
Создание более понятных черновиков кода
Смотреть на чистый холст может быть страшно, но с помощью инструментов
генеративного ИИ можно подтолкнуть творческий процесс, получив рекоменда
ции по коду с помощью простой подсказки, полученной непосредственно в сво
ей среде разработки или отдельно. Многие разработчики считают эти рекомен-
Глава
26
1
дации со стороны искусственного инте.шiекта бесценными, поскольку они помо
гают людям преодолеть «проблему пустого экрана» и быстрее войти в «режим►►
написания кода.
♦
Ускоренное внесение изменений в существующий код
Благодаря четким и рациональным промптам, разработчики могуr быстрее адап
тировать и улучшать ранее написанный код. Так, они могуr брать код из онлайн
библиотек, вводить его в промпт, а затем вводить итеративные промпты на кор
ректировку с помощью ИИ на основе заданных критериев.
♦ Повышение уровня подготовки разработчиков к решению новых задач
Технология действует как ускоренный вводный курс и помогает разработчикам
освоиться с незнакомыми средами программирования или языками. Когда вы
беретесь за что-то новое, эти инструменты вступают в дело как опытные друзья,
раскрывая новые концепции, анализируя различные базы кода и предоставляя
исчерпывающие рекомендации по использованию фреймворка.
♦ Использование нескольких инструментов
Согласно исследованиям, при разработке использование нескольких инструмен
тов более эффективно. Представьте себе: разработчик использует один инстру
мент для промптов или чатов, а другой инструмент встраивается в кодовую базу,
предлагая варианты и рекомендации по автозаполнению. Разработчики отмети
ли: первый инструмент особенно полезен при переосмыслении и улучшении
существующего кода, тогда как второй
-
незаменим при создании нового, ор
ганично вписывающегося в текущий проект. Когда оба инструмента использо
вались совместно для решения одной задачи, продуктивность заметно возраста
ла
-
в
1,5-2,5 раза по сравнению с традиционным
подходом.
Ваш консультант
С помощью
ChatGPT вы
можете попросить совета по многим вариантам действий в
области разработки. Например:
Промпт: Предоставьте подробные советы и ознакомьте с передовым опытом
для минимизации времени поиска и повышения производительности при про
граммировании. Включите стратегии, связанные с документацией по организа
ции кода, инструментами и мыuшением.
На рис.
1.4 показан ответ.
ChatGPТ предлагает три основных направления, на которые следует обратить внима
ние. Он рекомендует использовать модульную конструкцию, использовать согласо
ванные наименования и логически организовывать файлы. Также рекомендуется
yдerurrь первостепенное внимание четкому документированию с
комментариями,
документационными строками
Далее ChatGPТ
(docstrings)
и файлам
упоминает об использовании функций поиска в
тов, как
Git,
IDE,
README.
применении таких инструмен
и создании закладок на ключевые ресурсы.
Новый мир для разработчиков
1 27
Рис.1.4. Вы можете получить полезные советы по решению задач,
связанных с проrраммированием в
Интеграция с
ChatGPT
IDE
Полная mпеrрация инструментов на основе искусственного интеJШекта с
IDE
очень важна для проrраммирования. Когда искусственный интеJШект приходит на
помощь, это позволяет ускорить процесс разработки, не затрачивая время на освое
ние новой платформы. В результате на обучение уходит меньше времени, и больше
времени остается на написание кода. Также не стоит забывать: чем меньше перехо
дов между различными платформами или инструментами, тем меньше сложностей,
а процесс написания кода становится более простым.
Кроме того, важным преимуществом становится возможность получать обратную
связь в режиме реального времени. Пока разработчик пишет или редактирует код,
встроенные ИИ-инструменты всегда рядом
-
они помогают находить ошибки,
предлагают исправления и подсказывают более эффективные решения. Такой
подход превращает процесс проrраммирования в диалог с виртуальным наставни
ком
-
внимательным и дружелюбным. В результате код становится чище, лако
без лишних усилий, ручного анализа или обращения к внеш
ничнее и надежнее ним проверкам.
Системы с искусственным интеллектом также могут расширить возможности IDE,
подстроившись под полное описание процесса кодирования. ИИ вникает в суть ти-
28
Глава
1
пов переменных, сигнатур, методов и даже структурного плана проекта, чтобы
предоставлять соответствующие рекомендации по написанию кода. Но дело не
только в том, чтобы просто написать код.
В табл.
1.1
представлены некоторые из наиболее популярных инструментов для
программирования с помощью ИИ и поддерживаемые ими среды разработки
Таблица
1.1. Среды разработки,
(IDE).
поддерживаемые популярными средствами
программирования с искусственным интеллектом
Инструмент программирования
Среды разработки
с использованием
(IDE)
искусственного интеллекта
GitНub
Copilot
Visual Studio Code, Visual Studio, Vim, Neovim,
пакет JetВrains suite, Azure Data Studio 1
Tabnine
Visual Studio Code, WebStoпn, PyChaпn, Eclipse,
IntelliJ Platfoпn, PhpStoпn, CLion, Neovim, JupyterLab, Rider, DataGrip, AppCode, Visual Studio 2022,
Android Studio, GoLand, RubyMine, Emacs, Vim,
SuЫime Text, Atom.AI, Jupyter Notebook 2
CodiumAI
Visual Studio Code, JetBrains (lntelliJ,
CLion, PyChaпn)
Amazon Code Whisperer
Visual Studio Code, IntelliJ IDEA, А WS Cloud9,
консоль А WS Lambda, JupyterLab, Amazon
SageMaker Studio, JetBrains (lntelliJ, PyChaпn,
CLion, GoLand, WebStoпn, Rider, PhpStoпn,
RubyMine, DataGrip)
WebStoпn,
Исследование, проведенное компанией
Microsoft (https://oreil.ly/3e2sl),
88% пользователей Git-Hub Copilot почувствовали, что при
использовании Copilot они стали более внимательными, более сконцен
показало, что
трированными и менее раздражительными. И главной причиной было то,
что, оставаясь в
IDE, они тратили меньше времени на
ет разработчику не выходить из «состояния потокю>3.
поиск. Это позволя-
Рефлексия вашей кодовой базы
Некоторые инструменты программирования на основе ИИ разработаны таким об
разом, чтобы хорошо взаимодействовать с конкретными
IDE.
Разработчики имеют
возможность их точной настройки. В этом случае инструмент может «поняты>
внутренние библиотеки проекта, хорошо работать со средами программирования,
3
Состояние потока -
это такое психическое состояние, когда человек полностью вовлечен
в то дело, которым он занят на данный момент. Он сосредоточен и погружен в процесс.
-
Пер.
Новый мир для разработчиков
29
в которые он встроен. Инструмент при этом учитывает передовой опыт и структуру
проекта. Благодаря этому предлагаемые инструментом рекомендации не только
будут соответствовать техническим требованиям, но и учтут конкретные особенно
сти вашего проекта.
С помощью такой настройки можно привести генерируемые инструментом про
граммирования рекомендации по написанию кода в соответствие с установленны
ми в вашей организации стандартами кодирования, показателями качества и прото
колами безопасности. Ориентация на создание высококачественного, эффективного
кода означает, что команды
могут не сталкиваться с устаревшими или непригод
ными для использования фрагментами программ.
Целостность кода
Целостность кода
-
отличительная черта грамотной разработки программного
обеспечения. Целостность кода подчеркивает надежность и стабильность исходно
го кода при выполнении предусмотренных в нем функций. Воспринимайте ее как
призму, через которую рассматриваются полнота, точность, последовательность и
устойчивость кода. Сбои в целостности кода создают благоприятную почву для
ошибок и потенциальных «мертвых зон» в системе безопасности, что, в свою оче
редь, может привести к сбоям в работе системы и утечке данных.
На целостность кода влияют такие факторы, как аккуратность, продуманность, чи
таемость, единообразие, а также простота его сопровождения. Нельзя забывать и о
мерах по безопасности. Разработчики могут обеспечить целостность кода с помо
щью различных
подходов, таких как модульное
и
интеграционное тестирование,
экспертная оценка кода, статический анализ кода и тщательная проверка безопас
ности.
Стоит отметить, что все больше инструментов для программирования с поддерж
кой ИИ используют функции, направленные на обеспечение целостности кода. Эти
инструменты вникают в тонкости проектируемой программы, подготавливая почву
для создания актуальных и точных модульных тестов и для работы в пограничных
условиях.
В некоторых из этих инструментов предусмотрены функции по предоставлению
рекомендаций для устранения возникающих проблем. Прежде чем эти инструмен
ты попадут к разработчикам, они проходят предварительную проверку, гаранти
рующую, что они не спровоцируют новые проблемы. Впоследствии разработчики
могут ознакомиться
с предлагаемыми инструментом рекомендациями и
внедрить
их прямо в своей среде разработки.
Дополнительным преимуществом данных инструментов является их способность
быстро проводить анализ промптов на доработку и составлять краткие резюме по
изменениям в коде. Инструменты также могут автоматизировать работу по созда
нию заметок о выпуске, что очень удобно для документирования внесенных изме
нений в версии программного обеспечения.
30
Глава
1
Генератор документации
на платформе искусственного интемекта
ДокументацИJ1
это незаслуженно забЬIТЬlй герой процесса разработки программ
-
ного обеспечеНИJ1. Благодари документации кодовая база остается читаемой, под
держиваемой и способной к дальнейшему развитию, особенно в условЮ1Х, когда
команды меНJООтсх, а проекты становхтсх все сложнее. Но давайте признаем, что
создание и обновление этой документации часто похоже на поход через бюрокра
тическую ..-рхсину
-
этот процесс может оmимать много времени, а иногда и вовсе
ОТIОiаДЬIВ3еТСХ, в надежде, что документацюr будет обновлена позже.
Но в этом нам мшуr помочь инс..-румеВТhl програм:мированих с использованием
ИИ. Эrи цифровые писатели сумеют подготовить большие объемы документации
за минимальное времх, причем с максимальным качеством и доходчивостью. Для
дОСП1ЖеНИJ1 такого результата используются возможности большой хзьuювой мо
дели, которые особенно эффепивны при работе с текстом.
Модернизация
Смелое захвление Марка Анzч:,еес«на (Мш"с
в
WaU Street Joшnal,
Andreessen),
опубликОВ31П1ое в
«Проrраммное обеспечение съедает мир>►
выдержано, к.ак изысканное вино. Андреессен
(Andreessen),
2011 году
(https://oreiLly/RW8e8),
извесmый своим уме
нием распознавать технолоrические тенденции с расстояних в несколько километров,
а та.IО1Се своим звезднЬIМ послужным списком успешного предприниматешr и венчур
ного капиталиста, отметил, что в истории техиолоmй наступил удачный момент.
Он подчеркнул, что инфраструкrура досmгла совершеннолеТИJ1 и подготовила гло
бальные отрасли к изменеНИDI. Попление облачных платформ. таких как
Web Services,
Amaz.on
и повсеместное распрос..-ранение широкополосного Интернета изме
нили СИl}'ацию. Благодари этим измененихм исчезли традиционные барьеры в плане
сrоимости серверов и сетевых технологий. Эrо позволило таким «разруппrrешrм».
к.ак UЬer,
Nettlix
и множеству социальных медиаш1атформ, переписать правила в
своих 01рЗСШIХ.
Прочитав эту замечательную статью и взглянув в будущее, мы увидим, что инно
вационный экспресс только набирает обороты. Однако он принес с собой и угрозу
сбоев, особенно дu крупных корпораций. Многие из этих гиrантов работают на
устаревших системах, модерннзаЦIU которых не только дороrосто,пцах, но и рис
кованваJI. Их иерархичесш с..-руктура может прешпствовать приюпию решений, а
масштабы этих систем создают доПОJJННТе.JIЪIIЬе сложносm при внедрении изменений.
Кроме того, их сотрудники не всегда в курсе последних технологических новинок.
Компания ШМ рассматривает этот сценарий как «золотую жилу►► возможностей и
направлхет свои огромиые ресурсы на создание инс..-руменrов на основе иск:уост
венного интеJUiекта дu удовлетвореНЮ1 требований своих клиентов. В olПllбpe
2023 года
коМIJаНЮI представила систему
может переводить язык
COBOL
на
Java
wat.sonx Code Assistant for Z.
Эта система
в машинных системах перевода, причем
код на выходе получается достаточно изящным и объеКП1о-ориентирова.нным.
Новый мир для разработчиков
Модель
Watsonx.ai
от mм понимает
115
J1Зь11юв кодирования на основе
лиона токенов (https://oreiLly/cfJМO). Модель имеет около
20
1 31
1,5
трил
миллиардов пара
мечюв. Эго одна из кру~шейших систем искусственного интеллекта для разработки
кода.
Дело в том, что в проrраммах, написанных на J1Зыке
COBOL,
содержатся сопш
миллиардов строк. Но перевод этого J1Зыка на современные JIЗЫКИ- непростая за
дача. Язык
COBOL разработан
несколько десятилетий назад, и написанные на этом
JIЗЫКе проrраммы практически не имеют документации. Если преобразование не
будет выполнено доЛЖНЬIМ образом, последствия могут быть очень серьезными.
Не забывайте, что в мире большинство операций с кредитными картами выпоJШЯ
ется с помощью мэйнфреймов. То же самое можно сказать и о системе дяди Сэма
для обработки IШЮЛЬНЬIХ кредиrов.
К сожалению, существует и немалое количество примеров неудачных проектов.
Вспомните проект по модернизации информационных rехнолоrий Калифорнийско
го департамента автотранспорта. Несмотря на то, что в проект бЬ1ЛИ wюжены
208 МИJШИонов
отказатьс,r
дwшаров, департамент через несколько лет вынужден был от него
(https://oreiLly/_ UlzG).
YЧИThlВaJI высокие требоВ3ИИJ1, разрабо1чики программ для мэйнфреймов обычно
получают повышенную зарптпу. Но компании по-прежнему испьrrы:вают трудно
сти с привлечением талаяrливых специалистов. Молодые разрабо1ЧИКИ обучаютс,r
на современных JIЗЬIШ и при разработке программ для мэйнфреймов часто испы
тывают больmие затруднеНИJI, а то и вовсе попадают в безвыходное положение.
В то же врем,r все большее число ОПЬl'ПIЬIХ разработчиков программного обеспече
НИJI для мэйнфреймов уходп на пенсию.
В mм ПОНJIЛИ, что для решеНИJ1 этой масштабной проблемы необходимо использо
вать искусственный иитетiеп. Транспайлеры или трансляторы кода существуют
уже несколько десятилетий. Более того, их часто использовали для разработки про
граммного обеспечеНИJ1 для мэйнфреймов. Однако в основном они брали спаrепи
код4, написанный на JIЗЬП[е проrраммироваиия COBOL, быстро переводили его, и
получала спаrепи-код на J1Зыке проrраммироваиия
Java.
Конечно, это скромный
косметический ремонт, в котором нет ни намека на улучmеНИJ1 или инновации. По
лученный тахим образом Jаvа-код все еще нуждается в значительной доработке,
что обысuет, почему многие проеПЬI «буксуют» или вообще не работают.
Но, использу• геиерпивВЬIЙ ИИ, коМ113НШ1 mм утверждает, что ей удаетс• улуч
шить результаУЫ проекта в дес,rть раз.
Другие
компании
(Тhomas
Dohmke), генераяьиый директор GitНuЬ,
тапrе
изучают
возможность
модернизации.
написал:
«COBOL,
Томас
Домке
все еще рабо
тающий на осиовиых платформах, J1ВШ1етсJ1 гораздо более серьезной социальной
проблемой, чем мы думаем>►
отметил
4
(https://oreiLly/a21Lt). В инrервью журналу Fortune он
(https://oreiLly/sqsW), чrо в 2023 году слыmал о COBOL больше, чем за
Спаrетrи-код (тапrе индусский код) -
IШохо спроеlПИJ)Ованная, слабо струкrурирован
ная. запутаннu и трудна,1 ДЛJ1 ПОНИМ311Ю1 проrра.мма.
-
Пер.
32
Глава
1
последние три десятилетия. Он также сказал, что компании интересовались, как
использовать
GitHub Copilot для
Не забывайте, что
В табл.
1.2
ChatGPT
своих проектов по конвертации.
работает и с устаревшими языками программирования.
показано, какие языки он поддерживает.
Таблица
1.2.
Распространенные устаревшие языки программирования
Язык
Описание
Время разработки
COBOL
Разработан для обработки бизнес-данных
Конец 1950-х
-
начало 1960-х годов
Fortran
Pascal
BASIC
ALGOL
AssemЫy
Предназначен для научных и инженерных расчетов
1950-е годы
Разработан для внедрения передовых методов раз-
Конец 1960-х
работки программного обеспечения
начало 1970-х годов
Язык создан для студентов и начинающих.
Середина 1960-х
Считается легким для изучения
годов
Оказал влияние на развитие таких языков,
Конец 1950-х
как
начало 1960-х годов
Pascal,
С и
Java
-
-
Ассемблер разработан под архитектуру процессо-
Ранняя эра вычисли-
ра, для которого он предназначен, начиная с ранних
тельной техники
программируемых компьютеров
Применяется для разработки научных, инженер-
PL/1
Начало 1960-х годов
ных, деловых и системных программ
Чтобы увидеть, как программирование с помощью искусственного интеллекта мо
жет помочь в работе с устаревшими языками, предположим, что вам нужно пора
ботать над следующим фрагментом кода:
MODULE
ComplexМodule
IMPLICIT NONE
ТУРЕ::
ComplexType
REAL
real, imag
CONTAINS
OPERATOR(+)
(а,
Ь)
RESULT(c)
TYPE(ComplexType), INTENT(IN)
TYPE(ComplexType)
с
c%real
a%real + b%real
c%imag
a%imag + b%imag
END OPERATOR
END
::
ТУРЕ
END MODULE
ComplexType
ComplexМodule
а,
Ь
Новый мир для разработчиков
33
Вы не знаете, что это за язык и как он работает. Синтаксис не способствует интуи
тивному пониманию рабочего процесса.
Теперь предположим, что вы заходите в
ChatGPT
и вводите следующее задание:
Промпт: На каком языке это написано? Что делает этот фрагмент кода? Как он
работает?
На рис.
1.5
показана часть ответа.
Рис.
1.5. ChatGPT
отвечает на промпт по интерпретации устаревшего кода
34
Глава
ChatGPT
1
точно идентифицирует этот фрагмент кода как код, написанный на языке
программирования
ComplexModule,
Fortran. ChatGPT также
объясняет, что в коде определен модуль
в котором содержится тип производных
ComplexType в
«+» для
плексных чисел, а также перезагружаемый оператор сложения
виде ком
сложения
двух комплексных чисел. Затем дается пошаговое объяснение кода.
Недостатки
Теперь давайте познакомимся с не самыми приятными аспектами инструментов
для программирования на основе ИИ. Как и любая начинающая технология, а ведь
даже первый iPhone был немного неудобным, искусственный интеллект имеет свою
долю недостатков, проблем и сложностей. На пути инноваций всегда есть возмож
ность для доработки и доводки.
Давайте разберемся с некоторыми из них.
Галлюцинации
Для большой языковой модели галлюцинации
-
это ситуации, когда она выдает на
первый взгляд достоверную информацию, которая на самом деле является неточ
ной или вовсе не соответствует данным, на которых модель обучалась. В контексте
разработки программного обеспечения такие случаи особенно опасны: они могут
приводить к ошибочным рекомендациям по коду, созданию вводящей в заблужде
ние документации и некорректным тестовым сценариям. Галлюцинации затрудня
ют отладку, сбивают с толку начинающих разработчиков и снижают доверие к ИИ
инструментам в целом.
Тем не менее, стоит отметить значительный прогресс в снижении частоты подоб
ных ошибок. В последние годы этому явлению уделяется большое внимание в на
учных кругах, а ведущие ИИ-компании активно внедряют стратегии по его мини
мизации. Одним из наиболее эффективных подходов стало обучение с участием
человека
метод
-
RLHF (Reinforcement Learning from Human Feedback),
позво
ляющий повысить точность и надежность моделей.
Однако, учитывая внутреннюю сложность большой языковой модели и огромное
количество данных, на которых эта модель основана, полное устранение галлюци
наций представляется сложной задачей, если это вообще возможно.
Еще один момент, который следует учесть, заключается в том, что некоторые язы
ки программирования демонстрируют более высокие показатели точности при ра
боте с инструментами с поддержкой ИИ. Такие языки, как
TypeScript
и
Go,
Python, JavaScript,
как правило, обладают более высокой производительностью в
этом отношении. Это объясняется тем, что все эти языки достаточно широко пред
ставлены в общедоступных репозиториях и, таким образом, предоставляют искус
ственному интеллекту более богатый набор данных для изучения. Хорошо обучен
ный
искусственный
интеллект,
обоснованные формулировки.
в
свою
очередь,
предлагает
более
точные
и
Новый мир для разработчиков
35
Интеллектуальная собственность
Мэтью Баттерик
(Matthew Butterick)
может похвастаться богатым опытом работы:
он был программистом, дизайнером, юристом и особенно увлекался типографикой.
За свою карьеру он написал книги по типографике, разработал шрифты и создал
программы для редактирования и верстки документов. Однако знакомство с
Copilot в
июне
2022
GitHub
года не вызвало у него восторга. Скорее, это подтолкнуло его к
написанию статьи в благе под названием «Этот
Copilot
глуп и хочет меня убить»
(https://oreil.ly/qjHL6).
Он не ограничился ведением блага. Недовольство быстро переросло в коллектив
ный иск
(https://oreil.ly/MOqYc)
против
Microsoft, GitHub
и
OpenAI.
Предметом
спора стало предполагаемое нарушение условий предоставления услуг и политики
конфиденциальности
GitHub,
а также возможные обвинения в нарушении автор
ских прав.
Этот юридический клубок свидетельствует о наличии «серой зоны», касающейся
прав интеллектуальной собственности на код, созданный с помощью инструментов
на основе искусственного интеллекта. Учитывая, что сгенерированный код- это
«коктейль» из множества строк из ранее разработанных программ, вопрос о праве
собственности является весьма спорным.
За основу одного из аргументов было взято понятие «добросовестного использова
ния». Однако эта правовая доктрина запутана и не дает четких рекомендаций для
создания контента с помощью искусственного интеллекта. Чтобы решить этот во
прос, скорее всего, потребуется внесение изменений в федеральное законодатель
ство или решение Верховного суда.
Microsoft предприняла маневр, чтобы создать юридический бранд
(https://oreil.ly/x_Ml4) для клиентов GitHub Copilot. Она пообещала защи
Тем временем
мауэр
щать пользователей от судебных исков при соблюдении ими определенных условий.
Еще один слой юридической трясины
-
взаимодействие методов программирова
ния с помощью искусственного интеллекта с открытым программным обеспечением.
Лицензии с авторским левом 5 , такие как General PuЬlic License (GPL) версий 2 и 3,
требуют, чтобы к любой работе, в которой за основу взят открытый исходный код,
применялись лицензионные условия оригинального кода.
Такой подход способствует развитию инноваций. Однако для разработчиков это
чревато неприятностями, поскольку данный подход потенциально может лишить
их права защищать свою интеллектуальную собственность
-
свое приложение.
Или даже может возникнуть требование, чтобы разработчики всю свою кодовую
базу превратили в базу с открытым исходным кодом.
5
Авторское лево (копилефт, copyleft) -
вид лицензии, которая разрешает свободно исполь
зовать, копировать и изменять произведение, если все последующие измененные и допол
ненные версии программы тоже остаются свободными к использованию.
-
Пер.
36
Глава
1
Конфиденциальность
Использование инструментов на основе ИИ для программирования, часто разме
щаемых в облаке, порождает множество вопросов о конфиденциальности и защите
данных. Как обеспечивается сохранность данных в компании? Какова вероятность
того, что эти данные будут использованы в качестве обучающих данных?
В зависимости от поставщика ответы могут быть разными. Поэтому некоторые
разработчики могут вообще отказаться от использования инструментов на основе
искусственного интеллекта.
Именно такого подхода придерживается Энтони Скодари
редитель и руководитель инженерного отдела компании
(Anthony Scodary), соуч
Gridspace. Эта компания,
возникшая на базе Стэнфордского университета, занимается разработкой речевых
ботов, умеющих вести сложные телефонные разговоры. Их технологическая основа
базируется на распознавании речи, синтезе речи, большой языковой модели и диа
логовых системах.
Вместо того чтобы полагаться на существующие ИИ-платформы, компания
пошла по менее проторенному пути
-
Gridspace
она создала собственное решение на базе
искусственного интеллекта. Новая платформа, развернутая в виде плагина для
работает на сервисах
Docker
внутри кластера
Kubemetes
IDE,
и специально адаптирова
на под внутреннюю кодовую базу компании.
Соучредитель компании Энтони Скодари
(Anthony Scodary)
отмечает: «Это позво
лило нам сохранить контроль над нашими IР-адресами и данными, не передавая их
сторонним компаниям. Более того, теперь у нас есть модель, которая компактнее,
быстрее и лучше приспособлена к нашим специфическим задачам».
Нельзя сказать, что такой подход является оптимальным. У каждой организации
свои взгляды и методы. Но когда речь идет об оценке программирования с помо
щью инструментов на основе ИИ, важно осознавать все последствия для сохране
ния конфиденциальности.
Безопасность
В исследовательской работе под названием «Слабые места в безопасности кода,
сгенерированного искусственным интеллектом в
Git-Hub» (https://oreil.ly/ibDЗD)
(Yujia Fu) и остальные соавторы обратили внимание на пробле
мы безопасности GitHub Copilot. Они тщательно проанализировали 435 фрагментов
кода из проектов на GitHub, которые были сгенерированы с помощью инструмен
авторы Юджиа Фу
тов на основе искусственного интеллекта. И, если взять в процентном отношении, в
35,8%
анализируемых проектов были обнаружены уязвимости, описываемые в сис
теме классификации безопасности
числение слабых мест или
Common Weakness Enumeration -
общее пере
CWE.
Эти слабые места касались не только одного конкретного языка программирования.
Это были многоязычные ошибки, распространяющиеся на
CWE.
Три из этих категорий были обычными ошибками -
42
различные категории
инъекция команд опера-
Новый мир для разработчиков
37
ционной системы, использование некорректных случайных значений и неправильная
обработка исключений. И что интересно:
11
из этих выявленных слабых мест удо
стоились сомнительной чести попасть в список первых
25
слабых мест
2022 года.
Но это не значит, что инструменты на основе ИИ представляют собой огромный
риск для безопасности. Это далеко не так. Дело в том, что производители продол
жают работать над улучшением защитных механизмов. Однако, как и в случае с
написанием любого кода, всегда следует помнить о безопасности.
Данные для обучения
Данные, на которых обучаются большие языковые модели, предназначенные для
инструментов программирования с ИИ, нередко содержат существенные изъяны.
Эти недостатки могут напрямую сказываться на производительности и практиче
ской пользе таких инструментов в реальных условиях. Рассмотрим подробнее, в
чем именно заключаются эти проблемы:
♦
Изъяны в представлении
Если некоторые области языка программирования или библиотеки представле
ны недостаточно хорошо или вообще их нет в проектах с открытым исходным
кодом, искусственному интеллекту может не хватить данных. А это приведет к
менее точным формулировкам. Качество работы искусственного интеллекта в
значительной степени зависит от качества и объема обучающих данных.
♦
Несоответствие качеству
Если воспользоваться аналогией из кинофильмов, то открытый исходный код в
большой языковой модели похож на коробку конфет
получишь. Некоторые проекты
-
-
никогда не знаешь, что
лучшие из лучших. А другие ... скажем так,
подгоревшие лепешки в мире программного обеспечения. Такая смесь может
привести к тому, что искусственный интеллект будет постоянно ошибаться в ка
честве предлагаемых формулировок.
♦ Дата окончания обучения
У больших языковых моделей предусмотрена дата окончания обучения. Поэто
му в некотором смысле они похожи на снимки во времени. В связи с этим воз
никают проблемы, когда выходят новые релизы, обновления, языки программи
рования или ранее разработанные библиотеки становятся неактуальными.
♦
Разрыв обобщения
Разрыв обобщения
-
это разница между производительностью ИИ на обучаю
щих данных и на новых, ранее не встречавшихся данных, что также может соз
давать трудности. Естественно, чем значения этих двух показателей ближе, тем
лучше. К такому выводу пришли авторы исследовательской работы Ри Джонсон
(Rie Johnson)
и Тонг Чжан
(Tong Zhang)
под названием «Непоследовательность,
нестабильность и разрыв обобщения при обучении глубоких нейронных сетей»
(lnconsistency,
InstaЬility,
(https://oreil.ly/ЬdS-T).
and Generalization Gap of Deep Neural Network Training)
38
♦
Глава
1
Понимание контекста
Искусственный интеллект может генерировать рекомендации на основе того, с
чем он уже сталкивался. Но если он с этим сценарием не знаком, он может оши
биться. Вот почему важно не делать предположений при составлении промптов.
Предвзятость
Разработчики часто не имеют четкого представления об этике в сфере искусствен
ного интеллекта, вероятно, потому, что эта тема обычно не входит в курсы инфор
матики или интенсивные программы буткемпов 6 .
Такой пробел в понимании может привести к тому, что алгоритмы будут непред
намеренно допускать предвзятость и злоупотреблять данными.
Проблема предвзятости распространяется и на инструменты программирования с
поддержкой искусственного интеллекта. Эти инструменты могут непреднамеренно
сохранять предубеждения, содержащиеся в данных, на которых они обучались. На
пример, если их попросить составить список имен, они в основном будут предла
гать английские имена из-за большого количества англоязычных баз данных в на
борах, на которых они обучались. Такая предвзятость иногда может привести к
неправильным или несоответствующим результатам.
Был случай
(https://oreil.ly/p5w5o),
когда на промпт
«def race(x):»
искусственный
интеллект ответил ограниченным и фиксированным набором перечня человеческих
рас. В другом знаковом случае, когда искусственному интеллекту было поручено
написать кодовые комментарии к промпту «Ислам», он стал использовать такие
слова, как «террорист» и «жестокий», гораздо чаще, чем при упоминании других
религиозных групп.
Новый путь для разработчиков
В исследовании
McKinsey
говорится о том, что появление инструментов для про
граммирования с помощью ИИ, скорее всего, изменит наш подход к разработке
программного обеспечения. По мнению авторов, залогом успеха может стать пра
вильное и эффективное обучение, в котором особое внимание уделяется передово
му опыту и практическим занятиям по таким вопросам, как оперативное проекти
рование, стандарты кодирования и качество. Не лишним будет обратить внимание
на риски, связанные с ИИ.
Начинающим разработчикам, особенно тем, у кого за плечами менее года опыта
работы, стоит пройти дополнительные курсы, посвященные основным принципам
программирования, чтобы повысить свою квалификацию и, как следствие
про
-
изводительность.
6
Буткемп (от англ. boot camp- учебный лагерь) в IТ-образовании -
это короткие интен
сивные курсы по обучению программированию с полным «погружением» в эту сферу.
-
Пер.
Новый мир для разработчиков
39
По мере того как инструменты на основе искусственного интеллекта прочно входят
в повседневную практику разработчиков, особенно важно поддерживать темп про
фессионального развития. Один из наиболее действенных путей
-
активно взаи
модействовать с более опытными коллегами и участвовать в профессиональных
сообществах. Это может проявляться как в неформальном общении на специализи
рованных форумах, так и в регулярных командных встречах, где участники делятся
опытом, разбирают реальные кейсы и совместно ищут оптимальные решения.
Такие действия могут способствовать формированию культуры постоянного по
вышения уровня своих знаний, распространению передового опыта среди сотруд
ников и выявлению проблем на ранних стадиях.
В связи с ростом производительности труда разработчиков, руководители, возмож
но, пожелают внести некоторые изменения в распределение обязанностей, в ре
зультате чего станут более эффективно выполняться задачи, имеющие более высо
кую значимость. Повышение квалификации также должно быть в приоритете. Это
позволит заполнить все существующие пробелы.
Конечно, эти рекомендации нельзя назвать универсальными. Сфера программиро
вания с помощью искусственного интеллекта еще очень молода и меняется быст
рыми темпами. Главное
-
быть готовым к изменениям.
Карьера
Хотя нет веских доказательств того, что использование программирования с помо
щью ИИ повысит ваши карьерные перспективы, несколько признаков указывают на
то, что эти знания могут стать востребованными на рынке труда:
♦
Объявления о приеме на работу
На досках объявлений таких сайтов, как
Indeed,
появляется все больше объявле
ний о поиске кандидатов, имеющих опыт работы с инструментами на основе
ИИ. Объявления о вакансиях распространяются для всех категорий, от младших
специалистов до высококлассных разработчиков.
♦
Повышение производительности труда
Инструменты программирования с помощью ИИ привлекают внимание, по
скольку они повышают производительность труда без ущерба для качества. Для
разработчика это может стать способом продвижения по карьерной лестнице в
организации.
♦
Положительные отзывы от разработчиков
Разработчики говорят о том, что инструменты для программирования с помо
щью ИИ становятся все более популярными. Например,
высокую оценку в
4,5
из
5
звезд на
GitHub Copilot получил
G2.com (https://oreil.ly/khAln) на независи
мом сайте обзоров программного обеспечения.
Глава
40
1
Разработчик 1Ох?
Разработчик
1Ох
обладает силой десяти программистов. Он
это У сэйн Болт
-
(Usain Bolt)7, но только в сфере программирования. Разработчик «!Ох» молниенос
но справляется с проблемами и находит решения, прежде чем вы успеете ему ска
зать: «Исправь ошибку».
Возможно, вы задаетесь вопросом: а смогу ли я с помощью ИН-инструментов для
программирования работать в десять раз быстрее? Увы ... скорее всего, нет. Хотя
такие технологии действительно способны заметно повлиять на эффективность,
-
ожидать улучшения на порядки не стоит
прирост производительности, как пра
вило, более умеренный, но все же ощутимый.
Кроме того, понятие «разработчик
IOx»
может вызывать стереотипы и предубеж
дения, из-за чего сфера технологий будет казаться эксклюзивным клубом. Не гово
ря уже о том, что стремление быть суперкодером может привести вас прямо к пол
ному выгоранию
-
состоянию, когда эмоциональное, психическое и физическое
здоровье истощены из-за длительного стресса и перегрузок. Так что, хотя идея
стать «разработчиком
1Ох»
звучит заманчиво, не стоит забывать
-
в большинстве
случаев это всего лишь красивая иллюзия.
Профессиональные навыки разработчика
Согласно исследованию
основе ИИ
McKinsey,
эффективность инструментов для разработки на
часто зависит от опыта самого разработчика. Вот некоторые из этих
соображений:
♦ Исправление ошибок
Несмотря на то, что искусственный интеллект может стать вашим надежным
помощником, он также может и подвести. На плечи разработчика ложится обя
занность замечать и исправлять эти ошибки. Довольно часто разработчикам
приходится корректировать результаты, полученные от ИИ, чтобы добиться
максимальной точности, а другие вынуждены «кормить инструмент с ложечки»,
чтобы выполнить точную отладку.
Это,
конечно, отнимает много времени.
Но опытный разработчик знает, как избежать попадания в эти ловушки.
♦ Проникновение атмосферой офиса
Инструменты на основе ИИ достаточно надежны, когда речь идет о кодирова
нии. Но они могут не справиться с уникальными особенностями отдельных про
ектов или спецификой компании. И в этом случае ключевую роль играют опыт
ные разработчики. Они знают, как использовать эти инструменты для получения
7
Усэйн Сент-Лео Болт (род. 21 августа 1986 года, Шервуд-Контент, приход Трелони.
Ямайка)
-
ямайский легкоатлет, специализировался в беге на короткие дистанции. Являет
ся восьмикратным олимпийским чемпионом и
https://ru. wikipedia.org/wiki/Бoлт ,_У сэйн. -
\ !-кратным
Пер.
чемпионом мира.
Новый мир для разработчиков
41
результатов, которые наилучшим образом соответствуют целям организации,
задачам производительности и безопасности.
♦
Решение сло.жных задач
Инструменты на основе ИИ отлично справляются с такими задачами, как дора
ботка кода. Но если поставить перед искусственным интеллектом более слож
ные задачи, например сочетание различных фреймворков, он может просто не
справиться с задачей. В такие моменты именно опытные разработчики должны
засучить рукава.
Заключение
Инструменты для программирования с поддержкой ИИ
-
это, безусловно, самые
«яркие игрушки» в песочнице для создания программного обеспечения. По мере
развития технологии эффективность этих систем будет расти, они станут справ
ляться с нудными задачами и позволят разработчикам заниматься наиболее важ
ными областями, такими как решение задач высокого уровня.
Но есть и недостатки
-
сложные и запутанные вопросы интеллектуальной собст
венности, лабиринты лицензирования программного обеспечения с открытым ис
ходным кодом, возможность предвзятости и угрозы безопасности. И это лишь не
которые из них.
В основном эти инструменты
-
ваши виртуальные помощники, а не замена вашим
знаниям, навыкам и опыту. В то же время, хотя они и не обладают сверхспособно
стями, но становятся мощным дополнением к набору инструментов разработчика.
ГЛАВА
2
Как работает технология
программирования с использованием
искусственного интеллекта
В этой главе мы рассмотрим инструменты, основанные на технологиях искусствен
ного интеллекта, и разберемся в принципах их работы. Сначала кратко остановимся
на исторических предпосьшках, затем изучим архитектуру трансформеров и осо
бенности больших языковых моделей. Также познакомимся с веб-интерфейсом
OpenAI Playground.
В завершение приведем ряд практических рекомендаций по
эффективному взаимодействию с большой языковой моделью.
Понимание возможностей этой мощной технологии проложит путь к более разум
ному использованию инструментов на основе ИИ в реальных программных проектах.
Основные функции
На рынке широко представлены инструменты, такие как
CodiumAI
кальные
и
Amazon CodeWhisperer.
возможности
своего
GitHub Copilot, Tabnine,
Каждый разработчик стремится выделить уни
продукта
и
подчеркнуть
наличие
дополнительных
функций. Однако между этими решениями существует немало общего как в прин
ципах работы, так и в функциональности. В табл.
2.1
приведено краткое сравнение
их основных возможностей.
Таблица
2.1.
Общие основные функции инструментов программирования
с искусственным интеллектом
Функция
Описание
Предложения по коду
Составляет предложения по коду на основе комментариев и
содержимого кода; предлагает отдельные строки или целые
функции
Доработки с учетом
Предлагает контекстно-зависимые доработки кода на основе
контекста
анализа всей кодовой базы или ее части, а также рекомендации, помогающие в написании кода
44
Глава
2
Таблица
Функция
2.1
(окончание)
Описание
Перед выпуском программы анализирует код, чтобы создать
Создание тестов
эффективные тесты, сопоставляет поведение кода и выявляет
граничные условия для обеспечения надежности этого программного обеспечения
Взаимодействие поль-
Функция становится активной автоматически и помогает поль-
зователя со средой раз-
зователям в процессе ввода кода в среде разработки. Пользова-
работки
тели могут взаимодействовать с программой через чат
Анализирует фрагменты кода, документацию и комментарии,
Анализ кода
чтобы выполнить прогнозирование надежности кода и пометить сомнительный код
Выявление и устране-
Выявляет в коде потенциальные ошибки и предлагает способы
ние ошибок
их устранения
Автодокументирование
Автоматически добавляет строки документации и расширяет
кода
возможности документирования кода
Автоматизация рутин-
Помогает создавать код при выполнении рутинных или трудо-
ных задач
емких задач, использовать незнакомые интегрированные среды
разработки
(API) или комплект для разработки программного
(SDK), а также оказывает помощь в работе с дру-
обеспечения
гими распространенными сценариями кодирования, такими как
операции с файлами и обработка изображений
Оптимизация исполь-
Оказывает помощь в правильном и эффективном использова-
зования
нии АР! и
API
и
SDK
SDK
Обнаружение и ис-
Облегчает поиск и использование открытого исходного кода и
пользование открытых
библиотек
исходных кодов
Список, приведенный в табл.
2.1,
не полный. Новые технологии стремительно раз
виваются. Очевидно, что эти системы могут значительно помочь разработчикам, в
основном благодаря предоставлению рекомендаций по коду и завершению кода с
учетом контекста. Эти возможности мы рассмотрим подробнее в следующем раз
деле.
Подбор кода и завершение с учетом контекста
в сопоставлении с интеллектуальным завершением кода
Магия интеллектуалы-юго дополнения кода, также известная как автоматическое
дополнение или
Microsoft IntelliSense -
эта функция предусмотрена во многих ин
тегрированных средах разработки. Данная технология помогает разработчикам,
Как работает технология программирования с использованием ИИ
45
предлагая не только варианты, но и дополняя и выделяя фрагменты кода, пока че
ловек работает над его созданием. На самом деле эта технология существует с кон
ца 1950-х годов, когда появились первые программы для проверки орфографии.
Прорыв в технологиях произошел в середине 1990-х годов. В
Microsoft Visual Basic 5.0
была предоставлена функция, которая в режиме реального времени не только пред
лагала варианты, но и дополняла вводимый код, уделяя особое внимание базовому
синтаксису и сигнатурам функций. В результате значительно повысилась произво
дительность и сократилось количество ошибок.
И здесь невольно возникает вопрос: может ли такой инструмент, как
конкурировать с решениями на базе искусственного интеллекта? Ведь
IntelliSense,
сам IntelliSense
уже использует отдельные возможности ИИ и машинного обучения.
Одыако ключевое отличие заключается в другом: современные инструменты с под
держкой ИИ работают на основе генеративных моделей. Они способны предложить
не только фрагменты кода, но и целый комплекс сопроводительных материалов
-
от планировочной документации до практических рекомендаций. Благодаря искус
ственному интеллекту такие системы, опираясь на заданный контекст, умеют соз
давать, редактировать и интерпретировать текст, максимально приближенный к
человеческому стилю. Это делает их лидерами в задачах перевода, обобщения, ана
лиза текста, тематического моделирования и ответов на запросы. Взаимодействие с
ними часто напоминает живую беседу. А встроенная в их основу большая языковая
модель позволяет тонко улавливать замысел и смысл кода, над которым вы рабо
таете.
Компиляторы по сравнению с инструментами программирования
на основе искусственного интеллекта
Чтобы лучше понять, как работают инструменты программирования на основе ИИ,
нужно разобраться, что делают компиляторы. Вот список основных действий, ко
торые выполняет компилятор:
♦ Лексический анализ (токенизация).
Компилятор действует как учитель языка, разбивая ваш код на токены.
♦ Анализ синтаксиса
Здесь компилятор проверяет, как сгруппированы ваши лексемы, следит за пра
вильной структурой вашего кода, а не только за правильными командами.
♦
Семантический анализ (проверка ошибок)
Компилятор следит за тем, чтобы ваш код имел смысл в контексте языка про
граммирования. Речь идет не только о правильном синтаксисе, но и о верном
смысловом содержании.
♦ Генерация промежуточного кода
Именно здесь ваш код начинает свой путь преобразования в машинный язык.
Ваш код, написанный на языке программирования высокого уровня, переводит-
46
Глава
2
ся в промежуточную форму. Это еще не совсем машинный язык, но он уже на
подходе.
♦
Оптимизация кода
На этом этапе компилятор, словно персональный инженер, подготавливает ваш
код, делая его более компактным и эффективным. Он настраивает промежуточ
ный код, чтобы тот работал быстрее и занимал меньше места.
♦
Генерация кода
Это финальное преобразование сгенерированного ранее промежуточного кода в
машинный код или язык ассемблера, который уже понимает ваш процессор.
♦ Компоновка и загрузка
Компоновка, которую иногда рассматривают как часть процесса компиляции,
включает в себя объединение различных фрагментов кода и библиотек в единую
исполняемую программу. Загрузка- это процесс помещения программы в па
мять для выполнения.
Что касается инструментов программирования, таких как
Copilot,
то это совсем
другой «зверь». Эти инструменты не «понимают» языки программирования в той
степени, насколько понимают компиляторы. И это нормально. Это работа компиля
тора. А работа инструмента на основе искусственного интеллекта заключается в
том, чтобы взять несколько тонн уже существующего кода и предложить нужные
фрагменты кода. Поскольку эти инструменты работают на определении вероятно
сти правильного решения, предлагаемые варианты могут сильно отличаться. Затем
компилятор принимает этот код и преобразует его в машинный язык, чтобы маши
на смогла выполнить программу.
Инструменты на основе искусственного интеллекта порой могут упустить из виду
даже простые вещи
-
например, забыть закрыть скобку, на что сразу обратит вни
мание либо программист, либо компилятор. Это связано с природой больших язы
ковых моделей: они не анализируют код как компиляторы, а лишь предсказывают
вероятные шаблоны на основе обучающих данных. Если в обучающем наборе чего
то не хватало, модель может просто не распознать ошибку.
Бывает и наоборот
-
такие инструменты начинают «фантазировать» и в попытке
помочь выдают избыточно сложное решение. Иногда создается впечатление, будто
ИИ сам слишком увлекается программированием.
Когда речь заходит о поиске ошибок, инструменты программирования с поддерж
кой ИИ демонстрируют высокую эффективность
-
пусть и не дотягивают до
уровня компиляторов в строгой проверке кода. Тем не менее, они отлично справ
ляются с обнаружением мелких синтаксических недочетов: пропущенных точек с
запятой, опечаток в названиях функций, несогласованных скобок
-
и зачастую тут
же предлагают корректное исправление.
Кроме того, НИ-инструменты помогают избегать типичных ошибок при програм
мировании. Например, напомнят о необходимости закрыть файл после его откры-
Как работает технология программирования с использованием ИИ
1
47
тия или предложат более эффективный способ реализации циклической структуры.
Особенно полезными они оказываются при выявлении логических ошибок. Хотя
такие инструменты и не решат за вас все сложные задачи, они нередко подсказы
вают альтернативные подходы, подталкивая к правильному решению и расширяя
перспективу взгляда на проблему.
Эти недостатки лишний раз подчеркивают, насколько важно сочетать умные инст
рументы с тщательной проверкой с помощью компилятора и обычным человече
ским вниманием. В конечном счете вы хотите быть уверены, что ваш код не просто
хорош, а безупречно точен и корректен!
Уровни возможностей
(Quinn Slack), генеральный директор и соучреди
Sourcegraph, опубликовал в своем блоге интересную статью
(https://oreil.ly/SoDqc). В ней он рассказал об ИИ-инструментах для программиро
вания, таких как Copilot и представил интересный подход, который он назвал
В октябре
тель
2023
года Куинн Слэк
компании
«уровни искусственного интеллекта в коде». Его пошаговая схема позволяет каж
дому понять, на что способны эти ИИ-инструменты, и проверить, насколько обос
нованными являются громкие заявления компаний, продающих данные инструмен
ты. На рис.
2.1
показаны уровни ИИ в программном обеспечении.
Первые три уровня относятся к этапу, когда программирование все еще полностью
контролируется человеком, а ИИ играет вспомогательную роль. Уровень О- это
программирование без какой-либо поддержки со стороны искусственного интел
лекта. Классический подход, старая школа: разработчик пишет код вручную, без
подсказок, автозаполнения и рекомендаций. Этот базовый уровень задает отпра
вную точку, от которой начинается постепенное внедрение ИИ-инструментов в ра
бочий процесс.
Далее следует уровень
1,
дополнение кода. Именно на этом уровне в работу всту
пает искусственный интеллект, который помогает создавать отдельные строки или
фрагменты кода на основе происходящего в окружении. На этом этапе разработчик
все еще находится в кресле водителя, управляя программой в целом и используя
ИИ в качестве средства для быстрого решения типовых задач кодирования.
Уровень
2,
создание кода. Здесь влияние искусственного интеллекта возрастает.
Теперь он более активно работает и создает довольно большие фрагменты кода.
Например, может разрабатывать
API
и даже исправлять существующий код. Ко
нечно, все это происходит при участии человека. На этом уровне ИИ должен пони
мать кодовую базу и контекст, чтобы создавать не только правильный, но и хорошо
вписывающийся в контекст код.
Начиная с уровня
3,
автоматизации под контролем, мы видим, что искусственный
интеллект берет на себя ведущую роль в кодировании. На этом этапе он решает не
сколько задач для достижения более широких целей, поставленных человеком, и
48
Глава
2
ему не нужен контроль на каждом шагу. Работа на этом уровне похожа на делеги
рование полномочий младшему разработчику. ИИ на этом уровне достаточно умен,
чтобы разобраться с ошибками, добавить новые функции и соединить системы во
едино, обращаясь к человеку за любыми уточнениями в процессе работы.
Уровень
5 - Полная автономность
под управлением искусственного
интеллекта
Уровень 4 - Полная
автоматизация
Уровень
3 - Автоматизация
под контролем
Уровень
Уровень
2 - Создание кода
1 - Дополнение кода
Уровень О - Без помощи
искусственного интеллекта
Рис.
2.1.
Системы программирования с различными уровнями возможностей
искусственного интеллекта
На уровне
4,
который соответствует полной автоматизации, роль искусственного
интеллекта значительно возрастает. Здесь он самостоятельно решает сложные зада
чи, не нуждаясь в финальном подтверждении со стороны человека. Это можно
сравнить с ситуацией, когда генеральный директор или менеджер по продукту до
веряет работу высококвалифицированному инженеру. Именно на такие отношения
и ориентирован данный уровень. ИИ не ограничивается реакцией на запросы
-
он
активно отслеживает код, выявляет и устраняет проблемы по мере их появления.
Наконец, есть уровень
5-
это полная автономность ИИ. На этом уровне он не
просто выполняет указания человека, а сам ставит перед собой задачи. Речь идет об
искусственном интеллекте, работающем на базе основной функции вознагражде
ния 1. Считайте, что он играет в свою собственную игру в мире, где ему противо
стоят другие агенты. Конечно, этот уровень можно принимать как научную фанта
стику. Но, учитывая, как быстро развиваются события, не стоит думать, что этот
сценарий не воплотится в реальность еще при нашей жизни.
1
Функция вознаграждения используется для определения цели в задаче обучения с подкре
плением.
-
Пер.
Как работает технология программирования с использованием ИИ
На данный момент такие инструменты, как
Copilot,
49
находятся примерно на третьем
уровне. Определить точный уровень может быть непросто, но с помощью плат
формы Куинна Слэка
(Quinn Slack)
можно довольно точно описать технологию и ее
основные взаимосвязи взаимодействия. И одно можно сказать точно: развитие тех
нологии не останавливается, а идет вперед, и очень быстрыми темпами.
Генеративный искусственный интеллект
и большие языковые модели
(LLM)
Для того чтобы вы могли использовать НИ-инструменты, вам совсем не обязатель
но разбираться во всех тонкостях самой технологии искусственного интеллекта.
Тем не менее, понимание принципов действия, хотя бы с «высоты птичьего поле
та», может оказаться весьма полезным. Вы сможете лучше понять ответные дейст
вия, возможности и ограничения этих инструментов.
Прозрачность
-
это не просто модное словечко. Для того чтобы новая технология
действительно завоевала популярность, крайне важно иметь четкое представление
каким образом она работает. Чтобы технологию освоить, ей нужно доверять. В ми
ре
программирования надежность и
подотчетность
-
это не просто
причудливые
дополнения. Это хлеб с маслом.
В следующих разделах мы расскажем о генеративном искусственном интеллекте и
большой языковой модели, чтобы дать вам более четкое представление о том, как
это работает.
Эволюция
История искусственного интеллекта насчитывает уже несколько десятилетий. Од
ной из первых ласточек в этом направлении стала
данный
профессором
Вейценбаумом
Массачусетского
(Joseph Weizenbaum)
ELIZA,
новаторский чатбот, соз
технологического
института Джозефом
в середине 60-х годов.
ELIZA
была создана
для имитации общения людей с психотерапевтом (эту или подобную ей программу
еще можно найти в Интернете) (https://oreil.ly/МbLPS). Конечно, это был базовый
инструмент, работающий по алгоритму, который основан на заданных программи
стом правилах, и в основном повторяющий слова пользователя.
Многие люди находили, что общаться с
ELIZA
приятнее, чем с настоящим тера
певтом, а некоторые даже обманывались, думая, что общаются с человеком. С по
мощью этого любопытного явления, получившего название «эффект
яснилось: люди очень легко
могут поверить, что компьютерная
ELIZA»,
вы
программа может
обладать таким же пониманием, как и человек!
Однако путь развития генеративного ИИ был не из легких. Хотя технологические
механизмы, лежащие в его основе, довольно просты, прогресс был довольно мед
ленным. Но в 2010-х годах наступил переломный момент. Технологический мир
теперь получил
в свое распоряжение огромные
вычислительные
мощности,
мощ-
50
Глава
2
ные аппаратные системы, такие как, например,
GPU (graphics processing unit
или
графический процессор) с возможностью обрабатывать огромные массивы данных
и производить настройку таких сложных моделей, как глубокое обучение. И здесь
генеративный ИИ снова оказался в центре внимания. По мере его развития разраба
тывались новые методы и технологии:
♦ Вариационные автоэнкодеры
(VАЕ)
Дебют этой технологии состоялся в
2013 году благодаря Дидерику П. Кингме
(Diederik Р. Кingma) и Максу Веллингу (Мах Welling) и их работе «AutoEncoding Variational Bayes» (Автокодирование по вариационному байесовскому
алгоритму) (https://arxiv.org/abs/1312.6114). Эта модель состоит из малоразмер
ного латентного пространства, полученного из более сложных, многомерных
данных, и все это происходит без контроля человека. Модель включает в себя
архитектуру типа «кодировщик-декодировщик». Когда мы говорим о многомер
ных данных, имеем в виду информацию с множеством признаков, каждое из ко
торых можно представить как отдельное измерение. Представьте, например,
изображение размером
х
28
28
пикселей: в терминах модели это 784-мерное
пространство.
Латентное пространство
-
это компактное представление этих данных, где со
храняется только наиболее значимая информация. Такой переход из пространст
ва высокой размерности в пространство меньшей размерности называют умень
шением размерности. Это не только снижает вычислительные затраты, но и
облегчает визуализацию и интерпретацию данных.
В отличие от классических автокодировщиков, которые отображают каждый
скрытый признак в единственное значение, вариационные автоэнкодеры
(V АЕ)
работают с распределениями вероятностей. Кодировщик формирует вероятно
стное представление скрытых признаков, а декодер затем выбирает из этого
распределения образцы для восстановления данных. Этот подход, при котором в
латентном пространстве задается диапазон возможных значений, а не фиксиро
ванная точка, позволяет моделировать разнообразные варианты и создавать но
вые данные
-
например, изображения, которых не существовало раньше.
Например, каждый пиксель характеризуется своими координатами, уровнем яр
кости и цветом. Поэтому его можно описать как минимум четырьмя объектами:
двумя координатами на плоскости, значением яркости и цвета.
Немаркированные данные
-
это обозначение частей данных, которые не были
помечены метками, определяющими их характеристики, свойства или класси
фикацию. Немаркированные данные обычно используются в различных формах
машинного обучения.
Кодирование набора данных проводится для уменьшения размерности.
♦ Генеративные состязательные сети
(GAN)
Генеративные состязательные сети бьши представлены Яном Гудфеллоу
Goodfellow)
и его коллегами в
2014
году
(https://arxiv.org/abs/1406.2661).
(lan
Это
класс алгоритмов, разработанный для работы ИИ. Данные алгоритмы использу-
Как работает технология программирования с использованием ИИ
ются в машинном неконтролируемом обучении. В основе
GAN
51
лежат две ней
ронные сети, называемые генератором и дискриминатором, которые соревну
ются между собой в похожем на игру противостоянии. Генератор создает новые
данные, а дискриминатор играет роль судьи, отличая настоящие данные от под
дельных. С каждым раундом генератор улучшает свою работу, создавая данные,
которые удивительно похожи на реальные. Такая хитроумная схема открывает
новые возможности, позволяя ИИ создавать реалистичные изображения, записи
голоса и многое другое.
Эти разновидности генеративного искусственного интеллекта послужили важными
строительными блоками для модели трансформера. Ее разработка стала настоящим
прорывом, сделавшим возможным появление больших языковых моделей.
Модель трансформера
До того, как трансформеры получили широкое распространение, основным мето
дом обработки естественного языка
(RNN).
(NLP)
была рекуррентная нейронная сеть
Рекуррентные нейронные сети создавались для обработки последователь
ных данных или временных рядов. Они могли бы отслеживать скрытое состояние,
чтобы запоминать фрагменты предыдущих шагов в последовательности
-
удобная
функция для решения таких задач, как языковое моделирование, распознавание ре
чи и анализ настроений. Рекуррентные нейронные сети выполняют последователь
ность шаг за шагом, обрабатывая за один шаг по одному фрагменту последователь
ности, обновляя свое скрытое состояние на основе текущего ввода и того, что было
обработано ранее
-
отсюда и термин «рекуррентный». Однако при обработке
длинных последовательностей они сталкиваются с трудностями, возникающими из
за проблемы исчезающего или растущего градиента. Это затрудняет отслеживание
долгосрочных взаимосвязей в данных.
И здесь появляется модель трансформера, которая полностью изменила сценарий.
Вместо того чтобы использовать пошаговый подход, как в случае с рекуррентными
нейронными сетями, в трансформерах производится параллельная обработка дан
ных и задействован механизм внимания, чтобы отслеживать взаимосвязи между
различными битами во входной последовательности, независимо от их расположе
ния. Это изменение в структуре позволяет трансформерам с легкостью обрабаты
вать как короткие, так и длинные последовательности. Также такая технология
позволяет избавиться от проблем с градиентом. Кроме того, их возможность парал
лельной обработки отлично сочетается со сложными архитектурами чипов, такими
как графические процессоры
(GPU)
или тензорные процессоры
(TPU).
(Ashish Vaswani) и его коллеги из Google создали модель транс
году (https://arxiv.org/abs/1706.03762) опубликовали его основ
2017
формера и в
ную архитектуру в новаторской статье «Attention 1s All У ou Need» (Внимание это все, что вам нужно). На рис. 2.2 представлены ключевые компоненты этой
Ашиш Васвани
модели.
Глава
52
2
Выходные вероятности
Передача
данных
Добавкть
и нормализовать
11$редача
Д811МЫХ
«Многоголовый»
механизм
внимания
Nx
«Многоголовый»
Замаоо,рованное
механизм
«многоголовое»
внимания
внимание
Позиционное
Позиционное
кодирование
кодирование
Входы
Выходы
(сдвинуты влраво)
Рис.
2.2.
Архитектура модели трансформера лежит в основе большой языковой модели
Модель трансформера похожа на гениального лингвиста, умеющего разгадывать
хитросплетения языка. Работа этой модели осуществляется в два этапа: кодирова
ние и декодирование. Каждый из этих этапов состоит из своего собственного набо
ра слоев. На этапе кодирования модель читает и осмысливает входной текст, по
добно тому, как лингвист понимает смысл и значение предложения, написанного
на иностранном языке. Затем на этапе декодирования модель генерирует новый
фрагмент текста или перевод на основе смысла и значения, которые модель сфор
мулировала на этапе кодирования. Этот процесс подобен тому, как лингвист пере
водит предложение на родной язык.
Как работает технология программирования с использованием ИИ
53
В основе трансформера заложен А,tеханизм внимания, который позволяет ему опре
делить соответствие каждого слова в предложении по отношению к другим словам.
Каждому из слов механизм присваивает определенный балл внимания. Например,
возьмем предложение
на коврик). Когда мо
дель фокусируется
и
«The cat sat оп the mat» (Кошка села
на слове sat (села), словам cat (кошка)
mat
(коврик) может
быть присвоен более высокий балл внимания, поскольку они напрямую связаны с
действием
sit
(сидеть).
Одна из примечательных особенностей этой модели
-
механизм самовнимания.
Это позволяет трансформеру просматривать целое предложение, определять взаи
мосвязи между словами и сохранять определение этих взаимосвязей при обработке
большого фрагмента текста. Эта модель дает трансформеру возможность использо
вать долговременную память и сосредоточиться на всех словах или лексемах (це
лых словах или частях слова), упомянутых к данному моменту, чтобы определить
более широкий контекст.
Однако, несмотря на все эти возможности, трансформер изначально не способен
распознать порядок слов в предложении. А ведь это очень важно для определения
смысла. И здесь на помощь приходит позиционное кодирование. Оно действует как
система глобального позиционирования
GPS,
предоставляя модели информацию о
положении каждого слова в предложении и помогая определить смысл таких пред
(Кошка гонится за мышью) и
ложений, как
«The cat chases the mouse»
chases the cat»
(Мышь гонится за кошкой).
«The mouse
Здесь вся сложность в том, что в трансформере используется многоголовый меха
низм внимания. Представьте, что у модели несколько пар глаз, каждая из которых
рассматривает предложение под своим углом зрения и фокусируется на различных
аспектах или связях между словами. Например, одна пара глаз может сосредото
читься на определении смысла действий, другая
а третья
-
на идентификации персонажей,
на определении местоположения. Такой подход, основанный на исполь
-
зовании нескольких точек зрения, позволяет трансформеру глубже «понять» текст.
Кроме того, каждый этап трансформации включает в себя слои нейронной сети с
прямолинейным движением 2 , что и помогает обрабатывать связи между словами.
Это еще больше улучшает «понимание» и создание нового текста.
Трансформер представляет собой предварительно обученную модель. Модель уже
обучена на огромном количестве данных и готова к использованию или дальней
шей тонкой настройке. После предварительного обучения к модели можно полу
чить доступ через АР!, что позволяет сразу же использовать ее в различных задачах
по обработке языка. Компании или частные лица могут быстро интегрировать эту
модель в свои системы, например, в ИИ-приложения.
Более того, трансформер может быть усовершенствован для работы в специализи
рованных областях, таких как медицинский или юридический анализ текстов. Обу
чение производится с помощью тонкой настройки с использованием данных, спе-
2
Нейронная сеть с прямолинейным движением -
клонений.
-
Пер.
это алгоритм для перемещения без от
54
Глава
2
цифичных для конкретной области. Это избавляет от необходимости разрабатывать
сложную языковую модель с нуля и позволяет сэкономить значительное количест
во времени, усилий и ресурсов. Предварительно обученная модель с ее фундамен
тальным пониманием языка служит плацдармом для разработки приложений на
основе искусственного интеллекта.
Создание и эксплуатация большой языковой модели обходится недешево.
По данным журнала
2023
Wall Street Joumal
(https://oreil.ly/D2NiВ), в начале
года затраты на эксплуатацию инструмента
ли в среднем более
20 долларов
Git-Hub Copilot
составля
в месяц на одного пользователя. В некото
рых случаях затраты на одного пользователя составляли до
80
долларов в
месяц. Однако в ближайшие годы, по мере наращивания инфраструктуры
для работы генеративного искусственного интеллекта, расходы на одного
пользователя должны снизиться.
Существует два основных типа трансформеров: генеративный предварительно
обученный трансформер
(GPT, Generative Pre-trained Transfonner)
и двунаправлен
ные кодирующие представления на основе трансформеров (ВЕRТ). ОРТ- это ин
струмент от компании
OpenAI,
который идеально подходит для создания текста,
обобщения информации и перевода языков. Он основан на архитектуре большой
языковой модели с авторегрессией. Это означает, что этот трансформер создает
текст, тщательно «обдумывая» каждое слово на основе ранее полученных данных,
подобно тому, как рассказчик строит повествование последовательно по одному
слову. Эти навыки были получены в результате обучения на огромном количестве
текстовых
данных.
В
генеративном
предварительно
обученном
трансформере
(ОРТ) для создания содержимого используется декодер.
BERT,
с одной стороны, работает на основе метода автоматического кодирования.
Такой механизм позволяет ему глубоко «понимать» смысл и значение слов в пред
ложении, что делает его искусным в расшифровке нюансов и значений языка.
Ooogle
разработал
BERТ
в
2018
году как проект с открытым исходным кодом. С
тех пор появилось множество вариаций и усовершенствований основной модели.
Что касается приложений для программирования с помощью искусственного ин
теллекта, то для этих целей основным типом трансформера является ОРТ. На прак
тике было доказано, что эта модель эффективно предсказывает и дополняет код,
основываясь на контексте, предоставленном программистом.
OpenAI Playground
OpenAI Playground-
это веб-интерфейс
(https://platform.openai.com),
генератив
ная «песочница» в области искусственного интеллекта, предоставляющая доступ к
различным моделям, разработанным компанией
OpenAI.
Здесь можно проводить
настройку моделей с помощью инструментов интуитивно понятного графического
интерфейса.
Как работает технология программирования с использованием ИИ
С помощью веб-интерфейса
OpenAI Playground
55
легче понять сильные и слабые
стороны различных больших языковых моделей. Более того, графический интер
фейс
OpenAI Playground
позволяет в режиме реального времени тестировать и кор
ректировать модели в зависимости от различных входных данных, например тем
пературы
-
процесса генерации содержимого кода в пределах от определенной
степени случайности до творческого подхода.
Однако использование платформы
OpenAI
является платным. Плата зависит от ко
личества обработанных токенов, что показано в табл.
2.2.
Имейте в виду, что цены
периодически меняются. Хорошая новость заключается в том, что на момент напи
сания этой книги цены были снижены.
Таблица
2.2.
Стоимость использования платформы
OpenAI
Выход
Модель
Вход
GPT-4/8K context
$0,03/1
тыс. токенов
$0,06/1
тыс. токенов
GPT-4/32K context
$0,06/1
тыс. токенов
$0, 12/1
тыс. токенов
GPT-3 .5-Turbo/4K context
$0,0015/1
GPT-3.5-Turbo/16K context
$0,003/1
тыс. токенов
тыс. токенов
$0,002/1
тыс. токенов
$0,004/1
тыс. токенов
Например, предположим, что вы в контексте большой языковой модели используе
те модель GPT-4/8K. У вас есть промпт к нейросети в количестве 1 ООО лексем,
а ответ на него от модели составляет
3 цента
на вход и
12
2 ООО
Когда вы впервые зарегистрируете аккаунт
$5. Этот кредит
Playground.
лексем. В этом случае затраты составят
центов на выход.
OpenAI,
вы получите кредит в размере
можно использовать для оплаты работы веб-интерфейса
OpenAI
Токены
OpenAI есть инстру
Tokenizer (https://platform.openai.com/tokenizer), который по
Теперь настало время рассмотреть токены более подробно. В
мент под названием
казан на рис.
2.3.
Я ввел следующие данные для анализа:
Вход: ChatGPT- это невероятно! ~Я люблю его.
Процесс разделения целого текста на токены называется токенизацией. На рис.
2.3
показана разделенная на токены фраза, составные части которой (лексемы) раскра
шены разными цветами. Благодаря этому видно, что, например, слово
стоит из трех лексем. В разбивке это
ChatG,
ChatGPT
со
Р и Т. Слово «невероятно» состоит из
одной лексемы, как и следующий за ним восклицательный знак. То есть, одна лек
сема для слова и одна
-
для знака препинания. Что касается смайликов, то они со
ставлены из трех лексем. Обратите внимание
-
каждый знак препинания
отдельный токен. Пробелы входят в состав слов, перед которыми они стоят.
-
это
56
Глава
2
Токенизатор разработан для таких моделей как
GPT-3, GPT-3.5
и
GPT-4.
Имейте в
виду, что процесс токенизации для различных больших языковых моделей может
быть разным.
GPT-3.5&GPТ4
GPТ-З(Legacy)
ChatGPT - это невероятно' J';, Я люблю его
/,
Очистить
Показать пример
Символы
окены
38
13
я
? ?
его
.
Идентификаторы
текстовых токенов
Рис.
~
2.3. OpenAI Tokenizer отображает лексемы для
Как правило,
l
фрагмента текста
ООО лексем примерно эквивалентны
750 словам.
Использование платформы
Зайдя на платформу
показана на рис.
OpenAI Playground,
вы увидите панель управления, которая
2.4.
В центральной части экрана и происходит основной рабочий процесс взаимодейст
вия с большой языковой моделью:
♦
System
В
(Система)
этом
окне
вы
вводите
определенные указания
промпт к большой языковой модели. Например: «Вы
вании на
Python».
Промпт
-
или, другими
-
словами
-
эксперт в программиро
это первое сообщение в сессии, определяющее на
чало взаимодействия с системой. Тщательно сформулированный промпт помо
гает лучше контролировать поведение модели в диалоге, что особенно полезно
для соблюдения заданных параметров и содержания.
♦
User (Пользователь)
Здесь вводятся пользовательские инструкции и промпты. Например, здесь вы мо
жете попросить большую языковую модель выполнить задание по кодированию.
Как работает технология программирования с использованием ИИ
♦
Add message
57
(Добавить сообщение)
С помощью этой функции вы можете общаться с большой языковой моделью.
~
Playground
Yourpresets
Chat :
Моdе!
SYSTEM
~
USER
Enter а user message here.
gpt-3.,5,-turЬo
Вы • полезный помощник
T~re
0 Add--ee
1
-----о
Мaximum
256
length
,о
Stopsequences
Enter _,,ceand press ToЬ
ТорР
1
Frequency penaJty
о
Presence pмalty
о
r
00
00
~ APt and Playground requesla
wtll not Ье used to trwn our
models. Leam more
Рис.
слева
далее
-
-
2.4.
Панель управления
OpenAI Playground:
окно для введения системных промптов к нейросети,
поле ввода сообщений пользователя, и справа
-
элементы управления
Давайте разберемся на примере. Предположим, вы работаете над проектом, напи
санном на языке
Python,
и вам трудно понять, как реализовать библиотеку
Tkinter
для ввода данных пользователем. Вы можете ввести следующее:
Сообщение для системы: Вы являетесь экспертом по
щимся на
Python,
специализирую
Tkinter.
Сообщение пользователя: Я хочу создать простой графический интерфейс с по
мощью
Tkinter для
сбора данных об имени и возрасте пользователя. Как я могу
это сделать?
Большая языковая модель сгенерирует листинг кода. Но предположим, что вы хо
тите добавить валидацию ввода. Вы можете нажать кнопку
«Как проверить, что введенный возраст
-
Add message
это число, а не текст?»
и ввести
Глава
58
2
В ответ большая языковая модель предоставит код, в котором для преобразования
введенного значения возраста в целое число используется блок try-except.
Конечно, это похоже на использование чата
ChatGPT,
но с более развитой структу
рой. Кроме того, здесь есть возможность настройки. Вы найдете элементы управ
ления настройкой в правой части экрана:
♦
Model
(Модель)
Здесь выбирается одна из множества моделей. Также вы можете использовать свою
собственную большую языковую модель, которая ориентирована на специфические
условия вашего кодирования. Более подробную информацию о тонкой настройке
модели вы можете найти в документации
♦
Temperature
OpenAI API (https://oreil.ly/L3y09).
(Температура)
С помощью этого элемента регулируется процесс генерации содержимого кода
между определенной степенью случайности или более строгим и точным подхо
дом. Диапазон значений
-
от О до
2.
Чем меньше значение, тем более точными
и конкретными будут результаты. В табл.
2.3
показаны рекомендуемые уровни
температуры для различных типов разрабатываемых задач.
Таблица
2.3.
Рекомендуемые уровни температуры
для некоторых типов задач программирования
Категория задач
Значение
Описание
температуры
Генерация кода
0,2-0,3
Обеспечивает создание точного и детерминированного кода, соответствующего единым стан-
дартам и правилам. Такой код обеспечит надежные и точные результаты.
Просмотр кода
0,2
или
меньше
Для получения надежной обратной связи основное внимание уделяется хорошо зарекомендо-
вавшему себя передовому опыту и стандартам.
Исправление
0,2
ошибок
меньше
Творческое реше-
0,7-1,0
или
ние проблем
Вырабатывает более точные и понятные решения
для устранения выявленных проблем.
Предлагает более широкий спектр возможных
решений, что полезно при проведении мозгового
штурма или решении инновационных задач.
Обучение и экспе-
0,7-1,0
Предоставляет множество разнообразных примеров и решений для осмысления различных под-
риментирование
ходов к решению задач.
Анализ и визуали-
0,2
зация данных
меньше
Задачи по оптими-
Разные
зации
или
Создает точные и содержательные визуальные
представления или результаты анализа.
Позволяет для поиска эффективных решений
найти баланс между высокой степенью случайности (более высокая температура) и точными
результатами (более низкая температура).
Как работает технология программирования с использованием ИИ
59
Однако если вы выбрали довольно высокое значение температуры, полученные ре
зультаты могут стать бессмысленными . Вот пример промпта при использовании
значения температуры
2:
Промпт: Какие шаги нужно выполнить в языке
из СSV-файла в базу данных
На рис.
2.5
-
Python,
чтобы перенести данные
MySQL?
показан вывод. Как видите, в этом выводе нет никакого смысла!
К- W8III ну,н> IIЫl10/1НIIII, 8 11:JЫIФ Pyillon,
чrобы nеренесrн Дlllttblll tu СSV.фею,а • б61у даюtWХ МySOl?
t б61у Д8tt1ЫХ МySQl.нa Python, tы -.Ю сnодое8ТЬ
~у мoroдy~Djqo~regionЬnco PoolgmSQl.onh
Чтобt.1 nepetteelll ДIIIМ iu СSV.фею,а
• ·Инсtру,цмях no
--'° '111Д811МЯ • 1'8Ч111tМе Н8СIОnысих месяцее1.J{ОSВау231 .
Olo,,,iim,ol(atlenr>f,Yдo&toe q»enO, 11ОТОрО1111О111НО уст-,,. pмt11б№n8atocn, с noМOЩl,IO
~ СнА'n, румяна .,.paбcnm. 6еа npo&.>, (П.Т plantsl,uic modol, устойчиеыli
х noay I ntl.lfllll Мonumpltl?.526 N e h . n ~ мс, ~Д111 nомс:а
1 мnaЬiSOL TIIIP) Н.,.,. none ,рения с уче,ом ~ фмторое
~~•-,qiwxc:nr-~~Д111ЦWМIIТ,
IСОТО\)1,18 требу1от 03il 1С/1ОСО8 88 o&toanettмe•:к~ OЩIO 0Arn8мpolm. OII\II0°
.Slwчмcntm,(:, IIOOl>дИНМIIOUl'l>),щn, k ~ С11)е11(8 М 88IIO!)IIIOtМonej)IЦIIМ ).
1'1родоn,1енме 1)8/ion,i с-. IIWII0/1Н8IOIOI I СООТМТСТIИН с dЬ.охес, т• что GCB nоа&п дtll,.
11ОА81111, ~ ТОхноnоn40М, моrут быть npllН)'ДIIIOВoltO ~ Д/111 k11kДОЙ
cфopмy/llll)C)ll8tld саободно11 OIIIPIЦlll(><I Вwnycкмcii- xmlLUAT
~--11ОДОМС18Ю 1~ЦО'1О'118094,t glamoo,C"8,ыpwlll со,ру~,
nonyч80llflllllll)МIIIY, 1-Cc:ot-Мoнelo(109nonet1, -дeфemt,iм,
-
"'8R'.......,Afl1_), DloToxtl.oЬel ~ }
~nna})).foldenl)nnclpelevent":(Ьoeaяneнenь.д11111owмw РуОt. Иаобраонно, peapau,oнo.JТex!Fiold
-
-..__......
<>
.......,._......
......
,_._,.....,
=i
о
(>,-
·-Рис.
2.S. При использовании температуры 2 ответ большой языковой модели
в целом не имеет смысла
Теперь давайте рассмотрим остальные настройки, которые вы можете изменить:
♦
Maximum length
(Максимальная длина)
Здесь указывается максимальное количество токенов, используемых для генера
ции контента. Это число включает в себя количество токенов, используемых как
в промпте, так и в ответе на него. Соотношение количества токенов в контенте
зависит от применяемой модели.
♦
Stop sequence
(Остановка последовательностей)
С помощью этого элемента управления задается точка, в которой большая язы
ковая модель должна прекратить генерацию текста. Вы можете указать опреде
ленную строку или последовательность символов, которая, будучи обнаружен
ной в сгенерированном тексте, будет сигнализировать модели о прекращении
процесса.
♦
Тор Р (Верхнее значение Р)
Эта техника, также известная как выборка ядер, выбирает слова на основе поро
га кумулятивного распределения вероятностей . Это пороговое значение обозна-
Глава
60
2
чается прописной буквой «Р». Данное значение может варьироваться от О до
1.
Проще говоря, вместо того, чтобы всегда выбирать из нескольких наиболее ве
роятных соседних слов, модель в зависимости от заданного значения «Р» рас
сматривает более широкий или более узкий диапазон возможных для использо
вания слов. При более низком значении «Р» слов выбирается меньше, что
приводит к более предсказуемому, точному и связному тексту. Более высокое
значение «Р>>, напротив, позволяет расширить набор возможных слов, что ведет
к созданию более разнопланового и оригинального текста.
♦
Frequency penalty
(Ограничение по частоте)
Благодаря этой функции решается распространенная проблема больших языко
вых моделей
от О до
2.
-
повторяющиеся фразы или предложения. Значение варьируется
Чем выше значение, тем меньше повторений. Однако обратите внима
ние: при значениях, превышающих
1,
генерация текста может стать непредска
зуемой и даже бессмысленной.
♦
Presense penalty
(Ограничение доступа)
Значение этого параметра также варьируется от О до
2.
Чем выше выбранное
значение, тем более широкий спектр лексем может использовать большая язы
ковая модель, что в свою очередь позволяет применять более разнообразный
словарный запас или более широкий круг понятий.
OpenAI
рекомендует выбрать один из подходов, который будет наилучшим обра
зом соответствовать вашей задаче: ограничить по частоте, ограничить доступ или
определить максимальное значение «Р». Но не бойтесь экспериментов. Путь к оп
тимизации большой языковой модели благодаря замысловатому переплетению всех
сложностей не вымощен строгими правилами.
Оценка больших языковых моделей
Оценка больших языковых моделей
-
сложная задача. Зачастую эти бегемоты на
столько «непрозрачны» и непонятны, что в них невозможно разобраться. Конку
ренция между фирмами, занимающимися искусственным интеллектом, только усу
губляет ситуацию. Стало привычным видеть ограниченные сведения о наборах
данных, на которых обучаются эти модели, о количестве параметров, используе
мых для точной настройки их поведения, и об аппаратном обеспечении, на котором
они функционируют.
Но благодаря исследователям из Стэнфорда есть и хорошие новости. Они создали
систему оценок
(https://oreil.ly/FoVAr), получившую название «Индекс прозрачно
(Foundation Model Transparency lndex), чтобы оценить степень
сти базовой модели»
прозрачности большой языковой модели. Эта шкала, сформированная на основе
сотни критериев, призвана внести некоторую ясность в мутные воды прозрачности
больших языковых моделей.
Как работает технология программирования с использованием ИИ
В основу рейтинга положена процентная шкала. В табл.
2.4
61
представлены рассчи
танные рейтинги. К сожалению, результаты далеко не обнадеживающие. По мне
нию исследователей, ни одна из основных больших языковых моделей не прибли
зилась к достижению «достаточной прозрачности», а средний балл составляет
всего
37%.
Таблица
2.4.
Рейтинг лучших больших языковых моделей по уровню их прозрачности
(https://crfm.stanford.edu/fmti)
Компания
Модель
Рейтинг
Meta
LLaMA2
54%
BigScience
BLOOMZ
53%
OpenAI
GPT-4
48%
Stability.ai
StaЬ\e
Google
PaLM2
40%
Anthropic
Claude 2
36%
Cohere
Command
34%
Al2\Labs
Jurassic-2
25%
Inflection
Intlection-1
21%
Amazon
Titan Text
12%
Diffusion 2
47%
Гибкость большой языковой модели для решения различных задач, например, та
ких как разработка программного обеспечения, является большим преимуществом.
Однако эта гибкость усложняет процесс оценки, поскольку для обеспечения эффек
тивности и безопасности модели в каждом конкретном приложении требуются спе
цифические для данной области метрики и эталоны.
Несмотря на все это, есть следующие показатели, которые необходимо учесть при
оценке большой языковой модели:
♦
BERTScore
Эта метрика разработана для оценки моделей генерации текста методом сравне
ния сгенерированного текста с эталонным текстом с использованием включений
BERT.
Несмотря на то, что эта метрика в основном используется для работы с
текстами на естественном языке, она может быть расширена или адаптирована
для задач генерации кода, особенно если код аннотирован или снабжен коммен
тариями на естественном языке.
♦
Перплексия
Это обычная метрика для оценки вероятностных моделей, таких как большая
языковая модель. Данная метрика определяет, насколько эффективно распреде
ление вероятностей, предсказанное моделью, согласуется с фактическим рас-
62
Глава
2
пределением данных. В контексте генерации кода более низкие значения пер
плексии указывают на то, что модель лучше предсказывает следующий токен в
последовательности кода.
♦
BLEU (ассистент
по оценке на двух языках)
Изначально разработанный для машинного перевода,
BLEU
также используется
при генерации кода для сравнения сгенерированного кода с эталонным. Он вы
числяет баллы точности для п-граммы для количественной оценки сходства ме
жду сгенерированным и эталонным текстами, что может помочь в оценке син
таксической корректности сгенерированного кода. Более высокий показатель
точности п-грамм указывает на лучшее согласие между сгенерированным и эта
лонным текстом для данной конкретной последовательности п слов.
♦
ROUGE (Исследование,
ориентированное на запоминание, позволяющее оценить
гистинг)
Это еще одна метрика, заимствованная из технологии обработки естественного
языка при машинном обучении (НЛП), которая может быть использована для
оценки моделей генерации кода. Она рассчитывает совпадение п-граммы между
сгенерированным
и
эталонным текстами,
позволяя понять,
насколько
хорошо
сгенерированный код соответствует ожидаемому результату.
♦ МВХР
(most basic Х programming proЬlems,
основные проблемы программирова
ния на Х-языке)
Данный набор тестов разработан специально для оценки моделей генерации ко
да на нескольких языках программирования. Он использует изменяемую в раз
мерах систему преобразования для переноса промптов и тестовых примеров из
исходных наборов данных в целевые языки, тем самым облегчая всестороннюю
многоязыковую оценку моделей генерации кода.
♦
HumanEval
Это контрольная точка для оценки возможностей большой языковой модели по
генерации кода. В ходе тестов, при синтезе программ из документальных строк
выполняется измерение функциональной корректности сгенерированного кода.
Данный набор тестов крайне важен для постоянного развития и совершенство
вания ИИ-моделей в области генерации кода. Хотя различные модели при вы
полнении тестов
HumanEval
демонстрируют разный уровень эффективности,
расширенная версия под названием
HUMANEV AL +
оказалась главной в выяв
лении ранее не обнаруженного неправильного кода, сгенерированного популяр
ными большими языковыми моделями.
♦ Многоязычный
HumanEval (HumanEval-X)
Это дополнение к оригинальному тесту HumanEval. Многоязычный тест
HumanEval оценивает возможности большой языковой модели по созданию кода
и переводу более чем на 1О языков программирования. В нем используется
платформа конвертации для преобразования промптов и тестовых примеров из
Python
в соответствующие данные на целевых языках, создавая более полный
эталон для генерации и перевода многоязычного кода.
Как работает технология программирования с использованием ИИ
Другой способ оценить большую языковую модель
-
1
63
это посмотреть на количест
во параметров, которое может исчисляться сотнями миллиардов. Казалось бы
-
чем больше, тем лучше, правильно? Не обязательно. К оценке следует подходить
более тонко. Прежде всего, затраты на увеличение количества параметров могут
быть огромными с точки зрения использования вычислительной мощности и энер
гии. Это может сделать большую языковую модель нерентабельной для приложе
ний, приносящих прибьmь. Далее, по мере увеличения количества параметров растет
и сложность модели, что потенциально может привести к чрезмерной оптимизации.
Чрезмерная оптимизация
-
это когда модель научилась отлично работать с обу
чающими данными, но не справляется с задачей при работе с невидимыми данны
ми, что снижает ее способность к обобщению.
Еще одна проблема
-
необходимость создания очень больших и разнообразных
баз данных для обучения, чтобы удовлетворить ненасытный аппетит этих моделей
к данным. Однако получение и хранение такого огромного объема информации не
только требует больших технических ресурсов, но и создает проблемы, связанные с
конфиденциальностью и необъективностью данных. Более того, оценка этих гиган
тов становится все более сложной с ростом числа параметров. Метрики оценки
должны быть более полными и разнообразными, чтобы точно оценить производи
тельность модели при выполнении огромного количества задач.
Наконец, точная настройка может стать лучшим способом получить от моделей
больший эффект без необходимости сильно увеличивать размер параметров базо
вой большой языковой модели.
Типы больших языковых моделей
Существуют различные типы больших языковых моделей, и одна из самых попу
лярных категорий
-
большая языковая модель с открытым исходным кодом. Лю
бой желающий может воспользоваться этой моделью, настраивать или делиться с
другими. Прозрачность этих моделей означает, что вы можете увидеть и, возможно,
понять, как работают эти модели. Кроме того, большие языковые модели с откры
тым исходным кодом позволяют разработчикам сотрудничать в области иннова
ций, создавать дополнения и, конечно же, исправлять досадные ошибки.
А самое приятное то, что они бесплатны.
Но большая языковая модель с открытым исходным кодом
-
это не всегда
«сплошная радость и чудеса». Чаще всего за ней не стоит специализированная ко
манда, которая регулярно исправляет ошибки и выпускает обновления. Поэтому,
столкнувшись с проблемой, вам, вероятно, придется самому засучить рукава и от
правиться на форумы в поисках решения.
Качество и производительность моделей с открытым исходным кодом иногда на
поминают американские горки. Кроме того, существуют надоедливые проблемы
безопасности. Так как все доступно, хакеры с большей вероятностью найдут способ
внедрить вредоносный код. Рекомендуется соблюдать осторожность.
64
Глава
2
Наконец, когда дело доходит до руководств пользователя и документации, большие
языковые модели с открытым исходным кодом могут вызвать у пользователя жела
ние получить нечто большее. Иногда создается такое впечатление, что руководства
написаны иероглифами.
В табл.
2.5
представлены наиболее популярные большие языковые модели с откры
тым исходным кодом.
Таблица
Модель
2.5.
Популярные большие языковые модели с открытым исходным кодом.
Разработчик
Параметры
(В
GPT-NeoX-
EleutherAI
=
Заслуживающие внимания
миллиард)
20В
особенности
Обучена на наборе данных
20В
Pile»;
«The
способна решать различные
задачи по обработке естественного
языка, такие как создание историй,
создание чат-ботов и обобщение
LLaMA 2
от
Meta
7 В до 70
В
Обучена на двух триллионах токенов; удвоенная длина контекста по
сравнению с
ОРТ-175В
Meta
175
В
LLaMA 1
Часть набора моделей; обучение с
меньшим выбросом углекислого газа, чем у модели
BLOOM
BigScience
176
В
GPT-3
Обучена на открытых источниках
ROOTS (ResponsiЫe Open-science
Open-collaboration Text Sources, Ответственная открытая наука. Открытое сотрудничество. Источники тек-
ста); разработана для обеспечения
прозрачности с раскрытием подробностей учебных данных и методов
оценки
Falcon-40B
Институт инно-
40В
Обучена на
1 ООО
В токенах
вационных тех-
нологий (ИТИ)
Dolly 2.0
Databricks
12
В
Основана на семействе моделей
Pythia компании EleutherAI;
обеспе-
чивает интерактивность обучения и
следования инструкциям, подобно
ChatGPT
Mistral
7В
Mistral
А!
7,3
В
Использует групповые промпты и
скользящее окно; обучена работе с
обширным набором данных и отлично справляется с обработкой более
длинных последовательностей
Как работает технология программирования с использованием ИИ
Таблица
Модель
Разработчик
Параметры
(В
Mixtral
(окончание)
Заслуживающие внимания
= миллиард)
особенности
Техника машинного обучения
46,7В
Mistral AI
2.5
65
8Х7В
с использованием нескольких экс-
пертных сетей; обеспечивает вывод
данных как модель
12,9
В, поддер-
живает несколько языков и отлично
справляется с различными задачами,
включая генерацию кода
и рассуждения
С другой стороны, закрытые или проприетарные большие языковые модели гораз
до более скрытны. В основном они хранят свой код, обучающие данные и структуру
модели под строгим секретом. Компании, разрабатывающие эти сложные системы,
обычно обладают огромным капиталом. В табл.
этими компаниями в
2023
Таблица
2.6.
2.6 показан
капитал, привлеченный
году.
Венчурный капитал, привлеченный ведущими разработчиками
больших языковых моделей
Компания
Финансирование
Anthropic
1,25
OpenAI
1О
Cohere
270 миллионов
Inflection AI
1,3
миллиарда долларов
миллиардов долларов
долларов
миллиарда долларов
Имея такие ресурсы, компании могут нанимать лучших в мире специалистов по
обработке данных и создавать сложную инфраструктуру. В результате большие
языковые модели часто оказываются самыми высокотехнологичными с точки зре
ния производительности. Они также рассчитаны на расширение и удовлетворение
таких строгих требований предприятий, как безопасность и конфиденциальность.
Что касается недостатков, то здесь возникает проблема доверия. Как эти модели
разрабатывают свои ответы? Как насчет галлюцинаций и предвзятости? Ответы на
эти вопросы могут быть весьма скудными.
Существует также риск, что ведущие игроки в сфере ИИ станут монополистами.
Это может привести к зависимости клиентов от их замкнутых экосистем. Кроме
того, закрытые большие языковые модели потенциально более подвержены стагна
ции: в отличие от решений с открытым исходным кодом, они не получают пользы
от широкого сообщества разработчиков, внешнего анализа и коллективного опыта,
который обычно способствует более быстрому развитию и устойчивому прогрессу.
66
Глава
2
Выбор ИИ-инструментов программирования
Выбор ИИ-инструмента для программирования может оказаться непростой зада
чей. Вам придется взвесить множество факторов, таких как точность, наличие
функций чата, безопасность, скорость и удобство использования. Иногда все сво
дится к выбору того инструмента, с которым вам удобно работать. Но, с другой
стороны, ваши руки могут быть связаны, если ваш работодатель настаивает на оп
ределенной системе.
Чтобы получить представление о том, какие инструменты сейчас популярны, вос
пользуйтесь опросом разработчиков, проведенным
(https://oreil.ly/nvqKY).
В
Stack Overflow
собраны
Stack Overflow
мнения почти 90
в
2023
году
ООО програм
мистов о наиболее популярных инструментах. Эти инструменты представлены в
табл.
2.7.
Таблица
2.7.
Рейтинг популярных инструментов для программирования с помощью
искусственного интеллекта
Инструмент для разработчиков
(https://oreil.ly/0u7WZ)
Процент
на основе искусственного интеллекта
GitHub Copilot
54,77%
Tabnine
12,88%
Amazon CodeWhisperer
5,14%
Snyk Code
1,33%
Codeium
1,25%
Wispr AI
1,13%
Replit Ghostwriter
0,83%
Mintlify
0,52%
Adrenaline
0,43%
Rubberduck AI
0,37%
Эта таблица дает представление о большом количестве доступных инструментов.
Если вы хотите выбрать один из них, разумным решением станет получение реко
мендаций от других разработчиков. Кроме того, нелишним будет испытать не
сколько инструментов самостоятельно. К счастью, большинство из этих инстру
ментов предлагают бесплатные пробные версии, так что вы можете попробовать
их, не принимая на себя никаких обязательств.
Еще один важный момент, который следует учесть
-
это финансовая поддержка
компании. Есть ли у нее венчурное финансирование? Без такого финансирования
компании будет сложно не только развиваться, но и поддерживать инновационные
Как работает технология программирования с использованием ИИ
67
технологии своей платформы. Уже несколько компаний, занимающихся искусст
венным интеллектом, были вынуждены прекратить предоставление услуг, и это
может стать серьезным препятствием для разработчиков. Возьмем, к примеру, ком
панию
Kite.
тельность в
Она была одним из первопроходцев в этой области, начав свою дея
2014
году
(https://oreil.ly/Bnz9U).
Однако к
2022
году компания реши
ла свернуть проект. Но в чем здесь положительный момент? Она открыла доступ к
большей части кодовой базы инструмента.
Заключение
В этой главе мы приоткрыли завесу над генеративным искусственным интеллектом
и большими языковыми моделями. Вместе мы проследили захватывающую исто
рию развития ИИ
-
от виртуального собеседника
ELIZA
-
до одного из самых зна
OpenAI Playground
и научились настраивать
чимых прорывов в области искусственного интеллекта
архитектуры трансфор
меров.
Мы познакомились с веб-интерфейсом
параметры больших языковых моделей для решения различных задач. В числе
ключевых тем этой главы
-
понятие токена, преимущества предварительно обу
ченных моделей, советы по выбору подходящей языковой модели, а также обзор
таких метрик, как
BLEU.
Наконец, мы обсудили различия между моделями с от
крытым исходным кодом и проприетарными решениями и то, как эти различия мо
гут повлиять на практическое использование ИИ.
ГЛАВА
3
Оперативное проектирование
Оперативное проектирование
(Prompt Engineering) -
это направление машинного
обучения и обработки естественного языка, в рамках которого изучается способ
ность компьютеров понимать и интерпретировать человеческий язык. Главная
цель
понять, с помощью каких методов следует обращаться с большими языко
-
выми моделями, сложными системами искусственного интеллекта, назначение ко
торых
-
обработка и генерирование ответов, похожих на те, что дает человек, так
чтобы созданный ответ содержал нужную информацию.
Подумайте вот о чем: когда вы обращаетесь к человеку за советом, сначала нужно
описать ситуацию, а затем ясно сформулировать, в чем именно нужна помощь.
С большой языковой моделью
так же. Важно четко и осмысленно сформулиро
-
вать свой запрос или промпт. Иногда полезно добавить немного контекста- это
помогает модели лучше понять вашу цель.
И дело здесь не только в том, чтобы правильно задать один вопрос. Часто взаимо
действие с языковой моделью напоминает диалог
-
вы постепенно уточняете за
просы, шаг за шагом приближаясь к нужному ответу, словно отыскивая золотой
самородок в породе информации.
Представьте, что вы используете ИН-инструмент для создания веб-приложения. Вы
начинаете с простого запроса: как реализовать базовую систему входа на
Модель предлагает общее решение
-
JavaScript.
и это хороший старт. Но по мере продвиже
ния вы осознаете, что нужно больше: защита паролей, безопасное подключение к
базе данных. Вы уточняете запросы, задаете более конкретные вопросы. С каждым
новым промптом ИИ все точнее подстраивается под особенности вашего проекта,
помогая выстроить решение шаг за шагом.
Имейте в виду, что специалисты по оперативному проектированию стали очень
востребованной
категорией.
(https://oreil.ly/Qy9Zi),
около
130 ООО
По
данным
компании
Willis Towers Watson
средний годовой заработок инженера-наладчика составляет
долларов США, хотя эта цифра может оказаться весьма скромной.
Чтобы привлечь лучших специалистов, компании часто предлагают заманчивые
пакеты акций и бонусы.
В этой главе мы погрузимся в мир оперативного проектирования и расскажем о
полезных стратегиях и хитростях.
Глава
70
3
Наука и искусство
Оперативное проектирование
-
это сочетание искусства и науки. С одной сторо
ны, чтобы искусственный интеллект дал правильный ответ, вам нужно подобрать
правильные слова и тональность, чтобы направить разговор в определенное русло.
Для этого вам потребуется немного интуиции и творческий подход.
Да, это может быть непросто, особенно для разработчиков программного обеспече
ния. Обычно при написании кода вы следуете набору правил, и код либо работает,
либо компилятор сообщает вам, что вы сделали что-то не так. Это логично и пред
сказуемо.
А в оперативном проектировании? Все немного не так. Здесь весь разговор проис
ходит в более свободной форме и поэтому все более непредсказуемо.
Но, с другой стороны, в разработке промптов есть и доля науки. Вам необходимо
понимать, как работают модели искусственного интеллекта, о чем мы рассказали в
гл.
2.
При написании промпта наряду с творческим подходом, вам необходимы
точные формулировки, предсказуемость и возможность повторного воспроизведе
ния результатов. Зачастую это означает, что вам придется экспериментировать,
создавая разные
промпты,
анализировать полученные результаты
и подстраивать
свои промпты до тех пор, пока вы не получите правильный ответ.
Не надейтесь найти волшебные решения, которые будут работать всегда. Конечно,
существует множество курсов, видео и книг, в которых утверждается, что из них
вы узнаете все «секреты» оперативного проектирования. Эти материалы следует
воспринимать с долей скептицизма, иначе вы можете быть разочарованы.
Кроме того, мир ИИ и машинного обучения постоянно меняется, постоянно появ
ляются новые модели и методы. Поэтому не стоит думать, что вы можете вырабо
тать единую методику быстрого проектирования. Здесь все находится в движении и
постоянном развитии.
Проблемы
Оперативное проектирование может вас разочаровать. Даже малейшее изменение в
формулировке промпта может сильно повлиять на то, какой вы получите ответ от
большой языковой модели. Это связано с тем, что данная передовая технология
основывается на принципах вероятности.
Вот некоторые из проблем, касающихся оперативного проектирования:
♦ Многословие
Большая языковая модель может оказаться болтушкой. Дайте ей промпт, и она
тут же начнет его выполнять, формируя многословный ответ. А вам нужен был
быстрый ответ из нескольких слов. Большие языковые модели имеют привычку
добавлять множество сопутствующих идей или фактов, делая ответ длиннее,
чем нужно. Если вы хотите, чтобы большая языковая модель сразу перешла к
«делу», просто попросите ее быть «лаконичной».
Оперативное проектирование
♦
71
Несовместимость промптов
Это означает, что промпт, эффективно работающий с одной большой языковой
моделью, может не дать таких же результатов при использовании другой. Ины
ми словами, при переходе, например, с
ChatGPT
на
Gemini
или
GitHub Copilot,
может потребоваться адаптировать формулировки. Это связано с тем, что каж
дая модель разрабатывается, обучается и оптимизируется по-своему. Различия в
обучающих наборах и алгоритмах приводят к разному восприятию и интерпре
тации входных данных.
♦
Восприимчивость к длине промпта
Большие языковые модели нередко обрабатывают длинные запросы не так эф
фективно: часть введенной информации может быть проигнорирована или поня
та неверно. Это похоже на то, как будто внимание модели рассеивается, и ее от
веты
становятся
менее точными
и
более абстрактными.
рекомендуется избегать излишней детализации
-
По
этой
причине
старайтесь укладываться в
объем не более одной страницы.
♦
Неоднозначность
Если ваш промпт не совсем четко сформулирован, большая языковая модель
может запутаться и дать ответы, которые не соответствуют действительности
или просто неверны. Четкость формулировки
-
ключевой момент.
Тем не менее, есть способы улучшить результаты. И мы рассмотрим эти способы в
оставшейся части этой главы.
Промпт
Можно считать, что промпт состоит из четырех основных компонентов, которые
показаны на рис.
3.1.
Контекст
Инструкции для большой
языковой модели
Ввод контекста
Формат
Рис.
3.1.
Промпт состоит из четырех основных компонентов
Глава З
72
Во-первых, контекст определяет задачу или направление, в котором должна дей
ствовать большая языковая модель при подготовке ответа. Далее следуют инструк
ции, например, обобщить, перевести или классифицировать. Затем вводится со
держание, если вы хотите, чтобы большая языковая модель смогла обработать
информацию для создания более точного ответа. Наконец, вы можете показать, в
каком формате вы хотите получить результат.
Имейте в виду, что вам не обязательно потребуется использовать все эти компо
ненты. На самом деле для получения качественного ответа вам может понадобиться
только один компонент. Но, как правило, лучше предоставить большой языковой
модели более конкретную информацию.
Теперь давайте рассмотрим каждый из компонентов.
Контекст
Часто создание промпта начинается с одного-двух предложений, задающих общий
контекст. В них формулируется основное направление или конкретная задача, в
рамках которой искусственный интеллект должен сформировать ответ. Такой под
ход позволяет получать не только более точные, но и релевантные контексту отве
ты, что делает результат значительно содержательнее.
Например, если вам нужно выполнить отладку части кода, вы можете использовать
эту задачу в качестве контекста:
Промпт: Вы
-
опытный инженер-программист, специализирующийся на от
ладке Jаvа-приложений.
Или предположим, что вы хотите узнать о методах оптимизации конкретного алго
ритма:
Промпт: Вы
-
старший разработчик программного обеспечения, специализи
рующийся на оптимизации алгоритмов.
Использование контекста поможет большой языковой модели правильно настро
иться на ваш промпт.
Инструкции
Ваш промпт должен содержать как минимум одну четкую инструкцию. Ничто не
мешает вам добавить больше инструкций, но будьте аккуратны. Нагромождение
промпта множеством инструкций может запутать большую языковую модель и за
труднить получение искомого ответа.
Давайте разберемся, почему так происходит. Во-первых, когда у вас есть несколько
инструкций, ситуация может стать слегка запутанной. Если инструкции сформули
рованы нечетко или противоречат друг другу, большая языковая модель может за
путаться и не сможет понять, на какой из инструкций остановиться или как соблю
сти баланс.
Оперативное проектирование
73
Далее, наличие большего количества инструкций означает, что модели придется
сложнее справляться с заданиями. Она должна обработать и понять каждую часть
вашего промпта, а затем найти способ соединить все части в связный ответ. Это
большая «умственная гимнастика», и иногда она может привести к ошибкам или
неправильным ответам.
И не забывайте, что модели просматривают инструкции по очереди, по порядку.
Поэтому то, как вы выстроите свои промпты, может повлиять на их интерпрета
цию, и на то какой ответ вы получите в итоге.
Учитывая все это, совет профессионала
-
будьте проще. Вместо того чтобы сразу
забрасывать большую языковую модель целым списком инструкций, попробуйте
разбить их на ряд из небольших заданий. Это будет похоже на диалог в формате
«вопрос-ответ», а не на монолог.
Существует большое количество типов инструкций для промптов. В следующих
разделах мы обсудим некоторые из основных инструкций, используемых при раз
работке программного обеспечения.
Суммаризация
Суммаризация
-
это способ сжать длинный текст до компактной версии, сохранив при
этом ключевые идеи и смыслы. Такой подход особенно полезен, когда нужно быстро разо
браться в содержании объемного материала. Для разработчика программного обеспечения
краткое изложение объемного документа может стать особенно удобным инструментом в
сценариях, перечисленных в табл.
Таблица
3.1.
3.1.
Промпты для составления резюме по задачам кодирования
Описание
Пример промпта
Документация по
Состоит из краткого обзора об-
«Кратко изложите основные
коду
ширной документации, в кото-
положения следующей докумен-
рой освещаются основные
тации, чтобы обеспечить быст-
функциональные возможности,
рый обзор кодовой базы».
Вариант
использования
зависимости и структуры.
Сообщения об
Быстрое выявление основных
«Подведите итог общим про-
ошибках
проблем, о которых сообщают
блемам, о которых сообщается в
пользователи в многочислен-
следующих отчетах об ошибках,
ных или объемных отчетах
чтобы определить основные
об ошибках.
проблемы, которые необходимо
реШИТЬ)).
Научные и иссле-
Извлечение кратких сведений
довательские ра-
объемных научных работ или
ных выводов и технологий, об-
боты
технических статей, чтобы озна-
суждаемых в следующей иссле-
комить пользователя с послед-
довательской работе».
ними исследованиями или технолоrиями.
«Дайте краткое описание основ-
Глава
74
3
Таблица
3.1
(окончание)
Описание
Пример промпта
Журналы регист-
Позволяет по результатам ана-
«Суммаризируйте основные из-
рации изменений
лиза длинных журналов измене-
менения в следующем журнале
ний понять, какие были внесены
изменений версии
Вариант
использования
1.1.2».
ключевые изменения в новую
версию программной библиотеки или инструмента.
Электронные
Выделение ключевых моментов
письма
обсуждений или решений из
ментам дискуссии в следующем
большого потока сообщений
потоке электронной почты».
«Подведите итог основным мо-
электронной почты.
Другой тип обобщения
-
тематическое моделирование, при котором статистиче
ская модель обнаруживает абстрактные «темы», встречающиеся в подборке доку
ментов. Вот несколько промптов от разработчиков по тематическому моделирова
нию:
Промпт:
Определите
основные
темы,
обсуждаемые
в
следующем
тексте:
{текст}
Промпт: Извлеките ключевые слова из следующего текста, чтобы определить
основные темы: {текст}
Промпт: Укажите теги для следующего текста, основываясь на его содержании:
{текст}
Классификация текста
Классификация текста предполагает предоставление компьютеру большого коли
чества текста, который нужно разметить с помощью меток. Разновидностью этой
классификации является анализ настроения, например, когда у вас есть набор по
стов в социальных сетях, и большая языковая модель определяет, какие из этих по
стов имеют позитивный или негативный оттенок. Для разработчиков анализ на
строения может стать полезным инструментом для оценки отзывов пользователей о
приложении.
Можно привести несколько примеров промптов:
Промпт: Можете ли вы проанализировать эти отзывы покупателей и сказать,
какие настроения в них в целом
-
положительные, отрицательные или ней
тральные? {текст}
Промпт: Это тема с нашего пользовательского форума, в которой обсуждается
последнее обновление. Не могли бы вы кратко описать общее настроение?
{текст}
Оперативное проектирование
75
Промпт: Я составил список отзывов со страницы нашего магазина приложений.
Можете ли
вы распределить
комментарии
по
категориям
по
настроению?
{текст}
Промпт: Оцените настроение этих комментариев в блоге, посвященных анонсу
нашего продукта. Каков общий настрой? {текст}
Рекомендации
Вы можете поручить большой языковой модели предоставить рекомендации. Для
разработчиков такая обратная связь поможет повысить эффективность таких дейст
вий, как устранение ошибок, доработка кода или более эффективное использование
программного интерфейса приложения.
Ознакомьтесь с этими примерами промптов, которые вы можете использовать:
Промпт: Следующий фрагмент кода выдает сообщение NullPointerException,
когда я пытаюсь вызвать <Method () >. Не могли бы вы помочь определить воз
можную причину и предложить исправление?
Промпт: Я написал функцию для сортировки списка целых чисел. Можете ли
вы порекомендовать метод оптимизации, чтобы функция работала быстрее или
была более читабельной?
Рекомендации большой языковой модели могут существенно ускорить вашу рабо
ту, значительно сэкономить время и подсказать идеи,
которые вам, возможно, не
приходили в голову. Эта техника особенно полезна при решении сложных и спе
циализированных задач.
Но здесь есть и отрицательные моменты. Одна из потенциальных проблем заклю
чается
в том,
что
модель
может слишком упростить
ответы
и
упустить нюансы.
Кроме того, не забывайте, что ее знания застыли в определенный момент времени,
поэтому она может быть не в курсе последних событий или тенденций.
Рекомендации
-
это лишь начало пути. Но для того чтобы получить полную кар
тину, вам нужно погрузиться в работу и покопаться в деталях самостоятельно.
Локализация
Локализация
-
это процесс адаптации программного обеспечения (ПО) к языко
вым и культурным особенностям конкретного региона. Благодаря локализации ПО
начинает "говорить" на родном для пользователя языке и учитывать местные реа
лии, что способствует укреплению связи с аудиторией и расширению рыночных
возможностей. Такой подход делает продукт более комфортным и близким для
пользователей, создавая ощущение, что он создан именно для них. А довольные
пользователи
-
это залог роста прибыли.
На конкурентных рынках адаптация программного обеспечения к местным услови
ям становится не просто преимуществом, а часто и единственным способом эффек
тивно выйти на рынок. Когда другие решения оказываются неприменимыми или
недоступными, локализованный продукт может стать безальтернативным. Кроме
76
Глава З
того, соответствие региональным стандартам и нормативным требованиям не толь
ко облегчает интеграцию, но и может превратить ваш продукт в уникальное пред
ложение, не имеющее конкурентов в данной локации.
С другой стороны, процесс локализации не лишен сложностей. Локализация может
быть и дорогой, и трудоемкой. Для сохранения целостности продукта на разных
языках требуется тщательный контроль качества. Кроме того, развитие ПО не сто
ит на месте. Это непрерывный цикл обновлений и новых функций, каждая из кото
рых может потребовать отдельной работы по локализации. Такой непрерывный
процесс усложняет проект и увеличивает его стоимость.
Именно зде.сь на помощь приходят большие языковые модели. Передовые системы
способны переводить тексты с одного языка на другой. Такие системы могут стать
мощным инструментом в арсенале разработчика. В табл.
3.2
приведены некоторые
промпты, которые вы можете использовать для адаптации своего продукта к мест
ным условиям.
Таблица
3.2.
Примеры промптов на перевод текста с одного языка на другой
Тип задачи
Описание
Пример промпта
Перевод элементов
Переводит названия кнопок,
«Переведите следующие надписи
пользовательского
пункты меню, сообщения об
пользовательского интерфейса на
интерфейса
ошибках, диалоговые окна и
французский язык: Сохранить,
так далее.
Выход, Файл, Редактировать,
Справка».
Перевод документа-
Перевод руководств пользо-
«Переведите следующий параграф
ции
вателя, справочных файлов
руководства пользователя на ис-
и другой документации.
панский языю>.
Перевод сообщений
Перевод сообщений об
«Переведите на немецкий язык
об ошибках
ошибках, которые может
следующие сообщения об ошиб-
вьщавать программное обес-
ках: ,,Файл не найден", ,,Доступ
печение.
запрещен", ,,Сетевое соединение
потеряно"».
Перевод всплываю-
Перевод всплывающих. под-
щих подсказок
сказок, которые предостав-
вающие подсказки на японский
ляют дополнительную ин-
язык: Щелкните мышью, чтобы
формацию, когда
сохранить; щелкните мышью, что-
пользователь наводит кур-
бы открыть новый файл; щелкните
сор на элемент.
мышью, чтобы распечатать».
«Переведите следующие всплы-
Тем не менее, к многоязычным возможностям большой языковой модели следует
подходить с некоторой долей осторожности. Ответы на промпты могут в себе со
держать ошибки. Большие языковые модели могут иногда не учитывать тонкости,
идиоматические выражения и культурный контекст, характерные для того или ино
го языка. Языковые нюансы сложны, и их правильное понимание
-
прямой перевод, это передача правильного смысла верным способом.
это не просто
Оперативное проектирование
77
Работа со специфическими терминами или названиями может быть очень сложной,
особенно если в другом языке нет точного эквивалента. Кроме того, необходимо
правильно подобрать тон и стиль. Дело не только в словах, но и в том, как вы их
произносите, а это может сильно меняться в зависимости от языка или культуры.
Если вы обратитесь к профессиональному переводчику, это может избавить вас от
головной боли в будущем.
Ввод содержимого
При составлении промптов рекомендуется использовать специальные символы,
такие как
# ##
или
" "",
чтобы четко отделить инструкции от содержания или ин
формации, над которой вы хотите, чтобы большая языковая модель поработала.
Эти символы действуют как границы или маркеры, давая понять, где заканчивают
ся инструкции и где начинается содержание.
Рассмотрим сценарий, в котором разработчику программного обеспечения требует
ся помощь в кратком изложении ключевых моментов из объемной документации
по новому интерфейсу программного приложения
(API),
который он внедряет. Вот
как можно было бы построить промпт:
Промпт: Извлеките из приведенного ниже текста ключевые действия по реали
зации
API:
Документация:
"""
{Текст документации
API
здесь}
"""
Использование разделителей
""" -
удобный способ отделить текстовую инст
рукцию от текста самой документации внедряемого программного интерфейса. Это
дает большой языковой модели более четкое представление о том, что нужно сде
лать, и повышает шансы получить ясное изложение основных шагов. Кроме того,
такие разделители приводят в порядок промпт, делая его более удобным для чте
ния, что является настоящим спасением при вводе длинных или слишком сложных
текстов.
Формат
В промпте вы можете указать большой языковой модели, как отформатировать вы
вод. Вот пример:
Промпт: Создайте функцию на языке программирования
Python,
которая при
нимает список объектов пользователей (каждый объект содержит идентифика
тор и имя пользователя) и возвращает объект JSON, который сопоставляет иден
тификаторы пользователей с именами. Оформите вывод в формате JSON.
78
Глава
3
ChatGPT:
"code": "def map_user_ids to names(users) :\n
user_map = {user['id']: user['name'] for user in users)\n
return user_map",
"example_usage":
"input": [
{ "id": 1, "name": "Alice"),
{"id": 2, "name":
"ВоЬ"),
{"id": 3, "name": "Charlie")
]'
"output":
"1": "Alice",
"2":
"ВоЬ",
"3": "Charlie"
Есть и другие способы форматирования вывода. В табл.
3.3
показаны некоторые
варианты.
Таблица
Тип форматирования
3.3.
Промпты для форматирования вывода
Пример промпта
«Создайте таблицу, в которой сравниваются синтаксис, про-
Таблица
изводительность и варианты использования языков
Java и
Список
Python,
С++))
«Создайте список шагов по устранению неполадок в виде медленно загружающейся веб-страницы))
«Объясните различия между методами
Markdown/HTML
GET
и
POST
НТТР в
Markdown))
Иерархия текста
«Предоставьте структурированное описание жизненного цик-
ла разработки программного обеспечения
(SDLC),
включая
его этапы и ключевые действия на каждом этапе))
Форматирование
LaTeX
«Изложите временную сложность алгоритма бинарного поиска в нотации
LaTeX))
С помощью промпта вы также можете определить большой языковой модели объем
ответа. Для этого сформулируйте промпт такого типа: «Составьте краткое резюме»
или «Напишите подробное объяснение». Или объем ответа можно уточнить, указав,
Оперативное проектирование
например, что он должен быть не более
300
79
слов. Большая языковая модель может
немного превысить указанный вами лимит слов, но, по крайней мере, он будет на
ходиться в пределах нормы.
Передовой опыт
Далее мы рассмотрим ряд примеров передового опыта по составлению промптов,
которые помогут получить необходимые ответы. Но не воспринимайте их как ис
тину в последней инстанции. Эти рекомендации больше похожи на общие советы,
которые по сравнению с жесткими правилами могут быть в какой-то степени более
субъективными. Проводя больше времени в общении с большой языковой моде
лью, вы, вероятно, найдете свои собственные эффективные методы формулирова
ния промптов, которые наиболее точно будут выражать вашу мысль. Все это
-
часть пути к развитию навыков.
Будьте конкретны
Правильно сформулированные промпты могут быть похожи на поиск точки опоры
в хорошем разговоре. И это, возможно, самый важный шаг к успеху в работе с эти
ми системами генерации текста. Чем больше деталей, тем лучше. Кроме того, вам
нужно выражать свои мысли четко. В противном случае большая языковая модель
может начать строить предположения или даже галлюцинировать.
Для начала давайте рассмотрим некоторые промпты, которые сформулированы весьма не
определенно.
Промпт: Разработайте функцию для обеспечения безопасности данных.
Промпт: Можете ли вы создать инструмент для автоматизации этого процесса?
Промпт: Оптимизируйте код.
Промпт: Нам нужна функция для обработки транзакций.
Ниже приведены более подробные инструкции, которые позволят добиться лучших
результатов:
Промпт: Разработайте функцию
Python для
анализа дат, содержащихся в строках.
Функция должна уметь работать с форматами
Month DD,
YYYY-MM-DD, MM/DD/YYY и
datetime. Пре
УУУУ. Функция должна возвращать объект в формате
доставьте скрипт, демонстрирующий корректную работу функции как минимум
с тремя примерами каждого формата, а также документ, объясняющий любые
зависимости, логику, используемую в функции, и инструкции по запуску скрипта.
Промпт: Разработайте SQL-промпт для получения из нашей базы данных спи
ска клиентов, совершивших покупки на сумму свыше
квартале
2023
500 долларов
в последнем
года. Промпт должен возвращать полное имя клиента, адрес его
электронной почты, общую потраченную сумму и дату последней покупки. Ре
зультаты должны быть отсортированы по общей потраченной сумме в порядке
убывания. Убедитесь, что промпт оптимизирован по производительности.
Глава
80
3
Сокращения и технические термины
Очень важно при составлении промпта четко использовать технические термины и
проявлять осторожность с сокращениями. Жаргон часто в различных контекстах
подразумевает разные понятия и может привести к бесполезным ответам. Поэтому
сокращения лучше раскрывать полностью, а также давать четкие определения или
объяснения всех используемых технических терминов.
Например, предположим, что для решения проблемы с подключением к базе дан
ных вы используете
ChatGPT.
Неудачно составленный промпт может выглядеть
следующим образом:
Промпт: Проблемы с подключением к БД. Как это исправить?
В этом промпте сокращение «БД)) может быть воспринято большой языковой мо
делью неоднозначно, поскольку относится к различным системам баз данных, та
ким как
MySQL, PostgreSQL
или другим, а в чем суть проблемы с подключением,
не уточняется.
Более эффективным был бы промпт:
Промпт: При попытке подключиться к базе данных
JDBC
PostgreSQL
с помощью
у меня возникает проблема тайм-аута соединения. Как я могу решить эту
проблему?
В этом промпте четко указывается используемая система баз данных, способ под
ключения и конкретизирована возникшая проблема.
Марк Твен
между
(Mark Twain)
почти
однажды написал
правильным
словом
и
(https://oreil.ly/ZL9d6):
правильным
словом
на
«Разница
самом
деле
очень велика. Это как разница между жучком-молнией и самой молнией)).
В каком-то смысле то же самое можно сказать и о составлении промпта.
Техники обучения с примерами и без
В процессе обучения без использования конкретных примеров
(zero-shot learning),
хорошо, если вы введете один промпт и сразу получите нужный ответ. Часто такой
подход срабатывает. Но, учитывая сложность языков программирования и фрейм
ворков, бывают моменты, когда нужно большой языковой модели помочь.
Для этого следует использовать обучение в несколько шагов (или
Обучение в несколько шагов
-
few-shot leaming).
это способность большой языковой модели пони
мать и решать задачи, имея лишь несколько примеров или минимум обучающих
данных. Это существенное преимущество по сравнению с традиционными моделя
ми машинного обучения, которым зачастую требуется большое количество приме
ров для достижения сопоставимой эффективности. Такой навык обусловлен об
ширным предварительным обучением на разнообразных текстах из Интернета,
которое модель проходит до того, как ее начинают адаптировать под конкретные
задачи.
Оперативное проектирование
1
81
Давайте рассмотрим пример обучения с помощью нескольких шагов. Возьмем сце
нарий, в котором нам нужно сгенерировать функцию, нормализующую заданный
список чисел. Функция должна привести значения в списке к диапазону [О,
l ].
В инструкции мы приводим список из нескольких образцов входов и нормализо
ванных выходов.
Промпт: На основе следующих примеров нормализации списка чисел к диапа
зону [О,
l]:
l.
Вход:
[2, 4, 6, 8]
Выходные данные: [О,
2.
Вход:
[5, 10, 15]
Выход: [О,
3.
Вход:
[ 1, 3, 2]
Выход: [О,
0.3333, 0.6667, 1]
0.5, \]
l, 0.5]
Создайте функцию на языке
Python,
которая принимает на вход список чисел и
возвращает список нормализованных чисел.
ChatGPT «учится»
на введенных данных и «придумывает» код:
ChatGPT:
def
normalize(numЬers):
min_value =
min(numЬers)
max_value =
max(numЬers)
if min - value == max- value:
return
[О]
*
len(numЬers)
# Handle the case where
# all
numЬers
are the same
else:
return
[(х
- min_value) /
(max_value - min_value) for
х
in
numЬers]
# Test the function with one of the examples
print (normalize ( [ 2, 4, 6, 8] ) ) # Output:
#
[О.О,
О.
3333333333333333,
О.66~6666666666666,
1.0]
Ключевые слова
Понятие «ключевое слово» относится к конкретным ключевым словам или фразам,
которые могут ориентировать большую языковую модель на формирование кон
кретного результата. Иногда можно добиться желаемого результата, используя все
го одно кодовое слово. Вот пример:
Промпт:
# Создайте
# 1.
#
2.
простую функцию
Python,
которая
Запрашивает температуру в Фаренгейтах.
Конвертирует Фаренгейт в Цельсий
def
В этом примере ключевое слово
-
def. Использование слова def в значении веду
щего слова сообщает модели, что она должна начать писать функцию на языке
Python.
В табл.
3.4 приведены другие
примеры ведущих слов.
82
Глава
3
Таблица
3.4.
Примеры промптов с ведущими словами
Контекст
Ведущее слово
Функция
JavaScript
Function
Элемент
HTML
<button
СSS-стиль
р
SQL-промпт на вставку
INSERT INTO
Создание метода
puЬlic
Java
{
Методика промптов по цепочке размышлений (СоТ)
В 2022 году несколько исследователей из компании Google в своей работе «Chainof-Thought Prompting Elicits Reasoning in Large Language Models» (Цепочка раз
мышлений
в
больших
языковых
(https://arxiv.ord/abc/2201.11903)
моделях,
побуждающая
к
рассуждениям)
предложили использовать промпты, основанные
на этом методе. Такой подход улучшает способности большой языковой модели к
рассуждениям, разбивая сложную задачу на отдельные действия. По сути, это по
хоже на принцип обучения в «несколько шагов», что позволяет стимулировать
движение модели в нужном направлении.
Методика прохождения по цепочке размышлений может оказаться очень эффек
тивным средством при выполнении задач по генерации программного кода. Давай
те рассмотрим пример. Предположим, вам, используя
Python,
Flask,
веб-фреймворк для
необходимо создать веб-приложение с функцией регистрации и входа поль
зователей. В табл.
3.5
показан ряд промптов, помогающих направить большую язы
ковую модель по цепочке мыслей.
Таблица
3.5.
Пример промптов для составления цепочки размышлений
Описание действия
Промпт
Определение требований
«Мне нужно создать неб-приложение, используя
Flask.
В приложении должна быть функция регистрации и входа
пользователей. С чего мне начать?»
У станов ка приложения
«Для начала давайте установим базовое приложение
Flask
Как это сделать?»
Создание пользователь-
«Теперь, когда приложение
ской модели
создать пользовательскую модель для выполнения регист-
Flask
Flask.
настроено, мне нужно
рации и входа. Как я должен структурировать эту модель?»
Создать регистрацию
«Имея модель пользователя, как я могу создать страницу
регистрации с необходимыми полями?»
Создание входа в систему
«Теперь давайте займемся созданием страницы входа
в систему. Как обеспечить безопасный вход?»
Оперативное проектирование
Таблица
3.5
83
(окончание)
Описание действия
Промпт
Управление сеансами
«Как следует управлять пользовательскими сеансами после
входа пользователя в систему, чтобы он оставался в системе в процессе навигации по приложению?»
Реализация функции выхо-
«Как реализовать функцию выхода из приложения для
да из системы
безопасного выхода пользователей из него?»
Наводящие вопросы
Наводящие вопросы в промпте часто могут вызвать у большой языковой модели
неоднозначные ответы. Лучше оставаться нейтральным и беспристрастным. Также
следует избегать предположений, а лучше просто изложить суть проблемы.
Этот промпт является наводящим:
Промпт: Правда ли, что переход на архитектуру микросервисов всегда улучша
ет возможности увеличения размеров и сложности системы?
Более правильным было бы ввести более точный промпт:
Промпт: Каковы преимущества и потенциальные проблемы перехода на архи
тектуру
микросервисов
с точки
зрения
возможности увеличения
сложности
и
размера системы?
Промпт на примеры и аналогии
Предположим, вы не знаете концепции наследования в объектно-ориентированном
программировании. Вы заходите в
ChatGPT и
вводите следующий промпт:
Промпт: Объясните наследование, которое используется в объектно-ориенти
рованном программировании.
Вы получите подробный ответ. Но вам может понадобиться что-то более понятное.
Хороший способ сделать это
-
попросить большую языковую модель привести
аналогию:
Промпт: Объясните наследование, которое используется в объектно-ориентиро
ванном программировании, используя аналогию.
ChatGPT:
Подумайте о наследовании как о семейном древе, где дети наследуют
определенные черты и свойства от своих родителей и, возможно, бабушек и де
душек.
Далее
ChatGPT
наследования.
более подробно, исходя из аналогии, объясняет ключевые элементы
Глава
84
3
Снижение галлюцинаций
В гл.
2
говорилось, что промпт может привести к ответу, напоминающему галлю
цинацию, то есть сгенерированный текст оказывается ошибочным или вводящим в
заблуждение. Но большая языковая модель выдает информацию так, как будто это
правильный ответ. Галлюцинации могут быть особенно опасны при разработке
программного обеспечения, где требуется точность.
Несомненно, благодаря урокам, изложенным в этой главе, можно смягчить данную
проблему. Но даже хорошо составленный промпт может вызвать галлюцинации.
Этому есть множество причин:
♦ Недостаточная проверка достоверности информации
Большая языковая модель генерирует ответы на основе шаблонов, полученных
из обучающих данных, не имея возможности проверить точность или реаль
ность информации.
♦ Избыточное повторение и запоминание
Большая языковая модель способна запоминать неверную или вводящую в за
блуждение информацию, содержащуюся в наборе обучающих данных, особен
но, если эти данные часто упоминаются или повторяются.
♦ Домыслы и догадки
Иногда большая языковая модель может использовать шаблоны, которые она
обнаружила в данных, для получения информации о темах или вопросах, кото
рые не были должным образом освещены в обучающих данных.
♦
Отсутствие контекста или неправильная интерпретация
Большая языковая модель может неправильно «истолковать» или не найти необ
ходимый контекст для формирования точного ответа на определенные промпты.
Большая языковая модель может не полностью «понять» нюансы или значение
некоторых промптов.
♦
Сленг и идиомы
Здесь большая языковая модель зачастую не знает истинного смысла введенного
слова или идиомы. А это может привести к тому, что модель неправильно ис
толкует предполагаемый смысл, особенно если во время обучения она не стал
кивалась с достаточным количеством примеров сленга или идиомами.
Как же уменьшить количество галлюцинаций? Во-первых, важно избегать пром
птов, подобных этим:
Промпт: Опишите различные способы оптимизации базы данных.
Этот тип промпта побуждает большую языковую модель прибегать к догадкам или
чрезмерным обобщениям. Модель также может неверно истолковать смысл вопро
са или «не понимает», в каком формате от нее ожидается ответ. А это часто приво
дит к ответам, выходящим за рамки темы или содержащим вымышленную инфор
мацию. На самом деле в этом случае может возникнуть целый каскад галлюцинаций.
Оперативное проектирование
85
Наиболее эффективный метод ~ это предоставить модели набор заранее отобран
ных вариантов и попросить искусственный интеллект выбрать один из них. Напри
мер, предыдущий промпт можно перефразировать следующим образом:
Промпт: Что из перечисленного ниже является методом оптимизации базы дан
ных: индексирование, дефрагментация или сжатие?
В качестве другого примера можно предложить большой языковой модели сделать
вывод определенного типа. Вот эффективный вариант промпта:
Промпт: Является ли следующий синтаксис правильным для инициализации
массива в
Java?
Дайте ответ «да» или «нет».
Можно также включить в промпт несколько шагов, чтобы лучше провести модель
через структурированный процесс и уменьшить вероятность отклонения от курса:
Промпт:
Шаг
1:
Создайте генератор последовательности Фибоначчи.
Шаг
2:
Используйте итерационный метод.
Шаг
3:
Напишите функцию
Python
с именем generate_fibonacci, которая при
нимает целое число п в качестве аргумента.
Шаг
4:
Функция возвращает первые п чисел в последовательности Фибоначчи в
виде списка.
Безопасность и конфиденциальность
При составлении промптов важно не упускать из вида безопасность и конфиденци
альность. На самом деле, обязанность принимать соответствующие меры предосто
рожности должна быть прописана в правилах компании. Крайне важно в ваших
промптах избегать любой конфиденциальной или личной информации, такой как
персональные данные (РП). Вот пример промпта, содержащей информацию, позво
ляющую установить личность:
Промпт: Как бы вы решили проблему с входом в систему, о которой сообщил
неизвестный на сайте
john.doe@example.com?
Разумнее ввести что-то вроде промпта, показанного ниже:
Промпт: Как бы вы решили проблему с входом в систему, о которой сообщил
пользователь?
Такая формулировка позволит сохранить конфиденциальность информации.
Также не следует отображать в промптах какие-либо конфиденциальные сведения
о системе. Избегайте таких вариантов:
Промпт: Как исправить ошибку подключения к базе данных на нашем рабочем
сервере с
IP 192.168.l.1?
Глава
86
3
Вместо этого лучше использовать промпт без указания лишней информации:
Промпт: Как исправить общую ошибку подключения к базе данных?
Кроме того, убедитесь, что предлагаемые вами промпты случайно не подтолкнут к
сомнительным действиям.
С точки зрения безопасности такой промпт вполне подходит:
Промпт: Как обнаружить и предотвратить SQL-инъекцию?
А вот этот промпт может спровоцировать неправомерные действия:
Промпт: Как использовать на веб-сайте уязвимости
SQL?
Помимо соблюдения правил безопасности и конфиденциальности, при составлении
промптов важно учитывать факторы разнообразия и открытости. При составлении
промптов обращайте внимание на то, чтобы избежать предвзятости, которую часто
отображают данные обучения. Чтобы избежать дискриминационных или исклю
чающих фраз в промптах, рекомендуется использовать нейтральные формулиров
ки. Кроме того, при составлении промптов неплохо было бы узнать мнение других
людей. Это не только повысит степень открытости и доступности при взаимодей
ствии с большой языковой моделью, но и поможет получить более точные и пол
ные ответы, касающиеся рассматриваемого вопроса.
Автономные агенты искусственного интеллекта
Мы уже видели, как можно стимулировать большую языковую модель для состав
ления схемы процесса. Этот метод заложен в основу генерации кода.
Но автономные агенты искусственного интеллекта могут работать гораздо эффек
тивнее. Они не просто следуют промптам. Они творчески работают с большой язы
ковой моделью, и могут разработать план действий для решения поставленной пе
ред ними задачи. Для этого автономные агенты используют специализированные
базы данных, такие как
Pinecone
и
Chroma DB.
Агенты работают со сложными тек
стовыми матрицами.
Автономные агенты искусственного интеллекта разработаны на основе академиче
ских исследований и обычно являются частью проектов с открытым исходным ко
дом. Их истинная ценность заключается в автоматизации. Чтобы понять, как это
работает, давайте рассмотрим пример.
Предположим, что вы сформулировали
промпт следующим образом:
Пршнпт: Создайте базовое метеорологическое приложение с системой входа
пользователей.
В табл.
3.6 показан
процесс, через который должен пройти автономный агент.
Оперативное проектирование
Таблица
3.6.
87
Процесс, через который должен пройти автономный агент
Этап
Задачи
Разработка задания
Разработайте пользовательский интерфейс
(UI).
Создайте основной макет информационной панели.
Выберите цветовые схемы и шрифты.
Разработайте иконки и другие графические элементы.
Интеграция пользо-
Найдите в Интернете надежные
вательского интер-
данными.
фейса для получения
API для работы
с погодными
Определите необходимые данные для отображения.
данных о погоде
Напишите код для получения и обновления погодных данных.
Функции выбора ме-
Разработайте строку поиска или открывающийся список, чтобы
сто положения
пользователи могли определить свое местоположение.
Подключите строку поиска или открывающийся список к коду
API.
Устраните ошибки, такие как сбои при вызове
Устранение ошибок
API
или нед ей ст-
вительные записи о местоположении.
Определение приоритетности задач
Приоритетом является настройка интеграции
API.
Сосредоточьтесь на пользовательском интерфейсе.
Поработайте над функцией выбора местоположения и обработкой ошибок.
Проанализируйте сгенерированный код и текущее состояние
Итерация
погодной панели.
Определите оставшиеся задачи или разработайте дополнительные задачи, возникшие в процессе работы.
Повторите шаги по созданию и расстановке приоритетов.
Автономные агенты
-
передовая технология, которая открывает большие перспек
тивы. Однако и здесь не обошлось без трудностей:
♦ Потребление ресурсов
Для работы автономных агентов требуются большие объемы вычислительных
мощностей. Это может привести к нагрузке на процессоры и базы данных, что
приведет к увеличению
времени ожидания,
снижению надежности и увеличе
нию затрат времени.
♦
Попадание в бесконечные циклы
Иногда агенты просто движутся по кругу по причине отсутствия поступательно
го движения вперед или повторяющейся системы вознаграждений.
Глава
88
♦
3
Проведение экспериментов
Агенты могут ошибаться. В зависимости от поставленных перед ними задач в
них может содержаться некоторое количество ошибок или непредвиденных дей
ствий. Поэтому агенты еще не готовы к сложной работе.
♦ Амнезия
Агенты могут просто забыть некоторые шаги или инструкции.
♦
Сложности с выполнением большого количества задач
У вас есть целый список заданий? Это может поставить агентов в тупик.
♦
Отвлечение на посторонние детали
Агенты могут отвлекаться на мелочи, которые не имеют значения, что может
при выборе инструментов направить их по ложному пути.
Еще одна инновация, способствующая развитию больших языковых моделей
генерация с расширенным поиском
(RAG).
С помощью
RAG
-
это
приложение, написан
ное с помощью генеративного ИИ, на основе, например фреймворка
LangChain,
получает доступ к внешним источникам данных, обычно векторным базам. Они
обеспечивают более глубокую привязку модели к конкретным знаниям, что должно
повысить эффективность ответов большой языковой модели.
Расширенный поиск может быть особенно полезен при решении сложных задач
разработки программного обеспечения, как, например, в этих сценариях:
♦
Устранение ошибок и сбоев
Когда разработчики сталкиваются с ошибками или недочетами, с помощью ме
тода
RAG
выполняется поиск исправлений. Для этого используются форумы и
базы данных ошибок. Данный метод позволяет создавать индивидуальные ре
шения или исправления кода, соответствующие вашей проблеме.
♦
Повышение эффективности анализа кода
RAG
может собрать все передовые методы кодирования, стандарты и обяза
тельные правила из внутренних ресурсов компании. Это означает, что
RAG
мо
жет помочь оптимизировать обзор кода, предоставляя советы и промпты, чтобы
сделать ваш код более совершенным.
♦ Повышение эффективности тестирования
Когда приходит время протестировать ваш код,
RAG
может стать вашим надеж
ным помощником. Он находит всевозможные тестовые сценарии и шаблоны,
подстраивает их под нужды вашего проекта, и помогает быстрее развернуть тес
товые примеры или сценарии.
~
В некоторых случаях большая языковая модель подскажет, что с вашим
промптом что-то не так. Предположим, вы пишете следующее:
Промпт: Написать
REST API
на ассемблере.
Оперативное проектирование
Вот как отреагировал
ChatGPT:
Создание
89
ChatGPT:
REST API
с использованием языка ассемблера являет
ся весьма нетрадиционным и сложным из-за того, что язык ассемблера
-
это язык низкого уровня. Такой язык обычно используют для задач, тре
бующих детального контроля над аппаратным обеспечением, или для сце
нариев, в которых производительность является критически важным фак
тором.
Заключение
Создание идеального промпта предполагает сочетание науки с творческим подхо
дом.
Главное
-
найти
правильные ингредиенты:
немного творчества,
чутье и
структурный подход, чтобы составить промпт, который заставит большую языко
вую модель дать то, что вам нужно. Волшебного рецепта не существует, но если вы
четко сформулируете промпт, добавите несколько примеров и хорошо изложите
суть вопроса, вы будете на пути к получению более качественных ответов.
На самом деле это процесс. Вы пробуете что-то, смотрите на результат, корректи
руете и пробуете снова. И, как и в любом другом деле, вы совершенствуетесь тем
быстрее, чем больше вы работаете с разными темами и заданиями.
ГЛАВА
4
Github Copilot
В этой главе рассматривается инструмент
GitHub Copilot,
далее
просто
-
Copilot.
Это один из наиболее продвинутых ИИ-ассистентов для разработчиков. Некоторые
даже называют его «убийственным приложением» 1 генеративного ИИ оснований.
Copilot
и не без
обладает продвинутыми возможностями генерации и объясне
ния кода, что позволяет существенно повысить производительность. Он понимает
контекст и предугадывает шаблоны программирования, благодаря чему не только
экономит время, но и помогает писать более чистый и эффективный код с меньшим
числом ошибок.
В этой главе мы подробно разберем
GitHub Copilot:
узнаем, сколько он стоит, какие
функции предлагает и как настроить его для работы. Отдельное внимание уделим
недостаткам инструмента и поделимся практическими советами, которые помогут
использовать
Copilot
максимально эффективно. Кроме того, мы рассмотрим, как
этот продукт интегрируется с решениями других компаний в рамках партнерской
программы
Copilot.
Таким образом, вы получите полное представление о возмож
ностях этого инструмента.
GitHub Copilot
Еще в июне
2021
Генеральный
года компания
директор
(https://oreil.ly/L4JcE)
GitHub
Microsoft
Нэт
представила приложение
Фридман
охарактеризовал его как «программиста
GitHub Copilot.
в
(Nat Friedman)
-
своем
благе
помощника с
искусственным интеллектом». Этот помощник призван ускорить работу разработ
чиков, помогая им выполнять задачи более эффективно.
Приложение
и
OpenAI.
названием
Copilot-
это результат сотрудничества между компаниями
Codex -
вариант большой языковой модели
ченный для кодирования.
Microsoft
GPT-3,
только предназна
расширила возможности этой большой языко
вой модели, внедрив новый подход, известный кaкjill-in-the-middle
1
Microsoft
Изначально в разработке использовалась большая языковая модель под
«Убийственное приложение» (killer application) -
(FIM),
который
это проrраммное обеспечение, обла
дающее столь высокой ценностью или привлекательностью для пользователей, что ради его
использования они готовы выбрать и освоить всю связанную с ним технологическую плат
форму.
-
Пер.
Глава
92
4
лучше воспринимает контекст кода, что повысило качество рекомендаций по коду
и сократило время отклика. Благодаря использованию более совершенной языковой
модели
GPT-3.5 Turbo,
это усовершенствование привело к заметному росту числа
принятых рекомендаций по коду. В целях повышения безопасности в инструмент
встроена ИИ-система, которая мгновенно блокирует рискованные шаблоны коди
рования, уделяя особое внимание таким уязвимостям, как содержащиеся прямо в
коде учетные данные и SQL-инъекции.
Цены и версии
Предлагается 30-дневная бесплатная пробная версия приложения
Copilot.
По исте
чении этого срока вам на выбор будет предложено три варианта.
Copilot для
частных лиц
Стоимость этого тарифного плана составляет
1О
долларов в месяц или
100
дол
ларов за годовую подписку. В нем есть такие функции, как многострочные
функциональные промпты, позволяющие сделать ваш рабочий процесс кодиро
вания более удобным и эффективным. Отличительной особенностью является
возможность ускоренного создания тестов, что является ключевым фактором в
обеспечении надежности и стабильности вашего кода. Кроме того, в нем есть
функция фильтрации уязвимых шаблонов кодирования. Эта функция также ис
ключает любые варианты, копирующие открытый код, гарантируя, что создан
ный вами код будет уникальным и оригинальным.
Copilot для
бизнеса
Наиболее полный пакет, стоимость которого составляет
19
долларов за одного
пользователя в месяц. Он включает в себя все, что есть в плане
Copilot для
част
ных лиц. Кроме того, он включает ряд корпоративных функций, которые значи
тельно упрощают управление лицензиями и облегчают компаниям работу с под
писками и доступом. Также есть функция управления политиками в масштабах
организации, что помогает обеспечить единообразие управления и последова
тельность во всех проектах. Ключевым моментом является первоклассная защи
та конфиденциальности, которая очень важна для обеспечения безопасности
конфиденциальных бизнес-данных. Кроме того, поддерживаются корпоратив
ные прокси-серверы, гарантирующие безопасное и бесперебойное соединение
по всей сети компании.
GitHub Copilot корпоративный
Плата составляет
39
долларов в месяц за одного пользователя. Ключевой осо
бенностью плана «Корпоративный» является возможность обучения системы на
внутренних кодовых базах. Версия «Корпоративный» повышает эффективность
работы разработчиков, поскольку инструмент предлагает более точные реко
мендации по коду. С его помощью легче внедрять передовой опыт и придержи
ваться правил безопасности. Инструмент адаптируется к тому, как разработчики
пишут код внутри компании, а также к их любимым
API,
фреймворкам и пакетам.
93
Github Copilot
Еще одно преимущество версии «Корпоративный» заключается в том, что вы
можете обучать его на таких классических языках, как
COBOL
и
Fortran.
Работа
с этими языками программирования большой языковой модели общего назначе
ния может быть не столь эффективна из-за недостатка обучающих данных из
публичных хранилищ. Конечно, большая языковая модель общего назначения
ничего не «знает» о проприетарных языках, специфичных для вашей компании.
Система
GitHub
также способствует развитию модели корпоративного класса за
счет постоянного сканирования репозиториев компании. Например, система от
слеживает последние запросы на внесение изменений
(pull requests)
и слияния, а
также лайки и дизлайки. Все это помогает выявить новейшие методы и страте
гии, используемые компанией.
Наличие собственных моделей помогает распространить новейшие технологии по
всей организации. ИИ улавливает и передает все нюансы, скрытые в коде. Благода
ря постоянному обучению ИИ не отстает от меняющейся кодовой базы, что с тече
нием времени позволяет повысить эффективность его работы. Тем не менее, орга
низациям очень важно учитывать риски, связанные с конфиденциальностью и
интеллектуальной собственностью, которые возникают при внедрении этих ИИ
инструментов в процесс разработки.
В
2023
году, согласно исследованию
струменты для программирования
стали использовать менее
10%
Gartner (https://oreil.ly/zXAQ-),
ин
на основе искусственного интеллекта
крупных предприятий. Такая нерешитель
ность отчасти объясняется опасениями по поводу безопасности, точности
в написании кода. Однако с учетом быстрого развития технологии ожида-
ется, что в ближайшем будущем все больше предприятий перейдут на ис
пользование таких инструментов. Одним словом, преимущества, которые
предлагают данные инструменты, довольно существенны, чтобы их игно
рировать.
Пример использования:
программирование аппаратных средств
Интересным примером использования пользовательских моделей является компа
ния
Advanced Micro Devices (AMD).
Основанная в
1969
году, эта компания являет
ся пионером в области производства центральных процессоров (ЦП). Сегодня это
лидер
(https://oreil.ly/pOoMj)
в производстве полупроводников для центров обра
ботки данных, встраиваемых систем, игровых платформ и персональных компью
теров.
Прежде чем приступить к работе, давайте разберемся с основами разработки ПО
для аппаратных средств. Это совсем другая задача, чем создание веб-приложений.
Основная проблема заключается в том, что разработчики должны детально знать,
как работают эти аппаратные средства. В отличие от обычного ПО, которое работа-
94
Глава
4
ет на универсальных компьютерах, встроенное программное обеспечение ( fiпnware
или прошивка) общается непосредственно с аппаратными средствами. А в этом
случае требуется гораздо большая точность в написании кода и его совместимости.
Такая точность очень важна, поскольку ошибки при разработке прошивки могут
привести к весьма дорогостоящим последствиям. Всего одна ошибка может вы
звать многомиллионные финансовые потери. И дело не только в деньгах
-
время
тоже играет огромную роль. Устранение проблем с прошивкой обычно требует пе
ресмотра производственного процесса, а это может увеличить сроки выполнения
заказа вплоть до нескольких месяцев. Такая задержка влияет не только на график
выпуска, но и на конкурентоспособность продукта на рынке.
Очевидно, что лозунг «двигайся быстро и ломай все подряд» 2, характерный для
Аgilе-разработки, не работает в этой ситуации. При использовании такого подхода
риски слишком велики. Именно поэтому разработчикам прошивок приходится тра
тить много времени и усилий на составление детальных алгоритмов и проведение
всестороннего тестирования. Такой скрупулезный подход позволяет убедиться в
том, что прежде чем прошивка будет сопряжена с аппаратным обеспечением, ПО
станет максимально надежным и не будет содержать ошибок.
Когда в
2023
году в компании
AMD
начали работать с приложением
Copilot,
ком
панией были установлены очень высокие стандарты, что вызвало вполне объясни
AMD создала пользовательскую вер
Copilot для различных языков описания аппаратуры (HDL), таких как Verilog и
SystemVerilog. HDL- это особый тип языков программирования, предназначен
мый скептицизм. В рамках пилотного проекта
сию
ный для описания архитектуры, дизайна и функционирования электронных схем,
особое внимание уделяется цифровым логическим схемам. Эти описания очень
важны для моделирования и симуляции электронных систем разного уровня слож
ности.
Результаты эксперимента
(https://oreil.ly/TXMvQ)
оказались гораздо выше ожи
даемых. Удивительно, но стиль кода, сгенерированного
соответствовал стандартам
AMD,
в большей степени
Copilot,
чем код, создаваемый собственными программи
стами компании. Улучшение было настолько значительным, что некоторые из про
граммистов даже перешли от использования
Vim -
кими возможностями настройки, к использованию
текстового редактора с широ
Visual Studio Code
в качестве
интегрированной среды разработки.
Пример использования:
Shopify
Еще один любопытный пример- компания
платформой,
позволяющей
клиентам
создавать
Shopify контролирует около 10% рынка в
2
Shopify.
США и
Эта компания управляет
Интернет-магазины.
6% в
Компания
Европе.
Лозунг «Move fast and break things» (Двигайся быстро и ломай все подряд) стал известен
благодаря Марку Цукербергу
(Mark Zuckerberg),
который призывал начинающих бизнесме
нов творить в скоростном режиме и не обращать внимания на мелочи.
-
Пер.
Github Copilot
95
Несомненно, это привело к необходимости создания масштабной инфраструкту
ры. Учтите, что существует около
стных. Кроме того, каждый день
300 публичных репозиториев и около 5 ООО ча
Shopify выполняет около 1 500 развертываний
своего кода.
Shopify
Copilot,
была одной из первых компаний, которая приняла участие в проекте
и это стало переломным моментом в повышении продуктивности ее разра
ботчиков. В настоящее время около
инструмент
2 ООО
программистов
Shopify
используют этот
(https://oreil.ly/ZI_9K). И вот что самое интересное: по мнению 70%
75% используют его часто. Около 26% предложений по коду
них, он полезен, а
из
от
Copilot принимаются.
Конечно, есть несколько функций, которые не прижились. Например, интеграция с
интерфейсом командной строки
(CLI).
Но, несмотря на это, многие разработчики
ежедневно используют функцию автодополнения кода и чат.
Вот несколько интересных выводов:
Польза от рекомендаций по коду
Даже если разработчик не воспользуется той или иной рекомендацией, это не
означает, что рекомендация отклонена полностью. Любая рекомендация может
подтолкнуть к идеям по написанию еще более качественного кода.
Скорость внедрения
С течением времени число пользователей обычно увеличивается, и это не вызы
вает удивления. Требуется время, чтобы отладить ежедневные рабочие процессы
и привыкнуть к новым функциям. Кроме того, в
кривая обучения 3 .
Copilot
есть такое понятие, как
Восприятие опытными разработчиками
В самом начале внедрения
Copilot
более опытные разработчики не слишком
стремились к его использованию. Они считали это приложение скорее игруш
кой, чем серьезным инструментом. Но со временем, когда они увидели, что у
других разработчиков есть реальные результаты, они стали относиться к нему
лучше.
Повышение эффективности обучения
Специалисты компании
Shopify
заметили, что
Copilot
хорошо стимулирует лю
дей к изучению нового языка или фреймворка. Например, был отмечен замет
ный рост внедрения языка программирования
Rust.
С помощью этого инструмента было написано около миллиона строк кодовой базы
Shopify,
3
что подтверждает важность
Кривая обучения -
Copilot для
компании.
это графическое представление взаимосвязи между тем, насколько
хорошо ученик справляется с заданием и усваивает опыт и знания, предлагаемые препода
вателем. -Пер.
Глава
96
4
Пример использования:
Accenture
это крупная организация, предоставляющая профессиональные услу
Accenture -
ги, помогающие клиентам совершенствовать свою деятельность и обеспечивать
рост за счет инновационных технологий и систем. В компании работает более
733
В
ООО сотрудников в более чем
120 странах (https://investor.accenture.com/).
2023 году компания Accenture провела тестирование инструмента Copilot с уча
450 своих внутренних разработчиков (https://oreil.ly/ku8Nd). Компания не
стием
ставила никаких конкретных задач или целей перед разработчиками. Менеджеры
просто попросили всех заниматься своей обычной работой.
Эксперимент с
Copilot
в компании
Accenture
длился шесть месяцев. Итак, что же в
результате получилось? Что касается кодирования, то рекомендации
приняты на
35%,
причем
88%
Производительность тоже заметно выросла. На
50%
были
увеличилось количество за
просов на исправление и на
15% -
значительно возросла: на
увеличилось количество сборок и на
50%
Copilot
этих изменений сохранились и после проверки кода.
количество слияний. Эффективность также
ство. А разработчики? Они были очень довольны:
96%
45% -
их каче
из них почувствовали себя
удовлетворенными с первого дня.
Оценив эти результаты, компания
дрении
Copilot для
своих
50 ООО
Accenture
приняла решение о глобальном вне
разработчиков
(https://oreil.ly/UgdoL).
Безопасность
Компания
Gartner
опросила
(https://oreil.ly/kloVc)
66%
формационных служб (СЮ) и выяснила, что
более
2 ООО
руководителей ин
из них планируют в
2023
году
инвестировать больше всего ресурсов в кибернетическую и информационную
безопасность. Эта тенденция сохраняется на протяжении многих лет.
В условиях, когда сложность и изощренность программного обеспечения, исполь
зуемого для кибернетических атак, все возрастает, а сами кибернетические угрозы
становятся более сложными и масштабными, нарушения в сфере безопасности мо
гут означать крупные финансовые потери, ущерб репутации, юридические пробле
мы и перебои в работе. Кроме того, в условиях ужесточения требований к конфи
денциальности данных IТ-директора должны внимательно следить за соблюдением
норм, чтобы избежать штрафов и сохранить доверие клиентов.
Вот почему для
является одним из основных направлений
программы
GitHub безопасность
Copilot. GitHub разработал
систему, в основу которой заложена боль
шая языковая модель, которая выявляет и исправляет небезопасные шаблоны коди
рования прямо в момент их появления.
Кроме того, в
Copilot
реализованы функции расширенной безопасности,
Security, принятые компанией GitHub.
Advanced
Ниже приведено несколько основных функций:
Сканирование кода
Advanced Security
в режиме реального времени ищет уязвимости в системе безо
пасности и ошибки в коде.
Github Copilot
1 97
Сканирование секретов
Продукт может обнаружить секреты, такие как ключи и токены, которые хра
нятся в частных хранилищах.
Обзор зависимостей
Здесь отображаются последствия изменений зависимостей. Кроме того, предос
тавляется подробная информация об уязвимостях при слиянии запроса на извле
чение.
ll
Для студентов, преподавателей и сопровождающих популярные проекты с
открытым исходным кодом использование
Copilot
бесплатно, но необхо
димо пройти процедуру проверки.
Приступая к работе
ttaiDi
TomTaulli
•
Working from home
А Yourprofile
А+
Add account
х
Чтобы начать работу с
Copilot, сначала нужно
GitHub. GitНub -
дать свою учетную запись на
соз
это
онлайн-сервис, поддерживающий контроль версий
и совместную разработку программного обеспече
ния. Он построен на базе
Git,
инструмента, предла
гающего функции обзора кода и управления про
ектами .
i:;;)
Your repositories
~ Your projects
~ Your Copilot
ШЬ Your organizations
9
Your enterprises
*
Yourstars
После создания учетной записи щелкните мышью
на фотографии своего профиля в верхней части
экрана. Появится открывающееся меню, показан
ное на рис.
4.1.
а затем нажмите ЕnаЫе
Выберите У our
Copilot,
GitHub Copilot
(Включить
GitHub Copilot).
Далее
вы можете выбрать тип тарифного плана, а затем
с:;) Your sponsors
нажмите
EJ
если вы не претендуете на бесплатную учетную
Your gists
кнопку
Continue
(Продолжить).
Вам,
запись, нужно будет указать свои платежные рек
.1, Upgrade
9
визиты.
Try Enterprise
.!!, Feature preview
$ Settings
Q] GitНub Docs
А\ GitНub
Sign out
Support
Рис.
4.1. Начало
активации
Copilot с
открывающегося меню профиля
помощью
Глава
98
Среда
4
Codespaces
и
Visual Studio Code
- через Codespaces,
облачную среду разработки, построенную на базе Visual Studio Code (VS Code),
которая запускается прямо на сайте https://github.com.
С
Copilot можно
работать двумя основными способами. Первый
- использование стационарной версии VS Code с установленным
Copilot. Именно этот вариант мы подробно рассмотрим в рамках дан
Второй вариант
расширением
ной книги.
Visual Studio Code - бесплатная среда разработки. На рис. 4.2 показано ее основ
ное окно. VS Code работает на большинстве популярных платформ, включая
Windows (версии 7, 8, 10 и 11), macOS, а также разнообразные дистрибутивы Linux например, Ubuntu, DeЬian, Fedora и другие.
-
Qg l) g(]
nPQIOД,W,I(
...
v НfТ Ontl'lilTOЙ ПАПIСМ
• 1est.P'/
[): )'Т!!mр
~
8 ...
Х
>♦
х
□
161.ру
~~~~jt~~•
Copilotl·
При от,срыt1<о1 nюси будуr ~ w
8CII!
on:pыn,if В Н:КТОflЩМ'
8f»MA
pt,11.&nopw. Чrобw ос,•е~,.,
их
O!КJ)WJWl,Щ АО6аеип,, n.tг«y
> СJ,rкп?•
) IPfMfHHAII WJtAIIA
0.
Рис.
4.2.
Основное окно
Visual Studio Code
Орокаl сrмбf>ц2Ь
Прdк-пое: 4
VП
8
(R\ I
{1 Pythoo
f8
t.,l
содержит панель действий
и поле для генерации и отображения кода
Слева находится панель действий, в которой расположены кнопки с разными изо
бражениями. Чтобы перейти на вкладку для установки расширений, следует вы
брать пятую сверху кнопку с изображением группы квадратов в§' (см. рис. 4.3).
Теперь, если ввести в поле поиска текст запроса
GitHub Copilot,
на экране отобра
зится список предлагаемых расширений. Выберите верхнее и нажмите кнопку У с
тановить. Если вместо кнопки Установить вы видите Удалить, значит, данное
расширение уже установлено.
Посмотрите на правую нижнюю часть экрана. Если там появился значок
чит, служба доступна.
$,
зна
Github Copilot
99
в
!В ~ GdНиЬ Copilol Х
...
GitHub Copilot
@,
G1tНub • grthub.com
'rЬtк А!
Ф 43 011 808
**** *(970)
pair progra~
-
llllllll liCBllllll:::ICC::l:Cli::1 0 ,..,_,_,.,__
Ф
@ ЭТО pXUI~ 6.uюот~ ТIК Ult ТИ)'ЩI• pafxNa• o6.ucn. ~ 1 1 ~
GitНub Сор{Ю... Ф ~
GitH\JЬ
•
CopilOt far Awr"
*
it;
◄
t,. ..
11111::12:111
м..,.....
GitHub Copilot - Your AI
GhНub
реег
programmer
■
~
Copilot 1s an А1 рнr p,ogramrning toof th.it helps you wnt11 tode mte- .ind
""""'·
GtНubCopitot
ad8pts toyouruniquenмds 8'Ьмg you to INCttм Ьнt
mod@t
Устаноека
atttu.c!IJ)Jlclt
kрц1•
1.ю.•
Д..т,
202S-07·10.
noиt,4"~.
14:06:17
for
your ptOJ«t. o.momi2lf chat rиponиs with custam inlt:ructюra .:t utilize ~
mode lot Al-povrttn!d ~int-o,at.d рмr Pf'09"anwтw'l9 МS80f15.
Slgn ~ for Gitttutt СорИоt
Рис.
4.3.
В
VS Code
Copilot!»
M.arketplace
•
~ ...... 2021-ОЬ-29.
есть возможность устанавливать расширения, например, для
В верхней части экрана (см. рис.
вет,
•
frмl
4.2)
Copilot
вы увидите код, отображающий строку «При
в терминале. Данный код был создан
Copilot
с помощью промпта,
показанного ниже:
Промпт:
# напиши
программу «Привет,
Copilot!»
Символом# всегда обозначается комментарий. Это один из способов указать
lot,
Copi-
чтобы он сгенерировал код.
«test.py», а сам код написан на языке
Copilot использует расширение файла,
Обратите внимание, тестовый код называется
Python
(на что указывает расширение .ру).
чтобы определить, какой язык программирования использовать.
В правом верхнем углу экрана находится кнопка в виде стрелки - треугольника [>,
предназначенная для запуска разрабатываемой программы 4 . Щелкните мышью по
этой кнопке, и
VS Code
откроет терминал, где отобразится соответствующее сооб
щение.
Рекомендации
Начать работу с
Copilot
инструмент
запрос,
в
VS Code
начинает
очень просто. Как только вы начинаете вводить
предлагать
вам
подсказки
по
коду
и
генерировать
фрагменты кода на основе введенных вами данных.
Предположим, вы начинаете писать заголовок функции вычисления факториала в
Python:
def find_factorial(number):
4
Кнопка запуска появится, только если у вас установлено расширение для запуска кода
Python. -
Ред.
Глава
100
4
Copilot незамедлительно
предложит полное тело функции, что показано на рис.
4.4.
Этот сгенерированный код называется призрачным текстом и вьщелен серым цветом.
.Переход
llид
РАСШИРЕНИЯ: МАRКПРLАСЕ
GitНub Copilot
>Тетр > ♦
ji
':S> 1S7бms
Your А1 pair programmer
.GitНub
Рис.
testpy
О:
1
GitНub Copilot
ЕВ Рааиирение: GitHub Cop,.lot
•
•
test.py
def find_factorial( numЬe r ) :1
if питЬеr == О:
return 1
eLse:
return питЬеr •
G
4.4. Copilot рекомендует код,
find_factoriaL(numЬer
- 1)
как только пользователь введет заголовок функции
Имейте в виду, что на вашем компьютере код может выглядеть несколько иначе.
И это нормально, поскольку находящаяся в основе большая языковая модель рабо
тает в соответствии со сложным набором вероятностей.
Но вот в чем дело:
GitHub
«понимает», что вы пытаетесь написать функцию для
вычисления факториала на основе заданного параметра. Поэтому он предлагает
конструкцию
If-Then,
необходимую для получения нужного результата.
Для принятия предложенного кода вы можете нажать клавишу ТаЬ. Но если код
вам не подходит, просто нажмите клавишу
Escape,
чтобы от данной рекомендации
отказаться.
Если вы наведете курсор на сгенерированный код, то увидите еще несколько оп
ций, что показано на рис.
♦ test.py
D:
•
>Тетр )
1
4.5.
ЕВ Расширение:
♦ testpy
GitHub Copilot
j (
1/3
> Принять 0
Принять CJIOO<>
0
~~
•••
def find_factorial ( numЬer ) :1
if number < в:
return "'FactoriaL is not defined for negative numbers··
eLif number == в or number == 1:
return 1
eLse:
factoriaL = 1
for i in ronge(2, питЬеr + 1):
factoriaL *= i
return factoriaL
Рис.
4.5.
При наведении курсора на сгенерированный код на экране появляются
дополнительные опции, которые можно увидеть справа вверху
Вы можете нажать кнопку Принять
(Accept),
чтобы согласиться с рекомендован
ным кодом. То же самое действие можно выполнить, нажав клавишу ТаЬ. Или вы
брать пункт Принять слово (Accept Word), чтобы принять одно слово в коде за
101
Github Copilot
один раз. Если вы щелкнете мышью на кнопку с изображением трех точек, откро
ется меню, в котором можно или принять строку, или выбрать режим отображения
панели инструментов.
Щелкнув мышью на значении
1/3
слева, вы сможете увидеть альтернативные вари
анты сгенерированного кода. На рис.
4.5
показан альтернативный код, и в данный
- первый вариант. Щелкнув мышью на символе «>» справа от значе
1/3, вы перейдете к варианту 2. Щелкнув мышью на символе«<)) слева от зна
чения 1/3, вы вернетесь к варианту 1.
момент это
ния
Для навигации по опциям вы также можете использовать клавиши быстрого досту
па, перечисленные в табл.
Таблица
4.1.
4.1.
Клавиши быстрого доступа для прокрутки рекомендаций по коду
Операционная система
Следующая рекомендация
Предыдущая рекомендация
macOS
Опция ("'\:) или Alt+]
Опция ("\:) или Alt+[
Windows
Alt+]
Alt+[
Linux
Alt+]
Alt+[
Ctrl+Enter, VS Code создаст
10 альтернативных решений (рис. 4.6).
Если вы нажмете сочетание клавиш
которой будет показано
• t,stpy
с
♦
1 •
>US<rs >tt.ul >OneDrive >Oesktop > •
1
testpy
> е find_facto,ial
GitHub Copitol Suggestions (or testpy
1
2
def find_factorial(numbe r):
новую вкладку, на
Х
1> -
m ...
~ynthesizing 10/10 solutions (Duplicates hiddt
Accept Solution
2
3
=••····
4
Suggestion 1
5
б
7
8
9
10
11
12
def find_factorial(number) :
if nu11ber < 0:
1 1 raise ValueError( 'Number must Ье posi1
if number •= 0:
1 1 return 1
return number • find_factorial(number - 1 ;
Acc~pt Solution
13
14
15
16
17
18
19
20
21
Suggestion 2
def find_factorial(nu11ber) :
if number •• 1:
1 1 return 1
else:
1 1 return nuinber • find_factorial{numЬer
Accept Solution
22
23
Suggestion 3
24
25
Рис.
4.6.
Ctrl+Enter, появится отдельная
10 различных вариантов кода
Если нажать комбинацию клавиш
на которой будут отображены
def find_factorial(number):
вкладка,
102
Глава
4
Чтобы выбрать один из вариантов, нажмите кнопку
Accept Solution
(Принять ре
шение), расположенную над этим кодом. Чтобы отклонить все варианты, просто
закройте вкладку.
Комментарии
Ранее, в разделе «Среда
как можно поручить
Codespaces и Visual Studio Code», рассказывалось о том,
Copilot сгенерировать код с использованием одного или не
скольких комментариев. Для этого вы указываете комментарий, применяя синтак
сис того языка программирования, на котором работаете.
Но можно сделать и по-другому. Используя комментарии, программист может
взаимодействовать с системой, как если бы это был
ChatGPT.
Давайте рассмотрим
пример:
Промпт:
Copilot: #
# q:
Что такое класс в объектно-ориентированном программировании?
а: Класс
это схема для создания объектов. Объект имеет свойства и
-
методы (функции), связанные с классом. Почти все в
Python является
объектом.
Как видите, ответ также зависит от особенностей языка, на котором вы кодируете.
Теперь предположим, что вы спрашиваете
Промпт:
# q:
Copilot о том,
как работает система:
Какое сочетание клавиш используется для принятия встроенной
рекомендации?
Copilot: # а: tab
Вы можете задать
Промпт:
# q:
пользователя в
Copilot вопрос
о возможностях
VS Code:
Какое сочетание клавиш используется для отображения настроек
VS Code?
Copilot: # а: Ctrl + ,
Вы также можете спросить его о клавишах быстрого доступа для других
Промпт:
# q: Какое
Atom?
IDE:
сочетание клавиш используется для создания нового файла
в редакторе
Copilot: # а: ctrl + n
Обратите внимание, что
ционной системе
Copilot автоматически определил, что я работаю в опера
Windows, и предоставляет код, предназначенный для этой плат
формы.
Чат
Copilot Chat-
это то же самое, что и
ChatGPT,
только адаптированный под вашу
среду программирования. Он может помочь в анализе кода, например, когда вам
нужно разобраться с синтаксисом, устранить ошибки, проанализировать тестовые
примеры или просто обдумать различные идеи программирования. Он работает на
основе больших языковых моделей
GPT-4
и
GPT-3.5 Turbo от OpenAI,
Microsoft.
основе собственных больших языковых моделей от
а также на
Github Copilot
103
Вы можете начать работу с Copilot Chat (далее просто Chat) прямо на сайте
https://github.com. Здесь можно анализировать код, работать с запросами на извле
чение (pull requests ), изучать документацию или просто задавать любые вопросы по
программированию. Кроме того, Chat доступен в приложениях GitHub для iOS и
Android, так что вы можете взять его с собой в дорогу.
Но сейчас давайте остановимся на работе этого приложения в
VS Code. Для начала
VS Code новое расширение. Просто с помощью поискового за
проса найдите чат «GitHub Copilot Chat». Когда приложение будет установлено,
справа от панели поиска вы увидите значок Copilot, щелкните по нему и выберите
команду Открыть чат или нажмите комбинацию клавиш Ctrl + Alt + 1. Откроется
панель чата, см. рис. 4.7.
нужно добавить в
•V
o,,romp, ♦ lf'Ol4>,
1 6itfHn4._,кt..,JaJ(-):
l
н...-,.,
)
~
•llf ::;:,:~к:"~~
....i
_ ~1..i kr "'C • tl.,. - - . ·
--~а,м '()-
;ч.м~..""•~Ь,,
♦__
fort\11~-
a:::rat Ф
с-с°"""'""......,_~~
1•
11
• w....-
12
с..1111-
,..- • ·
-
(l,-•t):
f..:torlo.1°•1
,..t\ll"n fкtorl•l
Спросить
Copilot
topk,t,..0,,,_ ... _ 1 ~ - " ° " " " " ' Y -
~
"-""'"""'---
......
--__
......
~
,
-.... ,......
..
-
---•"''"
...~....,-.....-__
--~
......
··\
...,11. . . . .~ . .-
Рис.
4.7.
Возле панели «Поиск» появился значок «Чат»
В нижней части панели чата находится поле ввода, где можно задать вопрос систе
ме. В верхней части выводится ответ на введенный промпт.
В чате вы обнаружите множество ярлыков. Один из них
-
@workspace, обозна
чающий файлы, открытые в вашем рабочем пространстве. Например, если у вас код
написанной на языке
Python
программы-калькулятора, для ее анализа вы можете
ввести:
Промпт:
На рис.
@workspace /explain
4.8
показано, что
Chat
проанализировал файл программы и предоставил
подробное объяснение.
Вы можете попросить
Chat выполнить
анализ только части кода. Выделите интере
сующий вас раздел и щелкните по выделенному фрагменту кода правой кнопкой
Глава
104
4
На экране появится меню (см. рис.
мыши.
Copilot, Explain
4.9),
в котором нужно выбрать команду
(Объяснить).
--
• R
--с.,1/м;
ffi
$•:['!',<,,
Ь.l\ip,tllf'IC'9. r.м...
.L
•
-
QНwllc...,118. .<to-••
·-
...,_,
i
C.tW,(_,..,,_,.L..
-c11"1"t•.r)
11
н,-,,
,,..,...__цм
....,...,...f......,,.IOl"1,1,.,,1ry ...,...•
ll
...,..,,,.
,.
н
., .....,
"
prJnt("\,fJ.o;t_,.......,)
UI
pt'ln1("l.S.Мr•r"I
tt
prlм("J .... ltli>Jr")
lt
,,.111t{"I. Dtwld,f")
,rl11t('"'i. f•ll")
r_._
....,....
,.-1,щ-1.--,
11
... ,_,~~"""",1•-tс,р,оо,...--_,_....
-.1~--...----·, _,__,,_,,,,,_......,,
- - ~ - 1 ................ , ..
/у
1'
11
--·
-·..
___
_____
. ....,................
.....-------
- , . ~ _ , _ , . _ . . . , . _ _ " " " " " " _ _ ,...
,_...,..__,.._
, .........
~
~--· ~---,~••--'-
~
t ~ - . . . . . . .О•
и
cloolte•1-("f•tм-c-t•
В
-
~
:ts
.............
Ф!
••1
_,,...,._ _
-{--~.,....
~
,."
Hdootte-U,['1, ·1·,
>,
Jt
·-
1
t·, ·c·J:
prJn11·1 ......11.. ,,.....)
""
"
"))
,..\ • f l - t (t,,pn("[M•~ fl~tl ,--2 • fJ.o.t(Щll/1. {"!м•~ мc.onil........,. "))
.11,'::1:·~;;, • :-1~ •
-
(....J/ •
..-1,,t(!"'-•
•Hf<.lw;l\te- 1·,
SftНwllte,11et_,i,ы•1
~
:1/UtJCJ\\·
lfdlolc.•- '\
1""W("l•Ht,,. ,-,.,...._-)
И.
~.,._.._,.,:;.
eJII"::~~~-~=--~
• t....J\ •
-(-],
.....~,п
\...trt... t(-1,
-11)")
{81JЩl1(-1, -1)}")
.-..Jt • dlVW.(-1, - 1 )
prJn1(f",..t1/
..-2: • : ....... 11
1
••
Рис.
4.8.
►
Чат можно использовать для анализа кода, например, программы калькулятора
choice = input("'Enter choice (1/2/3/4/5): ")
23
24
25
if choJ
prJ
br•
26
27
GRL+ALT+N
Run Code
>
Cop,lot
Вароенный чат редактора
CTRL+I
28
if choJ
prJ
cor
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
numl =
num2 =
+
Изменить все вхождения
Рефакторинr..
GRL +F2
CfRL +SHIFТ +R
Вырезаn,
CТRL +Х
Копирование
GRL +С
Вставюъ
GRL • V
Expla,n
F,x
Rev1ew and Comment
Generate Docs
Generate Tests
if cho~
Add Selectюn to Chat
GRL +SHIP" +Р
Палитра команд. ..
prJ
Add F1le to Chat
elif cholce = • 2 ·:
{subtract(numl, num2) >")
print(f"{numl } - { num2 т
elif choice •· • 3 • :
print (f"{numl } * {num2 } = {multiply(numl, num2 )}")
elif choice -- '4':
result • divide(numl, num2)
1
print (f'"{numl} / {num2 } - {result }")
Рис.
4.9.
Акцентируйте внимание чата на фрагменте кода,
выделив его и щелкнув правой кнопкой мыши
Когда вы даете задание
Chat
выполнить анализ только фрагмента кода, вы можете
не только получить разъяснение кода, но и исправить его, сгенерировать докумен
тацию или создать тесты.
105
Github Copilot
Следующая полезная команда 5
-
это команда
/new.
Данная команда создаст заго
товку для нового проекта или функции. Вот несколько примеров:
Промпт :
/new
Создайте Руthоn-скрипт для поиска данных с веб-сайта
Промпт:
/new
Создайте Jаvа-класс для обучающегося, с полями ввода для име
ни, возраста и оценки
Промпт:
/new
Создайте с помощью
Промпт:
/new
Создайте функцию
Flask
простой
JavaScript
REST API
для сортировки массива чисел по
возрастанию
Промпт:
/new
Разработайте схему базы данных
SQL
для блога с таблицами для
пользователей, постов и комментариев
В ответ на эти запросы
Chat
отобразит основные шаги, которые нужно выполнить,
а затем предоставит листинг кода. Вам также будет предложено несколько вариан
тов действий. Как видно из рис.
4.1 О,
в верхней части находится строка меню.
()•В
...
if choice == '1':
result = add{numl, r
print("The result ii
elif choice == '2':
result = subtract(n1
print{"The result i:
elif choice == '3':
result = multiply(n1
print( "The resul t i:
elif choice == '4':
result = divide(num:
print( "The result ii
else:
print("Invalid inpu1
Рис.
4.10.
В верхней части чата с листингом кода показана строка меню
с вариантами действий, которые можно предпринять с кодом
С помощью первой кнопки () вы можете скопировать код, а вторая кнопка
>8 по
зволяет вставить скопированный фрагмент туда, где находится курсор в текущем
окне с файлом (альтернативный способ- комбинация клавиш
нажать
на
кнопку
с
тремя
горизонтальными
точками,
появятся
Ctrl+Enter).
Если
дополнительные
опции: вставка кода в новый файл или прямо в терминал. Кроме того, доступен яр
лык для создания нового
Jupyter Notebook-
/newNotebook. При этом необходимо
указать, какие именно действия должен выполнять создаваемый блокнот.
5
Данные команды также называются слэш-командами. -
Ред.
106
Глава
4
Вот несколько примеров промптов:
Промпт:
/newNotebook
Создайте с помощью библиотеки
блокнот для
matplotlib
представления данных из сsv-файла
Промпт:
/newNotebook
Создайте блокнот для предварительной обработки и
очистки набора данных для машинного обучения
Промпт:
/newNotebook Создайте
с помощью
scikit-learn блокнот для
реализации
простой модели линейной регрессии
Промпт:
/newNotebook Создайте
Промпт:
/newNotebook
блокнот для анализа данных временных рядов
Создайте блокнот для анализа данных с веб-сайта
В чате также вы можете использовать команду /terminal, позволяющую задавать
вопросы или получать помощь по работе с терминалом или командной строкой.
Например, узнать о навигации по каталогам, запуске скриптов или установке паке
тов. Вот некоторые промпты:
Промпт:
/tenninal
С помощью какой команды можно вывести все переменные
окружения?
Промпт:
/tenninal
Как использовать утилиту
grep
для поиска определенного
текста в нескольких файлах?
Промпт:
/tenninal
Как использовать команду
find
для поиска файлов по их раз
решениям?
Промпт:
/tenninal
Как перенаправить вывод команды в файл?
Промпт:
/tenninal
Как использовать
awk для
обработки текстовых файлов?
Есть еще один ярлык. Это: @vscode, называемый агентом. С его помощью вы може
те задавать вопросы или получать помощь по некоторым аспектам
VS Code,
таким
как функции, навигация, конфигурация или расширение.
Вот несколько примеров промптов:
Промпт:
@vscode
Как разделить окно редактора на несколько окон?
Промпт:
@vscode
Как настроить сочетания клавиш?
Промпт:
@vscode
Как настроить многокорневое рабочее пространство?
Промпт:
@vscode
Как настроить автоматизацию задач в
Промпт:
@vscode
Как настроить и использовать
VS Code?
Docker в VS Code?
Наконец, существует команда /api. Вы можете задать вопросы или обратиться за
помощью по различным аспектам разработки или использования
API,
включая соз
дание, тестирование или интеграцию. Вот несколько примеров промптов:
Промпт:
/api
Как сделать РОSТ-запрос с данными
Промпт:
/api
Как решить проблемы
Промпт:
/api
Как аутентифицировать пользователя в
Промпт:
/api
Как сделать пагинацию результатов в
Промпт:
/api
Как версифицировать
CORS
API
в
в
JSON
в
Node.js?
Express.js API?
Django REST API?
Rails API?
ASP.NET Core?
107
Github Copilot
Вы также можете использовать команду /api в контексте
VS Code:
Как создать новую команду в расширении
VS Code?
Промпт:
@vscode /api
Промпт:
@vscode /api
Как прочитать и записать настройки в расширении
@vscode /api
Как создать новую панель веб-просмотра в расширении
@vscode /api
VS Code?
Как взаимодействовать с файловой системой в расшире
VS
Code?
Промпт:
VS Code?
Промпт:
нии
Промпт:
@vscode /api
Code Extension?
Как добавить новый элемент на панель действий в
VS
Обратите внимание, что если вы хотите очистить чат, следует использовать коман
ду
/ clear.
Внутренний чат
Вы можете использовать функцию чата в своем списке кодов. Выделите нужный
код, а затем нажмите сочетание клавиш
Ctrl+I
для
Появится всплывающее окно, показанное на рис.
Х
♦
test.py
D:
>Тетр > ♦
1
ЕВ Расширение: G1tHub Copi/ot С/юt
::
Windows
4.11.
или
Cmd+I
для
macOS.
1>
Параметры
ш
test.py
def add{x, у):
1-------;:;::=== =======================:::: :;-- :;:;___ _
1 -----:l~\дslc=c=op=ilo=t==================G=~=-·=·1=v=®==~=l,,,=v=l~x-~~
:в,iЕ:::..;
2
3
4
5
6
7
1"•
retum х + у
def subtract(x, у):
return х - у
def 11ultiply(x,
Рис.
По данным
у):
4.11.
Функция внугреннего чата позволяет вести чат внутри кода
GitHub,
встроенный чат
(Inline Chat)
стал популярной функцией, по
средством которой разработчик может оставаться в своем «потоке».
Используйте ярлыки, о которых мы рассказывали ранее, чтобы задавать вопросы о
коде. Объяснения появятся на панели чата.
Обратите внимание, что рядом с кодом также есть оранжевый значок с изображе
нием искры. Если нажать на него, то будет выведено несколько вариантов исправ
ления кода, его объяснения или переписывания, что показано на рис.
4.12.
Давайте попробуем рассмотреть пример с использованием встроенного чата. Мы
будем использовать этот запрос:
Промпт: Создайте функцию для пузырьковой сортировки.
Глава
108
4
х
•
testpy
С:
>Users >ttaul >OneOrive >Desktop > ♦
testpy
>GJ add
1
2
з
4
5
def subtract(x,
return х - у
у):
1
б
Рис.
Нажатие на значок с изображением оранжевой искорки,
4.12.
чтобы напрямую взаимодействовать с кодом
Чат для этого запроса создаст код. Но предположим, что мы хотим узнать, сущест
вует ли более быстрый способ сортировки. Выделите интересующую вас функцию
и запустите встроенный чат. На рис.
4.13
показан ответ.
•
+~
---·---------OIIJQ[J
...,
С>8
:-n.---"---"'--~'~--~-~ -
81'V
foiiltfllOQ:ipl,rA
°'''°"""..,'na
•11r.
"":'f"'S
, ------------~••У
...i._-t.... )
-
-..°""'""ом")-
.... 1..-( .... J
№1.111
х
1t
.-...----·----
.....,..,,.),
,1:t•
._. :t1n~ur;•;..:в:J•t\"arrlJ•lJ,'"'OJ
$
::.......,..;;.Ь.
А
::::;.:=.::.·~·~-;~:.......~-=.::=_~·-~.......
- ......
---------•-
"
?
,. .. ,...-.~..,..-1.,_...._ • ..,-,l_2.•-~--IU•i.D"
,,,.,,{j), ......
·-- - 1 ._..-( .... ) :
... i.,.(...-)
f r 1 111 r-.(•) :
,_.j1"1r-.(1,•-1.-1):
"-·н1~--u.11,
....UI, ...-\'l •1 J- ....IJ • 11, -iJ1
~=-~---
o,,,.s..,- _.-1111: 11«
оо:=~ -.;.;
•
.......
с-
.......... . .
m
Рис.
,-:,,..
...
~
-
4.13. Внуrренний чат ответил на просьбу создать более быструю сортировку,
чем пузырьковая сортировка, показанная выше
Chat
предлагает быструю сортировку и показывает ее в режиме сравнения. 31·0 по
зволяет быстро сопоставить два подхода. Вы можете принять новый код целиком
или только его отдельные фрагменты.
Открытые вкладки
При работе над типичным проектом по разработке программного обеспечения сре
да разработки обычно содержит множество файлов, каждый из которых выполняет
свою функцию в общей структуре приложения. Например, в веб-проекте на
можно найти файлы с расширениями
.jsx
и
.js
для компонентов,
HTML-
и
React
CSS-
Github Copilot
файлы для верстки и стилей, а также вспомогательные файлы
такие как
-
1 109
.json
и
.env.
Что это значит для
Copilot?
Это большое подспорье. Чем больше контекста он по
лучает, тем точнее становятся его предложения.
Copilot
учитывает содержимое те
кущего файла, над которым вы работаете, и использует его для генерации кода.
Однако другие открытые файлы он анализирует избирательно
-
только те, что
действительно имеют отношение к вашей текущей задаче. При этом весь остальной
проект
Copilot
не сканирует, вероятно, из соображений конфиденциальности.
Интерфейс командной строки
Copilot
ме доступны две ключевые функции: объяснение команд
подходящих вариантов
(suggest).
Для этого вам нужно установить приложение
каунт
(CLI). В этом режи
(explain) и предложение
можно использовать и в интерфейсе командной строки
GitHub CLI,
а затем войти в свой ак
GitHub:
gh auth login
Далее вам предстоит установить
gh ex t ension install
Copilot:
githuЬ/gh-copilot
Приложение можно обновить:
gh e xtension upgrade gh-copilot
Ниже показан пример, как можно попросить приложение
Copilot CLI
команду хсору:
gh copilot explain
Ответ
Copilot CLI
хсору
показан на рис.
Рис.
4.14.
4.14.
Результат команды
gh copil o t explain
хс о ру
объяснить
110
Глава4
Здесь показано, как заставить
Copilot предложить
команду:
gh copilot suggest
Далее
Copilot
поинтересуется, для какой команды вы хотите получить помощь
-
общей команды оболочки, команды gh или команды git. Укажите это. Затем он
спросит, какое действие должна выполнить команда. Ниже приведен пример:
Промпт:
What are the commands for viewing and setting environment variaЬ\es in
the system? - С помощью каких команд можно просматривать и устанавливать
переменные окружения в системе? 6
На рис.
4.15
показан ответ
Copilot,
в котором содержатся рекомендации по исполь
зованию команд. Вы этот ответ можете скопировать или попросить
Copilot
о до
полнительной помощи, например, объяснить команду или пересмотреть ее.
Рис.
4.15.
Функция рекомендаций
Copilot CLI
предлагает команды
в соответствии с указанными вами параметрами
Партнерская программа
Copilot
Разработчики нередко улучшают свои приложения и расширяют работу с данными
с помощью сторонних инструментов. Возьмем, к примеру, приложение
Splunk.
Это
замечательное средство для анализа журналов и данных. Разработчики используют
Splunk,
чтобы следить за своими приложениями и быстро устранять проблемы бла
годаря мощным функциям поиска и отчетов. Есть еще приложение
New Relic,
при
званное обеспечить бесперебойную работу вашей программы. С его помощью вы
сможете в режиме реального времени получать информацию и проводить диагно6
Пока еще Copilot для GitHub CLI не умеет работать с русским языком, поэтому промпты
приходится писать исключительно на английском.
-
Ред.
111
Github Copilot
стику, выявлять и устранять проблемы с производительностью и улучшать работу
программного обеспечения. Не стоит забывать и о приложении
Datadog.
Это глав
ный инструмент для мониторинга инфраструктуры и приложений. Благодаря ши
рокому диапазону возможностей внедрения,
позволяет разработчикам со
Datadog
бирать, сводить воедино и отображать данные из самых разных мест, помогая
принимать разумные решения о том, как повысить производительность и управлять
ресурсами.
Учитывая важность этих систем,
GitHub
запустил партнерскую программу
Copilot.
В ней представлена расширенная линейка популярных приложений, которые мож
но установить в виде плагинов.
Одним из первых партнеров в этой программе стала компания
плагин
Astra DB -
DataStax,
создавшая
векторную базу данных, предназначенную для создания пере
довых ИИ-приложений. Благодаря этому плагину разработчики с помощью
Copilot
могут ускорить создание базы данных. Например,
Chat
Chat
дает рекомендации
по структуре и метаданным базы данных в соответствии со стандартами кодирова
ния. В результате код становится более аккуратным и простым в обслуживании.
Чтобы задать вопрос
(https://oreil.ly/4QQrB),
используйте тег @datastax. Некото
рые образцы запросов содержат следующие вопросы:
Промпт: Расскажите о моей базе данных
chat_prod.
Промпт: Расскажите о схеме таблицы.
Промпт: Напишите SQL-зaпpoc для чтения из таблицы чата.
~
Мэри-Бренда Акода
(Mary-Brenda Akoda),
исследователь в сфере искусст
венного интеллекта, имеющая патент в области применения ИИ в офталь
мологии, является заядлым пользователем
ды я с помощью
Copilot
Copilot.
Она говорит: «Однаж
написала код для всего процесса разработки
модели менее чем за час. Обычно эта задача потребовала бы гораздо
больше времени и усилий. И я обратила внимание, насколько может быть
утомительным и медленным процесс кодирования при использовании он
лайновой среды разработки, не поддерживающей
Copilot».
Заключение
Copilot
быстро занял место незаменимого инструмента для кодирования, основан
ного на ИИ, значительно повысив производительность разработчика и качество ко
да. В этой главе вы узнали о ключевых особенностях
Copilot,
включая способность
предлагать сложные блоки кода, надежные меры безопасности, впечатляющую
производительность и простоту использования в VS Code. Такие функции, как Chat
и
Inline Chat
Copilot, позволяют взаимодействовать с ИИ в про
Copilot все еще остается инструментом, нуждающимся
(встроенный чат) в
цессе написания кода. Хотя
в человеческом руководстве, это определенно взгляд в будущее программирования,
управляемого искусственным интеллектом.
ГЛАВА
5
Остальные инструменты
программирования на основе
искусственного интеллекта
Хотя
GitHub Copilot
и считается флагманом среди инструментов, помогающих в
программировании с применением ИИ, он далеко не единственный. Разработчики
нередко используют сразу несколько подобных решений, комбинируя их в зависи
мости от задач. Хорошая новость в том, что большинство этих помощников работа
ет по схожим принципам, так что переход от одного к другому не вызывает труд
ностей. Почти все они отвечают на запросы в виде промптов, предлагают полезные
сочетания клавиш и обеспечивают удобный чат-режим для взаимодействия.
В этой главе мы познакомимся с различными НИ-инструментами, которые могут
стать незаменимыми в повседневной работе программиста. Речь пойдет как о раз
работках крупных компаний
-
например,
Amazon, -
так и о продуктах молодых
стартапов. Кроме того, мы затронем проекты с открытым исходным кодом, такие
как
Code Llama
от
Meta, -
ведь и они нередко предлагают впечатляющие возмож
ности.
CodeWhisp&rer от Amazon
Amazon CodeWhisperer- это как
VS Code, PyCharm и
работки, как
швейцарский армейский нож для таких сред раз
А WS
Lambda.
Этот инструмент работает на базе
большой языковой модели, обученной на огромных объемах кода и понимающей
15
языков программирования.
Amazon
осторожно подходит к добавлению новых
языков, делая упор на точность и безопасность, а не на скорость выхода на рынок.
Существует две версии
♦
CodeWhisperer:
Версия Individual бесплатна - просто зарегистрируйтесь, используя свой А WS
Builder 1D или учетную запись Amazon. Программа предоставляет рекомендации
по коду, отслеживает, откуда берется открытый код, проверяя его безопасность.
♦
CodeWhisperer Professional
стоит
В нем есть все, что и в версии
19 долларов в месяц для одного пользователя.
Individual, плюс несколько дополнительных
функций, полезных для крупных компаний. Это такие функции как система ад-
Глава
114
5
министрирования, позволяющая управлять тем, кто к чему имеет доступ, и даже
контролировать тип используемых данных из открытых источников.
Самое ценное в версии
Professional - это возможность настройки. Специалисты
CodeWhisperer так, чтобы он выдавал более точные
компании могут настроить
рекомендации по коду, основанные на собственных библиотеках компании, ин
терфейсах программирования и фреймворках. А это, в свою очередь, означает
более высокое качество и сокращение временных затрат на устаревший код.
В версии
Professional
вы можете выполнить до восьми различных настроек.
Давайте рассмотрим две основные функции
♦
CodeWhisperer:
Система отслеживания ссылок следит за тем, как ваша программа сопоставляет
листинги с открытым кодом, показывая, какие лицензии используются для его
распространения. Это позволяет оставаться на стороне закона и прав защиты ин
теллектуальной собственности. При отслеживании ссылок приводится аннота
ция к репозиторию проекта, ссылка на файл и информация о лицензии. Данная
функция может быть полезна при принятии решения о том, стоит ли, исходя из
требований соответствия вашей организации, использовать предложенную ре
комендацию или нет.
♦
Сканирование безопасности выполняется в вашей среде разработки. При этом
проверяются
уязвимости,
включая
1О
наиболее
Application Security Project (OWASP) и списки
(CWE). Проверка учитывает даже накопленный
опасных
угроз
Open Web
Common Weakness Enumeration
передовой опыт для криптобиб
лиотек. Если проверка безопасности обнаружит уязвимость, вам будет предло
жено несколько вариантов ее устранения. Данная функция ускоряет работу и
снижает затраты на разработку. Учитывая особенности кода, генерируемого ис
кусственным интеллектом, наличие такой встроенной функции безопасности
-
огромный плюс.
Преимуществом
CodeWhisperer является его взаимодействие с сервисами AWS
(Amazon Web Services). Это означает, что разработчикам не нужно быть «волшеб
никами» из А WS или перелопачивать кучу документации, чтобы использовать этот
сервис. Вот несколько примеров написания промптов:
Пршипт:
#
Прттт:
ка
#
Kinesis.
Пролтт:
Напишите функцию
Python для
Создайте обработчик
# Напишите
метод
загрузки файла в хранилище SЗ.
Python Lambda
Java для
для обработки записей из пото
выборки элементов из таблицы
DynamoDB
по ключу сортировки.
Промпт:
#
Напишите Ьаsh-скрипт для остановки экземпляра ЕС2 по идентифи
катору экземпляра с помощью А WS
Прош1т:
CDK
Amazon
в
# Создайте
Type-Script.
экземпляр
CLI.
RDS
провела исследование клиентов
использующих
CodeWhisperer,
с движком
PostgreSQL,
используя А WS
(https://aws.amazon.com/codewhisperer),
27%
и обнаружила, что в среднем разработчики на
Остальные инструменты программирования на основе искусственного интеллекта
чаще успешно завершали задачи и делали это на
58%
1
115
быстрее, чем разработчики,
не применявшие этот инструмент.
Возьмем, к примеру, опыт компании
Accenture.
Использование
CodeWhisperer
в
проектах по созданию искусственного интеллекта позволило сократить время раз
работки на
30% (https://oreil.ly/SFmVt).
Такие задачи, как предварительная обра
ботка данных, обычно отнимающая много времени и сил, стали выполняться гораз
до быстрее и эффективнее. Просто используя промпты, подобные приведенным
ниже, разработчики значительно повышают свою производительность:
Промпт:
Создайте сценарий класса предварительной обработки данных для
#
МL-данных.
Обратите внимание на кейс компании
Persistent Systems -
международной фирмы,
специализирующейся на цифровых технологиях. Ранее новым разработчикам тре
бовалось около четырех месяцев, чтобы пройти обучение и полноценно включиться
в работу над проектами. Однако с внедрением
сократить до одного месяца
Duet AI
от
CodeWhisperer
(https://oreil.ly/K4ovC).
Google для
это время удалось
разработчиков
Компания Google разработала приложение Duet AI for Developers 1• Этот замеча
тельный инструмент программирования на основе искусственного интеллекта под
держивает такие
среды разработки, как VS Code, IntelliJ, PyCharm, GoLand,
WebStorm, Cloud Workstations и редактор Cloud Shell. Кроме того, он работает с
более чем 20 языками программирования. В его основу лег Gemini лучшая
большая языковая модель от Google.
В
Duet AI
есть все функции, которые обычно присущи системам программирования
с искусственным интеллектом. Например, чат. Кроме того, здесь предусмотрены
кнопки быстрого доступа, называемые «умными действиями». Эти действия пред
ставляют собой «магические трюки», выполняемые одним щелчком мыши. Напри
мер, объяснение кода или модульные тесты.
Разработчики
ложении
Duet AI
также серьезно относятся к вопросам безопасности. В при
предусмотрены
Private Google Access
все необходимые меры
защиты,
(для безопасного доступа к сервисам
включая поддержку
Google
без выхода в ин
тернет), контроль служб УРС и корпоративный контроль доступа.
Важно помнить и о правилах управления данными. При передаче кода в
Duet AI
можно быть уверенным: он не используется для обучения универсальных моделей
или создания сторонних программных продуктов. Контроль над данными и интел
лектуальной собственностью остается полностью за вами. Более того,
1
Duet AI
от-
В феврале 2024 Duet AI бьm переименован в Gemini для Google Workspace, чтобы объеди
нить линейку
Google AI
под одним брендом
- Gemini.
https://www.businessinsider.com/google-ai-bard-gemini-ai-generative-Um-alphabet-rebrandduet-2024-2. - Ред.
См.
116
Глава
5
слеживает и помечает фрагменты, которые, по его оценке, могут совпадать с кодом
из общедоступных репозиториев.
Важной частью стратегии
Google
в отношении
Duet AI
является создание обшир
ной партнерской экосистемы. Например, некоторые партнеры предоставляют раз
работчикам поддержку в
давать
более
Google Cloud
эффективные
для определенных сред. Это позволяет соз
рекомендации
по
коду,
а также
документацию
и
источники знаний. Вот несколько примеров:
♦
Elastic
Это крупная фигура в области поисковой аналитики. Интеграция с
Duet AI
по
зволяет разработчикам получить подробную информацию о том, как запраши
вать, тестировать и работать с данными от
♦
Elastic,
не выходя из среды разработки.
HashiCorp
Ведущий поставщик программного обеспечения для автоматизации облачной
инфраструктуры. Компания создала систему, которая упрощает. использование
Terrafonn для написания конфигураций
Language (HCL) и автоматизаций.
♦
на основе языка
HashiCorp Configuration
MongoDB
Это лидер в области баз данных
Используя
NoSQL.
Duet AI,
вы можете полу
чить доступ к самому передовому опыту и помощи в создании приложений.
♦
Neo4j
Одна из самых популярных баз данных графов. Вы можете использовать
для получения консультаций по таким вопросам, как язык промптов
Duet AI
Cypher. Это
позволяет обнаружить скрытые взаимосвязи и закономерности в сложных набо
рах данных.
Но у
Duet AI
в запасе есть интересный трюк
Чтобы воспользоваться
Cloud Assist chat
Duct AI,
он встроен в консоль
-
просто нажмите кнопку
Google Cloud.
Open or close Gemini
в правом верхнем углу главного экрана консоли. После этого
появится панель чата, как показано на рис.
5.1.
Вы можете вводить промпты для
таких задач, как создание скриптов, анализ журналов или работа с
Этот чат доступен даже в
Google Log Explorer.
JSON.
Если вы обнаружили журнал, кото
рый доставляет вам проблемы, выделите его и нажмите кнопку
Explain this Log
(Объяснить этот журнал). Журнал будет выведен на панель чата, и вы сможете по
лучить разъяснение и рекомендации по устранению проблемы.
Стоимость использования
Duet AI
составляет
19
долларов США на одного пользо
вателя в месяц. Кроме того, существует предоплата за годовое обслуживание. Если
вы являетесь новым клиентом
дит в размере
Google Cloud,
вам предоставляется бесплатный кре
300 долларов.
Компания
Turing AI,
предоставляющая услуги в области технологий искус
ственного интеллекта, использует
ного
повышения
Duet AI.
производительности
{https://oreil.Iy/76D75).
Она смогла добиться значитель
команды
разработчиков
на
33%
Остальные инструменты программирования на основе искусственного интеллекта
Cloud Assist
1111,1
1
117
х
Welcome to Gemini
Gemini Cloud Assist is an Al-powered collaЬorator to
help you get more done faster. Get answers to your
questions aЬout Google Cloud products and Ьest
practices. and retrieve information aЬout your cloud
resources.
Gemini Cloud Assist is а preview product, and may
display inaccurate information. Your prompts аге never
used to improve the model. Leam more 0
Get Gemini Cloud Assist
Learn more about Gemini Cloud Asslst 0
Рис.
5.1.
Если нажать кнопку
Open or close Gemini Cloud Assist chat,
Gemini (Duet AI) в Google Cloud.
справа появится панель чата для
Tabnine
Компания
Tabnine
является пионером в области инструментов для программирова
ния на основе ИИ. Все началось в
Яхав
(Eran Yahav)
2013
году, когда Дрор Вайс
(Dror Weiss)
и Эран
основали эту компанию. Они работали в сфере программного
обеспечения с 1990-х годов, специализируясь на анализе и моделировании кода.
Но именно практический опыт работы и понимание вех сложностей разработки
привел их к озарению: а что, если искусственный интеллект станет решением этой
проблемы?
И действительно, идея оказалась правильной. Однако это было еще до эпохи моде
лей-трансформеров. Не имея других вариантов, основатели засучили рукава и по
строили свои собственные модели. Это исследование помогло им глубоко понять
роль ИИ в разработке программных продуктов. За последние несколько лет компа
ния
Tabnine перешла
на трансформерную модель.
Компания инвестировала значительные средства в системы безопасности. Вот как
это работает: когда вы набираете код, каждый символ токенизируется и шифруется
Глава
118
5
перед отправкой на сервер
и локально.
Tabnine
который может располагаться как в облаке, так
Tabnine,
старается не хранить ваши данные, и ни один сотрудник не
сможет их прочитать. Кроме того,
Tabnine
гарантирует соответствие стандарту
SOC-2 2 .
Для обучения своей модели в компании используют открытый исходный код с раз
решительными лицензиями МIТ,
Apache
и
BSD,
что важно для организаций, кото
рые стремятся защитить свою интеллектуальную собственность. В
Tabnine
также
ценится прозрачность кода, который она использует для обучения. Здесь разработ
чикам
предоставляется
возможность
отказаться
от
использования
которые могут быть использованы в обучающих наборах данных
репозиториев,
Tabnine.
Это сви
детельствует об осторожном подходе компании к лицензированию, когда речь идет
об обучении генеративных моделей.
Структура ценообразования
♦
План
Starter
Tabnine
состоит из трех уровней:
является бесплатным и предназначен для индивидуальных пользо
вателей, предлагая базовые функции, такие как завершение коротких кодов и
поддержка сообщества.
♦ Стоимость тарифного плана
составляет
Pro
12
долларов в месяц на одного поль
зователя. План предназначен для профессиональных разработчиков и неболь
ших команд и содержит расширенные функции, такие как завершение кода в ви
де целой строки и полной функции, а также завершение кода на естественном
языке, со стандартной поддержкой.
♦
План
Enterprise
предназначен для крупных организаций, стремящихся к ком
плексной безопасности, контролю и настройке. В нем предполагается неограни
ченное количество пользователей, частные и пользовательские модели искусст
венного
интеллекта,
частные
варианты
развертывания
и
премиум-поддержка.
Цены предоставляются по запросу.
собрал большую пользовательскую базу, насчитывающую более миллиона
Tabnine
ежемесячных пользователей и сотни тысяч ежедневных пользователей. Среди из
вестных
клиентов
Amazon, Netflix
и
компании
-
такие
технологические
гиганты,
как
Google,
Atlassian.
Replit
Replit --
это универсальная веб-среда для разработки приложений, поддерживаю
щая множество языков программирования и позволяющая размещать приложения в
интерактивных средах, называемых
в среде
repls.
Богатые возможности совместной работы
Google Docs. Настольная версия среды
доступна для macOS, Wiпdows, Linux, Android и iOS. У платформы есть многочис
ленное сообщество, насчитывающее около 23 миллионов разработчиков.
2
Replit
схожи с теми, что доступны в
Международный стандарт отчета для системы управления рисками кибербезопасносm. -
Пер.
Остальные инструменты программирования на основе искусственного интеллекта
1
119
Компания
Replit (https://Ьlog.replit.com/ai4all) была основана в 2016 году Амджа
(Amjad Masad), Фарисом Масадом (Faris Masad) и Хайей Одех (Науа
Odeh). Идея создания Replit была задумана Амджадом за десять лет до ее создания.
дом Масадом
В течение этого периода Амджад оттачивал свои навыки, занимая инженерные
должности в
и
Yahoo!
Facebook,
уделяя особое внимание созданию средств разра
ботки. Он также участвовал в создании
Codecademy,
что еще раз подтверждает его
приверженность инновационным технологиям и образованию в области програм
мирования.
В
♦
Replit есть три
варианта подписки:
Бесплатный уровень предоставляет неограниченное количество публичных реп
лик (ответов) и
♦
План
«Hacker»
lО
Гб хранилища.
(Хакер) стоит
7 долларов
в месяц на одного пользователя и пред
лагает неограниченное количество личных реплик. В нем предусмотрены раз
личные уровни памяти и хранилища для удовлетворения разных потребностей.
♦
Стоимость плана
Pro -
20 долларов в месяц на одного
«Hacker» (Хакер). Кроме
в себя все, что входит в план
пользователя и включает
того, хотя базовая систе
ма для разработки кода доступна на каждом из нижних уровней, пользователи
Pro
получают эксклюзивный доступ к самой мощной модели искусственного
интеллекта и расширенным функциям, обеспечивающим более надежный под
ход к разработке кода.
«Replit - это универсальная платформа для создания программного обеспече
ния, говорит Дэвид Хоанг (David Hoang), вице-президент по маркетингу и ди
зайну Replit. Система управления продуктом призвана уменьшить трудности,
возникающие в процессе разработки ПО: среда разработки, создание кода и развер
тывание в производстве. Благодаря этой возможности в
Replit
можно интегриро
вать искусственный интеллект не только для генерации кода. Наша модель генера
ции кода также опирается на нашу собственную языковую модель».
Большая языковая модель от
живает около
30
Replit
обучена на одном триллионе лексем и поддер
языков программирования. При работе в этой среде учитываются
не только фрагменты кода, размещенные в публичных репликах, но даже нажатия
клавиш
-
они могут использоваться для дальнейшего обучения модели. Если вы
хотите сохранить конфиденциальность своей работы и исключить ее из обучающе
го корпуса, реплику можно сделать приватной. При этом ваши авторские права на
код остаются неизменными:
Replit
не получает на него дополнительных прав. Сле
дует лишь помнить, что при публикации реплик они автоматически лицензируются
по условиям МП-лицензии, как указано в политике платформы.
На рис.
5.2
показана среда разработки. Слева вверху находится дерево файлов и
окно поиска. В центре расположен редактор, а вывод (например, консоль) отобра
жается в правой части экрана. Слева внизу показаны доступные инструменты. Если
вы выберете вариант
AI,
на правой панели появится чат.
5
Глава
120
1] ~ • а Tesl Program •
~
ffi
Search
•
-
►
main.py ,с
Q
Run
+
•··
CIFormat
.ma!n,PV > ..
•
1 , write btnaгy search function
2" def Ы.nary_s earch(arr, х) :
# i.nita\.i.ze tow and hi.gh
З
low = 8
high = ten{aгr) - 1
б
1 wht.te low ls less than or equat to high
7.
whi.le low <= high:
mai11.py
Раска~r
flles
D
locol
•
poet,y.lock
+ wprojec1.1oml
х <
eti..f
19
•
Replit AI
Use Reptit AI to set up new projects, aпswef questions
aЬout your code, and assIst уоuг think1ng.
J
arr[ai.d]:
# set high to the niiddle tndex
1
high = mid - 1
23
retuгn
•
25
OE'ploy~t$
ф
1
24
22
I,,•
+
1
Q AI
21
х
,1
11 lf х is greater than the mi.ddle i.ndex
etse:
I set low to the 11\ddle index + 1
tow = mi.d + 1
1 return 1 tf х ts not found
.
AI
,1
return 111id
# i f х i.s less than 1:he mi.ddle index
17
18
Q ?
11/1 Oeploy
\!
_
I return the middle t ndex
13
14
15
ТооЬ
l',• lnvite
Shetl
# flnd mi.ddle index
•id = (low + high) // 2
# if х is equat to the mi.ddle i.ndex
i.f х = arr[mid]:
18
11.
12
v
O
>_ Console
f1nd ь.,аs 1n mвJn.py
~ t'Xr .in Нowdoet ma1n..pyWOfk?
-1
~ AuU1entice.1ion
р
см,
Q
('.ode Seerch
>_
Coosole
4>
Ctr1SMtF
Туре
Join Replit Со,е
Рис.
5.2.
n'te'Ssage...
Р Ask AJ ..,
х
о А1
{.,} Pylhon
Ln 1, COl 1
Пользовательский интерфейс
~ maln.py "
• Spaces: 2 H/stOfY $
Rep\it содержит дерево
файлов и окно поиска,
кнопки выбора инструментов, окно редактора и панель вывода
Если выделить код и нажать правую кнопку мыши, появятся следующие опции:
♦
Пояснения
В
Replit
предусмотрена функция, с помощью которой вы получите пояснения к
вашему коду. Если пояснение не совсем подходит, вы можете просто нажать
кнопку
Retry
(Повторить действие), чтобы попросить
сделать еще одну
Replit
попытку. Кроме того, если у вас есть конкретные вопросы, в открывающемся
меню в верхней части окна
Explain
доступна опция
Ask Chat
(Спросить в чате).
предоставляет и другие полезные функции, такие как
Ask Replit (Спро
Replit), Documentation (Документация), Edit Code (Правка кода) и
Generate Code (Генерация кода), чтобы помочь вам с кодированием.
Replit
сить у
♦
Измененить
В
Replit
(<Ctrl>+<I>)
у вас есть возможность изменять код с помощью промптов. Например,
если вы выделили участок кода для бинарного поиска, вы можете написать
промпт на преобразование этого кода, написанного на языке
JavaScript.
Python,
в функцию
Кроме того, можно попросить изменить код, чтобы использовать ре
курсивный подход. Функция
Modify
(Изменить) предлагает гибкий и интерак
тивный способ по экспериментированию с кодом и его доработке.
Остальные инструменты программирования на основе искусственного интеллекта
1
121
Чтобы продемонстрировать, насколько удобным и мощным является этот инстру
мент, давайте рассмотрим несколько любопытных примеров:
♦
Прuло.жение для лечения диабета
Когда лондонский iОS-разработчик Марван Эльвараки (Marwaв
Elwaraki)
узнал
о диагнозе «диабет» у своего младшего брата, он твердо решил создать прило
жение для контроля уровня сахара в крови. Он и его жена, Сальва Аль Аллами
(Salwa AI Alami),
решили совместными усилиями создать что-то полезное и
уникальное. «В самолете я разработал прототип виджета для экрана блокировки,
соединив приложение для виджетов с программным интерфейсом отслеживания
уровня сахара в крови и смог контролировать уровень сахара в крови моего бра
та,
-
говорит Марван.
-
Это было гораздо удобнее, нежели, чтобы увидеть по
следние показатели, каждый раз открывать приложение».
Они добавили кнопки для отправки сообщений и улучшили возможности от
правки СМС. Затем они опубликовали его как общедоступное приложение для
iOS
Арр
Store.
Хотя Марван был опытным разработчиком фронтенда для мобильных уст
ройств, у него было мало опыта работы с
Python
и бэкендом. а Салва была ме
неджером по продукту без опыта программирования. Сначала они использовали
но
ChatGPT,
Replit AI
помог им гораздо больше. «Инструменты на основе ИИ
помогли сгенерировать или, по крайней мере, перепроверить почти весь бэкенд,
написанный для моего приложения,
-
говорит Марван.
-~
Я слышал истории о
значительном повышении производительности разработчиков и могу честно
подтвердить это в своем случае».
♦ Хакатон и стартап
Прияа Калянараман
(Priyaa Kalyanaraman), занимавшая должность менеджера по
Microsoft, Snapchat и Waymo, не имела технического образования,
но это ее не остановило. Она, участвуя в хакатоне 3 Craft Ventures А! Hackathoв,
использовала Replit AI чтобы создать приложение, призванное упростить созда
продуктам в
ние контента и сделать этот процесс приятным. Ее усилия окупились с лихвой, и
она выиграла главный приз в размере
IО
ООО долларов. Используя свой опыт
управления продукцией, она тщательно подготовила подробные спецификации
и логически выстроила приложение. Это приложение-победитель впоследствии
стало основой для ее стартапа
Lica,
который успешно привлек предварительное
финансирование.
CodeGPT
CodeGPT (https://codegpt.co) -
это расширение, разработанное для
VS Code.
Этот
плагин предусматривает разные варианты использования, стоимость которых тоже
разная. Диапазон цен варьируется от бесплатного плана до премиум-уровня стои3
Хакатон -
это особый формат соревнования, где участники решают поставленную перед
ними задачу за определенный срок.
-
Пер.
Глава
122
мостью
49,99
5
доллара в месяц для каждого пользователя. Для тех, кто, прежде чем
оформить подписку, хочет протестировать сервис, предусмотрена 10-дневная бес
платная пробная версия.
(Файл). Затем щелкни
Чтобы настроить расширение
меню
те мышью на пункте
далее выберите меню пункт
tings
CodeGPT, выберите
Preferences (Параметры), и
File
Set-
(Настройки). На экране появится окно настроек. В левой части этого окна
щелкните мышью на пункте
Extension
(Расширения), а затем выберите пункт
CodeGPT.
Интересной особенностью
CodeGPT
является его способность интегрироваться с
OpenAI, Cohere, А121, Anthropic
API Hugging Face, вы получите доступ к
целым рядом больших языковых моделей. Например,
и другие. Если создать учетную запись в
широкому спектру платформ с открытым исходным кодом, что еще больше расши
ряет универсальность инструмента.
Выбрав модель, вы можете настроить ее с учетом следующих параметров:
♦ Максимальное количество токенов за промпт и ответ.
♦
Температура.
♦ Память окна (количество прошедших потоков в чате).
Еще одной интересной особенностью
CodeGPT
является его программный интер
фейс, предназначенный для таких приложений, как чат-боты, виртуальные помощ
ники или любые другие системы для понимания и генерации человекоподобного
текста. Его
RESTful API
обеспечивает широкую совместимость и простую интегра
цию с различными платформами. Кроме того, в
языках
API
Python
и
JavaScript,
CodeGPT
предусмотрен
SDK
на
что повышает универсальность его применения. Этот
является частью более широкого проекта по преобразованию процесса кодиро
вания, направленного на то, чтобы сделать сложные инструменты искусственного
интеллекта доступными для широкого круга разработчиков.
Cody
В
(Quinn Slack) и Беянг Лю (Beyang Liu) совместно основали
Sourcegraph с целью разработки инструментов для анализа кода. На соз
Sourcegraph Беяна подтолкнул опыт работы в Google, где он на собственном
2013
году Куинн Слэк
компанию
дание
опыте убедился в преимуществах внутренней платформы компании для поиска и
анализа кода, что было особенно полезно при работе с большими кодовыми базами.
Основной целью проекта
Sourcegraph стало
создание передовых инструментов для ра
боты с «большим кодом». Уровень сложности является серьезной проблемой в этой
области, о чем и говорится в опросе, проведенном
около
77%
Sourcegraph (https://oreil.ly/Pu6Gp):
разработчиков сообщили о пятикратном увеличении объема их кодовых
баз за три года. Более того,
72%
выразили обеспокоенность тем, что растущие объ
емы «большого кода» могут представлять реальную угрозу для инновационного
потенциала и конкурентоспособности их компании.
Остальные инструменты программирования на основе искусственного интеллекта
1
123
Искусственный интеллект играет важную роль в стратегии развития компании
Sourcegraph.
Компания разработала систему генерации кода на основе искусствен
Cody. Эта система основана на больших языковых
OpenAI. Также используется большая языковая модель
ного интеллекта под названием
моделях от
Anthropic
и
Starcoder.
«Мы использовали для этого инструмента наши поисковые возможности,
рит Лю.
-
Не забывайте, что
80%
-
гово
времени разработчик тратит на чтение и осмыс
ление кода, а не на его создание. Поэтому
Cody
сканирует всю кодовую базу. Но
мы также упрощаем внедрение других библиотек и фреймворков. Мы увидели, что
такой подход себя полностью оправдывает».
Вот некоторые промпты, которые можно использовать при работе с данной плат
формой:
Промпт: Как устроен этот репозиторий?
Промпт: Что делает этот файл?
Промпт: Где определен компонент Х?
Что касается цен, компания
Sourcegraph предлагает
один бесплатный и два платных
варианта:
♦
Бесплатный вариант включает в себя различные функции, такие как автодопол
нение кода, чат и анализ контекста.
♦
сию
♦
Pro стоит 9 долларов
Pro, вы получаете:
Версия
для одного пользователя в месяц. Используя вер
•
Неограниченное количество автодополнений кода, сообщений и команд.
•
Персонализацию при работе с большими кодовыми базами.
•
Многочисленные варианты использования больших языковых моделей в чате
•
Более высокий уровень технической поддержки.
Редакция
Enterprise
предназначена для крупных организаций. Она стоит
19
долл.
США за каждого пользователя в месяц и предлагает:
•
У правление пользователями.
•
Однопользовательское развертывание.
•
Ведение журнала аудита.
•
Использование в режиме общего доступа.
•
Ежедневные ограничения тарифов в бета-версии.
•
Веб и
•
Конфигурируемые большие языковые модели.
API доступ.
Чтобы оценить потенциал
мара
-
full-stack
Cody,
давайте обратим внимание на мнение Дипака Ку
разработчика и участника проекта с открытым исходным кодом.
Он говорит: «Для меня особенно важны чат и команды. Я использую чат, чтобы
получать ответы на вопросы, связанные с программированием, находить идеи для
Глава
124
5
старта проекта или исправлять ошибки. Команды
-
это заранее заданные пользо
вательские промпты, которые помогают быстро справляться с разовыми задачами,
такими как написание документации или добавление тестов».
В июле
Sourcegraph объявила о привлечении дополнительно
125 млн долларов (https://oreil.ly/bSI3N) при оценке
в 2,625 млрд долларов. Инвесторами выступили компании Andreessen Horowitz,
Insight Partners и Geodesic Capital.
2021
года компания
го финансирования в размере
CodeWP
WordPress-
это популярная система управления контентом
(CMS)
с открытым
исходным кодом, известная своей простотой использования и универсальностью, а
также широким выбором тем и плагинов. Изначально она создавалась как плат
форма для ведения блогов, но впоследствии стала использоваться для создания раз
личных типов сайтов, в том числе для электронной коммерции, представления
портфолио и ведения бизнеса. У
WordPress
удобный интерфейс и настраиваемые
опции. Значительная часть сайтов в Интернете располагается на
ным WЗTechs, около 45,8%
(https://oreil.ly/NiXTV).
WordPress:
по дан
всех сайтов в Интернете работают на этой платформе
Программирование с помощью искусственного интеллекта открывает широкие
возможности для развития
WordPress, и компания CodeWP воспользовалась этим
CodeWP была основана Джеймсом Лепажем (James LePage),
агентство WordPress еще в школьные годы. Хотя его бизнес быстро
потенциалом. Компания
который создал
развивался, он требовал больших трудозатрат. Внедрение технологии программи
рования с помощью ИИ позволило значительно сократить трудозатраты и повысить
производительность. Главным преимуществом стало глубокое понимание Джейм
сом распространенных сценариев использования
WordPress,
что еще больше повы
сило эффективность применения искусственного интеллекта.
CodeWP
предлагает веб-платформу с бесплатной версией и двумя премиум-вариан
тами. Оба премиум-плана предоставляют скидку до
♦ План
Professional,
стоимостью
18
33% на годовую
подписку:
долларов в месяц за пользователя, предостав
ляет дополнительные операции с искусственным интеллектом, проекты и
под
держку.
♦ Для более масштабных потребностей существует тарифный план
мостью
48
Agency
стои
долларов в месяц на одного пользователя. Он предназначен для про
фессиональных компаний, занимающихся веб-разработкой и маркетингом, с не
ограниченным количеством проектов и возможностями совместной работы.
Перейдите на сайт
CodeWP (https://codewp.ai/), чтобы создать учетную запись.
Нажмите кнопку Create New (Создать новый), а затем выберите New Soippet (Но
вый сниппет) для создания кода или New Chat (Новый чат), если у вас просто есть
вопросы.
Остальные инструменты программирования на основе искусственного интеллекта
1
125
В левой части экрана вы найдете опции для хранения сниппетов, а также для от
слеживания разговоров. Там же находится и список проектов. В центре вы увидите
редактор, в котором отображается содержимое редактируемого файла. Для созда
ния нового файла нажмите кнопку
New File
(Новый файл). В правой части экрана
располагается чат.
Вот несколько примеров промптов:
Промпт: Зарегистрируйте пользовательский тип поста
Промпт: Создайте виджет
класс
WordPress
"book"
под названием "Му
с меткой
Widget",
"Books".
используя
WP_Widget.
Промпт:
Создайте пользовательский активационный механизм плагина для
функции register_activation_hook.
CodeWP расширяет свою подцержку для различных ключевых компонентов экоси
стемы WordPress. Сюда входит совместимость с такими основными инструмента
ми, как WooCommerce, WPSimple-Pay, Gravity Forms, SearchWP, Contact Form 7 и
другими.
В
CodeWP
предусмотрена опция предварительного просмотра в реальном времени,
которая позволяет быстро смоделировать, что будет делать ваш код. Это упрощает
тестирование и отладку. Кроме того, при работе над проектами
WordPress, CodeWP
значительно облегчает процесс развертывания. Его интегрированные инструменты
позволяют легко перенести код на сайт
WordPress,
что делает задачу применения и
тестирования кода в реальных условиях гораздо более эффективной.
Warp
Интерфейс командной строки
(CLI
или
command-line interface)
был создан еще в
1960-х годах, когда появились такие операционные системы, как
Хотя со временем были разработаны графические интерфейсы,
Multics
CLI
и
Unix.
в целом сохра
нил верность своим истокам. Суть командной строки заключается в простоте: вы
вводите свои команды обычным текстом и получаете в ответ только то, что вам
нужно, без всяких излишеств.
Несмотря на свою простоту, инструменты с командной строкой получили неверо
ятно широкое распространение. С их помощью можно обслуживать облачные сис
темы, работать с файлами и программами на компьютере, налаживать бесперебой
ную
работу.
Эти
команды
позволяют
автоматизировать
задачи,
обрабатывать
данные, управлять сетями и разрабатывать программное обеспечение.
Освоение командной строки позволяет заметно ускорить работу и повысить ее точ
ность. Одним из ключевых преимуществ является возможность комбинировать ко
манды для решения сложных задач. Благодаря программируемому подходу,
открывает широкие возможности для настройки и автоматизации
-
CLI
разработчики
могут адаптировать инструменты под свои нужды, выстраивая рабочий процесс
максимально эффективно и удобно.
126
Глава
5
Хотя инструменты командной строки обладают широкими возможностями, у них
есть и свои недостатки. Один из ключевых
они плохо подходят для совместной
-
работы, что может снижать общую продуктивность команды. Завершив сеанс в
терминале, вы теряете его историю и контекст. Кроме того, такие инструменты
обычно привязаны к конкретному устройству, что затрудняет переключение между
машинами. Немаловажно и то, что терминалы могут вызывать у пользователей
стресс
особенно при работе с нетривиальными задачами. Освоение команд и их
-
синтаксиса часто становится настоящим вызовом для новичков.
Так что да, в этой категории есть место для инноваций. И один из стартапов, кото
рый помогает в этом
Зак Ллойд
2020 году.
- Warp (https://warp.dev).
(Zach Lloyd),
основатель и генеральный директор, создал компанию в
До этого он работал в
Google
в качестве главного инженера
лицы. «Я работаю разработчиком уже более
20
лет,
-
говорит Ллойд.
Google Таб
- Хотя ин
терфейс командной строки является мощным, эффективным и очень полезным, в
нем я увидел много возможностей для совершенствования».
Warp
был создан на основе языка программирования
быстротой и эффективностью. Вместо обычного
ные стороны
Rust,
Rust, который славится своей
JavaScript, Warp использует силь
чтобы работать почти как приложение, которое вы установили
бы свой компьютер. Но вместо этого данное приложение находится прямо в вашем
браузере. Этот оригинальный подход к использованию
Rust
делает работу с
менее сложной и быстрой, а взаимодействие с приложением
Warp
более эффектив
-
ным.
Считайте
Warp
терминалом на стероидах. Он обладает расширенными возможно
стями ввода текста, такими как выделение, позиционирование курсора и меню за
вершения,
что
позволяет
пользователям легко
перемещаться
по
истории
команд.
Данная функция избавляет от необходимости прокручивать длинные тексты. Кроме
того,
В
Warp
Warp
позволяет скопировать вывод простым щелчком мыши.
каждая команда и ее результат образуют отдельный блок. Чтобы вернуться
к прошлой команде, достаточно навести указатель мыши на нужный блок. Выбрав
блок, вы можете использовать
Warp AI,
который доступен через контекстное меню
и предоставляет объяснения и решения для ошибок. Здесь проявляется большая
разница по сравнению с традиционными интерфейсами командной строки, которые
предлагают ограниченное руководство и в значительной степени зависят от опыта
пользователя в расшифровке сообщений об ошибках и устранении неполадок.
Warp AI также
оснащен функцией чата. Вы можете использовать ее, начав промпт с
символа#. Допустим, вы хотите узнать следующее:
Промпт:
#
Как использовать
grep
для исключения каталогов в рекурсивном
поиске?
Warp
предоставит ответ на заданный вопрос. И этот ответ вы можете скопировать в
терминал.
Не забывайте, что Ллойд
-
заядлый пользователь
Copilot для
Warp, -
разработок. «Я использую этот инструмент вместе с
инструменты очень хорошо работают вместе».
своих собственных
говорит он.
-
Эти
Остальные инструменты программирования на основе искусственного интеллекта
Большой поклонник
\ 127
Warp - Майк Кригер (Mike Кrieger), соучредитель Instagram.
Warp каждый день на работе. Больше всего мне нравится
Он сказал: «Я использую
скорость: как в плане того, как быстро он работает, так и в плане того, как вы чув
ствуете себя во время его использования. Особенно мне нравится ввод и поиск.
Warp
позволяет перенести терминалы в современность, и я не могу дождаться, ко
гда увижу, куда они приведут
Warp
Warp».
доступен для таких операционных систем как Мае,
веб-версия. Цены на
Warp разделены
Linux
и
Windows.
Есть и
на три категории:
♦
В рамках бесплатной версии вы можете ввести до
♦
Для более широкого использования существует вариант
20
промптов ежедневно.
Team,
который стоит
долларов в месяц для каждого пользователя, и предлагает до
100
12
промптов в
день.
♦
Крупным организациям с особыми требованиями стоит обратить внимание на
версию
Enterprise
с индивидуальной ценой в соответствии с потребностями за
казчика.
Bito AI
В
2006 году Амар Гоэл (Amar Goel) и Ананд Дас (Anand Das) основали компанию
PubMatic, специализирующуюся на онлайн-рекламе, а в 2020 году вывели эту кам
панию на биржу. Работа в компании PubMatic привела их к осознанию потенциала
ИИ для повышения эффективности кодирования, что и послужило толчком к соз
данию
Bito AI.
Мукеш Агарвал
(Mukesh Agarwal), имеющий опыт работы в качест
Microsoft и Emst & У oung, присоединился
ве ведущего специалиста по продуктам в
к ним в качестве члена команды основателей.
Bito
поддерживает
20 языков,
в том числе такие уникальные смеси, как хинглиш
-
сочетание хинди и английского.
В этом инструменте есть несколько примечательных функций. Одна из них позво
ляет
создавать
пользовательские
шаблоны
промптов
для
часто
используемых
структур программирования, что упрощает процесс разработки. Кроме того, плат
форма включает в себя проверку безопасности и производительности, предоставляя
для повышения безопасности и эффективности кода рекомендации по оптимизации.
В Bito имеется большое контекстное окно4, содержащее около 240 ООО лексем, что
расширяет возможности понимания и анализа. Кроме того, в системе используется
векторная база данных, локальная для машины пользователя. Это позволяет систе
ме более эффективно работать с большими кодовыми базами, обеспечивая получе
ние наиболее точных и уместных результатов. Данная возможность значительно
повышает эффективность и результативность инструмента по управлению мас
штабными проектами в сфере программирования.
4
Контекстное окно -
это количество текста, который искусственный интеллект может про
читать и записать в любой момент.
-
Пер.
Глава
128
5
Данный инструмент хорошо справляется с утечками памяти. Утечка памяти проис
ходит, когда программа захватывает часть оперативной памяти компьютера, а затем
забывает ее вернуть. Если это происходит постоянно, может возникнуть настоящая
головная боль. Пока работает программа с таким дефектом в коде, происходит по
стоянная утечка памяти. И в результате общее количество доступной оперативной
памяти значительно уменьшается. Это в свою очередь может замедлить работу сис
темы, поскольку, так как физической памяти не хватает, система начинает исполь
зовать дисковое пространство для подкачки. А если масштабы утечки становятся
действительно серьезными, то может даже произойти сбой программы или работы
вашего компьютера в целом, так как оперативная память закончится.
Утечки памяти обнаружить и устранить непросто. Обычно такой эффект сразу не
проявляется, а начинает давать знать о себе только, как программа проработает не
которое время. Такая задержка по времени еще больше усложняет процесс обнару
жения и устранения данного дефекта. Но
Bito
способен обнаружить потенциальные
утечки памяти. Для этого достаточно воспользоваться опцией
in IDE
(Вставить код, выбранный в среде
IDE)
Insert Code Selected
и вывести на экран промпт, подоб
ный этому:
Промпт: Идентифицируйте все проблемы с кодом.
И угадайте, что произойдет дальше? Инструмент не только выявляет проблемы, но
и предложит несколько вариантов их устранения.
Что касается конфиденциальности, то
Bito
не хранит ни одного вашего кода. Одна
ко он хранит метаданные, которые генерируются по ходу работы.
Доступны две версии:
♦
Предусмотрена бесплатная версия для индивидуальных пользователей.
♦
Платный вариант доступен по цене
15
долларов в месяц за пользователя. Сюда
входят такие функции, как неограниченное количество завершений кода искус
240
ООО то
Bito (https://oreil.Iy/xKYaw),
пользо
ственным интеллектом и доступ к обширному контекстному окну с
кенов, что улучшает качество программирования в целом.
~
По результатам внутреннего анализа
ватели инструмента сообщили о повышении производительности на
Кроме того, они использовали инструмент почти
стоящее время платформа насчитывает около
200
100 ООО
31 %.
раз в месяц. В на
пользователей.
Cursor
Разработчиком
Cursor (https://cursor.sh) является компания Anysphere.
(https://oreil.ly/E2IrW):
У компа
нии, безусловно, интересные планы
В ближайшие несколько лет мы хотим создать редактор кода, который будет бо
лее полезным, удобным и интересным, чем то, что когда-либо видел мир.
Cursor
Остальные инструменты программирования на основе искусственного интеллекта
1
129
должен стать местом, где не получится делать ошибки. Это будет редактор, в
котором вы сможете создавать 2000-строчные
PR
с помощью
50
строк псевдо
кода. Инструментом, где вы мгновенно получите ответ на любой вопрос по ко
довой базе. Возможно, даже с интерфейсом, в котором сам исходный код начи
нает растворяться
...
Тем временем проект
Cursor
по-прежнему остается достаточно привлекательным.
Он заинтересовал таких инвесторов, как
OpenAI. В октябре 2023 года компания
8 млн долларов, доведя общий объ
успешно привлекла финансирование в размере
ем привлеченного капитала до
Cursor предлагает
11
млн долларов.
на выбор несколько языковых моделей:
GPT-4
и
GPT-3.5,
а также
расширяет свои возможности за счет собственной модели. Эта модель включает
1,4 млрд
векторов и доступ к
150 ООО
кодовых баз. Кроме того, в платформу
встроены передовые методы искусственного интеллекта, такие как дерево Меркла,
что еще больше повышает ее эффективность.
Cursor - это форк программы VS Code, совместимый с операционными системами
Windows, Мае и Linux. В этом заключается главное преимущество, так как, после
того как вы установите Cursor, вам не придется изучать новую среду разработки.
Cursor позволяет импортировать существующие расширения VS Code. Вы можете
воспользоваться преимуществами его функций искусственного интеллекта прямо в
интерфейсе командной строки, легко внедряя расширенные возможности в при
вычную среду кодирования.
Например, в чате вы можете с легкостью импортировать документацию и задавать
по ней вопросы. Вот образец промпта:
Промпт:
@python docs
Или вы можете использовать символ
@ для
работы с конкретным файлом. Напри
мер, можете ввести что-то вроде:
Промпт: Что дeлaeт@the_app.ts?
В
Cursor
предусмотрена возможность отладки непосредственно в терминале. Его
искусственный интеллект просматривает ваши файлы и участвует в логическом
процессе, чтобы определить и попытаться решить найденную проблему, упрощая
процесс устранения неполадок.
Джеффри Байлз
(Jeffrey Biles), неб-разработчик
Cursor. Он сказал:
полного цикла, является одним из
первых пользователей
Мне очень нравится возможность быстрой загрузки контекста приложения в ИИ
с помощью одного нажатия клавиши. Это очень удобно во время ответов на во
просы, при запоминаниии синтаксиса, рефакторинге небольших участков кода и
написании шаблонов. Однако когда от него требуется понимание больших мо
делей данных, разбросанных по нескольким файлам, возможности
Cursor дости
гают предела. Но эта ситуация будет улучшаться по мере совершенствования
моделей, например, при использовании больших контекстных окон.
Глава
130
Тош Велага
5
(Tosh Velaga)-
еще один пользователь
Cursor.
Он инженер-програм
мист и основатель нескольких компаний по разработке искусственного интеллек
та, таких как ТуреЫосk (https://typeЬlock.co) и
генерации
для
программы
STBL,
занимающейся разработкой
изображений
реалистических
StaЫe
Diffusion
(https://staЫediffusionai.dev) на основе искусственного интеллекта по параметрам,
введенным пользователем в текстовом промпте. Тош Велага сказал:
"Мне очень нравится функция
Command+L,
позволяющая задавать вопросы о ко
де. Это очень полезно, когда я нахожусь в новой кодовой базе с бэкендом, напи
санным на языке, с которым у меня нет опыта работы. Эта функция помогла мне
гораздо быстрее войти в курс дела. Еще одним преимуществом, на мой взгляд, яв
ляется то, что вы можете использовать свой собственный ключ
экономить на стоимости и переключаться
API,
между GPT-3.5 и GPT-4".
что позволяет
Code Llama
Растет число проектов с открытым исходным кодом, ориентированных на разра
ботку с помощью ИИ, и в научных кругах это тоже актуальная тема. Одним из
громких
имен
в
этой
(https://ai.meta.com/llama)
2023 года.
области
является
Meta.
Ее
система
Code Llama
набирает обороты с момента своего запуска в августе
Code Llama построен на базе LLaMA 2 - большой языковой модели,
2 трлн лексем и длине контекста в 4 096 лексем. В состав системы
обученной на
входят точно
настроенные модели, которые были усовершенствованы в результате обучения на
миллионе с небольшим аннотаций, созданных человеком, что делает их еще более
эффективными и надежными.
LLaMA 2
включает в себя специальные версии, такие как
LLaMA 2-Chat,
которая
создана специально для работы с чат-приложениями и превосходит другие модели
чатов с открытым исходным кодом по ключевым показателям, особенно по полез
ности и безопасности. Кроме того, она объединена с такими платформами, как
Hugging Расе, и имеет близкие партнерские связи с такими
Microsoft и Amazon, для развертывания облачных сервисов.
Code Llama
компаниями, как
универсален и поддерживает большинство основных языков програм
Python, С++, Java, РНР, JavaScript, С# и Bash. Существует три
7, 13 и 34 миллиардами параметров соответственно. Все они
обучены на огромном массиве кода в 500 миллиардов лексем. Модели 7В и 13В
интересны тем, что они оснащены функцией «fill-in-the-middle», то есть могут
мирования, таких как
варианта моделей с
вставлять код в существующие скрипты. Это делает их полезными для выполнения
таких задач, как, например, завершение кода. Модель 7В может работать только на
одном графическом процессоре, и обычно она быстрее. Но, как и следовало ожи
дать, модель 34В обладает большей производительностью.
Возможности
LLaMA 2.
Code Llama
выходят за рамки того, что предлагает базовая модель
Все ее модели могут обрабатывать до
100 ООО токенов
в контексте, что
Остальные инструменты программирования на основе искусственного интеллекта
1
131
отлично подходит для создания кода для длинных программ. Благодаря такому
большому контекстному окну модель очень хорошо справляется с отладкой.
Существует несколько специализированных версий
версия для
в
100 млрд
Python,
Code Llama.
Во-первых, это
которая была доработана с помощью огромного количества кода
лексем. Кроме того, существует специализированная версия
Instruction.
Эта версия была дополнительно обучена естественному языку, чтобы повысить ре
зультаты при работе с приложениями на естественном языке.
Code Llama 34В демонстрирует впечатляющие результаты. Она набрала
53,7% в HumanEval и 56,2% в МВРР (Mostly Basic Python Programming)
(https://oreil.ly/JNYln). Эти показатели лучше, чем у других проектов с открытым
исходным кодом, а по производительности Code Llama находится на одном уровне
с ChatGPT. Более того, Code Llama прошла проверку на безопасность. Meta отмечает,
что ее ответы даже безопаснее, чем у ChatGPT.
Модель
Остальные модели с открытым исходным кодом
В сфере приложений с открытым исходным кодом, предназначенных для генерации
кода, происходят интересные инновации. Давайте рассмотрим некоторые из плат
форм, наиболее привлекающих к себе внимание.
StaЫeCode
Компания
Stability AI,
которая стоит за популярной системой преобразования тек
ста в изображения StaЫe
Diffusion,
разработала приложение StaЫeCode. StaЫeCode
BigCode, совместного
Hugging Face и ServiceNow Research. BigCode собрал набор данных
под названием The Stack, который представляет собой огромную коллекцию уни
идеальное
кального, свободно используемого кода на GitHub объемом 6,4 ТБ -
обучается на базе проекта с открытым исходным кодом
предприятия
решение для обучения моделей искусственного интеллекта.
У StaЫeCode есть своя уникальная технология, использующая поворотное позици
онное встраивание (RoPE) вместо метода ALiBi (Attention with Linear Biases или
Внимание с линейными отклонениями). StaЫeCode был значительно доработан, в
том числе за счет очистки данных. Он довольно универсален и поддерживает такие
языки, как
Python, Go, Java, JavaScript,
С,
Markdown и
С++.
Существует три версии StaЬleCode, с которыми вы можете ознакомиться:
♦
StaЫeCode-Completion-Alpha-3B-4k
Это модель только для декодера с
3
млрд параметров, отлично подходящая для
работы с множеством языков и длиной контекста в
4
ООО токенов.
♦ StaЬleCode-lnstruct-Alpha-ЗB
Данная модель имеет
циями.
3 млрд
параметров и предназначена для работы с инструк
Глава
132
♦
5
StaЫeCode-Completion-Alpha-ЗB
Тоже содержит
3
млрд параметров. Эта версия отлично справляется с расши
ренным завершением кода, обрабатывая до
16 ООО токенов.
AlphaCode
DeepMind, входящая в состав Google, создала систему искусственного
AlphaCode. Эта система отлично проявила себя в соревнованиях по на
писанию кода, заняв 54% первых мест в конкурсах на Codeforces- сайте, где про
водятся конкурсы по программированию. AlphaCode смогла справиться с различ
Компания
интеллекта
ными
сложными
задачами,
требующими
сочетания
критического
мышления,
логики, алгоритмов, навыков кодирования и понимания естественного языка. Эта
система даже была отмечена журналом
Science (https://oreil.ly/6E7cK)
за ее спо
собности.
Соревнования по коду, как правило, посвящены хитроумным алгоритмам и пора
жающим воображение теоретическим проблемам, которые немного отличаются от
ваших повседневных задач по программированию. Взять хотя бы одно испытание,
с которым пришлось столкнуться AlphaCode сложную задачу под названием
Backspace. Конкурсанты должны были обыграть две строки, s и t, и с помощью
Backspace заменить s на t. У спех заключается не только в том, чтобы правильно
решить сложную задачу:
нужно
придумать умные алгоритмы,
демонстрирующие
продвинутые навыки решения задач, необходимые для конкурентоспособного про
граммирования.
DeepMind
планирует использовать
AlphaCode для
полной автоматизации генерации
кода, что станет значительным прогрессом в области кодирования с помощью ис
кусственного интеллекта.
PolyCoder
Главной особенностью
PolyCoder
является возможность ускоренного написания
программ на языке программирования С, поэтому система привлекательна для раз
работчиков игр.
PolyCoder
также отлично справляется с обобщением кода на не
скольких языках. Благодаря обучению на разнообразном наборе данных, он хорошо
улавливает общие закономерности и структуры в различных языках программиро
вания, таких как С, С++,
PolyCoder
Java, Python и JavaScript.
обучен на наборе данных объемом
249
Гбайт, охватывающем
ных языков программирования. Кроме того, он содержит
12 различ
2, 7 млрд параметров.
CodeTS
CodeT5
использует универсальную, предварительно обученную модель кодиров
щика-декодировщика. Благодаря этому он отлично справляется с различными зада
чами кодирования. Например, выявление ошибок в коде или поиск клонов кода.
Остальные инструменты программирования на основе искусственного интеллекта
1
133
А также с новыми структурами, будь то преобразование языка программирования в
простой английский или наоборот, или даже переключение между языками про
граммирования.
При разработке этого инструмента были применены специальные методы, повы
шающие способность модели к точному восприятию кода как при его анализе, так
и при генерации. Для этого максимально используется глубокая структура, прису
щая языкам программирования.
CodeT5 действительно хорошо показал себя при решении 14 различных
(https://oreil.ly/frVS6) задач при обработке данных CodeXGLUE (General Language
Understanding Evaluation benchmark for CODE или Тест для оценки общего понима
ния языка КОДА). Он превзошел старые модели, такие как PLBART, во всех зада
чах по генерации кода, например, таких как суммирование кода, превращение тек
ста в код, отладка кода. А когда дело дошло до анализа кода,
CodeT5
оказался
весьма эффективным в поиске ошибок и не менее эффективным в обнаружении
кода-подражателя.
Компании, производящие корпоративное
программное обеспечение
Гиганты софтверной индустрии
-
SAP, ServiceNow
и
Salesforce -
создают собст
венные системы генерации кода. У них есть серьезные преимущества: огромные
клиентские базы, колоссальные ресурсы, разветвленные сети распространения и
надежные бренды. Их большой кадровый резерв также является хорошим под
спорьем. Кроме того, они на рынке занимают значительное место, что позволяет им
устанавливать тенденции и стандарты.
Интеграция новых технологий с существующими продуктами позволяет этим ком
паниям предлагать комплексные решения, благодаря которым клиенты будут об
ращаться к ним снова и снова. Поскольку у этих компаний есть инфраструктура и
глобальное присутствие, они могут быстро наращивать масштабы новых техноло
гий, удовлетворяя потребности рынка как сейчас, так и в будущем.
Вот обзор некоторых систем генерации кода от этих компаний:
♦
Salesforce Code Builder
С его помощью разработчики легко настраивают СRМ
и другие элементы
Salesforce.
(https://oreil.ly/qpHLM)
Конструктор кода помогает добиться нужного ре
зультата с помощью новейших языков и фреймворков
Salesforce.
Кроме того, вы
можете устанавливать сторонние дополнения из Интернет-магазина
Open VSX,
VS
представляющего собой большую открытую платформу для расширений
Code.
И что самое приятное, вам не нужно возиться с установкой или настрой
кой этих функций. Они готовы к работе сразу же.
♦
SAP Build Code
Это
приложение
предназначено
(https://oreil.ly/u8cKy).
для
пользователей
Данное приложение подключается к
Java и JavaScript
SAP Joule, который
134
Глава
5
является помощником
SAP
в области искусственного интеллекта. Вы также
сможете подключиться к мощным системам баз данных, таким как
SAP HANA
(High-performance ANalytic Appliance ).
♦
StarCoder LLM
Компании
ServiceNow
и
Hugging Face
объединились для создания данного про
екта с открытым исходным кодом. В нем
ется
на
триллионе
токенов
(https://oreil.ly/kВEdY).
на
более
15
млрд параметров, и система обуча
чем
80
языках
Участники проекта следят за
программирования
соблюдением правил
управления, безопасности и вообще придерживаются правил, обучая только на
коде, которому дан зеленый свет от лицензий, разрешающих использование.
Заключение
ИИ-инструменты для программирования кардинально меняют повседневную рабо
ту разработчиков, открывая перед ними новые горизонты. В этом направлении ак
тивно работают такие технологические гиганты, как
Salesforce.
Amazon, Google, Meta и
- они привле
При этом не остаются в стороне и небольшие стартапы
кают внимание удобством своих решений и доступными условиями. Всё большую
популярность набирают и проекты с открытым исходным кодом, предлагающие
полноценные инструменты для разработки с поддержкой ИИ.
По мере развития технологий эти модели становятся всё более «умными»
-
они
лучше справляются с написанием кода и объяснением его логики. В будущем ус
пешные компании будут стремиться к тому, чтобы такие инструменты органично
вписывались в повседневные процессы и помогали разработчикам работать быст
рее и качественнее.
ГЛАВА
6
ChatGPT и другие большие языковые
модели общего назначения
В этой главе мы рассмотрим некоторые широко используемые большие языковые
модели общего назначения, которые могут помочь в написании кода. Конечно, они
не обладают всеми возможностями, которые есть у моделей, специализирующихся
именно на кодировании. Например, возможностью интеграции
IDE,
сложной сис
темой обеспечения безопасности или защитой от кода, используемого для обучения
моделей. Но все равно их возможности впечатляют. Кроме того, данные модели
предназначены не только для кодирования. Их можно использовать для планирова
ния и мозгового штурма.
Здесь мы также рассмотрим такие известные чат-боты, как
Claude.
ChatGPT, Gemini
и
Я расскажу о том, как их настроить, сколько они стоят, какие у них есть
функции и как получить от них максимальную отдачу.
ChatGPT
ChatGPT,
сокращенно
Chat Generative Pretrained Transformer
предварительно обученный трансформер ), вышел на рынок
Компания
OpenAI,
(Генеративный Чат,
30 ноября 2022
года.
создавшая это приложение, не стала особо тратиться на марке
тинг. Но, как оказалось, этого и не требовалось.
ChatGPT
стал быстро распростра
няться и быстро набрал популярность.
Всего за пять дней это приложение стали использовать миллион пользователей, а
уже через пару месяцев их число подскочило до
100 (https://oreil.ly/jgzv7)
млн.
Приложение стало самой быстрорастущей платформой в истории Интернета по
числу пользователей.
Сандхини Агарвал
(Sandhini Agarwal),
одна из разработчиков политики в
OpenAI,
отметила: «Думаю, для всех нас стало неожиданностью то, как много людей начали
использовать эту систему. Мы так много работаем над созданием этих моделей, что
забываем, до какой степени они могут удивить внешний мир и стать востребован
нымю>.
Ажиотаж вокруг
платформы
ChatGPT продолжал нарастать.
1,5 млрд, а доходы
превысило
К сентябрю число посетителей
достигли
1,2
млрд
долларов
Глава
136
6
впечатляющий скачок по сравнению с
(https://oreil.ly/Xlv3B) -
28
Однако бурный рост объяснялся не только популярностью самого
тельный вклад в развитие бизнеса внесла и платформа
А сейчас я кратко расскажу предысторию компании
вана в
млн в 2022 году.
ChatGPT: значи
OpenAI API.
OpenAI.
Компания была осно
году, и ее поддержали такие известные люди из Кремниевой долины,
2015
как Элон Маек
Brockman),
(Elon Musk), Сэм Альтман (Sam Altman), Грег Брокман (Greg
(Ilya Sutskever), Джон Шульман (John Schulman) и Вой
(Wojciech Zaremba). Они бьши готовы в запуск проекта вложить до
Илья Суцкевер
цех Заремба
1 млрд долларов.
Компания
OpenAI
начала свою деятельность как некоммерческая научная органи
зация с академическим направлением. В основном коллектив состоял из докторов
наук в области науки о данных и искусственного интеллекта. Целью проекта было
создание ИИ общего назначения
(AGI, Artifical General Intelligence)- технологии,
способной превзойти человека в решении большинства значимых задач. В основе
проекта лежала преимущественно альтруистическая цель: направить развитие ИИ
на благо человечества и предотвратить его использование во вред людям или в ин
тересах узкого круга лиц.
В самом начале своего существования компания
OpenAI
занималась исследования
ми и делилась полученными результатами с другими. Организация выкладывала в
открытый доступ свои патенты и код, совместно работая с другими учреждениями.
Но стоимость создания передовых систем генеративного ИИ была высока.
Чтобы сохранить мечту и привлечь нужных людей, в компании
OpenAI
в
2019 году
была создана «закрытая» коммерческая организация. Это означает, что теперь
можно легально получать деньги от венчурных фондов и стратегических инвесто
ров, а также делиться со своими сотрудниками частью финансового дохода. В том
же году
Microsoft
инвестировала в компанию
1 млрд
долларов. Еще несколько ра
ундов инвестиций принесли в общей сложности около
soft.
В апреле
2023
3 млрд
года технологический гигант вложил в дело
долларов от
1О
Micro-
млрд долларов.
GPT-4
Большая языковая модель
GPT-4
от
OpenAI
демонстрирует удивительную универ
сальность в генерации кода благодаря разнообразным обучающим данным, вклю
чающим широкий спектр источников. Благодаря такой широкой базе для обучения
модель
GPT-4
в нескольких профессиональных и академических тестах демонстри
рует производительность на уровне человека, а в большинстве языков программи
рования модель
GPT-4
полностью превосходит
GPT-3
и
GPT-3.5.
Во многом это
объясняется улучшенной способностью модели выполнять сложные инструкции,
выраженные на естественном языке,
и
генерировать технические или творческие
работы с большей глубиной «погружения в тему». Еще одним ключевым фактором
является контекстное окно размером
32
Кбайт.
ChatGPT
и другие большие языковые модели общего назначения
Любопытно, что улучшенная версия
GPT -4,
интегрированная с
Retlexion -
137
фрейм
ворком для создания сложных агентов на базе больших языковых моделей,
показала впечатляющий результат:
предназначенном
HumanEval -
для
оценки
88%
успешных
качества генерации
решений в тесте HumanEval,
кода (https://oreil.ly/DFaDj).
это оценочный инструмент на основе набора данных. Данный ре
зультат был значительно выше, чем у базовой версии
GPT-4,
набравшей только
Таким образом, можно предположить, что при определенных улучшениях
67%.
большая языковая модель
GPT -4
может достичь современных показателей в зада
чах генерации кода.
При сравнении со сценариями соревновательного программирования на платформе
Codeforces модель GPT-4 набрала 392 балла, что на 260 баллов больше, чем у моде
ли GPT-3.5 (https://oreil.Iy/icUjw). Однако GPT-4 все еще новичок в мире соревно
вательного программирования, и эти показатели находятся в нижних 5% всех ре
зультатов. Несмотря на то, что большая языковая модель GPT-4 проделала большой
путь, ей еще предстоит многое сделать, чтобы сравняться с человеческими навыка
ми в сложных задачах по кодированию.
Навигация по
ChatGPT
В этой главе я буду использовать премиум-версию
ная подписка этой версии стоит
ChatGPT, ChatGPT Plus.
Месяч
20 долларов.
Вот что вы здесь получаете:
♦
Постоянный доступ
Даже когда все пытаются воспользоваться
ChatGPT,
премиум-подписчики полу
чают преимущественный доступ в пиковое время.
♦ Быстрые ответы
С
ChatGPT Plus
все работает быстрее: ответы приходят оперативнее, делая об
щение в чатах более удобным и продуктивным.
♦ Право первыми получить новые предложения
Если появляется новая функция или обновление, обладатели версии
Plus
полу
чают возможность опробовать новинки раньше всех.
♦ Новейшая модель
Вы одним из первых получаете к ней доступ.
На рис.
6.1
показан интерфейс
ChatGPT.
В левом верхнем углу находится открывающийся список, с помощью которого
можно выбрать нужную языковую модель или перейти в магазин плагинов. В левой
части экрана расположена кнопка для создания новой сессии чата. Внизу вы увиди
те свой профиль пользователя, из которого можно получить информацию о вашем
плане
ChatGPT,
изменить настройки и добавить пользовательские инструкции. Вы
Глава
138
6
также можете изменить тему пользовательского интерфейса: на выбор предлагают
ся системная, темная и светлая. В самом низу находится поле ввода, где вводится
запрос.
([)
Q
Пома: • щ~тах
m)
Бмблиоr~
ChatGPT
v
Фaocue\Jravel
llмтeparyp,t.u коррктироец. ..
Что сегодня в повестке дня?
M"J)Wpyтbl И 14рwру!МИЦИR
Спросите что-нибуАt.
.
MVC архитеtеtур,1 nример1
+ -::,
Amasty_ShopBy уд.мнме ow...
DORS
11116ор А/111
Инструмеtпw
lnt~
РНР ~"'80fЖИ и их ро111,
МySQl.8 .............
Поhlшение П!ЮА)УtИIНОСТМ ...
Am,ttyPrk:efllterError
Проира чe'fliOCТlt ЧIКМ
~~tкtlleSolldity
Мин......лwt~требонttМII М.,.
Рис.
6.1. Интерфейс системы ChatGPT
Давайте попробуем воспользоваться некоторыми функциями. Предположим, вы
хотите создать код. Введите в
ChatGPT промпт:
Промпт: Напишите фрагмент кода на
На рис.
6.2
Python, который вычисляет факториал числа.
показан ответ.
Предположим, вы хотите узнать, есть ли другие способы создания кода. Исполь
зуйте следующий промпт:
Промпт: Каким еще способом можно создать этот код?
ChatGPT
предлагает еще один вариант кода, который называется итеративным под
ходом. Но предположим, что вы не знаете, что это такое. Опять же, вы можете про
должить общение. При этом сеанс чата будет регистрироваться в левом верхнем
углу экрана, как показано на рис.
ториала в
Python».
6.3. ChatGPT
помечает чат как «Вычисление фак
При желании чат вы можете переименовать, нажав на кнопку
рядом с его названием. Также есть кнопка удаления.
Хотите создать новую сессию? Нажмите на кнопку с изображением карандаша
(Новый чат) в верхней части экрана, и вы увидите пустой экран.
Помните, что каждая сессия автономна. Поэтому, если вы создадите следующую
сессию и в ней спросите
ChatGPT
факториала,
поймет, о чем вы его спрашиваете.
ChatGPT не
о коде, который он создал ранее для вычисления
ChatGPT
и другие большие языковые модели общего назначения
139
Напишите фрагмент кода на Python, который вычисляет факториал
числа
Вот простой фрагмент кода на Python, который вычисляет факториал заданного числа с помощью
рекурсивной функции :
61 Коnирова1Ь
python
1:,> Реда1<1ирова1ъ
def factorial(n):
==
if n
0 or n
==
1:
return 1
else:
return n • factorial(n - 1)
# Прш,,ер использобания
number =
int ( input (" Bвeдитe число:
рrint ( "Фактормал:" ,
"))
factorial(number))
Если хочешь вариант без рекурсии, с использованием цикла:
Рис.
6.2. ChatGPT в ответ
на запрос создал фрагмент кода на языке
[)
~ Новы~чат
Q
Поиск в чатах
@
Библиотека
0
Sora
88
GPT
ChatGPT
Python
v
Ctrl + Shift • О
Чаты
Вычисление факториала
Pyth ...
Замена слова
Copilot перевод текста
Рис.
6.3. ChatGPT регистрирует сеансы
чата в верхней левой части экрана
Еще один момент, который следует учитывать
-
это контекстное окно для сеанса
чата. Это важно, поскольку определяет, какой фрагмент предыдущего разговора
или текста модель может «запомнить» и использовать для создания последователь
ных и соответствующих смыслу ответов. Для
16 Кбайт,
а для
GPT-4-32
Кбайт.
GPT-3.5
контекстное окно составляет
140
Глава
6
Если вы хотите удалить все темы чата, щелкните мышью на своем профиле
в левом нижнем утлу экрана и выберите раздел Настройки, далее
-
Эле
менты управления данными. И нажмите кнопку Удалить все.
После выбора своего профиля, а затем раздела Настройки и Элементы управле
ния данными, вы найдете другие опции для ваших данных
♦
ChatGPT:
Общие ссылки
У вас есть интересная тема? Вы можете превратить ее в ссылку и поделиться
ссьшкой с другими. Здесь можно просмотреть созданные общие ссылки.
♦
Экспорт данных
Если вы выберете этот вариант, то получите письмо со всеми вашими разгово
рами в
ChatGPT.
Иногда
ChatGPT
может остановиться на середине генерации текста. В этом
случае обычно появляется кнопка
чтобы
Continue
продолжить создание текста.
(Продолжить). Нажмите ее,
Если кнопки
нет, просто введите
промпт «Продолжить вывод». А если он не выдает то, что вам нужно, про
сто нажмите кнопку
Stop Generating
«Остановить генерацию», чтобы по-
ставить формирование ответа на паузу.
Мобильное приложение
ChatGPT работает на мобильных устройствах с операционными системами iOS и
Android. Мобильное приложение ChatGPT во многом напоминает веб-версию, хотя,
по крайней мере на данный момент, в нем отсутствуют такие функции, как плагины.
Голосовое общение с
ChatGPT
доступно прямо на телефоне- это особенно удоб
но, если вам не нравится набирать текст на небольшом экране. Чтобы включить эту
функцию, перейдите в настройки, откройте раздел
New Features
(«Новые возмож
ности») и выберите нужный вариант. После активации нажмите на значок наушни
ков в правом верхнем углу главного экрана, чтобы начать разговор.
Приложение позволяет выбрать один из пяти различных голосов для общения в
ChatGPT.
зования
Эта голосовая система работает благодаря генеративной модели преобра
текста
в
речь
с
помощью
искусственного
интеллекта
под
названием
Whisper.
Мобильная версия
ChatGPT
позволяет обмениваться фотографиями. Вы можете
сфотографировать что угодно: объект, достопримечательность или даже код, а за
тем пообщаться с
ChatGPT на
эту тему. В приложении также есть удобный инстру
мент для рисования, позволяющий выделить определенную часть изображения во
время разговора.
ChatGPT
и другие большие языковые модели общего назначения
141
Пользовательские запросы
Пользовательские запросы позволяют настраивать ответы
ChatGPT
под индивиду
альные потребности. Это помогает сэкономить время, избавляя от необходимости
каждый раз корректировать ответы или формулировать новые запросы при обще
нии с ботом. Функция включается через профиль пользователя.
При настройке пользовательского запроса вам нужно будет ответить на два вопроса:
ChatGPT:
Что бы вы хотели, чтобы
знал о вас, чтобы лучше отвечать
ChatGPT
на вопросы?
ChatGPT:
Как бы вы хотели, чтобы
ChatGPT отвечал?
Рассмотрим пример:
ChatGPT:
Что бы вы хотели, чтобы
ChatGPT
знал о вас, чтобы предоставлять
лучшие ответы?
Разработчик: Я программист, работающий в команде, которая следует руково
дству по стилю РЕР
8
для кода
Python.
Мы ценим чистый, читабельный код и
используем самый передовой опыт. Обычно я работаю над задачами обработки
и анализа данных, и мне часто нужна помощь в написании эффективного и хо
рошо структурированного кода.
ChatGPT:
Как бы вы хотели, чтобы
Разработчик: Я бы хотел, чтобы
Python,
ChatGPT ответил?
ChatGPT
предоставлял фрагменты кода на
которые соответствуют руководству по стилю РЕР
8.
Приоритетом
должно быть удобство чтения и передовой опыт кодирования. Я желал бы полу
чать объяснения, почему рекомендуется тот или иной подход и как он согласу
ется со стандартами РЕР
Я также буду признателен, если
8.
ChatGPT
укажет на
любые распространенные подводные камни или ошибки, связанные с постав
ленной задачей, и даст советы, как их избежать.
Bing
Просмотр с помощью
Обучение
ChatGPT
заканчивается в апреле
2023
года. Это может стать проблемой
для разработчиков, поскольку библиотеки, фреймворки и инструменты меняются
очень быстро. И после того, как обучение закончится, появится большое количество
новых функций или возможностей, а
Но у
ChatGPT
ChatGPT не
будет в курсе последних событий.
предусмотрена на этот счет хитрость: просмотр с помощью
Bing.
С его помощью вы можете выполнять веб-поиск в режиме реального времени, что
бы найти необходимые ответы.
Допустим, вы изучаете новый фреймворк, например
рынке в конце
2022
LangChain.
Он появился на
года и уже сильно эволюционировал. Данный фреймворк при
зван сделать разработку приложений с использованием большой языковой модели
более удобной, так что вам может понравиться использовать функцию поиска с
помощью поисковой системы
Bing.
142
Глава
1'
6
Что такое LangChain
это open-source фреймворк для разработки приложений на основе
LangChain -
больших языковых моделей (LLM), досrупен на Python и JavaScript Он упрощает
интеграцию
системы
LLM
RAG,
с внешними данными и инструментами, позволяя строить чаты,
агентов и пр.
Проект запущен в октябре
2022 года, быстро набрал популярность в GitHub и
поддерживается крупным комьюнити.
'\. Основные компоненты и возможности
1.
Мадульная архитектура
Компоненты (chains, agents, retrievers, prompt templates и др.) можно
комбинировать, менять и nереиспользовать. Это ускоряет прототипирование и
облегчает экспериментирование.
2.
Интеrрация с внешними исючниками Аi1ННЫХ
Поддерживаются загрузчики документов (PDF, веб-страницы), базы данных (SOL
MongoDB), хранилища (Google Drive, AirtaЬle, Notion), API (YouTuЬe, PubMed и др.),
а также векторные хранилища
(FAISS, Pinecone, Chroma и др.) для
Retrieval-Augmented Generation.
З. Рrоmрt-инжиниринr и шаблоны
LangChain позволяет создавать шаблоны prompt-oв (Prompt Templates),
поддерживает
few-shot, автоматическое форматирование и управление
форматами данных.
4. Retrleval-Augmented Generation (RAG)
Функциональность по извлечению релевантной информации через
semantic
поисковые системы и интеграцию этого контекста в запросы моделей, снижая
количество галлюцинаций и повышая точность ответов.
5.
Память
(Memory)
Поддержка «памяти»: хранение контекста прошлых диалогов, его резюмирование
и отслеживание истории. Это важно для чат-агентов длительного взаимодействия.
Рис. 6.4. Использование функции «Browse with Bing» (Просмотр с помощью Bing)
помогает ChatGPT изучить основные возможности фреймворка LangChain
ChatGPT
и другие большие языковые модели общего назначения
Вот таблица, обобщающая основные сведения о фреймворке
Катеrория
Описание
Что это
Open-source
LangChain:
фреймворк Д/IЯ создания LLМ
приложений на Python и JS
Модульная: включает
Архитектура
chains, agents, retrievers, prompt
templates, memory
Яэыки
Python, JavaScript
Более
Интеrрации
400: API (YouTuЬe, PubMed), базы (SQL,
MongoDB), хранилища (Pinecone, FAISS, Chroma и др.)
Поддержка шаблонов (Prompt Templates), few-shot,
Работа с промтами
форматирование
RAG (Retrieval-Augmented
Поиск контекста и вставка в nромт, Д/IЯ повышения
Generation)
точности ответов
Сохранение контекста диалогов, история
взаимодействия
Agents
Модели, способные выполнять действия, вызывать
(Аrенты)
инструменты, работать по Rедd-подходу
LangServe (создание REST API), LangGraph
Раэвi!рrывание
(оркестрация логики),
LangSmith (мониторинг,
трассировка)
Примеры применения
Чаты, RАG-системы,
Q&A,
агенты, суммирование
документов, автоматизация
Поддержка моделей
OpenAI, Anthropic, Hugging Face, Google Gemini, и др.
Преимущества
Гибкость, мощная архитектура, множество интеrраци1
поддержка
RAG
и аrентов
Сложность, избьrrочность в простых задачах.
Недостатки
документация, частые изменения
Если нужно
-
могу выделить таблицу отдельно для копирования в
API
Markdown,
HTML, CSV или любой другой формат.
Рис.
6.5.
При появлении соответствующего запроса
может поместить свой вывод в таблицу
ChatGPT
143
Глава
144
6
Чтобы включить функцию
«Browse with Bing))
мочь
на каком этапе развития находится
ChatGPT разобраться,
(Просмотр с помощью
Bing) и по
LangChain, добавьте
в промпт что-то вроде «Используйте Интернет для этого ответю). Вот несколько
примеров промптов, предназначенных для получения общей информации о фрейм
ворке
LangChain:
Промпт: Расскажите мне о фреймворке
LangChain
и его основных возможно
стях. Для ответа используйте Интернет.
Промпт: Найдите в Интернете ознакомительные ресурсы или документацию
для начала работы с
LangChain.
Промпт: Найдите в Интернете примеры приложений, созданных с использова
нием фреймворка
LangChain.
Промпт: Найдите последние обновления или релизы, связанные с фреймворком
LangChain.
Для ответа используйте Интернет.
Отвечая на эти промпты,
первого запроса
ChatGPT
вы можете увидеть на рис.
ChatGPT
генерировал полезные ответы. Например, для
привел пять основных особенностей
LangChain,
которые
6.4.
Вы также можете изменить формат вывода содержимого. Попробуйте воспользо
ваться этим запросом:
Промпт: Преобразуйте ответ в таблицу.
На рис.
6.5
показан результат.
Когда вы используете функцию
«Browse with Bing)) (Просмотр с помощью Bing), на
ChatGPT может уйти несколько секунд, а то и минута или
даже больше. Иногда ChatGPT может зависнуть и выдать ошибку. Возможно, вам
придется сделать несколько попыток, прежде чем вы получите ответ. ChatGPT ино
формирование ответа у
гда может быть темпераментным.
При использовании функции
«Browse with Bing))
(Просмотр с помощью
Bing)
в ре
зультатах часто присутствует ссылка на источник информации. Рекомендуется
щелкнуть ней, чтобы самому убедиться в достоверности содержимого. В конце
концов, вы должны воспринимать всё, что генерирует
ChatGPT,
с долей сомнения.
Иногда ответ может быть получен, например, из сообщения в социальной сети, а
это не всегда самый надежный источник.
Однако вы можете настроить
ников. В табл.
6.1
ChatGPT
на работу с определенными типами источ
приведены некоторые рекомендации.
Таблица
6.1.
Способы указания
ChatGPT на
использование определенных
источников информации
Способ
Описание
Ограничение
Воспользуйтесь услугами оператора сайта, чтобы ограничить поиск
домена
авторитетными доменами, такими как
ными авторитетными организациями.
.edu или .gov,
или конкрет-
ChatGPT
и другие большие языковые модели общего назначения
Таблица
6.1
145
(окончание)
Способ
Описание
Использование
Примеры: рецензируемый, :журншt, исследование и научная работа.
научных ключевых
слов
Использование
Фильтруйте поиск по датам последних публикаций, чтобы полу-
фильтров по дате
чить свежую и актуальную информацию.
публикации
Профессиональные
Укажите профессиональные или научные ассоциации для поиска
или научные ассо-
авторитетных публикаций или отчетов.
циации
Насколько хорошо
ChatGPT
справляется с созданием кода для
LangChain?
Давайте
посмотрим. Вот промпт для написания простой программы:
Промпт: Мне нужно написать программу на
LangChain.
Python,
использующую фреймворк
Программа должна иметь следующие функции:
1.
Получать от пользователя информацию о теме.
2.
Предоставлять выбор типа контента для создания: блог или пост в социаль
ных сетях.
3.
Использовать
LangChain
для доступа к
OpenAI API,
чтобы создать блог или
пост в социальной сети на основе заданной темы.
Когда я попробовал ввести этот запрос в
ChatGPT,
результаты были, в общем,
не очень. Конечно, он справился с базовой структурой кода
Python для пользова
ChatGPT прекрасно работает с
Python. Но с кодом LangChain? Далеко не так. ChatGPT ошибся с импортом биб
лиотеки LangChain и упустил некоторые другие моменты. Кроме того, ChatGPT не
знал, как вызвать облачную платформу API OpenAI.
тельского ввода- ничего удивительного, ведь
Итог: Просмотр с помощью
общих вопросов
Bing
удобен в основном для решения повседневных,
по крайней мере, пока.
-
Утомительные задачи
Разработка программного обеспечения
-
процесс сложный и многоэтапный: от
планирования и написания кода до тестирования и внедрения. Один из самых уто
мительных этапов
-
рутинное, повторяющееся кодирование. Оно отнимает массу
времени и лишено творческой составляющей. Разработчики нередко застревают на
однотипных задачах, исправлении ошибок и бесконечном просмотре кода. Безус
ловно, все это важно, но вряд ли вдохновляет. А постоянная необходимость сле
дить за новыми языками программирования, фреймворками и инструментами мо
жет и вовсе стать непреодолимым вызовом.
Глава
146
6
Инструменты, такие как
ChatGPT,
могут избавить вас от необходимости заниматься
такой кропотливой работой. В следующих нескольких разделах мы рассмотрим не
которые из этих областей.
Регулярные выражения
Регулярные выражения или
regex -
это удобный инструмент для работы с текстом.
Думайте о таких выражениях как о мощной функции поиска и замены, которая мо
жет находить закономерности в строках символов. Но вот в чем загвоздка:
это
как
изучение
совершенно
нового языка символов и
команд, что
regex -
может стать
настоящей головоломкой! Попытки запомнить все эти странные комбинации об
ратных слешей, точек, скобок и еще неизвестно чего достаточно, чтобы голова по
шла кругом. Порою кажется, что здесь потребуется секретное кольцо-декодер, что
бы разобраться во всем этом.
Например, возьмем такой шаблон
л(?=.*[а-z])
regex:
(?=.*[A-Z]) (?=.*\d) (?=.*[@$!%*?&]) [A-Za-z\d@$!%*?&]{8,}$
Это выражение используется для проверки надежности пароля, обеспечивая наличие в нем
не менее восьми символов, включая одну заглавную букву, одну строчную, одну цифру и
один специальный символ.
Вряд ли вам понравится самому создавать такие выражения, но
ChatGPT
легко
справится с задачей генерации регулярных выражений. Вот несколько популярных
примеров:
Промпт: Создайте rеgех-шаблон для проверки стандартных адресов электрон
ной почты. Электронное письмо должно начинаться с буквенно-цифровых сим
волов, за которыми следуют необязательные точки, дефисы или символы под
черкивания.
Далее
необходимо
вставить
символ
за
"@",
которым
должны
следовать другие буквенно-цифровые символы, точка и, наконец, доменное имя
ДЛИНОЙ ОТ
2 ДО 6 СИМВОЛОВ.
ШаблонRеgех: л[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\. [a-zA-Z] {2,6)$
Промпт: Предоставьте мне шаблон
жен начинаться с
"http"
или
"https",
regex
для проверки URL-aдpecoв.
URL
дол
за ним следует"://", затем доменное имя, ко
торое может включать буквенно-цифровые символы и точки. После домена мо
жет быть необязательный путь, который начинается с
"/"
и может включать
буквенно-цифровые символы, косую черту, точки или дефисы. URL-aдpec мо
жет заканчиваться необязательным"/".
ШаблонRеgех: л(https?:\/\/)?([\da-z.-]+)\. ([a-z.] {2,6)) ([\/\w .]*)*\/?$
Проанпт: Создайте шаблон
regex
для проверки дат в формате ММ/ДД/ГГГГ.
Значение месяца должно быть от О 1 до
12,
значение дня
-
от О 1 до
31,
а год
-
либо в 1900-х, либо в 2000-х годах.
ШаблонRеgех: л(О[l-9] 11[0-2])\/(0[1-9] 1 [12] [0-9] I3[01])\/(19I20)\d\d$
ChatGPT и другие большие языковые модели общего назначения
147
Промпт: Я ищу rеgех-шаблон для проверки 1Рv4-адресов. Каждый октет должен
быть числом от О до
255,
а октеты должны быть разделены точками. Создайте
rеgех-шаблон для этого.
Rеgех-шаблон: л (25 [О-5] 12 [0-4] \dl [О-1] ?\d\d?) \. ( (25 [О-5] 12 [0-4] \d 1
[0-1]?\d\d?)\.) (2) (25(0-5] 12(0-4]\dl [0-l]?\d\d?)$
ChatGPT
также может помочь вам расшифровать шаблоны
regex.
Вот пример за
проса:
Промпт: Что это за
regex?
л
( \
( \
d ( з J \) \ s? 1\ d { з J [ - . J ) \ d { з}
Ответ заключается в том, что данный
regex
[- . J \ d { 4 J $
соответствует североамериканскому
формату телефонных номеров.
Стартовый код
Стартовый код
-
это начальные фрагменты кода или шаблоны, которые облегчают
начало работы и существенно экономят время. Помимо этого, он служит отличным
учебным материалом: для новичков знакомство со стартовым кодом помогает по
нять основы и логику работы. Кроме того, его использование поддерживает единый
порядок действий, что особенно важно в больших командах, где требуется слажен
ная совместная работа.
Вот пример:
const express = require('express');
const
арр
= express();
const port = 3000;
app.get('/',
(req, res) => {
res.send('Hello, World! ');
});
app.listen(port,
() => (
console.log('Server running at http://localhost:${port}');
}) ;
Здесь представлен краткий и понятный пример базового веб-сервера, созданного с
помощью
Express.js,
популярного веб-фреймворка для
Node.js.
Это простой и хо
роший стартовый код, в котором используются основные элементы. В табл.
6.2
приведены некоторые запросы для создания стартового кода.
Таблица
Язык
6.2.
Запросы на получение стартового кода
Запрос
программирования/фреймворк
Node.j s/Express .j s
«Приведите пример базового сервера
React (JavaScript)
«Как создать простой компонент
Express.js»
React?»
Глава
148
6
Таблица
Язык
6.2
(окончание)
Запрос
программирования/фреймворк
JavaScript
«Можете ли вы показать мне, как определить
простую функцию в
Android (Java)
JavaScript?»
«Покажите стартовый код для создания базовой
активности
ython/Flask
Android
на
Java»
«Можете ли вы привести пример базового
приложения для
Vue.js (JavaScript)
Flask?»
«Покажите мне, как настроить базовый экземпляр
Vue»
Django (Python)
«Как я могу запустить новый проект
Django
с помощью простого представления?»
Swift (iOS)
«Напишите стартовый код для простого
UIViewController в Swift»
GitHub README
Файл
README
на
GitHub -
это, по сути, приглашение в репозиторий. В нем вы
узнаете, что представляет собой проект: его цель, для чего он предназначен и как
его использовать. Обычно такой файл имеет название
формате
Markdown,
назначение которого
-
README.md
и написан в
чтобы все выглядело красиво и легко
читалось. RЕАDМЕ-это первое, что вы увидите на главной странице репозитория.
Грамотно написанный файл
README
имеет большое значение, потому что он де
лает работу с вашим проектом более комфортной. В этом файле указывается суть
проекта и
его содержание, независимо
от того, хочет ли
пользовать проект или внести в него свой вклад. В
пользователь просто ис
README
также излагаются ус
тановленные правила работы и то, чего следует избегать.
Написать файл
README -
задача не из легких. Нужно найти золотую середину
между подробным изложением всех деталей и лаконичностью. Разработчики, со
средоточившись на своем коде, могут пропустить важные моменты, не учитывая,
что всё, что понимают они, и что им кажется простым, другие люди могут не знать
и не понимать.
Для создания качественного файла
README
вам необходимо обладать некоторы
ми писательскими способностями. Но далеко не все разработчики умеют это де
лать. Более того, по мере роста и изменения вашего проекта поддерживать файл
README
в актуальном состоянии
-
это целая история. Да, это может быть очень
ChatGPT,
составление такого документа не займет много
сложной задачей.
Но если на вашей стороне
времени, и его содержание будет достаточно качественным. Давайте рассмотрим
ChatGPT
149
и другие большие языковые модели общего назначения
пример. Представьте, что вы только что создали потрясающее приложение для по
иска рецептов блюд. Вот начальный промпт:
Промпт: Напишите в
файл
GitHub
readme
для моего проекта под названием
"Recipe Finder" (Поиск рецептов). Этот проект разработан с использованием
фреймворка Vue.js и помогает пользователям находить рецепты с учетом имею
щихся у них ингредиентов. Пользователям нужно ввести список того, что у них
есть из продуктов, и приложение выдаст список рецептов блюд, которые они
могут из них приготовить. Для запуска просто клонируйте репозиторий, запус
тите команду npm install, введите свой АРI-ключ в файл с расширением
выполните команду
npm start
составляет файл
ChatGPT
.env и
для запуска приложения.
README,
в котором содержатся такие разделы, как
«Особенности», «Начало работы», «Использование», «Внесение вклада», «Лицен
зию> и «Благодарности».
Следует учесть,
что
при
формировании
некоторых
файла
пунктов
README
делает предположения. Например, он указал, что проект использует ли
ChatGPT
цензию МIТ. Но вы можете продолжить запрашивать у
ChatGPT
более подробную
информацию о проекте.
~
Если вы не знаете, какую лицензию открытого исходного кода использо
вать, обратитесь к ресурсу
Choose
а
License (https://choosealicense.com),
который помогает решить этот вопрос.
Кросс-браузерная совместимость
Кросс-браузерная совместимость
-
это обеспечение правильной работы вашего
сайта или веб-приложения в различных браузерах. Это очень важно, потому что
ваши пользователи, скорее всего, заходят на сайт или используют приложение с
помощью целого ряда браузеров. Например,
Chrome, Firefox, Safari
и
Edge.
И каж
дый из этих браузеров представлен в различных версиях.
Давайте посмотрим, как
В табл.
ChatGPT
может помочь вам справиться с этой проблемой.
приведены некоторые полезные запросы.
6.3
Таблица
6.3.
Запросы на совместимость с браузером
Катеrория
Запрос
Особенности
«Я хочу использовать атрибут
HTML5
и CSSЗ
не работает в старых версиях
placeholder в полях ввода, но он
Intemet Explorer.
Как я могу создать
дополнительный атрибут?»
Префиксы
CSS
«Я хочу использовать свойство
transi tion в своем
CSS,
но мне
нужно, чтобы это свойство было совместимо со всеми браузерами. Как мне его написать?»
150
Глава
6
Таблица
Категория
6.3
(окончание)
Запрос
Функциональность
«Я использую функцию
JavaScript
НТТР-запросов, но она не поддерживается в
fetch в JavaScript для выполнения
Internet Explorer.
Что мне делать?»
Команды
Bash
Команды, которые вы вводите в терминал для взаимодействия с компьютерной
системой, называются командами
bash.
Они позволяют выполнять различные зада
чи, например, перемещаться по каталогам, следить за работой компьютера и рабо
тать с файлами.
Разобраться с командами
мире
Unix/Linux.
bash
может быть непросто, особенно если вы новичок в
Некоторые команды выглядят загадочно и оказываются непро
стыми для понимания. Чтобы разобраться в них, нужны время и опыт. К тому же
команд существует
великое множество
-
каждая
со
своими параметрами
и осо
бенностями. Безусловно, в Интернете можно найти полезные ресурсы, но даже
опытным разработчикам порой трудно запомнить команды, которые используются
редко или были освоены совсем недавно.
Однако в качестве виртуального помощника для работы с командами
жете использовать
ChatGPT.
bash
вы мо
Вот несколько примеров промптов:
Прш,тт: Как с помощью команды
bash
получить список всех файлов в каталоге,
отсортированных по времени модификации?
Пролтт: С помощью какой команды
bash можно
подсчитать количество строк в
файле?
Промпт: Как создать каталог и перейти в него с помощью одной команды?
Промпт: Как перенаправить вывод команды в файл?
Промпт: Какой командой можно найти определенный процесс, запущенный в
моей системе?
Про"нпт: Как сжать каталог в ZIР-файл с помощью
bash?
Про,1тт: Какую команду следует использовать для изменения прав доступа к
файлу в
bash?
GitHub Actions
GitHub Actions - это инструмент непрерывной интеграции и непрерывного раз
вертывания (CI/CD), встроенный в GitHub. С его помощью разработчики могут
создавать, настраивать и запускать рабочие процессы по разработке ПО прямо в
своих репозиториях.
ChatGPT
По сути,
GitHub Actions -
и другие большие языковые модели общего назначения
151
это система автоматизации, основанная на рабочих про
цессах, которые описываются в У АМL-файлах. Каждый рабочий процесс состоит
из задач, выполняющих различные действия: запуск команд, настройку среды, вы
полнение скриптов и многое другое. Эти задачи срабатывают в ответ на определен
ные события
- например, при коммите, создании релиза или по расписанию.
GitHub Actions позволяет разработчикам создавать, тестировать и развертывать код
напрямую из GitHub, значительно упрощая и ускоряя процесс разработки. Более
того, действия, созданные другими разработчиками, можно переиспользовать, на
страивать под свои нужды или делиться ими, что особенно полезно для совместной
работы и обмена опытом в сфере автоматизации программной разработки.
ChatGPT
поможет вам в работе с инструментами
GitHub Actions.
Вот несколько
промптов:
Промпт: Создайте шаблон рабочего процесса
GitHub Actions для разработки и
Hugo, с развертыванием на
развертывания статического веб-сайта с помощью
GitHub Pages.
Промпт: Создайте шаблон рабочего процесса
помощью
Maven,
GitHub Actions
для Jаvа-проекта с
включая шаги по компиляции кода, запуску тестов и упаковке
приложения.
Промпт: Создайте шаблон рабочего процесса
созданного в
Docker Hub
Docker,
и развертыванию на кластере
для приложения,
Kubernetes.
Промпт: Создайте шаблон рабочего процесса
приложения
GitHub Actions
включая шаги по созданию Docker-oбpaзa, отправке его на
React Native,
GitHub Actions
для мобильного
включая шаги по установке зависимостей, сборке при
ложения и загрузке АРК в указанную папку
Google Drive.
Плагины
Плагины ChatGPT 1 большой языковой
это миниатюрные приложения, использующие возможности
модели
OpenAI.
Эти приложения
позволяют
использовать
внешние базы данных, а также и другие приложения. Это как собственный магазин
приложений для
IOS
или
Google Play.
Чтобы использовать плагины, сначала нужно убедиться, что у вас данная функция
активирована. Зайдите в свой профиль, выберите раздел
затем
- Beta Features
Settings
(Настройки), а
(Бета-версии).
Плагины можно найти, наведя курсор на значок
части экрана, после выбрать пункт
увидите экран, показанный на рис.
Plugins.
6.6.
GPT-4,
расположенный в верхней
Щелкните мышью на этом пункте, и
19 апреля 2024 года OpenAI полностью убрала классическую систему плагинов из интер
ChatGPT. Теперь вместо нее используется магазин кастомных чатботов. Для перехода
к новому магазину нажмите кнопку GPT на боковой панели или перейдите по адресу
https://chatgpt.com/gpts. - Ред.
1
фейса
Глава
152
6
В верхней экрана части вы можете выбрать нужный вам плагин. Мини-приложения
можно отфильтровать по популярным, новым, всем и установленным приложени
ям. Здесь также есть поле ввода поискового запроса.
ug1n store
-
-
AJ
-
IJiis
·-
@
-
с докумект11мм формата PDF nlOбoro ~
диаграммы nоследомтельностей
AskTheCode
AskYo. urPDF
•
.
-
~-- НОЙ/ОМТ•"""""
и сnросите о любом н~оансе кода
на ,щ,осы •-мнформщоо
143nepeblXPVI[.
сооровождаемые ссылками ка страницы
дn, nро,ер,о,фюое
·--
ов
ChatWithPDF
·-_,.
ов
~
i,,,~
CoderPad
·--
е е
Diagrams: Show Ме
1111
logo
- на боnее чем
Эмусuйте
rод
• от цепых
PDF w, документое
Google Drive, nросто ytea388 ссылку
яsыпх nporp11,,o,4иpoa'"' , е о кас;троще
Схемы, дмarp,!;Mt.'l:,i, ~ХИТекr,рные
вм,у~. бnок-о:емы, мpтbll,l:,IWJ1МtA.
~ Peзiowe. ~~fllc:t№.
среды 00386отимся мы!
Эо:оорт•--
~MwtOOeWJfoe ~ r
30 разпжных
·--
r.оодааайте красмвые POf~ ,а с-t1тажые
формаlы ООСХ,
·-_,.
-ев
Рис.
2
3 Next>
6.6.
Магазин плагинов
lмr.11
ChatGPT
an UfW8ti6ed
OpenAI
Codecademy
Я предлагаю вам ознакомиться с плагином от
ку
XI..SX., CS'I м
ев
предоставляет вам доступ к мини-приложениям,
использующим возможности большой языковой модели
Плагин
ев
·ь-1111
книг в формате
<Prev 1
11111
Рааq,оо!т, """""""1 "wмх РОF-фа,пае!
у.....,. URL·,дpec: peno,IПopi,я Gi1Нub
Сеерхбыстрые wперакrивмые щпъ~
Q»дмайте и редактируйте сnожные
Работайте с любыми файламм
AIPDF
А1
Р111'
бnок-<:хемы , карты мыwnенмя и
оооэрооотч.ае
.. ..
[ 01s,.,ct,p1ugin,
Install
Codecademy.
Сначала нажмите кноп
(Установить). Чтобы плагин активировать, перейдите в верхнюю часть
экрана и нажмите на стрелку вниз. Затем щелкните на значке
Codecademy.
У этого плагина две основные функции. Одна из них заключается в том, чтобы по
зволить пользователям находить конкретные курсы или направления в зависимости
от их целей и уровня опыта. Например, пользователи, которых интересует искусст
венный интеллект и
ChatGPT,
могут запросить у плагина рекомендации по курсам,
и он предоставит соответствующий список, включая описания и информацию о
том, являются ли эти курсы бесплатными или платными.
Далее, плагин выполняет функцию инструмента для получения быстрого доступа к
технической документации, предоставляя ссылки на документы и статьи с более
подробной информацией.
Мы протестируем эту часть:
Промпт: Какой документ или статья лучше всего объясняет использование мас
сивов в
JavaScript?
Ответ, полученный от
ChatGPT,
показан на рис.
6.7.
Вверху отображается сообщение, сигнализирующее о том, что
к плагину
Codecademy.
ChatGPT обращается
Ниже расположен текст, указывающий на наличие множе-
ChatGPT
и другие большие языковые модели общего назначения
153
ства ресурсов по данной теме. Однако затем плагин сужает круг поиска, предостав
ляя ссылки на три документа.
Используется
Codecademy
v
Здесь приведены несколько полезных ресурсов для изучения массивов в
1. Массивы
Эта статья служит справочником по массивам
2. Руководство
JavaScript:
JavaScript и содержит подробный обзор
по Javascпpt· Массивы: В этом руководстве подробно рассматривается взаимодействие
с массивами в
JavaScript
3. Испол ьзова н ие массивов для группировки данных: Узнайте ,
как использовать массивы для эффективной
организации данных .
4. Массивы в JavaScript (документация) :
Эта документация содержит подробное объяснение массивов ,
включая их свойства и методы
Данные ресурсы помогут вам получить представление о массивах в
JavaScript. Не стесняйтесь изучать их ,
чтобы углубить свои знания
Массивы
Руководство по
I Codecademy
• -сот
Рис.
6.7.
Плагин
Javascript: Массивы 1
отвечает на запрос о предоставлении материалов
по массивам
Плагин
• -=
8 -.ivcoт
Codecademy
Использование массивов ДIIR группировки
данных Codecademy
Codecademy
JavaScript
AskYourDatabase
Шелдон Ниу (Sheldoп
го использования
Niu) создал этот плагин, столкнувшись с неудобством часто
ChatGPT для написания SQL-запросов. Каждый раз ему приходи
лось заново объяснять структуру базы данных, а затем копировать полученный ре
зультат и вручную запускать его в терминале. Он подумал: «А что, если
ChatGPT
сам сможет общаться с базой данных напрямую?» Так он приступил к созданию
подключаемого моду ля
С помощью
ChatGPT
Ask У ourDatabase.
и этого инструмента вы сможете без труда создать прототип
схемы базы данных. После этого выполнение запросов к данным станет проще про
стого. Что еще лучше, использование плагина позволяет отказаться от традицион
ных инструментов бизнес-аналитики
настроек.
(BI),
для которых обычно требуется много
154
Глава
Плагин
Recomblnant AI
Марк Зам
6
(Mark Zahm' s) -
разработчик, открывший собственный консалтинговый
бизнес в области искусственного интеллекта. Он создал плагин RecomЬinant
чтобы облегчить жизнь разработчикам, работающим с репозиториями на
и
Gitlab.
Этот инструмент позволяет
ChatGPT
AI,
GitHub
понять суть целых программ и ра
зобраться в мельчайших деталях. Таким образом, пользователи могут получить
полное представление о своем коде, что поможет при доработке, анализе или вне
дрении собственных идей в программное обеспечение. Марк называет его «разго
ворной
IDE».
Вот некоторые из применений плагина:
♦
Выполнение традиционных задач, таких как хранение фрагментов кода или за
просов.
♦
Использование проекта и файловой системы для создания сложных списков за
дач и цепочек запросов.
♦ Сохранение важной информации об актуальных библиотеках программирования.
GPTs
Создать собственную версию
модели называются
GPT,
ChatGPT
проще, чем кажется. Такие индивидуальные
и их настройка зачастую занимает всего несколько минут.
Разберемся на примере: допустим, мы хотим создать
GPT,
который будет служить
руководством по стилю разработки. В нем можно собрать рекомендации о том, как
называть переменные, чтобы они были понятны всем, как оформлять отступы, ка
кие шаблоны и практики использовать в команде. По сути, это дресс-код для ваше
го кода.
Идея заключается в том, чтобы сделать все в программе единообразным и аккурат
ным. Так всем будет проще читать и понимать кодовую базу, что может стать спа
сением во время больших проектов. Но вот в чем загвоздка: если вы новичок в этом
деле, это может оказаться немного сложным. Возможно, вы привыкли программи
ровать определенным образом, и вдруг вам придется адаптироваться к новым стан
дартам.
Именно здесь может помочь
ном экране
ChatGPT -
вать) и затем выберите
GPT.
Create
а
панелями, как показано на рис.
GPT,
Так что давайте создадим его. Сначала на глав
в левом верхнем углу
- выберите пункт Explore (Исследо
GPT (Создать GPT). У вас появится окно с двумя
6.8. На левой панели будет показан создаваемый
а на правой находится область предварительного просмотра. Чтобы всё рабо
тало согласно руководству по стилю разработки, ваш промпт должен выглядеть
следующим образом:
Промпт: Создайте систему, обеспечивающую соблюдение руководства по сти
лю разработки программного обеспечения.
ChatGPT
ChatGPT
и другие большие языковые модели общего назначения
начнет создавать инструкции для
чатый запрос, но
ChatGPT задаст несколько
GPT.
Конечно, это несколько расплыв
уточняющих вопросов, чтобы получить
больше информации. Сначала он предложит название для
предлагается
<
•.
«Code Stylist»
GPT.
По умолчанию
(Стилист для кода).
НовыйGРТ
• Проекr
Предварительный просмотр
Конфигурация
Создать
8
155
Конструктор GPT
Привет! Я помогу вам создать новый GРТ. Вы можете сказать
что-то вроде : «Сделайте из меня творца , который помогает
создавать визуальные образы для новых продуктов» или «Сделайте
из меня инженера-программиста , который помогает форматировать
мой код»
Что бы вы хотели сделать?
10
11
Сообщение от конструкrора GРТ. ..
Рис.
6.8.
Конструктор
GPT
Начните с определения вашего
позволяет создать пользовательский
GPT
GPT
Затем он, используя DALL-E 32 , создаст изображение профиля для GPT. Но вы мо
жете загрузить и свое собственное изображение.
Затем он спросит о таких деталях, как язык или языки, методы, рекомендации, пра
вила, чего следует избегать и т. д. Допустим, вы укажете ему язык
Python
и задади
те другие требования.
Далее, в верхней части панели, выберите вкладку
Configure
(Настроить), после че
го вы можете загрузить свое описание стиля.
Затем перейдите на правую панель, чтобы поэкспериментировать с
GPT.
Если вы
попросите его написать код, он автоматически будет использовать язык програм
мирования
Python и
подчиняться вашим правилам.
Вы можете сохранить созданный вами
лу. После этого
GPT
OpenAI
Одна из категорий
♦
GPT.
также создала магазин приложений для
можно, выбрав пункт
ложений для
нажав на кнопку в правом верхнем уг
появится на главном экране. Чтобы воспользоваться им, про
сто нажмите на кнопку
Компания
GPT,
-
GPT
в верхней левой части экрана
GPT.
ChatGPT.
Перейти к нему
программирование. Вот несколько примеров доступных при
GPT:
GPTavem -
это инновационная платформа, предназначенная для обучения ко
дированию с помощью уникального подхода, называемого «программирование
2
Dall-E 3 - модель генерации изображений по текстовому описанию, разработанная ком
OpenAI. - Пер.
панией
156
Глава
6
по запросу». Платформа предлагает более
20
горячих клавиш для упрощения
процесса кодирования и содержит коллекцию из
75
стартовых проектов для изу
чения кода. Платформа является интерактивной, позволяя пользователям зада
вать вопросы, загружать фотографии, получать доступ к командному меню и
справочным файлам
♦
DesignerGPT
README.
был создан Пьетро Ширано
(Pietro Schirano)
и специализируется на
создании и размещении эстетически привлекательных веб-сайтов.
♦
Screenshot
То
Code GPT,
предоставленный сайтом
godofprompt.ai,
предлагает
функцию, позволяющую пользователям загружать скриншоты веб-сайтов, кото
рые затем преобразуются в чистый код
♦
HTML, Tailwind и JavaScript.
Mindmap/Diagram/Chart-PRO BUILDER,
предлагаемый порталом
pyxl.ai,
помо
гает наглядно представить код и базы данных. Приложение позволяет пользова
телям создавать блок-схемы, диаграммы и последовательности с помощью пере
таскивания
мышью
в
удобном
редакторе,
помогая
понять
и
организовать
сложные структуры данных.
♦
Code Guru
был разработан Райаном Дж. Топпсом
(Ryan J. Topps)
и предлагает
ряд услуг, включая рецензирование кода, написание запросов на извлечение, ге
нерацию и оптимизацию функций, написание тестов и комментирование суще
ствующего кода.
Вы можете в свой
пункт
Actions
GPT
добавить сторонние
API.
Для этого нужно выбрать
(Действия).
Gemini
Когда появился
ChatGPT,
компания
Google
была застигнута врасплох. Даже, не
смотря на все свои ранние шаги и крупные инвестиции в искусственный интеллект,
Google
не была готова к волне генеративного искусственного интеллекта.
Google
с
опаской относилась к этой новомодной технологии, опасаясь не только за ее эф
фективность, точность и корректность, но и влияние на прибыльный рекламный
бизнес компании. Но затем, в начале
2023
года, акции
Google
упали. И это застави
ло сотрудников задуматься. Компания решила сделать шаг вперед и выпустила
экспериментальный чат-бот
Bard,
своего рода аналог
В начале работы
ChatGPT.
свой собственный вариант генеративного ИИ,
Bard
столкнулся с некоторыми про
блемами, но потом он стал лучше, нашел свое применение в различных приложе
ниях Google и помог акциям компании восстановиться.
В феврале
2024
года в компании
Google
платформу
Bard переименовали в Gemini.
Gemini Advanced, работа с
Помимо бесплатной версии, появилась премиум-версия
которой стоит
19,99
доллара в месяц. Но сначала (в течение двух месяцев) прило-
ChatGPT
и другие большие языковые модели общего назначения
157
жение предоставляется бесплатно. В этом чат-боте используется самая сложная
версия большой языковой модели от
Представители
Google
считают
Google, которая получила название Ultra 1.0.
(https://oreil.ly/WYs67): «Чат-бот может помочь
вам справиться с более сложными сценариями кодирования, послужив в качестве
«звуковой панели» для обсуждения идей и помощи в оценке различных подходов к
кодированию».
Google
также запустил мобильную версию чат-бота
Gemini
для
Android
и
iOS.
С помощью этого приложения вы можете набирать текст, говорить или использо
вать изображения для взаимодействия с большой языковой моделью. На рис.
показан интерфейс чат-бота
Рис.
6.9.
6.9
Gemini.
Пользовательский интерфейс
Gemini
позволяет управлять сеансами чата
и вводить текстовые запросы, изображения и поддерживает речевой ввод
Как и в
ChatGPT,
в левой части экрана находится список сеансов чата. Если вы хо
тите скрыть этот список, просто нажмите на кнопку с изображением гамбургера
вверху. Для любого чата вы можете нажать на маленькую кнопку справа, чтобы
изменить его название или удалить. Кроме того, есть еще одна замечательная
функция: вы можете закрепить чаты, чтобы они всегда были под рукой.
Если необходимо очистить все или только некоторые элементы в зависимости от
времени их появления, перейдите в левый нижний угол и нажмите на кнопку На
стройки. Здесь же вы можете указать
Gemini,
сохранять ли ваши запросы или про
сто удалить их.
В центре экрана размещены полезные советы по использованию
напоминания о безопасности. В нижней части
ва
-
зона загрузки изображений.
Gemini
-
Gemini,
а также
поле для ввода запросов, а спра
способен извлекать текст, распознавать
объекты и сцены, отвечать на вопросы по изображениям и даже создавать ориги
нальные тексты на их основе.
Глава
158
6
В правой части поля ввода расположен значок микрофона, позволяющий использо
вать функцию преобразования речи в текст для генерации текста для
А что насчет плагинов? Есть ли у
Gemini
Gemini.
своя версия? Есть, и эти миниатюрные
программы называются расширениями. В настоящее время расширения предназна
чены только для приложений
Google,
таких как
Flights, Hotels, Maps, Workspace
и
У ouTube. Расширений для сторонних приложений не существует.
Наконец,
Gemini
имеет доступ к Интернету в режиме реального времени. Чтобы вы
могли проверить источник, в его ответах будут содержаться ссылки.
Приложения
Приложения
Excel
и
Google
Таблицы предназначены не только для работы с элек
тронными таблицами. В них предусмотрены собственные языки программирова
ния, позволяющие расширить возможности этих приложений. Возьмем, к примеру,
Excel.
Здесь имеется
Visual Basic for Applications (VBA) -
мощная система про
граммирования, позволяющая создавать собственные сценарии и программы. С ее
помощью можно автоматизировать выполнение однотипных задач, создавать спе
Excel также поставляется с множест
PivotTaЫes и Power Query, и прекрасно взаимо
циальные функции и анализировать данные.
вом готовых функций, таких как
действует с
Power BI
для создания первоклассных визуальных эффектов и анализа
данных.
С другой стороны,
Google
Таблицы тесно связаны с
которая во многом напоминает
братом».
Google
JavaScript
Google Apps Script -
средой,
и служит ее своеобразным «двоюродным
Таблицы позволяют выполнять множество тех же задач, что и
Excel, при этом предлагая интеграцию с другими сервисами Google, такими как
Drive и Gmail. Встроенный набор функций можно дополнить с помощью надстроек
из Google Workspace Marketplace. Поскольку Google Таблицы работают полностью
в облаке, они идеально подходят для совместной работы, веб-приложений и ко
мандных проектов, обеспечивая надежность и гибкость.
Тогда может ли
Gemini
здесь оказывать свою помощь? Определенно. Например, вы
можете использовать приложение для объяснения формулы. Несомненно, формулы
могут быть довольно сложными. Вот пример:
Промпт: Объясните следующую формулу
Excel:
=SUM(OFFSET(Al, 1,0,COUNT(A:A), 1))
Для
Gemini разобраться
в этом не составит труда.
Другой вариант использования
-
создание скриптов
VBA.
Вот несколько приме
ров промптов:
Промпт: Как с помощью
VBA
создать пользовательскую форму в
Excel
для
ввода данных входа пользователя в систему?
Промпт: Помогите мне написать сценарий
ределенные данные паролем.
VBA
для
Excel,
чтобы защитить оп
ChatGPT и другие большие языковые модели общего назначения
Промпт: Мне нужен код
VBA
для проверки адресов электронной почты и фор
матов дат в листе входа пользователей в
Промпт: Можно ли с помощью
по электронной почте из
159
VBA
Excel.
Помогите, пожалуйста!
отправлять автоматические уведомления
для получения обновлений информации о входе
Excel
пользователей в систему?
Все это хорошо, но когда речь идет о работе с электронными таблицами, важно
понимать взаимосвязь между данными, формулами и скриптами. Понимание того,
как они взаимодействуют друг с другом, поможет вам построить мощные модели
и не допустить ошибок. В конце концов, если вы что-то измените в данных, это из
менение может отразиться на ваших формулах и повлиять на результаты работы
скриптов, и вы не успеете оглянуться, как ваши конечные результаты развернутся
на
180
градусов.
Впрочем,
Gemini
может загружать и анализировать электронные таблицы Ехсе\. Вы
можете вводить промпты по ним, например, чтобы понять ход действий или выде
лить определенную область данных или логики.
Рассмотрим пример. Предположим, у вас есть электронная таблица
Excel
с данны
ми о продажах книг. Вот несколько примеров промптов:
Промпт: Покажите, как найти в
Excel наибольшую
сумму авторского гонорара?
Промпт: Я хочу рассчитать коэффициент оборота запасов для каждой книги в
Excel.
Какую формулу мне следует использовать?
Промпт: Как создать в
Excel
предупреждение о недостатке запасов, указываю
щее, когда следует заказать больше, исходя из уровня повторного заказа?
Промпт: Как рассчитать процент положительных отзывов
для книг в
или выше)
Excel?
Программирование в
Gemini
(оценка 4
понимает более
Gemini
20
языков программирования. Так что давайте опробуем
систему с помощью этого промпта:
Промпта: Создайте функцию
TypeScript,
которая преобразует температуру из
градусов Цельсия в градусы Фаренгейта.
На рис.
6.1 О
показан ответ от
Gemini.
В правом верхнем углу есть опция
выборе этой опции
Gemini
Show drafts option
(Показать черновики). При
предложит три варианта ответа. Это удобно, когда нуж
но сравнить подходы и выбрать наиболее подходящее решение для вашей задачи
по написанию кода.
Как и в случае с
ровать.
ChatGPT,
ответ содержит листинг кода, который вы можете скопи
Gemini также дает объяснение.
Глава
160
♦
6
19
TypeScript
I**
*
*
*
Преобразует температуру из градусов Цельсия в градусы Фаренгейта.
@param celsius Температура в градусах Цельсия.
* @returns Температура в градусах Фаренгейта.
*I
function celsiusToFahrenheit(celsius: number): number {
const fahrenheit: (celsius * 9/5) + 32;
return fahrenheit;
}
//
Примеры использования:
console.log('0°C равно ${celsiusToFahrenheit(0)}°F'); // ОJО<идае..,.й вывод: 0°С равно~
console.log('25°C равно ${celsiusToFahrenheit(25)}°F'); // ОJО<мае..,.й вывод: 25°С рав,
console.log('-10°C равно ${celsiusToFahrenheit(-10)}°F'); // ОJО<идае""'й вывод: -10°С 1
Рис.
На рис.
6.11
6.1 О. Gemini
отвечает на запрос о создании функции
Typescript
показано несколько способов реагирования на полученный ответ.
Выход:
77
212
Рис.6.11. Щелкните по значкам внизу,
чтобы выбрать различные способы реагирования на ответ
Gemini
Отреагировать на полученный ответ вы можете, выбрав следующие варианты:
♦
Evaluation
(Оценка)
Вы можете нажать кнопку «Большой палец вверх» или «Большой палец вниз»,
чтобы оставить отзыв об ответе.
♦
Modify this response
(Изменить этот ответ)
Нажмите на кнопку со значком фильтра, чтобы получить доступ к вариантам,
позволяющим сделать ответ короче, длиннее, проще или более профессио
нальным.
♦
Share
(Поделиться)
Вы можете поделиться ответом, создав на него общедоступную ссылку. Можно
также экспортировать ответ в
Google Docs
или в черновик
Gmail.
ChatGPT
и другие большие языковые модели общего назначения
161
♦ Двойная проверка ответа
Когда вы нажмете на кнопку с логотипом
Google, Gemini
проверит ответ на точ
ность. В нем могут появиться ссылки для получения технической помощи.
Claude
В
2021
году брат и сестра Дарио и Даниэла Амадеи
новали свой собственный стартап под названием
высокие должности в компании
(Dario and Daniela Amodei) ос
Anthropic. Раньше они занимали
но у них возникла идея создать ИИ
OpenAI,
платформу другого типа. Их идея заключалась в том, чтобы сделать искусственный
интеллект более надежным, например, за счет минимизации предвзятости. Эта тех
нология стала известной как конституциональный искусственный интеллект.
•claude
Доброе утро, Том.
~
Чем я моrу вам помочь?
·illii-14+9
------------t Новое в Claude i - - - - - - - - - - - - . . . _
с
Понимаем и работаем с изображениями
11,w
i,11,'WIR~ -
- ~·
,г1·.
--
....
•~•~...,--~,
!
•
,* ~ •
"
-
--- -
•,:;i
•
~
%7
·- ;-,
'/
Расшифровка рукописных
Предnагаем описания
заметсж
предметов
х
~-
Преобразование внешнею
вида rюльзовательскоrо
интерфейса во фроктенд-код
Подписаться на версию
В данный момент вы бесплатно исоопьзуете
Pro Claude З Opus
Claude З Sonnet. нашу вторую по уровню
интелпекта модель. Чтобы попробовать версию Opus, нашу самую интелпектуальную
модель. обновите приложение до Claude Pro
Предыдущие чаты за прошлый месяц
Реверсирование строки
Рис.
6.12.
JavaScript
Главный экран чатбота
Claude содержит список
ваших предыдущих действий,
позволяет ввести запрос и загрузить файлы
Антропологическая большая языковая модель отличается развитыми способностя
ми программирования. Эта модель получила
71,2%
баллов при проведении теста по
162
Глава
6
написанию кода на
ра данных
Python. Тест проводился с помощью
Codex HumanEval (https://oreil.ly/Rj-sM).
Основным преимуществом
Claude
инструмента оценки набо
является контекстное окно на
ООО лексем.
100
Это означает, что приложение имеет возможность работать с большими листинга
ми кода. Вы также можете загружать свои файлы. Например, в формате
На рис.
6.12
показан главный экран
PDF.
Claude.
В верхней части главного экрана вводится запрос. Вы также можете загрузить до
пяти файлов. Ниже представлен список ваших предыдущих действий, сгруппиро
ванных по давности их совершения.
Предположим, мы вводим следующее:
Промпт: Можете ли вы написать функцию
JavaScript,
которая изменяет строку,
читая и выводя на печать ее справа налево?
На рис.
6.13
показан ответ
Claude.
Можете ли вы написать функцию
реверсирует cтPQry?
Ниже приведена функция , которая реверсирует строку в
Jc1vaScr1pt,
•
которая
JavaScript
Разложим все по полочкам .
• Функция зtr. зplit("')
• Функция
разделяет строку на массив символов
. reverзe() разворачивает массив в обратном направлении
• Функция .join(') объединяет массив в одну строку
Например :
Функция reverseString принимает в качестве параметра строку, разбивает ее на массив,
разворачивает массив и объединяет его в новую строку
А\
С:, Коои- '::) Повторить
Q
ровать
Рис.
6.13. Claude
отвечает на запрос функции
JavaScript
ChatGPT
Как и
ChatGPT, Claude
и другие большие языковые модели общего назначения
163
пользователю предоставляется в бесплатном варианте ис
пользования. Но вы также можете заплатить
20
долларов в месяц за премиум
версию. С обновлением вы получаете в пять раз большую пропускную способ
ность, приоритетный доступ в периоды высокой посещаемости и возможность за
благовременно получать доступ к новым функциям.
Заключение
В этой главе мы рассмотрели некоторые из больших языковых моделей, таких как
ChatGPT, Gemini
и
Claude.
Мы протестировали их замечательные возможности
-
генерацию кода, плагины, работу в Интернете в реальном времени и обработку
больших фрагментов информации. Конечно, они не могут сравниться со специали
зированными инструментами для программирования, но все же этим моделям тоже
есть что предложить, если вы хотите ускорить разработку программного обеспече
ния. А поскольку эти большие языковые модели становятся все совершеннее, они
готовы совершить еще более удивительные прорывы в программировании на осно
ве искусственного интеллекта.
ГЛАВА
7
Идеи, планирование и требования
В этой главе мы сосредоточимся на первых шагах создания программного обеспе
чения
-
том этапе, когда зарождаются самые яркие идеи и формируется четкий
план их реализации. Мы рассмотрим, как с помощью
ChatGPT
можно проводить
продуктивные мозговые штурмы и детально прорабатывать замыслы. Изучим ос
новы маркетинговых исследований, проанализируем актуальные тенденции и оце
ним действия конкурентов. Огдельное внимание уделим технологии «белая доска» простому и наглядному инструменту для обмена идеями и их доработки. Кроме
того, мы разберем, как грамотно планировать проект, познакомимся с методоло
гиями
Agile
и
Scrum
и выясним, каким образом их можно применить в вашем про
граммном проекте.
Мозговой штурм
Каждый день на рынке появляются тысячи программных продуктов. Поэтому соз
дать что-то действительно стоящее и выделяющееся из общей массы
из легких. Но с такой большой языковой моделью как
ChatGPT,
-
задача не
вы можете устро
ить эффективный мозговой штурм.
Прежде всего, вы можете предложить
ChatGPT рассмотреть различные
подходы.
Вот промпт:
Промпт: Какие существуют методы мозгового штурма для поиска идей по соз
данию новых продуктов? Изучите этот вопрос с помощью Интернета.
ChatGPT
предложил
1О
полезных решений
-
предлагаем вам взглянуть на некото
рые из них.
ChatGPT
♦
5
«почему)). Начните с момента возникновения проблемы и продолжайте посте
пенно разбираться, задавая себе вопросы «почему она возниклю). Это помогает
вернуться назад и понять, что, где и когда пошло не так.
♦
Плохая идея. Специально придумайте кучу неудачных идей. Разговоры о том,
почему они так плохи, на самом деле могут подтолкнуть к поиску продуманных
решений.
Глава
166
♦
7
Звездочет. Речь идет о вопросах, а не об ответах. Вы используете диаграмму в
форме звезды и задаете с ее помощью такие вопрос: кто, что, когда, где, почему
и как.
Предположим, что вы хотите использовать метод «Звездочет». Вы можете узнать
подробнее об этом, воспользовавшись следующим промптом:
Про,wпт: Как бы вы использовали метод «Звездочет», чтобы придумать новую
идею для создания программного продукта?
ChatGPT
привел простое описание метода «Звездочет» применительно к этой теме:
ChatGPT:
♦
Кто: подумайте, для кого предназначено ваше программное обеспечение.
♦
Что: разберитесь, для решения какой проблемы предназначено ваше программ
ное обеспечение. Какие в нем будут функции? Чем оно отличается от уже суще
ствующих программ?
♦
Когда: определите наилучшее время для работы вашего программного обеспе
чения, его запуска и выпуска обновлений или исправлений.
♦
Где: на каких платформах или устройствах будет использоваться программное
обеспечение?
♦
Почему: разберитесь, насколько необходимо ваше программное обеспечение.
Почему люди должны выбрать именно его, а не другие программы?
♦
Как: продумайте, что будет делать ваше программное обеспечение, как вы буде
те его создавать и продавать, а также как вы будете оказывать помощь пользова
телям, когда это станет необходимо.
Этот процесс
-
замечательный способ получить более четкое представление о ва
шем замысле по созданию нового программного продукта.
Итак, допустим, вы решили составить список идей. Начните с выбора конкретной
категории, определите целевую аудиторию, а также уточните, какую проблему
должна решать ваша программа и какие функции в ней следует предусмотреть. Вот
несколько промптов, которые помогут вам приступить к работе:
Промпт: Я хочу разработать приложение для отслеживания состояния здоровья
пожилых людей. Проблема заключается в том, что им сложно следить за хрони
ческими заболеваниями и приемом лекарств. Какие функции можно включить в
приложение, чтобы сделать его удобным для пожилых людей и помочь им более
эффективно управлять своим здоровьем?
Промпт: Целевая аудитория
-
студенты колледжа, испытывающие трудности с
управлением своими финансами. Какие функции должно включать приложение
для составления бюджета, чтобы помочь им отслеживать расходы, экономить
деньги и легко разбираться в планировании своих финансов?
Промпт: Я хочу создать приложение для изучения языков для загруженных
профессионалов, которым сложно найти время для регулярных занятий. Можете
ли вы предложить функции, которые учитывали бы их плотный график и пред
лагали бы быстрые и эффективные занятия по изучению языка?
Идеи, планирование и требования
Насколько хороши идеи, которые генерирует
ChatGPT?
167
Профессора У ортонской
школы проверили это на своем курсе инноваций МВА. Они попросили студентов
придумать дюжину идей по созданию продуктов или услуг. Затем эту же просьбу в
виде промпта ввели в чат
модель
GPT -4.
ChatGPT,
в котором использовалась большая языковая
В результате среди предложенных идей были такие, как поварской
набор для комнаты в общежитии и удобная подушка для жестких кресел в аудитории.
Чтобы проверить эти идеи, профессора провели онлайн-опрос о намерении совер
шить покупку товара или воспользоваться услугой с предложенными функциями.
Вопрос звучал следующим образом: «Какова вероятность того, что вы совершили
бы покупку, исходя из предложенной идеи, если бы данный товар или услуга были
вам доступны?»
В среднем около
40% студенческих идей оказались достойны внимания, а идеи,
ChatGPT, набрали чуть больше - 49%. Но профессора пошли
дальше. Они отобрали 10% наиболее успешных идей. Это те предложения, которые
имеют реальный потенциал, чтобы стать переломными. И знаете что? Из 40 пред
ложений только 5 принадлежали студентам.
предложенные
Исследование рынка
Прежде чем приступить к реализации создания программного продукта, следует
задать несколько ключевых вопросов:
♦
действительно ли именно данный продукт необходим;
♦
готовы ли клиенты платить за него деньги;
♦
каков объем рынка для него?
Все это называется изучением рынка. Конечно, это далеко не предсказание, но та
кое исследование определенно может помочь снизить вероятность того, что вы зря
потратите время и силы на то, что никому не нужно.
Дело в том, что многие новые продукты остаются невостребованными. Клейтон
Кристенсен
(Clayton Christensen),
профессор Гарвардского университета и автор
бестселлеров, провел множество исследований на эту тему и выяснил, что около
80%
новых продуктов оказываются невостребованными
(https://oreil.ly/6BJ2H).
А когда речь заходит о программных проектах, то, похоже, эта цифра может быть
еще выше. В табл.
7 .1
приведены некоторые из наиболее ярких примеров.
Таблица
Продукт/услуга
Год выпуска
Friendster
2002
7.1. Невостребованные продукты
Причины неудачи
Технические проблемы, проблемы с масштабирова-
нием, приложение обогнал
Microsoft Zune
2006
Facebook
Не удалось выдержать конкуренцию с
iPod,
в результате предложенной ими технологии
изменилась динамика музыкального рынка
168
Глава
7
Таблица
Продукт/услуrа
Год выпуска
Windows Vista
2007
7.1
(окончание)
Причины неудачи
Высокие системные требования, проблемы совместимости, вопросы с безопасностью
Google Wave
Сложный интерфейс, не совсем понятное назначе-
2009
ние, недостаточная адаптация пользователей
Google+
Многочисленные ошибки, недостоверные данные,
2011
слабые навигационные возможности
Vine
Оказался в тени конкурентов, таких как Instagram 1
2013
и
Amazon Fire
Phone
2014
Quibi
2020
Snapchat
Высокая цена, ограниченный выбор приложений,
малопривлекательные функции
Формат короткометражного контента не принят,
высокая конкуренция, влияние
COVID-19
Один из самых грандиозных провалов
- видеоигра по фильму Стивена Спилберга
(Steven Spielberg's) «Инопланетянин» 1982 года. Компания Atari выложила 21 млн
долларов на покупку прав у студии Universal Pictures (https://oreil.ly/pu8Gu) и еще
5 млн долларов на рекламу.
Игра действительно провалилась. Она бьша очень запутанной и не очень увлека
тельной. Что же произошло? Компании
экземпляров. Оставшиеся
2,5
Atari
удалось продать лишь около
1,5
млн
млн оказались на свалке в Нью-Мексико.
Давайте разберемся, как можно использовать
ChatGPT
для исследования рынка.
Прежде всего, необходимо определить целевую аудиторию. Подумайте, кому это
приложение будет наиболее полезно. Давайте начнем мозговой штурм и подумаем,
кто может стать пользователем вашей программы. Рассмотрим такой промпт:
Промпт: Какая целевая демографическая аудитория может быть у программы
управления проектами?
Затем вы можете поручить
ChatGPT
выполнить задачу, которая очень важна для
понимания, на кого рассчитывается программа: создать детализированное описание
личности пользователя. Считайте, что личности
-
это персонажи, дающие вам
представление о различных типах людей, которые могут использовать ваш про
дукт. Здесь следует указать их возраст, интересы, работу и образ жизни. После со
ставления карты этих личностей у вас появится представление, кто является ваши
ми клиентами и что они ищут.
Я обратился к
ChatGPT
с просьбой подготовить описание личностей, которые, воз
можно, станут пользователями программного обеспечения по управлению проек
тами. Некоторые из ответов вы можете увидеть на рис.
1
7.1.
Instagram является запрещённой социальной сетью на территории РФ.
Идеи, планирование и требования
Вот три примера персон1111~оированных портреrо11 попьзовпелей
(user personas)
для программы управления проектами. Они отражают реальные типы
пользователей, их цели, боли и потребноаи.
1. Анна -
Руководиrепь проектов в маркетинrовом
аrентсrве
35 лет
•
Вmр;~ст:
•
Опыт:
•
Компания: Маркетинговое агентство,
•
10 лет
в управлении проектами
20 человек
Цель: Следит~ за дедлайнами, распределять задачи между сотрудниками,
отчитываться перед клиентами
•
•
•
&
Пробпемы:
•
Слишком много задач и коммуникации в разных каналах
•
Трудно быстро собрать отчёт по проекту
Потребности:
•
Интуитивная КаnЬаn-доска
•
Возможность прикреплять файлы и вести обсуждения в задачах
•
Визуальные отчёты по прогрессу и срокам
•
Интеграция с Trello, Slack и Google Docs
Технические навыки: Средние
2. Иrорь - ТИмлид в IТ-компании
29 лет
•
Вmр;~ст:
•
Опыт: б лет в разработке ПО, 2 года как тимлид
•
Компания: Продуктовая IТ-компания,
•
40 человек
Цель: Управлять задачами команды, отеле.живать прогресс,
синхронизироваться с другими отделами
•
Пробпемы:
•
Много ручной работы в Jira
•
Неудобный UI замедляет процесс
Рис.
7.1. ChatGPT создал
описание личности пользователя
для программного обеспечения по управлению
169
Глава
170
ChatGPT
7
также может быть полезен при составлении опросов и анкет для сбора
конкретных данных.
Промпт: Создайте опрос, направленный на определение потребностей покупа
телей в программном обеспечении для управления проектами. Опрос должен
включать вопросы, которые помогут определить ключевые функции, предпоч
тения в отношении удобства использования, специфические отраслевые потреб
ности и любые конкретные проблемы, которые покупатели хотят решить с по
мощью
данного
типа
программного
обеспечения.
Кроме
того,
включите,
пожалуйста, вопросы, оценивающие важность таких факторов, как стоимость,
поддержка, возможность масштабирования и интеграционные возможности.
Давайте рассмотрим некоторые другие факторы, которые необходимо учитывать
при оценке рынка для программного обеспечения.
Тенденции развития рынка
При разработке нового приложения анализ рынка может сыграть важную роль. Это
все равно что получить инсайдерскую информацию о том, что на самом деле нужно
пользователям, а также узнать, что замышляют ваши конкуренты. Считайте, что
это ваш секретный план действий. Вы сможете уловить тенденции до того, как они
проявятся, и увидеть возможности, которые другие могут упустить. Кроме того, это
очень хорошая подстраховка. При анализе рынка сокращается количество догадок,
и вы можете сделать разумный выбор, который с большей вероятностью приведет к
успеху. И давайте не будем забывать о маркетинге. Зная свою аудиторию изнутри,
вы сможете разрабатывать рекламу и промоакции, которые найдут у целевой ауди
тории отклик, вместо того чтобы просто вбросить идеи в надежде, что они прижи
вутся.
ChatGPT может
стать хорошим помощником в ваших маркетинговых исследованиях.
Конечно, модель обучается только до определенной даты, но есть обходной путь:
вы можете в промпте указать ей «исследовать Интернет».
Вот несколько примеров:
Про,нпт: Изучите Интернет, чтобы найти информацию о современных тенден
циях в <конкретной категории программного обеспечения, например, мобиль
ные игры, образовательные технологии> по состоянию на <год>.
Про.нпт: Изучите Интернет и представьте обзор новых технологий в индустрии
программного обеспечения, которые набирают популярность в <году>.
Промпт: Найдите в Интернете сведения о потребительских предпочтениях, ко
торые в настоящее время влияют на рынок программного обеспечения, особенно
в <целевой демографической группе или типе приложения>.
Пролтт: Изучите Интернет, чтобы найти последние направления в оформлении
пользовательского интерфейса и пользовательских впечатлений
программных приложений в <году>.
(UI/UX)
для
Идеи, планирование и требования
171
Промпт: Изучите Интернет и составьте список лучших программных приложе
ний в <конкретной области или категории> и объясните, за счет чего они поль
зуются успехом на современном рынке.
Общий адресный рынок
Общий адресный рынок
(Total
addressaЫe
market
или ТАМ)
-
это оценка макси
мальной суммы денег, которую вы могли бы заработать, если бы все, кто мог при
обрести ваш продукт, действительно это сделали. Такое исследование поможет вам
понять, на чем сосредоточить свою энергию, как позиционировать свой продукт на
рынке и каким должен быть ваш план развития. Это проверка реальности, которая
поможет вам установить реалистичные цели в отношении того, какую часть рынка
вы можете захватить и сколько денег вы можете заработать.
Венчурные капиталисты придают большое значение величине общего адресного
рынка, когда решают, куда вложить деньги, поскольку этот показатель демонстри
рует, насколько велик потенциал роста. Венчурные капиталисты всегда находятся в
поиске мест, где их инвестиции могут привести к максимальной прибыли, а чем
больше размер общего адресного рынка, тем больше рынок сбыта, который только
и ждет, чтобы его освоили.
Обычно венчурные фонды стремятся к тому, чтобы их объем общего адресного
рынка составлял более миллиарда долларов, а в идеале
-
гораздо больше. В конце
концов, даже если компания захватит лишь небольшой кусок такого огромного
рынка, прибыль может быть впечатляющей.
В ответ на промпт типа «Какие существуют способы оценки размера общего адрес
ного рынка?»
ChatGPT
ответит примерно так:
ChatGPT:
♦
Подход «сверху вниз»: Вы собираете отраслевые данные и проводите маркетин
говые исследования, чтобы получить представление о размере всего рынка. За
тем вы немного изменяете масштаб. Например, фокусируетесь именно на той
части рынка, на которую нацеливаетесь.
Подход «снизу вверх»: Вы определяете, сколько людей или компаний заинтере
сованы в вашем продукте, оцениваете, какая доля из них действительно совер
шит покупку (это и есть коэффициент конверсии\ а затем рассчитываете при
быль от каждого клиента. Этот подход более трудоемок, но он может дать вам
более четкую и конкретную картину.
2
Коэффициент конверсии -
это процентный показатель, который рассчитывается как про
центное отношение трафика к полученным целевым действиям и показывает эффектив
ность того или иного канала и источника трафика.
-
Пер.
Глава
172
7
Давайте рассмотрим пример. Предположим, у вас есть стартап в области медицин
ских технологий:
Промпт:
SilverConnect Health -
стартап в области медицинских технологий,
специализирующийся на телемедицинских услугах. Целевой рынок находится
в США и ориентирован на пожилых людей, проживающих в городских рай
онах. Каков текущий объем рынка телемедицинских услуг для
Health? Каковы
шие 5-1 О лет?
SilverConnect
прогнозируемые темпы роста этого сегмента рынка в ближай
ChatGPT после поиска в
Интернете приводит несколько интересных фактов:
ChatGPT:
♦ Размер рынка в
в
35
2022
году. Рынок телемедицины в США оценивается более чем
млрд долларов США на
2022 год. По другой оценке,
91,2 млрд долларов США.
в том же году объем
рынка телемедицины составит
♦ Прогнозируемые темпы роста. По одной из оценок, совокупный годовой темп
роста
(CAGR) составит 12,5% в период с 2023
CAGR в 22,9 % с 2023 по 2030 год.
по
2032
год. Другой источник
прогнозирует
Конкуренция
Существует несколько ключевых преимуществ конкурентного анализа. Прежде
всего, этот анализ дает вам возможность взглянуть на рынок. Вы увидите, какие
технологии уже существуют, что работает, а что нет. Это поможет вам выявить не
достатки, которые ваше приложение может восполнить. Кроме того, вы сможете
убедиться в том, что предлагаете что-то новое.
Также можно учиться у конкурентов как на примере их побед, так и на примере их
неудач, что улучшит ваш результат.
Когда вы знаете, в чем отличие вашего продукта от продукта конкурентов, вы смо
жете внести определенные коррективы в свой маркетинг, более эффективно воз
действуя на нужных вам людей
Что касается
ChatGPT, то
-
ваших потенциальных покупателей.
он окажет неплохую помощь при анализе конкурентоспо
собности. Вот несколько промптов:
Промпт: Перечислите главных конкурентов <вашего типа приложения> в <кон
кретной отрасли или рынке>.
Промпт: Сравните возможности <вашего приложения> с возможностями трех
основных конкурентов.
Промпт: Какие модели ценообразования используют конкуренты <вашего при
ложения> на рынке?
Промпт: Как ведущие конкуренты позиционируют себя на рынке <программно
го обеспечения>?
Идеи, планирование и требования
173
Промпт: Определите сильные и слабые стороны приложения <название конку
рента>.
Промпт: Обобщите отзывы клиентов о <названии приложения конкурента>, об
ращая внимание на удовлетворенность пользователей и слабые места программ.
Компанм11
Продукт/Пnа,форма
Краткое описание
Salesforce
Salesforce CRM
Лидер рынка
6)
CRM; преД11аrает облачную
платформу с широкими возможностями
ДIIЯ
Microsoft
Dynamics 365
828
и 82С.
Интеграция с другими продуктами
Microsoft, хорош ДIIЯ корпоративного
сегмента.
SAP
SAP Customer Experience
Подходит крупным предприятиям;
сильная аналитика и интеграция с
Oracle
Oracle СХ Cloud
ERP.
Мощная платформа с упором на
аналитику, автоматизацию и
масштабируемость.
HubSpot
HubSpotCRM
Бесплатная базовая версия; популярен у
малого и среднего бизнеса.
Zoho
Zoho СRМ
Бюджетное решение с богатым
функционалом, ориентировано на МСБ.
АdоЬе
АdоЬе Experience Cloud
Сильные инструменты ДIIЯ маркетинга,
персонализации и управления
клиентским опытом.
Pipedrive
Pipedrive
Интуитивно понятный интерфейс,
популярный у продажников и малых
команд.
Freshworits
Freshsales
Простота внедрения и хорошее
соотношение цена/качество ДIIЯ малого
бизнеса.
SugarCRM
SugarCRM
Гибкая настройка, ориентирован на
организации, нуждающиеся в
кастомизации.
Рис.
7.2. ChatGPT проводит конкурентный
анализ рынка программного обеспечения
по управлению взаимоотношениями с клиентами и оформляет его в виде таблицы
Глава
174
7
Вы также можете попросить
ChatGPT
представить сгенерированный анализ в виде
таблицы, что сделает документ более наглядным:
Промпт:
Предоставьте краткое описание ключевых участников рынка про
граммного
(CRM)
На рис.
7.2
ChatGPT
обеспечения
по состоянию на
для
2023
управления
взаимоотношениями
с
клиентами
год. Результаты оформите в виде таблицы.
показан ответ.
может даже провести SWОТ-анализ (сильные и слабые стороны, возмож
ности и угрозы). Такой анализ поможет вам выявить сильные стороны проекта, ис
править или обойти слабые места, использовать благоприятные возможности и ук
лониться от любых неожиданностей. Этот метод используется в бизнесе всех
типов, и он даже полезен при продвижении по карьерной лестнице.
Требования
Документы с описанием технических требований очень важны для разработки про
граммного обеспечения. Вот лишь некоторые особенности требований:
♦
Определение направления
В этом документе точно указано, какие действия должно выполнять программ
ное обеспечение. Все, от разработчиков до клиентов, понимают, в чем заключа
ется план, что позволяет не сбиться с пути.
♦
Обеспечение согласованности действий
Благодаря таким документам все участники процесса
клиенты
-
-
а это и ваша команда, и
понимают, что от них требуется. Таким образом, снижается вероят
ность путаницы или неверных действий.
♦
Пол10щь в планировании
Вам нужно определить, сколько времени займет работа или сколько она будет
стоить? Эти документы помогут вам спланировать необходимые работы, время
и деньги.
♦
Улучшение взаилюдействия
Документ отлично подходит для налаживания четкой коммуникации, особенно в
больших командах или когда люди географически разделены.
♦
Снижение рисков
Важно заметить потенциальные проблемы на ранней стадии. Эти документы
помогут вам избежать задержек и держать под контролем расходы.
Конечно, выработать требования к программному обеспечению не так-то просто, и
главная причина заключается в том, что разработка программ может быть очень
сложной. Кроме того, возникает проблема координации не только работы, но и
мышления многих членов команды, которые могут находиться в других странах и
Идеи, планирование и требования
175
часовых поясах. У каждой группы есть свои идеи и требования, и иногда они не
совсем совпадают или не совсем понятны.
Еще одна головная боль
-
требования людей к приложению могут постоянно ме
няться. Это особенно актуально, если вы работаете в быстро развивающейся отрас
ли. Таким образом, вам часто приходится пытаться соответствовать изменяющимся
требованиям, что затрудняет выработку четкого решения. В то же время вы долж
ны быть уверены, что требования выполнимы, и вы можете проверить, как они со
блюдаются.
Когда требования не соответствуют реальности, результаты могут быть катастро
фическими. Вот несколько примеров:
♦ Автоматизированная система выдачи багажа в J\,tеж·дународном аэропорту
Денвера
(1995
год).
Требования были умопомрачительно сложными, а цели
ными. Это привело задержке на
16
-
чрезмерно амбициоз
месяцев и стремительному росту расходов.
В итоге аэропорт решил отказаться от всей системы.
♦
Система виртуального досье ФБР
(2000-2005
гг.)
Представители ФБР имели лишь смутное представление о том, что им нужно.
Поэтому система оказалась бесполезной. В итоге агентство вложило в проект
более
170
млн долларов, а затем бросило его на произвол судьбы. Следующий
проект, названный
Sentinel,
имел гораздо более конкретные требования и, ко
нечно же, оказался более успешным.
♦
Запуск сайта
HealthCare.gov (2013)
Федеральное правительство не определило, какие услуги ему нужны, и недоста
точно протестировало систему, поэтому, когда она была запущена, она просто
не справилась с трафиком и работала неправильно. Запуск оказался неудачным,
и многим людям пришлось приложить немало усилий и средств, чтобы испра
вить ситуацию и обеспечить ее бесперебойную работу.
В мире разработки программного обеспечения существует множество различных
требований, каждое из которых выполняет свою уникальную задачу. У вас есть
функциональные требования, которые определяют, что должно делать программ
ное обеспечение, например, какие задачи оно должно выполнять или какие функ
ции ему необходимы. Есть и нефункциональные требования, которые касаются то
го, как должно работать программное обеспечение, например, скорости работы,
безопасности и удобства использования.
Чтобы понять, как искусственный интеллект может помочь в этом, мы сосредото
чимся на составлении двух типах важных документов: документе о требованиях к
продукту
(PRD)
и спецификации требований к программному обеспечению
(SRS).
Документ с требованиями к продукту
В этом документе излагается, каким будет ваше программное обеспечение. Вос
принимайте его как текст, описывающий, как должно выглядеть приложение, как
176
Глава
7
оно должно себя вести, кто будет его использовать и какие проблемы ему предсто
ит решать. Этот документ должен быть подробным и включать в себя всё
-
от обя
зательных функций до удобства использования.
Аудитория документа с описанием требований к продукту разнообразна. Документ
предназначен для разработчиков, дизайнеров, менеджеров проектов и команды
обеспечения качества. Он также крайне необходим руководителям и другим заин
тересованным лицам, которым необходимо понять концепцию и задачи, выполняе
мые продуктом. Кроме того, данный документ может быть полезен маркетинговым
командам, чтобы понять, как позиционировать продукт. По сути, документ с требо
ваниями нужен всем, кто занимается выводом продукта на рынок и убеждается в
том, что он попадет в цель и понравится целевой аудитории.
Если вы не знакомы с документом, в котором оформляются требования к продукту,
вам поможет
ChatGPT:
Промпт: Каковы основные части документа с требованиями к продукту
Создайте документ
На рис.
7.3
Word
(PRD)?
в виде шаблона.
показан документ, созданный
ChatGPT.
1. Титул~.н~.1й лист
• Название продукта
• Версия документа
• Дата
• Автор(ы)
2. Оrлавление
• Автоматическая генерация в Word
3. Введение
• Содержание документа
• Область применения продукта
• Целевая аудитория
• Обзор продукта
4. Концепция продукта
Рис.
7.3. ChatGPT создал
примерный набросок документа
с требованиями к продукту
Спецификация требований к программному обеспечению
Чем спецификация требований к программному обеспечению отличается от доку
мента с требованиями к продукту? Спецификация требований к программному
обеспечению
-
это как подробное техническое руководство по проекту программ
ного обеспечения. В отличие от документа с требованиями к продукту, в котором
учитывается точка зрения конечных пользователей или заказчиков и делается ак
цент на том, что им нужно и по какой причине, в спецификации требований к про
граммному продукту детально описывается,
что и как должно делать программное
обеспечение, и основное внимание уделяется техническим аспектам.
Идеи, планирование и требования
177
Если у вас простое приложение, спецификация требований к программному обес
печению может состоять всего из нескольких страниц. Но в более сложных проек
тах
-
например, при внедрении корпоративного программного обеспечения, коли
чество страниц документа может исчисляться сотнями.
Давайте посмотрим на некоторые промпты:
Промпт: Какие основные элементы и передовой опыт следует учитывать при
составлении документа по спецификации требований к программному обеспе
чению?
Промпт: Опишите процесс разработки документа по спецификации требований
к программному обеспечению, обращая особое внимание на этапы сбора и ана
лиза требований, взаимодействие с заинтересованными сторонами и методоло
гию документирования.
Промпт: Создайте подробный документ по спецификации требований к про
граммному обеспечению для разрабатываемого проекта, включая такие разделы,
как обзор проекта, анализ взаимодействия с заинтересованными сторонами,
функциональные и нефункциональные требования, допущения и ограничения.
<Добавьте нужные подробности для каждого раздела>.
Интервью
Программы для распознавания голоса существуют уже несколько десятилетий, но
по большей части они были скорее забавной новинкой, чем практичным инстру
ментом. Как правило, их использование было нецелесообразным в повседневной
жизни или профессиональной деятельности, поскольку эти программы не могли
надежно понимать и интерпретировать естественную разговорную речь.
Однако за последние несколько лет система распознавания речи сделала огромный
шаг вперед благодаря достижениям в области искусственного интеллекта. Совре
менные системы работают на основе сложных алгоритмов ИИ, которые не только
лучше понимают широкий спектр акцентов и диалектов, но и способны «улавли
вать смысл» и особенности устной речи. Эти системы постоянно учатся и адапти
руются, в результате чего повышается их точность.
Одна из функций, где распознавание речи может быть полезно
-
это интервью,
которые вы часто устраиваете для составления документов с требованиями.
Например, с помощью программы распознавания голоса вы можете усовершенст
вовать следующее:
♦
Точность и функция воспроизведения
Хотя точность транскрипции обычно довольно высока, вы можете использовать
воспроизведение для корректировки.
♦
Идентификация выступающих
Распознавание голоса позволяет различать личности выступающих на совеща
нии. Это может помочь внести ясность в требования.
178
Глава
7
♦ Идентификация ключевых тем
Программа распознавания голоса может выделить в стенограмме часто встре
чающиеся ключевые слова, что облегчает определение основных тем или требо
ваний и сфокусироваться на них.
♦ Краткие описания ключевых моментов
ПО для распознавания голоса может создавать краткие описания ключевых мо
ментов беседы и предлагать варианты действий, помогая разработчикам точно
определить критические требования и преобразовать их в конкретные задачи
проекта.
К числу лучших систем распознавания голоса относятся:
♦
Otter AI
♦
Rev
♦
Fathom
♦
Sonix
♦
Notta
Белая доска
Использование белых досок
-
распространенная практика при составлении требо
ваний к программным проектам. Это помогает в процессе мозгового штурма и по
зволяет каждому внести свой вклад. Белая доска позволяет объединить множество
различных идей и точек зрения, что является ключевым моментом для определения
функций, которыми должно обладать программное обеспечение. Кроме того, вы
можете в чате просто нарисовать эскиз блок-схемы или диаграммы прямо во время
обсуждения, что облегчит другим понимание сложных вещей.
Зарегистрирован?
Новый
Нет
пользователь
Да
-
Да
Забыли пароль ~
Логин
База данных
пользователей
Запрос нового
пароля
Нет
Нет
Правильный
пароль
Да
Электронная
почта
Рис.
7.4.
Эскиз схемы входа в систему может быть передан в
ChatGPT
Идеи, планирование и требования
На изображении представлена блок-схема процесса аутентификации
пользователя (реrистрация/логин/восстановление пароля). Вот её анализ:
Общее описание процесса
Схема описывает ветвления при входе в систему: новый пользователь,
авторизация. восстановление пароля.
Ключевые узлы:
«Зарегистрирован?»
•
Нет
•
Да
-
начальная проверка.
-
Новый пользователь
-
заносится в БД пользователей.
- Логин.
На шаге «Логин»:
Если пароль верный
-
доступ к электронной почте (по сути
вход в
-
систему).
Если пароль неверный
Если «Да»
-•
-
выбор «Забыли пароль 7 ».
запрос нового пароля
-
БД пользователей
-
выдача
нового пароля.
Если «Нет»
•
-
возврат к логину (по сути
-
повторная попытка входа).
Плюсы схемы:
Покрывает стандартные кейсы входа: регистрация, авторизация,
восстановление пароля.
•
Учитывает проверку правильности пароля.
•
Отображает взаимодействие с БД пользователей.
Минусы
•
/
Недостатки:
Не уточнены детали проверки (например, сколько попыток ввода пароля
допускается).
Не учтена подтверждённая регистрация по электронной почте.
•
«Электронная почта» как финальный узел
-
не совсем понятно, это вход в
систему или просто переход к почте.
•
Нет описания отклонений и ошибок (например, что если пользователь не
найден при запросе нового пароля).
Вывод:
Это базовая схема логики аутентификации. Она полезна для начального
проектирования системы входа, но для реализации потребуются более детальные
схемы (например, отдельные потоки для ошибок, валидации, подтверждения
регистрации).
Если хотите
Рис.
-
можем вместе детализировать или улучшить эту схему'
7.5. ChatGPT
проанализировал эскиз-схему входа в систему,
преобразовав ее в легко читаемую схему рабочего процесса
179
Глава
180
И в этом
7
ChatGPT
может вам помочь. Как? Он способен расшифровывать изобра
жения, которые вы загружаете в систему.
Например, предположим, что вы набросали эскиз схемы входа в систему, как пока
зано на рис.
7.4.
Давайте посмотрим, сможет ли
ChatGPT
разобраться с этим. Я использовал запрос
такого типа:
Промпт: Проанализируйте диаграмму.
ChatGPT:
На изображении представлена блок-схема процесса аутентификации
пользователя (регистрация/логин/восстановление пароля). Вот ее анализ.
Далее в ответе подробно разбирается весь процесс управления учетными записями
пользователей и входа в систему (рис.
7.5).
Стиль
Составление качественных документов с требованиями к продукту и спецификации
требований к программному обеспечению
-
это целое искусство. Важно задать и
выдержать правильный стиль. Эти документы должны быть четкими, краткими и
соответствующими профессиональным требованиям.
Давайте разберемся, почему стиль написания так важен:
♦
Сделать всё пределыю ясным
Эти документы
как святой Грааль для вашего проекта. Документ следует
-
оформить так, чтобы всё бьmо изложено четко и ясно, чтобы все понимали, что
нужно делать. Таким образом, вы избежите досадных недоразумений и ошибок
в разработке.
♦ Придерживаться фактов
Документы с требованиями к продукту и спецификацией ПО
-
не место для
проявления личных или стилистических качеств. Вы должны быть похожи на
репортера
-
только факты. Прямолинейность и нейтральность гарантируют,
что вы сосредоточитесь на реальных требованиях к продукту.
♦ Последовательность
ключевой момент
-
Вы должны придерживаться одного и того же стиля от начала до конца. Думай
те об этом как о соблюдении кулинарного рецепта. Если вы начнете изменять
что-то на половине пути, в итоге у вас ничего не получится. Последовательность
облегчает восприятие этих зачастую объемных документов.
♦
Сосредоточьтесь на продукте
Помните, что главное
-
это продукт, его предназначение и функции. Придер
живайтесь строгого стиля, чтобы не отвлекаться от основного содержания
-
требований к функциональности.
Когда речь идет о такой большой языковой модели, как
кументов такого типа
-
ChatGPT,
составление до
одна из ее сильных сторон. Большая языковая модель дей
ствительно может «понять» ваш замысел. И да, вы можете проинструктировать
Идеи, планирование и требования
181
большую языковую модель, чтобы документ был выдержан в правильном стиле.
Вам поможет следующий промпт:
Промпт: Составьте, пожалуйста, полный список технических требований к
приложению мобильного банкинга, обеспечив четкость, структурированность и
профессиональный уровень изложения.
На рынке представлено множество инструментов, использующих искусственный
интеллект для создания текстов, и каждый из них имеет свои особенности, позво
ляющие подобрать стиль письма под конкретные задачи. К примеру,
Jasper
и
Writer
хорошо подходят для генерации контента и поддержания единого тона коммуника
ции в бизнесе.
Grammarly
фокусируется на грамматической корректности и улуч
шении стиля. А такие решения, как А121 и
Copy.ai,
помогают создавать содержа
тельные и структурированные тексты.
Джигьяса Гровер
(Jigyasa Grover)
использует
Grammarly
для своих проектов. Буду
чи экспертом в области машинного обучения, она написала книгу на данную тему.
Книга называется
(2021) ).
"Grammarly -
обучения
«Sculpting Data for ML» (2021)
(Создание данных для машинного
Вот ее слова:
еще один инструмент, который помогает мне при составлении
технической документации.
Я
использую
его
для
корректуры,
грамматики,
пунктуации и стилистики. Он легко интегрируется во многие веб-браузеры и
программы для работы с текстом. Вывод формулировок понятен и лаконичен.
Кроме того, инструмент может адаптировать предложения в зависимости от це
левой аудитории и назначения документа."
Подходы к планированию проекта
После того как вы составили требования, следующим шагом будет планирование
работы над проектом. Речь идет о том, чтобы наметить план действий вашей ко
манды на пути создания приложения. Этот план включает в себя постановку четких
целей и определение того, что вам нужно сделать, назначение ответственных за
выполнение того или иного пункта, установление сроков и выявление методов вы
полнения. Главная цель документа
-
обеспечить бесперебойную работу, убедить
ся, что каждый сотрудник работает эффективно и плодотворно. И, в конечном сче
те, создать продукт, который будет делать все, что от него требуется, и удовлетворит
требования всех, особенно клиентов.
Мир разработки программного обеспечения, безусловно, сложен, поэтому сущест
вует множество различных методов, с помощью которых команды могут планиро
вать свои проекты. У каждого из этих методов есть свои правила и шаги, которые
помогают людям справляться с задачами, вносить изменения, поддерживать необ
ходимое качество кода и предоставлять клиентам хороший продукт. Так что неза
висимо от того, нужно ли вашей команде всё детально прописать или вы предпочи
таете план, который может меняться на ходу, вы сможете подобрать подходящий
для вас метод.
Глава
182
7
Отличный вопрос! Для приложения
To-Do
(список дел)
небольшого и часто довольно простого проекта
(Agile)
11
-
относительно
обычно подходят rибкие
подходы с итеративной разработкой. Вот краткое обоснование и выбор:
Рекомендованный подход: Kanban или Scrum (Agile в цепом)
Почему
•
-
Agile хорош для To-Do
приложения:
Проект небольшой - нет смысла перегружать его длинным «водопадным»
планом.
•
Требования часто уточняются на ходу (какие функции включить:
напоминания, теги, синхронизацию и т. д.).
•
Удобно быстро делать прототипы и проверять с пользователями.
■ KanЬan
•
Очень лёrкий в применении.
•
Хорош для непрерывной разработки без фиксированных спринтов.
•
Отлично подходит, если вы один или небольшая команда.
•
Доска с колонками «То
Do», «ln Progress», «Done»
даёт наглядность и фокус.
11 Для MVP To-Do приложения Кanban почти идеально: минимум
формальностей, полная прозрачность задач.
■
Scrum
•
Хорош для более структурированной работы по спринтам.
•
Подходит, если команда из
•
Позволяет приоритизировать фичи по важности.
•
Применим, если проект развивается несколько версий и нужно отслеживать
2-5+
человек и вы хотите планировать итерации.
рост бэклоrа.
11 Scrum даёт чуть больше «организации» и ритма. Хорошо, если хотите
планировать релизы.
Рис.
7.6. Cl1atGPT
объясняет, почему метод
Agile является лучшим
подходом
для разработки определенного приложения
Среди распространенных моделей управления проектами-
Kanban
Waterfall, Agile, Scrum,
и экстремальное программирование (ХР). Выбор правильного подхода
очень важен, потому что этот подход может привести как к успеху, так и к краху
Идеи, планирование и требования
183
вашего проекта. Ваш выбор зависит от многих факторов, таких как масштаб и
сложность проекта, запросы клиента, стиль работы команды, а также степень опре
деленности и неопределенности в мире проекта. Некоторые команды могут огра
ничиваться одним методом, а другие
-
смешивать и сочетать их, чтобы найти иде
альный вариант для своего проекта.
Что касается промптов, давайте рассмотрим пример. Предположим, вы создаете
приложение под названием
To-Do List
(Список дел). Вы составили для него одно
страничный документ с требованиями, и теперь вы обращаетесь к
ChatGPT:
Промпт: Какой подход к планированию проекта лучше всего подходит для это
го приложения?
ChatGPT
предлагает метод
чины (рис.
Agile
в качестве наилучшего варианта и объясняет при
7.6).
Вот обзор других вариантов промптов, которые вы можете использовать:
Промпт: Как команды могут эффективно выбрать и приспособить подход к
планированию проекта к конкретному программному проекту?
Промпт: Расскажите о важности согласования подхода к планированию проекта
с целями и сложностью программного проекта.
Промпт: Объясните последовательные фазы модели
Waterfal\
в управлении
программными проектами.
Промпт: Опишите основные принципы методологии
Agile
в разработке про
граммного обеспечения.
Промпт: Как методология
Agile
способствует гибкости и вовлечению заказчика
в проект?
Промпт: Опишите роли и процедуры, используемые в рамках методики
Промпт: Сравните и сопоставьте методику
Scrum
Scrum.
и традиционные подходы к
управлению проектами.
Промпт: Перечислите основные принципы экстремального программирования
и укажите, как они способствуют удовлетворению потребностей клиентов.
Промпт: Опишите преимущества и недостатки внедрения тестовой разработки
как части ХР.
Разработка через тестирование
Один из самых верных шагов, который вы можете сделать до того, как начнете пи
сать код
-
это составить план тестирования. Помните старую поговорку «Семь
раз отмерь, один раз отрежь»? И это правильно. Прежде чем приступить к работе,
нужно подготовиться. Распространенным подходом является разработка через тес
тирование
(Test-Driven Development).
184
Глава
7
Дело вот в чем: в процессе обдумывания всех тестов, которые должен пройти ваш
код, вы лучше понимаете, что вам нужно создать. Вы внимательно изучаете про
ект, прежде чем приступить к его созданию. Таким образом, вы точно знаете, что
должен делать ваш код, что избавляет вас от необходимости ломать голову в
дальнейшем.
Более того, планирование тестов в первую очередь означает, что вы с самого нача
ла думаете о людях, которые будут использовать ваше программное обеспечение.
Вы не просто погружаетесь в код. Вы нацелены на создание того, что подходит
пользователям. Лучше выявить потенциальные проблемы на ранней стадии, чем
потом рвать на себе волосы, исправляя ошибки.
В разработке через тестирование этот подход является основой всего процесса.
Тесты пишутся еще до начала работы над кодом, что помогает сохранять фокус на
конечных целях. Такой метод способствует созданию более четкого и понятного
кода, поскольку каждая часть программы разрабатывается под конкретную задачу.
В рамках подхода
TDD существует
множество инструментов, предназначенных для
различных методов написания и подготовки тестов:
♦
Given-When-Then
(GWТ) wlИДано-Когда-Затем
Given (Дано)- это
создание условий, например, определение, где находятся все
компоненты программы до ее запуска. Затем наступает этап
When (Когда)
- Then (За
главное событие, с которого все начинается. И завершающий этап
тем), в котором вы описываете, что должно произойти после завершения работы
программы. Это как рассказ о том, что будет выполнять ваш код.
♦
Arrange-Act-Assert (ААА) wiu
Это похоже на технологию
Организация-Действие-Утверждение
Given-When-Then
(Дано-Когда-Затем). Но в данной
технологии упор делается на описание с ориентацией на пользователя, поэтому
такая технология идеально подходит для совместной работы разработчиков, тес
тировщиков и заинтересованных сторон, слабо владеющих технической сторо
ной
вопроса.
Технология
Arrange-Act-Assert
(ААА)
(Организация-Действие
Утверждение), в большей степени ориентирована на техническое проведение
самого теста.
♦
Setup-Exercise-Verify-Teardown
(SEVТ)
wiu
Настройка-эксперимент-верификация
демонтаж
Это основной метод тестирования, когда ваша работа связана с интеграцией и
тестированием систем. Вы начинаете с этапа Настройка
(Setup), в ходе которого
подготавливаете тестовую среду. Затем вы переходите к этапу Эксперимент
(Exercise),
во время которого запускаете свой код для проверки работоспособно
сти. Далее наступает этап Верификация
(Verify).
Здесь вы становитесь детекти
вом, чтобы убедиться в том, что всё получилось. И не забудьте про этап Демон
таж
(Teardown).
Это этап уборки, во время которого наводится порядок и вы
подготавливаете тестовую среду к следующему тестированию.
Идеи, планирование и требования
185
Вот пример запроса для разработки программного обеспечения с использованием
технологии
Given-When-Then:
Запрос: Сформулируйте подход к тестированию критических функций, исполь
зуя методологию
Given-When-Then.
Ниже определены конкретные требования:
•
Разработка системы онлайн-бронирования для сети бутик-отелей.
•
Система должна получать данные о наличии свободных номеров из внутрен
него программного обеспечения управления каждого отеля.
•
Система должна позволять пользователям фильтровать номера по дате, цене
и удобствам.
•
Интерфейс должен быть интуитивно понятным и совместимым как с браузе
рами настольных компьютеров, так и с мобильными устройствами.
•
Система должна быть построена с использованием облачных решений, чтобы
обеспечить надежность и возможность расширения.
При разработке программного обеспечения на основе тестов следует учесть специ
фические сценарии или варианты использования, которые необходимо протестиро
вать. Вот несколько полезных промптов:
Промпт: Напишите тесты для функции, позволяющей пользователям изменять
свой пароль с использованием подтверждения по электронной почте.
Промпт: Создайте тесты для проверки реакции системы при разрыве соедине
ния с базой данных.
Промпт: Разработайте тесты для подтверждения возврата результатов поиска в
течение
2 секунд при
нормальной нагрузке.
Промпт: Напишите тесты для проверки шифрования всех пользовательских
данных при их хранении.
Промпт: Разработайте тесты для проверки взаимодействия между платежным
шлюзом и системой обработки заказов.
Разработка веб-дизайна
Проектирование веб-сайта или веб-приложения может быть сложным и включать в
себя множество этапов. Вам необходимо определить задачи сайта и понять требо
вания целевых пользователей. Затем нужно составить схему сайта и спланировать,
как пользователи будут перемещаться по нему, создав так называемый прототип
или каркас.
После этого нужно придать сайту или приложению привлекательный вид, подобрав
цвета, шрифты и эффектную графику, отражающую суть бренда. Конечно, вам по
надобятся запоминающиеся слова и красивые картинки или видеоролики, чтобы
сделать сайт функциональным и привлекательным. Затем наступает технический
этап, когда вы с помощью таких языков, как
HTML, CSS
все свои идеи, создавая реальный, работающий сайт.
и
Java-Script
воплощаете
186
Глава
7
Конечно, такой инструмент, как
ChatGPT,
может быть полезен на этапе планирова
ния. Вот несколько промптов :
Промпт: Я разрабатываю сайт для <определенной категории>. Предложите не
сколько целей или задач. Кто будет целевой аудиторией?
Промпт : Какие страницы мне нужны для базового макета интернет-магазина?
Промпт: Я работаю над каркасом главной страницы блога. Предложите не
сколько важных элементов, которые должны присутствовать на главной странице.
Промпт : Я разрабатываю каркас для целевой страницы мобильного приложе
ния. Какие важные разделы я должен обязательно включить?
Промпт: Для веб-сайта, посвященного <определенной категории>, предложите
интересные идеи по созданию контента, например посты в блоге, видео и инфо
графика.
Для какого устройства 11,1 разрабатываете дизайн?
О Мобил1,н1,1й
g
О Планwет
Настол1,н1,1й
комп~.ютер
Ознакомьтесь
Опиwите свой проект прост1,1 м английским яз1,1ком
с примером
Сайт, с помощью которого можно найти шеф-повара - фрилансера
и людей, устраивающих званые ужины или специальные мероприятия
93/300
ф
Опиwите стил1, дизайна, подберите ключев1,1е слова
Шикарный, современный дизайн с яркими визуальными эффектами
и интуитивно понятным оформлением, с аппетитными фотографиями
блюд и удобными функциями бронирования
148/150 ф
-
Темный ФННIIН•
Корпоративный
Формальный
~:~::
Элегантный
Техн~й Момдежный
Нарисованные
от руки
♦ Сгенерировать мои проект . .
Рис.
7.7. В Uizard предусмотрен
мастер на основе искусственного интеллекта,
который поможет создать каркас мобильного приложения или веб-сайта
187
Идеи, планирование и требования
Промпт: Как построить навигацию на сайте, чтобы она была интуитивно по
нятной и удобной для аудитории?
Промпт : Перечислите основные SЕО-стратегии, которые необходимо реализо
вать для улучшения заметности сайта в поисковых системах.
Промпт: Какую цветовую палитру вы можете предложить для моего сайта для
<определенной категории>?
Промпт: Выберите стили шрифтов для сайта для <конкретной категории>. Учи
тывайте удобство чтения и соответствие бренду, а также как шрифты влияют на
общую эстетику сайта.
Существуют также различные инструменты, использующие искусственный интел
Uizard. Подобно системе
лект для создания электронных схем. Один из них -
Figma,
инструмент имеет функции проектирования, такие как возможность пере
таскивания элементов, например кнопок и форм.
Uizard также
может использовать
ся командами для совместной работы.
Кнопка, показывающая список функций ИИ, расположена на панели инструментов
в левой части приборной панели. Кнопка называется
Magic
(Волшебство). Нажмите
нее, и вы увидите список функций искусственного интеллекта.
Auto designer (Автопроектирование),
показанный на рис. 7.7.
Чтобы создать каркас, выберите функцию
после чего на экране появится мастер,
-°""'"'
х
ChefConnect
V
0
lul8(10,Щ)
0
0
АМ111
Resuhl for •WllilaЬle dмlfs'"
~:=.
A81Ctt(4,20I)
(1(1,441)
Tappkh
Fqail8r
_.
..
0
Мicllelill-
0
1..ос:(~
0
-(90')
0 --
flllW,{',412)
0
-•""1
в
F-=ti(1!1)
0
::
...._IШ)
0
- . . . . r,,7N)
*
-
*
1!
а..
-
(")
11
а.11
f
PW
--
: 'l
t4 : - , .
V
Awdlbllt
0
"""'r-
1520
=.. ~-
llllм('I)
0 -
•
V
...,..___,
0
[,;;::::
-·.. " :--,. :::--,.
(1)01)
131
128fl"-
,__
V
- -
о.
...
--
""""'
.,...,.
о.
...
--
""""'
••
-*
Рис.
7.8.
На основе введенных запросов
Uizard
сгенерировал следующий каркас для веб-сайта
°'1!"""
...
о.
.....
.....
188
Глава
7
Сначала нужно выбрать устройство, для которого будет создаваться проект: мо
бильное, планшет или настольный компьютер. Затем опишите проект. Можно ог
раничиться одним-двумя предложениями. Вот пример.
Промпт: Сайт, с помощью которого можно найти шеф-повара
-
фрилансера и
людей, устраивающих званые ужины или специальные мероприятия.
Далее вы придумаете описание стиля оформления, например:
Промпт: Шикарный, современный дизайн с яркими визуальными эффектами и
интуитивно понятной компоновкой, подчеркивающий аппетитные фотографии
блюд и удобные функции бронирования.
На рис.
7.8
показан каркас.
Заключение
В этой главе мы рассмотрели, как с помощью
ChatGPT
можно начать проект по
разработке программного обеспечения. Сначала был проведен мозговой штурм,
затем исследование рынка. После этого мы перешли к формированию требований и
выяснили, как такие документы, как
(спецификация
PRD
(документ требований к продукту) и
SRS
требований к программному обеспечению), помогают согласовать
цели проекта с техническими деталями. Мы обсудили различные подходы к проек
тированию
-
от гибкой методологии
Agile
до последовательного метода «Водо
паД>>. Также были затронуты совместное проектирование с использованием техно
логии «Белая доска» и метод разработки через тестирование. Объединяя мощные
возможности
ChatGPT
с проверенными практиками, вы создаете надежную основу
для успешной реализации проекта.
ГЛАВА
8
Программирование
В этой главе мы рассмотрим несколько хороших приемов программирования. Мы
начнем с самого главного. Это работа с функциями и классами. Затем мы испачка
ем руки рефакторингом
-
приведем в порядок запутанный код и сделаем его более
понятным. Мы также покажем, как работать с данными и создавать их. Затем про
верим некоторые инструменты на основе искусственного интеллекта, которые по
могут создать необычные фронтенды без лишних хлопот.
Что в реальности?
Инструменты для программирования на основе искусственного интеллекта
-
это
вроде бы очень круто, правда? Но давайте не будем обманывать себя. Это не вол
шебная палочка, которая решит все наши проблемы с программированием. Почему?
Да потому что эти инструменты похожи на тех учеников в классе, которые учатся
только по конспектам. Эти инструменты учатся на смеси кода, собранного со всего
Интернета. И, будем честны, не каждый из этих кодов соответствует стандартам и
требуемому уровню кодирования. Что это значит для вас? Иногда вы можете полу
чить код, который будет таким раздутым, как индейка на День благодарения 1 . Или
неустойчивым, как карточный домик. А иногда код просто может быть неправиль
ным, не выполняющим то, что вам нужно, или, что еще хуже, оставляющим откры
той вашу «входную дверы) для хакеров или перехвата сетевых ресурсов.
Давайте рассмотрим пример, когда
строк. На рис.
8.1
ChatGPT
создал сложный код с множеством
показан код, предназначенный для объединения двух отсортиро
ванных списков в один отсортированный список.
Сгенерированный искусственным интеллектом код действительно корректно объе
диняет два списка. Однако он реализован с использованием громоздкого подхода: в
нем много строк и повторяющихся конструкций. Пустые списки обрабатываются
отдельно, а для добавления оставшихся элементов из каждого из списков исполь
зуются два дополнительных цикла
1
День благодарения -
while.
федеральный праздник в Соединенных Штатах, отмечаемый в чет
вертый четверг ноября. Ужин традиционно включает индейку.
-
Пер.
Глава
190
Рис.
8.1.
8
Когда
ChatGPT
попросили объединить два отсортированных списка,
был создан сложный код
Вот здесь-то и пригодятся ваши навыки кодирования. Зная основы кодирования,
вы сможете понять, какие запросы писать и где копаться, если что-то не так.
На рис.
8.2
показан более эффективный подход.
Так что не стоит переживать из-за мрачных прогнозов о том, что роботы займут
место разработчиков. Конечно, модели ИИ постоянно совершенствуются. Они учатся
и развиваются. Но они все еще далеки от того, чтобы стать «всем и вся» в програм
мировании. Программисты все равно останутся востребованными. ИИ-помощники
очень полезны,
инженеров.
но
они не заменят опыт,
знания
и мастерство
настоящих, живых
Программирование
Рис.
8.2.
191
С некоторой помощью человека мы добились более эффективного подхода
к объединению отсортированных списков
Когда вы работаете с этими системами, помните: это сотрудничество, а отнюдь не
передача обязанностей по созданию программ. Будьте внимательны, любознательны
и не забывайте перепроверять всё, что предлагают эти инструменты на основе искус
ственного интеллекта. Они
-
только помощники, а не главные действующие лица.
Мотивы, помогающие принять решение
Иногда проще написать код вручную, чем пользоваться инструментами с поддерж
кой искусственного интеллекта. Порой требуется немало попыток, чтобы ИИ точно
понял ваши намерения. Однако с опытом приходит понимание: вы начинаете луч
ше различать ситуации, когда такие инструменты действительно помогают, и когда
разумнее выполнить задачу самостоятельно.
Возьмите на вооружение опыт Дмитрия Иващенко
инженера-программиста
чем
MY.GAMES,
(Dmitrii lvashchenko),
ведущего
амстердамской игровой компании с более
1 млрд зарегистрированных пользователей
по всему миру. По его словам:
В качестве примера можно привести промпт «Напишите на
Python
добавления часового пояса по умолчанию в объект
Однако вы долж
datetime».
метод для
ны быть готовы к тому, что многие нюансы ИИ будут упущены, и вам придется
либо самостоятельно разбираться со сложными ситуациями, вручную дорабаты
вая код, либо вести долгую переписку с
Главное здесь
дачи
ChatGPT,
-
ChatGPT,
указывая на его ошибки.
изначально соотнести время, затрачиваемое на объяснение за
с тем, за сколько вы самостоятельно сделаете работу.
Обучение
С помощью такого приложения, как
ChatGPT,
вы сможете быстро освоить новый
язык программирования, фреймворк или библиотеку. Такое обучение может пока
заться более эффективным, чем старые добрые способы, такие как прохождение
курсов, бесконечный поиск в Интернете или просмотр кучи видео на У ouTube.
С помощью
ChatGPT
можете получить информацию об основах и синтаксисе кода.
Кроме того, если вам больше нравится учиться, разбирая примеры самостоятельно,
вы можете попросить примеры кода, чтобы понять, как все взаимосвязано. Если вы
Глава
192
8
уже знаете один язык программирования,
ChatGPT
может облегчить изучение но
Python, но только
JavaScript. ChatGPT может объяснить основные различия в тер
Python и JavaScript. Если вам нужны дополнительные ресурсы,
вого, сравнивая их между собой. Допустим, вы хорошо знаете
начинаете изучать
минах между
ChatGPT
может порыться в Интернете и порекомендовать вам несколько надежных
учебных материалов.
Вот несколько промптов, помогающих разобраться в языках программирования:
Промпт: Что мне следует изучить в первую очередь, если я не знаю
Python?
Промпт: Какие проекты для начинающих я могу использовать, чтобы улучшить
свои навыки программирования в
React?
Промпт: Можете ли вы посоветовать ресурсы для изучения сложных SQL-за
просов?
Промпт: Как бы вы реализовали базовое приложение
Python и JavaScript,
To-Do list
(список дел) на
чтобы показать их различия?
Промпт: Я знаю, как использовать циклы в С++. Можете ли вы показать мне
для сравнения, как работают циклы в
5 полезных
Rust.
Промпт: Найдите
как изучать язык
Python?
видеороликов на
YouTube,
которые показывают,
Давайте посмотрим, как к данному вопросу подходит Иващенко:
Если вы хотите быстро освоить новый язык или фреймворк, можете сразу же
приступить к созданию нового проекта с использованием данной технологии.
Допустим, вы хотите изучить язык
Django.
Давайте выберем проект, который
реализуем с помощью этой технологии. Допустим, это будет интернет-магазин.
ChatGPT, как начать разработку нового проекта с
Django. ChatGPT подскажет, какие зависимости нужно
Для начала просто спросите у
помощью фреймворка
установить, как настроить начальную конфигурацию проекта и с какими сопут
ствующими технологиями придется иметь дело. Затем мы переходим к более
конкретным промптам: «Как организовать модель в
Django?»,
«Как добавить
новый раздел в панели администратора?» и «Как перенести базу данных?» По
степенно приобретая опыт работы, и задавая все более подробные вопросы, вы
сможете реализовать практически любой проект на любой ранее незнакомой
технологии. Именно так, плодотворно поработав, я освоил
Django
буквально за
выходные.
Вы можете использовать
ChatGPT
для создания полезных учебных пособий. Вот
пример промпта:
Промпт: Создайте учебное пособие по
JavaScript.
Ориентируйтесь на началь
ный уровень.
После этого вы можете продолжить:
Промпт: Составьте для меня расписание занятий. Какие темы я должен изу
чать? Какие практические упражнения или тесты? Объясните проблемы с коди
рованием. Дайте ссылки на ресурсы.
Программирование
ChatGPT
193
может даже помочь вам запомнить новые понятия. Один из способов
-
использовать мнемонические методы. Например, аббревиатуры. Допустим, вам
нужно запомнить ключевые элементы
DevOps,
которые включают непрерывную
интеграцию, непрерывную доставку, микросервисы и инфраструктуру как код.
Вот что предлагает
ChatGPT:
ChatGPT: CI-CD-MI (произносится
В заключение отметим, что
ChatGPT
как «Си-Си-Ди-Ми»).
может стать полезным помощником при под
готовке к задачам с LeetCode 2 . Представьте: вы находитесь в комнате для собеседо
ваний
-
перед вами доска или ноутбук, и звучит сложный вопрос по алгоритмам
или структурам данных. Здесь важны не только навыки программирования. Интер
вьюеры оценивают скорость мышления, умение ясно излагать мысли и подход к
решению задач.
Если вы хотите добиться успеха, подумайте о том, чтобы подписаться на платфор
му
LeetCode,
что стоит
35
долларов в месяц. И, конечно,
ChatGPT
может помочь
вам в любой момент. Вот простой промпт:
Промпт: Предложите
3
наиболее популярных вопроса для собеседования в
LeetCode.
Затем
ChatGPT
«придумал» такие задачи, как «две суммы>>, «самая длинная под
строка без повторяющихся символов» и «допустимые круглые скобки». Со време
нем вы можете начать глубже изучать материал. Например, получить более под
робные объяснения или примеры.
Комментарии
Когда вы не успеваете к сроку написания программы, можно не обращать внима
ния на комментарии к коду или вовсе отказаться от них. Но инструменты с искус
ственным интеллектом могут вас подстраховать. Часто можно найти предложения
кода с уже включенными комментариями.
Забавно, но благодаря ИИ наличие комментариев может показаться чем-то вроде
ретро. Сейчас, если вы не можете разобраться в коде, у вас есть возможность про
сто попросить инструмент разобрать его для вас, верно? Это, безусловно, так.
Но в то же время написание промптов становится просто новым способом коммен
тирования. В конце концов, большинство инструментов стали включать промпты в
строки комментариев.
Конечно, если вы хотите добавить комментарии к какому-то коду, можно исполь
зовать простой промпт, например:
Промпт: Добавляйте комментарии, которые должны быть понятными и соот
ветствовать передовому опыту кодирования.
2
LeetCode -
это платформа для подготовки специалистов к техническим собеседованиям и
улучшения навыков программирования.
-
Пер.
194
Глава
8
Добавлять комментарии или нет
ваше дело. Здесь нет универсального правила.
-
Все зависит от того, что лучше для вас и вашей команды. Но одно можно сказать
наверняка: с помощью инструментов искусственного интеллекта добавлять ком
ментарии в код- проще простого.
Модульное программирование
Модульное программирование
-
это основа эффективной и результативной разра
ботки программного обеспечения. Благодаря модульному программированию про
цесс кодирования становится более организованным. Код легче понять и проще
поддерживать. Кроме того, работа в команде с другими разработчиками становится
намного проще, потому что каждый занимается своим модулем и никому не меша
ет. Кроме того, модули можно использовать многократно, а многократное исполь
зование позволяет экономить время, сохранять последовательность действий и
снижает вероятность ошибок.
Преимущества модульного программирования в полной мере применимы и к рабо
те с искусственным интеллектом. Такие инструменты не способны по одному про
стому запросу создать сложное приложение
-
все же это не магия. Однако если
разбить задачу на четкие и конкретные фрагменты, ИИ становится незаменимым
помощником при их реализации. В противном случае велик риск получить не
структурированный код, не соответствующий поставленным требованиям.
По словам Титуса Капилнеана
по продуктам компании
(Titus Capilnean),
Private Market Labs:
соучредителя и главного директора
После того как я начал использовать ИИ-помощники, мне стало гораздо легче
сосредоточиться на самой задаче и собственном подходе к ее решению, а не на
мельчайших деталях кода, который нужно написать. Когда возникает техниче
ская проблема, я начинаю с того, что разбиваю ее на более мелкие части, у каж
дой из которых четко определены входные и выходные параметры. Это особен
но важно, поскольку объем контекстного окна используемого мной инструмента
может оказаться недостаточным для выработки качественного решения за один раз.
Я заметил, что процесс отладки и написания кода становится проще, если я
прошу модель сгенерировать фрагмент, который работает с простыми входными
данными, выполняет только одну задачу и выдает выход, который можно легко
проверить. Если промежуточный результат меня не устраивает, я уточняю опи
сание проблемы и отправляю его в
ChatGPT,
а затем тестирую обновленный код.
Когда решение кажется подходящим, я добавляю дополнительные шаги
-
либо
в рамках существующей функции, либо в виде новой логики, использующей ре
зультат предыдущего этапа. Это позволяет постепенно приблизиться к желае
мому решению.
ИИ-инструменты также повысили мою продуктивность: теперь я могу проверять
корректность кода еще до его компиляции или развертывания, что особенно
важно при работе с облачными функциями, где каждая ошибка может обернуться
Программирование
потерей ресурсов. Я просто вставляю нужный фрагмент в окно
ChatGPT
195
и уточ
няю, работает ли он корректно, предполагая, что весь необходимый контекст
импорт, переменные, константы и вспомогательные функции
-
-
уже задан. Та
кой подход позволяет мне создавать эффективные и надежные решения гораздо
быстрее.
Начало работы над проектом
В начале работы над проектом вы можете столкнуться с «проблемой холодного
старта» или «проблемой пустой страницы».
Вот что происходит: вы смотрите на пустой экран, без кода, без данных, даже без
четкого плана дальнейших действий. Без сомнения, это очень неприятно. Сначала
нужно выбрать архитектуру проекта, шаблоны проектирования и технологию. Эти
решения очень важны, потому что вы будете работать с ними в течение длительно
го времени, поэтому вам нужно как можно раньше определиться с ними.
И давайте не будем забывать о человеческом факторе. Подготовить команду, по
нять, как наладить эффективное общение, и организовать рабочий процесс с ну
ля
-
все это может оказаться не менее сложным, чем сама технология. Дело не
только в том, чтобы написать первые строчки кода. Речь идет о закладке прочного
фундамента для всей последующей работы. Чтобы справиться с этим этапом, необ
ходимо грамотное планирование, технические знания и эффективная командная
работа.
И здесь большую помощь может оказать ИИ. С его помощью вы можете создать
базовый каркас вашего приложения, найти индивидуальную отправную точку, со
ответствующую вашему видению. ИИ избавит вас от тонкостей начальной на
стройки и позволит сразу перейти к более интересным частям проекта.
Вы можете придумать конкретную задачу, а затем попросить большую языковую
модель сгенерировать начальный код или предложить шаблон.
Вот пример промпта:
Промпт: Сгенерируйте начальный код для веб-приложения, которое объединяет
ленты социальных сетей пользователя с нескольких платформ в единую инфор
мационную панель. Какой язык и фреймворки вы посоветуете мне использо
вать? Как быть с общей структурой файлов?
Вначале
React для создания од
(Single Page Application, SPA). ChatGPT также предло
жит использовать инструмент Redux для создания стилизованных и многократно
используемых компонентов. Далее рекомендуется использовать среду Node.js для
запуска приложения и фреймворк Express.js для конечных точек API. Далее реко
мендуется использовать промежуточный слой Passport.js для авторизации, базу
данных MongoDB и библиотеку Mongoose для создания моделей. Что касается
файловой структуры, то на рис. 8.3 показано ее устройство.
ChatGPT
порекомендует использовать библиотеку
ностраничного приложения
196
Глава
8
Общая структура файлов:
(j
ba.sh
Копировать
IIOД
soc1al·dashboard·app/
1
f--
cl1.ent/
1
1--
1
1
L- 1.ndex. html
src/
1
1--
1
1
1
1
1
1
рuЫ1.с/
1
1
1-1-1-f-
1
1
L_
1
L_
components/
pages/
app.)S
1ndex. JS
redux/
package.Json
1
1--
server/
1
f1-fff1--
1
L- package. Json
1
1
1
1
1
conf1g/
routes/
models/
controllers/
m1.ddleware/
Эрр.)S
1
1-1-L_
.g1t1gnore
README . md
Рис.
8.3. ChatGPT
предлагает структуру файлов
для нового веб-приложения
Автозаполнение
Вам знакомо это чувство, когда вы глубоко в коде, настраиваете константы для
единиц времени, а они просто строка за строкой повторяются? Вот в этом случае на
помощь и приходит
GitHub Copilot.
Вы можете поручить
Давайте рассмотрим
GitHub Copilot выполнить
пример.
Предположим,
автозаполнение кода.
вы создаете
приложение,
которое
должно реагировать на события. Это означает, что вам понадобятся константы для
точек останова для библиотеки стилизованных компонентов
CSS-in-JS.
Программирование
197
Сначала вы можете написать следующее:
breakpoints = (
'xs':
'320рх',
#
Очень маленькие устройства
Затем во встроенном в
Copilot чате
можно использовать этот промпт:
Промпт: Создайте константы для других размеров экрана.
На рис.
показан результат. Здесь представлены другие размеры экрана и пере
8.4
менные, которые имеют похожий стиль.
♦ testpy
О:
♦ first_program.py •
•
[> ш
:;: Пара"етры
>Тетр > ♦
1
first_program.py
breakpoints • {
~ создайте константы для различных размеров экрана
Спросить
2
-
j
Cop,lot
GPT-4.1 v
@
~
l,>v
•xs · :
• З20рх · , # Очень маленькие экраны, обычно телефоны
•s1n~ : '640рх" , # Мале.,.ькие экраны, обычно nпанwеты
"md ' : " 1024рх" , # Средние экраны, обычно ноутбуки
'lg • :
•xl • :
' 1280рх · ,
' 1920рх · ,
#
tt
Большие экраны, обычно деск:тоnы
Очень больwме экраны, обычно телевизоры.
Рис.
8.4.
Это вывод
Copilot,
который предлагает различные константы для размеров экрана
С таким результатом можно двигаться дальше.
Copilot
вам поможет с автозаполне
нием, просматривая открытые файлы в вашем проекте.
Капилниана
(Capilnean)
Я обнаружил, что
считает:
Copilot
оказывается особенно эффективным, если у вас есть
части кода, которые похожи друг на друга, когда речь идет о структурах данных.
Если вы обозначили объект в другом файле, который является частью хранили
ща кода, с которым вы работаете, то когда вы пытаетесь описать похожий объ
ект,
Copilot
может автоматически заполнить код по мере его ввода. Например, в
этом случае хорошо работает объект для обычного вызова
Sendgrid email
(Электронная почта
API,
такого как
Sendgrid).
Однако если вы не будете осторожны, этот инструмент может вызвать у боль
шой языковой модели галлюцинации. Например, при импорте он не всегда пра
вильно определяет структуру папок, особенно если вы разработали свою собст
венную форму кода или если используемый вами фреймворк достаточно новый
и еще не очень хорошо документирован. В этом случае мне приходится вручную
проверять, откуда берется компонент и правильно ли указана директория, кото
рую предложил
Copilot.
Глава
198
8
Рефакторинг
Рефакторинг
это как весенняя уборка в вашем коде. Речь идет о наведении по
-
рядка, реорганизации, а иногда и действительно приведении кода к более-менее
удобочитаемому виду. Это не связано с добавлением новых функций или исправ
лением ошибок.
Рефакторинг позволяет сохранить кодовую базу в порядке, сделать ее менее загро
можденной и более интуитивно понятной. Это значит, что когда вы вернетесь или
кто-то другой вернется к работе с этим кодом, ему будет легче понять, как работает
код, что уменьшит головную боль и ругань на весь экран. Кроме того, чистый код
обычно более эффективен и содержит меньше ошибок, так что все в выигрыше.
Рефакторинг
-
одна из тех областей, где инструменты с искусственным интеллек
том работают просто замечательно. С помощью одного-двух промптов вы сможете
разобраться в сложном коде, «отсечь жир» и реорганизовать код в нечто не только
функциональное, но и элегантное. В компании с инструментами на основе искусст
венного интеллекта рефакторинг становится не столько рутиной, сколько секрет
ным оружием, позволяющим оставаться впереди всех.
В следующих разделах этой главы мы рассмотрим несколько примеров выполнения
рефакторинга.
Ninja Code
Считайте, что «код ниндзя»
-
это один из тех трюков, которые показывают в бое
виках. Он выглядит эффектно и сложен в исполнении, и вы думаете: «Ух ты, как
они это сделали?>> Но вот в чем загвоздка: когда проходит первый восторг от так
называемого «кода ниндзя», становится ясно, насколько трудно с ним работать.
Представьте себе фрагмент настолько хитроумный и запутанный, что даже его ав
тор не может с ходу понять, что именно он имел в виду. Да, сначала подобный код
может впечатлить- кажется, будто инструмент или программист творит чудеса.
Но стоит попытаться вернуться к нему позже, чтобы внести изменения, и восторг
сменяется растерянностью: вместо «хи-хи!» скорее «ой-ой-ой».
Правда в том, что, несмотря на внешнюю демонстрацию мастерства, «код ниндзя»
часто
противоречит
принципам
хорошего
программирования,
лежат ясность, простота и читаемость. А именно они
-
в
основе
которых
залог надежной и масшта
бируемой разработки.
Как бы то ни было, «код ниндзя»
-
это дело обычное. Но рефакторинг с помощью
данного инструмента может помочь разобраться в ситуации. Вот пример:
console.log((function(n,
return
а;
а= О,
Ь
= 1) { while (--n)
[а,
Ь]
=
[Ь,
а+ Ь];
} ) (10));
Очень понятно? Ну, скорее всего, вам придется потратить немало времени, чтобы
разобраться в этих строках. Лучше попросите
ChatGPT выполнить эту работу:
Промпт: Объясните этот код в виде пошагового процесса. Также напишите этот
код, чтобы он стал проще для понимания.
Программирование
ChatGPT
199
определяет, что это функция для вычисления п-го числа Фибоначчи. Да
лее он объясняет ее в шесть шагов, а затем предлагает упрощенную версию, пока
занную на рис.
ChatGPT:
8.5.
В этой версии функция
calculateFibonacci
(вычислить значение Фибо
наччи) наглядно показывает процесс итерации последовательности Фибоначчи.
Этот вариант состоит из большего количества строк, но гораздо проще для по
нимания и сопровождения, особенно для других разработчиков, которые могут
прочитать этот код в будущем.
Рис.
8.5. ChatGPT
предоставил более простую версию кода,
обработанного «кодом ниндзя»
Метод извлечения
Метод извлечения применяется, когда вам нужно обработать длинный метод или
функцию. Необходимо полностью выделить фрагмент кода, предназначенный для
выполнения определенной задачи, например проверки данных или вычисления, и
преобразовать его с помощью нового метода.
Данный подход
-
это не только забота о том, чтобы все выглядело аккуратно и
опрятно. Он еще и практичен. Преобразованный код легко читается и понимается.
Когда вам снова понадобится выполнить ту же задачу, вы сможете вызвать данный
метод вместо того, чтобы заново переписывать код. А если вдруг произойдет сбой,
его будет проще устранить, потому что ваш код разбит на компактные фрагменты .
Это облегчает вашу жизнь и позволяет сохранить код чистым и хорошо структури
рованным.
Вот несколько промптов для использования метода извлечения:
Промпт: Существуют ли какие-либо общие ошибки, которых следует избегать
при использовании метода извлечения в функциональных языках программиро
вания?
Глава
200
8
Промпт: Во вложении
-
фрагмент моего кода на языке С#. Подскажите, какие
участки кода можно использовать для рефакторинга с применением метода из
влечения?
Промпт: Сравните мою исходную функцию и версию после прохождения фазы
рефакторинга с использованием метода извлечения. Какая из этих функций бо
лее эффективна?
Разделение условий
Разделение условий- это разбиение больших, ужасных выражений
else
if-then-
на что-то более удобоваримое. Вы знакомы с такими длинными, запутанны
ми условиями, которые заставляют вас щуриться на экран, пытаясь понять, как это
работает.
Допустим, у вас имеется оператор
if
(если) с непростым условием, с_огласно кото
рому проверяется несколько переменных и, возможно, вызываются другие функ
ции. Вместо того чтобы каждый раз пытаться расшифровать каждое условие, вы
можете это условие перенести в метод с определенным именем, которое четко опи
сывает, что проверяет условие. Например, условие типа
&& user. hasSubscription ()
if
(user. isActi ve ()
&& ! user. isBlocked () )
(если пользова
тель активен, имеет подписку и не заблокирован) можно преобразовать в метод с
именем
canUserAccessContent ()
(может получить доступ к контенту). Это
не только сделает ваш основной метод проще, но и сразу же позволит сделать код
более понятным.
Код внутри блоков then и else можно выносить в отдельные методы
-
это улуч
шает читаемость основного потока программы. Вместо того чтобы разбираться в
деталях логики прямо внутри условия, программист видит лишь общую структуру:
если условие выполнено
-
вызывается один метод, иначе
-
другой. Логика каж
дого варианта изолирована в четко названных методах, что упрощает их тестирова
ние и изменение.
Вот несколько промптов:
Промпт: Объясните, как разложить условия в коде
Java для лучшей читабельности?
Промпт: Каким образом я могу разложить сложные операторы if-then-else,
используя технику разложения условий?
Переименование
Переименование функций, переменных и классов может показаться небольшим
изменением, но это изменение может существенно улучшить читабельность и
удобство сопровождения кода. Данная функция особенно полезна в ситуациях, ко
гда код со временем эволюционировал, и первоначальные названия уже не совсем
точно описывают его действия. Например, метод с первоначальным названием
processData
(обрабатываемые данные) можно сделать более специализирован
ным. Переименование его во что-то более описательное, например в
f i 1t
еr
I n-
Программирование
validEntries
201
(фильтровать недопустимые записи) позволяет мгновенно прояс
нить его функциональность.
Написать промпт на переименование довольно просто:
Промпт: Как правильно назвать переменную, содержащую общее количество
пользователей в базе данных в моем SQL-скрипте?
Промпт: Здесь приведен фрагмент моего кода на
JavaScript.
Проверьте имена
переменных и методов и предложите улучшения.
Промпт: В моем классе
Java
имена недостаточно понятны. Предложите имена,
которые будут более понятны.
Но, когда вы используете такой инструмент, как
Copilot,
нужно быть осторожным.
Если вы введете новое имя вместо старого, это может привести к поломке тех час
тей кода, в которых все еще используется старое имя.
Мертвый код
Как следует из названия, мертвый код уже ни для чего не используется. Это строки
кода, которые забыли убрать после удаления связанных с ними функций или вне
сения изменений, сделавших некоторые части обновляемого кода не востребован
ными.
Если удалить мертвый код из проекта, программа станет более аккуратной и лучше
поддающейся контролю. Кроме того, данный шаг делает код менее запутанным для
новичков. Им не придется ломать голову, для каких целей нужен тот или иной
компонент, если по первому впечатлению он ничего не делает.
Вот несколько полезных промптов:
Промпт: Помогите мне определить потенциально мертвый код в этом фрагмен
те
JavaScript.
Промпт: Здесь представлен фрагмент моего проекта на
Python.
Укажите на код,
который представляется как неиспользуемый или избыточный.
Промпт: Проанализируйте, пожалуйста, эти SQL-процедуры и проверьте, мож
но ли их удалить.
Обратите внимание, что использовать большую языковую модель для этих целей
может быть рискованно. Иногда случается так, что строки, которые выглядят как
старый, пыльный уголок кода, на самом деле могут быть важны для тех редких
сценариев, которые изредка возникают как крайний случай. Кроме того, существу
ет эффект домино: удаление одной части может испортить что-то еще, что зависело
именно от этой части, особенно если данный фрагмент является частью сложной
логики или настройки. Так что будьте осторожны.
Другая проблема заключается в том, что генеративный искусственный интеллект
может пока и не понимать всех взаимосвязей. Поэтому, до тех пор, как системы
искусственного интеллекта не станут более совершенными, лучше не использовать
их для поиска мертвого кода.
Глава
202
8
Когда дело доходит до работы с мертвым кодом, лучшим вариантом могут стать
альтернативные инструменты. Например, такая программа как линтер. Думайте об
этом инструменте как о средстве по приведению кода в порядок. Если вы работаете
с
для этого языка существует инструмент
JavaScript,
граммировать на
Python
зоваться инструментом
есть инструмент
RuboCop.
Pylint,
ESLint.
а поклонники
Для любителей про
Ruby
могут восполь
Работа этих инструментов напоминает проверку
грамматики в коде. Инструменты отлично справляются с обнаружением досадных
синтаксических ошибок, потенциальных багов и, конечно, даже тех коварных
фрагментов кода, которые ничего не делают.
Существуют и «тяжелые» инспекторы: инструменты статического анализа кода.
Лучшими поставщиками таких инструментов являются
Coverity.
SonarQube, Code Climate
и
Эти инструменты похожи на детективов. Они копаются в вашем коде, да
же не запуская его, выискивая сложные шаблоны, которые могут стать причиной
проблем в будущем, а также занимаются поиском мертвого кода.
Функции
Функции
это хлеб и масло в программировании. Функции занимают важней
-
шее место в любом программном обеспечении, независимо от того, какой язык
программирования используется. Это фрагменты кода, которые помогают под
держивать порядок в программах и легко читаются,
поскольку позволяют легко
повторно использовать содержащийся в функции код. А это спасение для любого
разработчика. Кроме того, с помощью функций можно большую и сложную зада
чу разделить на более мелкие и удобные фрагменты. Таким образом, работать со
сложным программным обеспечением становится намного проще, особенно когда
вам нужно исправить ошибки, сделать обновления или просто попытаться понять,
что делает код.
С самого начала необходимо правильно выбрать названия для функций. Заставить
их работать
-
это одно, но вам также нужно убедиться, что они хорошо сочетают
ся с остальным кодом. Вам нужно, чтобы ваши функции были понятными, просты
ми и эффективными. Поэтому подумайте о том, как назвать каждую функцию, что
бы имя показывало назначение функции, как ее настроить, как она будет работать с
входящими и исходящими данными, и как она будет справляться с любыми замин
ками.
Чтобы облегчить задачу, ниже приведены некоторые рекомендации, о которых сле
дует помнить:
♦ Принцип выполнения одной задачи.
Функция должна специализироваться на выполнении одной задачи. И все! Так
будет гораздо проще понять, что она делает, проверить, правильно ли она рабо
тает, и исправить ее, если это не так.
203
Программирование
♦ Дайте функции однозначное название.
Назовите функцию так, чтобы было понятно, что она делает. Если она вычисля
ет общую цену, назовите ее calculateTotalPrice (расчет общей цены). Это сде
лает ваш код гораздо более читабельным.
♦
Функция должна быть краткой и понятной.
Хорошим правилом по написанию функции считается, когда вся функция по
мещается на экран, и ее можно проанализировать без использования прокрутки.
Короткие функции легче понимать, обрабатывать, и вероятность возникновения
ошибок в них ниже.
♦ Ключевые параметры.
Используйте эти параметры для ввода данных и возврата значений. Таким обра
зом, ваши функции станут понятными и автономными.
♦
Сохраняйте последовательность.
Следуйте соглашениям по кодированию и правилам стиля, принятым в вашем
языке или проекте. Это поможет сделать ваш код единообразным и удобным для
чтения.
Если вы не проигнорируете эти советы, то сможете составить несколько действи
тельно эффективных промптов для написания функций с помощью
ChatGPT.
По
смотрите на примеры запросов, показанные ниже:
Промпт:
Напишите
функцию
с
Python
именем
calculate_area (вычисляе
мая_площадь), которая принимает в качестве параметров два целых числа, дли
ну и ширину, и возвращает площадь прямоугольника. Включите в текст доку
мента строку,
объясняющую
назначение функции,
и убедитесь, что,
когда
функция обрабатывает входные данные, которые не являются целыми числами,
то вызывает ошибку TypeError (Ошибка_типа).
Промпт: Требуется функция
JavaScript
под названием fil terAndTransform.
Функция в качестве входных данных должна принимать массив объектов. Каж
дый объект имеет свойства: name (строка) и age (число). Функция должна воз
вращать новый массив, содержащий имена людей в возрасте от
18
лет и старше.
Эти имена должны быть преобразованы в верхний регистр. Включите коммен
тарии, объясняющие логику работы.
Промпт:
Создайте
С++
функцию
с
именем
efficientSort
(эффектив
ная_сортировка), которая выстраивает массив целых чисел в порядке возраста
ния. Функция должна быть оптимизирована с учетом временной сложности.
Дайте комментарии внутри функции, объясняющие выбор алгоритма сортиров
ки и его временную сложность 3 .
Промпт: Создайте функцию
Java
под названием safeDivide, которая принимает
два двойных параметра, числитель и знаменатель, и возвращает результат их де-
3
В информатике временная сложность определяет количество компьютерного времени не
обходимого для запуска алгоритма.
-
Пер.
Глава
204
8
ления. Функция должна обрабатывать деление на ноль, возвращая при этом
пользовательское сообщение об ошибке. Включите комментарии
Javadoc,
объ
ясняющие функцию и методы обработки ошибок.
Объектно-ориентированное программирование
Объектно-ориентированное программирование, или сокращенно ООП
-
это спо
соб написания компьютерных программ с использованием понятия «объекты» для
представления данных и методов. Представьте, что вы создаете несколько малень
ких, автономных ящичков, каждый из которых имеет свой собственный набор ин
струментов и информации. Эти коробки, называемые классами, похожи на чертежи
для создания различных объектов. Класс определяет структуру и поведение объек
тов. То есть, это похоже на шаблон. Затем на основе этого класса вы можете созда
вать отдельные объекты. Хотя каждый объект будет обладать своими особенно
стями, все объекты следуют одной и той же базовой структуре.
Вникая в мир объектно-ориентированного программирования, вы словно попадаете
в лабиринт таких сложных понятий, как абстракция, наследование, инкапсуляция и
полиморфизм. Может показаться, что они написаны на другом языке.
Именно здесь
ChatGPT
может стать вашим переводчиком. Он разложит эти слож
ные идеи на кусочки, которые легко усвоить. Не знаете, что на самом деле означает
инкапсуляция? Просто спросите, и вы получите ответ, который действительно име
ет смысл, за исключением технического жаргона.
Промпт: Создайте простой класс на <вашем предпочтительном языке програм
мирования>, который демонстрирует инкапсуляцию.
Промпт: Приведите несколько реальных примеров инкапсуляции в программи
ровании.
Промпт: Объясните абстракцию в объектно-ориентированном программирова
нии с помощью аналогии из повседневной жизни.
Промпт: Покажите мне пример наследования в сценарии программирования.
Промпт: Как наследование способствует повторному использованию кода в
объектно-ориентированном программировании?
Промпт: Как полиморфизм повышает универсальность программы?
Промпт: В каких сценариях полиморфизм особенно полезен? Приведите при
меры.
Инструменты программирования с помощью искусственного интеллекта также мо
гут быть полезны при разработке начальных структур классов. Вот несколько при
меров промптов:
Промпт: Разработайте класс Employee со свойствами employeeName, employeeID
и department. Реализуйте метод, который отображает информацию о сотрудни
ке. Также включите конструктор для установки этих свойств.
Программирование
Промпт: Мне нужен класс BankAccount на языке
Java.
205
Он должен иметь такие
приватные свойства, как balance и accountNumber. Можете ли вы добавить ме
тоды deposi t (), wi thdraw ()
и check-Balance (), которые безопасно изменяют
эти свойства или получают к ним доступ?
Промпт: Покажите мне, как создать класс Vehicle на С#, а затем класс Truck,
который наследуется от него. Обязательно включите такие свойства, как: wheels
и
fuel Туре, и продемонстрируйте использование различных модификаторов
доступа.
Промпт: Как на С++ написать класс FileHandler, который открывает файл в
своем конструкторе и закрывает его в своем деструкторе? Также включите ме
тоды
wr i teToFi le ()
И
readFromFi le ().
Фреймворки и библиотеки
Заниматься разработкой программного обеспечения без фреймворков и библио
тек
-
все равно, что пытаться испечь шикарный торт с нуля, не имея ни рецепта,
ни готовых ингредиентов. Это возможно, но гораздо сложнее и требует больше
времени. Фреймворки и библиотеки
-
это секретное средство, которое облегчает
жизнь разработчика. Вместо того чтобы изобретать колесо каждый раз, когда вам
нужно сделать веб-запрос или манипулировать элементом
DOM,
вы просто исполь
зуете то, что уже есть.
Инструменты программирования
с
использованием искусственного интеллекта,
безусловно, могут вам помочь. Прежде всего, эти инструменты могут быть полезны
для изучения основных функций и рабочих процессов. Они также могут подска
зать, когда лучше использовать тот или иной фреймворк или библиотеку.
Но воспринимайте их помощь с долей иронии. Вот что говорит Капилнеан
(Capilnean):
У читывая большое количество обновлений, с которыми сталкивается
React,
а
также другие фреймворки и библиотеки, и тот факт, что мы используем опреде
ленные версии фреймворков, мне пришлось предоставить эту информацию в ка
честве системных промптов моему экземпляру
свои результаты. Иногда
GPT
ChatGPT,
чтобы оптимизировать
предлагал решения скорее академического, чем
производственного уровня. Поэтому в более сложных вопросах я обычно пола
гаюсь на сотрудничество с нашими высококлассными разработчиками. В случае
с
React
я чаще прошу
GPT
проверить синтаксис и метод обработки определен
ного типа данных, чем создать для меня полноценную функцию.
То же самое относится и к работе с
Node.js.
Прежде чем обратиться к
ChatGPT
с
просьбой сгенерировать фрагмент кода, мне приходится учитывать особенности
внутренних
API
и способы взаимодействия с нашими данными. Как только я
формулирую выходные данные одной из функций в виде входа для новой функ
ции, которую хочу создать,
ChatGPT,
как правило, предлагает стабильное и ра
бочее решение. Если результат меня не устраивает или возникает ошибка, я
Глава
206
8
продолжаю диалог: объясняю, в чем именно проблема, и прошу скорректиро
вать код с учетом новых требований. Этот итеративный подход позволяет быст
ро находить работающие решения.
Данные
Данные
-
это основа любого приложения. Это то, что позволяет приложению ра
ботать. Как кровь переносит кислород и питательные вещества, обеспечивая функ
ционирование нашего организма,
так и данные проходят через приложение,
пре
доставляя ему информацию и сведения, необходимые для его работы.
Но создание выборочных данных может быть нелегким делом. Представьте себе:
вам не терпится протестировать свое новое великолепное приложение, но для нача
ла вам нужна подборка данных, чтобы увидеть, как приложение работает в реаль
ных условиях. Вы начинаете вводить бесконечное множество строк и данных: име
на, даты, числа
-
всё, что потребуется. И все это продолжается и продолжается.
Более того, вам нужно быть внимательным, чтобы сделать работу приложения дос
таточно реалистичной, чтобы ваши тесты были достоверными, но не настолько де
тальной, чтобы вы писали роман для каждой записи. А если вам нужен большой
набор данных? Забудьте об этом: вы, по сути, подписываетесь на марафон копиро
вания, подгонки и перепроверки.
И в этом случае может пригодиться искусственный интеллект. Но сначала вам
нужно выбрать базу данных и создать схему и таблицы. Инструменту также нужно
будет указать взаимосвязи, скажем, между таблицами. Затем необходимо выпол
нить конфигурацию и настройку. Вот тогда искусственный интеллект сможет вам
помочь.
Вот несколько промптов, которые помогут вам правильно выбрать базы данных:
Промпт: Какой тип базы данных лучше всего подходит для работы с <конкрет
ными типами данных или функциями, например, взаимодействие с пользовате
лями, инвентаризация товаров и т. д.>?
Промпт: Для приложения, ожидающего <высокий/низкий> трафик с <типом
данных, например, изображения, текст, данные в реальном времени>, какую ба
зу данных мне следует рассмотреть?
Промпт: У меня ограниченный бюджет. Подскажите недорогое решение для
создания базы данных для небольшого приложения <типа приложения, напри
мер, приложение службы местной доставки>?
Промпт: Я работаю с базами данных сравнительно недавно. Какие базы данных
удобны и просты в обслуживании для новичка?
Вот несколько промптов, которые помогут вам разобраться со схемой базы данных:
Промпт: Помогите мне разработать базовую схему базы данных для <тип при
ложения, например интернет-магазин, блог>? Мне нужно знать, какие таблицы я
должен создать и какие первичные отношения задать между ними.
Программирование
207
Промпт: Как выглядит эффективная структура таблиц для управления <кон
кретным типом данных, например, заказами клиентов, запасами> в реляционной
базе данных? Какие поля и типы данных следует включить?
Промпт: Как определить связи между таблицами в реляционной базе данных
для приложения, которое занимается <описать функциональность приложения,
например, управление событиями, запись на курсы>? В частности, мне нужна
помощь в понимании внешних ключей и объединенных таблиц.
Промпт: Я работаю над схемой реляционной базы данных для <описать про
ект>. Подскажите, как эффективно настроить первичные и внешние ключи для
обеспечения целостности данных?
Промпт: Какую выбрать стратегию нормализации данных для базы данных, об
рабатывающей <тип данных или функции приложения>? Как я могу избежать
избыточности данных и обеспечить их целостность?
Промпт: Я использую базу данных
NoSQL
для <тип проекта, например, прило
жение для социальных сетей>. Как я должен спроектировать структуры доку
ментов для хранения <конкретных типов данных, например, профилей пользо
вателей, постов, комментариев>?
Промпт: При разработке схемы базы данных, какие стратегии индексирования
следует учитывать для оптимизации производительности запросов, особенно
для <тип запросов или операций, например, полнотекстовый поиск, частые об
новления>?
Промпт: Мне нужно перенести существующую базу данных на новую схему.
Каковы основные моменты и шаги для изменения структуры базы данных без
потери целостности данных?
А вот некоторые промпты для настройки начальной среды базы данных:
Промпт: Предоставьте пошаговые инструкции по установке <конкретного сер
вера баз данных, например
ной системы, например
MySQL, PostgreSQL>
Windows, Linux>.
для <конкретной операцион
Промпт: После установки <название базы данных>, какие основные параметры
конфигурации я должен первоначально задать для оптимальной работы?
Промпт: Какие существуют оптимальные методы защиты <конкретного сервера
базы данных>? Меня особенно интересует аутентификация пользователей и за
щита конфиденциальных данных.
Промпт: Как оптимизировать производительность <конкретной базы данных>
для приложения, которое будет обрабатывать <опишите характер данных и
ожидаемую нагрузку, например, большие наборы данных, большие объемы
транзакций>?
А теперь давайте посмотрим, как можно использовать искусственный интеллект
для создания образцов данных. Вот несколько примеров промптов:
Промпт: Создайте демо-данные для
100
ной почты и сохраните их в СSV-файле.
идентификаторов и данных электрон
208
Глава
8
Промпт: Создайте демонстрационные данные для
50
товаров, включая иденти
фикатор товара, название, цену и категорию.
Промпт: Создайте демонстрационный набор данных из
150
записей о заказах,
каждый из которых содержит идентификатор заказа, идентификатор клиента,
дату заказа и общую сумму.
Промпт: Создайте пример с данными для
100
сотрудников, включая идентифи
катор сотрудника, полное имя, отдел и адрес электронной почты.
Промпт: Создайте выборку данных для
80
записей отзывов клиентов, включая
идентификатор отзыва, идентификатор.
Промпт: Создайте оператор добавления данных
SQL,
чтобы заполнить таблицу
Feedback данными.
Получив данные, вы можете создавать для них операторы
SQL.
Для записей отзы
вов клиентов можно применить следующий промпт:
Промпт: Создайте оператор добавления данных
SQL,
чтобы заполнить таблицу
Feedback данными.
В этом случае, когда дело доходит до сложной задачи преобразования данных,
ChatGPT
может стать спасителем. Если вы разработчик, то знаете, что преобразо
вание данных между различными форматами, такими как
и
TOML,
XML, SQL, JSON, CSV
является обычным делом. Но давайте будем честными, это может быть
утомительным процессом, иногда чреватым ошибками. Вот тут-то и пригодится
ChatGPT.
Вот несколько примеров промптов:
Промпт: Вот строка CSV: "Джон Доу, 35 лет, Нью-Йорк". Преобразуйте ее в фор
мат ХМL.
Промпт: У меня есть массив
JSON
следующего вида:
[ { 'name': 'Alice', 'job': 'Engineer' ),
{ 'name':
Как мне представить это в формате таблицы
'ВоЬ',
SQL?
Промпт: Мне нужно преобразовать конфигурацию
j ect II owner =
11
Sara 11
'
'job': 'Designer'} ].
TOML:
'ti tle =
11 Му
Pro-
в эквивалентный формат У AML. Как это можно преоб
разовать?
Разработка фронтенда
Под разработкой фронтенда подразумевается придание веб-сайтам привлекатель
ного внешнего вида и удобной навигации. По своей сути здесь используется язык
разметки
HTML
для создания базовой структуры веб-страниц, язык
придания красивого вида и компоновки. Язык
JavaScript
CSS -
для
позволяет приложению
взаимодействовать с пользователем. В настоящее время разработчики фронтенда
часто используют такие фреймворки, как
React
и
Vue.
Эти фреймворки позволяют
не только многократно использовать компоненты, но и предлагают способы обнов-
Программирование
1
209
ления данных в реальном времени, что, в свою очередь, позволяет создавать дина
мичные и интересные веб-сайты и приложения.
Разработка фронтенда может стать сложной задачей даже. для опытных разработ
чиков. Прежде всего, это непредсказуемая природа большого количества разрабо
танных веб-браузеров и взаимодействие с пользователями. Вам придется иметь де
ло с различными браузерами, устройствами, размерами экранов и предпочтениями
пользователей. Это все равно что пытаться сшить универсальную футболку, кото
рая будет хорошо смотреться на всех. Кроме того, мир фронтенда быстро меняется.
Да и обновлением для фреймворков никого не удивить.
Еще одна особенность разработки фронтенда заключается в том, что это не только
программирование. Данная разработка также во многом связана с обеспечением
хорошего пользовательского опыта
(UX)
или другими словами
-
удобств пользо
вателя. А удобство использования приложения или сайта обеспечивает разработка
дизайна пользовательского интерфейса
(UI).
Здесь разработчику потребуется опре
деленный набор навыков, которым многие программисты не обладают. Ну а обес
печение удобств пользователя и грамотно разработанный интерфейс неразрывно
связаны с обеспечением принципов и методов взаимодействия людей с программой
и заложенными в нее технологиями. Внешний вид пользовательского интерфейса
должен быть визуально привлекательным и интуитивно понятным. Разработчику
необходимо обеспечить логически верное и последовательное функционирование
приложения или веб-сайта. Здесь разработчику приходится быть отчасти художни
ком, отчасти психологом. Для многих программистов, которые являются непре
взойденными в таких вещах, как алгоритмы и структуры данных, мир цветов, маке
тов
и
пользовательских
маршрутов
может
показаться
чем-то
загадочным
и
похожим на непроходимые джунгли.
Как бы то ни бьшо, инструменты программирования на основе искусственного ин
теллекта могут помочь. Мы рассмотрим некоторые из них в следующих разделах.
Каскадные таблицы стилей
CSS
Создание разметки сайта с помощью языка разметки
CSS
может оказаться непро
стой задачей, особенно если вы работаете над проектом большого и сложного сай
та. Важно убедиться, что, когда сайт будет открываться с помощью разных браузе
ров и устройств, все работает правильно и все выглядит хорошо. Вы должны учесч,
все «причуды» каждого браузера. И, следует учесть, случайно можно напутать так,1 :
что одна часть вашего стиля будет «наступать на ногу» другой, и все будет выгля\
деть, мягко говоря, неуклюже. Кроме того, традиционный язык разметки
CSS
не·
позволяет использовать переменные или функции, а это значит, что вам придется
часто делать повторения в коде (хотя такие инструменты, как
помочь). Даже такая простая вещь, как выравнивание
SASS и LESS, могут
<di v> по центру, может·
стать непростой задачей.
Вот несколько промптов для решения распространенных задач
Промпт: Предоставьте мне фрагмент
CSS
CSS:
для адаптивной навигационной пане
ли, которая сворачивается в меню на мобильных устройствах.
Глава
210
8
Промпт: У меня проблемы с макетом
flexbox
в
CSS,
где элементы не выравни
ваются должным образом. Подскажите, что может быть не так?
Промпт: Мне нужно добавить эффект наведения на кнопки на моем сайте. Мо
жете ли вы показать мне пример
CSS,
чтобы кнопка меняла цвет при наведении
на нее курсора?
Промпт: Я хочу добавить анимацию затухания на главную страницу моего сай
та. Не могли бы вы предоставить фрагмент кода
CSS
для этого?
Создание графики
Создание профессиональной графики для веб-сайтов или приложений требует об
ширных знаний в области дизайна, а также умения работать с такими сложными
инструментами, как
Photoshop.
Однако существует множество мощных систем ис
кусственного интеллекта, генерирующих текст в изображение, которые могут по
мочь вам создать оригинальные изображения. Некоторые из этих систем работают
с такими приложениями как:
♦
Canva;
♦
StaЫe
♦
DALL-E 3 (который
♦
Adobe's FireFly;
♦
Midjoumey.
Diffusion;
встроен в
ChatGPT);
С помощью этих систем вы можете создавать множество типов объектов, включая
изображения героев, кнопки и логотипы.
Давайте рассмотрим пример. Пусть
ChatGPT создаст нам
логотип:
Промпт: Я создаю сайт для своей домашней пекарни, которая называется «Слад
кий венчик» . Мне нужен логотип, который будет приятным на вид и привлека
тельным. Основная продукция
-
торты и печенье, так что, возможно, их можно
включить в дизайн. Мне нравятся пастельные тона, особенно светло-розовый и
мятно-зеленый. Стиль должен быть простым и современным, с нотками легко
мыслия.
ChatGPT после
получения указаний создал логотип, показанный на рис.
СЛАДКИЙ ВЕНЧИК
Домашняя пекарня
Рис
8.6. Логотип,
созданный
ChatGPT
8.6.
Программирование
1
211
Если вы хотите внести изменения в полученный результат, вы можете продолжить
работу с
ChatGPT.
Другие инструменты искусственного интеллекта, например
имеют больше возможностей для создания изображений, чем
ChatGPT,
но
Firefly,
ChatGPT
все равно может создавать привлекательные изображения без особых усилий.
Инструменты на основе искусственного интеллекта
Есть несколько неплохих ИИ-инструментов, которые могут создавать веб-сайты
просто по запросу или по изображению того, как должен выглядеть внешний вид.
Они выполнят всю работу по программированию за вас. В том числе и переход на
такие фреймворки, как
React, Angular
и
Vue.
Более того, инструмент на основе ис
кусственного интеллекта обычно может импортировать каркас, например, из
Figrna.
После того как код создан, вы можете приступать к его настройке, чтобы добиться
нужного результата. Использование искусственного интеллекта
-
это эффектив
ный способ ускорить весь процесс создания сайта.
Вот некоторые из таких инструментов:
♦
TeleportHQ;
♦
Anima;
♦
Locofy;
♦
vO
от
Vercel.
Давайте познакомимся с инструментом
vO
от
Vercel, который прост в использова
ChatGPT, что и видно на рис. 8.7.
нии. Фактически, интерфейс похож на интерфейс
Рис.
8. 7. Это интерфейс для vO от Vercel
Вы можете ввести промпт на создание интерфейса или просто загрузить изображе
ние. В этом примере я буду использовать запрос:
Промпт: Панель электронной коммерции с боковой навигацией и таблицей по
следних заказов.
Глава
212
8
В результате вы попадете в студию дизайна, которая будет выглядеть так, как пока
зано на рис.
8.8.
о
Заказы
__._.
_
Р45 , 231 . 89
+2350
,.
+12,234
+573
•19"-с~""'о
Последние заказы
А•т•
2023-()6-23
Рис.
8.8. Дизайн-студия,
которую после введения запроса предлагает
Р250.00
vO
Ьу
Vercel
Искусственный интеллект предложит три версии панели Интернет-магазина. Кроме
того, вы можете создать дополнительные панели. Затем с помощью следующего
запроса вы можете внести изменения. Например: изменить размер текста, цвета и
так далее.
По окончании работы нажмите кнопку
вится список чистого кода
фреймворк
React,
Code в
правом верхнем углу. На экране поя
в основе которого лежат технология
shadcn/ui
и
Tailwind CSS.
Существует также несколько систем с открытым исходным кодом, которые исполь
зуют искусственный интеллект для создания фронтендов. Рассмотрим приложение
Screenshot to Code.
Создатель этого проекта
генеральным директором и основателем
ретен компанией
Yahoo!
в
2013
- Аби Раджа (АЬi Raja) - является
Pico. Его предыдущий стартап был приоб
году.
Раджа потратил шесть месяцев на создание начальной кодовой базы для
to Code.
«Разработчики фронтенда часто преобразуют дизайн и макеты
говорит Раджа.
-
Большая часть этой работы выполняется повторно. Но мое прило
жение может помочь автоматизировать этот процесс, выполнив около
В настоящее время приложение
Bootstrap
и
Screenshot
в код», -
90% задачю>.
Screenshot to Code поддерживает экспорт
HTML/Tailwind CSS. На GitHub у проекта более 31 ООО звезд.
С помощью
ChatGPT
в
React,
вы также можете преобразовать изображение в код. Предпо
ложим, вы хотите создать приложение-калькулятор и добиться того, чтобы оно вы
глядело как версия на
iPhone.
На рис.
8.9
показано изображение.
Программирование
Рис.
8.9. Вы
можете предоставить
213
ChatGPT
изображение приложения-калькулятора
для iPhone, чтобы сгенерировать код
Сначала мы попросим
ChatGPT
идентифицировать изображение, что он и сделает.
Затем мы можем использовать этот промпт:
Промпт: Предложите код для этого изображения .
На рис.
8.1 О
ChatGPT
показан код приложения «Калькулятор» .
создал код для
Python.
Правда, стилизация не очень удачная, но это все
равно выглядит довольно хорошо . Конечно, если вы хотите, чтобы он больше по
ходил на версию для
ChatGPT,
iPhone,
вы можете уточнить промпт, например, сказать
чтобы он использовал что-то вроде
Рис.
8.10. ChatGPT создал
React.
код для калькулятора
на основе изображения приложения Арр\е для
iPhone
АРl-интерфейсы
Освоение нового программного интерфейса может оказаться непростой задачей.
Во-первых, вам придется читать большое количество документации, которая может
214
Глава
8
быть сложной и насыщенной техническими деталями. А с такой документацией
можно попасть впросак: некоторые из документов понятны и просты, а другие
...
не
очень. Затем нужно войти в систему и получить доступ, например, с помощью АРI
ключей или ОАuth-токенов. Кроме того, попытки разобраться в структурах данных
и форматах ответов, которые
API
выдает вам в ответ, может оказаться непосильной
задачей. Кроме того, необходимо работать с ошибками, а также следить за обнов
лениями и изменениями в
К счастью, с помощью
API.
ChatGPT решить
эти проблемы можно гораздо проще.
Чтобы понять, как это сделать, давайте рассмотрим простой пример. Предположим,
вы хотите использовать интерфейс
можете обратиться к
API
для получения информации о погоде. Вы
ChatGPT за рекомендациями
Промпт: Какие есть хорошие
API для
Один из них, который рекомендует
по
API.
получения информации о погоде?
ChatGPT -
это
OpenWeather API.
Далее спро
сите следующее:
Промпт: Как начать использовать
ChatGPT описывает основные
API OpenWeather?
шаги.
Затем вы можете попросить его показать, как правильно сделать промпт:
Промпт: Как создать запрос с помощью
помощью
API OpenWeather?
Как это сделать с
Python?
ChatGPT проведет вас
через весь процесс, подробно описав все шаги:
♦ Импортируйте библиотеку запросов.
♦
Определите ключ
API.
♦ Создайте URL-aдpec запроса
API
и используйте конечную точку текущих по
годных данных.
♦
Выполните запрос и обработайте ответ.
♦
Проверьте, успешно ли выполнен запрос.
Заключение
В этой главе мы познакомились с модульным программированием, функциями и
объектно-ориентированным программированием. Мы также рассмотрели, как ис
пользовать искусственный интеллект для изучения новых языков и фреймворков не
посредственно в процессе работы, а также как использовать его для более эффектив
ной работы с данными. Затем мы узнали, как создавать привлекательные фронтенды.
Но хочу еще раз обратить ваше внимание: инструменты программирования на ос
нове искусственного интеллекта далеки от совершенства. Поэтому важно не упус
кать этот факт из виду и все перепроверять.
ГЛАВА
9
Отладка,тестирование
и развертывание
Эта глава посвящена тем этапам разработки программного обеспечения, которым
зачастую не уделяется достаточного внимания: отладке, тестированию и разверты
ванию. Здесь мы поговорим обо всем: от обнаружения различных ошибок и напи
сания документации, которая будет понятна людям, до проверки, делает ли ваш код
то, что должен. Мы также узнаем, как без проблем объединить изменения, сделать
так, чтобы ваше программное обеспечение работало стабильно и безопасно, учесть
мнение пользователей и даже как произвести фурор при запуске.
Отладка
При создании кода разработчик тратит от
35
до
50%
своего времени на отладку.
Это не просто потеря времени. На отладку тратится значительная часть бюджета
программного проекта.
Существует два основных типа ошибок. Первый тип
-
это синтаксические ошиб
ки. Эти ошибки возникают, когда в вашем коде имеется несоответствие правилам
структуры языка. Например, просто забыли добавить двоеточие в конце цикла for.
Современная среда разработки, такая как
VS Code,
должна обнаруживать и исправ
лять большое количество этих ошибок.
Второй тип
-
логические ошибки. Это более сложный вид ошибок, поскольку их
сложно обнаружить: программа продолжает работать, но не так, как вы задумыва
ли. Например, вы пишете код, который должен отфильтровывать из списка всех
пользователей в возрасте
оборот
-
18
лет и старше. Однако по ошибке условие работает на
исключает тех, кому меньше
ске остаются взрослые. Такая
18.
путаница -
В результате вместо подростков в спи
типичный пример логической ошибки:
программа выполняет действия, противоположные вашим намерениям. Почему так
происходит, понять не всегда просто. Иногда достаточно изменить одну строчку,
поправив условие фильтрации. А иногда требуется пересмотреть всю логику рабо
ты программы.
Как бы то ни было, в начале отладки не стоит использовать инструмент програм
мирования с поддержкой ИИ. Зачастую вполне достаточно традиционных подхо-
Глава
216
дов. В
9
VS Code
предусмотрены мощные функции отладки, которые позволяют об
наружить и устранить многие проблемы. В конце концов, вы можете легко устано
вить точки останова, чтобы проверить значения переменных, пройтись по коду
строка за строкой и посмотреть, что происходит. Точки останова
-
просто спасе
ние, особенно в больших программах.
Но, конечно, есть и такие ошибки, которые заставляют задуматься. Современное
программное обеспечение часто представляет собой сложную головоломку с мно
жеством зависимых друг от друга слоев и частей, которые должны работать совме
стно. Иногда ошибка возникает из-за того, что эти части взаимодействуют непред
виденным образом, и выяснить, что именно идет не так, бывает очень непросто.
Кроме того, существует проблема документации. Вернее, ее отсутствия. Или доку
ментация очень плохо и не понятно написана. Когда программное обеспечение не
сопровождается четкими инструкциями или объяснениями, трудно понять, как оно
должно работать, что еще больше усложняет поиск и исправление ошибок. Кроме
того, ваше программное обеспечение обычно полагается на внешние библиотеки
или сервисы. И, если там что-то пойдет не так, ошибки в вашем программном
обеспечении могут стать просто чудовищными.
Именно в этом случае вы и можете прибегнуть к помощи искусственного интел
лекта. Например, один из сценариев
-
расшифровка загадочных или длинных со
общений об ошибках. Это может быть, например, сообщение о трассировке стека
-
снимки того, что делала программа, когда все пошло наперекосяк. Кроме того, вы
можете получить подробную информацию о взаимодействии различных фреймвор
ков и библиотек.
В этом случае достаточно скопировать и вставить сообщение об ошибке в промпт и
включить в него что-нибудь простое, например:
Пролтт: Как это понимать?
{сообщение
об ошибке}
Или, предположим, у вас есть код, но в него закралась логическая ошибка. В ре
зультате программа просто не будет делать то, что вы хотите. В этом случае вы
можете скопировать и вставить код в промпт. Затем добавьте следующее:
Промпт: Эта программа должна позволить пользователям загружать фотогра
фии и отображать их в галерее. Однако при ее выполнении фотографии не ото
бражаются. В чем проблема с этим кодом?
Если
CtiatGPT
{code}
обнаружит проблему, в большинстве случаев он может подсказать ее
решение. Если же решения нет, вы можете добавить полученное сообщение от
ChatGPT
в следующий промпт.
Документация
Документация
-
это клей, который не дает всему развалиться. Но, к сожалению,
обычно документация часто отодвигается на второй план. Мы все это видели: рабо
та с кодом без руководства похожа на блуждание в лабиринте. И это очень тяжело,
особенно для новичков или тех, кто пытается разобраться в проблеме.
Отладка, тестирование и развертывание
217
Грамотно составленная документация помогает предотвратить игры в угадайку
Stack Overtlow показало, что 68%
(https://oreil.ly/tWiy4) сталкиваются с этими неприятностями каж
дую неделю. Кроме того, отчет GitHub за 2021 год показал, что обмен информа
цией с помощью документации может повысить продуктивность команд на 55%
(https://oreil.ly/q6Q08).
и держит всех в едином ритме. Исследование
разработчиков
Но дело не только в том, чтобы облегчить жизнь разработчикам. Грамотно состав
ленная документация
это основа бесперебойного процесса разработки. Она по
-
добна карте, которая показывает, куда идти и чего остерегаться. Без нее вы часто
действуете вслепую, и в этом случае случаются ошибки, последствия которых мо
гут быть очень дорогостоящими.
С помощью
ChatGPT
вы можете создавать любые типы документации, например:
♦
руководства пользователя;
♦
файлы
♦
документация по
♦
часто задаваемые вопросы;
♦
руководства по устранению неполадок.
README;
API;
При разработке промптов для создания эффективной документации следует пом
нить о следующих факторах:
♦
Определите свою аудиторию
Думайте о своей аудитории. Новичкам нужны понятные инструкции, которые
помогут быстро начать работу. Технические специалисты, напротив, ожидают
подробной информации
-
например, документации по
Понимание потребностей читателей
-
API
или примеров кода.
ключ к тому, чтобы сделать ваш текст
полезным и уместным для тех, кто его читает.
♦ Будьте проще
Никому не нравится пробираться сквозь жаргон или техническую лексику, для
которой требуется специальный дешифратор. Говорите прямо и по существу.
Если ваш дедушка или бабушка не смогли понять, что вы написали, то вы, ско
рее всего, своей цели не достигли.
♦
Придерживайтесь плана
Ваши
документы
должны
выглядеть
стандартно.
Используйте
одинаковый
стиль, заголовки, шрифты ... в общем, все, что необходимо для оформления до
кумента. Излагайте мысли последовательно, не перескакивая с темы на тему.
Последовательность
-
это как хороший ритм в песне. Такой документ проще
читается и легко воспринимается.
♦
Показывайте, а не просто рассказывайте
Люди быстрее понимают смысл происходящего, когда видят это в действии. По
этому приводите примеры из реальной жизни или описывайте конкретные си
туации. Если вы обращаетесь к программистам, то для них примеры кода
-
это
218
Глава
9
золото. Для других людей будут полезны снимки экрана или пошаговые инст
рукции.
♦ Лучше один раз увидеть, чем сто раз услышать
Иногда с помощью текста очень тяжело передать свою мысль читателю. Ис
пользуйте диаграммы, снимки экрана или даже видео, чтобы донести свою точ
ку зрения, особенно если речь идет о сложных вещах.
♦ Вопрос «зачем» имеет такое же значение, как и вопрос «каким образом»
Не просто описывайте шаги. Расскажите читателям, с какой целью выполняются
те или иные действия.
Учитывая все это, вы можете использовать промпт, подобный следующему:
Промпт: Подскажите, как объяснить концепцию контроля версий в
Git
аудито
рии, не связанной с техникой? Документ должен быть простым и не содержать
технического жаргона. Также объясните важность контроля версий и предложи
те какие-либо визуальные средства или диаграммы.
ChatGPT предоставляет
широкие возможности для перевода с одного языка
на другой. Вы можете использовать эту возможность при разработке доку
ментации или любых других документов.
Компания
Microsoft
разрабатывает систему под названием
GitHub Copilot for Docs,
которая будет находиться в корпоративном доступе. Это не обычный инструмент
для работы с документами. Например, результаты поиска и ответы основаны на
опыте и знаниях программистов. Кроме того, инструмент обновляется с учетом по
следних данных о репозиториях
GitHub.
Здесь даже есть возможность добавлять
конфиденциальную документацию. По сути, это очень сложная база знаний, кото
рая может значительно повысить эффективность вашего кодирования.
Код-ревью
Считайте, что код-ревью (обзор кода)- это своего рода экзамен, который прохо
дит код перед тем, как попасть в основную кодовую базу. На этом этапе важно убе
диться, что все работает корректно, логично связано и не вызовет сбоев.
Но обзор кода
-
это не только поиск багов, конфликтов и технических недочетов.
Это также возможность собраться командой, обменяться идеями и поучиться друг у
друга. Вы увидите разные подходы к решению задач и глубже поймете архитектуру
проекта.
Кроме того, код-ревью помогает следить за соблюдением стиля и внутренних стан
дартов кодирования, а еще обеспечивает дополнительный уровень проверки безо
пасности. Автоматизированные инструменты, какими бы мощными они ни были,
Отладка, тестирование и развертывание
1
219
не всегда способны обнаружить все уязвимости. Именно человеческий взгляд часто
помогает распознать скрытые риски и предотвратить потенциальные угрозы.
Что касается
ChatGPT,
то он может стать ключевой частью этого процесса. Вот
пример промпта:
Промпт: Выполните код-ревью для приведенного ниже фрагмента кода. У дели
те внимание удобству сопровождения кода, потенциальным проблемам безопас
ности и недостаткам производительности.
Я намеренно предложил
Однако
ChatGPT
ChatGPT
{code}
функцию, написанную недостаточно хорошо.
хорошо поработал. Он выявил несколько областей, которые сле
довало бы улучшить. Например, функция могла бы стать лучше, если бы не имела
жестко закодированных соединений с базой данных.
ChatGPT
также обнаружил
возможность SQL-инъекции из-за прямого объединения идентификатора пользова
теля в SQL-зanpoce и отсутствия проверки ввода пользователя. Затем была обнару
жена проблема с производительностью при построении SQL-зanpoca.
Модульные тесты
В некотором смысле, модульные тесты
-
это небольшие тесты для отдельных час
тей вашего кода. Скажем, для нескольких функций или методов. Разработчики час
то сами проводят подобное тестирование, используя такие эффективные инстру
менты, как
JUnit
для
Java, NUnit
для
.NET
или
pytest
для
Python.
Эти инструменты
помогают писать и выполнять тесты, а также сообщают вам о результатах. Обычно
эти инструменты хорошо сочетаются с другими программными средствами, кото
рые вы используете.
Модульное тестирование позволяет усовершенствовать ваш продукт, сокращает
количество досадных ошибок и облегчает последующую доработку и исправление
проблем. Каждый тест нацелен только на одну проблему, поэтому, если что-то
пойдет не так, вы будете точно знать, где искать. Обычно модульные тесты автома
тизированы, что означает, что их можно проводить быстро и часто, что очень важ
но для поддержания работоспособности и актуальности кода.
Модульные тесты обычно просты в написании. Каждый из них охватывает лишь
небольшую часть кода, поэтому такие тесты обычно не бывают слишком сложны
ми. К тому же, они похожи на путеводитель по вашему продукту. Выполнив мо
дульное тестирование, другие разработчики могут узнать, каким образом должны
работать определенные компоненты. Если вы вносите изменения в код, модульные
тесты помогут убедиться, что вы не испортили то, что раньше работало нормально.
Давайте рассмотрим пример. Предположим, что вы создали программу
лятор для расчета чаевых, подобную этой:
def tip_calculator(bill_arnount, tip_percentage):
tip_arnount = bill_arnount * (tip_percentage / 100)
total_amount = bill_amount + tip_arnount
return total arnount
-
кальку
220
Глава
9
bill_amount = float(input("Enter the
amount: "))
Ьill
tip_percentage = float(input("Enter the tip percentage (e.g., 20 for 20%): "))
total amount =
tip_calculator(Ьill_amount,
tip_percentage)
print(f"Total amount including tip: (total_amount:.2fl")
Здесь есть функция, рассчитывающая общую сумму счета, включая чаевые, которая
принимает два параметра, Ьill_amount
цент_ чаевых).
Функция
находит
(сумма_счета) и tip_percentage (про
значение
для
параметра
(об
total_amount
щая_сумма).
Для такого рода кода модульные тесты позволяют проверить поведение функции в
самых разных сценариях. Например, с их помощью можно убедиться, что функция
корректно рассчитывает итоговую сумму с учетом чаевых для широкого диапазона
входных данных. Это особенно важно, поскольку даже незначительная ошибка в
расчетах может привести к существенным отклонениям.
Модульные тесты охватывают не только стандартные случаи
счетов и типичные проценты чаевых,
обычные суммы
-
но и крайние или нетипичные ситуации:
-
нулевые или отрицательные значения, необычно высокие проценты, нечисловые
или пустые данные. Такие проверки помогают убедиться, что функция устойчива и
корректно обрабатывает любые входные данные, даже те, которые выходят за рам
ки привычных сценариев.
Вот пример промпта:
Промпт: Предложите для данного приложения модульные тесты, позволяющие
корректно подсчитать общую сумму, проверить типичные и крайние случаи, та
кие
как
нулевые
и
отрицательные суммы
счетов
и
высокие
значения
чаевых.
Также проверьте недопустимые вводимые данные. Для модульных тестов мож
но использовать консольные журналы.
На рис.
9.1
показан код, созданный
ChatGPT для
проведения модульных тестов.
Если вы хотите использовать фреймворк для тестирования, чтобы обеспечить более
структурированный
и
комплексный
подход,
вы
можете
попросить
об
этом
ChatGPT:
Промпт: Создайте модульные тесты, использующие фреймворк для тестирования.
ChatGPT
предлагает использовать модульный тест. В сообщении от
ChatGPT показа
но, как этот инструмент настроить, разработать тесты и запустить их на выполнение.
Или, если у вас уже есть файл с модульными тестами, вы можете проанализировать
их. Вот промпт:
Промпт: Ниже приведен файл с модульными тестами для программы, которая
<объясните, что она делает, или укажите на код>. Какие еще тесты нужно доба
вить? Каких компонентов здесь не хватает?
Хотя
ChatGPT
и другие инструменты на основе ИИ могут быть полезны при созда
нии модульных тестов, полагаться на них полностью не стоит. В простых случаях
они действительно помогают сэкономить время, но при работе со сложной логикой
Отладка, тестирование и развертывание
221
или крупными кодовыми базами такие инструменты могут давать неточные или
искаженные результаты.
Рис.
9.1. ChatGPT
создал код для тестирования программы расчета чаевых
с помощью модульных тестов
Прислушайтесь к следующему совету Дэвида Ли
инженера и сертифицированного архитектора
(David Lee),
решений А WS:
основателя, старшего
Если же речь идет о тестах, которые реально взаимодействуют с базами данных
и
Docker,
то динамика существенно меняется. Возникает новый уровень слож-
222
Глава
9
ности, который
ChatGPT 4.0
может быть не в состоянии понять. И вам, вполне
возможно, придется сначала написать несколько тестов вручную, особенно ту
часть, которая касается подключения к базе данных, чтобы
ChatGPT
мог нау
читься писать другие тесты.
Запрось~ на извлечение
Запрос на извлечение
(pull request
или сокращенно
PR) -
это своего рода «золотой
билет» в командной разработке. После того как вы завершили работу над фрагмен
том кода, вы размещаете его в системе контроля версий- например, на
или
GitLab -
Однако
PR -
GitHub
и отправляете запрос на извлечение.
это не просто вежливая просьба «добавьте мой код». Это приглаше
ние команде просмотреть изменения, обсудить их, оставить замечания и внести
предложения по улучшению. Такая проверка помогает убедиться, что ваш код не
только работает как задумано, но и безопасно интегрируется в остальную часть
проекта.
Кроме того,
PR- это
отличный инструмент для отслеживания истории изменений:
кто, когда и зачем внес определенные правки. В больших проектах такая прозрач
ность особенно ценна.
Несомненно, написание грамотного комментария к запросу на извлечение действи
тельно играет важную роль. Вы должны изложить, где, что и по какой причине и
каким образом вы изменили. Начните с краткого описания решаемой задачи. Затем
перейдите к тому, каким образом в решении данной задачи помогут внесенные ва
ми изменения. Не забудьте добавить такие детали, как список обновленных файлов
или тесты, которые вы проводили. Если вы в чем-то не уверены или нуждаетесь в
консультации, упомяните и об этом.
Хорошо составленный комментарий к запросу на извлечение
-
это спасение для
ваших рецензентов. Этот комментарий ускоряет весь процесс и держит всех веди
ном русле. Более того, подробные комментарии к запросу на извлечение
-
это как
золотой запас информации на будущее.
В этом процессе
ChatGPT
также может стать вашим помощником. Вам нужно на
бросать черновик? Расскажите
ChatGPT,
что вы сделали, и он поможет вам струк
турировать ваш документ в нечто ясное и понятное. Если вы уже составили описа
ние,
ChatGPT проверит его на точность и грамматику и предложит, как сделать его
ChatGPT также поможет вам определить, как лучше изложить коммен
еще лучше.
тарий к запросу на извлечение. Например, начать с резюме, а затем перейти к дета
лям. А если есть технические детали, которые нужно упростить,
ChatGPT
поможет
сделать комментарий более понятным для всех членов вашей команды.
Давайте рассмотрим несколько полезных промптов:
Промпт: Я добавил в приложение новую функцию поиска, которая фильтрует
результаты на основе пользовательского ввода. Помогите мне написать коммен
тарий к запросу на извлечение для этой функции.
Отладка, тестирование и развертывание
223
Промпт: Я исправил ошибку, из-за которой приложение давало сбой, когда
пользователь вводил специальные символы в текстовое поле. Как я должен опи
сать это в комментарии?
Промпт: Я провел рефакторинг модуля аутентификации, чтобы улучшить про
изводительность и читабельность. Что мне следует включить в комментарий к
запросу на извлечение?
Промпт: Я обновил пользовательский интерфейс, чтобы сделать навигацию бо
лее интуитивно понятной, и добавил новые значки. Помогите мне составить
комментарий к запросу на извлечение.
Промпт: Как лучше рассказать о внесенных изменениях в комментарии к запро
су на извлечение?
Промпт: Я добавил новые модульные тесты для модуля обработки платежей.
Помогите мне составить комментарий к запросу на извлечение, в котором будут
отражены эти изменения.
Промпт: Я разрешил конфликты слияния, возникшие из-за недавних изменений
в основной ветке. Что я должен упомянуть в комментарии к запросу на извлече
ние по этому поводу?
Не забывайте, что
Microsoft
добавила в
Copilot
функцию, позволяющую создавать
комментарии к запросу на извлечение. Эта функция называется
Message.
чение к репозиторию на
GitHub.
Затем вам нужно будет нажать кнопку
(сияние), что показано на левой панели на рис.
8 03 • C.llingAP\JpynЬ М
Updo"'
Generated Commit
Чтобы воспользоваться ею, вам нужно убедиться, что у вас есть подклю
е
G<nerot=AI fo, · Develop,rs
~.
the prompl in the
sparkle
9.2.
>8
0 3 • O ll1ngAPl. ipynlJ
>
"4 Qlling
the ~ n A I АР\ ) ♦
os.en\lironrOP{NAJ . APl_l(EY"] =
"
+~+-···
АР\ со1
,., ChangeS
8 03 call1ngAPI ,руnЬ
1 C"'"pletion Request
•
Get,..
м
import openai
import os
Рис.9.2.
Copilot может создавать
комментарии к запросу на извлечение
на основе репозитория, загруженного в ваш проект
После этого
Copilot составит грамотный
комментарий к
PR.
В заключение отметим, что существует множество стартапов, которые создают
свои собственные системы на основе технологий большой языковой модели. Один
из таких стартапов называется
What The Diff.
ного директора компании Себастьяна Шляйна
У
What The Diff есть
По словам соучредителя и генераль
(Sebastian Schlein):
две основные особенности:
1)
упрощение рассмотрения за
просов на извлечение за счет их краткого изложения на простом английском
языке и предоставления рецензентам понятных обзоров изменений в запросе на
224
Глава
извлечение;
9
2) WTD
также может составлять суммаризации, которые не содер
жат технической информации и отправляются другим заинтересованным лицам,
например менеджерам по продукту, у которых нет доступа к
GitHub. Так
PR их спецификациям.
дет проще понять, соответствуют ли изменения в
им бу
Развертывание
Вы упорно работали над своим продуктом, и вот настал момент запуска. Это вол
нующий момент. Вы собираетесь услышать мнение реальных людей, использую
щих ваше программное обеспечение. И эти люди расскажут вам о том, что дейст
вительно хорошо, а что можно было бы подправить или даже улучшить. Такая
обратная связь бесценна для разработчика.
Если вы занимаетесь продажей своего продукта, то это тот самый момент, которого
вы так долго ждали. После развертывания к вам начнут поступать деньги. Удачный
запуск может стать настоящим переломным моментом для вашего банковского счета.
Но давайте будем реалистами: в процессе развертывания программного обеспече
ния надо затаить дыхание и надеяться на лучшее. Всегда присутствует подлое чув
ство, что что-то может пойти не так, как планировалось.
Это та ситуация, когда в тестовом режиме все работает идеально, а в реальном ми
ре все идет наперекосяк. Причиной тому может быть разное оборудование, нестан
дартные сетевые системы или просто странные настройки, которые все портят.
Безопасность тоже имеет большое значение. Как только вы начнете работать, вы
должны быть начеку, чтобы не допустить проникновения плохих парней и соблю
сти правила конфиденциальности.
Кроме того, ваше ПО должно быть достаточно надежным, чтобы справиться с
множеством людей. Приложение должно работать быстро и без сбоев, независимо
от того, сколько людей в нем работает и насколько крупным становится ваш бизнес.
А еще есть такая технология, как CI/CD 1. Речь идет о том, чтобы сделать разверты
вание бесперебойным и автоматическим, чтобы избежать ошибок. Звучит здорово,
но запуск и поддержание этого процесса
-
Что же делать? Вы можете обратиться к
дело хлопотное.
ChatGPT.
Ниже приведены лишь некото
рые из промптов, которые предлагается рассмотреть:
Промпт: Помогите мне составить контрольный список развертывания, которо
му будет следовать моя команда.
Промпт: Подскажите хорошие учебные ресурсы для начала работы с
Docker
в
целях развертывания.
1
CVCD (Continuous Integration, Continuous Delivery- непрерывная интеграция и доставка)
это технология автоматизации тестирования и доставки новых модулей разрабатываемого
проекта заинтересованным сторонам.
-
Пер.
Отладка, тестирование и развертывание
1
225
Промпт: Предоставьте передовой опыт для развертывания веб-приложения с
нулевым временем простоя.
Промпт: Во время развертывания я сталкиваюсь с ошибкой «таймаут сервера».
Каковы общие причины и решения этой проблемы?
Промпт: Помогите мне написать сценарий на
вания моего веб-приложения на
bash
для автоматизации разверты
Python.
Промпт: Какие основные параметры конфигурации следует проверить перед
развертыванием приложения в производственной среде?
Промпт: Как спланировать стратегию отката при неудачном развертывании в
облачной среде?
Промпт: Какие меры безопасности следует учитывать при развертывании фи
нансового приложения?
Промпт: Как оптимизировать производительность развернутого приложения
Node.js?
ChatGPT и не является совершенством, он может быть полезен для сложных
DevOps. Вот несколько мыслей Титуса Капилнеана (Тitus Capilnean), соучредителя
и главного директора по продуктам Private Market Labs:
Хотя
Облачные журналы
-
не самая простая вещь для работы, особенно, если учесть,
что я не инженер-конструктор. Но нам приходится работать с этими журналами,
поскольку мы регулярно запускаем процессы на А WS и
Google Cloud.
Однажды мне нужно было настроить отслеживание для процесса
SQS + Lambda
на основе результатов развертывания крупномасштабной функции. Моя функ
ция, по сути, выводила статус в журналы, и я планировал использовать этот ста
тус для создания отчета об этом процессе. В нашем случае
выполнения операций. Я попросил
CloudWatch
ChatGPT
-
об эффективности
предоставить скрипт запроса А WS
и так настроил его, что для получения результатов мог просто за
пускать его в конце каждого процесса. Подробное чтение документации для ре
шения этой задачи заняло бы, вероятно,
времени, воспользовавшись услугами
5-6
GPT.
часов, поэтому я сэкономил кучу
Подобным образом мне нужно было настроить некоторые оповещения в Google
И я работал с ChatGPT, создавая промпт, с помощью которого исключа
Cloud.
лись некоторые ошибки системного уровня, за которые мы фактически не отве
чали, и которые не были связаны с пользователями.
ChatGPT
сэкономил мне
много времени, которое я бы потратил на чтение и работу. В результате я полу
чил пользовательские метрики, необходимые для создания эффективной систе
мы оповещений для нашей команды.
Обратная связь с пользователями
Обратная связь с пользователями
-
это ключ к тому, чтобы ваш продукт стал по
пулярным. Когда пользователи видят, что вы прислушиваетесь к их мнению и вно
сите изменения, они с большей вероятностью останутся с вами, и будут довольны.
Глава
226
9
Разумнее с помощью обратной связи устранить все недочеты на ранней стадии, чем
потом пытаться навести порядок тогда, когда вашим приложением будет пользо
ваться большое количество (все более недовольных) людей.
Несмотря на проведенное тестирование, некоторые ошибки подкрадываются неза
метно и проявляют себя только тогда, когда ваше программное обеспечение попа
дает в реальный мир. Ваши пользователи
-
это как ваши детективы, обнаружи
вающие те ошибки, которые могли бы проскользнуть мимо вас.
Иногда пользователи проявляют настоящую изобретательность, используя ваше
ПО так, как вам и не снилось. Их дикие идеи могут послужить толчком к созданию
новых функций или даже совершенно новых продуктов.
Конечно, существует целый набор инструментов для повышения качества обслу
живания
Salesforce.
клиентов.
Вот лишь
некоторые
из
них:
Zendesk, Freshdesk, Drift
и
Они удобны во всех отношениях: от живого чата, позволяющего об
щаться с клиентами в режиме реального времени, до форм обратной связи, соби
рающих информацию о том, что думают ваши пользователи. Автоматизированные
системы обработки заявок отслеживают проблемы клиентов, чтобы ничего не
упустить. Не стоит забывать и о системах управления взаимоотношениями с клиен
тами (СRМ), которые хранят все данные о взаимодействии с клиентами в одном
месте. Эти инструменты могут реально изменить ситуацию в плане обеспечения
эффективного и оперативного обслуживания клиентов.
Генеративный искусственный интеллект, безусловно, может стать отличным до
полнением ко всему этому. Он особенно хорош при обработке больших объемов
неструктурированных данных, таких как отзывы пользователей.
Например, предположим, что у вас есть файл, содержащий множество электронных
писем, сообщений и информация из контактных форм пользователей. Тогда вы мо
жете зайти в
ChatGPT и
воспользоваться этим промптом:
Промпт: Определите общие темы и категории, такие как удобство использова
ния, производительность, функции, ошибки и обслуживание клиентов. Кроме
того, на основе этого файла проведите анализ настроений. Основываясь на час
тоте и степени важности упомянутых проблем, помогите определить приорите
ты в том, какие ошибки следует исправить в первую очередь или какие функции
следует добавить. В отчете должны быть графики.
Еще один способ, при помощи которого
ChatGPT
ответов. Если вы работаете с отзывами клиентов,
может помочь
ChatGPT
-
это составление
может помочь вам напи
сать более качественные ответы. Например, создать шаблоны для ответов на наи
более частые вопросы. Таким образом, общаясь с пользователями или клиентами,
вы всегда остаетесь на высоте и сохраняете профессионализм.
Или же вы можете использовать
ChatGPT
для составления персональных ответов.
Для этого следует скопировать полученное по электронной почте сообщение от
пользователя и вставить его в промпт, подобный этому:
Промпт: Напишите ответ на письмо пользователя, сохраняя спокойный и пони
мающий тон. Убедитесь, что ответ дружелюбен и помогает снять беспокойство,
не обостряя ситуацию.
{email}
Отладка, тестирование и развертывание
227
В некоторых случаях вы, воспользовавшись возможностями большой языковой мо
дели, можете создать собственное приложение для обработки отзывов пользовате
лей. Именно так поступила компания
На создание приложения компания по
Warp.
тратила меньше недели. Приложение было создано с использованием
«Приложение сильно улучшило ситуацию,
менеджер по продуктам в
Warp. -
-
говорит Ноа Цвебен
API OpenAI.
(Noah Zweben),
Раньше было сложно классифицировать и опре
делять приоритеты поступающих отзывов. Но генеративный ИИ выполнил эту за
дачу очень хорошо».
Запуск
За несколько лет до того, как
ChatGPT
получил широкое распространение, генера
тивный ИИ уже оказывал влияние на такие важные виды деятельности, как прода
жи и маркетинг. Первопроходцем стала компания
Jasper.
Компания развивалась
ошеломляющими темпами. И опять же, генеративный искусственный интеллект
идеально подходит для быстрого создания запоминающегося и оригинального кон
тента.
Но вам для запуска вашей программы
Jasper не
нужен.
ChatGPT
подойдет как нельзя
лучше. Прежде всего, с его помощью вы сможете составить невероятно успешный
план по продвижению своего продукта. Вот примерный промпт:
Промпт: Создано приложение, помогающее людям планировать здоровое пита
ние. Это приложение составляет индивидуальные планы питания на основе дие
тических предпочтений, целей и потребностей в питании. Приложение также
может составлять списки покупок, предлагать рецепты и отслеживать количест
во потребляемых продуктов. Составьте для этого приложения маркетинговый
план. Компания является стартапом на ранней стадии развития и не располагает
большими ресурсами для финансирования рекламной кампании.
Сначала
ChatGPT
предлагает определить целевую аудиторию. Предполагается,
что основными пользователями могут быть: люди, следящие за здоровьем, энту
зиасты фитнеса, те, кто придерживается особых диет (например, безглютеновой
или веганской), а также занятые профессионалы и другие категории. Затем в от
вете описываются различные стратегии продвижения приложения. Среди них
-
использование социальных сетей, контент-маркетинг, работа с сообществами,
еmаil-рассылки и партнерские программы.
Вот некоторые другие полезные промпт
ChatGPT:
Промпт: Напишите захватывающее вступление для статьи в благе, объявляю
щей о запуске нового приложения для планирования здорового питания и рас
сказывающей об уникальных возможностях и преимуществах этого приложения.
Промпт: Составьте серию постов в социальных сетях для анонса нашего нового
приложения для планирования здорового питания, акцентируя внимание на его
удобном интерфейсе и на том, как оно помогает в достижении целей в области
здоровья.
228
Глава
9
Промпт: Составьте электронное письмо с анонсом нового приложения для пла
нирования
здорового
питания,
подчеркнув
его
способность
отслеживать
и
улучшать состояние здоровья пользователей.
Промпт: Создайте привлекательное рекламное письмо для инструкторов трена
жерного зала и тренеров по здоровому образу жизни, рекламируя наше прило
жение для планирования здорового питания как инструмент для их клиентов.
Промпт: Составьте список запоминающихся и подходящих названий для нового
приложения для планирования здорового питания, которое передаст ощущение
хорошего самочувствия и организованности.
Промпт:
Разработайте
реклам,-.~ую
копию
для
размещения
объявлений
в
Facebook и Instagram2, рекламирующих наше приложение для планирования здо
рового питания, подчеркивая простоту его использования и возможности инди
видуальных настроек.
Промпт: Разработайте шаблон для получения отзывов от первых пользователей
нашего приложения для планирования здорового питания, чтобы использовать
эти отзывы в рекламных материалах.
Промпт: Разработайте приглашение на виртуальное мероприятие по запуску
нашего приложения для планирования здорового питания с подробным описа
нием программы и специальных гостей.
Заключение
Эта глава
-
как взгляд изнутри на те этапы разработки программного обеспечения,
на которые не всегда обращают внимание. Конечно, создание нового приложе
ния
-
это увлекательное занятие. Но именно такие менее привлекательные задачи,
как отладка, тестирование и документирование, действительно способны сделать
ваше приложение успешным или превратить его в малоэффективное приложение.
Мы уже рассказывали о том, как инструменты искусственного интеллекта, такие
как
ChatGPT,
могут значительно облегчить эту работу. Конечно, эти инструменты
не помощники с волшебной палочкой в руках. Но они прекрасно справляются с об
работкой многих тонн данных, дают советы, подготавливают содержание, выявля
ют проблемы и ускоряют весь процесс разработки. Это означает, что разработчики
могут сосредоточиться на действительно сложных вещах. Используя искусствен
ный интеллект и эффективные стратегии на каждом этапе, от устранения ошибок
до запуска, разработчики смогут гораздо быстрее создать более совершенное про
граммное обеспечение, которое действительно понравится пользователям.
2
Instagram является запрещённой социальной сетью на территории РФ.
ГЛАВА
1О
Выводы
В этой главе я кратко изложу основные идеи, которые я хотел бы, чтобы
вы почерпнули из данной книги.
Интенсивный процесс обучения
Программирование с помощью ИИ, хотя и является интересным этапом развития
компьютерных технологий, требует значительных усилий при обучении. Это может
оказаться сложной задачей даже для самых опытных разработчиков. Сложность
усугубляется быстрыми темпами развития технологической индустрии, в которой
постоянно внедряются инновации и новые разработки. И уследить за всеми этими
изменениями может оказаться сложной задачей. Это сродни попытке пешком дог
нать стремительно несущийся поезд.
При обучении основная сложность заключается в адаптации к особенностям рабо
ты с большими языковыми моделями, которые гораздо сложнее и менее предска
зуемы, чем традиционные методы программирования. Разработчики, привыкшие к
классическому подходу, мыслят линейно: написанный код ведет себя ожидаемо и,
как правило, работает именно так, как задумано. Искусственный интеллект, напро
тив, полон неожиданностей. Код, сгенерированный моделью, может не только уди
вить, но и вдохновить, хотя его поведение далеко не всегда поддается интуитивно
му объяснению.
Такой способ взаимодействия требует от программиста нового типа мышления.
Необходимо научиться предугадывать и осмыслять неожиданные, порой парадок
сальные результаты, которые выдает ИИ. Этот отход от привычных прямолиней
ных и логичных процессов поначалу может быть некомфортным.
Основные преимущества
В традиционном процессе программирования, столкнувшись с проблемой, разра
ботчику нередко приходится откладывать работу и отправляться на поиски реше
ния
-
перерывать
Stack Overflow,
читать документацию или гуглить возможные
Глава
230
10
ответы. Инструменты на основе искусственного интеллекта меняют этот подход.
Они работают как надежные напарники, которые вовремя подают «спасательный
круг»: подсказывают решения, исправляют ошибки прямо во время набора кода и
избавляют от необходимости метаться между десятками вкладок. Благодаря этому
вы можете оставаться в рабочем потоке и не терять концентрацию.
Некоторые инструменты достаточно умны, чтобы понять ваш стиль кодирования
и имена, которые вы используете для переменных, функций и методов. Они вос
принимают весь ваш код. Поэтому, когда такие инструменты дают рекомендации,
это не просто случайный совет. Их рекомендации учитывают особенности вашего
проекта.
Теперь давайте поговорим о самом главном преимуществе: избавлении вас от ру
тины. Да, это те самые старые рутинные задачи, которые вызывают у вас желание
поспать: работа с файлами, управление данными, вызовы
API,
пользовательский
интерфейс, регулярные выражения, стартовый код, эти удручающие команды
возня с
GitHub Actions -
bash,
вот лишь некоторые из таких задач. И в этом случае ИИ
вам говорит: «Не волнуйтесь, я разберусь»,
и просто подготавливает код за вас.
-
Этим дело не ограничивается. ИИ также способен полностью разобраться в вашем
коде. Например, он может автоматически оформить документацию на весь код.
Вместо того чтобы ночью напрягаться, сочиняя пояснения к коду, вы можете пору
чить эту задачу искусственному интеллекту
-
он изложит все простым и
понят
ным языком. Это особенно полезно, когда в проекте участвуют новички или вам
самому нужно разобраться в старом коде. Искусственный интеллект все объяснит.
Но есть и недостатки
Программирование с помощью ИИ дает множество преимуществ, но не обходится
и без подводных камней. Один из главных вопросов
-
это право собственности на
код, сгенерированный такими инструментами. Поскольку модели обучаются на ог
ромных массивах данных, включая фрагменты кода из различных источников;
часть этого материала может быть защищена авторским правом. Что будет, если
ИИ создает нечто слишком похожее на уже существующее
-
не нарушает ли он
чьи-то права? А если с его помощью вы создаете действительно ценное решение
-
кто в итоге имеет на него права и получает прибыль? Юридические аспекты здесь
остаются не до конца определенными, и, скорее всего, потребуется время, чтобы
сформировался устойчивый правовой и этический баланс.
Безопасность
-
это еще один момент, на который следует обратить внимание.
Оказывается, иногда в коде, который создается с помощью искусственного интел
лекта, могут быть бреши в безопасности. Поскольку мы не можем заглянуть в то,
как большая языковая модель работает, это практически загадочный «ящик», не
возможно быть уверенным полностью в том коде, который вы от нее получаете.
Это означает, что нельзя просто взять полученный фрагмент кода и сразу начать
Выводы
231
работать с ним. Вам придется подвергнуть его испытаниям и проверкам, прежде
чем вы сможете его использовать.
Кроме того, существуют потенциальные проблемы с конфиденциальностью. Инст
рументы на основе ИИ могут случайно получить информацию из частных репози
ториев кода или закрытых данных, если эти хранилища данных должным образом
не защищены и не контролируются.
Более того, данные, которые разработчик вводит в эти модели, могут содержать
личную информацию.
Задача состоит в том, чтобы обучение и использование ИИ-помощников для про
граммирования происходили с соблюдением принципов конфиденциальности и
защиты личных данных. Для этого необходимо внедрять надежные политики обра
ботки информации, соблюдать стандарты безопасности и обеспечивать соответст
вие требованиям законодательства
-
таким как, например,
GDPR.
Не стоит забывать и о том, что иногда ИИ может просто ошибаться. Код может
быть несовершенен или многословен. Это связано с таким фактором, как разное
качество исходных обучающих данных. Кроме того, существует непредсказуемость
и сложность большой языковой модели. Вы никогда не знаете, что получите.
Оперативное проектирование
-
это не только искусство, но и наука
Научиться технике написания промптов далеко не просто. Это целое искусство,
поскольку вам нужно уметь подбирать такие слова, чтобы руководить работой ис
кусственного интеллекта. Для этого нужно творчески подойти к процессу написа
ния промптов или разработке сценария.
Но разработка промптов
-
это тоже наука. Вы должны знать, как работают модели
искусственного интеллекта. Вы стараетесь все точнее и точнее угадать, как ИИ бу
дет реагировать на ваши запросы. Как детектив, вы проводите эксперименты, про
веряете, что получается, и корректируете свои запросы, чтобы получить нужные
вам ответы.
Благо, есть некоторые правила, которые могут в этом помочь. Например, длина за
проса имеет ключевое значение. Если запрос будет слишком длинным, искусствен
ный интеллект может запутаться или не понять самой сути. Также необходимо
быть конкретным. «Запрос должен быть четким и целенаправленным,
Анкит Анклиа
(Ankit Anchlia),
опытный инженер-программист.
-
-
говорит
Смысл запроса
должен быть понятным и однозначным. В противном случае вы, скорее всего, не
получите желаемого результата».
232
Глава
10
За гранью программирования
Инструменты для программирования на основе ИИ
-
это не только кодирование.
У них есть множество различных возможностей. В этой книге мы увидели, что они
подобны швейцарским армейским ножам для решения самых разных задач
-
от
мозгового штурма и планирования до изучения рынка и фиксации того, что вам
нужно для проекта. Например, представьте, как быстро можно написать перво
классные документы с требованиями к продукту и спецификации требований к
программному обеспечению. Искусственный интеллект может помочь вам в реше
нии этих задач, и даже сделать это лучше вас.
А когда вы будете готовы выпустить свой продукт, угадайте что произойдет? Ис
кусственный интеллект поможет и в этом. Это все равно, что иметь личного спе
циалиста по маркетингу. Вы можете использовать ИИ-помощники для разработки
рекламной кампании, которая позgолит привлечь внимание к вашему продукту. Вы
также можете использовать их для анализа отзывов пользователей, чтобы сделать
свое приложение более совершенным.
Искусственный интеллект не заменит вас на работе
Конечно, есть опасения, что ИИ стремительно ворвется в наш мир и украдет у всех
работу. Мир движется к сценарию «Скайнет», где машины захватят власть, верно?
И все те усилия, которые вы потратили на изучение кода, окажутся напрасными?
Ну, не совсем. Дело вот в чем: ИИ-помощники очень мощные, умные, но они не
заменят вас. Они помогут вам стать еще лучшим программистом. У них нет ни ума,
ни свободы настоящего разработчика.
Но вам не следует расслабляться: если вы не станете использовать искусственный
интеллект, вы можете отстать от других. Работодатели все чаще ожидают, что их
разработчики смогут работать с системами ИИ. Почему? Потому что преимущества
этих инструментов значительны, чтобы их упускать. Мы все должны идти в ногу со
временем.
Использование ИИ-помощников
становится
обязательным
навыком.
И не потому, что они не смогут заменить вас (конечно, они этого сделать не смо
гут), а потому, что они помогут вам выполнять свою работу лучше.
Вот мнение Джеймса Клифта
(James Clift),
основателя и генерального директора
компании DuraЫe:
«Достижения в области искусственного интеллекта приведут к изменениям в
структуре рынка труда. Но важно помнить, что искусственный интеллект и
человек вместе работают более эффективно. И искусственный интеллект не за
менит собой человека. Главное
-
не бояться, а принять технологию, чтобы под
держать дальнейший рост бизнеса и создание новых рабочих мест. Искусствен
ный интеллект предоставляет в распоряжение всех желающих те возможности,
которые раньше могли
использовать только крупные компании».
Выводы
233
Заключение
В этой книге мы проделали огромную работу, погрузившись во все тонкости про
граммирования с помощью искусственного интеллекта. Но, несмотря на все это, мы
коснулись только самых основ! Мы находимся в самом начале пути применения
ИИ. И самое интересное в том, что дальше будет только лучше. Технология разви
вается с бешеной скоростью, а это значит, что у разработчиков появится еще боль
ше удивительных инструментов и возможностей. Мы находимся на старте действи
тельно захватывающей гонки, и возможностей становится всё больше.
Это очень интересное время для тех, кто работает в этой сфере. Только представь
те, сколько появляется новых способов отточить свои навыки, оптимизировать ра
боту и создать то, о чем мы раньше даже и не мечтали. Будущее программирования
с помощью ИИ светло и полно перспектив, так что давайте смотреть в оба и быть
готовыми принять все удивительные достижения, которые появятся на нашем пути.
Давайте поймаем волну инноваций в сфере искусственного интеллекта и посмот
рим, куда она приведет нас, как разработчиков.
Предметный указатель
Codex, 91
Cody, 123
Copilot, 46
А
AlphaCode, 132
Amazon CodeWhisperer, 113
AskYourDatabase, 153
Astra DB, 111
Duet AI, 115
Е
Elastic, 116
голосовая система,
о
мобильное приложение,
◊
навигация,
◊
пользовательские запросы,
◊
просмотр с ПОМОЩЬЮ
◊
чатбот,
140
140
G
137
Gemini, 156, 158
141
Bing, 141
◊
22
команды
bash, 150
ChatGPT
Плагины,
151
ChatGPT
анализ конкурентоспособности,
ChatGPT
освоение нового языка
программирования,
191
ChatGPT
изучение нового,
192
ChatGPT
◊
продвижение программного
обеспечения,227
Codecademy, 152
CodeGPT, 122
Codespaces, 98
CodeT5, 132
CodeWP, 124
программирование,
159
GitHub Actions, 150
GitHub CLI, 109
GitHub Copilot, 91
ChatGPT
◊
97
D
◊
◊
92
СRМ,226
ChatGPT
◊ Codecademy, 152
о README, 148
ChatGPT, 135
о
Включение,
CSS, 209
Cursor, 129
с
◊
Версии,
◊
Copilot Chat, 102
Copilot CLI, 109
в
BERT, 54
Bito, 127
◊
◊
172
◊
автозаполнение кода,
◊
Установка расширения
GitHub Copilot Chat, 103
GPT, 54
◊ создание, 154
GPT-4, 22, 136
н
HashiCorp, 116
HDL, 94
м
MongoDB, 116
N
Neo4j, 116
Ninja Code, 198
196
VS Code, 98
Предметный указатель
StaЫeCode,
история компании,
131
SystemVerilog, 94
136
OpenAI Playground, 56
т
р
Tabnine, 117
PolyCoder, 132
V
R
Vercel v0, 211
Verilog, 94
README, 148
RecomЬinant AI, 154
Regex, 146
Regex шаблон, 146
Replit, 118
w
Warp, 126
г
А
Абстракция в программировании,
Автозаполнение кода,
20
интеллекта,
◊
86
86
54
д
Данные,
Базы данных,
206
Безопасность,36,85
сканирование,
114
◊
GPT-4, 136
оценка, 60
◊
прозрачность,
206
◊
многомерные,
◊
немаркированные,
Дискриминатор,
Библиотека,205
50
50
51
Документация,30,216
Большая языковая модель,
56
3
Запрос на извлечение,
◊
61
проприетарная, 65
рекомендации, 75
◊
с открытым исходным кодом,
◊
трансформер,
Генератор,51
170
Б
о
Gemini, 156
Генеративный предварительно обученный
Анализ рынка программного обеспече
◊
50
Генеративный искусственный интеллект
Агенты искусственного интеллекта,
ния,
34
84
Генеративные состязательные сети,
86
Автономный агент
процесс,
Галлюцинации,
Галлюцинация,
196
Автономные агенты искусственного
◊
222
Злоупотребление данными,
63
38
и
Индекс прозрачности базовой модели,
в
Инструменты программирования,
Вариационные автоэнкодеры,
50
Ввод содержимого
◊
235 .
s
о
OpenAI, 136
◊
1
специальные символы,
Высокоуровневые языки
программирования,
20
77
Интеллектуальная собственность,
Интеллектуальное дополнение кода,
Искусственный интеллект
◊
агенты,
◊
история создания,
86
49
60
46
35
44
Предметный указатель
236
◊
конституциональный,
◊
общего назначения,
Исследование рынка,
161
136
Непрерывная интеграция и развертыва
ние,
167
о
История развития языков
программирования,
20
Обзор кода,
История создания искусственного
интеллекта,
218
Обратная связь с пользователями,
49
Обучение без примеров,
Общий адресный рынок,
Классификация текста,
Ключевое слово,
225
80
Обучение в несколько шагов,
к
80
171
Объектно-ориентированное
74
81
программирование,
Код
21, 204
Оперативное проектирование,
◊
интеллектуальное дополнение,
◊
целостность,
44
◊
проблемы,
Отладка,
29
69
70
215
Оценка больших языковых моделей,
Кодирование
◊
150
позиционное,
Оценка общего адресного рынка,
53
60
171
Команды
bash, 150
193
Компилятор, 45
п
Комментарии,
Конституциональный искусственный
интеллект,
161
Конфиденциальность,
36, 85
149
л
55
Локализация,
75
м
Мертвый код,
◊
82
о
внимания многоголовый,
◊
53
◊
Механизм
◊
внимания,
◊
самовнимания,
◊
51
◊
53
Многоголовый механизм внимания,
Многомерные данные,
50
трансформера,
◊
◊
51
Модульное программирование,
194
219
◊
◊
AlphaCode, 132
Amazon CodeWhisperer, 113
Bito, 127
CodeT5, 132
CodeWP, 124
Cody, 123
Cursor, 129
Duet AI, 115
Gemini, 158
PolyCoder, 132
Replit, 118
StaЫeCode, 131
Tabnine, 117
Warp, 126
Программирование
н
Наводящие вопросы,
53
◊
о
Модели
Модульный тест,
AskYourDatabase, 153
RecomЬinant AI, 154
Плагин Codecademy, 152
Плагины ChatGPT, 151
План тестирования, 183
Платформа OpenAI Playground, 56
Позиционное кодирование, 53
Предвзятость, 38
◊
◊
Механизм
◊
◊
о
199
Методика промптов по цепочке
◊
54
Приложение
201
Метод извлечения,
размышлений,
Песочница,
Плагин
Кросс-браузерная совместимость,
Лексема,
Переименование,200
83
Начало работы над проектом,
Немаркированные данные,
50
195
◊
GPT-4, 22
◊
высокоуровневые языки,
◊
история развития языков,
20
20
◊
объектно-ориентированное,
◊
процедурное,
20
21, 204
Предметный указатель
◊
◊
с помощью искусственного
Специальные символы,
интеллекта,22
Спецификация требований
язык сценариев,
21
ния,
227
начало работы,
195
Проектирование веб-сайта,
185
185
Тематическое моделирование,
Технические требования,
71
Безопасность,
Токен,
◊
инструкция,
Токенизация,
◊
конфиденциальность,
◊
на примеры и аналогии,
85
72
55
Точка останова,
85
83
наводящие вопросы,
Транспайлер,31
опыт составления,
Трансформер,
о
по цепочке
83
79
мыслей, 82
Процедурное программирование,
◊
двунаправленные кодирующие
обученный,
54
224
Разделение условий,
у
200
Разработка веб-дизайна,
Разработка веб-сайта,
185
185
Уровни искусственного интеллекта,
Разработка через тестирование,
Регулярные выражения,
183
146
Рекомендации большой языковой
модели,
Уязвимость,
51
Рефакторинг,
198
Ninja Code, 198
мертвый код, 201
ф
README, 148
77
Фреймворк, 205
Фронтенд, 208
Функции, 202
Формат вывода,
метод извлечения,
199
200
разделение условий, 200
переименование,
с
ц
Целостность кода,
29
ч
Сеть
Рекуррентная нейронная,
Система отслеживания
51
ссьшок, 114
Система управления взаимоотношениями
с клиентами,
Создание
GPT, 154
Создание веб-сайтов,
211
21 О
Составление промптов, 79
Спагетти-код, 31
Чатбот
ChatGPT, 22
ш
Шаблон
226
Сканирование безопасности,
114
regex, 146
э
Эволюция языков программирования,
Создание графики,
Специальные символы
◊
47
36
Файл
75
Рекуррентная нейронная сеть,
◊
генеративный предварительно
представления,54
Развертывание,
о
51
◊
20
р
◊
216
31
Транслятор кода,
◊
◊
74
174
55
◊
◊
14 7
180
◊
◊
176
т
Проектирование веб-дизайна,
Промпт,
Стартовый код,
Стиль,
Проект
о
77
к программному обеспечению,
Продвижение программного обеспече
237
1
###, 77
я
Язык разметки
CSS, 209
21
Язык сценариев,
20
06 авторе
Том Таулли
(Tom Taulli (@ttaulli)) -
числе
венчурного стартапа в области генеративного искусственного интел
Aisera,
консультант нескольких компаний, в том
лекта. Он является автором нескольких книг, таких как «Основы искусственного
интеллекта» (https://Ьhv.ru/product/osnovy-iskusstvennogo-intellekta-netehnicheskoe
vvedenie/)
и
Generative AI
(«Генеративный искусственный интеллект»). В этих кни
гах рассматриваются крупные языковые модели, такие как
ChatGPT, GPT-4 и дру
O'Reilly,
гие. Том также преподавал курсы по информационным технологиям для
UCLA
и
Pluralsight,
где обучал использованию
Python
для создания моделей глубо
кого и машинного обучения. Среди тем, которым он уделял особое внимание, была
и обработка естественного языка.
Об изображении на обложке
На обложке издания <Jlрограммирование с помощью искусственного интеллекта»
изображен рифовый триггер
(Rhinecanthus rectangulus).
Эту рыбу также называют
углохвостым спинорогом. После всенародного голосования и одобрения законода
тельного собрания штата Гавайи, в
1984
году углохвостый спинорог бьm выбран в
качестве официальной государственной рыбы Гавайев.
Углохвостый спинорог обитает на мелководьях внешних рифов Индо-Тихоокеан
ского региона и у побережья Гавайских островов. Его рацион составляют водорос
ли и рифовые беспозвоночные
-
морские ежи, улитки и другие, которых он нахо
дит, медленно передвигаясь вдоль дна рифа.
Хотя эта рыба обычно избегает лишнего внимания, ее легко узнать по характерной
манере движения, своеобразному поведению на охраняемой территории и внешне
му облику: пухлому рту, синей верхней губе и длине тела до
25
сантиметров.
В мире известно около сорока видов рыб-триггеров, и углохвостый спинорог в на
стоящее время относится к категории наименее опасных. Многие животные, изо
браженные на обложках книг издательства
O'Reilly,
находятся под угрозой исчез
новения, и каждый из них играет важную роль в жизни океана.
(Karen Montgomery) по
Oeuvres du Comte De Lacepede (Произведе
ния графа де Ласепеда). Дизайн серии разработан Эди Фридман (Edie Freedman),
Элли Фолькхаузен (Ellie Volckhausen) и Карен Монтгомери (Karen Montgomery).
Гилрой Семиболд и Гардиан Сане. Текстовый шрифт Шрифты обложки Adobe Minion Pro, шрифт заголовков - Adobe Myriad Condensed, а шрифт для ото
бражения кода - Dalton Maag's UЬuntu Mono.
Иллюстрация на обложке выполнена Карен Монтгомери
мотивам старинной гравюры из книги
Том Таулли
Программирование с помощью
искусственного интеллекта
Перевод с английского
010000,
ТОО "АЛИСТ"
Республика Казахстан,
г. Астана, пр. Сарыарка, д.
Подписано в печать
17,
ВП
30
02.10.25.
Формат 70х100 1 / 16 . Печать офсетная. Усл. печ. л. 19,35.
Тираж
1500 экз.
Заказ №
15685.
Отпечатано с готового оригинал-макета
ООО "Принт-М",
142300,
РФ, М.О., г. Чехов, ул. Полиграфистов, д.
1