Когда я впервые попробовал использовать ИИ для написания Python-кода, я думал, что это просто автодополнение. Но за несколько месяцев я превратил нейросети в полноценного напарника: они помогают мне поддерживать чистоту кода, разбирать легаси-монолит и выжимать максимум из продакшена. В этой статье я поделюсь 15 проверенными промтами, которые использую почти ежедневно. Они не только экономят часы, но и учат писать код, который не стыдно показать коллегам.
1. Чистый код с первого раза: системный промт для AI-ревью
Промт:
Ты — эксперт по Python и принципам чистой архитектуры. Проведи ревью следующего кода. Оцени: читаемость, соблюдение PEP 8, принципы SOLID, наличие дублирования и потенциальные уязвимости. Выдай результат в формате: [Проблема][Строка] -> [Рекомендация]. В конце перечисли, что сделано хорошо.
```python
[вставь код]
**Пример использования:**
```python
def process_data(data):
if data:
result = []
for i in data:
if i > 0:
result.append(i * 2)
return result
return []
Результат: нейросеть укажет, что можно использовать list comprehension, что имя i неинформативно, и что пустая проверка лишняя. Рекомендация: [positive * 2 for positive in data if positive > 0].
Почему работает: задавая чёткие критерии и формат ответа, вы получаете структурированный фидбек, а не общие слова.
2. Рефакторинг легаси: превращаем спагетти-код в понятные модули
Промт:
Передо мной унаследованный код на Python. Разбей его на логические модули, следуя принципам модульности. Предложи структуру файлов и имена функций. Если нужно, создай dataclass или используй enum. Объясни каждое решение. Код: [вставь]
Пример:
# легаси
import json
def handle(request):
if request.method == 'POST':
data = json.loads(request.body)
if data.get('type') == 'user':
# 20 строк обработки
elif data.get('type') == 'order':
# 30 строк обработки
Результат: AI предложит разделить на handlers/user_handler.py и handlers/order_handler.py, использовать паттерн Strategy.
3. Профилирование без боли: find bottlenecks
Промт:
Ниже код, который выполняется медленно. Определи узкие места, используя профилирование в уме. Предложи оптимизации (алгоритмические, использование стандартных библиотек, кэширование). Для каждой оптимизации дай ожидаемый прирост скорости и пример кода.
```python
[вставь]
**Пример:**
```python
def find_duplicates(items):
duplicates = []
for i in range(len(items)):
for j in range(i+1, len(items)):
if items[i] == items[j]:
duplicates.append(items[i])
return duplicates
Результат: AI предложит использовать set для поиска дубликатов за O(n), и пример:
def find_duplicates(items):
seen = set()
duplicates = set()
for item in items:
if item in seen:
duplicates.add(item)
else:
seen.add(item)
return list(duplicates)
4. Асинхронный Python: переходим на asyncio без страха
Промт:
Перепиши этот синхронный код на асинхронный с использованием asyncio и aiohttp. Учти тайм-ауты, обработку ошибок и отмену задач. Объясни, почему такая структура эффективнее.
```python
[вставь]
**Пример:**
```python
import requests
def fetch_pages(urls):
results = []
for url in urls:
results.append(requests.get(url).text)
return results
Результат: AI даст код с asyncio.gather, aiohttp.ClientSession, а также предупредит о необходимости await asyncio.sleep(0) для контроля.
5. Пишем юнит-тесты, которые не бесят
Промт:
Сгенерируй набор юнит-тестов для функции [описание] с использованием pytest. Покрой нормальные случаи, граничные значения и исключения. Тесты должны быть изолированы и не зависеть от внешних ресурсов. Используй monkeypatch и фикстуры.
Функция: [вставь]
Пример:
def divide(a, b):
if b == 0:
raise ValueError("На ноль делить нельзя")
return a / b
Результат: AI сгенерирует тесты с pytest.raises, параметризацией для разных значений и фикстурой для настройки.
6. Безопасность: ищем дыры до хакеров
Промт:
Проведи аудит безопасности этого Python-кода. Ищи: SQL-инъекции, XSS-уязвимости, небезопасное использование pickle, незакрытые ресурсы. Для каждой найденной проблемы предложи исправление с примером кода.
```python
[вставь]
**Пример:**
```python
import sqlite3
def get_user(username):
conn = sqlite3.connect("db.db")
cursor = conn.execute(f"SELECT * FROM users WHERE username = '{username}'")
return cursor.fetchone()
Результат: AI укажет на SQL-инъекцию и предложит использовать параметризованный запрос: cursor.execute("SELECT * FROM users WHERE username = ?", (username,)).
7. Генерация документации из docstring
Промт:
Создай документацию для следующего модуля/функции в формате Sphinx (reStructuredText). Включи описание параметров, возвращаемых значений, исключений и пример использования. Используй docstring в стиле Google или NumPy.
```python
[вставь]
**Пример:**
```python
def add(a, b):
"""Складывает два числа."""
return a + b
Результат: AI сгенерирует .rst файл с автодокументацией и примером.
8. Функциональное программирование: map, filter, reduce как профи
Промт:
Перепиши следующий императивный код в функциональном стиле, используя map, filter, reduce и lambda. Объясни, как каждый шаг работает.
```python
[вставь]
**Пример:**
```python
numbers = [1, 2, 3, 4, 5]
squared = []
for n in numbers:
if n % 2 == 0:
squared.append(n**2)
Результат: AI предложит list(map(lambda x: x**2, filter(lambda x: x % 2 == 0, numbers))) и пояснит.
9. Работа с pandas: эффективно и без боли
Промт:
Дан DataFrame pandas. Выполни операцию [описание] наиболее эффективным способом. Избегай циклов, используй векторизацию. Если нужно, примени groupby, merge или pivot_table. Покажи код и объясни.
Данные: [описание структуры]
Пример:
| name | sales | region |
|---|---|---|
| A | 100 | West |
| B | 200 | East |
Результат: AI покажет, как сгруппировать по региону и посчитать сумму продаж.
10. Работа с датами и временем: timezone, timedelta
Промт:
Напиши функцию для расчёта разницы между двумя датами в часах с учётом часовых поясов. Используй модуль datetime и zoneinfo. Учти переход на летнее время. Добавь обработку ошибок для некорректных дат.
```python
[вставь]
**Пример:**
```python
from datetime import datetime
from zoneinfo import ZoneInfo
def hours_between(d1, tz1, d2, tz2):
# TODO
Результат: AI создаст функцию, конвертирующую обе даты в UTC и вычисляющую разницу.
11. Работа с файлами: чтение/запись больших данных
Промт:
Прочитай большой файл (например, CSV размером 1 ГБ) без загрузки в память. Обработай каждую строку и запиши результат в новый файл. Используй генераторы и контекстный менеджер. Покажи код.
```python
[вставь]
**Пример:**
```python
with open('huge.csv') as f:
for line in f:
process(line)
Результат: AI предложит использовать csv.reader и csv.writer, а также буферизацию.
12. Обработка ошибок: пишем надёжный код
Промт:
Оберни следующий код в try-except, обработай все возможные исключения, включая пользовательские. В блоке except выведи информацию об ошибке в лог, но не прерывай выполнение. Предложи, как улучшить надёжность.
```python
[вставь]
**Пример:**
```python
import requests
response = requests.get('https://api.example.com')
data = response.json()
Результат: AI предложит обработать requests.RequestException, json.JSONDecodeError и добавить try-except с логированием.
13. Работа с базами данных: ORM vs SQL
Промт:
Сравни подходы SQLAlchemy ORM и сырых SQL-запросов для следующей задачи: [описание]. Дай примеры кода для обоих способов и обоснуй, когда что использовать.
```python
[вставь]
**Результат:** AI покажет, как сделать запрос через ORM и через raw SQL, и объяснит компромиссы.
---
## 14. Работа с API: создаём клиент с retry
**Промт:**
```text
Создай Python-клиент для API [описание эндпоинтов]. Добавь: повторные попытки при сетевых ошибках, экспоненциальную задержку, тайм-ауты и обработку статус-кодов. Используй библиотеку requests или httpx.
```python
[вставь]
**Результат:** AI сгенерирует класс с методом `_request`, где есть retry с помощью `tenacity` или вручную.
---
## 15. Оптимизация циклов: убираем лишнее
**Промт:**
```text
Оптимизируй этот цикл, убрав ненужные операции, используя локальные переменные, избегая повторных вызовов методов. Покажи замеры времени до и после с помощью timeit.
```python
[вставь]
**Пример:**
```python
def process(items):
result = []
for item in items:
if item > 10:
result.append(item * 2)
return result
Результат: AI покажет, что можно использовать result.append(item * 2) напрямую, убрать if если не нужно, и т.д.
16. Пишем генераторы для потоковой обработки
Промт:
Перепиши эту функцию как генератор, чтобы она не создавала список целиком, а выдавала элементы по одному. Объясни, как это экономит память.
```python
[вставь]
**Пример:**
```python
def squares(n):
result = []
for i in range(n):
result.append(i**2)
return result
Результат: AI предложит yield.
17. Декораторы: добавляем функциональность без боли
Промт:
Напиши декоратор для замера времени выполнения функции. Он должен логировать имя функции и время в секундах. Примени его к функции [пример]. Объясни, как это работает.
```python
[вставь]
**Результат:** AI создаст декоратор с `functools.wraps` и пример использования.
---
## 18. Работа с многопоточностью и GIL
**Промт:**
```text
Объясни, почему для CPU-интенсивных задач в Python лучше использовать multiprocessing, а не threading. Покажи пример, как распараллелить вычисления с помощью concurrent.futures.ProcessPoolExecutor.
```python
[вставь]
```
Результат: AI объяснит GIL и даст пример.
Финальные мысли
Эти промты — не догма, а отправная точка. Я заметил, что чем конкретнее я описываю задачу, тем лучше результат. Не бойтесь экспериментировать: добавляйте свои контексты, примеры и ограничения. ИИ — это инструмент, который усиливает ваши навыки, но не заменяет их. Со временем вы научитесь задавать правильные вопросы и получать именно то, что нужно.
Если у вас есть свои любимые промты для Python — делитесь в комментариях, я всегда ищу новые идеи!
Комментарии