Как найти ошибку в коде с помощью ChatGPT

admin
• ChatGPT • статья

Когда программа падает, хочется скопировать код в ChatGPT и написать: «Исправь». Иногда это срабатывает. Но намного чаще нейросеть начинает угадывать причину и предлагает изменение, которое устраняет симптом или вообще создает новую проблему.

Чтобы ChatGPT действительно помогал с отладкой, нужно давать ему контекст.

Шаг 1. Сохраните полный текст ошибки

Не отправляйте только последнюю строку.

Traceback, stack trace или лог часто показывает путь до места, где возникла проблема.

Хороший запрос:

«Ниже полный traceback и функция. Объясни, где возникла ошибка и какая строка ее вызвала. Код пока не меняй».

Сначала стоит понять проблему.

Шаг 2. Опишите ожидаемое поведение

Код может работать без исключения и при этом делать не то, что нужно.

Напишите:

«Функция должна возвращать список уникальных клиентов по email, но сейчас оставляет дубли. Вот пример входа и ожидаемого выхода».

Примеры входа и выхода часто важнее длинного описания.

Шаг 3. Укажите окружение

Для ошибок библиотек нужно указать:

язык;

версию;

фреймворк;

версию библиотеки;

операционную систему, если она важна.

Например:

«Python 3.12, pandas 2.x».

Это снижает риск получить совет для старого API.

Шаг 4. Покажите минимальный код

Не всегда стоит отправлять весь проект.

Полезнее выделить минимальный воспроизводимый пример:

данные;

функцию;

вызов;

ошибку.

Так ChatGPT легче понять причинно-следственную связь.

Шаг 5. Попросите объяснить причину

Не начинайте с исправления.

Запрос:

«Перечисли три возможные причины и ранжируй их по вероятности на основе traceback. Для каждой скажи, как проверить».

Это заставляет отделить диагностику от изменения кода.

Шаг 6. Просите минимальное исправление

Когда причина понятна:

«Предложи минимальное изменение, которое исправляет ошибку. Не меняй архитектуру и другие функции».

Так меньше риск получить огромный переписанный файл.

Шаг 7. Попросите тест

После исправления:

«Напиши тест, который воспроизводит эту ошибку до исправления и проходит после него».

Это особенно ценно. Ошибка становится зафиксированной в тестовой базе.

Пример с TypeError

Плохой запрос:

«TypeError, исправь».

Хороший:

«Python 3.12. Функция суммирует значения amount. Иногда amount приходит None, после чего появляется TypeError. Вот функция и traceback. Объясни причину, предложи два способа обработки и сравни их».

Пример с JavaScript

«React. После обновления state компонент иногда показывает старое значение. Вот компонент. Объясни, связано ли это с асинхронным обновлением state или другой причиной. Не переписывай компонент полностью».

Так нейросеть получает конкретную гипотезу, но все равно должна проверить код.

Логическая ошибка

Особенно сложно, когда исключения нет.

Например:

«Функция рассчитывает скидку. Для заказа 10 000 рублей ожидается 9000, но получается 8500. Вот правила скидки и код. Проследи вычисление пошагово».

Пошаговый tracing помогает найти место расхождения.

Ошибка в SQL

Передайте:

схему;

запрос;

ошибку;

ожидаемый результат.

«PostgreSQL. Запрос дублирует строки после JOIN. Вот таблицы и пример данных. Объясни, какой JOIN создает multiplicative effect».

Ошибка API

Важно дать:

HTTP-код;

тело ответа;

endpoint;

часть запроса без секретов.

Никогда не отправляйте API-ключ.

Если ChatGPT предлагает странное решение

Можно ответить:

«Не уверен, что это исправление корректно. Какие побочные эффекты оно может вызвать? Предложи способ проверить».

Или:

«Покажи более локальное решение».

Не нужно автоматически принимать первый вариант.

Просите сравнить варианты

Иногда существует несколько исправлений:

«Сравни проверку на None в вызывающем коде и обработку внутри функции. Где правильнее разместить защиту с точки зрения контракта функции?»

Так ChatGPT становится участником технического обсуждения.

Используйте git diff

Если изменение получилось большим:

«Ниже diff. Проверь, нет ли изменений поведения вне исправляемой ошибки».

Это помогает заметить ненужные правки.

Отладка производительности

Медленная программа — тоже проблема.

Но вместо «ускорь код»:

«Этот участок занимает 80% времени по профилировщику. Вот данные. Предложи три оптимизации и укажи, какую проверить первой».

Измерения важнее предположений.

Ошибки памяти

Если процесс потребляет слишком много RAM:

«Вот код и размер данных. Объясни, где создаются копии больших структур и какие измерения помогут подтвердить проблему».

Ошибки конкурентности

Race condition особенно опасны для генеративных советов. Здесь нужно описывать последовательность событий и обязательно проверять решение самостоятельно.

Что нельзя отправлять

Перед публикацией кода удаляйте:

пароли;

ключи API;

токены;

данные пользователей;

закрытые адреса инфраструктуры;

секреты окружения.

Для диагностики почти всегда можно заменить их заглушками.

Почему ChatGPT может ошибиться

Нейросеть видит только тот контекст, который вы дали.

Она может принять следствие за причину, предложить устаревший API или пропустить проблему в соседнем модуле.

Поэтому ответ — это гипотеза, которую нужно проверить.

Универсальный промт

«Язык и версия: [данные].

Ожидаемое поведение: [описание].

Фактическое поведение: [описание].

Ошибка: [полный текст].

Код: [фрагмент].

Сначала объясни причину и способ проверки. После этого предложи минимальное исправление и тест».

Эта структура подходит большинству задач.

Частые вопросы

#Нужно ли отправлять весь проект?

Обычно нет. Начните с минимального воспроизводимого примера.

#Может ли ChatGPT исправить любую ошибку?

Нет. Часто проблема зависит от окружения или кода, которого модель не видит.

#Стоит ли копировать исправление сразу?

Нет. Сначала понять, затем протестировать.

#Полезен ли traceback?

Да. Это один из самых важных источников контекста.

Итог

Главный секрет поиска ошибок через ChatGPT — не просить угадывать. Передайте симптомы, окружение, код и ожидаемый результат. Попросите сначала поставить диагноз, а затем предложить небольшое проверяемое изменение.




Нет комментариев. Ваш будет первым!
Загрузка...