TL;DR
AnchorRAG — multi-agent фреймворк для поиска в графах знаний, который работает без предопределённой стартовой точки. Вместо одной гипотезы "откуда начать поиск" система запускает несколько параллельных агентов, каждый исследует граф от своего кандидата. Predictor-агент находит возможные якорные сущности, retriever-агенты исследуют пути от каждой, supervisor-агент синтезирует результаты и решает продолжать или остановиться.
Главная проблема RAG на графах знаний — не сам поиск, а найти с чего начать. Когда спрашивают "Кто вдохновил Фицджеральда?" — нужно сначала найти сущность "Fitzgerald" в графе. Но там может быть несколько Fitzgerald, или написание с ошибкой, или сокращённое имя. Ошибка на старте = весь поиск впустую. Существующие методы выбирают один якорь и идут от него — если промахнулись, всё ломается.
AnchorRAG решает это параллелизмом и двухуровневой фильтрацией. Сначала predictor находит 3-5 кандидатов в якорные сущности (rough pruning) — не только по названию, но и по структурному окружению в графе (какие связи у сущности, насколько они релевантны вопросу). Потом каждый retriever-агент исследует свой путь независимо, применяя точную фильтрацию (fine filtering) на каждом шаге. Supervisor собирает результаты всех агентов и выбирает лучший ответ. Если один агент зашёл в тупик — остальные компенсируют.
Схема метода
Predictor Agent:
- Извлечь ключевые слова из вопроса
- Найти кандидатов по семантике + структурному контексту
→ Топ-3 кандидата в якорные сущности
Retriever Agents (параллельно для каждого кандидата):
Итерация 1:
- Rough pruning: отобрать топ-3 релевантных связи
- Fine filtering: из связанных сущностей выбрать релевантные факты
- Early stopping: если путь бесперспективен — завершить этого агента
→ Набор фактов от каждого агента
Supervisor Agent:
- Синтез результатов всех активных агентов
- Решение: достаточно для ответа? → Да: ответ / Нет: следующая итерация
Если ни один агент не нашёл ответ за L итераций (обычно 3) — supervisor отвечает на основе внутренних знаний LLM.
Пример применения
⚠️ Важно: Сам метод требует граф знаний и API — не применим в обычном чате. НО его принципы (multi-agent collaboration, parallel exploration, two-stage filtering) extractable.
Задача: Оценить стоит ли открывать своё digital-агентство в Екатеринбурге — применяем принцип параллельных агентов
Промпт:
Проанализируй идею открытия digital-агентства в Екатеринбурге с трёх независимых позиций. Каждая позиция — отдельный агент с чёткой ролью:
**Агент "Оптимист":**
Найди 5 факторов, которые делают эту идею перспективной:
- Рыночные возможности
- Конкурентные преимущества
- Тренды в пользу идеи
Будь конкретным — цифры, примеры, кейсы.
**Агент "Пессимист":**
Найди 5 рисков и проблем, которые могут убить бизнес:
- Барьеры входа
- Конкуренция
- Экономические риски
Будь жёстким — что ТОЧНО пойдёт не так?
**Агент "Реалист":**
Определи 3-5 ключевых метрик для проверки ДО запуска:
- Что измерить?
- Какие показатели должны быть?
- Как тестировать гипотезы минимальными ресурсами?
После анализа всех трёх агентов — синтезируй выводы и дай финальную рекомендацию: запускать / отложить / переделать концепцию. Укажи при каких условиях решение меняется.
Результат: Модель выдаст три независимых блока анализа — каждый со своей логикой и фокусом. Оптимист покажет возможности (может быть 5-7 пунктов с конкретикой), пессимист — риски (тоже детально), реалист — метрики для валидации. В финале — взвешенное решение, которое учитывает все три точки зрения, а не только ту, которая пришла модели в голову первой.
Почему это работает
Слабость LLM: Модель склонна к confirmation bias — находит аргументы в пользу первой версии, которая пришла в голову. Если LLM решила "да, агентство — хорошая идея", она будет генерировать подтверждающие доводы. Противоречия всплывут только если явно попросить.
Сильная сторона: LLM отлично выполняет чётко заданные роли. Когда говоришь "ты пессимист" — модель генерирует текст в этом ключе. Когда "ты оптимист" — противоположное. Это не разные модели, это разные паттерны генерации от одной.
Как метод использует: Multi-agent framework заставляет явно рассмотреть альтернативы через структуру промпта. Вместо "подумай со всех сторон" (размытая инструкция) даёшь конкретные роли с конкретными задачами. Параллельность критична — агенты не влияют друг на друга на этапе анализа, каждый идёт своим путём. Только на финале supervisor синтезирует без предвзятости, т.к. все данные уже собраны.
Рычаги управления промптом:
- Количество агентов (2-5):
- 2 агента (за/против) — для бинарных решений
- 3-4 агента (оптимист/пессимист/реалист/эксперт) — для многогранного анализа
- 5+ агентов — избыточно, размывает фокус
- Роли агентов (безликие vs конкретные):
- Безликие: "Агент 1", "Агент 2" — нейтрально
- Конкретные: "Финансовый директор", "Техлид", "Маркетолог" — острее выполнение роли
- Персонажи: "Павел Дуров", "Тинькoff" — ещё острее, но рискованно (стереотипы)
- Инструкции агентам (широкие vs узкие):
- Широкие: "проанализируй с позиции X" — больше свободы, но размытость
- Узкие: "найди ровно 5 рисков, каждый с цифрами" — конкретика, но может ограничить
- Формат финального синтеза:
- Убери "синтезируй" → получишь 3 отдельных блока без вывода (для самостоятельного анализа)
- Добавь "с оценкой 1-10 и обоснованием" → числовая метрика + аргументы
- Добавь "с планом действий на 30 дней" → actionable выход
Шаблон промпта
Проанализируй {задачу/идею/решение} с {N} независимых позиций:
**Агент 1 — {роль_1}:**
{инструкция_1}
{формат_вывода_1}
**Агент 2 — {роль_2}:**
{инструкция_2}
{формат_вывода_2}
**Агент {N} — {роль_N}:**
{инструкция_N}
{формат_вывода_N}
После анализа всех агентов — синтезируй выводы и дай {формат_финального_вывода}.
Плейсхолдеры:
{задачу/идею/решение}— что анализируем (бизнес-идея, карьерный выбор, инвестиционное решение){N}— количество агентов (обычно 2-4){роль_X}— специализация агента (оптимист/пессимист, финансист/маркетолог, новичок/эксперт){инструкция_X}— конкретная задача агента (найти риски, оценить потенциал, проверить feasibility){формат_вывода_X}— как оформить (список, таблица, абзац с обоснованием){формат_финального_вывода}— итоговый output (рекомендация ДА/НЕТ, рейтинг 1-10, план действий)
Совет: Для каждого агента давай конкретную числовую цель — "найди 5 рисков", "3 ключевых метрики", "топ-3 преимущества". Это заставляет модель не размазывать анализ, а быть точечной.
Ограничения
⚠️ Токены: Каждый агент = отдельный блок текста. 3 агента могут съесть в 3 раза больше контекста, чем один прямой ответ. Для моделей с малым context window (4K-8K) это критично.
⚠️ Сложность задачи: Для простых вопросов ("когда основана Москва?") избыточно. Нужна реальная многогранность — где ответ зависит от точки зрения или критериев оценки.
⚠️ Противоречия: Если агенты дают несовместимые выводы (один говорит "точно да", другой "точно нет"), финальный синтез может быть размытым. Иногда лучше оставить противоречие явным и решать самому.
⚠️ Качество ролей: Если роли агентов слабо различимы (все три примерно про одно), метод вырождается в повтор одних мыслей разными словами. Роли должны быть контрастными по фокусу.
Как исследовали
Исследователи взяли 4 датасета для вопросно-ответных задач (WebQSP, GrailQA, CWQ, WebQuestions) и граф знаний Freebase с миллионами фактов. Сравнивали с методами, которые получают anchor entity "на блюдечке" (closed-world assumption).
Интересный ход: создали open-world версии датасетов — добавили опечатки в вопросы ("Romny" вместо "Romney"), чтобы exact match с графом не работал, и вопросы, ответы на которые вообще нет в графе. Это реалистичный сценарий — пользователи делают ошибки, задают вопросы про редкие сущности.
Результаты: AnchorRAG обогнал все базовые методы на 6-20% по точности. Особенно сильно — на сложном GrailQA (+20.7%), где сущности и вопросы семантически далеки (например, вопрос про "университет Ромни" может ссылаться на Mitt Romney, George W. Romney, или Romney Marsh — все в графе).
Критический инсайт: На open-world версиях стандартный метод ToG (Think-on-Graph) проседал на 11-23%, AnchorRAG — всего на 3-12%. Почему? Параллельные агенты компенсировали ошибки в определении якорной сущности. Если один агент ошибся и пошёл от Romney Marsh, другие от Mitt Romney и нашли ответ.
Ablation study показало: модуль entity grounding (определение якоря с учётом структурного окружения, а не только названия) даёт +6.3% на WebQSP и +20.6% на GrailQA. Это подтверждает: точность на старте критична для всего поиска.
Адаптации и экстраполяции
💡 Адаптация: двухуровневая фильтрация для найма
Rough pruning + fine filtering можно применить к отбору резюме:
**Шаг 1 — Грубая фильтрация:**
Из 50 резюме отбери 10-15, которые точно подходят по hard skills и опыту.
Критерии: [Python 3+ года, опыт с API, английский B2+].
Убери очевидно не подходящих. Без детального анализа — только проверка чек-листа.
**Шаг 2 — Точная фильтрация:**
Из оставшихся 10-15 выбери топ-3 по soft skills, культурному фиту и мотивации.
Для каждого дай развёрнутое обоснование: почему этот кандидат, какие риски, что проверить на интервью.
Эффект: Экономия времени (не анализируешь 50 резюме глубоко) + меньше шанс пропустить хорошего кандидата (широкий охват на первом проходе).
🔧 Техника: structural context вместо голых ключевых слов
AnchorRAG ищет якорные сущности не только по названию, но и по окружению (какие связи у сущности). Адаптация:
Вместо:
"Найди информацию про компанию Ozon"
Лучше:
"Найди информацию про компанию Ozon.
Контекст: российский e-commerce, конкурент Wildberries, основана 1998, IPO 2020.
Это важно чтобы не путать с озоновым слоем или другими Ozon."
Или для найма:
Вместо:
"Найди кандидатов с опытом в Python"
Лучше:
"Найди кандидатов с опытом в Python.
Контекст: нужен для backend API на FastAPI, работа с PostgreSQL, интеграции с внешними сервисами.
Это важно чтобы отсеять тех, кто знает Python только для Data Science."
Принцип: Не голое ключевое слово, а слово + смежные концепты. Это сужает семантическое пространство поиска и повышает точность.
Ресурсы
Towards Open-World Retrieval-Augmented Generation on Knowledge Graph: A Multi-Agent Collaboration Framework
Jiasheng Xu, Mingda Li, Yongqiang Tang, Peijie Wang, Wensheng Zhang
Institute of Automation, Chinese Academy of Sciences
Граф знаний: Freebase (Bollacker et al. 2008)
Базовые методы: Think-on-Graph (Sun et al. 2023), Plan-on-Graph (Chen et al. 2024)
Датасеты: WebQSP, GrailQA, CWQ, WebQuestions
