Оборвался платный прогон: не перезапускать
Оборвался платный прогон: не перезапускать Расскажу, как я заплатил за одно и то же дважды, и что после этого изменил. Потому что правило в памяти агента эту ошибку не остановило. Остановил только код. Было так. Агент генерил девять обложек для статей через платный сервис. Генерация идёт минуты, он ждал, и соединение с сервером оборвалось по таймауту. Вывода нет. Агент рассудил логично: раз ответа не было, задачи не создались, надо запустить заново. Запустил. Оплатилось восемнадцать картинок вместо девяти. Логика, которая подвела: «ничего не пришло» он прочитал как «ничего не произошло». А на стороне провайдера задачи уже лежали оплаченные. Таймаут это обрыв связи, а не отмена заказа. Я тогда написал в правила большими буквами «оборвался платный прогон, не перезапускать». И через какое-то время поймал себя на том, что таких правил уже штук десять, а деньги всё равно утекают. Текст не держит. Держит механика. Что сделано: 1. Вся платная генерация идёт через одну обёртку с журналом. Ключ задания это хеш промта и настроек, и он записывается в журнал до обращения к сервису. Повтор того же задания денег не стоит: обёртка отдаёт уже оплаченный результат. 2. У обёртки есть сухой прогон. Он печатает одну строку: «будет оплачено новых: N». Эту цифру я и согласовываю. Не «примерно столько», а ровно столько. 3. Прямые вызовы платных сервисов из командной строки агенту заблокированы. Захочет сгенерить мимо журнала, не получится физически. 4. Два прогона одновременно не стартуют: замок. 5. Длинные прогоны идут отдельным процессом с записью состояния в файл, а не «подождём в консоли», потому что ожидание в консоли и упирается в тот самый таймаут. С тех пор удвоений не было. Не потому что агент стал умнее, а потому что у него больше нет кнопки «ещё раз». Вывод: если ошибка повторилась дважды, третье правило в тексте не поможет. Нужен замок. А у вас есть операция, которую ИИ может случайно оплатить дважды?)