Как перестать терять куски кода в ChatGPT: проверенный подход для Python-разработчиков
Я каждый день использую вайб-кодинг на Python для автоматизации своих рабочих процессов. Обычно это простые программы на 300-500 строк кода с подключением API одной из нейросетей. И всё бы хорошо, но регулярно я сталкиваюсь с проблемой:
После 10–15 сообщений в чате GPT начинает ломать ранее работающие части скрипта. Причем ломает даже продвинутая o3 модель.
Например, прошу добавить простейший прогресс-бар в консоль, а модель вдруг переписывает половину рабочей логики и стирает важные функции. Меня это откровенно раздражает.
Решение, которое я нашёл на практике
Когда пишу даже самую мелкую доработку, обязательно добавляю в конце промпта инструкцию вроде такой:
Прошу озаглавь и пронумеруй секции в скрипте, делай краткие комментарии, поясняющие назначение каждой секции. В начале скрипта коротко опиши его назначение и принцип работы.
Формулировка может быть разной, но смысл один и тот же:
- В скрипте нумеровать и озаглавливать секции
- Делать краткие пояснения в каждой секции скрипта
- Держать краткое описание работы кода в начале файла
Почему это работает?
Такой подход удерживает ChatGPT в тонусе: комментарии и нумерация работают как встроенный промпт внутри самого скрипта, благодаря чему модель всегда «помнит» контекст, и перестаёт случайно удалять нужные функции.
Особенно это хорошо работает, когда нужно дописать скрипт месячной давности, вы открываете старый чат и нужно убедиться, что точно все не забудет.
Практический пример
Сегодня я вернулся к месячной давности чату, чтобы улучшить старый скрипт для сортировки файлов. Добавил в запрос такую инструкцию - и GPT моментально вспомнил логику и дополнил код, ничего не поломав и не удалив.
Расширенный подход для больших скриптов
Когда скрипт становится очень большим, использую детализированную инструкцию:
- В начале скрипта добавляю краткое описание в виде многострочного комментария: для чего предназначен этот скрипт и как он работает.
- Разбиваю код на логические секции.
- Каждую секцию озаглавливаю коротким комментарием с её номером и назначением (например, # 1. Импорт библиотек, # 2. Загрузка данных и т.д.)
- Внутри каждой секции пишу краткие однострочные комментарии к ключевым операциям - так будет понятно, зачем написан тот или иной блок
- Соблюдаю единый стиль нумерации секций и оформления комментариев на всём протяжении кода.
- Не пропускаю ни один из перечисленных шагов.
Почему это работает?
К этому подходу я пришёл благодаря ежедневной практике. Мои исследования чётко показывают, почему это работает и на каких принципах основано:
Ключевые принципы эффективности
- Снижение нагрузки на модель: Чётко структурированный запрос разбивает большую задачу на небольшие части, снижая вероятность что-то упустить.
- Фокусировка внимания: Нумерация и комментарии в коде вынуждают модель постоянно отслеживать структуру и контекст, поэтому она не теряет важные детали.
- Контроль охвата: Прямое указание на структурирование уменьшает «дрейф» внимания модели и не позволяет ей уходить в ненужные изменения.
Теоретические концепции метода
- Explicit Task Decomposition (явная декомпозиция задач) - разбиение задачи на мелкие шаги делает её более выполнимой.
- Instruction-based Prompting (инструкция-центрированный промптинг) - чем подробнее инструкция, тем выше качество и повторяемость результата.
Лайфхаки для тех, кто пишет десятки мелких скриптов
Когда задач много, через неделю уже легко забыть, для чего и как конкретно работает тот или иной скрипт. Я делаю так:
В папке каждого скрипта храню короткий FAQ-файл, где описано:
- Что делает скрипт.
- Как им пользоваться.
- Ссылка на чат с GPT, в котором я его разрабатывал.
FAQ естественно пишет сам GPT. Ссылка на чат нужна, т.к. в самом GPT сложно будет искать, когда каждый день создаешь 30+ чатов.
Заключение
В результате, я получил структурированные комментарии и нумерация секций - это простой, но мощный способ сохранить контекст в длинных диалогах с GPT и избежать потери рабочего кода. Рекомендую вам попробовать этот способ и убедиться на практике, что он работает.