GEPA: рефлексивная эволюционная оптимизация промптов вместо RL
📂 Исходный код на GitHubGenetic-Pareto: фреймворк для оптимизации промптов, кода и архитектур агентов через LLM-рефлексию и Парето-эффективный эволюционный поиск.
GEPA (Genetic-Pareto) — open-source фреймворк на Python для оптимизации любых систем с текстовыми параметрами: промптов, кода, архитектур агентов, конфигураций. Вместо reinforcement learning с тысячами rollout'ов GEPA использует LLM-рефлексию: модель читает полные трассы выполнения, диагностирует причины неудач и предлагает точечные исправления. Среди авторов — Матеи Захария (сооснователь Databricks) и Омар Хаттаб (создатель DSPy). Проект набирает популярность в продакшене: его используют Databricks, Shopify, Dropbox, OpenAI, Nubank и другие компании.
Ключевые результаты
| Результат | Детали |
|---|---|
| В 90 раз дешевле | Открытые модели + GEPA обошли Claude Opus 4.1 в Enterprise-агентах у Databricks |
| В 35 раз быстрее RL | 100–500 оценок против 5000–25 000+ у GRPO (статья) |
| 32% → 89% | Точность агента на ARC-AGI через автоматический поиск архитектуры |
| 40.2% экономии | Политика облачного шедулинга, найденная GEPA, обошла экспертные эвристики |
| 55% → 82% | Resolve rate кодинг-агента на Jinja через автоизвлечённые скиллы |
| 50+ продакшн-кейсов | Shopify, Databricks, Dropbox, OpenAI, Pydantic, MLflow, Comet ML |
CEO Shopify Тоби Лютке публично назвал GEPA «серьёзно недооценённым» в мире context engineering.
Как это работает
Классические оптимизаторы знают, что кандидат провалился, но не знают, почему. RL схлопывает всю трассу выполнения в один скалярный reward. GEPA идёт другим путём:
- Select — выбор кандидата с границы Парето (кандидаты, сильные на разных подмножествах задач)
- Execute — запуск на мини-батче с записью полных трасс выполнения
- Reflect — LLM читает трассы: сообщения об ошибках, вывод профайлера, логи рассуждений — и ставит диагноз
- Mutate — генерация улучшенного кандидата с учётом уроков всех предков
- Accept — добавление в пул при улучшении, обновление Парето-фронта
Ключевая концепция — Actionable Side Information (ASI): диагностический фидбек от оценщиков, который играет роль «градиента» для текстовой оптимизации. Поддерживается и system-aware merge — слияние сильных сторон двух Парето-оптимальных кандидатов.
Быстрый старт
Установка: pip install gepa. Оптимизация системного промпта для математических задач AIME:
import gepa
trainset, valset, _ = gepa.examples.aime.init_dataset()
seed_prompt = {
"system_prompt": "You are a helpful assistant. Answer the question. "
"Put your final answer in the format '### <answer>'"
}
result = gepa.optimize(
seed_candidate=seed_prompt,
trainset=trainset,
valset=valset,
task_lm="openai/gpt-4.1-mini",
max_metric_calls=150,
reflection_lm="openai/gpt-5",
)
print("Optimized prompt:", result.best_candidate['system_prompt'])
Результат из документации: GPT-4.1 Mini поднимается с 46.6% до 56.6% на AIME 2025 — плюс 10 процентных пунктов без дообучения модели.
Самый мощный способ применения — внутри DSPy, где оптимизатор доступен как dspy.GEPA:
import dspy
optimizer = dspy.GEPA(
metric=your_metric,
max_metric_calls=150,
reflection_lm="openai/gpt-5",
)
optimized_program = optimizer.compile(student=MyProgram(), trainset=trainset, valset=valset)
optimize_anything: оптимизация чего угодно
API optimize_anything работает с любым текстовым артефактом — кодом, архитектурой агента, конфигом, SVG. Вы предоставляете только evaluator, поиск берёт на себя система:
import gepa.optimize_anything as oa
from gepa.optimize_anything import optimize_anything, GEPAConfig, EngineConfig
def evaluate(candidate: str) -> float:
result = run_my_system(candidate)
oa.log(f"Output: {result.output}")
oa.log(f"Error: {result.error}")
return result.score
result = optimize_anything(
seed_candidate="<your initial artifact>",
evaluator=evaluate,
objective="Describe what you want to optimize for.",
config=GEPAConfig(engine=EngineConfig(max_metric_calls=100)),
)
GEPA также распространяется как Agent Skill для .claude/skills/ — кодинг-агенты (Claude Code, Cursor, Codex, Gemini CLI) могут запускать оптимизацию самостоятельно.
Что GEPA находит на практике
Авторы описывают это как «предвычисление рассуждений во время оптимизации»: в промпт запекается план действий для будущих задач. Например, для multi-hop QA на HotpotQA GEPA самостоятельно вывел стратегию второго поискового запроса — искать не перефраз вопроса, а связанные сущности более высокого уровня, которых не хватает для полного ответа. Для AIME оптимизатор собрал настоящий каталог приёмов: строгое соблюдение ограничений на цифры при смене системы счисления, модульная арифметика для сужения перебора, структурные аргументы вместо наивного энумерирования. Промпт превращается из одной строчки в детальную инструкцию с типовыми ловушками — но каждая ловушка выведена из реальных ошибок на трейне, а не придумана человеком.
Адаптеры и интеграции
GEPA подключается к любой системе через интерфейс GEPAAdapter. Встроенные адаптеры:
- DefaultAdapter — оптимизация system prompt для single-turn задач
- DSPy Full Program — эволюция целых DSPy-программ: 67% → 93% на бенчмарке MATH
- Generic RAG — оптимизация RAG-пайплайнов независимо от векторной БД (ChromaDB, Weaviate, Qdrant, Pinecone)
- MCP Adapter — оптимизация описаний MCP-инструментов и системных промптов
- LangChain — промпты для любых LangChain/LangGraph-пайплайнов
- ConfidenceAdapter — классификация с учётом logprob: штрафует «счастливые угадывания»
Фреймворк уже интегрирован в экосистему: dspy.GEPA в DSPy, mlflow.genai.optimize_prompts() в MLflow, оптимизатор в Comet ML Opik, промпт-оптимизация для Pydantic AI, adk optimize в Google ADK. Microsoft применяет GEPA/DSPy для тюнинга LLM-judge промпта при фильтрации кодовых страниц в претрейне MAI-Thinking-1 — около 233 млрд токенов курируемых данных.
Когда GEPA особенно полезен
- Дорогие rollout'ы — научные симуляции, агенты с tool calls, медленная компиляция: нужно 100–500 оценок против 10 000+ у RL
- Мало данных — работает от 3 примеров, большой обучающий набор не нужен
- API-only модели — доступ к весам не требуется, GPT-5, Claude и Gemini оптимизируются напрямую через API
- Интерпретируемость — человекочитаемые трассы показывают, почему изменился каждый промпт
- Дополняет RL — быстрый старт оптимизации с GEPA, затем RL/fine-tuning для дополнительных gains
Итог
GEPA переводит оптимизацию промптов из ручного перебора в систематический инженерный процесс. Философия простая: если метрику можно измерить — её можно оптимизировать. Для команд, работающих с LLM-агентами и пайплайнами, это один из самых практичных инструментов context engineering: дешёвый, интерпретируемый и проверенный в продакшене.
Полезные ссылки: статья arXiv:2507.19457, документация, туториалы dspy.GEPA.
Источник: https://github.com/gepa-ai/gepa