Этот пост для тех, кто пытается писать свои скрипты для автоматизации работы. Делюсь граблями и, возможно, приемом для снижения числа грабель.
Как я недавно выяснил, я писал свои скрипты неправильно. Обычно я действовал так: 1. Пишу запрос, типа: "Напиши мне Python-скрипт, который делает то-то и то-то. А еще вот это, это и это". 2. Дипсик мне чего-нибудь выкатывает, я пробегаю глазами по коду, если похоже на то, что я хотел, вставляю в VS Code, запускаю, поехали. 3. Если вылазят какие-то ошибки (а они обязательно вылазят), я скидываю лог ошибки, Дипсик думает, выдвигает версию, и пишет что-то в духе - ну вот теперь-то 200% заработает. 4. Снова запускаю, что-то начинает работать, что-то перестает, и дальше начинается тяни-толкай - дипсик правит одни две ошибки, но во время правок сносит логику других функций и появляются другие две ошибки.
В эту игру можно играть долго и каждый раз Дипсик авторитетно заявляет: "Ну вот сейчас я ВАЩЕ ВСЁ-ВСЁ-ВСЁ учел и стопудово заработает". Ты снова запускаешь код, и он опять минут через 1-5-15-40 выбрасывает ошибку.
Когда мой заказчик начал мне описывать, как фанаты ИИ часами гоняются за линией горизонта за шансом ухватить версию работающего кода, глядя на обещания ИИ — я узнал себя. В том же разговоре клиент и сказал, что реализовать тот или иной алгоритм программно - нет никаких проблем, с этим справится junior-разработчик.
Проблема написать работающий код в другом — нужно вокруг программной реализации алгоритма и «идеального сценария его использования» (happy path) написать кучу сценариев, когда что-то идет не по плану или выбивается из идеального сценария — а это уже 95% оставшегося кода.
При таком раскладе, получается, что сначала ты должен с ИИ проговорить основную логику, потом подолгу обсуждать всякие запасные варианты развития событий, и только тогда уже давать команду на выкатывание кода.
Как это выглядит? Пишу промпт в духе: 1. Хочу Python-скрипт, который делает то-то и то-то (далее пошаговый идеальный алгоритм). 2. Проанализируй предложенную реализацию алгоритма, выяви слабые и спорные места, и предложи к нему оптимизации. 3. Никогда не выводи код, пока не прояснишь все уточняющие вопросы. Код выводи только после моей команды "Выводи полный код".
И вот там уже начинается нудный допрос со стороны ИИ (примеры из обсуждения скрипта для дедупликации книг в библиотеке):
- Хэширование текста без полного извлечения — принципиально ли это? Предлагаю такую-то реализацию. Согласен?
- Что значит «уникальный файл»?
- Где живет индекс? Как скрипт узнаёт, что файл «новый»?
- Что если имя файла уже содержит [Число_страниц]_? Убирать старый префикс и ставить новый? Или оставлять как есть?
- По твоему правилу выживает PDF (он в LIB), а EPUB удаляется. Это правильно? Или всё-таки EPUB должен выжить, потому что он более редактируемый?
- Дубликаты внутри LIB тоже идут в _duplicates, а не в _trash?
И вопросы подобные этим идут бесконечным (как кажется) потоком. Ты только ответишь на 20 вопросов, он находит в твоих ответах слабые места, и генерирует еще 20 уточняющих.. И таких сессий вопросов-ответов может быть 20-30 штук. Главное, каждый раз, когда ты отправляешь пачку ответов, не давать себе слабину и снова, и снова запрашивать - если есть еще уточняющие вопросы, задавай.
В итоге, когда Дипсик выдает-таки заветную фразу "Вопросов больше нет, я готов вывести код", он реально выкатывает код, который работает почти сразу (у меня один косяк только в коде возник, где Дипсик библиотеку импортировал чуть позже в коде, чем положено), но это легко исправилось.
Эксперимент с таким допросом делал 2 раза (апдейтил скрипт для извлечения глоссария + этот, для дедупликации) — результатом пока доволен. Код ИИ выкатывает за 2-3 минуты (и это, как вы понимаете, самая финальная операция), а вот само обсуждение параметров, ограничений, уточнений - 2-3 и более часов даже на мелкий скрипт.
(Оригинал публикации: https://teletype.in/@bartov/KWfbFa56Vx-)