Программируем с ChatGPT: 10 советов

ChatGPT и прочие крупные языковые модели не превращают новичка в профессионала автоматически. Слепое копирование никому не приносит пользы. А если использовать код, который вам не понятен, могут возникнуть непредвиденные последствия, которые навредят реальным проектам.

Изображение сгенерировано в MidJourney

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

А пока ChatGPT может генерировать ответы и фрагменты кода со ссылками на старые версии фреймворков и устаревшие функции с уязвимостями и ошибками.

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

Совет 1. Следите за контекстом

ChatGPT имеет ограничение на вывод текста, но его можно легко обойти, набрав “continue” (продолжить”).

Если “continue” возвращается с несколько другим решением, возможно, придется начать все заново и исправить имена переменных или изменить порядок аргументов в функциях.

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

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

Еще один совет касается запроса “Перепиши <описание изменения>”, направленного на то, чтобы ChatGPT изменил свой ответ. Будьте точны в определении нужного стиля вывода. К примеру, при введении запросов “Научи меня писать код…” и “Напиши код для…” можно получить совершенно разные по стилю результаты, отличные от тех, которые появляются при нажатии на кнопку “Regenerate response”.

Совет 2. Формулируйте запросы кратко и точно

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

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

Совет 3. Позаботьтесь о форматировании вывода

Добавление ключевого слова “list” (“список”) к запросу может изменить формат вывода ChatGPT.

Оригинал
Перевод

Поскольку ChatGPT работает с текстом, можно использовать ключевое слово “markdown” как часть запроса.

Оригинал
Перевод

Вот еще одна вариация, в которой требуется вывод в формате кода. Следующая пара “ключ-значение” должна располагаться в другом порядке, но нам неясно, как определить Hashmap.

Оригинал
Перевод

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

Оригинал
Перевод

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

Оригинал
Перевод
Оригинал
Перевод

Совет 4. Генерируйте документацию для проектов

ChatGPT помогает в написании четкой и краткой документации для проектов, в том числе файлов README.md. Получив информацию о коде, модель может сгенерировать подробную документацию, объясняющую, как он работает и как его использовать.

Вот какие шаги нужно предпринять.

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

Совет 5. Используйте автодополнение кода

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

Совет 6. Не отправляйте модели проприетарный код

Учитывайте, что ChatGPT использует большую языковую модель, т.е. генеративный предварительно обученный трансформатор (“генеративный” означает способность модели генерировать новый контент). В основе этой модели лежит преобразование больших наборов обучающих данных в математические структуры. Затем она изучает паттерн и использует его для итеративного предсказания по одному слову за раз, чтобы создать лучший ответ на заданный запрос. Таким образом все, что вы добавляете в модель, может быть использовано для будущего итеративного обучения.

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

Совет 7. Тестируйте код на соответствие приемлемым критериям

Вот несколько примеров запросов, которые упростят рефакторинг кода:

Code alternative example
input <yourcode>

Simplify below code
input <yourcode>

Refactor this code
input <yourcode>

ChatGPT может работать как SQL-терминал и отвечать на запросы.

Оригинал
Перевод

А вот еще один пример работы ChatGPT как генератора регулярных выражений (RegEx). 

Первый запрос, показанный ниже, предназначен для валидации электронной почты. Как видите, вывод не соответствует стандарту RFC2822 , который заменил RFC822 и устарел в 2001 году. Таким образом, генерируется только базовая валидация. Также можно сделать дополнительные запросы, чтобы получить паттерн, соответствующий стандарту RFC2822.

Оригинал
Перевод

Стоит провести тестирование в IDE и написать контрольные примеры для сгенерированного регулярного выражения, чтобы убедиться, что оно соответствует нашим требованиям. Учтите: если вы используете бота, это не значит, что можно отказаться от тестирования кода и проверки того, соблюдены ли все критерии приемлемости и обработаны ли граничные случаи.

import re

def test_email_regex():
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$"

# Проверка действительных email-адресов
assert re.match(pattern, "[email protected]")
assert re.match(pattern, "[email protected]")
assert re.match(pattern, "[email protected]")
assert re.match(pattern, "[email protected]")
assert re.match(pattern, "example%[email protected]")

# Проверка недействительных email-адресов
assert not re.match(pattern, "[email protected]")
assert not re.match(pattern, "example@com")
assert not re.match(pattern, "example@example.")
assert not re.match(pattern, "@example.com")
assert not re.match(pattern, "[email protected]")

Попробуйте выполнить приведенный выше тест в Pytest  —  среде тестирования Python. Обратите внимание: кое-что выглядит немного странно, что подтверждает необходимость проверки.

Совет 8. Не полагайтесь исключительно на ИИ

То, что ChatGPT может генерировать код, не означает, что он будет работать “из коробки”. Такой запрос, как “Напиши простое приложение Django для списка дел”, создаст базовую структуру для простого проекта Django. Придется проделать гораздо больший объем работы, чтобы разобраться в сгенерированном коде и заставить его работать должным образом.

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

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

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

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

Совет 9. Запрашивайте тестовые случаи и тест-планы

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

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

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

Приведем пример. Предположим, у вас есть сайт app.ekyc.com, на котором вы создали некую функциональность и хотите спланировать процесс автоматизации тестирования.

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

Оригинал
Перевод

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

Допустим, вам нужен тест-план в формате, который можно легко скопировать в тикеты Jira, wiki или GitHub. В этом случае можно использовать ChatGPT, добавив больше запросов в один поток.

Оригинал
Перевод

Совет 10. Используйте шаблонный, повторяющийся код

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

  • Создание таблиц SQL.
  • Написание CRUD-кода (CRUD: create, retrieve, update, delete  —  создание, выбор, замена, удаление  —  4 простейшие функции управления данными).
  • Отправка электронных писем.
  • Экспорт данных в CSV Excel.
  • Создание форм ввода первичных данных.
  • Составление сеток мастер-данных со списками табличных данных.
Оригинал
Перевод

Научитесь писать запросы

Написание запросов  —  навык, без овладения которым нельзя рассчитывать на результативность работы с генеративными моделями. Он понадобится во множестве случаев  —  как при работе с DALL-E, так и с менее известными сервисами, такими как ChatSonic, Bloom и LaMDA от Google.

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

Оригинал
Перевод

Запросы, которые инструктируют ChatGPT стать X, чтобы получить ответ, необходимый этому X.

Я хочу, чтобы ты действовал как <точное описание, устраняющее двусмысленность>.

ChatGPT в роли исследователя данных:

Оригинал
Перевод
Оригинал
Перевод

ChatGPT как имитация Linux-терминала:

Оригинал
Перевод

ChatGPT как генератор случайных чисел (когда нужны тестовые данные):

Оригинал
Перевод

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

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Timothy Mugayi: Useful Tips for using ChatGPT in Programming

Предыдущая статьяДоступно об API-вызове во Flutter: лучшие практики с демонстрацией кода
Следующая статьяУменьшаем размер образа Docker для приложения Next.js