3,583 papers
arXiv:2610.37651 78 27 окт. 2026 г. FREE

GEPA-Curator: отбор «чистых» провалов и успешных эталонов при автодоработке промпта агента

КЛЮЧЕВАЯ СУТЬ
Агент провалился, вы просите модель «посмотри логи и поправь промпт». Она честно лечит сломанную кнопку правилом «ищи обходной путь», и промпт портится. GEPA-Curator позволяет править промпт агента только по честным провалам и не лечить им поломанную среду. Куратор встаёт перед разборщиком логов: выкидывает задачи с шумным сигналом и к каждому провалу подкладывает успех той же задачи. Разборщик сравнивает два прогона одной задачи и не гадает. Фишка: эталон берут только надёжный. Если надёжного успеха нет, куратор воздерживается.
Адаптировать под запрос
⚡

TL;DR

GEPA-Curator — надстройка над автоматической доработкой промпта агента. Обычно модель-«разборщик» читает провалившиеся прогоны и правит промпт. Куратор встаёт перед ней и делает две вещи. Первая: выкидывает из разбора задачи с шумным сигналом: слишком лёгкие, невыполнимые, нестабильно оцениваемые. Вторая: к каждому провалу подкладывает успешный прогон той же задачи как эталон.

Главная находка: не каждый провал агента говорит о слабом промпте. Кнопка на сайте глючит, задача поставлена криво, судья-LLM сегодня ставит «зачёт», завтра «незачёт». Разборщик этого не знает и честно «лечит» промпт. Он дописывает правила вроде «ищи обходной путь», и промпт портится. В эксперименте на смеси «исправимых» и «невыполнимых или нестабильных» задач качество упиралось в потолок. На смеси с лёгкими задачами оно доходило почти до идеала.

Куратор работает в один вызов LLM по истории каждой задачи. Он решает, брать ли задачу в разбор. Для провалов он выбирает один надёжный успех той же задачи или воздерживается, если надёжного успеха нет. Разборщик сравнивает «как сейчас провалилось» и «как раньше получилось» и не гадает.

🔬

Схема метода

ЦИКЛ (каждая итерация доработки промпта):

ШАГ 1: Куратор смотрит историю каждой задачи
        (прошлые прогоны + оценки)
        → решение: брать в мини-пакет / пропустить
        Пропускаем: стабильный успех, провалы из-за среды/обвязки,
        противоречивые оценки похожих результатов.
        Новые задачи берём в первую очередь.

ШАГ 2: Для провалов в пакете — выбор одного успешного прогона
        той же задачи (самый надёжный по истории).
        Нет надёжного успеха → воздержаться.
        (Шаги 1–2 — один вызов куратора)

ШАГ 3: Разборщик получает провалы + эталонные успехи
        → правит промпт агента

ШАГ 4: Прогоны и оценки пишутся обратно в историю.
        Пропуск временный: пропущенные задачи
        пересматриваются каждую эпоху.

Это код-оркестрация: нужны окружение, прогоны, хранилище истории.

🚀

Пример применения

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

Задача: Селлер на Ozon ведёт карточки товаров через агента в браузере. После недели работы набралось 30 неудачных прогонов. Раньше он просил модель «посмотри логи и перепиши системный промпт», и промпт распухал от странных правил. Часть провалов вообще не про промпт: - в личном кабинете в пятницу вечером падала кнопка «Сохранить»; - по одному товару категории просто не существует; - судья-LLM один и тот же результат оценил то «ок», то «не ок».

Промпт:

Ты — куратор журнала провалов агента. Агент заполняет карточки
товаров в личном кабинете Ozon Seller. Системный промпт агента
ниже, затем журнал из 30 прогонов (по каждому: задача, шаги агента,
итог, оценка судьи; для части задач есть по 2–3 прогона).

Работай в два этапа.

ЭТАП 1. Отбор задач. По каждой задаче вынеси вердикт:
- GOOD — провал вызван слабостью промпта: агент пропустил
  обязательное поле, не проверил результат, выбрал не тот инструмент;
- EASY — стабильно успешна, разбирать нечего;
- IMPOSSIBLE — проваливается из-за среды или обвязки (кабинет
  сбоит, нет нужного инструмента) либо сама задача некорректна;
- FLAKY — похожие результаты оцениваются по-разному.
Для каждого вердикта дай причину в одну строку со ссылкой на
конкретный шаг в журнале. Если улик мало — пиши «недостаточно данных»,
не угадывай. Вердикт временный: его пересмотрят после следующей правки.

ЭТАП 2. Эталоны. Для каждой задачи с вердиктом GOOD найди в журнале
один успешный прогон той же задачи, в успехе которого нет сомнений
(оценка согласуется с остальными записями). Если такого нет —
напиши «эталона нет» и ничего не подставляй.

ЭТАП 3. Только теперь предложи правки промпта. Опирайся только на
задачи GOOD. Для каждой правки покажи: провал → эталонный успех →
в чём разница в действиях → какая строка в промпте это исправит.
Задачи IMPOSSIBLE и FLAKY в правках не используй.

[системный промпт агента]
[журнал прогонов]

Результат: Модель сначала выдаст таблицу: задача, вердикт, причина со ссылкой на шаг. Затем для задач GOOD выберет эталонные успехи или честно напишет «эталона нет». В конце будет короткий список правок промпта, где у каждой есть цепочка «провал → эталон → разница → строка». Правил про «обходные пути при сбое кнопки» в списке быть не должно, а падающий кабинет попадёт в IMPOSSIBLE.

🧠

Почему это работает

Слабость. Разборщик получает провал и считает, что виноват промпт. Он не видит, что причина в сломанной среде, кривой задаче или шумном судье. Ему нужно объяснить провал, поэтому он добавляет правило. Плохое правило потом портит и те задачи, которые раньше проходили. Проверка «стало ли хуже на выборке» тоже шумная, и плохие правки иногда проходят.

Сильная сторона. Модель хорошо сравнивает два текста и находит, где они разошлись. Если рядом лежат провал и успех одной и той же задачи, различие в действиях видно прямо. Не нужно гадать, что исправить.

Как метод это использует. Сначала отсекаем задачи, где сигнал заведомо мусорный. Потом даём разборщику эталон, и сравнение заменяет догадку. Эталон тоже фильтруют: «успех» с сомнительной оценкой хуже, чем его отсутствие, поэтому куратор может воздержаться.

Рычаги управления: - Критерии пропуска (стабильный успех, внешние причины, противоречивые оценки). Добавь свой, например «задача зависит от данных, которые менялись». - Воздержание («эталона нет»). Не убирай: именно оно не даёт подсунуть ложный пример. - Временность вердикта. Пересматривай пропущенное после каждой правки. Раньше решённые задачи могут сломаться от новых правил, а раньше «невозможные» могут стать решаемыми. - Требование ссылок на шаги журнала. Оно не даёт модели выдумывать причины.

📋

Шаблон промпта

Ты — куратор журнала прогонов агента. Агент делает: {что_делает_агент}.
Ниже системный промпт агента и журнал прогонов. По каждому прогону:
задача, шаги, итог, оценка ({кто_оценивал}).

ЭТАП 1. Отбор задач. Для каждой задачи вердикт:
- GOOD — провал из-за слабости промпта;
- EASY — стабильно успешна;
- IMPOSSIBLE — провал из-за среды, инструментов, обвязки
  или некорректной задачи;
- FLAKY — похожие результаты оценены по-разному.
К каждому вердикту — причина в одну строку и ссылка на шаг журнала.
Улик мало — «недостаточно данных».

ЭТАП 2. Эталоны. Для каждой задачи GOOD выбери один надёжный
успешный прогон этой же задачи (оценка согласуется с остальными
записями). Надёжного нет — напиши «эталона нет».

ЭТАП 3. Правки промпта. Только по задачам GOOD. Для каждой правки:
провал → эталон → разница в действиях → строка для промпта.
IMPOSSIBLE и FLAKY не использовать. Максимум {число_правок} правок.

[системный промпт агента]
[журнал прогонов]

Что подставлять: {что_делает_агент} — одна фраза о задаче агента. {кто_оценивал} — человек, судья-LLM или автотест. {число_правок} — лимит, чтобы промпт не раздувался. Системный промпт и журнал вставь в конец.

🚀 Быстрый старт — вставь в чат:

Вот шаблон куратора журнала провалов. Адаптируй под мою задачу:
{опиши своего агента и как ты оцениваешь его работу}.
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит, что делает агент, кто и как оценивает результат, какие сбои среды бывали. Это нужно, чтобы вердикты IMPOSSIBLE и FLAKY опирались на твои реальные сбои, а не на общие догадки. Она возьмёт паттерн из шаблона и подстроит его под твоё окружение.

⚠️

Ограничения

⚠️ Метод в статье — код, а не промпт: Куратор работает в цикле на тысячах прогонов (от 800 до 5000 на бенчмарк). Ручная версия выше — адаптация принципа. Её эффект в статье не измерялся.

⚠️ Нужны повторные прогоны: Куратор опирается на историю задачи: несколько прогонов, оценки, успехи. Если задача запущена один раз, отличить шум от слабости промпта сложнее.

⚠️ Куратор — тоже LLM и тоже ошибается: Диагнозы меняются от итерации к итерации. У восьми задач одновременно были вердикты «невозможна» и «нестабильна». Поэтому пропуск делают временным.

⚠️ Прирост разный: На WebArena плюс несколько пунктов к обычной доработке. Значительно больше — на AppWorld. На одном из тестов с Claude Opus 5 результат не отличался от GEPA. Часть разбросов перекрывается.

⚠️ Узкая проверка: Исполнитель во всех опытах один — gpt-oss-120b, задачи — стандартные бенчмарки, а не живые рабочие процессы. Статья на рецензии, текст в моём распоряжении обрывается на разделе 5.2.

⚠️ Редких «плохих» задач мало: Среди 1581 задач нестабильных и невозможных было около 5%. Выигрыш зависит от того, сколько мусора в твоём наборе.

🔍

Как исследовали

Исследователи взяли четыре сайта из WebArena (GitLab, магазин, админка магазина, Reddit) и три других бенчмарка: ALFWorld, AppWorld и τ-bench. Исполнителем был gpt-oss-120b. Промпт дорабатывали две модели: Gemini 3.1 Pro и Claude Opus 5. Сравнивали с GEPA (обычная доработка промпта по провалам) и ACE (накопление «плейбука» стратегий). Каждый результат усредняли по 5 запускам.

Сначала проверили саму идею. Задачи GitLab разделили на лёгкие, исправимые, невыполнимые и нестабильные. Исправимые вместе с лёгкими доходили почти до идеала (15 из 16). Исправимые в смеси с невыполнимыми или нестабильными упирались в 12 из 16: шумные задачи действительно портят промпт.

Куратор разобрал 1581 тренировочную задачу GoBrowse. Из них 95% оказались нормальными, около 1% невозможными и около 4% нестабильными. Большинство невозможных задач (две трети) упиралось в среду или обвязку агента. Нестабильные чаще всего имели дефект в самой задаче (46%).

Дальше проверили, хватит ли простой статистики: например, «задача то успешна, то нет». На смеси с нестабильными задачами такая «числовая» учебная программа дала 62,5%, хуже обычного GEPA (66,2%). Куратор, который читает следы прогонов, а не только исходы, дал 67,4%. С эталонными успехами — 70,2%. Вывод: одного «успех/провал» мало, нужно смотреть, почему результат такой.

В итоге на WebArena куратор дал в среднем 82,1% против 78,7% у GEPA (Gemini) и 84,5% против 79,5% (Opus). На AppWorld один из тестов у Gemini вырос с 27,8% до 46,2%. В абляции на GitLab каждый компонент отдельно давал около 84%, вместе 88,6%. Компоненты дополняют друг друга: один решает, какие провалы разбирать, второй — на что опереться при разборе.

💡

Адаптации и экстраполяции

💡 Адаптация для правки CLAUDE.md / AGENTS.md: Когда агент в Cursor или Claude Code провалил задачу, не добавляй правило сразу. Сначала спроси: это слабость инструкции или сломан тест, не хватает доступа, задача поставлена неоднозначно?

Агент провалил задачу: {описание}. Лог: {лог}.
Прежде чем предлагать правку CLAUDE.md, определи причину:
(а) инструкция не покрывает ситуацию; (б) сбой среды/доступов/инструментов;
(в) задача была поставлена неоднозначно или невыполнима.
Укажи шаг лога, подтверждающий причину. Правку предлагай только для (а).
Если у этой задачи раньше был успешный прогон — сравни действия.

🔧 Техника: убрать требование ссылок на шаги → вердикты становятся голословными. Оставь требование: оно заставляет модель опираться на журнал. Эффект такой замены в статье не проверяли.

🔗

Ресурсы

  • GEPA-Curator: Curated Learning for Self Improving Agents (Under Review)
  • Авторы: Zack Yu, Nicholas Lee, Minjae Lee, Lakshya Agarwal, Luca Manolache, Wonjun Kang, Matei Zaharia, Michael W. Mahoney, Kurt Keutzer, Sehoon Kim, Amir Gholami
  • Организации: UC Berkeley, ICSI, LBNL, Furiosa AI, KAIST
  • Связанные работы: GEPA (Agrawal et al., 2026), ACE (Zhang et al., 2026), SkillOpt, Meta-Harness; бенчмарки GoBrowse / WebArena, ALFWorld, AppWorld, τ-bench

📋 Дайджест исследования

Ключевая суть

Агент провалился, вы просите модель «посмотри логи и поправь промпт». Она честно лечит сломанную кнопку правилом «ищи обходной путь», и промпт портится. GEPA-Curator позволяет править промпт агента только по честным провалам и не лечить им поломанную среду. Куратор встаёт перед разборщиком логов: выкидывает задачи с шумным сигналом и к каждому провалу подкладывает успех той же задачи. Разборщик сравнивает два прогона одной задачи и не гадает. Фишка: эталон берут только надёжный. Если надёжного успеха нет, куратор воздерживается.

Принцип работы

Процесс из трёх шагов: отсев → эталон → правка. 1. Куратор смотрит историю каждой задачи. Пропускает стабильные успехи, провалы из-за среды и обвязки, спорные оценки. 2. Для каждого оставшегося провала берёт один самый надёжный успех той же задачи. Нет такого: пишет «эталона нет». 3. Разборщик получает пары «провал + успех» и правит промпт. Пропуск временный: каждую эпоху пропущенные задачи пересматривают заново. Это как врач, который сначала отсеивает «болит, потому что ударился» и только потом лечит остальное. А вердикт «не лечим» не пожизненный.

Почему работает

Разборщику нужно объяснить провал, и он придумывает правило. Не видит он одного: кнопка глючит, задача поставлена криво, судья-LLM сегодня ставит «зачёт», завтра «незачёт». Плохое правило потом ломает задачи, которые раньше проходили. Проверка «стало ли хуже» тоже шумная, и плохие правки иногда проходят. Модель хорошо находит разницу между двумя текстами. Провал и успех одной задачи рядом показывают разницу в действиях прямо, и гадать не нужно. Сомнительный «успех» хуже, чем его отсутствие, поэтому воздержание не убирают. Цифры из статьи: от 800 до 5000 прогонов на бенчмарк. Прирост неровный: на WebArena плюс несколько пунктов к обычной доработке, на AppWorld заметно больше. На одном тесте с Claude Opus 5 результат не отличался от GEPA. Среди 1581 задач нестабильных и невозможных было около 5%. Без повторных прогонов отличить шум от слабого промпта сложнее.

Когда применять

Агенты с журналом прогонов (браузерные, работа с приложениями, длинные цепочки действий) → правка системного промпта по логам, особенно когда после каждой правки появляются странные правила, а часть провалов явно не про промпт. Не подходит, если каждая задача запущена один раз: сравнивать не с чем. Автоматический цикл из статьи требует кода (окружение, хранилище истории). Ручная версия ниже — моя адаптация, её эффект в статье не измерялся. Исполнитель в опытах один (gpt-oss-120b), задачи из стандартных бенчмарков. Статья на рецензии.

Мини-рецепт

1. Собери журнал: по каждому прогону нужны задача, шаги агента, итог и оценка. Лучше, чтобы у части задач было по 2-3 прогона.
2. Заставь отсеять: пусть модель разложит задачи на GOOD (виноват промпт), EASY (стабильно проходит), IMPOSSIBLE (среда или кривая задача) и FLAKY (оценки скачут).
3. Требуй улики: к каждому вердикту нужна причина в одну строку и ссылка на шаг журнала. Мало данных: пусть пишет «недостаточно данных».
4. Найди эталоны: для каждой GOOD-задачи один надёжный успех той же задачи. Нет такого: «эталона нет», ничего не подставляй.
5. Только теперь правки: по цепочке «провал → эталон → разница в действиях → строка промпта». IMPOSSIBLE и FLAKY в правках не участвуют.
6. Ограничь аппетит: поставь лимит правок, чтобы промпт не распух.
7. Пересмотри после правки: прогони заново и обнови вердикты. Раньше «невозможные» задачи могут стать решаемыми, а решённые могут сломаться.

Быстрый старт: Вот шаблон куратора журнала провалов. Адаптируй под моего агента: {опиши агента и как ты оцениваешь его работу}. Задавай вопросы, чтобы заполнить поля.

Примеры

[ПЛОХО] : Посмотри логи 30 неудачных прогонов и перепиши системный промпт агента
[ХОРОШО] : Ты куратор журнала провалов агента, который заполняет карточки товаров в личном кабинете. ЭТАП 1: по каждой задаче дай вердикт GOOD (слабый промпт), EASY (стабильно успешна), IMPOSSIBLE (сбой кабинета или кривая задача) или FLAKY (похожие результаты оценены по-разному). К каждому вердикту причина в одну строку и ссылка на шаг журнала. ЭТАП 2: для каждой GOOD-задачи найди один надёжный успех этой же задачи или напиши «эталона нет». ЭТАП 3: предложи правки промпта только по GOOD: провал → эталон → разница в действиях → строка для промпта. В плохом варианте падающая в пятницу кнопка «Сохранить» превращается в правило «ищи обходной путь». В хорошем она уходит в IMPOSSIBLE, и промпт остаётся чистым.
Источник: GEPA-Curator: Curated Learning for Self Improving Agents
ArXiv ID: 2610.37651 | Сгенерировано: 2026-10-28 13:20

Проблемы LLM

ПроблемаСутьКак обойти
Модель правит промпт по провалам, которые не про промптДаёшь модели журнал провалов агента и просишь улучшить инструкцию. Часть провалов вызвана не промптом. Сайт глючит. Задача поставлена криво. Судья-LLM оценивает один результат то «зачёт», то «незачёт». Модель этого не знает. Ей нужно объяснить каждый провал, и она дописывает правила, например «ищи обходной путь». Промпт пухнет. Лишние правила ломают задачи, которые раньше проходили. Это касается любой доработки инструкции по логам ошибок.Не отдавай сырой журнал сразу на правку. Сначала попроси разложить задачи по причине провала. Для правок оставь только провалы из-за слабого промпта. Как это сделать, см. метод «Сортировка провалов перед правкой».

Методы

МетодСуть
Сортировка провалов перед правкой — промпт не засоряется лишнимСделай отдельный этап до правок. Пусть модель вынесет вердикт по каждой задаче: GOOD (провал из-за слабого промпта), EASY (стабильно успешна), IMPOSSIBLE (сбой среды, нет инструмента или задача некорректна), FLAKY (похожие результаты оценены по-разному). К каждому вердикту нужна причина в одну строку со ссылкой на конкретный шаг журнала. Если улик мало, пусть пишет «недостаточно данных». Потом правки строятся только по GOOD. Почему работает: модель не может выбрать «виноват промпт» по умолчанию, ей нужен явный повод. Ссылка на шаг не даёт выдумывать причину. Лёгкие задачи убраны, значит нет ложного ощущения, что всё работает. Вердикт временный. После каждой правки пересмотри пропущенные задачи. Раньше «невозможные» могут стать решаемыми, а решённые могут сломаться. Можно добавить свой критерий пропуска, например «данные в задаче менялись». Когда да: у задач по 2–3 прогона и есть оценки. Когда нет: каждая задача запущена один раз, отличить шум от слабого промпта трудно.
Пара «провал + успех той же задачи» — правка вместо догадкиК каждому провалу из отобранных найди в журнале один надёжный успешный прогон ровно той же задачи. Надёжный значит: оценка согласуется с другими записями. Потребуй цепочку: провал → эталонный успех → разница в действиях → строка для промпта. Если надёжного успеха нет, пусть пишет «эталона нет» и ничего не подставляет. Почему работает: модель хорошо сравнивает два текста и находит, где они разошлись. Задача одна, поэтому разница в действиях и есть причина. Модели не нужно гадать, что исправить. Когда да: есть повторные прогоны одной задачи, часть из них успешна. Когда нет: задача новая и успехов ещё не было. Тогда правь осторожно или собери ещё прогонов.
📖 Простыми словами

GEPA-Curator: Curated Learning for Self Improving Agents

arXiv: 2610.37651

Когда ты заставляешь AI чинить самого себя, он ведёт себя как параноик. Обычно самообучающийся агент смотрит на свои ошибки и судорожно правит системный промпт, свято веря: «раз я облажался — виновата инструкция». Модель не понимает, что упал сервер, задание было невыполнимым, а оценивающий судья просто затупил. В итоге LLM выдумывает дикие костыли на ровном месте и намертво ломает то, что раньше прекрасно работало.

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

Чтобы убрать этот бред, сделали надстройку GEPA-Curator. Она встаёт перед анализатором и делает две конкретные вещи: отсекает мусорный сигнал и даёт контраст. Сначала фильтр безжалостно выкидывает нерешаемые кейсы, случайные сбои и нестабильные тесты. Затем к каждому оставшемуся провалу куратор прикрепляет эталонный успешный прогон той же самой задачи. Разборщик видит: «ага, вот здесь мы справились, а здесь свернули не туда» — и изолирует реальный баг.

Авторы гоняли это в сложном коде, но принцип универсален для любой работы с LLM. Не нужно строить монструозные пайплайны, чтобы внедрить логику авторов. Если ты руками допиливаешь инструкции для своего бота по логам, делай то же самое: игнорируй разовые аномалии, вычищай кривые запросы пользователей и всегда сравнивай упавший прогон с удачным дублем.

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

Работа с исследованием

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

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с