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

Введение

Когда я впервые попробовал ChatGPT для написания кода, то быстро разочаровался: модель выдавала синтаксически правильный, но логически неработающий код. Проблема была не в ней — проблема была в моих промтах. С тех пор я перепробовал сотни формулировок, прочитал официальную документацию OpenAI и статьи вроде «Prompt Engineering Guide» от DAIR.AI, и понял главное: GPT-4 — это не волшебная палочка, а мощный ассистент, который требует чёткой постановки задачи.

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

Базовые промты: с чего начать

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

Задача: Создать функцию на Python для обработки данных.

Промт:

Напиши на Python функцию, которая принимает список чисел и возвращает:
1. Среднее арифметическое
2. Медиану
3. Стандартное отклонение
Используй только стандартную библиотеку. Добавь обработку пустого списка.

Пример результата:

def analyze_numbers(numbers):
    if not numbers:
        return {'mean': None, 'median': None, 'std': None}

    n = len(numbers)
    mean = sum(numbers) / n

    sorted_nums = sorted(numbers)
    if n % 2 == 0:
        median = (sorted_nums[n//2 - 1] + sorted_nums[n//2]) / 2
    else:
        median = sorted_nums[n//2]

    variance = sum((x - mean) ** 2 for x in numbers) / n
    std = variance ** 0.5

    return {'mean': mean, 'median': median, 'std': std}

Почему это работает: Чёткое описание входных данных и требований. Указание «только стандартная библиотека» исключает лишние импорты.

2. Объяснение чужого кода

Задача: Понять, что делает непонятный фрагмент.

Промт:

Объясни построчно, что делает этот код на JavaScript. Напиши, какие могут быть побочные эффекты:

const data = await fetch('https://api.example.com/users').then(r => r.json());
const result = data.filter(u => u.age > 18).map(u => ({name: u.name, adult: true}));

Пример результата:
1. fetch делает GET-запрос к API. await ждёт ответ.
2. .then(r => r.json()) преобразует ответ в JSON.
3. filter оставляет только пользователей старше 18 лет.
4. map создаёт новый массив объектов с полями name и adult.

Побочные эффекты:
- Если API недоступен, код упадёт с ошибкой.
- Нет обработки ошибок (try/catch).
- Если age не число, сравнение может дать ложный результат.

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

Задача: Написать unit-тесты для существующей функции.

Промт:

Напиши тесты на pytest для функции:

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

Покрой: нормальное деление, деление на ноль, граничные случаи (отрицательные числа, ноль).

Пример результата:

import pytest
from mymodule import divide

def test_normal_division():
    assert divide(10, 2) == 5.0
    assert divide(-10, 2) == -5.0

def test_division_by_zero():
    with pytest.raises(ValueError, match="Деление на ноль"):
        divide(1, 0)

def test_zero_numerator():
    assert divide(0, 5) == 0.0

Продвинутые промты: отладка и рефакторинг

4. Поиск бага в логах

Задача: Найти причину ошибки по stack trace.

Промт:

У меня есть лог ошибки из Python-приложения:

Traceback (most recent call last):
  File "app.py", line 45, in process_data
    result = transform(item)
  File "utils.py", line 12, in transform
    return data['key'] * 2
KeyError: 'key'

Что пошло не так? Как исправить? Напиши код с обработкой ошибки.

Пример результата:
Ошибка KeyError: 'key' возникает, когда в словаре data нет ключа 'key'. Это может быть из-за:
- Неполных данных
- Изменения структуры API
- Ошибки парсинга

Исправление:

def transform(data):
    value = data.get('key')
    if value is None:
        return 0  # или логируем ошибку
    return value * 2

5. Оптимизация медленного кода

Задача: Ускорить запрос к базе данных.

Промт:

Вот код на Python, который выполняется 5 секунд для 1000 записей. Найди узкое место и предложи оптимизацию:

for user in users:
    orders = db.query("SELECT * FROM orders WHERE user_id = ?", user['id'])
    user['total'] = sum(o['amount'] for o in orders)

Пример результата:
Проблема: N+1 запросов — для каждого пользователя отдельный запрос к БД. Решение: один запрос с JOIN или подзапросом.

Оптимизация:

# Один запрос для всех пользователей
user_ids = [u['id'] for u in users]
placeholders = ','.join('?' * len(user_ids))
orders = db.query(f"SELECT user_id, SUM(amount) as total FROM orders WHERE user_id IN ({placeholders}) GROUP BY user_id", *user_ids)

# Создаём словарь для быстрого поиска
totals = {row['user_id']: row['total'] for row in orders}
for user in users:
    user['total'] = totals.get(user['id'], 0)

6. Рефакторинг спагетти-кода

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

Промт:

Отрефактори этот код на Python. Разбей на маленькие функции с понятными названиями. Добавь type hints:

def process(data):
    result = []
    for item in data:
        if item['status'] == 'active':
            if item['type'] == 'user':
                result.append({'name': item['name'], 'role': 'user'})
            elif item['type'] == 'admin':
                result.append({'name': item['name'], 'role': 'admin'})
    return result

Пример результата:

from typing import List, Dict, Any

def is_active(item: Dict[str, Any]) -> bool:
    return item.get('status') == 'active'

def get_role(item: Dict[str, Any]) -> str:
    role_map = {'user': 'user', 'admin': 'admin'}
    return role_map.get(item.get('type'), 'unknown')

def transform_item(item: Dict[str, Any]) -> Dict[str, Any]:
    return {'name': item['name'], 'role': get_role(item)}

def process(data: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
    return [transform_item(item) for item in data if is_active(item)]

7. Генерация документации

Задача: Создать docstring для модуля.

Промт:

Напиши документацию в стиле Google для этого класса. Добавь пример использования:

class DatabaseConnection:
    def __init__(self, host, port, user, password):
        self.host = host
        self.port = port
        self.connection = None

    def connect(self):
        # ...
        pass

Пример результата:

class DatabaseConnection:
    """Управляет подключением к базе данных.

    Args:
        host (str): Адрес хоста.
        port (int): Порт для подключения.
        user (str): Имя пользователя.
        password (str): Пароль.

    Example:
        >>> db = DatabaseConnection('localhost', 5432, 'admin', 'secret')
        >>> db.connect()
    """

Экспертные промты: архитектура и проектирование

8. Проектирование микросервисной архитектуры

Задача: Спроектировать систему для интернет-магазина.

Промт:

Спроектируй микросервисную архитектуру для интернет-магазина. Укажи:
- Какие сервисы нужны
- Как они общаются (REST/gRPC/брокеры)
- Какие базы данных использовать
- Как обрабатывать ошибки
- Как обеспечить отказоустойчивость

Учти: 10 000 товаров, 1000 заказов в день, пиковая нагрузка 5000 запросов/сек.

Пример результата:
Сервисы:
- Product Service — управление товарами (PostgreSQL)
- Order Service — заказы (PostgreSQL + Redis для кэша)
- Payment Service — оплата (через платежный шлюз, async через RabbitMQ)
- Notification Service — email/SMS (RabbitMQ)

Коммуникация: gRPC для синхронных вызовов (Product ↔ Order), RabbitMQ для асинхронных (Order → Payment).

Отказоустойчивость: Circuit breaker (Resilience4j), retry с exponential backoff, dead letter queue.

9. Выбор архитектурного паттерна

Задача: Определить, какой паттерн лучше для конкретной задачи.

Промт:

У меня есть система, где пользователи загружают файлы, которые потом обрабатываются в несколько этапов:
1. Валидация формата
2. Конвертация
3. Анализ
4. Отправка результатов

Какой архитектурный паттерн выбрать: Saga, CQRS, Event Sourcing или Pipeline? Обоснуй.

Пример результата:
Для этой задачи лучше всего подходит Pipeline (или Chain of Responsibility). Причина:
- Этапы строго последовательные
- Каждый этап может быть реализован как отдельный обработчик
- Легко добавлять/убирать шаги
- Просто тестировать каждый шаг изолированно

Saga — для распределённых транзакций, CQRS — для разделения чтения и записи, Event Sourcing — для полной истории изменений. В данном случае они избыточны.

10. Оценка сложности алгоритма

Задача: Проанализировать производительность кода.

Промт:

Оцени временную и пространственную сложность этого алгоритма. Предложи оптимизацию:

def find_duplicates(arr):
    result = []
    for i in range(len(arr)):
        for j in range(i + 1, len(arr)):
            if arr[i] == arr[j] and arr[i] not in result:
                result.append(arr[i])
    return result

Пример результата:
Текущая сложность: O(n²) по времени, O(k) по памяти (k — количество дубликатов).

Оптимизация: Использовать множество (hash set) для отслеживания уникальных элементов:

def find_duplicates(arr):
    seen = set()
    result = []
    for item in arr:
        if item in seen:
            if item not in result:
                result.append(item)
        else:
            seen.add(item)
    return result

Новая сложность: O(n) по времени, O(n) по памяти.

11. Написание SQL-запроса с оптимизацией

Задача: Создать сложный запрос с JOIN и GROUP BY.

Промт:

Напиши SQL-запрос для PostgreSQL: найти топ-10 пользователей по сумме заказов за последний месяц. Таблицы:
- users (id, name, email)
- orders (id, user_id, amount, created_at)

Добавь EXPLAIN ANALYZE и предложи индексы.

Пример результата:

SELECT u.name, u.email, SUM(o.amount) as total
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.created_at >= NOW() - INTERVAL '1 month'
GROUP BY u.id, u.name, u.email
ORDER BY total DESC
LIMIT 10;

Индексы:

CREATE INDEX idx_orders_user_id_created_at ON orders(user_id, created_at);
CREATE INDEX idx_orders_created_at ON orders(created_at);

12. Генерация Dockerfile и docker-compose

Задача: Создать конфигурацию для развёртывания.

Промт:

Напиши Dockerfile для Python-приложения (FastAPI) и docker-compose.yml для запуска с PostgreSQL. Укажи multi-stage build.

Пример результата:

# Stage 1: Build
FROM python:3.11-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

# Stage 2: Run
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
version: '3.8'
services:
  app:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgresql://user:password@db:5432/mydb
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb

13. Безопасность кода: поиск уязвимостей

Задача: Найти SQL-инъекцию и исправить.

Промт:

Найди уязвимости в этом коде на Python (Flask). Предложи исправления:

@app.route('/user')
def get_user():
    user_id = request.args.get('id')
    query = f"SELECT * FROM users WHERE id = {user_id}"
    result = db.execute(query)
    return jsonify(result.fetchone())

Пример результата:
Уязвимость: SQL-инъекция — прямое встраивание пользовательского ввода в запрос.

Исправление: Использовать параметризованные запросы:

@app.route('/user')
def get_user():
    user_id = request.args.get('id')
    query = "SELECT * FROM users WHERE id = ?"
    result = db.execute(query, (user_id,))
    return jsonify(result.fetchone())

14. Проектирование API с RESTful-стандартами

Задача: Спроектировать REST API для управления задачами.

Промт:

Спроектируй RESTful API для системы управления задачами (Todo). Укажи:
- Эндпоинты
- HTTP-методы
- Формат запросов и ответов
- Коды ошибок
- Пагинацию

Пример результата:
Эндпоинты:
| Метод | Эндпоинт | Описание |
|-------|----------|----------|
| GET | /tasks?page=1&limit=10 | Список задач (пагинация) |
| POST | /tasks | Создать задачу |
| GET | /tasks/{id} | Получить задачу |
| PUT | /tasks/{id} | Обновить задачу |
| DELETE | /tasks/{id} | Удалить задачу |

Формат ответа:

{
  "data": [{"id": 1, "title": "Купить молоко", "completed": false}],
  "meta": {"page": 1, "limit": 10, "total": 100}
}

Коды ошибок: 400 — неверные данные, 404 — не найдено, 500 — серверная ошибка.

15. Интеграция с внешними API

Задача: Написать код для работы с платежным шлюзом.

Промт:

Напиши на Python функцию для создания платежа через Stripe API с обработкой ошибок и idempotency key. Используй официальную библиотеку stripe.

Пример результата:

import stripe
from stripe.error import StripeError

def create_payment(amount: int, currency: str, source: str, idempotency_key: str) -> dict:
    """
    Создаёт платёж через Stripe.

    Args:
        amount: Сумма в минимальных единицах (копейках/центах).
        currency: Валюта (например, 'usd').
        source: ID источника платежа.
        idempotency_key: Ключ идемпотентности для предотвращения дублирования.

    Returns:
        dict: Данные о платеже.

    Raises:
        StripeError: Если запрос не удался.
    """
    try:
        charge = stripe.Charge.create(
            amount=amount,
            currency=currency,
            source=source,
            idempotency_key=idempotency_key
        )
        return charge
    except stripe.error.CardError as e:
        # Ошибка карты — пользовательская проблема
        return {"error": "card_declined", "message": str(e)}
    except stripe.error.RateLimitError:
        # Превышение лимита запросов — retry с задержкой
        return {"error": "rate_limit", "message": "Слишком много запросов"}
    except StripeError:
        # Другие ошибки Stripe
        return {"error": "stripe_error", "message": "Ошибка платежного шлюза"}

ASI Biont поддерживает подключение к Stripe через API — подробнее на asibiont.com/courses

Заключение

Эти 15 промтов — не догма, а отправная точка. Главное правило промт-инжиниринга для программистов: чем конкретнее задача, тем качественнее ответ. Указывайте язык, библиотеки, ограничения, ожидаемый формат вывода. И не забывайте проверять сгенерированный код — GPT-4 может ошибаться в логике, особенно в сложных алгоритмах.

В 2026 году AI — это уже не экзотика, а стандартный инструмент в арсенале разработчика. Умение правильно формулировать промты — навык, который окупается многократно: вы тратите 5 минут на написание промта, а получаете решение, которое вручную писали бы час. Начните с этой подборки, адаптируйте под свои задачи и со временем выработаете собственный стиль.

Если хотите углубиться в тему, рекомендую изучить официальный гайд OpenAI по промт-инжинирингу (openai.com/index/engineering/) и книгу «The Art of Prompt Engineering» от DAIR.AI. Удачи в кодинге!

← Все статьи

Комментарии

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

Twilio + ASI Biont: Как подключить AI-агента к SMS, голосовым вызовам и чатам за 5 минут

7 июля 2026

Автоматизация LinkedIn-рассылки и генерации лидов с помощью интеграции AI-агента ASI Biont

7 июля 2026

Главные новости ИИ за июнь 2026: что анонсировал Google и почему это важно для бизнеса

7 июля 2026

Как AI-агент ASI Biont интегрируется с Twitter/X: автоматизация без кода для менеджеров социальных сетей

7 июля 2026

Испанский язык с AI: как технологии и персонализация помогают заговорить за 3 месяца

7 июля 2026

Интеграция датчиков Smart City с AI-агентом ASI Biont: как автоматизировать мониторинг и управление городской инфраструктурой без кода в 2026 году

7 июля 2026

Если вы пользуетесь Google, вы тренируете его ИИ. Вот как отключиться

7 июля 2026

Как секвенировать свою ДНК дома: полное руководство 2026

7 июля 2026

«Первый» AI-рансомвар: почему без человека никуда, или Vibe Coding как новая угроза

7 июля 2026