DeepSeek · Код

DeepSeek V3 для поиска и исправления ошибок в коде

DeepSeek V3 — самая дешёвая модель в FatherGPT: 2 токена за запрос. Для отладки это принципиально, потому что отладка редко решается одним вопросом: гипотеза, проверка, новый лог, следующая гипотеза. С дорогой моделью такой цикл жалко гонять, с DeepSeek V3 можно задать двадцать вопросов подряд и не заметить расхода.

Почему DeepSeek V3 подходит для этой задачи

Отладка отличается от написания кода тем, что здесь важна не элегантность решения, а скорость перебора версий. Вы приносите стектрейс, получаете три гипотезы, проверяете самую дешёвую, приносите новый лог, сужаете круг. Модель за 2 токена превращает это в бесплатный по сути разговор — на месячной подписке в 12 000 токенов помещается шесть тысяч таких обменов.

DeepSeek V3 уверенно читает стектрейсы и сообщения об ошибках популярных языков и фреймворков и хорошо ловит типовые причины: не то на что ожидалось значение, гонка при асинхронном вызове, потерянный await, неправильный порядок middleware, отсутствие обработки пустого ответа, смещение часового пояса при работе с датами. Значительная часть багов в продакшене — именно такие, и на них тратить дорогую модель незачем.

Ограничение честное: это не архитектурный консультант. Когда баг не в строке кода, а в устройстве системы — состояние размазано между сервисами, кеш живёт своей жизнью, событие приходит дважды из-за ретрая, — здесь полезнее модель посильнее. Разумная схема: DeepSeek V3 закрывает поток обычных багов, а на сложные случаи вы осознанно переключаетесь и платите больше.

Какие входные данные подготовить

Полный стектрейс или текст ошибки — целиком, без обрезания на первой строке. Нижняя часть трейса часто важнее верхней: там видно, кто вызвал.

Код места, где падает, плюс всё, что участвует: вызывающая функция, обработчик, конфиг. Одна функция в вакууме почти никогда не содержит причину.

Что ожидалось и что произошло на самом деле — конкретно, с входными данными, на которых воспроизводится.

Условия воспроизведения: всегда или иногда, только в проде или локально тоже, после какого изменения началось, зависит ли от нагрузки или времени суток.

Версии: язык, фреймворк, ключевые библиотеки, окружение. Половина странных ошибок объясняется мажорным обновлением зависимости.

Пошаговый процесс

Опишите баг как факт, а не как догадку

Плохой старт — почини авторизацию, тут что-то с токеном. Хороший — при запросе с истёкшим токеном возвращается 500 вместо 401, стектрейс такой, ожидалось такое. Если вы навязали модели свою гипотезу, она будет искать подтверждение ей, а не причину.

Требуйте гипотезы с проверкой, а не сразу патч

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

Прогоняйте цикл проверок

Добавили лог, получили значение, принесли обратно. Это ровно то, ради чего здесь дешёвая модель: три-четыре круга уточнений стоят меньше одного запроса к топовой модели. Каждый раз давайте новые данные, а не повторяйте вопрос теми же словами.

Получите минимальный фикс и объяснение причины

Правка должна быть точечной, с указанием файла и места, плюс одно предложение о том, почему баг вообще случился. Объяснение важнее кода: по нему вы поймёте, есть ли та же ошибка ещё в трёх местах проекта.

Закройте баг тестом

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

Пример готового промпта

Помоги найти причину бага. Не предлагай патч сразу — сначала гипотезы и способы их проверить.

Стек: [язык, версия, фреймворк, ключевые библиотеки с версиями]
Где выполняется: [локально / прод / CI]

Что должно происходить: [ожидаемое поведение]
Что происходит на самом деле: [фактическое поведение]
Воспроизводится: [всегда / иногда / только под нагрузкой / только в проде]
Началось после: [изменение, деплой, обновление зависимости, либо не знаю]

Ошибка или стектрейс целиком:
[вставить полностью, не обрезать]

Код, который участвует:
[вставить: место падения + вызывающий код + релевантный конфиг]

Что уже проверил и что это дало:
[список проверок и результатов, либо ничего не проверял]

Ответь так.

1. ЧТО ГОВОРИТ ТРЕЙС. Разбери стектрейс: где реально возникла ошибка, кто вызвал, какая строка виновата. Если верхняя строка трейса не является настоящим источником — скажи об этом прямо.

2. ГИПОТЕЗЫ. Три версии причины, от самой вероятной к менее вероятной. Для каждой: почему ты так думаешь, какие детали из моих данных это подтверждают, и что противоречит.

3. КАК ПРОВЕРИТЬ. Для каждой гипотезы — минимальная проверка на одну-две минуты: что залогировать, что вывести, какой запрос или команду выполнить, какое значение ожидать при подтверждении.

4. ЧЕГО МНЕ НЕ ХВАТАЕТ В ДАННЫХ. Какие логи, значения или куски кода нужно принести, чтобы сузить круг.

Не выдумывай содержимое функций и файлов, которых я не показал. Если для вывода нужен код, которого нет, — попроси его.

Последний абзац — против самой раздражающей привычки моделей: додумать реализацию невидимой функции и построить на этом уверенный диагноз. Когда причина подтвердилась, вторым запросом просите фикс: дай минимальную правку с указанием файла и места, объясни в одном предложении, почему баг возник, и напиши тест, который падает до правки и проходит после. Дробить на два шага дешевле, чем получать патч наугад.

Как проверить результат

Прогоните тест, который должен падать на старом коде. Если он проходит и до правки — вы починили не тот баг.

Проверьте, что фикс устраняет причину, а не гасит симптом. Обёртка в try-catch вокруг падающего вызова закрывает трейс, но данные продолжают портиться молча.

Поищите ту же ошибку в остальном коде: если причина в неверной обработке пустого ответа или потерянном await, такое место в проекте почти никогда не единственное.

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

Типичные ошибки

Прислать одну строку ошибки без трейса

Cannot read property of undefined без стектрейса и кода — это запрос угадать. Модель выдаст десять универсальных советов, ни один из которых не про ваш случай. Нужен полный трейс и код всех участников: где упало, кто вызвал, что настроено.

Принять предложенный код на веру

DeepSeek V3 может уверенно использовать метод, которого в вашей версии библиотеки нет, или параметр из соседнего фреймворка. Выглядит правдоподобно, падает при запуске. Любой фрагмент из ответа проверяйте по документации своей версии, особенно если он подозрительно удобен.

Требовать патч, минуя диагноз

Просьба просто исправь даёт правку, которая закрывает конкретный трейс. Через неделю тот же корень вылезает в другом обработчике, потому что причина была не в этой строке. Диагноз стоит те же 2 токена, а экономит повторную отладку.

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

Почему для отладки советуют самую дешёвую модель?

Потому что отладка — это не один ответ, а серия итераций. При 2 токенах за запрос вы можете позволить себе двадцать уточнений подряд, и именно частота обмена, а не сила одного ответа, чаще всего приводит к причине. На месячной подписке с 12 000 токенов это порядка шести тысяч запросов.

Когда стоит уйти на модель подороже?

Когда три-четыре круга гипотез не сузили круг, когда баг воспроизводится только под нагрузкой или только в проде, и когда причина явно в устройстве системы, а не в коде одного файла. Признак простой: если вам приходится объяснять модели взаимодействие нескольких сервисов, задача уже не для самой дешёвой модели.

Безопасно ли отправлять рабочий код?

Смотрите на свой регламент. Практическое правило: перед отправкой убирайте ключи, токены, пароли, строки подключения и персональные данные из примеров — на диагностику это не влияет, потому что модель ищет ошибку в логике, а не в значениях секретов. Замените их на плейсхолдеры.

Модель предложила несуществующий метод — что делать?

Это обычное дело при расхождении версий: модель помнит API нескольких мажорных релизов и может смешать их. Укажите точные версии библиотек прямо в промпте — в шаблоне выше для этого есть отдельная строка — и проверяйте любой незнакомый вызов по документации перед запуском.

Можно ли отлаживать в кабинете и в боте одновременно?

Да, баланс токенов общий. В кабинете app.fathergpt.ru удобнее работать с длинными трейсами и большими кусками кода, в боте @FatherGPTBot — быстро уточнить что-то с телефона. Расход считается из одного баланса, переключаться можно как удобно.

Модель DeepSeek V3 доступна в FatherGPT: без VPN, картой РФ, единый баланс токенов на все нейросети. Переключайтесь между моделями в одном чате — под каждую задачу своя.