Как отлаживать код с помощью ИИ?
8 часов назад
Никита Вихров
Ответы
Как отлаживать код с помощью ИИ
Отладка с ИИ работает в разы быстрее, если давать модели факты, а не симптомы.
Плохой промпт vs хороший
Плохо:
мой код не работает, почини
Хорошо:
функция process_payment() падает с AttributeError.
код:
def process_payment(amount: float, user_id: int):
user = db.get_user(user_id)
if user.balance >= amount:
user.balance -= amount
return Payment(amount=amount, status="success")
стектрейс:
AttributeError: 'NoneType' object has no attribute 'balance'
File "payments.py", line 3, in process_payment
входные данные: amount=100, user_id=99999
ожидал: Payment(amount=100, status="success")
Claude найдёт баг с первого ответа: db.get_user() вернул None для несуществующего пользователя.
Шаблон отладочного промпта
## Проблема
[одно предложение что происходит]
## Код
[минимальный воспроизводящий пример]
## Ошибка / стектрейс
[полный текст ошибки]
## Входные данные
[при каких данных воспроизводится]
## Ожидал vs получил
[конкретные значения]
## Уже пробовал
[что не помогло]
Техника «объясни построчно»
Когда не понимаете почему код ведёт себя именно так:
объясни этот код построчно. особенно что происходит
с переменной result на каждом шаге:
async def get_user(user_id: int, db: AsyncSession):
result = await db.execute(
select(User).where(User.id == user_id)
)
return result.scalar_one_or_none()
В процессе объяснения Claude часто сам замечает проблему.
Добавление логов через ИИ
Когда непонятно где именно ломается:
добавь подробное логирование в эту функцию через structlog.
хочу видеть значения на каждом шаге:
def calculate_total(items: list[OrderItem], user: User) -> Decimal:
subtotal = sum(item.price * item.quantity for item in items)
discount = get_discount(user.tier)
tax = subtotal * Decimal("0.2")
return subtotal - discount + tax
Запустите с логами, покажите вывод — дальше диагноз точный.
Минимальный воспроизводящий пример
Не вставляйте 500 строк. Изолируйте:
При изоляции баг часто находится сам.
Итерация в одном диалоге
Не открывайте новый чат при каждой попытке:
твоё решение не помогло. вот новый стектрейс:
было: AttributeError: 'NoneType'...
стало: TypeError: unsupported operand type(s) for *: 'int' and 'decimal.Decimal'
строка: subtotal = sum(item.price * item.quantity for item in items)
item.price = Decimal("9.99"), item.quantity = 3 (int)
Claude видит весь предыдущий контекст и не будет предлагать то, что уже не сработало.
Какие баги ИИ не найдёт
Race conditions — нужен запуск под нагрузкой:
Утечки памяти — нужен профайлер:
Баги окружения — сначала проверьте сами:
Для таких случаев спрашивайте «как использовать profiler», а не «найди баг».
Модели для отладки
- Claude Sonnet — хорош для Python, JS, Go. Хорошо читает стектрейсы
- GPT-4o — сильный в многофайловом контексте
- Claude Opus / GPT-4 — для запутанных случаев с большим кодом, когда Sonnet не справляется
Если коротко: код + стектрейс + входные данные в одном промпте — и 80% багов находится с первого-второго ответа.
8 часов назад
Никита Вихров