10 промтов для ChatGPT и GPT-4: программирование, отладка и рефакторинг

Введение

ChatGPT и GPT-4 стали незаменимыми инструментами для разработчиков, позволяя ускорить написание кода, отладку и рефакторинг. Однако чтобы получить качественный результат, важно правильно формулировать запросы. В этой подборке — 10 проверенных промтов, которые я использую ежедневно в работе. Каждый промт сопровождается примером и кодом, чтобы вы могли сразу применить его в своих проектах.

1. Написание функции с нуля

Промт: «Напиши функцию на Python, которая принимает список чисел и возвращает сумму всех четных чисел. Используй list comprehension. Добавь документацию в стиле Google Docstring.»

Пример:

def sum_even_numbers(numbers):
    """Вычисляет сумму четных чисел в списке.

    Args:
        numbers: Список целых чисел.

    Returns:
        int: Сумма четных чисел.
    """
    return sum(num for num in numbers if num % 2 == 0)

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

2. Отладка ошибок

Промт: «У меня есть код на JavaScript. Он выдает ошибку 'Cannot read property of undefined'. Вот код: [вставьте код]. Найди причину и предложи исправление.»

Пример:

// Код с ошибкой:
let user = {};
console.log(user.name.toUpperCase());

Ответ GPT: Ошибка возникает, потому что user.name — undefined. Исправление: проверяйте существование свойства перед вызовом метода.

console.log(user.name?.toUpperCase());

Почему работает: Контекст ошибки и код позволяют GPT точно определить проблему и предложить исправление.

3. Рефакторинг с улучшением производительности

Промт: «Отрефактори этот код на Python для улучшения производительности. Используй генераторы вместо списков, если это возможно. Объясни каждое изменение.»

Пример:

# Исходный код:
def squares(nums):
    result = []
    for n in nums:
        result.append(n**2)
    return result

Ответ GPT: Использование генератора уменьшает потребление памяти.

def squares(nums):
    return (n**2 for n in nums)  # генератор, а не список

Почему работает: Четкое указание на улучшение производительности и требование объяснений делает код учебным материалом.

4. Генерация тестов

Промт: «Напиши unit-тесты для следующей функции на Python с использованием pytest. Покрой краевые случаи: пустой список, отрицательные числа, большие значения.»

Пример:

def divide(a, b):
    if b == 0:
        raise ValueError("Деление на ноль")
    return a / b

Ответ GPT:

def test_divide_normal():
    assert divide(10, 2) == 5.0

def test_divide_by_zero():
    with pytest.raises(ValueError):
        divide(1, 0)

def test_divide_negative():
    assert divide(-6, 3) == -2.0

Почему работает: Указание на краевые случаи гарантирует полноту тестов.

5. Объяснение сложного кода

Промт: «Объясни этот код на Rust построчно. Предположи, что читатель знаком с основами синтаксиса, но не с замыканиями и владением.»

Пример:

let numbers = vec![1, 2, 3];
let doubled: Vec<_> = numbers.iter().map(

|x| x * 2).collect();

Ответ GPT: numbers.iter() создает итератор, `map(

|x| x * 2)применяет замыкание к каждому элементу,collect()` собирает результат в новый вектор.

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

6. Создание архитектурного описания

Промт: «Опиши архитектуру микросервиса для обработки заказов. Используй CQRS и Event Sourcing. Включи компоненты: API Gateway, Command Handler, Event Store. Напиши на русском.»

Пример ответа: API Gateway принимает запросы и направляет их в Command Handler. Command Handler проверяет валидность и сохраняет событие в Event Store. Query Handler читает из проекций. Это разделяет команды и запросы (CQRS).

Почему работает: Конкретные паттерны и компоненты дают осмысленное описание.

7. Написание документации к API

Промт: «Напиши документацию к REST API для создания пользователя. Метод POST /users. Параметры: email (string, required), password (string, min 8 chars). Формат OpenAPI 3.0.»

Пример:

openapi: 3.0.0
paths:
  /users:
    post:
      summary: Создать пользователя
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  format: email
                password:
                  type: string
                  minLength: 8

Почему работает: Спецификация формата гарантирует совместимость с инструментами.

8. Поиск уязвимостей

Промт: «Найди уязвимости в этом SQL-запросе на Python. Предложи исправление с использованием параметризованных запросов.»

Пример:

cursor.execute(f"SELECT * FROM users WHERE email = '{email}'")

Ответ GPT: Уязвимость к SQL-инъекции. Исправление:

cursor.execute("SELECT * FROM users WHERE email = %s", (email,))

Почему работает: Конкретная уязвимость и исправление повышают безопасность кода.

9. Оптимизация запросов к БД

Промт: «У меня есть медленный SQL-запрос: SELECT * FROM orders JOIN customers ON orders.customer_id = customers.id WHERE customers.city = 'Moscow'. Предложи оптимизацию: индексы, рефакторинг.»

Пример ответа: Добавьте индекс на customers.city и orders.customer_id. Рассмотрите материализованные представления для частых фильтров.

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

10. Генерация конфигурации CI/CD

Промт: «Создай конфигурацию GitHub Actions для Python проекта. Шаги: установка зависимостей, запуск тестов с pytest, линтинг с flake8. Используй Python 3.11.»

Пример:

name: CI
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      - run: pip install -r requirements.txt
      - run: pytest
      - run: flake8 .

Почему работает: Четкие шаги и версии минимизируют ошибки.

11. Рефакторинг с паттернами проектирования

Промт: «Примени паттерн Стратегия к этому коду на Java: [вставьте код с if-else]. Объясни, как это улучшает расширяемость.»

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

Почему работает: Паттерны делают код более гибким и поддерживаемым.

12. Написание скрипта для автоматизации

Промт: «Напиши bash-скрипт, который архивирует все файлы .log из директории /var/log, добавляет дату в имя архива и удаляет файлы старше 7 дней. Добавь обработку ошибок.»

Пример:

#!/bin/bash
LOG_DIR="/var/log"
ARCHIVE_NAME="logs_$(date +%Y%m%d).tar.gz"
tar -czf $ARCHIVE_NAME $LOG_DIR/*.log && find $LOG_DIR -name "*.log" -mtime +7 -delete

Почему работает: Конкретная задача с требованиями дает готовый скрипт.

13. Миграция кода между языками

Промт: «Перепиши эту функцию на Python в эквивалент на Go. Сохрани логику обработки ошибок.»

Пример: Функция на Python для чтения файла с обработкой исключений преобразуется в Go с использованием defer и errors.Is.

Почему работает: Указание на сохранение логики предотвращает потерю функциональности.

14. Создание шаблона проекта

Промт: «Создай структуру директорий для Flask-приложения с разделением на модели, представления, контроллеры. Добавь файл requirements.txt с Flask и SQLAlchemy.»

Пример:

myapp/
├── models/
│   └── user.py
├── views/
│   └── user_view.py
├── controllers/
│   └── user_controller.py
├── app.py
├── requirements.txt

Почему работает: Готовая структура ускоряет старт проекта.

15. Анализ производительности кода

Промт: «Проанализируй этот код на C++ на предмет узких мест. Предложи оптимизацию с использованием move-семантики.»

Пример: Исходный код копирует большие объекты. Оптимизация: передача по ссылке и использование std::move.

Почему работает: Конкретный язык и техника оптимизации дают точные рекомендации.

Заключение

Эти 15 промтов покрывают основные задачи разработчика: от написания кода до архитектурных решений. Используйте их как шаблоны, адаптируя под свой контекст. Помните, что качество ответа GPT напрямую зависит от четкости вашего запроса. Экспериментируйте с формулировками и всегда проверяйте результат. Начните с первого промта прямо сейчас — и вы увидите, как ускорится ваша работа.

← Все статьи

Комментарии

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