TL;DR
Если спросить модель «Когда родился лучший друг Зидана?» — она может ответить неправильно, даже если на вопросы «Кто лучший друг Зидана?» и «Когда родился Тьерри Анри?» отвечает верно. Это не пробел в знаниях — факты есть в модели. Это структурный сбой: в обучающих текстах эти факты никогда не встречались вместе, поэтому модель не умеет их автоматически соединять.
Главный инсайт: модель хранит факты как отдельные острова, не как связанную карту. Вопрос «когда родился друг X» требует сначала найти имя друга, потом найти дату рождения — два шага в одном. Но модель пытается ответить «с наскока», без этих промежуточных шагов, и промахивается. Это не вопрос размера модели или мощности — разрыв сохраняется даже у самых крупных LLM.
Практический вывод: любой вопрос, где ответ требует цепочки из двух и более фактов, нужно явно разбивать на шаги. Назвать промежуточную сущность вслух — и ответ резко улучшается. Именно это и делает Chain-of-Thought: он не просто «думает медленнее», он вытаскивает промежуточные звенья в явный текст.
Схема метода
Это исследование-находка, а не техника. Практический вывод оформляется как двухшаговая декомпозиция вопроса:
ШАГ 1: Явный вопрос о промежуточной сущности
→ получить имя/объект/факт-связку
ШАГ 2: Вопрос с уже названной сущностью
→ получить финальный ответ
Оба шага могут быть в одном промпте — нужно просто явно прописать структуру: «сначала определи X, затем ответь про X».
Пример применения
Задача: Готовишься к переговорам. Хочешь узнать про опыт инвестора, который вложился в конкурента.
❌ Плохо — неявный цепочный вопрос:
Какой инвестиционный бэкграунд у основного инвестора VK?
Модель может ошибиться или смешать инвесторов, потому что пытается ответить «в лоб» без промежуточного шага.
✅ Хорошо — явная декомпозиция:
Ответь пошагово — так мне важно видеть твой ход мысли:
Шаг 1: Кто является основным институциональным инвестором VK
(Mail.ru Group)? Назови конкретно: фонд или структуру.
Шаг 2: Опираясь на найденное в шаге 1 — какой инвестиционный
бэкграунд у этой структуры? Откуда деньги, в какие
сектора вкладывают, какие крупные сделки были?
Если по шагу 1 есть неопределённость — укажи это явно,
не угадывай.
Результат: Модель сначала явно называет промежуточное звено (название структуры), затем отвечает про него. Вероятность правильного ответа резко выше — потому что промежуточный факт уже в тексте, а не «в голове» у модели.
Почему это работает
Проблема: Модель не «вычисляет» ответы — она генерирует текст по паттернам из обучающих данных. Если два факта никогда не встречались рядом в обучении, модель не знает как их «подтянуть» одновременно в один ответ. Даже если оба факта доступны — соединить их без подсказки невозможно.
Что умеет модель хорошо: Находить следующий токен по контексту. Если в тексте уже написано «друг Зидана — Тьерри Анри», то вопрос «когда родился Тьерри Анри?» модель решает легко — факт в контексте. Явное промежуточное звено в тексте = готовая подсказка для следующего шага.
Как это использовать: Декомпозиция выводит промежуточные звенья в явный текст. Модель больше не пытается угадать ответ «с наскока» — она следует по шагам, и каждый шаг создаёт контекст для следующего. Chain-of-Thought работает именно by this mechanism — не потому что модель «думает лучше», а потому что промежуточные результаты становятся частью входных данных для следующего шага.
Рычаги управления: - Явное требование назвать промежуточную сущность → самый важный рычаг. Фраза «назови конкретно» или «сначала определи X» кардинально улучшает точность - «Если неопределённость — скажи» → защита от уверенного галлюцинирования на сложных цепочках - Количество шагов → для трёхзвенных вопросов пиши три явных шага, не два - Разбивка на отдельные сообщения → для критически важных запросов задай вопрос о промежуточной сущности отдельным сообщением, убедись в ответе, затем задай финальный вопрос
Шаблон промпта
Ответь пошагово:
Шаг 1: {промежуточный вопрос — кто/что является связующим звеном?}
Назови конкретно: {что именно нужно назвать}.
Шаг 2: Опираясь на ответ из шага 1 — {финальный вопрос про найденную сущность}.
Если в шаге 1 есть неопределённость — укажи это явно, не угадывай.
Что подставлять:
- {промежуточный вопрос} — вопрос о «мосте»: кто владелец, кто основатель, что является причиной, и т.д.
- {что именно нужно назвать} — уточни формат ответа: имя, название компании, дата, событие
- {финальный вопрос} — то, что тебе на самом деле нужно знать
Примеры промежуточных вопросов: - «Кто является CEO компании X?» → «Какое образование у этого человека?» - «Какая технология лежит в основе продукта Y?» → «Какие ограничения у этой технологии?» - «Кто инвестировал в стартап Z?» → «Какие ещё стартапы они поддерживали?»
🚀 Быстрый старт — вставь в чат:
Вот шаблон двухшаговой декомпозиции для сложных вопросов.
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, какое промежуточное звено тебе нужно найти и что именно хочешь узнать в итоге — потому что без этого нельзя правильно разбить вопрос на шаги.
Ограничения
⚠️ Не панацея для всех ошибок: Декомпозиция помогает при цепочных фактах, но не при галлюцинациях об отдельных фактах. Если модель не знает базового факта — разбивка на шаги не поможет.
⚠️ Длинные цепочки сложнее: Трёх- и четырёхзвенные вопросы требуют столь же длинной декомпозиции. Если цепочка сложная — лучше разбить на отдельные сообщения.
⚠️ Актуальные факты вне зоны действия: Если промежуточный факт произошёл после даты обучения модели — никакая декомпозиция не поможет. Проверяй актуальность данных отдельно.
⚠️ Исследование на синтетических данных: Эксперименты проводились на специально созданных биографиях, а не на реальных текстах интернета. Настоящие LLM обучены на огромном количестве связанных текстов — поэтому эффект может быть слабее при известных сущностях. Чем менее известна тема, тем важнее явная декомпозиция.
Как исследовали
Исследователи создали 100 000 искусственных биографий с атрибутами (дата рождения, город, университет, работа) и добавили отношения «друг» и «враг» между людьми. Затем строго разделили популяцию: половина людей видела цепочные контексты при обучении («друг Маркуса — Делия, Делия родилась в Эшфорде»), вторая половина — никогда. Потом проверили: может ли модель ответить на «в каком городе родился друг Маркуса?» без подсказки.
Результат был жёстким: при 97% точности на одиночных вопросах точность на двойных вопросах падала почти до нуля для «невидимой» группы — и никакие эксперименты с данными это не исправляли. Интересно, что явные форматы («друг Маркуса — Делия Крейн, Делия родилась в Эшфорде») помогали модели найти промежуточную сущность, но не улучшали итоговую точность сами по себе. Лучше всего работали неявные структурированные форматы (что-то вроде «Маркус → friend.birthcity → Эшфорд») — потому они лучше имитируют реальные вопросы, где промежуточная сущность скрыта. Это подтвердило главный вывод: проблема не в том, сколько у модели параметров, а в том, встречала ли она сущность в цепочном контексте при обучении.
Оригинал из исследования
Format | Example sequence
----------------|--------------------------------------------------
1-hop NL | Marcus Halloway was born on June 14, 1967.
| He studied Linguistics at Northgate University.
|
NL 2-hop | Marcus Halloway's friend was born in Ashford.
implicit |
|
NL 2-hop | Marcus Halloway's friend Delia Crane was born
explicit | in Ashford.
|
RDF 2-hop | [ENTITY] Marcus Halloway [RELATION]
implicit | friend.birthcity [VALUE] Ashford
|
RDF 2-hop | [ENTITY] Marcus Halloway [RELATION] friend
explicit | [VALUE] Delia Crane [RELATION] birthcity
| [VALUE] Ashford
Контекст: Так выглядят форматы обучающих данных, которые тестировали. Самый эффективный — неявный RDF (строчка 4): он прячет промежуточную сущность и заставляет модель учиться «собирать» ответ самостоятельно. Это же объясняет, почему явная декомпозиция в промпте так помогает — она воспроизводит логику, которую модели пришлось бы выучить при обучении.
Адаптации и экстраполяции
💡 Адаптация для проверки ответов модели
Когда модель уверенно отвечает на сложный вопрос — попроси её показать промежуточные шаги. Это встроенная проверка: если промежуточное звено неверное, финальный ответ тоже неверный, но ты это увидишь.
Ответь на вопрос: {твой сложный вопрос}
Но сначала — явно назови все промежуточные факты,
на которые ты опираешься, прежде чем дать финальный ответ.
Формат:
- Промежуточный факт 1: ...
- Промежуточный факт 2: ...
- Финальный ответ: ...
🔧 Техника: разбивка на отдельные сообщения → максимальная точность
Для критически важных вопросов не объединяй шаги в один промпт — задавай их последовательно:
Сообщение 1:
Кто является {промежуточная сущность}?
Ответь только этим — имя, название, факт.
Убедись в ответе. Если сомневаешься — проверь.
Сообщение 2 (только после подтверждения):
Хорошо. Теперь: {финальный вопрос про названную сущность}
Это работает лучше одного промпта, потому что ты сам верифицируешь промежуточное звено — и модель работает с проверенным фактом в контексте, а не пытается угадать его внутри одного запроса.
Ресурсы
Название работы: Multi-Hop Knowledge Composition is Bound by Pretraining Exposure
Авторы: Yannis Karmim, Luis Marti, Djamé Seddah, Valentin Barrière
Организации: Inria (Париж и Чили), Universidad de Chile
Код: https://tinyurl.com/MHKComposition
Связанные работы: Press et al. (2023) — "Measuring and Narrowing the Compositionality Gap"; Allen-Zhu & Li (2024) — "Physics of Language Models: Knowledge Storage and Extraction"
