/
Вопросы и ответы
/
Вайбкодинг
/

Как отлаживать код с помощью ИИ?

Как отлаживать код с помощью ИИ?

3 месяца назад

Никита Вихров

Ответы

0

Как отлаживать код с помощью ИИ

Отладка с ИИ работает в разы быстрее, если давать модели факты, а не симптомы.

Плохой промпт vs хороший

Плохо:

1
мой код не работает, почини

Хорошо:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
функция 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 для несуществующего пользователя.

Шаблон отладочного промпта

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## Проблема
[одно предложение что происходит]

## Код
[минимальный воспроизводящий пример]

## Ошибка / стектрейс
[полный текст ошибки]

## Входные данные
[при каких данных воспроизводится]

## Ожидал vs получил
[конкретные значения]

## Уже пробовал
[что не помогло]

Техника «объясни построчно»

Когда не понимаете почему код ведёт себя именно так:

1
2
3
4
5
6
7
8
объясни этот код построчно. особенно что происходит
с переменной 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 часто сам замечает проблему.

Добавление логов через ИИ

Когда непонятно где именно ломается:

1
2
3
4
5
6
7
8
добавь подробное логирование в эту функцию через 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 строк. Изолируйте:

1
2
3
4
5
6
7
8
9
# Вместо всего файла — только то что воспроизводит баг:
from decimal import Decimal
from app.services.pricing import calculate_total

items = [OrderItem(price=Decimal("9.99"), quantity=3)]
user = User(tier="premium")

result = calculate_total(items, user)
print(result)  # None, ожидал Decimal("26.97")

При изоляции баг часто находится сам.

Итерация в одном диалоге

Не открывайте новый чат при каждой попытке:

1
2
3
4
5
6
7
твоё решение не помогло. вот новый стектрейс:

было: 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 — нужен запуск под нагрузкой:

1
2
3
pytest tests/ -n 4  # pytest-xdist для параллельных тестов
# или
locust -f locustfile.py --headless -u 100 -r 10

Утечки памяти — нужен профайлер:

1
2
3
4
5
python -m memory_profiler script.py
# или в коде:
from memray import Tracker
with Tracker("output.bin"):
    my_function()

Баги окружения — сначала проверьте сами:

1
2
3
pip freeze | grep -E "sqlalchemy|fastapi|pydantic"
python --version
printenv | grep DATABASE_URL

Для таких случаев спрашивайте «как использовать profiler», а не «найди баг».

Модели для отладки

  • Claude Sonnet — хорош для Python, JS, Go. Хорошо читает стектрейсы
  • GPT-4o — сильный в многофайловом контексте
  • Claude Opus / GPT-4 — для запутанных случаев с большим кодом, когда Sonnet не справляется

Если коротко: код + стектрейс + входные данные в одном промпте — и 80% багов находится с первого-второго ответа.

3 месяца назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845