TL;DR
MARA (Multi-Agent Refinement with Adaptive agent selection) — фреймворк, где три специализированных агента последовательно улучшают ответ LLM: один проверяет факты, второй — соответствие профилю пользователя, третий — связность с предыдущими репликами диалога. Четвёртый агент-планировщик динамически решает, каких агентов задействовать и в каком порядке — в зависимости от типа запроса.
Главная находка: когда один агент пытается улучшить ответ сразу по всем параметрам, он становится слишком уверенным в первоначальном ответе. Каждая итерация не исправляет, а усиливает ошибки. Self-Refine и похожие методы показывают падение качества на задачах, требующих одновременно фактов и персонализации. Причина — один агент не может одинаково хорошо держать фокус на разных аспектах.
Решение MARA: разделить проверку на три специализированных агента + добавить планировщика, который адаптирует набор и порядок агентов под конкретный запрос. На вопрос "когда построили этот дом?" — сначала fact-agent. На вопрос "тебе интересна эта работа?" — сначала persona-agent. Планировщик решает это автоматически.
Схема метода
ШАГ 0: Responding Agent → генерирует первоначальный ответ
ШАГ 1: Planner Agent → анализирует запрос и ответ → выдаёт:
• набор нужных агентов (факты? персона? связность?)
• последовательность их работы
• обоснование для каждого агента
ШАГ 2-N: Refining Agents → последовательно улучшают ответ:
Каждый агент получает:
• текущую версию ответа
• контекст диалога
• обоснование от планировщика
→ выдаёт улучшенную версию
ФИНАЛ: Последний ответ → пользователю
Три типа Refining Agents:
- Fact-refining — проверяет фактическую точность, использует внешние знания
- Persona-refining — проверяет соответствие профилю/предпочтениям пользователя
- Coherence-refining — проверяет связность с предыдущими репликами диалога
Пример применения
Задача: Вы ведёте переписку с клиентом в CRM. Клиент — владелец небольшой кофейни в Воронеже, интересуется экологичной упаковкой, ранее упоминал, что бюджет ограничен. Он спрашивает: "Какие есть варианты стаканчиков для капучино?"
Промпт (упрощённая версия для ручного применения):
# Контекст клиента
Профиль: владелец кофейни в Воронеже, интересуется эко-упаковкой, ограниченный бюджет
Предыдущие реплики: [история диалога]
# Мой черновой ответ
[ваш первый вариант ответа]
# Задача
Ты — эксперт по улучшению клиентских коммуникаций. Проверь ответ по трём аспектам:
1. ФАКТЫ: Верна ли информация о продуктах? Есть ли устаревшие данные?
2. ПЕРСОНАЛИЗАЦИЯ: Учитывает ли ответ профиль клиента (эко-интерес, бюджет, локация)?
3. СВЯЗНОСТЬ: Логично ли ответ продолжает предыдущий диалог?
Для каждого аспекта:
- Оцени текущее качество
- Если нужно улучшение — предложи конкретную правку
- Объясни, почему это важно для этого клиента
В конце выдай улучшенную версию ответа.
Результат: Модель проверит ответ по каждому аспекту последовательно. Укажет, например: "Упомянуты стаканчики Huhtamaki — но не указано, что они дороже бумажных на 40%, что важно для клиента с ограниченным бюджетом". Или: "Клиент из Воронежа — добавь информацию о локальных поставщиках". Финальный ответ учтёт все три аспекта.
Почему это работает
Слабость LLM: Один агент при многократной итерации не становится точнее — он становится увереннее. Исследователи называют это "self-bias amplification". Модель видит свой предыдущий ответ и думает: "Ну, я же это написал, значит это правильно". Каждый цикл усиливает первоначальные ошибки вместо их исправления.
Сильная сторона LLM: Модели отлично работают, когда им дают узкую специализированную задачу с чётким фокусом. "Проверь только факты" работает лучше, чем "проверь всё". Плюс разные "точки зрения" (агенты) создают конструктивное напряжение — один агент может поймать то, что другой пропустил.
Как MARA использует это: Вместо одного агента-универсала — три специалиста. Каждый смотрит только на свой аспект. Плюс планировщик адаптирует проверку: если вопрос чисто фактический — зачем тратить ресурсы на проверку персонализации?
Рычаги управления:
- Набор агентов: Для простых фактических вопросов — только fact-agent. Экономия токенов.
- Порядок агентов: Если персонализация критична — начни с persona-agent
- Глубина проверки: Можно добавить итерации внутри каждого агента для сложных случаев
Шаблон промпта
Для планировщика:
Ты — планировщик проверки ответов в диалоге.
# Контекст диалога
{история_диалога}
# Текущий запрос пользователя
{запрос}
# Первоначальный ответ
{ответ}
# Доступные агенты проверки
- FACT: проверка фактической точности
- PERSONA: соответствие профилю/предпочтениям пользователя
- COHERENCE: связность с предыдущими репликами
# Твоя задача
Определи:
1. Какие агенты нужны для этого запроса (может быть 1, 2 или все 3)
2. В каком порядке они должны работать
3. Обоснование для каждого агента — на что обратить внимание
Формат ответа:
АГЕНТЫ: [список через запятую]
ПОРЯДОК: [последовательность]
ОБОСНОВАНИЯ:
- FACT: [на что смотреть]
- PERSONA: [на что смотреть]
- COHERENCE: [на что смотреть]
Для агента проверки фактов:
Ты — агент проверки фактической точности.
# Контекст
{история_диалога}
# Внешние знания (если есть)
{релевантные_факты}
# Текущий ответ для проверки
{ответ}
# Указание от планировщика
{обоснование_от_планировщика}
# Твоя задача
1. Найди фактические неточности, устаревшие данные, непроверенные утверждения
2. Для каждой проблемы — предложи исправление с источником
3. Выдай улучшенную версию ответа
Если фактических проблем нет — верни ответ без изменений с пометкой "Фактически корректен".
Для агента персонализации:
Ты — агент проверки персонализации.
# Профиль пользователя
{профиль_пользователя}
# История диалога
{история_диалога}
# Текущий ответ для проверки
{ответ}
# Указание от планировщика
{обоснование_от_планировщика}
# Твоя задача
1. Проверь: учитывает ли ответ интересы, предпочтения, контекст пользователя?
2. Найди упущенные возможности персонализации
3. Выдай улучшенную версию, которая лучше резонирует с этим конкретным пользователем
Если персонализация достаточна — верни ответ без изменений с пометкой "Персонализация ОК".
Для агента связности:
Ты — агент проверки связности диалога.
# Полная история диалога
{история_диалога}
# Текущий ответ для проверки
{ответ}
# Указание от планировщика
{обоснование_от_планировщика}
# Твоя задача
1. Проверь: логично ли ответ продолжает диалог?
2. Найди противоречия с ранее сказанным, разрывы контекста, игнорирование упомянутого
3. Выдай улучшенную версию с лучшей связностью
Если связность хорошая — верни ответ без изменений с пометкой "Связность ОК".
🚀 Быстрый старт — вставь в чат:
Вот система MARA для улучшения ответов в диалогах. Адаптируй под мою задачу: [опиши свой диалог/контекст].
Мне нужно проверить ответ по трём аспектам: факты, персонализация, связность. Сначала как планировщик определи, какие аспекты критичны. Потом проверь по каждому.
[вставить шаблоны выше]
LLM спросит про контекст диалога, профиль пользователя и первоначальный ответ — потому что ей нужно понять, какие агенты задействовать. Она возьмёт структуру проверки и адаптирует под вашу ситуацию.
Ограничения
⚠️ Затраты токенов: Полный цикл MARA требует 4-5 вызовов LLM (планировщик + 3 агента). Для простых вопросов это избыточно. Используйте, когда ошибка дорого стоит — клиентские коммуникации, экспертные ответы.
⚠️ Зависимость от качества профиля: Persona-agent работает только если есть информация о пользователе. Нет профиля — нет персонализации. Garbage in — garbage out.
⚠️ Планировщик не идеален: Исследователи показали, что "идеальный" планировщик (который всегда выбирает лучшую комбинацию агентов) даёт значительно лучшие результаты. Текущий планировщик на LLM иногда выбирает не оптимально.
⚠️ Не для креатива: Метод заточен под информационные диалоги — факты, предпочтения, контекст. Для творческих задач (написать стихотворение, придумать слоган) три аспекта MARA не релевантны.
Как исследовали
Команда из KAIST, Amazon и UCL проверила MARA на трёх датасетах диалогов: PersonaChat (нужно учитывать профиль пользователя), INSCIT (нужны точные факты из Wikipedia), FoCus (нужно и то, и другое одновременно). Это 1700+ диалоговых запросов разной сложности.
Сравнивали с шестью бейзлайнами: от простого "без улучшения" до Self-Refine и нескольких мультиагентных систем (LLMvLLM, MADR, MultiDebate). Оценивали по четырём метрикам через G-Eval: связность, фактическая точность, естественность, вовлечённость.
Ключевой инсайт из результатов: Self-Refine и SPP (одноагентные методы) помогали на PersonaChat, где важен только профиль, но вредили на INSCIT и FoCus, где нужны факты. Одноагентная итерация усиливала фактические ошибки. MARA показала стабильное улучшение на всех датасетах — потому что разные агенты не "заражают" друг друга своей уверенностью.
Интересная деталь: исследователи попробовали "идеального планировщика" — перебрали все комбинации агентов и выбрали лучшую для каждого запроса. Результат был значительно лучше (Overall 82.88 против 74.38), но при этом использовал меньше вызовов агентов. Вывод: правильный выбор агентов важнее, чем количество проверок.
Human evaluation с 8 участниками подтвердила: люди предпочитают ответы MARA. Корреляция G-Eval с человеческими оценками — 0.35-0.58 в зависимости от метрики.
Оригинал из исследования
Контекст: Промпты для каждого агента из Appendix исследования.
Planner Agent Prompt:
Given a dialogue history and an initial response, your task is to identify which types of refinement are needed and in what order they should be applied.
Available refinement types:
- FACT: Ensures the response is factually accurate based on provided knowledge
- PERSONA: Ensures the response aligns with the user's persona and preferences
- COHERENCE: Ensures the response is coherent with the dialogue history
For each refinement type you select, provide a brief justification explaining why it is needed.
Dialogue History:
{dialogue_history}
Initial Response:
{initial_response}
Knowledge (if available):
{knowledge}
User Persona (if available):
{persona}
Output format:
Selected refinements (in order): [list]
Justifications:
- [TYPE]: [justification]
Fact-Refining Agent Prompt:
You are a fact-checking agent. Your task is to verify and improve the factual accuracy of a response in a dialogue.
Dialogue History:
{dialogue_history}
Current Response:
{current_response}
Relevant Knowledge:
{knowledge}
Planner's Guidance:
{planner_justification}
Instructions:
1. Check if the response contains any factual inaccuracies
2. Verify claims against the provided knowledge
3. If inaccuracies are found, correct them while maintaining natural dialogue flow
4. If the response is factually accurate, return it unchanged
Output: [refined response or original if no changes needed]
Persona-Refining Agent Prompt:
You are a personalization agent. Your task is to ensure the response aligns with the user's persona and preferences.
Dialogue History:
{dialogue_history}
Current Response:
{current_response}
User Persona:
{persona}
Planner's Guidance:
{planner_justification}
Instructions:
1. Check if the response considers the user's interests, preferences, and characteristics
2. Identify opportunities to make the response more relevant to this specific user
3. Refine the response to better resonate with the user's persona
4. Maintain factual accuracy and dialogue coherence
Output: [refined response or original if no changes needed]
Coherence-Refining Agent Prompt:
You are a coherence agent. Your task is to ensure the response maintains logical consistency with the dialogue history.
Dialogue History:
{dialogue_history}
Current Response:
{current_response}
Planner's Guidance:
{planner_justification}
Instructions:
1. Check if the response logically follows from the previous turns
2. Identify any contradictions with previously stated information
3. Ensure proper reference to earlier mentioned topics
4. Refine the response to improve coherence while maintaining accuracy and personalization
Output: [refined response or original if no changes needed]
Адаптации и экстраполяции
💡 Адаптация для оценки коммерческих предложений
Три агента MARA можно переназначить для проверки собственных КП:
# Агенты для проверки коммерческого предложения
FACT-AGENT → ЦИФРЫ И ОБЕЩАНИЯ
- Проверь: все ли цифры в КП актуальны?
- Нет ли обещаний, которые не можем выполнить?
- Корректны ли сроки и цены?
PERSONA-AGENT → СООТВЕТСТВИЕ КЛИЕНТУ
- Учитывает ли КП специфику этого клиента?
- Говорим ли мы о его болях или о наших фичах?
- Подходит ли тон и уровень детализации?
COHERENCE-AGENT → СВЯЗНОСТЬ С ИСТОРИЕЙ
- Соответствует ли КП тому, что обсуждали на встрече?
- Нет ли противоречий с ранее отправленными материалами?
- Учтены ли возражения, которые уже звучали?
🔧 Техника: объединение агентов для простых случаев
Для экономии токенов можно объединить трёх агентов в один запрос:
Проверь ответ по трём аспектам последовательно:
1. ФАКТЫ: [проверка] → [правка если нужно]
2. ПЕРСОНАЛИЗАЦИЯ: [проверка] → [правка если нужно]
3. СВЯЗНОСТЬ: [проверка] → [правка если нужно]
Выдай финальную версию.
Это даст ~70% эффекта при 25% токенов. Для критичных коммуникаций — используй полную версию с отдельными вызовами.
Ресурсы
Работа: "Adaptive Multi-Agent Response Refinement in Conversational Systems"
Авторы: Soyeong Jeong (KAIST), Aparna Elangovan (Collate, ex-Amazon), Emine Yilmaz (Amazon, UCL), Oleg Rokhlenko (Amazon)
Базовые модели в исследовании: Claude Sonnet 3/3.5, GPT-4o-mini, LLaMA 3.1 (8B, 70B)
Датасеты: PersonaChat, INSCIT, FoCus, PRODIGy, Ubuntu Dialogue Corpus
