Введение
Когда я впервые попробовал 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. Удачи в кодинге!
Комментарии