Поиск по сайту:

Как использовать ChatGPT для написания кода - и мой любимый трюк для отладки того, что он генерирует


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

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

Итак, как вы можете использовать ChatGPT для написания кода в рамках вашей ежедневной практики кодирования? Вот краткое резюме:

  1. ChatGPT может выдавать как полезный, так и непригодный для использования код. Для достижения наилучших результатов предоставляйте четкие и подробные подсказки.
  2. ChatGPT преуспевает в оказании помощи в выполнении конкретных задач или процедур кодирования, а не в создании полноценных приложений с нуля.
  3. Используйте ChatGPT, чтобы найти и выбрать подходящие библиотеки программирования для конкретных целей, и участвуйте в интерактивном обсуждении, чтобы сузить круг вариантов.
  4. Будьте осторожны в отношении того, кому принадлежит код, созданный искусственным интеллектом, и всегда проверяйте надежность кода. Не доверяйте слепо сгенерированному результату.
  5. Относитесь к взаимодействию с ChatGPT как к разговору. Уточняйте свои вопросы на основе ответов ИИ, чтобы приблизиться к желаемому результату.

Теперь давайте рассмотрим ChatGPT значительно подробнее.

С какими типами программирования ChatGPT может хорошо справляться?

Есть два важных факта о ChatGPT и кодировании. Во-первых, ИИ может писать полезный код. 

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

Я убедился в этом на собственном горьком опыте. После того, как я закончил работу над плагином WordPress для своей жены, я решил посмотреть, как далеко может зайти ChatGPT. 

Я написал очень тщательную подсказку для приложения Mac, включая подробное описание элементов пользовательского интерфейса, взаимодействий, что будет предоставлено в настройках, как они будут работать и многое другое. Затем я передал подсказку в ChatGPT.

ChatGPT ответил потоком текста и кода. Затем он остановился на середине кода. Когда я попросил ИИ продолжить, он вырвал еще больше кода и текста. Я просил продолжить за продолжением, и он выдавал все больше и больше кода. Тем не менее, ни один из выходных данных не был пригоден для использования. ИИ не определил, куда должен быть направлен код, как построить проект, и когда я внимательно посмотрел на полученный код, он опустил основные операции, которые я просил, оставив в простых текстовых описаниях «сюда идет логика программы».

После повторных тестов стало понятно, что если попросить ChatGPT доставить готовое приложение, инструмент не справится. Следствием этого наблюдения является то, что если вы ничего не знаете о программировании и хотите, чтобы ChatGPT что-то создал, это потерпит неудачу.

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

Кроме того, помните, что, хотя ChatGPT обладает огромным объемом знаний в предметной области (и часто это так), ему не хватает мудрости. Таким образом, инструмент может быть способен писать код, но он не сможет писать код, содержащий нюансы для конкретных или сложных проблем, требующих глубокого опыта.

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

Итак, имея это в виду, давайте рассмотрим некоторые конкретные шаги о том, как ChatGPT может помочь вам в написании кода.

Как использовать ChatGPT для написания кода

1. Сузьте и заострите свой запрос

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

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

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

2. Используйте ChatGPT для изучения библиотек и ресурсов

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

Однако с развитием инструментов искусственного интеллекта вы можете использовать библиотеку искусственного интеллекта для интеллектуального извлечения и обобщения. Одна из областей, в которой ChatGPT преуспевает (и это также область, которую вы можете легко проверить, чтобы избежать его авторитетной, но неправильной модели поведения) — это поиск библиотек и ресурсов. 

OpenAI (создатель ChatGPT) продает доступ к API для своих LLM, чтобы делать именно то, что мы хотим. Но в случае этого примера предположим, что мы не хотим платить комиссию за транзакцию.

Итак, давайте рассмотрим взаимодействие с ChatGPT, чтобы понять, как использовать такой инструмент бесплатно, с проектом, который работает на PHP.

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

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

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

Эта подсказка дала мне именно то, что я хотел, включая упоминание о предложениях OpenAI. Я думаю, что OpenAI отлично справился бы с этой задачей, но для этого гипотетического проекта я не хочу тратить бюджет на комиссию за API. Итак, я сужу круг вопросов:

Есть ли что-то из этого бесплатно?

ChatGPT подстраховался своим ответом: «Да, все десять этих библиотек искусственного интеллекта имеют открытый исходный код и бесплатны для использования. Тем не менее, некоторые из них могут иметь ограничения на использование или требовать оплаты за доступ к дополнительным функциям или ресурсам." Итак, основываясь на этом ответе, я уточнил свой вопрос:

Какие из этих библиотек не имеют ограничений на использование и не требуют дополнительной оплаты или лицензирования?

Обратите внимание, что это очень похоже на разговор. Мне не нужно заново задавать первоначальный вопрос. Я просто углубляюсь в детали, как если бы рядом со мной был эксперт. На этот раз ChatGPT предоставил мне восемь вариантов библиотек, но ни в одной из них не упоминался язык PHP, который я планировал использовать для кодирования. Итак, вот следующий вопрос:

Могу ли я использовать любую из этих 8 библиотек с PHP?

Он вернул три библиотеки, но я не был уверен в том, что каждая из них делает. Итак, еще один вопрос:

В чем разница между Сумами, Генсимом и НЛТК?

Я все еще не был уверен, поэтому уточнил свой план использования, а затем спросил:

Если я хочу создавать резюме новостных статей на веб-страницах, какая библиотека будет работать лучше?

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

Можете ли вы объяснить, как использовать Сумы с PHP?

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

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

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

Поэтому не стесняйтесь использовать несколько инструментов для триангуляции своих ответов. Вот эта история: Gemini против ChatGPT: может ли Gemini помочь вам в программировании? С тех пор как я написал эту статью, Google добавил некоторые возможности программирования в Gemini, но они не так уж и хороши. Вы можете прочитать об этой возможности здесь: Я протестировал новые навыки программирования Google Gemini. Все пошло не очень хорошо. А совсем недавно я углубился в Gemini Advanced. ИИ до сих пор не проходит многих тестов.

Далее идет кодирование. 

3. Попросите ChatGPT написать пример кода

Хорошо, давайте здесь сделаем паузу. Эта статья называется "Как использовать ChatGPT для написания кода." И это будет. Но на самом деле мы просим ChatGPT написать пример кода.

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

Итак, итог: ChatGPT не может поддерживать ваш код или даже настраивать его.

Это ограничение означает, что вам придется выполнять всю работу самостоятельно. Как мы знаем, первый черновик кода редко является окончательным. Таким образом, даже если вы ожидаете, что ChatGPT сгенерирует окончательный код, это будет отправной точкой, в которой вам нужно довести его до завершения, интегрировать в свой более крупный проект, протестировать, доработать, отладить и так далее.

Но эта проблема не означает, что пример кода бесполезен - вовсе нет. Давайте посмотрим на подсказку, которую я написал на основе проекта, который я описал ранее. Вот первая часть:

С помощью функции PHP под названием summarize_article.

В качестве входных данных summarize_article будет передан URL-адрес статьи на новостном сайте, например ZDNET.com или Reuters.com.

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

Внутри summarize_article извлеките содержимое веб-страницы по указанному URL-адресу. Используя библиотеку Сумы, из PHP и любые другие необходимые библиотеки, извлеките основную часть статьи, игнорируя любую рекламу или встроенные материалы, и обобщите ее примерно до 50 слов. Убедитесь, что резюме состоит из полных предложений. При необходимости вы можете перейти на более чем 50 слов, чтобы закончить последнее предложение.

Этот подход очень похож на то, как я бы инструктировал сотрудника. Я бы хотел, чтобы этот человек знал, что он не ограничивается только Сумами. Если им нужен был другой инструмент, я хотел, чтобы они им воспользовались. 

Я также указал приблизительное количество слов, чтобы создать границы для того, что я хотел бы сделать в качестве резюме. Более поздняя версия подпрограммы может принимать это число в качестве параметра. Затем я закончил, сказав то, что хотел в результате:

После завершения обработки код summarize_article таким образом, чтобы он возвращал резюме в виде обычного текста.

Полученный код довольно прост. ChatGPT обратился к другой библиотеке (Goose) для получения содержимого статьи. Затем он передал это резюме в Сумы с ограничением в 50 слов и вернул результат. Но как только основы написаны, остается только вернуться к программированию и добавить настройки, настроить то, что передается в две библиотеки, и получить результаты:

Один интересный момент, на который стоит обратить внимание. Когда я впервые попробовал этот тест в начале 2023 года, ChatGPT создал образец вызова написанной им процедуры, используя URL-адрес после 2021 года. На тот момент, в марте 2023 года, набор данных ChatGPT был только за 2021 год. Теперь база знаний ChatGPT простирается до конца июня 2024 года и позволяет осуществлять поиск в Интернете. Но я хочу сказать, что ChatGPT придумал образец ссылки, о котором он не мог знать:

https://www.reuters.com/business/retail-consumer/teslas-musk-says-fremont-california-factory-may-be-sold-chip-shortage-bites-2022-03-18/

Я проверил этот URL по сайту Reuters и Wayback Machine, но его не существует. Никогда не предполагайте, что ChatGPT точен. Всегда перепроверяйте все, что он вам дает.

4. Отладка и доработка сгенерированного кода

Я показал вам несколько способов, с помощью которых ChatGPT совершает ошибки или галлюцинации. Все программисты допускают ошибки, даже ИИ.

Но вы можете сделать несколько вещей, которые помогут усовершенствовать код, отладить проблемы и предвидеть ошибки, которые могут возникнуть. Мой любимый новый трюк с поддержкой искусственного интеллекта — это скармливать код другому сеансу ChatGPT (или совершенно другому чат-боту) и спрашивать: «Что не так с этим кодом?»

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

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Заменяет ли ChatGPT программистов? 

Не сейчас - или, по крайней мере, пока нет. ChatGPT программирует на уровне талантливого первокурсника-программиста, но это лень (как тот первокурсник). Этот инструмент может снизить потребность в программистах начального уровня. 

Тем не менее, я думаю, что на нынешнем уровне ИИ облегчит жизнь программистам начального уровня (и даже программистам с большим опытом) при написании кода и поиске информации. Это экономит время, но ИИ не может выполнять многие задачи программирования самостоятельно — по крайней мере, сейчас. В 2030 году? Кто знает.

Как получить ответы на вопросы по программированию в ChatGPT?

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

Конечно, проверьте эту информацию, потому что, как сказал Джон Шульман, соучредитель OpenAI: «Больше всего нас беспокоила фактичность, потому что модель любит фабриковать вещи».

Гарантируется ли отсутствие ошибок в коде, сгенерированном ChatGPT?

Черт возьми, нет! Но вы также не можете доверять коду, который пишут программисты-люди. Я, конечно, не доверяю ни одному коду, который пишу. Код выходит из процесса его создания невероятно несовершенным. Всегда есть баги. Перед отправкой вам нужно тестировать, тестировать и еще раз тестировать. Затем альфа-тест с несколькими выбранными жертвами. Затем проведите бета-тестирование с более широким сообществом пользователей. 

Даже после всей этой работы будут ошибки. То, что ИИ занимается этим программированием, не означает, что он может писать код без ошибок. Не доверяйте. Всегда проверяйте. И у вас все равно не будет полностью свободного от ошибок вывода. Такова природа Вселенной.

Что делать, если код, который я получаю, неправильный?

Я рекомендую рассматривать чат-бота как немного несговорчивого студента или подчиненного сотрудника. Что бы вы сделали, если бы этот человек вернул вам код, который не работал? Вы отправляли их обратно с инструкциями сделать это снова и сделать все правильно. Вот примерно что вам следует делать с ChatGPT (я проверил это с ChatGPT 4 и 4o). Когда что-то не работает, я говорю: «Это не сработало. Пожалуйста, попробуйте еще раз».

ИИ делает именно это. Он часто выдает мне разные варианты одной и той же проблемы. Я повторял этот процесс четыре или пять раз по времени, пока не получил рабочий ответ. Однако иногда у ИИ заканчиваются идеи. В других случаях ответ на вопрос о повторной попытке совершенно (и я имею в виду совсем) не связан с тем, что вы запросили. 

Когда станет очевидно, что вы достигли предела способности ИИ оставаться в здравом уме в решении проблемы, вам придется пристегнуться и написать код самостоятельно. Но в 9 случаях из 10, особенно при решении базовых задач кодирования или написания интерфейсов, ИИ успешно справляется со своей задачей.

Насколько подробным должно быть описание проблемы с программированием при запросе в ChatGPT?

Подробный. Чем больше вы оставляете открытыми для интерпретации, тем больше ИИ будет идти своим путем. Когда я даю подсказки ChatGPT о помощи мне во время программирования, я представляю, что назначаю задачу по программированию одному из моих учеников или тому, кто работает на меня. 

Предоставил ли я этому человеку достаточно подробностей для создания первого черновика, или ему придется задать мне дополнительные вопросы? Хуже того, будет ли у этого человека так мало руководства, что он пойдет в совершенно неправильном направлении? Здесь не поленитесь. ChatGPT может сэкономить вам часы или даже дни программирования (для меня это так), но только если вы дадите ему полезные инструкции для начала.

Если я использую ChatGPT для написания своего кода, кто им владеет?

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

ZDNET глубоко погрузился в эту тему, пообщался с экспертами в области права и подготовил три статьи. Если вас беспокоит эта проблема (а если вы используете искусственный интеллект для помощи в программировании, вам следует это сделать), я рекомендую вам прочитать их:

  • Кому принадлежит код? Если искусственный интеллект ChatGPT помогает написать ваше приложение, оно по-прежнему принадлежит вам?
  • Если вы используете код, созданный искусственным интеллектом, какова ваша ответственность?
  • Щекотливый вопрос: кому принадлежит код, изображения и повествования, созданные ИИ?

Какие языки программирования знает ChatGPT?

Ответ — большинство языков. Я протестировал распространенные современные языки, такие как PHP, Python, Java, Kotlin, Swift, C# и другие. Но затем я заставил инструмент писать код на малоизвестных языках темных веков, таких как COBOL, Fortran, Forth, LISP, ALGOL, RPG (генератор отчетных программ, а не ролевая игра) и даже на ассемблере IBM/360. 

В качестве вишенки на торте я дал ему такую подсказку:

Напишите последовательность, которая отображает «Hello, world» в мигающих индикаторах ASCII на передней панели PDP 8/e

PDP 8/e был моим первым компьютером, и ChatGPT дал мне инструкции по включению программы с помощью переключателей на передней панели. Я был впечатлен, ликовал и немного испуган.

Может ли ChatGPT помочь мне с задачами по анализу и визуализации данных?

Да, и многое из этого можно сделать без кода. Ознакомьтесь с моей полной статьей на эту тему: Момент, когда я понял, что ChatGPT Plus изменил правила игры для моего бизнеса.

Я также сделал статью о сгенерированных графиках и таблицах: Как использовать ChatGPT для создания диаграмм и таблиц.

Но вот тут-то и начинается самое интересное. В статье выше я попросил ChatGPT Plus: «Сделайте гистограмму пяти лучших городов мира по численности населения», и он это сделал. Но хотите ли вы код? Попробуйте спросить:

Сделайте гистограмму пяти лучших городов мира по численности населения в Swift. Извлекайте данные о населении из Интернета. Обязательно включите в него все необходимые библиотеки.

Добавляя "in Swift", вы указываете язык программирования. Указывая, откуда поступают данные, и заставляя ChatGPT Plus включать библиотеки, ИИ привлекает другие ресурсы, необходимые программе. Вот почему, по сути, программирование с помощью искусственного интеллекта требует от вас знаний о программировании. Но если вы это сделаете, это круто, потому что три предложения могут дать вам кусок аннотированного кода. Здорово, да?  

Как ChatGPT обрабатывает различия между диалектами и реализациями?

У нас нет точных подробностей по этому вопросу от OpenAI, но наше понимание того, как обучается ChatGPT, может пролить свет на этот вопрос. Помните, что диалекты и реализации языков программирования (и их маленькие причуды) меняются гораздо быстрее, чем полный язык. Эта реальность затрудняет ChatGPT (и многим специалистам по программированию) идти в ногу со временем.

Таким образом, я бы отрабатывал эти два предположения:

  1. Чем позже произошло изменение диалектики, тем меньше вероятность того, что ChatGPT знает об этом, и
  2. Чем популярнее язык, тем больше обучающих данных он изучает и, следовательно, тем точнее он будет.

Что в итоге? ChatGPT может быть полезным инструментом. Только не приписывайте ему сверхспособности. Ещё.