14 промтов на Python для FastAPI, pandas и asyncio: когда ChatGPT быстрее Stack Overflow

Вступление

Каждый Python-разработчик знает это чувство: сидишь перед монитором, гуглишь ошибку RuntimeError: This event loop is already running, открываешь десять вкладок Stack Overflow, и через час понимаешь, что проблема была в одной строке. По данным опроса JetBrains Python Developers Survey 2023, 68% разработчиков тратят на поиск решений в интернете больше времени, чем на написание кода. Но в 2026 году ситуация изменилась: AI-ассистенты, такие как ChatGPT, Claude и GitHub Copilot, стали незаменимыми помощниками. Однако есть нюанс — чтобы получить точный ответ, нужно правильно формулировать запрос.

Эта подборка — результат моего личного опыта и опыта коллег. Я собрал 14 промтов, которые реально работают в ежедневных задачах: от проектирования асинхронных эндпоинтов FastAPI до векторизации pandas и отладки корутин asyncio. Каждый промт проверен на практике, снабжён примером входа и ожидаемым результатом. Вы сможете использовать их как шаблоны, адаптируя под свои задачи.

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

1. Проектирование async-эндпоинта FastAPI с зависимостями

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

Промт:
"
Ты — опытный FastAPI разработчик. Спроектируй асинхронный эндпоинт для следующей задачи: [описание задачи]. Требуется:
- Использовать async def и await для всех I/O операций.
- Добавить зависимость для получения текущего пользователя из JWT.
- Обработать ошибки: 404, 401, 422.
- Вернуть Pydantic-модель.
- Написать пример запроса и ответа.
"

Пример входа:
Задача: получить список заказов пользователя с пагинацией и фильтром по статусу.

Ожидаемый результат:
Код с @app.get('/orders'), зависимостью get_current_user, параметрами skip, limit, status, обработкой исключений и моделью OrderResponse.

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

2. Векторизация pandas вместо циклов

Когда использовать: Когда видите цикл for по DataFrame и понимаете, что это медленно, но не знаете, как переписать.

Промт:
"
У меня есть DataFrame df с колонками [список]. Я использую цикл для вычисления [что вычисляется]. Перепиши этот код с использованием векторизованных операций pandas (apply, map, vectorized operations). Объясни, почему это быстрее. Приведи бенчмарк для 100 000 строк.
"

Пример входа:
Цикл: для каждой строки вычислить новую колонку total = price * quantity с условием скидки.

Ожидаемый результат:
Использование df['total'] = df['price'] * df['quantity'] и np.where для условия. AI также покажет сравнение времени выполнения: цикл ~2.5 сек, векторизация ~0.02 сек.

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

3. Дебаггинг корутин asyncio

Когда использовать: Когда получаете ошибки вроде RuntimeError: Event loop is closed или Task was destroyed but it is pending.

Промт:
"
Я получаю ошибку [текст ошибки] в асинхронном коде Python. Вот минимальный воспроизводимый пример: [код]. Объясни причину ошибки и предложи исправление. Покажи, как правильно управлять жизненным циклом задач и event loop.
"

Пример входа:
Ошибка: RuntimeError: This event loop is already running при вызове asyncio.run() внутри Jupyter Notebook.

Ожидаемый результат:
Объяснение, что в Jupyter уже есть запущенный event loop, и решение: использовать await main() вместо asyncio.run(main()) или nest_asyncio.apply().

Почему это работает: AI анализирует конкретный пример и даёт точное решение, а не общие советы.

4. Генерация Pydantic-схем из SQLAlchemy моделей

Когда использовать: Когда нужно быстро создать Pydantic-модели для API на основе существующих таблиц SQLAlchemy.

Промт:
"
У меня есть SQLAlchemy модель [код модели]. Сгенерируй Pydantic v2 схемы для создания, обновления и ответа. Используй ConfigDict с from_attributes=True. Добавь валидацию для полей: [список]. Учти, что поле id генерируется автоматически.
"

Пример входа:
Модель User с полями id, email, hashed_password, created_at.

Ожидаемый результат:
Три класса: UserCreate (email, password), UserUpdate (опциональные поля), UserResponse (id, email, created_at). С валидацией email через EmailStr.

Почему это работает: Промт учитывает версию Pydantic (v2) и особенности SQLAlchemy, что избавляет от несовместимостей.

5. Написание pytest-фикстур для асинхронных тестов

Когда использовать: Когда нужно протестировать асинхронные функции, но не хочется разбираться с настройкой pytest-asyncio.

Промт:
"
Напиши pytest-фикстуры для тестирования асинхронного FastAPI эндпоинта. Используй pytest-asyncio и httpx.AsyncClient. Создай фикстуру для тестовой базы данных SQLite in-memory, фикстуру для клиента и фикстуру для очистки данных между тестами. Приведи пример теста.
"

Пример входа:
Эндпоинт POST /users/ создаёт пользователя.

Ожидаемый результат:
Фикстуры db, client, clean_db и тест test_create_user, который проверяет статус 201 и наличие пользователя в БД.

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

6. Оптимизация SQL-запроса в SQLAlchemy

Когда использовать: Когда запрос тормозит из-за N+1 проблемы или отсутствия индексов.

Промт:
"
У меня есть SQLAlchemy запрос: [код]. Он выполняется медленно. Проанализируй его, найди проблему N+1 и предложи оптимизацию с использованием joinedload или selectinload. Покажи сгенерированный SQL и объясни разницу.
"

Пример входа:
Запрос, который загружает пользователей и их заказы в цикле.

Ожидаемый результат:
Использование options(joinedload(User.orders)) и объяснение, что это уменьшает количество запросов с N+1 до 1.

Почему это работает: Промт требует анализа и объяснения, что помогает понять причину медленной работы.

7. Создание кастомного middleware в FastAPI

Когда использовать: Когда нужно добавить логирование, CORS или аутентификацию на уровне приложения.

Промт:
"
Напиши кастомный middleware для FastAPI, который [функция]. Middleware должен быть асинхронным, добавлять заголовки к ответу и логировать время выполнения запроса. Приведи пример подключения через app.add_middleware.
"

Пример входа:
Middleware для добавления заголовка X-Process-Time.

Ожидаемый результат:
Класс ProcessTimeMiddleware с методом dispatch, который измеряет время и добавляет заголовок.

Почему это работает: Промт описывает конкретную функциональность, и AI генерирует корректный код с учётом асинхронности.

8. Валидация данных с помощью Pydantic

Когда использовать: Когда нужно проверить сложные входные данные (например, вложенные JSON) перед обработкой.

Промт:
"
Создай Pydantic-модель для валидации следующего JSON: [пример]. Требуется:
- Проверить, что поле email — валидный email.
- Поле age — целое число от 18 до 120.
- Поле tags — список строк, максимум 10 элементов.
- Использовать Field для описания и примеров.
"

Пример входа:
JSON: {"email": "user@example.com", "age": 25, "tags": ["python", "fastapi"]}

Ожидаемый результат:
Модель с полями EmailStr, conint(ge=18, le=120), List[str] = Field(max_items=10).

Почему это работает: Промт указывает конкретные ограничения, и AI генерирует точную модель.

9. Асинхронная работа с базой данных через asyncpg

Когда использовать: Когда нужно использовать asyncpg для высоконагруженных приложений.

Промт:
"
Напиши асинхронный код для работы с PostgreSQL через asyncpg: подключение, выполнение запроса, обработка ошибок, закрытие соединения. Используй пул соединений. Приведи пример с FastAPI.
"

Пример входа:
Нужно получить список пользователей из таблицы users.

Ожидаемый результат:
Код с asyncpg.create_pool, async with pool.acquire() as conn, обработкой asyncpg.PostgresError.

Почему это работает: AI знает синтаксис asyncpg и предлагает лучшие практики.

10. Оптимизация pandas: группировка и агрегация

Когда использовать: Когда нужно сделать сложную группировку с несколькими агрегациями.

Промт:
"
У меня есть DataFrame с колонками [список]. Нужно сгруппировать по [колонка] и вычислить [агрегации]. Напиши код с использованием groupby и agg, объясни, как работает multi-index. Приведи пример с реальными данными.
"

Пример входа:
Данные о продажах: groupby('category').agg({'sales': 'sum', 'quantity': 'mean'}).

Ожидаемый результат:
Код с df.groupby('category').agg(total_sales=('sales', 'sum'), avg_quantity=('quantity', 'mean')) и объяснением.

Почему это работает: Промт требует объяснения multi-index, что помогает понять структуру результата.

11. Написание документации к API с помощью Swagger

Когда использовать: Когда нужно автоматически сгенерировать OpenAPI документацию для FastAPI.

Промт:
"
У меня есть FastAPI приложение с эндпоинтами [список]. Настрой автоматическую генерацию документации Swagger с описанием, примерами и тегами. Добавь кастомные описания для каждого эндпоинта.
"

Пример входа:
Эндпоинты: GET /items, POST /items, GET /items/{id}.

Ожидаемый результат:
Код с app = FastAPI(title='My API', description='...'), параметрами tags, summary, response_description.

Почему это работает: AI знает, как кастомизировать Swagger в FastAPI.

12. Обработка исключений в asyncio.gather

Когда использовать: Когда нужно запустить несколько корутин параллельно и обработать ошибки.

Промт:
"
У меня есть несколько асинхронных задач, которые я запускаю через asyncio.gather. Нужно обработать исключения так, чтобы одна упавшая задача не останавливала остальные. Напиши код с return_exceptions=True и объясни, как потом проверить результаты.
"

Пример входа:
Три задачи: fetch_data(1), fetch_data(2), fetch_data(3).

Ожидаемый результат:
Код с results = await asyncio.gather(*tasks, return_exceptions=True) и проверкой isinstance(result, Exception).

Почему это работает: Промт точно описывает проблему, и AI даёт правильное решение.

13. Рефакторинг синхронного кода в асинхронный

Когда использовать: Когда есть синхронный код, который нужно перевести на async/await.

Промт:
"
Вот синхронный код: [код]. Перепиши его в асинхронный стиль с использованием async/await. Замени блокирующие вызовы (requests, time.sleep) на асинхронные аналоги (aiohttp, asyncio.sleep). Объясни изменения.
"

Пример входа:
Код с requests.get и time.sleep.

Ожидаемый результат:
Код с aiohttp.ClientSession и asyncio.sleep, объяснение, что блокирующие вызовы тормозят event loop.

Почему это работает: AI знает асинхронные аналоги популярных библиотек.

14. Создание кастомного декоратора для кэширования

Когда использовать: Когда нужно кэшировать результаты асинхронных функций.

Промт:
"
Напиши декоратор для кэширования результатов асинхронной функции с использованием functools.lru_cache и asyncio. Учти, что lru_cache не работает с async def. Предложи решение с кэшем на основе словаря и времени жизни.
"

Пример входа:
Функция async def get_data(url: str) -> dict.

Ожидаемый результат:
Декоратор async_cache с использованием dict и time.monotonic() для TTL.

Почему это работает: Промт указывает на проблему совместимости, и AI предлагает рабочее решение.

Заключение

Эти 14 промтов покрывают большинство ежедневных задач Python-разработчика, работающего с FastAPI, pandas и asyncio. Они не заменят глубокого понимания языка, но помогут быстрее находить решения и избегать типичных ошибок. Главное — адаптировать их под свой контекст и всегда проверять сгенерированный код.

Попробуйте применить хотя бы один из них в следующей задаче — и вы увидите, как сократится время на поиск информации. А если у вас есть свои любимые промты, делитесь ими в комментариях. Помните: AI — это инструмент, и его эффективность зависит от того, как вы его используете.

Источники:
- JetBrains Python Developers Survey 2023
- Официальная документация FastAPI (fastapi.tiangolo.com)
- Документация pandas (pandas.pydata.org)
- Документация asyncio (docs.python.org/3/library/asyncio.html)

← All posts

Comments