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

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

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

8 часов назад

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

Ответы

0

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

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

Плохой промпт 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 строк. Изолируйте:

# Вместо всего файла — только то что воспроизводит баг:
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")

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

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

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

твоё решение не помогло. вот новый стектрейс: было: 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 — нужен запуск под нагрузкой:

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

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

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

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

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% багов находится с первого-второго ответа.

8 часов назад

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

+7 800 100 22 47

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

+7 495 085 21 62

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

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