Сегодня я пишу о ChatGPT и о том, как он может помочь вам в программировании. Я использовал этот инструмент искусственного интеллекта, чтобы написать простое приложение Flask на Python за считанные минуты. В то же время я хочу показать, как его можно использовать для развлечения и помощи в работе над творческим процессом. Если вас интересуют такие типы сообщений, недавно я также рассмотрел Stable Diffusion, модель скрытой диффузии, которая может генерировать изображения из подсказки.

Что такое ChatGPT?

Если вы в последнее время читаете новости, вы, вероятно, когда-то слышали о ChatGPT. ChatGPT — это новейшая модель для большого языка от OpenAI. Их предыдущей языковой моделью была GPT-3. Хотя ChatGPT — модель меньшего размера, чем GPT-3 (20 миллиардов параметров против 175 миллиардов), похоже, она была настроена и обучена для разговорных приложений.

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

ChatGPT для кодирования

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

Я покажу один пример того, что может сделать ChatGPT, когда его попросят написать код. Вы также можете посмотреть это короткое видео, которое я сделал об этом:



Пример: напишите простое веб-приложение Flask для расчета ИМТ пользователя

Я попросил ChatGPT написать скрипт Python с использованием Flask, где пользователи вводят свой рост и вес, а приложение возвращает их ИМТ.

Моя первоначальная подсказка была:

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

Вот небольшой фрагмент ответа ChatGPT на мой запрос:



Меня впечатляет то, что он может создавать все файлы, необходимые для запуска этого приложения, согласованным образом. Во-первых, он правильно написал сторону Python и даже включил опцию формы для типа единицы измерения. Затем ChatGPT написал HTML-код, необходимый для отображения приложения. Удивительно, но все имена переменных совпадают с именами, которые Flask отправляет со стороны Python.

Веб-приложение выглядит так:

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

Сначала ChatGPT отображал результаты на другой странице, поэтому я попросил изменить bmi_calculator.html, чтобы вывод отображался на той же странице.

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

Здесь вы можете увидеть окончательную версию:

Код

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

  • app.py
from flask import Flask, request, render_template
 
app = Flask(__name__)
 
@app.route('/')
def bmi_calculator():
    return render_template('bmi_calculator.html')
 
@app.route('/calculate', methods=['POST'])
def calculate():
    height = float(request.form['height'])
    weight = float(request.form['weight'])
    units = request.form['units']
 
    if units == 'metric':
        bmi = weight / (height ** 2)
    else:
        bmi = 703 * (weight / (height ** 2))
 
    return render_template('bmi_calculator.html', bmi=bmi, units=units)
 
if __name__ == '__main__':
    app.run()
  • bmi_calculator.html
<html>
  <head>
    <style>
      body {
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
      }
      form {
        display: flex;
        flex-direction: column;
        align-items: center;
      }
      label {
        margin-top: 10px;
      }
      input[type="text"] {
        width: 50%;
        height: 30px;
        font-size: 16px;
        border: 1px solid #ccc;
        border-radius: 4px;
        padding: 10px;
      }
      input[type="submit"] {
        width: 50%;
        height: 40px;
        font-size: 18px;
        border: none;
        border-radius: 4px;
        background-color: #4CAF50;
        color: white;
        cursor: pointer;
      }
      input[type="submit"]:hover {
        background-color: #45a049;
      }
      p {
        font-size: 18px;
        margin-top: 20px;
      }
    </style>
  </head>
  <body>
    <form action="/calculate" method="post">
      <label for="height">Height:</label>
      {% if units == 'metric' %}
        <label style="margin-left: 10px;">in meters</label><br>
      {% else %}
        <label style="margin-left: 10px;">in inches</label><br>
      {% endif %}
      <input type="text" id="height" name="height"><br>
      <label for="weight">Weight:</label>
      {% if units == 'metric' %}
        <label style="margin-left: 10px;">in kg</label><br>
      {% else %}
        <label style="margin-left: 10px;">in pounds</label><br>
      {% endif %}
      <input type="text" id="weight" name="weight"><br>
      <input type="radio" id="metric" name="units" value="metric" checked>
      <label for="metric">Metric</label><br>
      <input type="radio" id="imperial" name="units" value="imperial">
      <label for="imperial">Imperial</label><br>
      <input type="submit" value="Calculate">
      {% if bmi %}
        <p>Your BMI is {{ bmi | round(2) }}</p>
      {% endif %}
    </form>
  </body>
</html>

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

Если вам интересно, весь разговор с ChatGPT для создания этого кода находится здесь, благодаря расширению Chrome с открытым исходным кодом ShareGPT, которое позволяет вам легко делиться разговорами ChatGPT с помощью одной ссылки. Вы можете проверить репозиторий расширений здесь.

Другие варианты использования ChatGPT

На мой взгляд, ChatGPT может предоставить вам шаблон/начальный код, который сэкономит много времени на разработку. Я видел видео, в котором разработчик игр использует его для написания различных сценариев C# для Unity. Это по-прежнему требует наблюдения, и вам нужно будет исправить некоторые ошибки.

Еще одним возможным вариантом использования ChatGPT может быть помощь в разработке UI/UX для приложения.

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

Заключение

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

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

Вы также можете подписаться на мой канал YouTube для видео о проектах Python, автоматизации и криптографии:

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

Первоначально опубликовано на https://andresberejnoi.com 8 января 2023 г.