TL;DR
EGO-Prompt — метод автоматической оптимизации промптов для задач в конкретных доменах (медицина, транспорт, финансы) через причинно-следственные графы (Semantic Causal Graph, SCG). Эксперт создаёт граф с узлами-факторами и стрелками-связями (например: "алкоголь → состояние дороги → тяжесть ДТП"), затем система автоматически улучшает и граф, и промпт через итерации.
Ключевой инсайт: LLM плохо работает с избыточной информацией в промпте. Если дать модели весь причинно-следственный граф сразу, она теряется — там всегда есть нерелевантные для конкретного случая связи (например, "уровень алкоголя" неважен, если водитель трезв). Модель тратит токены на обработку шума вместо фокуса на главном.
Метод решает это через двухэтапное рассуждение: (1) Граф-модель смотрит на конкретный случай и граф, выбирает только релевантные связи, генерирует сжатое guidance. (2) Основная модель рассуждает, используя исходные данные + это guidance, а не весь граф. Дальше система анализирует ошибки и автоматически улучшает и промпт, и сам граф через textual gradients — добавляет пропущенные связи, удаляет лишние, уточняет описания.
Схема метода
ЭТАП 1: Генерация instance-specific guidance
Вход: конкретный случай (x) + полный граф (G) + causal-промпт
→ Граф-модель выбирает релевантные узлы и связи
→ Выход: сжатое guidance (z*) для этого случая
ЭТАП 2: Рассуждение с guidance
Вход: исходные данные (x) + guidance (z*) + системный промпт
→ Модель рассуждает
→ Выход: предсказание (y)
ЭТАП 3: Итеративная оптимизация (автоматическая)
→ Сравнение с правильным ответом
→ Генерация textual gradients (что не так в промпте и графе)
→ Обновление промпта: улучшение формулировок
→ Обновление графа: Add/Delete/Edit узлов и связей
→ Повтор 6-12 итераций
Важно: Этапы 1-2 — это workflow, который можно воспроизвести вручную. Этап 3 требует API и код для автоматизации.
Пример применения
⚠️ Ограничения метода: Требует наличие domain knowledge в виде графа и ground truth данных для оптимизации. Не подходит для простых задач без структурированных причинно-следственных связей.
Задача: Ты запускаешь маркетплейс доставки еды в Москве. Нужно понять, почему клиенты отменяют заказы — чтобы снизить процент отмены с 18% до 12%.
У тебя есть данные: время суток, район, погода, время ожидания, средний чек, день недели, наличие промокода, количество прошлых заказов клиента. Эксперт-аналитик набросал причинно-следственный граф связей, но он неполный — возможно, пропущены важные паттерны.
Промпт (упрощённая версия двухэтапного reasoning):
Шаг 1: Создай instance-specific guidance
У меня есть общий граф факторов отмены заказов:
- Погода → Время ожидания → Отмена
- Время суток → Район → Отмена
- Средний чек → Наличие промокода → Отмена
- Количество прошлых заказов → Отмена
Конкретный случай:
- Вторник, 14:00
- Район: Тверская
- Дождь
- Время ожидания: 45 минут
- Средний чек: 1200₽
- Промокод: нет
- Клиент: 3-й заказ
Задача: Выбери из графа ТОЛЬКО те связи, которые релевантны для этого случая, и сформулируй краткое reasoning guidance (3-5 предложений) — на что обратить внимание при анализе.
---
Шаг 2: Анализ с guidance
Используя guidance выше и данные случая, предскажи: отменит ли клиент заказ?
Объясни через релевантные причинно-следственные связи.
Результат:
Модель выдаст двухэтапный вывод:
- Guidance: "В этом случае ключевые факторы — дождь увеличивает ожидание до 45 мин, что критично. Обеденное время + деловой район (Тверская) = клиент спешит. Отсутствие промокода при чеке 1200₽. Клиент новый (3-й заказ) = меньше лояльности."
- Предсказание с обоснованием через выбранные связи: "Вероятность отмены высокая (70%). Главный драйвер: Дождь → 45 мин ожидания + обед в деловом районе..."
Почему это работает
Проблема LLM: При работе с domain-specific задачами модель получает избыточную информацию в промпте. Причинно-следственный граф содержит все возможные связи для домена, но не все релевантны для конкретного случая. Например, фактор "алкоголь водителя" неважен, если поле BAC=None (водитель трезв). Модель тратит ресурсы на обработку нерелевантных путей в графе вместо фокуса на значимых.
Сильная сторона LLM: Модель хорошо выбирает релевантную информацию из большого контекста, если дать чёткую инструкцию. Она умеет следовать структурированным инструкциям и фильтровать важное от второстепенного.
Как метод использует это: Двухэтапное рассуждение разделяет задачи:
- Этап фильтрации — модель анализирует конкретный случай и граф, выбирает только релевантные узлы и связи, упаковывает их в сжатое guidance
- Этап рассуждения — модель работает с чистым сигналом (данные + guidance), без шума из полного графа
Это как разница между "вот тебе вся медицинская энциклопедия" и "вот конкретные главы по симптомам пациента" — второе даёт лучший результат.
Дополнительные рычаги:
- Детализация графа — чем точнее описаны причинно-следственные связи в узлах, тем лучше guidance (но сложнее граф)
- Формат guidance — можно потребовать структурированный вывод (JSON) или текст
- Длина guidance — ограничь количество предложений для экономии токенов при простых задачах
- Causal-промпт — измени инструкцию для граф-модели: вместо "выбери связи" попроси "ранжируй по важности и возьми топ-3"
Шаблон промпта
Для ручного применения (двухэтапное рассуждение):
Шаг 1: Генерация instance-specific guidance
У меня есть причинно-следственный граф для {домен}:
{описание графа: узлы и связи в текстовом виде}
Конкретный случай:
{данные конкретной ситуации}
Задача: Проанализируй граф и выбери ТОЛЬКО те узлы и связи, которые релевантны для этого конкретного случая. Сформулируй краткое reasoning guidance (3-5 предложений): на какие причинно-следственные связи обратить внимание при решении задачи {задача}.
---
Шаг 2: Рассуждение с guidance
Используя guidance выше и данные случая, реши задачу: {формулировка задачи}.
Объясни решение через релевантные причинно-следственные связи из графа.
Поля для заполнения:
{домен}— область применения (медицина, финансы, маркетинг){описание графа}— текстовое представление узлов и связей (Фактор A → Фактор B → Результат){данные конкретной ситуации}— характеристики текущего случая{задача}— что нужно предсказать/решить
🚀 Быстрый старт — вставь в чат:
Вот шаблон двухэтапного рассуждения с причинно-следственным графом. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит: (1) в каком домене задача, (2) какие факторы и связи важны (если не знаешь — попроси предложить), (3) какие данные есть по конкретному случаю, (4) что нужно предсказать. Она возьмёт паттерн двухэтапного рассуждения и адаптирует под твою задачу.
Ограничения
⚠️ Требует domain knowledge: Метод работает, если есть представление о причинно-следственных связях в домене. Для совсем новых или плохо изученных задач сложно построить начальный граф.
⚠️ Автоматическая оптимизация требует кода: Полноценное применение (итеративная оптимизация графа и промпта) требует API, forward/backward engines, textual gradients. Ручное применение ограничено двухэтапным reasoning без автоматического улучшения графа.
⚠️ Нестабильность API: Результаты могут варьироваться между запусками из-за недетерминированности LLM API (temperature, sampling). В исследовании брали лучший из 3 запусков.
⚠️ Оverhead для простых задач: Если задача решается одним промптом без структурирования знаний, двухэтапный подход добавит лишние токены и сложность.
Как исследовали
Команда взяла три реальных датасета из разных доменов: прогноз госпитализации при пандемии COVID-19 (5200 случаев), предсказание тяжести ДТП (16188 аварий), выбор транспорта в Швейцарии (10728 респондентов). Для каждого домена эксперты создали начальный неполный причинно-следственный граф — специально, чтобы проверить, может ли система его улучшить.
Тестировали на 5 моделях (GPT-4o mini, GPT-4.1 mini, GPT-5 mini, Gemini 2.0/2.5 Flash) против 6 baseline методов: ProTeGi, TextGrad (prompt optimization), Zero-Shot-CoT, PHP, Auto-CoT (reasoning), Expert Organized Prompt. Каждый эксперимент повторяли 3 раза (из-за случайности API) и брали лучший результат — чтобы показать потенциал метода.
Что удивило: EGO-Prompt с маленькой моделью (GPT-4o mini) обошёл reasoning-модели o4-mini и o1, хотя те стоят в 6-140 раз дороже на инференсе. F1 score вырос на 7-13% по сравнению с сильнейшим baseline. Ещё интереснее: система автоматически исправила ошибки в экспертном графе — добавила пропущенные связи (например, "состояние здравоохранения → госпитализация") и удалила слабые ("демография → политика ограничений").
Главный практический инсайт: граф не обязан быть идеальным изначально — итеративная оптимизация через textual gradients находит пропущенные паттерны в данных и улучшает структуру знаний. Это открывает путь для экспертов: набросать начальный граф → дать системе обучиться на реальных кейсах → получить обратно refined граф с новыми инсайтами.
Ресурсы
How to Auto-optimize Prompts for Domain Tasks? Adaptive Prompting and Reasoning through Evolutionary Domain Knowledge Adaptation
Yang Zhao, Pu Wang, Hao Frank Yang (Johns Hopkins University)
NeurIPS 2025
Project page: https://miemieyanga.github.io/EGOPrompt/
