TL;DR
MATPO — метод обучения LLM работать в связке планировщик + исполнитель внутри одной модели. Планировщик разбивает задачу на подзадачи, исполнитель решает каждую через поиск и веб-скрапинг, потом передаёт сжатую выжимку обратно планировщику. Всё это активируется через разные system prompts, но работает на одной модели.
Когда LLM сама планирует и ищет информацию, её контекст быстро забивается длинными результатами поиска — статьи на 1500 токенов, таблицы, куски сайтов. Плюс эти результаты часто шумные: реклама, нерелевантные абзацы, битые ссылки. После 5-7 запросов модель начинает «забывать» начало цепочки и реагирует на шум вместо фокуса на задаче.
Разделение ролей решает обе проблемы. Исполнитель держит весь шум у себя в отдельном контексте. Планировщик получает только чистые выжимки по 50-100 токенов вместо сырых 1500. В исследовании это дало +18.38% точности против обычного подхода, причём разница растёт на сложных задачах — до 30% на глубоких исследованиях.
Схема метода
ПЛАНИРОВЩИК (основной контекст):
ШАГ 1: Получает вопрос → создаёт первую подзадачу
ШАГ 2: Получает выжимку от исполнителя → создаёт следующую подзадачу
...
ШАГ N: Получает последнюю выжимку → формирует финальный ответ
ИСПОЛНИТЕЛЬ (новый контекст для каждой подзадачи):
ШАГ 1: Получает подзадачу + напоминание об исходном вопросе
ШАГ 2: Поиск → скрапинг → анализ (весь шум остаётся здесь)
ШАГ 3: Создаёт сжатую выжимку → возвращает планировщику
Ключевое: Каждая подзадача решается в отдельном контексте исполнителя. Планировщик видит только чистые выжимки, не сырой поиск.
Пример применения
Задача: Ты готовишься к переговорам с региональным дистрибьютором бытовой техники в Краснодаре. Нужно понять их текущую позицию на рынке, с кем работают, какие условия предлагают конкурентам.
Промпт для планировщика:
Твоя роль - планировщик исследования.
Задача: Подготовить досье на дистрибьютора "ЮгТехно" (Краснодар) перед переговорами о партнёрстве.
Процесс:
1. Разбей задачу на подзадачи для глубокого поиска
2. Для каждой подзадачи напиши чёткий запрос исследователю
3. Получишь сжатую выжимку от исследователя
4. На основе выжимок создай следующую подзадачу ИЛИ финальный ответ
Формат подзадачи:
ПОДЗАДАЧА: [точный вопрос]
КОНТЕКСТ: [зачем это нужно для основной задачи]
Когда будешь готов дать финальный ответ, напиши:
ФИНАЛЬНЫЙ ОТВЕТ: [структурированное досье с рекомендациями]
Промпт для исполнителя (отдельный чат):
Твоя роль - исследователь.
ИСХОДНАЯ ЗАДАЧА: Подготовить досье на дистрибьютора "ЮгТехно" (Краснодар) перед переговорами о партнёрстве.
ТЕКУЩАЯ ПОДЗАДАЧА: [скопируй подзадачу от планировщика]
Процесс:
1. Найди информацию через поиск
2. Проанализируй найденное
3. Создай СЖАТУЮ ВЫЖИМКУ (только ключевые факты)
Формат выжимки:
ВЫЖИМКА:
- Ключевой факт 1
- Ключевой факт 2
- Ключевой факт 3
[НЕ ВКЛЮЧАЙ сырые результаты поиска, рекламу, нерелевантный текст]
Результат:
Планировщик создаст серию подзадач:
- "Какие бренды представляет ЮгТехно и с кем ещё они работают?"
- "Какие условия работы предлагают их основные конкуренты?"
- "Были ли у них проблемы с поставщиками за последний год?"
Для каждой подзадачи исполнитель проведёт поиск, отфильтрует весь шум (рекламу, битые страницы, нерелевантные абзацы) и вернёт выжимку из 3-5 проверенных фактов. Планировщик соберёт все выжимки в структурированное досье с рекомендациями по точкам давления в переговорах.
Весь мусор из поиска останется в контексте исполнителя и не попадёт к планировщику.
Почему это работает
LLM плохо держит фокус при шуме. Когда в контексте появляются результаты поиска на 1500 токенов с рекламой, битыми таблицами, нерелевантными абзацами — модель начинает реагировать на шум вместо планирования. Она цепляется за случайные упоминания, уходит в сторону от задачи.
LLM отлично работает со структурированными выжимками. Когда модель получает чистую сводку "3 ключевых факта" — она воспринимает это как проверенную информацию, не сырой вывод инструмента. Доверие выше, планирование точнее.
Изоляция контекстов использует обе сильные стороны. Исполнитель держит шум у себя, планировщик получает только сжатую выжимку — 50-100 токенов вместо 1500. Контекст планировщика остаётся чистым на протяжении всей цепочки. Это особенно критично на глубоких исследованиях (5-7 шагов) — именно там разница между multi-agent и single-agent вырастает до 30%.
Рычаги управления:
- Глубина исследования — количество подзадач. Уменьши до 1-2 для быстрых вопросов, увеличь до 5-7 для сложного анализа.
- Детальность выжимки — попроси исполнителя возвращать 3 факта для обзорного анализа или 10 фактов для глубокого погружения.
- Query recapping — напоминание исходной задачи в промпте исполнителя. Критически важно — без этого исполнитель уходит от цели подзадачи. Усиль формулировку, если видишь что исполнитель отвлекается.
- Final summary — попроси исполнителя сделать итоговую сводку вместо простого пересказа последнего найденного. Это дополнительный фильтр шума на выходе — вместо "вот последний найденный факт" модель даст "вот главное из всего что нашёл".
Шаблон промпта
Для планировщика:
Твоя роль - планировщик исследования.
Задача: {опиши задачу}
Процесс:
1. Разбей задачу на подзадачи для глубокого поиска
2. Для каждой подзадачи напиши чёткий запрос исследователю
3. Получишь сжатую выжимку от исследователя
4. На основе выжимок создай следующую подзадачу ИЛИ финальный ответ
Формат подзадачи:
ПОДЗАДАЧА: [точный вопрос]
КОНТЕКСТ: [зачем это нужно для основной задачи]
Когда будешь готов дать финальный ответ, напиши:
ФИНАЛЬНЫЙ ОТВЕТ: [структурированный результат]
Для исполнителя (отдельный чат):
Твоя роль - исследователь.
ИСХОДНАЯ ЗАДАЧА: {скопируй из промпта планировщика}
ТЕКУЩАЯ ПОДЗАДАЧА: {скопируй подзадачу от планировщика}
Процесс:
1. Найди информацию через поиск
2. Проанализируй найденное
3. Создай СЖАТУЮ ВЫЖИМКУ (только ключевые факты)
Формат выжимки:
ВЫЖИМКА:
- Ключевой факт 1
- Ключевой факт 2
- Ключевой факт 3
[НЕ ВКЛЮЧАЙ сырые результаты поиска, рекламу, нерелевантный текст]
Плейсхолдеры:
{опиши задачу}— твоя исследовательская задача (анализ конкурентов, подготовка к переговорам, изучение рынка){скопируй из промпта планировщика}— точно та же формулировка задачи, что дал планировщику{скопируй подзадачу от планировщика}— конкретная подзадача, которую планировщик создал на текущем шаге
Workflow:
- Создай два чата — "Планировщик" и "Исполнитель"
- Вставь промпт планировщика в первый чат
- Планировщик создаст ПОДЗАДАЧУ
- Скопируй эту подзадачу во второй чат (к исполнителю)
- Исполнитель вернёт ВЫЖИМКУ
- Скопируй выжимку обратно планировщику
- Повторяй шаги 3-6, пока планировщик не даст ФИНАЛЬНЫЙ ОТВЕТ
🚀 Быстрый старт — если workflow кажется сложным:
Вот шаблон MATPO - многоагентной системы для глубоких исследований.
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля и объясни как переключаться между чатами.
[вставить оба шаблона выше]
LLM спросит детали задачи (какой глубины нужен анализ, сколько источников проверить, в каком формате нужен результат) и создаст готовые промпты для обоих чатов с пошаговой инструкцией работы.
Ограничения
⚠️ Ручной workflow: Требует переключаться между двумя чатами и копировать подзадачи/выжимки вручную. Автоматизация возможна только через API с кодом — обычный чат не может сам вызывать другой чат.
⚠️ Оверхед для простых задач: Если вопрос решается одним поиском ("кто CEO Tesla?"), multi-agent добавляет лишнюю сложность. Используй для задач требующих 3+ шагов исследования.
⚠️ Качество выжимок: Исполнитель может упустить важные детали при сжатии. Если планировщик запрашивает уточнение — это нормально, вернись к исполнителю с более точной подзадачей ("не вообще тарифы, а тарифы для корпоративных клиентов").
⚠️ Податливость планировщика: Когда исполнитель возвращает выжимку как "user message", планировщик может воспринимать это как указание от пользователя и перестать критиковать ошибки в выжимке. Если видишь что планировщик слепо принимает неточности — усиль в его промпте: "Критически оценивай каждую выжимку, запрашивай уточнения если что-то неясно."
Как исследовали
Команда взяла модель Qwen3-14B и обучила её с подкреплением (RL) на датасете MuSiQue — вопросах требующих многошаговый поиск. Тестировали на трёх бенчмарках: GAIA-text (текстовые задачи для AI-ассистентов), WebWalkerQA (навигация по веб-страницам), FRAMES (факт-чекинг с поиском).
Ключевая находка: MATPO показал +18.38% точности в среднем против single-agent подхода. Но интереснее другое — разница росла на сложных задачах. На простых вопросах (1-2 шага поиска) выигрыш был ~5%, на глубоких исследованиях (5-7 шагов) — до 30%.
Почему так: Single-agent начинает деградировать после 120 шагов обучения — модель «запоминает» шумные результаты и воспроизводит их паттерны. Multi-agent стабилен — изоляция шума в worker-контексте защищает от этого эффекта. График стабильно растёт даже на 200+ шагах обучения.
Неожиданное открытие: Изначально думали, что worker summary — это про экономию токенов. Оказалось, что даже важнее психологический эффект — когда планировщик получает чистую выжимку, он воспринимает её как проверенный факт, не как сырой вывод инструмента. Это снижает "недоверие" модели к результатам поиска и улучшает планирование следующих шагов.
Также обнаружили, что напоминание исходной задачи worker-у (query recapping) критически важно — без этого worker уходил в сторону от цели подзадачи. С recapping точность выросла на 8-12%. Механика простая: в system prompt worker-а добавляли блок "ИСХОДНАЯ ЗАДАЧА ПОЛЬЗОВАТЕЛЯ: ..." — и это держало фокус.
Адаптации и экстраполяции
💡 Адаптация для личного research-ассистента:
Вместо бизнес-задач используй для глубокого изучения темы.
ПЛАНИРОВЩИК:
Задача: Изучить {тему} достаточно глубоко, чтобы объяснить другу за обедом.
Процесс:
1. Создай learning path - последовательность подтем от базовых к сложным
2. Для каждой подтемы создай подзадачу исследователю
3. Получай выжимки и формируй связную картину
4. В конце создай конспект с конкретными примерами
[остальное как в основном шаблоне]
Пример: Изучить "как работает RL в LLM" — планировщик создаст подзадачи: "базовые концепции RL", "специфика для LLM", "популярные алгоритмы (PPO, GRPO)", "практические примеры применения". Исполнитель для каждой вернёт выжимку из 3-5 ключевых идей. В конце — связный конспект со схемами.
🔧 Техника: Двойной summary → глубже фильтрация шума
Попроси исполнителя сделать два этапа сжатия:
ИСПОЛНИТЕЛЬ:
Процесс:
1. Найди информацию через поиск
2. Создай ЧЕРНОВИК ВЫЖИМКИ (все найденные факты)
3. Перечитай черновик и выдели только 3-5 САМЫХ ВАЖНЫХ фактов
4. Верни ФИНАЛЬНУЮ ВЫЖИМКУ
ЧЕРНОВИК ВЫЖИМКИ:
[всё что нашёл - 10-15 фактов]
ФИНАЛЬНАЯ ВЫЖИМКА:
[только критически важное - 3-5 фактов]
Это помогает когда worker возвращает слишком много деталей — двойной проход через фильтр сжатия убирает даже лёгкий шум.
💡 Адаптация для подготовки к собеседованию:
ПЛАНИРОВЩИК:
Задача: Подготовиться к собеседованию на позицию {должность} в {компания}.
Процесс:
1. Создай подзадачи: изучи компанию, роль, типичные вопросы для этой позиции, ситуацию в индустрии
2. Для каждой подзадачи получи выжимку от исследователя
3. Синтезируй в структурированную подготовку:
- Что точно спросят (на основе роли и компании)
- Как отвечать (конкретные примеры из твоего опыта)
- Вопросы к ним (покажи что разбираешься в теме)
[остальное как в основном шаблоне]
Пример: Собеседование на senior product manager в Ozon. Планировщик создаст подзадачи: "Стратегия Ozon в маркетплейсах 2024-2025", "Типичные кейс-вопросы для senior PM в e-commerce", "Ключевые метрики для PM в маркетплейсах", "Текущие челленджи Ozon vs Wildberries". Исполнитель вернёт выжимки, планировщик соберёт в подготовку с конкретными примерами как отвечать и что спросить у интервьюера.
Ресурсы
Multi-Agent Tool-Integrated Policy Optimization — Zhanfeng Mo, Xingxuan Li, Yuntao Chen, Lidong Bing (MiroMind AI, 2025)
Код: https://github.com/mzf666/MATPO
Связанные работы:
- veRL - фреймворк для RL обучения LLM: https://github.com/volcengine/verl
- MiroFlow - open-source multi-agent фреймворк для deep research от той же команды
- Chain-of-Knowledge (Li et al., 2024) - grounding LLM через динамическую адаптацию знаний
- ReAct (Yao et al., 2023) - synergizing reasoning and acting в LLM
