TL;DR
Когда просишь LLM проанализировать связанные объекты (компании в экосистеме, статьи в теме, продукты в категории), модель видит только то, что ты явно описал про каждый объект по отдельности. Она не «достраивает» связи сама — даже если ты перечислил, кто с кем связан. Результат: поверхностный анализ, который не учитывает паттерн отношений.
Исследование GraphInfer-Bench точно измерило эту слабость: разница между «найти факт об одном узле» и «вывести паттерн из нескольких связанных узлов» — огромная. Ни один класс методов, включая GPT-5 и Claude Opus 4.7, не закрыл этот разрыв полностью. Зато выяснилось что конкретно работает: добавление явного контекста на два уровня связей (не только прямые соседи, но и их соседи), плюс принуждение модели писать рассуждения через конкретные связи — а не сразу давать ответ.
Три практических вывода: во-первых, 1-hop контекст (прямые связи) помогает описывать отдельные объекты; 2-hop (связи связей) нужен для задач сравнения и поиска выбивающегося элемента. Во-вторых, явные рассуждения через паттерн связей критически важны — без них модель «схлопывается» в поверхностные ответы. В-третьих, разбивка на группы/кластеры — задача, с которой LLM справляется плохо даже при полном контексте: здесь лучше использовать другие инструменты.
Схема метода
ШАГ 1: Сформировать контекст (в промпте, вручную)
→ Описать объект [hub] + его прямые связи [1-hop] + связи их связей [2-hop]
→ Формат: нумерованный список «узел → чем связан → с кем связан»
ШАГ 2: Поставить задачу с требованием рассуждения
→ Описать задачу (описание / поиск выбивающегося / сравнение)
→ Явно попросить: «Рассуждай через конкретные связи, не просто давай ответ»
→ Формат: сначала «Рассуждение: …», потом «Вывод: …»
Всё выполняется в одном запросе. Ключевое усилие — на стороне пользователя при подготовке контекста.
Пример применения
Задача: Аналитик в венчурном фонде изучает экосистему вокруг Яндекса. Нужно понять, какая из компаний в портфеле «не вписывается» в паттерн связей и почему.
Промпт:
Вот экосистема компаний. Проанализируй её и найди компанию, которая
выбивается из общего паттерна.
**Центральный объект:**
Яндекс — технологическая платформа, поисковик, экосистема сервисов.
**Прямые связи (1-hop) — партнёры и портфельные компании:**
1. Яндекс.Такси — агрегатор поездок, тесная техническая интеграция с
картами и ML-платформой Яндекса
2. Яндекс.Маркет — маркетплейс, использует рекламную и логистическую
инфраструктуру Яндекса
3. Яндекс.Лавка — быстрая доставка продуктов, завязана на геосервисы
и ML-прогнозирование спроса
4. CloudPayments — процессинг платежей, работает с множеством
независимых клиентов за пределами экосистемы Яндекса
5. Яндекс.Облако — B2B-инфраструктура, интегрирована со всеми
сервисами Яндекса
**Связи второго уровня (2-hop) — с чем связаны компании из списка выше:**
- Яндекс.Такси связан с: Яндекс.Картами, Яндекс.Едой, ML-платформой
- Яндекс.Маркет связан с: Яндекс.Доставкой, рекламной сетью,
Яндекс.Кассой
- Яндекс.Лавка связан с: Яндекс.Едой, логистической платформой,
Яндекс.Такси
- CloudPayments связан с: независимыми e-commerce сайтами,
конкурирующими банками, Robokassa, иностранными платёжными
системами
- Яндекс.Облако связан с: Яндекс.DataLens, SpeechKit,
всеми внутренними сервисами
**Задача:**
Какая компания выбивается из паттерна?
Рассуждай через конкретные связи: покажи, чем паттерн связей
выбивающейся компании отличается от остальных. Сначала напиши
«Рассуждение:», потом «Вывод:».
Результат: Модель напишет в блоке «Рассуждение» — явный разбор паттернов: у четырёх компаний связи второго уровня замкнуты внутри экосистемы Яндекса, а у одной (CloudPayments) — уходят наружу, к независимым игрокам и конкурентам. В блоке «Вывод» — конкретная компания с объяснением через структуру связей, а не просто «не похожа на остальных».
Почему это работает
LLM читает токены последовательно — у неё нет «обзора» связей как такового. Когда ты пишешь «компания A связана с B, C, D», модель обрабатывает это как текст, а не как структуру. Паттерн из нескольких узлов она не «видит» автоматически — ей нужно, чтобы этот паттерн был явно сформулирован в тексте.
Зато модель хорошо справляется с текстовым сравнением. Если ты уже развернул связи в явные описания — «вот что связывает A, вот что связывает B, вот что связывает C» — модель может сопоставить эти описания и найти отличие. Это задача на сравнение текстов, а не на «понимание графа».
2-hop контекст критически важен для задач сравнения. Исследование показало: 1-hop (прямые связи) дал огромный прирост на задачах описания, но почти не помог при поиске выбивающегося элемента. Именно 2-hop поднял точность на этой задаче на 27–46 процентных пунктов. Смысл прост: чтобы понять, что A выбивается из группы B, C, D — нужно видеть не только с кем связан A, но и с кем связаны B, C, D. Без этого сравнения «по паттерну» нет.
Рычаги управления: - Глубина контекста — для описания достаточно 1-hop, для поиска аномалии/сравнения нужен 2-hop - Явное рассуждение — «рассуждай через конкретные связи» даёт намного лучший результат, чем просто «ответь на вопрос» - Формат вывода — разделение на «Рассуждение» и «Вывод» помогает модели не «схлопываться» в поверхностный ответ - Задача кластеризации — если нужно разбить на группы, не рассчитывай на LLM: этот тип задачи устойчиво плохо решается даже с полным контекстом
Шаблон промпта
Вот сеть связанных объектов. Проанализируй её и {задача}.
**Центральный объект:**
{название_объекта} — {краткое_описание}
**Прямые связи (уровень 1):**
1. {объект_1} — {описание} + {характер_связи_с_центральным}
2. {объект_2} — {описание} + {характер_связи_с_центральным}
3. {объект_3} — {описание} + {характер_связи_с_центральным}
[добавь столько, сколько нужно]
**Связи второго уровня:**
- {объект_1} связан с: {его_связи_через_запятую}
- {объект_2} связан с: {его_связи_через_запятую}
- {объект_3} связан с: {его_связи_через_запятую}
**Задача:**
{конкретная_задача — описать паттерн / найти выбивающийся элемент /
сравнить два узла}
Рассуждай через конкретные связи из списка выше.
Сначала напиши «Рассуждение:» — покажи паттерн по связям.
Потом «Вывод:» — конкретный ответ.
Что подставлять:
- {задача} — описать общий паттерн / найти аномалию / сравнить два объекта / определить к какой группе относится объект
- {характер_связи} — техническая интеграция / конкурент / клиент / партнёр / входит в экосистему
- {его_связи} — перечисли 2–4 ключевых партнёра/клиента второго уровня; не нужна исчерпывающая точность, нужен паттерн
🚀 Быстрый старт — вставь в чат:
Вот шаблон для анализа связанных объектов (компаний, продуктов, людей,
понятий). Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит про центральный объект, прямые связи и их характер, связи второго уровня и конкретную задачу — потому что без этого наполнения структура не сработает. Она возьмёт паттерн шаблона и адаптирует под твои данные.
Ограничения
⚠️ Кластеризация не работает: Просить LLM «раздели эти объекты на группы» — плохая идея даже при полном 2-hop контексте. Исследование показало: на этой задаче LLM устойчиво проигрывает простым структурным алгоритмам. Используй LLM для описания и поиска аномалий, не для разбивки на кластеры.
⚠️ Контекст вручную: Тебе самому нужно собрать и структурировать 1-hop и 2-hop информацию. LLM не «достроит» связи из воздуха — это твоя работа на вводе. Чем точнее и полнее контекст связей, тем лучше результат.
⚠️ Большие сети не влезут: При более чем 10–15 объектах на уровень контекст разрастается и теряет качество. Ограничивай: 5–10 прямых связей + 3–5 ключевых связи второго уровня для каждой.
⚠️ Работает на description-задачах и outlier-задачах. На задачах полного разбиения (разбей 20 объектов на 3 группы) — результат ненадёжный.
Как исследовали
Команда из HKUST и WeBank поставила вопрос: а умеют ли вообще LLM рассуждать о связях — или они только умеют «смотреть» на отдельные узлы? Чтобы ответить честно, они собрали 42 000 задач из шести реальных графов: научные цитирования, патенты, товары на маркетплейсе, Wikipedia, медицинская литература, форум по физике.
Ключевая хитрость дизайна: каждая задача была специально сконструирована так, чтобы правильный ответ нельзя было найти в одном узле. Например, для задачи «найди тему кластера» — всё, что нужно знать, распределено по нескольким соседним узлам. Нельзя просто прочитать одну карточку товара и сказать «это категория электроники».
Сравнивали четыре класса методов: специализированные граф-LLM модели, GPT-5 и Claude Opus 4.7 без настройки, дообученные на задаче открытые модели, и — для честного сравнения — простые алгоритмы на графах (GNN) без языковой модели вообще. Самый неожиданный результат: простые GNN побили все языковые модели на трёх из пяти задач. Не потому что LLM «слабые» — а потому что сигнал живёт в структуре связей, и языковые модели не умеют его правильно извлечь без явной подачи.
Отдельный эксперимент с 1-hop и 2-hop контекстом буквально показал: добавление явных описаний соседей второго уровня подняло точность на задаче поиска аномалии на 27–46 процентных пунктов. Это не статистический шум — это радикальный сдвиг, вызванный одним изменением в структуре промпта.
Адаптации и экстраполяции
🔧 Техника: заменить «связи» на любой тип отношений → применимо везде, не только в графах
Паттерн «объект + прямые связи + связи связей» работает для любой сетевой структуры. Примеры: - Карьерное решение: «центральный объект» = ты, 1-hop = компании куда рассматриваешь офер, 2-hop = люди/проекты/технологии с которыми будешь работать в каждой - Конкурентный анализ: «центральный объект» = твой продукт, 1-hop = прямые конкуренты, 2-hop = их партнёры и интеграции - Аргументация в тексте: «центральный тезис» = главная идея, 1-hop = прямые аргументы, 2-hop = что поддерживает каждый аргумент
🔧 Техника: добавить явный шаг «сравни паттерны» → лучше находит аномалии
Перед блоком «Рассуждение» добавь промежуточный шаг:
Сначала опиши паттерн связей для каждого объекта в одном предложении. Потом сравни паттерны. Потом напиши «Рассуждение:» и «Вывод:».Это принуждает модель явно артикулировать паттерн по каждому объекту до сравнения — она не «перепрыгивает» к ответу.
Ресурсы
GraphInfer-Bench: Benchmarking LLM's Inference Capability on Graphs
Dataset: huggingface.co/datasets/graphinfer/graphinfer
Code: github.com/graphinfer/GraphInfer-Bench
Авторы: Zhuoyi Peng, Jingzhou Jiang (HKUST), Hanlin Gu, Lixin Fan (WeBank), Yi Yang (HKUST)
