TL;DR
GEPA — это способ, при котором одна модель (рефлектор) читает полную запись работы агента: рассуждения, вызовы инструментов, ответы. Затем она пишет диагноз, почему агент ошибся, и переписывает системный промпт. За раз меняется один компонент. Лучшие версии промпта хранятся «на фронте»: кандидат остаётся в игре, если он сильнее других хотя бы по одному набору заданий. Так поиск не застревает на одной правке.
Главная находка: оценка должна быть разложена по критериям, а не сведена к одной цифре. Если рефлектор видит только «0,6 из 1», ему нечего диагностировать. Он либо ничего не улучшает, либо подгоняет промпт под обучающие примеры, и на новых темах результат становится хуже исходного. Если же он видит «ссылка работает — да, источник по теме — да, источник подтверждает цифру — нет», он находит общие правила вроде «сверяй цифру с текстом источника». Такие правила переносятся на темы, которых оптимизатор не видел.
Ещё два вывода. Почти половина лучшего промпта оказалась выученным ответником: туда скопировали конкретные факты из обучающих вопросов. Но он не дал ни одного балла, даже на тех самых вопросах. Это просто мусор в промпте. А чем длиннее становились версии, тем хуже они работали, и отбор их отбросил.
Схема метода
ШАГ 1: Прогнать агента на малой выборке (20–30 заданий) → записи работы (трассы)
ШАГ 2: Оценить каждый ответ ПО КРИТЕРИЯМ отдельно → текстовый разбор по каждому критерию
ШАГ 3: Рефлектор читает промпт + трассы + разбор → диагноз + новая версия ОДНОГО компонента
ШАГ 4: Проверить кандидата на отдельной валидационной выборке → оставить лучших
ШАГ 5: Повторить; финал — тест на ДРУГИХ темах, несколько прогонов
Шаги 1–4 в исследовании автоматизированы кодом. Их логику можно повторить вручную в нескольких чатах (см. шаблон).
Пример применения
Задача: Вы делаете ИИ-агента для отдела продаж B2B. Он готовит справки о компаниях-клиентах перед звонком: выручка, руководство, новости, судебные дела. Каждая цифра должна быть со ссылкой на источник. Агент то даёт ссылки «в тему, но цифры там другие», то выдаёт номера, которые не соответствуют списку источников. Вы хотите улучшить его системный промпт не на глаз, а по данным.
Промпт (для чата с сильной моделью, роль «рефлектор»):
Ты — рефлектор: улучшаешь системный промпт агента, который готовит справки о компаниях со ссылками.
{текущий системный промпт агента}
Задание 1: Справка по ООО «Ромашка-Логистика» (ИНН ...)
Запись работы агента: {поиск, найденные страницы, итоговая справка}
Разбор по критериям:
- ссылка_открывается: 4 из 5 — две ссылки ведут на несуществующие страницы
- источник_по_теме: 5 из 5
- источник_подтверждает_факт: 2 из 5 — выручка 1,2 млрд указана, на странице источника 840 млн
- нумерация: 5 из 5
Задание 2: ...
Правила:
1. Найди КРИТЕРИЙ с самым низким баллом и объясни по записям, какое поведение агента его роняет.
2. Предложи ОБЩЕЕ правило поведения. Не копируй в промпт конкретные факты, названия компаний и цифры из заданий.
3. Измени только один блок промпта: «стратегия поиска» ИЛИ «оформление отчёта».
4. Не увеличивай промпт больше чем на 100 слов. Если можно удалить лишнее — удали.
Выведи: диагноз → изменённый блок → что ожидаешь улучшить.
Результат: Модель выдаст диагноз по слабейшему критерию («подтверждение факта»), со ссылками на конкретные трассы. Затем предложит одно общее правило, например про сверку цифры с текстом источника перед включением в справку. Потом перепишет один блок промпта. Новую версию прогоняете на отдельных заданиях и сравниваете с прежней. Так же эту версию надо проверить на компаниях из других отраслей, не из тех, что были в примерах.
Почему это работает
Слабость LLM-оптимизатора: если он видит только одну итоговую цифру, он не знает, что именно сломано. У него два пути: гадать или подогнать промпт под конкретные примеры (дописать туда ответы). Во втором случае прирост на обучающих заданиях есть, а на новых тем его нет. Такой же результат у скалярной оценки был в исследовании: перенос ушёл в минус.
Сильная сторона LLM: модель хорошо читает длинную запись работы и пишет по ней внятный диагноз на естественном языке. Ей нужно только «видеть», какой именно критерий проседает.
Как метод использует это: оценка разложена на отдельные «рычаги» (ссылка открывается, источник по теме, источник подтверждает факт), а при плохих баллах к каждому прилагается причина. Рефлектор получает конкретную мишень и выводит общее правило. Отбор по отдельной выборке и по фронту кандидатов отсекает раздутые и переобученные версии.
Рычаги управления: - Число критериев → больше критериев даёт точнее диагноз, но требует больше проверок. Критерии должны быть независимыми. - «Не копируй факты из заданий» → убирает выученные ответники из промпта и экономит слова. - Лимит прироста длины → защищает от раздувания; в исследовании длинные версии стабильно проигрывали. - Один компонент за шаг → легче понять, какая правка помогла. - Разные темы в проверке → показывает, переносится ли выигрыш или это подгонка.
Шаблон промпта
Ты — рефлектор. Улучшаешь системный промпт агента по записям его работы.
Диагност промптов: ищешь общие причины ошибок, не подгоняешь под отдельные примеры.
{что делает агент}
{блок A: название}: {текст}
{блок B: название}: {текст}
{критерий_1}: {что проверяем}
{критерий_2}: {что проверяем}
{критерий_3}: {что проверяем}
Задание {номер}: {формулировка}
Запись работы: {что делал агент и что выдал}
Разбор по критериям:
- {критерий_1}: {балл} — {причина}
- {критерий_2}: {балл} — {причина}
- {критерий_3}: {балл} — {причина}
1. Найди критерий с самым низким баллом.
2. По записям определи, какое поведение агента его роняет.
3. Сформулируй ОБЩЕЕ правило. Не вставляй конкретные факты, имена и цифры из заданий.
4. Выбери ОДИН блок промпта и перепиши только его.
5. Проверь длину: прирост не больше {лимит_слов} слов; лишнее удали.
Что подставлять:
- {критерий_N} — 3–5 независимых критериев качества вашей задачи, по которым можно поставить балл.
- Traces — 3–6 заданий с реальным выводом агента и разбором по критериям. Разбор можно делать вручную или отдельным чатом-судьёй.
- {лимит_слов} — 50–150.
🚀 Быстрый старт — вставь в чат:
Вот шаблон рефлексивной оптимизации промпта. Адаптируй под мою задачу: {опиши, что делает твой агент или промпт}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, что делает агент, какие критерии качества важны и какие ошибки вы уже видели. Критерии нужны, потому что весь метод держится на разложенной обратной связи. По ним модель составит и шаблон оценки, и мета-промпт для доработки.
Ограничения
⚠️ Одна цифра вместо критериев: если свести оценку к одному баллу, метод вредит. Перенос на новые темы уходит в минус, при этом на обучающих заданиях прирост может выглядеть хорошо.
⚠️ Выученный ответник: рефлектор склонен копировать в промпт конкретные факты из примеров. Это не даёт прироста и раздувает промпт. Нужен запрет в мета-промпте и проверка промпта глазами.
⚠️ Раздувание: версии, где промпт продолжали наращивать, стали хуже. Без лимита длины метод портит промпт.
⚠️ Шумная проверка: на малой выборке в 24 задания качество колеблется. Разрыв между «на валидации» и «на новых темах» сильно прыгает от прогона к прогону. Одному прогону верить нельзя, нужны несколько и тест на других темах.
⚠️ Узкая проверка: одна задача (цитирование в исследовательском агенте), одно семейство моделей, судьи — тоже модели. Абляции по критериям сделаны на двух прогонах и показывают направление, а не точные числа.
⚠️ Прирост неравномерный: выигрыш получился чистым, но не повсеместным: часть заданий стала хуже. Прогоны сильно различались по величине эффекта.
⚠️ Инженерная часть: сам цикл GEPA в исследовании запущен кодом на сотнях прогонов. В чатах вручную можно повторить принцип, но не масштаб.
Как исследовали
Команда взяла двухмодульного агента для глубокого поиска: оркестратор планирует и раздаёт работу, исследователь ищет по замороженному корпусу и пишет отчёт со ссылками. Оптимизировали оба системных промпта. Награда была составной: правильный ответ служит воротами (неверный ответ обнуляет всё), дальше идут проверки каждой ссылки — открывается ли, по теме ли, подтверждает ли факт, правильно ли пронумерована.
Главный ход — разделение данных по темам. 24 задания на обучение и 24 на валидацию, по 12 тем в каждом, и 500 заданий на 254 других темах для финального теста. Ни одна тема не встречается дважды. Поэтому любое запоминание ответов не может помочь на тесте. Результат на тесте вырос с 0,702 до 0,781 (доверительный интервал [0,051; 0,107]) и повторился на трёх прогонах со средним приростом 0,107.
Дальше проверили подозрение. В лучшем промпте почти половина слов была «ответником» с фактами из обучающих вопросов. Исследователи проверили его на тех же вопросах и на новых вопросах по тем же статьям. Ответник не поднял даже балл за правильность ответа. То есть большой зазор между валидацией и тестом — это шум и отбор на малой выборке, а не запоминание. На новых вопросах темы, где факты «просочились» в промпт, выиграли меньше, чем остальные. Просочившиеся факты — просто лишний вес.
Затем меняли тип обратной связи при одинаковом всём остальном: грубая шкала, тройная оценка с усреднением, единая цифра вместо разбора по критериям. Только последний вариант сломал перенос: вместо +0,075 получилось −0,021. Более частые или точные оценки ничего не добавили. Взломы оценки (рост на валидации без роста на тесте) совпали со слабейшими судьями. Авторы также отмечают, что ручная версия найденного рецепта в основном воспроизводит выигрыш.
Адаптации и экстраполяции
💡 Адаптация контекста: ручная проверка своего системного промпта без GEPA. Если нет возможности запускать цикл, можно взять 5–10 реальных ответов вашего кастомного GPT и оценить их по 3–4 критериям с причинами. Затем отдать это чату по шаблону выше. Одна итерация вручную уже даёт общее правило для промпта.
🔧 Техника: чек-лист утечек → чистый промпт. После любой автодоработки промпта добавьте шаг:
Перечитай новый промпт. Выпиши все места, где упомянуты конкретные компании, цифры, даты или названия из примеров. Удали их или замени общим правилом. Сообщи, сколько слов убрано.
Это закрывает риск «выученного ответника» из статьи.
🔧 Техника: проверка на других темах. Перед тем как принять новый промпт, прогоните его не на тех заданиях, которые вы показывали рефлектору, а на отложенных из другой области. Если прирост только на «знакомых» заданиях — это подгонка.
Ресурсы
- Reflective Prompt Optimization of a Deep-Research Agent: A Topic-Disjoint, Multi-Seed Protocol for Measuring Transferable Gains and Prompt-Level Overfitting — Elias Lumer, Sahil Sen, Vamse Kumar Subbiah, Kevin Paul. Авторы публикуют кандидатов-промптов, разницы между версиями, таблицы и анализ.
- GEPA (Agrawal et al., 2025) — оптимизатор, использованный в работе; открытая реализация GEPA-AI.
- DSPy и MIPROv2 — смежные подходы к автооптимизации промптов.
- Decagon (2026) — рекомендации по сильному рефлектору, выборке 20–100 примеров и раздуванию промптов.
- Onweller et al. (2026) — работа о «присутствующих, но не подтверждающих» цитатах в исследовательских агентах.
