Введение
Генерация кода с помощью больших языковых моделей — давно не футуристика, а повседневный инструмент любого Python-разработчика. Согласно опросу Stack Overflow 2025, 78% разработчиков используют AI-ассистентов хотя бы раз в неделю, а 44% — ежедневно. Но чтобы получать не просто «какой-то код», а рабочие, оптимизированные и документированные решения, нужно уметь правильно формулировать промты. В этой подборке — 10 проверенных шаблонов промтов, которые я сам использую в реальных проектах: от быстрых скриптов для автоматизации до полноценных эндпоинтов на FastAPI. Каждый промт снабжён примером и пояснением, почему он работает.
Как устроен эффективный промт для генерации кода
Прежде чем перейти к подборке, запомните три правила:
1. Контекст — укажите версию Python, библиотеки, операционную систему. Без этого модель может сгенерировать код под устаревшую версию или несуществующий API.
2. Пример ввода/вывода — покажите, какие данные подаются на вход и что ожидается на выходе. Это резко снижает количество итераций.
3. Ограничения — явно напишите, чего делать нельзя (например, использовать глобальные переменные, сторонние сервисы без авторизации).
10 промтов для генерации Python кода
1. Генерация скрипта для обработки CSV
Промт:
Напиши Python-скрипт (версия 3.11+) для обработки CSV-файла с данными о продажах. На входе — файл sales.csv с колонками: date, product_name, quantity, price. Скрипт должен:
- загрузить данные с помощью стандартного модуля csv;
- отфильтровать строки, где quantity > 0;
- добавить колонку total (quantity * price);
- сохранить результат в cleaned_sales.csv.
Не используй pandas. Добавь обработку ошибок (файл не найден, неверный формат).
Пример использования: После выполнения скрипта вы получите файл cleaned_sales.csv с дополнительной колонкой total. Промт задаёт конкретные требования (стандартный модуль csv, без pandas), что даёт лёгкий и переносимый код.
Код (сгенерированный ответ):
import csv
import sys
def process_sales(input_file, output_file):
try:
with open(input_file, 'r', newline='', encoding='utf-8') as f_in:
reader = csv.DictReader(f_in)
fieldnames = reader.fieldnames + ['total'] if reader.fieldnames else ['total']
rows = []
for row in reader:
try:
quantity = int(row['quantity'])
price = float(row['price'])
if quantity > 0:
row['total'] = round(quantity * price, 2)
rows.append(row)
except (ValueError, KeyError) as e:
print(f'Пропущена строка из-за ошибки: {e}', file=sys.stderr)
with open(output_file, 'w', newline='', encoding='utf-8') as f_out:
writer = csv.DictWriter(f_out, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(rows)
print(f'Обработано {len(rows)} строк. Результат сохранён в {output_file}')
except FileNotFoundError:
print(f'Файл {input_file} не найден.', file=sys.stderr)
sys.exit(1)
if __name__ == '__main__':
process_sales('sales.csv', 'cleaned_sales.csv')
2. Создание CLI-утилиты с argparse
Промт:
Сгенерируй Python-скрипт для консольной утилиты, которая принимает на вход путь к директории и опциональный аргумент --recursive. Скрипт должен вывести список всех файлов с их размером в байтах. Если --recursive указан, рекурсивно обойти поддиректории. Используй модули os и argparse. Версия Python 3.10+.
Почему это работает: Чётко указаны имена аргументов, флаг --recursive и требуемая функциональность. Модель понимает, что нужно использовать argparse, а не sys.argv.
3. Генерация декоратора для логирования
Промт:
Напиши Python-декоратор для логирования вызовов функций. Декоратор должен:
- принимать необязательный аргумент level (по умолчанию 'INFO');
- логировать имя функции, переданные аргументы и время выполнения;
- использовать модуль logging с настройкой базового конфигуратора (basicConfig).
Пример использования: @log_execution(level='DEBUG').
Пример использования: Декоратор можно применить к любой функции, и он автоматически запишет в лог все вызовы. Это ускоряет отладку.
4. Асинхронный парсер с aiohttp
Промт:
Напиши асинхронный парсер на Python 3.11+ для сбора заголовков статей с сайта example.com/news. Используй aiohttp и asyncio. Парсер должен:
- принимать список URL;
- загружать страницы параллельно (не более 5 одновременных соединений);
- извлекать текст из тега <h1>;
- возвращать словарь {url: title}.
Добавь таймаут 10 секунд на запрос.
5. Генерация Pydantic модели
Промт:
Создай Pydantic-модель (v2) для представления данных о пользователе:
- id: int;
- name: str, длина от 1 до 100 символов;
- email: EmailStr (валидация формата);
- created_at: datetime (по умолчанию текущее время).
Добавь конфигурацию, чтобы при сериализации datetime преобразовывался в ISO-строку. Используй pydantic.BaseModel и pydantic.Field.
6. Простой эндпоинт на FastAPI
Промт:
Напиши эндпоинт на FastAPI (версия 0.110+) для создания задачи (TODO). Эндпоинт POST /tasks принимает JSON-тело:
{
"title": "Купить молоко",
"description": "Обезжиренное",
"priority": 1
}
Валидируй данные через Pydantic (title — обязательное, не пустое; priority — int от 1 до 5). Возвращай созданную задачу с id (UUID) и created_at. Храни задачи в оперативной памяти (глобальный список). Добавь эндпоинт GET /tasks для получения всех задач.
7. SQLAlchemy модель и CRUD
Промт:
Сгенерируй SQLAlchemy (версия 2.0+, асинхронная версия) модель для таблицы products с колонками:
- id: Integer, primary key;
- name: String(255), not null;
- price: Numeric(10,2);
- category_id: ForeignKey('categories.id').
Также напиши асинхронные CRUD-функции: create_product, get_product_by_id, update_product_price, delete_product. Используй async with async_session.
8. Генерация тестов с pytest
Промт:
Напиши pytest-тесты для функции calculate_discount(price: float, discount: float) -> float, которая возвращает цену со скидкой. Тесты должны покрывать:
- нормальные значения (100, 10 -> 90.0);
- нулевую скидку;
- скидку 100% (должна вернуть 0.0);
- отрицательную цену (должно быть исключение ValueError).
Используй параметризованные тесты (@pytest.mark.parametrize).
9. Потоковая обработка с generators
Промт:
Напиши функцию-генератор read_large_file(file_path: str), которая читает большой текстовый файл построчно и возвращает только строки, содержащие слово 'ERROR'. Используй менеджер контекста with. Это позволит обрабатывать файлы размером более 1 ГБ без загрузки в память.
10. Генератор документации docstring (Google style)
Промт:
Сгенерируй docstring в стиле Google (с разделами Args, Returns, Raises) для следующей функции:
def merge_dicts(dict1: dict, dict2: dict, overwrite: bool = False) -> dict:
"""..."""
result = dict1.copy()
for key, value in dict2.items():
if overwrite or key not in result:
result[key] = value
return result
Добавь пример использования в docstring.
Сравнение подходов
| Тип промта | Когда использовать | Примерная длина кода | Сложность |
|---|---|---|---|
| Скрипт для обработки данных | Единоразовая задача, нет API | 30-80 строк | Низкая |
| FastAPI эндпоинт | Создание микросервиса | 50-150 строк | Средняя |
| SQLAlchemy модель | Работа с БД | 40-100 строк | Средняя |
| Асинхронный парсер | Сбор данных с веба | 60-120 строк | Высокая |
| Декоратор | Переиспользуемая логика | 10-30 строк | Низкая |
Заключение
Эффективная генерация кода через промты — это навык, который экономит часы работы. Используйте промты из этой подборки как шаблоны, адаптируя под свои задачи. Главное — всегда указывать версию Python, библиотеки и чёткие требования к вводу/выводу. Если вы хотите научиться составлять такие промты ещё быстрее и глубже разобраться в Python-разработке, загляните в наш блог — там много материалов по автоматизации и лучшим практикам. А пока — пробуйте, тестируйте и делитесь результатами.
Комментарии