Введение
Каждый день я открываю ChatGPT и вбиваю десятки запросов. Но 80% времени уходит на правки, потому что промт был слишком расплывчатым. За несколько лет я нащупал шаблоны, которые работают безотказно. Ниже — 10 проверенных промтов для программирования, отладки и рефакторинга. Они разделены на три группы: код с нуля, отладка и архитектура.
Важно: Промты под GPT-4 (или o1, o3-mini). Для старых моделей результаты могут отличаться.
1. Написание функции с нуля
Промт:
Напиши на Python функцию `merge_sorted_lists(a, b)`, которая сливает два отсортированных списка в один отсортированный. Используй только стандартную библиотеку. Добавь докстринг и type hints. Сложность O(n+m).
Пример использования:
def merge_sorted_lists(a: list[int], b: list[int]) -> list[int]:
"""Сливает два отсортированных списка в один отсортированный."""
i = j = 0
result = []
while i < len(a) and j < len(b):
if a[i] < b[j]:
result.append(a[i])
i += 1
else:
result.append(b[j])
j += 1
result.extend(a[i:])
result.extend(b[j:])
return result
Вывод: Такой промт даёт сразу готовый код с комментариями и без лишней воды. Достаточно скопировать и вставить.
2. Отладка с контекстом ошибки
Промт:
У меня падает код с ошибкой: `KeyError: 'user_id'`. Стек: File "/app/views.py", line 45, in get_user. Приложи полный код этой функции (см. ниже). Помоги найти причину и предложи исправление.
[вставка кода функции]
Пример использования:
Причина часто — отсутствие ключа в словаре после изменений в API. GPT-4 указывает на строку, где словарь формируется, и предлагает добавить .get('user_id', None) или проверку.
Вывод: Контекст ошибки и код — лучший способ получить точное решение, а не догадки.
3. Рефакторинг «улучши код»
Промт:
Дан код на JavaScript. Он работает, но есть проблемы с читаемостью и дублированием. Проведи рефакторинг: выдели общие части, добавь обработку граничных случаев, переименуй переменные. Покажи diff.
[вставка кода]
Пример использования:
После рефакторинга функция сокращается в 2 раза, исчезают вложенные if, появляется ранний возврат (early return).
Вывод: Подробный запрос с «покажи diff» заставляет GPT объяснить изменения, а не просто выдать новый код.
4. Генерация регекса по описанию
Промт:
Составь регулярное выражение для поиска email-адресов в тексте. Учти, что домен может быть только .com, .ru, .org. Регекс должен быть совместим с Python (модуль re). Плюс напиши тестовые случаи.
Пример результата:
`r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.(?:com
|ru|org)'` с пояснением каждой части.
Вывод: GPT отлично генерирует регексы, если чётко указать язык и ограничения.
5. Написание unit-тестов
Промт:
Для функции `calculate_discount(price, coupon_code)` напиши набор pytest-тестов. Покрой: нормальные случаи, граничные значения (0, отрицательная цена), None, пустой код. Используй параметризацию.
Пример:
@pytest.mark.parametrize("price, code, expected", [
(100, "SAVE10", 90),
(100, "", 100),
(0, "SAVE10", 0),
])
def test_calculate_discount(price, code, expected):
assert calculate_discount(price, code) == expected
Вывод: Чёткие требования к параметризации дают готовый тест-сьют.
6. Декомпозиция задачи
Промт:
Мне нужно реализовать REST API для блога (Flask). Разбей задачу на подзадачи по принципу MVC. Для каждой подзадачи напиши, какой класс/функция нужен, и пример сигнатуры.
Пример вывода:
- Модель Post, контроллер PostController, схемы валидации.
- Краткие сигнатуры: class Post(db.Model): ..., def list_posts(page, per_page) -> list[Post].
Вывод: Декомпозиция — сильная сторона GPT. Он не пишет полный код, но даёт план, по которому легко работать.
7. Объяснение чужого кода
Промт:
Объясни, что делает этот код на C#, построчно. Акцент на алгоритмической сложности и возможных узких местах.
[вставка кода]
Пример результата:
GPT разбирает циклы, указывает на O(n²) и предлагает оптимизацию до O(n log n) с помощью сортировки.
Вывод: Хорош для кода, который нужно понять перед рефакторингом.
8. Оптимизация SQL запроса
Промт:
Дан SQL-запрос (PostgreSQL), который выполняется 5 секунд. Предложи варианты оптимизации: добавление индексов, переписывание JOIN, использование CTE. Объясни, как проверить план выполнения.
[вставка запроса]
Пример:
GPT предлагает создать составной индекс на (user_id, created_at) и переписать подзапрос в JOIN. Ссылается на официальную документацию PostgreSQL по EXPLAIN ANALYZE.
Вывод: Конкретные рекомендации с планом выполнения.
9. Проектирование БД по описанию
Промт:
Спроектируй схему БД для интернет-магазина. Нужны сущности: пользователь, товар, корзина, заказ. Используй нормализацию до 3НФ. Выведи ER-диаграмму в текстовом виде (используя псевдографику) и DDL для PostgreSQL.
Пример:
users (id PK, email, password_hash, created_at)
products (id PK, name, price, stock)
carts (id PK, user_id FK, ...)
...
Вывод: Промт с требованием нормализации даёт готовую модель без избыточности.
10. Выбор архитектурного решения
Промт:
Сравни два подхода для микросервисной системы: синхронная связь через REST vs асинхронная через Kafka. Критерии: сложность разработки, масштабирование, согласованность данных. Обоснуй, что лучше для сервиса заказов.
Пример ответа:
GPT перечисляет плюсы и минусы, ссылается на паттерны Saga и Event Sourcing. Для сервиса заказов рекомендует асинхронную связь из-за требования eventual consistency.
Вывод: Хорош для принятия технических решений в начале проекта.
Заключение
Эти 10 промтов покрывают 90% моих ежедневных задач. Главный секрет — конкретика и контекст. Чем больше деталей вы даёте (язык, среда, ограничения), тем точнее ответ. Попробуйте адаптировать любой из них под свою задачу — и вы заметите, как вырастет скорость работы. А если хотите углубиться, рекомендую почитать официальную документацию OpenAI по промт-инжинирингу.
Комментарии