Введение
Каждый разработчик сталкивается с багами — это неизбежная часть работы. Но разница между junior и senior инженером часто заключается в подходе к отладке. Умение быстро локализовать проблему, анализировать логи и формулировать правильные вопросы — ключевые навыки. С ростом популярности AI-ассистентов (например, ChatGPT, Claude или Gemini) появился новый инструмент: промты для отладки. В этой статье я собрал 10 промтов, которые помогут вам быстрее находить и исправлять ошибки в коде — от простых синтаксических до сложных логических. Подборка основана на моём опыте работы с микросервисной архитектурой и рекомендациях из документации OpenAI (Best practices for prompt engineering) и Google (набор промтов для Gemini).
Как работают промты для отладки
Промт (от англ. prompt — подсказка) — это запрос к AI-модели, который задаёт контекст и ожидаемый формат ответа. Для отладки важно указывать: версию языка, фреймворка, тип ошибки, пример кода и ожидаемое поведение. Чем детальнее запрос, тем точнее ответ. Исследования показывают, что структурированные промты повышают точность ответов на 30-40% (данные из статьи "Prompt Engineering Guide" за 2025 год).
10 промтов для отладки и поиска багов
1. Базовый: Анализ ошибки компиляции
Задача: AI объясняет ошибку компиляции или интерпретации.
Промт: "У меня есть ошибка: TypeError: unsupported operand type(s) for +: 'int' and 'str'. Вот код: print(5 + '10'). Объясни причину и предложи 3 способа исправить."
Пример использования: Копируете ошибку из консоли и вставляете в промт. AI вернёт: "Ошибка возникает из-за попытки сложить число и строку. Исправления: 1) преобразовать строку в число: print(5 + int('10')); 2) преобразовать число в строку: print(str(5) + '10'); 3) использовать f-строку: print(f'{5}10')." Это экономит время на поиск в документации.
2. Продвинутый: Поиск логической ошибки
Задача: AI находит ошибку в алгоритме.
Промт: "Функция должна возвращать сумму чётных чисел из списка, но возвращает неверный результат. Код:
def sum_even(numbers):
total = 0
for num in numbers:
if num % 2 == 0:
total += num
return total
Тест: print(sum_even([1, 2, 3, 4])) возвращает 6, а должно быть 6. Ошибки нет? Проверь на [0, 2, 0]."
Пример использования: AI заметит, что код корректен, но укажет на потенциальную проблему с нулями (0 % 2 == 0, поэтому сумма будет 2). Это учит внимательности.
3. Экспертный: Анализ логов
Задача: AI интерпретирует стек-трейс.
Промт: "Вот лог ошибки из production-сервера (Python, Django):
File "/app/views.py", line 45, in get_user_data
user = User.objects.get(id=user_id)
DoesNotExist: User matching query does not exist.
Что пошло не так? Предложи 3 варианта обработки этой ошибки (try-except, get_object_or_404, логирование). Укажи, какой вариант лучше для REST API."
Пример использования: AI объяснит, что запись не найдена, и предложит использовать get_object_or_404 для возврата 404 ошибки, а также советует добавить логирование уровня ERROR для отслеживания.
4. Базовый: SQL-запросы
Задача: AI исправляет SQL-запрос.
Промт: "Запрос: SELECT * FROM orders WHERE date = '2026-01-01'; не возвращает данные, хотя записи есть. Таблица содержит поле created_at типа TIMESTAMP. В чём проблема? Исправь."
Пример использования: AI укажет на несоответствие типов: поле created_at хранит дату и время, а сравнение идёт только по дате. Предложит: SELECT * FROM orders WHERE DATE(created_at) = '2026-01-01'; или WHERE created_at >= '2026-01-01' AND created_at < '2026-01-02';.
5. Продвинутый: Асинхронный код
Задача: AI находит deadlock.
Промт: "Код на asyncio зависает. Вот фрагмент:
import asyncio
async def task1():
await asyncio.sleep(1)
return 'done'
async def main():
result = await task1()
print(result)
asyncio.run(main())
Почему он работает? Добавь ситуацию, когда возникает deadlock (например, с блокировками).
Пример использования: AI объяснит, что код корректен, но deadlock может возникнуть при использовании asyncio.Lock без освобождения. Предложит пример с ошибкой и исправление.
6. Экспертный: Оптимизация производительности
Задача: AI анализирует медленный код.
Промт: "Функция обрабатывает список из 10 000 записей за 5 секунд. Нужно ускорить. Код:
def process(data):
result = []
for item in data:
if item['status'] == 'active':
result.append(item['value'] * 2)
return result
Использую Python 3.12. Предложи оптимизацию с list comprehension и профилированием."
Пример использования: AI предложит заменить цикл на [item['value'] * 2 for item in data if item['status'] == 'active'] и добавит использование timeit для замера. Также может рекомендовать использовать NumPy для численных данных.
7. Базовый: Регулярные выражения
Задача: AI исправляет regex.
Промт: "Regex для поиска email: [a-zA-Z0-9]+@[a-zA-Z]+\.[a-z]{2,}. Почему он не находит test.user+tag@company.co.uk? Исправь."
Пример использования: AI объяснит, что текущий regex не поддерживает точки, плюсы и многоуровневые домены. Предложит: [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}.
8. Продвинутый: Тестирование
Задача: AI генерирует тесты.
Промт: "Напиши 5 unit-тестов для функции is_prime(n) на pytest. Учти граничные случаи: 0, 1, 2, отрицательные числа, большие простые числа (например, 7919). Код функции:
python
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True"
Пример использования: AI вернёт тесты с pytest.mark.parametrize, проверяющие корректность для всех граничных случаев, включая тест на производительность.
9. Экспертный: Безопасность
Задача: AI находит уязвимость.
Промт: "Код на Flask принимает запрос: name = request.args.get('name') и выводит Hello, {name}. В чём уязвимость? Как исправить? Укажи CWE-79."
Пример использования: AI укажет на XSS (Cross-Site Scripting, CWE-79) и предложит использовать escape() из markupsafe или render_template с автоэкранированием.
10. Базовый: Типичные ошибки новичков
Задача: AI объясняет частые ошибки.
Промт: "Я новичок в Python. Что не так с этим кодом? my_list = [1, 2, 3]; my_list[3] = 4. Объясни и исправь."
Пример использования: AI объяснит, что индексация начинается с 0, и my_list[3] вызовет IndexError. Исправление: my_list.append(4) или my_list[2] = 3.
Заключение
Промты — это не магия, а инструмент, который ускоряет отладку, если правильно формулировать запросы. Начните с базовых примеров из этой статьи, а затем адаптируйте их под свой стек. Помните: лучший debugger — это ваш мозг, а AI лишь помощник. Если хотите глубже изучить тему, рекомендую прочитать официальную документацию по промпт-инжинирингу от OpenAI и Google. Пишите в комментариях, какие баги вы чаще всего ищете с помощью AI — обсудим!
Комментарии