TL;DR
AdvisingWise — мультиагентная система для консультирования студентов, которая автоматизирует поиск информации и составление черновиков ответов, но все ответы проходят проверку живым консультантом перед отправкой. Система собирает академический профиль студента из разговора, использует ReAct-подход (итеративные циклы "рассуждение → действие") для поиска информации в разных источниках, и генерирует персонализированные черновики с явным указанием неопределённости.
Ключевая проблема академического консультирования: консультанты перегружены (высокое соотношение студентов к консультантам), тратят много времени на поиск информации в разных документах, а студенты получают ответы с задержкой, особенно в пиковые периоды. LLM типа ChatGPT галлюцинируют и дают общие ответы вместо персонализированных — это критично, потому что неточный совет может задержать выпуск или сломать карьерный путь.
Решение через три фазы: (1) Обработка запроса — извлечение информации о студенте, переформулировка с учётом контекста, фильтрация нерелевантных вопросов. (2) Сбор информации — два агента работают итеративно до 4 циклов: один определяет что найти, второй находит (через базу документов, базу курсов, веб-поиск или вопросы студенту). (3) Генерация ответа — один агент создаёт черновик, второй проверяет точность и отсутствие галлюцинаций. Консультант видит черновик с детальным ответом, саммари, списком источников и заметками о неопределённости — одобряет или редактирует перед отправкой.
Схема метода
ФАЗА 1: Обработка запроса (в одной цепочке)
Агент 1: Извлечь инфо о студенте → сохранить в профиль
Агент 2: Переформулировать вопрос с учётом контекста → самодостаточный вопрос
Агент 3: Классифицировать → релевантно/нерелевантно академическому консультированию
ФАЗА 2: Сбор информации (итеративно, до 4 циклов)
Цикл (повторяется до 4 раз или пока не собрана вся инфо):
Thought Agent: Определить что нужно найти → выбрать действие + сформулировать поисковый запрос
Action Agent: Выполнить действие → вернуть информацию
Доступные действия:
- search_knowledge_base: Поиск в базе институциональных документов (RAG)
- search_course_db: Поиск курса по названию/коду
- search_web: Поиск в интернете (если внутренних данных мало)
- request_student_info: Запросить дополнительную информацию у студента
- provide_answer: Завершить сбор, перейти к Фазе 3
ФАЗА 3: Генерация ответа
Answer Generator: Создать черновик → детальный ответ + источники + оценка полноты + пробелы
Quality Controller: Проверить точность → нет галлюцинаций, правильные цитирования → одобрить или вернуть
Результат для консультанта: - Детальный ответ (с форматированием) - Краткое саммари - Список источников с номерами страниц/ссылками - Заметка для консультанта (если есть неопределённость)
Пример применения
Задача: Ты руководишь небольшой продуктовой командой. К тебе регулярно приходят джуниоры с вопросами: "Какую задачу мне взять дальше?", "Можно ли использовать эту библиотеку?", "Как работает процесс ревью кода у нас?". Ты тратишь много времени на поиск информации в Confluence, Notion, Slack-истории и персонализированные ответы. Хочешь создать систему, которая подготовит черновик ответа для твоей проверки.
Промпт:
Ты — ассистент тимлида, помогаешь готовить ответы на вопросы джуниоров.
ПРОФИЛЬ СОТРУДНИКА:
{Имя: Алексей, Стек: Frontend (React), Опыт в команде: 2 месяца, Текущая задача: рефакторинг корзины}
ВОПРОС:
"Можно ли мне взяться за задачу с интеграцией платёжной системы? Или рано?"
ТВОЯ ЗАДАЧА:
ФАЗА 1: Анализ вопроса
- Какая информация о сотруднике уже есть?
- Какая информация нужна дополнительно? (задай вопросы)
- О чём конкретно спрашивают?
ФАЗА 2: Сбор информации (до 3 итераций)
Итерация 1:
Что нужно узнать: [определи]
Где искать: [я дам тебе материалы или отвечу на твои вопросы]
Итерация 2 (если нужно):
Что ещё нужно узнать на основе найденного: [определи]
Где искать: [...]
[Продолжай пока не соберёшь достаточно информации]
ФАЗА 3: Черновик ответа
Создай:
1. ДЕТАЛЬНЫЙ ОТВЕТ (2-3 абзаца, выдели важное **жирным**)
2. КРАТКОЕ САММАРИ (1 предложение)
3. ИСТОЧНИКИ (какие документы/правила использовал)
4. ЗАМЕТКА ДЛЯ ТИМЛИДА (если чего-то не хватает для полного ответа или есть неопределённость)
5. УРОВЕНЬ УВЕРЕННОСТИ (высокий/средний/низкий)
ВАЖНО:
- Основывайся ТОЛЬКО на информации которую я предоставлю
- Если информации недостаточно — явно укажи это в заметке
- Учитывай профиль сотрудника для персонализации
Результат:
Модель сначала задаст уточняющие вопросы (Фаза 1): "Есть ли у нас документ с требованиями к задачам по уровням сеньорности?", "Какой примерный срок задачи с платёжной системой?", "Работал ли Алексей раньше с бэкенд-интеграциями?". После твоих ответов пройдёт 2-3 итерации сбора информации (Фаза 2), на каждой определяя что ещё нужно узнать. В финале (Фаза 3) выдаст структурированный черновик: детальный ответ с аргументацией и рекомендациями, саммари в одну строку, список использованных источников (твои внутренние доки), заметку для тебя ("Недостаточно информации о прошлом опыте Алексея с payments — возможно стоит уточнить лично"), и оценку уверенности в ответе.
Почему это работает
LLM плохи в работе с распределённой информацией — если ответ требует синтеза данных из нескольких источников (документ А + база данных Б + уточнение у пользователя), модель либо додумывает, либо даёт поверхностный ответ. Также модели не знают когда остановиться — вместо признания неопределённости генерируют правдоподобно звучащую неточность.
LLM сильны в пошаговом рассуждении и следовании структурированным инструкциям. Когда явно разделяешь "подумай что нужно" от "найди это", модель точнее определяет пробелы в информации и не спешит с выводами.
ReAct-подход (Reasoning + Acting) использует эту силу: модель рассуждает о том что ей нужно узнать, затем действует (ищет информацию), видит результат действия в контексте, снова рассуждает что делать дальше. Цикл повторяется пока информации не станет достаточно. Это имитирует как работает человек: не пытается ответить сразу, а сначала собирает контекст.
Явное указание неопределённости работает потому что встраивается в структуру вывода — модель должна заполнить поле "Заметка о пробелах", что заставляет её проанализировать полноту информации вместо генерации ответа "в слепую".
Рычаги управления: - Число итераций (4 цикла в оригинале) → уменьши до 2 для простых вопросов, сэкономишь токены - Набор действий → адаптируй под свои источники (вместо search_knowledge_base используй "загляни в мой Notion", "проверь в Slack") - Условие выхода → в оригинале "пока Thought Agent не скажет provide_answer", можно заменить на "соберёшь минимум 3 факта" или "найдёшь ответ в официальном документе" - Структура вывода → убери "Уровень уверенности" если не важен, добавь "Альтернативные варианты ответа" если нужна вариативность
Шаблон промпта
Ты — ассистент-консультант, помогаешь готовить ответы на вопросы.
ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ:
{профиль_пользователя — заполни из предыдущих сообщений или попроси у меня}
ВОПРОС:
{вопрос_пользователя}
ТВОЯ ЗАДАЧА:
ФАЗА 1: Анализ вопроса
- Какая информация о пользователе уже есть в профиле?
- Какая информация нужна дополнительно? (задай мне вопросы)
- О чём конкретно спрашивают?
- Релевантен ли вопрос теме {твоя_тема_консультирования}? Если нет — скажи об этом и останови процесс.
ФАЗА 2: Сбор информации (до {число_итераций} итераций)
Итерация 1:
Рассуждение: Что мне нужно узнать для ответа?
Действие: Где мне это найти?
Результат: [я предоставлю информацию или дам ответ на твой вопрос]
Итерация 2 (если нужно):
Рассуждение: Что ещё нужно узнать на основе уже найденного?
Действие: Где мне это найти?
Результат: [...]
[Продолжай итерации пока не соберёшь достаточно информации]
Доступные действия для поиска:
- Попроси меня предоставить материалы из {твои_источники_информации}
- Задай уточняющие вопросы пользователю (через меня)
- Попроси меня поискать информацию в {конкретное_место}
ФАЗА 3: Черновик ответа
Создай структурированный черновик:
1. ДЕТАЛЬНЫЙ ОТВЕТ (2-3 абзаца, выдели важное **жирным**, используй форматирование)
- Основывайся ТОЛЬКО на информации которую я предоставил
- Персонализируй с учётом профиля пользователя
- Будь конкретным и применимым
2. КРАТКОЕ САММАРИ (1 предложение для быстрого сканирования)
3. ИСТОЧНИКИ
- Перечисли все материалы/документы которые я предоставил
- Если использовал информацию из профиля пользователя — укажи "Профиль пользователя (обновлён: [когда])"
4. ЗАМЕТКА ДЛЯ МЕНЯ (только если применимо)
- Какой информации не хватает для полного ответа
- Где есть неопределённость или предположения
- Что стоит дополнительно уточнить
5. УРОВЕНЬ УВЕРЕННОСТИ: [Высокий / Средний / Низкий]
ВАЖНЫЕ ПРАВИЛА:
❌ НЕ додумывай информацию — если не знаешь, явно скажи в заметке
❌ НЕ делай предположений о пользователе — если нужна информация, запроси через действие
✅ Основывайся только на фактах из предоставленных материалов
✅ Явно указывай пробелы и неопределённость
Как заполнять:
- {профиль_пользователя} — краткие данные о человеке, которому консультируешь (опыт, контекст, предыдущие вопросы)
- {вопрос_пользователя} — конкретный вопрос
- {твоя_тема_консультирования} — область твоей экспертизы (карьерное развитие, продуктовые решения, подбор инструментов)
- {число_итераций} — 3-4 для сложных вопросов, 2 для простых
- {твои_источники_информации} — где у тебя лежат материалы (Notion, Google Docs, папка с PDF)
🚀 Быстрый старт — вставь в чат:
Вот шаблон ReAct-консультанта. Адаптируй под мою задачу: [твоя задача консультирования].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит какая у тебя тема консультирования, где хранятся материалы, сколько итераций нужно для типичных вопросов — потому что ей нужно понять контекст для настройки действий и источников информации. Она возьмёт ReAct-паттерн из шаблона и адаптирует под твою задачу.
Почему это работает
Слабость LLM: Модели плохо работают с распределённой информацией — когда для ответа нужно синтезировать данные из нескольких источников (документ + база знаний + контекст пользователя). В таких случаях LLM либо додумывает детали, либо даёт поверхностный ответ, игнорируя часть контекста. Также модели не признают неопределённость — вместо "не знаю" генерируют правдоподобную, но неточную информацию.
Сильная сторона LLM: Модели отлично справляются с пошаговым рассуждением (Chain-of-Thought) и следованием чётким структурированным инструкциям. Когда процесс разбит на явные этапы — анализ → планирование → действие → проверка — модель работает значительно точнее.
Как метод использует это: ReAct (Reasoning + Acting) разделяет "думай" и "делай" в явные чередующиеся шаги. Модель рассуждает что ей нужно узнать, действует (находит информацию), видит результат, снова рассуждает на основе нового контекста. Это имитирует как работает человек-эксперт: не бросается отвечать сразу, а сначала методично собирает все релевантные данные.
Многофазная структура (обработка → сбор → генерация) заставляет модель сначала понять вопрос и контекст, потом найти информацию, и только в конце синтезировать ответ. Это предотвращает "быстрые выводы" на недостаточных данных.
Явное требование указывать неопределённость работает потому что встраивается в структуру вывода — модель должна заполнить поле "Заметка о пробелах", что принуждает её проанализировать полноту информации вместо молчаливого додумывания.
Рычаги управления:
Число итераций → В оригинале 4 цикла. Уменьши до 2 для простых вопросов (экономия токенов), увеличь до 5-6 для сложных многоисточниковых задач.
Набор доступных действий → Адаптируй под свои реальные источники. Вместо абстрактного "search_knowledge_base" укажи конкретно: "Попроси меня дать содержание раздела из Notion", "Попроси показать скриншот из Figma", "Задай вопрос пользователю через меня".
Условие выхода из циклов → В оригинале "пока агент не скажет provide_answer". Можешь заменить на: "собери минимум 3 факта из разных источников", "найди информацию в официальном документе, или признай что её нет", "продолжай пока уровень уверенности не станет высоким".
Структура финального вывода → Убери "Уровень уверенности" если для тебя не важен. Добавь "Альтернативные варианты ответа" если нужна вариативность. Добавь "Следующие шаги" если консультируешь по действиям.
Профиль пользователя → В оригинале система автоматически извлекает и сохраняет данные между сессиями. В чате ты можешь: (1) в начале каждой сессии давать краткий профиль, или (2) попросить модель "в первом сообщении всегда спрашивать у меня ключевые данные о пользователе".
Ограничения
⚠️ Работает в пределах одной сессии: Профиль пользователя и контекст сохраняются только в текущем диалоге. Между сессиями придётся заново предоставлять базовую информацию или вручную копировать профиль из предыдущего чата.
⚠️ Требует ручной подачи материалов: В оригинале система автоматически ищет в базах данных и векторных хранилищах. В чате ты должен вручную предоставлять документы, тексты, ссылки на каждом шаге когда модель запрашивает информацию.
⚠️ Эффективность зависит от качества источников: Если твои материалы неструктурированы или информация размазана по множеству мест, процесс сбора станет трудоёмким. Метод работает лучше когда у тебя 3-5 чётких источников истины.
⚠️ Длинные циклы → большой расход токенов: Каждая итерация добавляет рассуждения и результаты в контекст. После 3-4 циклов промпт раздувается. Для частого использования может быть затратно.
⚠️ Не для срочных вопросов: Многофазный процесс с итерациями занимает время. Если нужен быстрый ответ "на ходу" — проще спросить напрямую. Метод для случаев когда важна точность и полнота выше скорости.
Ресурсы
AdvisingWise: Supporting Academic Advising in Higher Education Settings Through a Human-in-the-Loop Multi-Agent Framework — Wendan Jiang, Shiyuan Wang (оба Tufts University равные вклады), Hiba Eltigani, Rukhshan Haroon, Abdullah Bin Faisal, Fahad Dogar (все Tufts University).
Упоминаемые методы: ReAct (Reasoning and Acting) [50], RAG (Retrieval-Augmented Generation) [31], Chain-of-Thought prompting [48], LangGraph [28] framework.
