Подход к обучению промтов.
Привет! Уверен, что 100% людей тут писали свои промты, многие наверняка писали и проекты с промтами - будь то какой-нибудь финансовый помощник или подсчёт калорий по фото. И наверняка сталкивались с тем, что решение многих задачек сводится к тому, чтобы написать хороший промт, который как можно чаще будет выдавать удовлетворительный результат. В целом это одна из задач AI-разработки - уметь написать промты в пайплайне так, чтобы они выдавали удовлетворительный результат.
Очевидно, что раз ИИ - штука недетерминированная, то и процесс этот не имеет чёткого алгоритма, а превращается в любимый итеративный подход: исправляем предыдущие ошибки, прогоняем пайплайн, смотрим, стало хуже или лучше, после чего идём улучшать дальше - или откатываем и пытаемся исправить текущее.
Идейно это похоже на подход к обучению в классическом ML, только там учат веса и есть понятная эвристика, а у нас вместо весов промт и эвристика не такая понятная. Это заметили ребята из Microsoft и сделали штуку для обучения скиллов - SkillOpt (очевидно, раз скилл - это промт в .md, то так можно обучать любые промты). Логика такая: если модель файнтюнить дорого и не всегда оправданно - давайте её заморозим, а обучать будем то, что подаётся на вход, замеряя то, что получается на выходе. Собственно, чтобы замерять, нам необходим хороший голден-датасет, который надо держать в актуальном и хорошем состоянии - и в целом он у вас и так должен быть, чтобы понимать, в каком состоянии находится продукт и что вы ничего не сломали, меняя промт.
Раз промт - это веса, и обучаем мы его как веса, то и болячки у него те же, что у весов. А болячки эти давно известные, с давно известными решениями, и выглядят они так:
• learning rate → бюджет правок за шаг, с затуханием. Если разрешить оптимизатору переписывать документ целиком - он сотрёт хорошие правила вместе с плохими. Ограниченные правки сохраняют преемственность
• отложенная валидация → приёмочный гейт. Сохраняем только те изменения, которые реально повлияли на метрики
• негативный фидбек → буфер отклонённых правок. Оптимизатор помнит собственные провалы и не предлагает их по второму кругу
• momentum → долгосрочная память. Уроки, пережившие несколько эпох, переезжают в защищённую область документа, которую быстрые правки не трогают
Экспериментально ребятам из майкрософта удалось показать, что абляция любого из четырёх пунктов приводит к тому, что промты начинают выдавать говно и переобучаться (не знаю, как это ещё обозвать). Кто мы такие, чтобы не верить на слово ребятам из майкрософта - так что поверим.
По бенчмаркам у Microsoft вышло, что подход в целом имеет право на жизнь и вполне работоспособен, по крайней мере на скиллах. Шесть бенчмарков, семь моделей, три харнесса - лучший или разделённый первый результат во всех 52 комбинациях, на GPT-5.5 обученный скилл добавляет от 19 до 25 пунктов точности. Дополнительно у подхода оказалось ещё два плюса:
• Во-первых, промты - по сути бесплатное улучшение системы: не надо крутить дополнительные вызовы, перегенерации и т.д., так что этот подход условно бесплатно и безболезненно позволяет получать профит в продуктах
• Во-вторых, оказалось, что промт, обученный на одной модели, показывает прирост и на других - так что особых проблем с переходом на свежие модели или другое семейство быть не должно
Так что https://github.com/microsoft/skillopt - пробуйте, делитесь вашими экспериментами и результатами.
Post #231
3.39K