TL;DR
ConvergeWriter — метод создания длинных статей на основе внешних источников (Wikipedia, корпоративные базы знаний). Суть: сначала собирается весь массив документов, затем он кластеризуется на группы, и только потом создаётся outline. Каждая секция статьи явно привязана к конкретному кластеру документов. Это противоположность обычному подходу, когда сначала придумывают структуру, а потом ищут под неё материалы.
Традиционный "top-down" подход создаёт mismatch между планом и реальными данными. LLM сначала генерирует outline ("напишу про AI в медицине, образовании, бизнесе"), потом ищет под него материалы. Проблема: в источниках может быть мало про образование и много про финансы — но outline уже создан. Результат: модель додумывает (hallucination) или пишет поверхностно. Второй сценарий: модель находит кучу материалов про квантовые компьютеры, но в outline такой секции нет — информация теряется.
Метод работает через "Retrieval-First for Knowledge, Clustering for Structure". Первый этап: двухраундовый поиск с расширением релевантности (базовые keywords → поиск → для каждого найденного документа генерируем новые keywords → углублённый поиск). Второй этап: кластеризация всех документов по смысловой близости через K-means. Третий этап: создание summary для каждого кластера. Четвёртый этап: генерация outline где каждая main section = один кластер. Пятый этап: написание каждой секции с retrieval только из соответствующего кластера. Это гарантирует, что каждое утверждение в статье traceable к источнику.
Схема метода
ЭТАП 1: Расширяющийся поиск (два раунда в одном чате или несколько промптов)
Round 1: Базовые keywords → Поиск → Фильтрация релевантных
Round 2: Для каждого документа → Генерация новых keywords → Углублённый поиск → Фильтрация
→ Итог: массив документов D*
ЭТАП 2: Кластеризация и summarization (один промпт)
→ Группировка документов по смысловой близости
→ Summary каждого документа
→ Summary каждого кластера
→ Итог: набор кластеров {C1, C2, ..., Ck} с описаниями
ЭТАП 3: Создание outline (один промпт)
→ LLM генерирует outline на основе cluster summaries
→ Правило: каждая main section соответствует одному кластеру
→ Итог: outline O
ЭТАП 4: Секционная генерация (отдельный промпт на каждую секцию)
Для каждой секции:
→ Retrieval документов из соответствующего кластера
→ Reranking
→ Генерация контента секции
→ Introduction и Conclusion пишутся после основных секций
→ Финальная полировка всей статьи
→ Итог: готовая статья
Пример применения
Задача: Аналитик в российской компании должен написать обзорную статью про развитие рынка электромобилей в РФ. У него 30 отчётов от разных аналитиков, статьи из Коммерсанта, РБК, заявления Минпромторга. Нужна структурированная статья на 15-20 тысяч слов с чёткой трассировкой каждого утверждения к источникам.
Промпт (Round 1 — базовый поиск):
Задача: написать обзорную статью про рынок электромобилей в России.
Источники: [список 30 документов]
Шаг 1: Проанализируй все источники и определи какие из них релевантны теме "рынок электромобилей в РФ".
Критерии релевантности:
- Содержит данные о продажах, производстве, инфраструктуре электромобилей в России
- Обсуждает политику государства, тренды, прогнозы
- Описывает игроков рынка, их стратегии
Выведи список релевантных документов с краткой аргументацией почему каждый релевантен.
Промпт (Round 2 — углублённый поиск):
У меня есть 18 релевантных документов про рынок электромобилей в РФ:
[список документов с краткими описаниями]
Для каждого документа предложи 2-3 новых поисковых запроса, которые помогут найти дополнительную информацию для углубления темы.
Например, если в документе упоминается "рост продаж на 40% в 2024", новые запросы могут быть: "статистика продаж электромобилей РФ 2024", "факторы роста рынка электромобилей Россия".
Сформулируй запросы так, чтобы найти:
- Подтверждающие данные
- Контекст и причины
- Детали по конкретным аспектам
Затем проведи поиск по этим запросам в оставшихся документах и отфильтруй релевантные.
Промпт (Кластеризация):
У меня 30 документов про рынок электромобилей в РФ.
Задача: Раздели их на тематические группы (кластеры) по смысловой близости.
Каждая группа должна:
- Объединять документы с похожими темами/аспектами
- Иметь чёткий фокус (не "разное")
- Быть достаточно крупной для полноценной секции статьи
Для каждой группы:
1. Название кластера (короткое, описательное)
2. Список документов в кластере
3. Краткое summary (3-4 предложения): какую тему покрывает кластер, какие ключевые утверждения/данные содержатся
Оптимальное количество кластеров: 4-6.
Промпт (Outline):
У меня 5 кластеров документов про рынок электромобилей в РФ:
Кластер 1 "Продажи и статистика": [summary]
Кластер 2 "Инфраструктура и зарядные станции": [summary]
Кластер 3 "Производители и модели": [summary]
Кластер 4 "Господдержка и законодательство": [summary]
Кластер 5 "Тренды и прогнозы": [summary]
Создай outline статьи "Обзор рынка электромобилей в России".
Требования:
- Каждая основная секция (кроме Introduction и Conclusion) должна соответствовать ОДНОМУ кластеру
- Последовательность секций должна быть логичной (от текущего состояния к будущему, от фактов к прогнозам)
- Используй Markdown формат
- Для каждой секции укажи в скобках соответствующий кластер: ## 2. Продажи и статистика [Кластер 1]
Промпт (Генерация секции):
Напиши секцию "Продажи и статистика" для статьи про рынок электромобилей в РФ.
Outline всей статьи:
[полный outline]
Документы кластера "Продажи и статистика":
[список документов из Кластера 1]
Требования:
- Используй ТОЛЬКО информацию из документов кластера
- Каждое утверждение должно иметь источник (укажи номер документа в квадратных скобках)
- Объём: 2000-3000 слов
- Включай конкретные цифры, даты, факты
- Логичная структура: от общего к частному
Если в документах недостаточно информации для какого-то аспекта — пропусти его, не додумывай.
Результат:
Модель выдаст структурированную статью где:
- Round 1-2 поиска покажут какие документы релевантны и найдут дополнительные материалы через расширение keywords
- Кластеризация разобьёт документы на 4-6 смысловых групп с чёткими темами
- Outline будет логично структурирован и каждая секция привязана к кластеру
- Каждая секция написана только на основе документов своего кластера с явными ссылками
- Introduction и Conclusion создадутся после основных секций на основе всего контента
Вся статья 100% traceable — любое утверждение можно проверить по номеру источника. Нет hallucination, потому что LLM пишет строго в границах доступных данных.
Почему это работает
Слабость LLM: Модели склонны к hallucination когда создают план до того как увидели данные. Top-down подход ("сначала структура, потом поиск") заставляет LLM либо додумывать контент под outline, либо игнорировать найденную информацию которая не вписывается в план. Результат: фрагментированность, поверхностность, недостоверность.
Сильная сторона LLM: Модели отлично группируют информацию по смыслу и создают структуру на основе данных. Они видят паттерны, связи, могут организовать хаос в логичную иерархию. Это работает когда данные уже есть и задача — найти в них порядок.
Механика метода: Bottom-up подход использует сильную сторону (организация данных) и обходит слабость (план без данных). Сначала модель видит весь доступный массив знаний через расширяющийся поиск. Затем кластеризует его на группы — это показывает какие темы реально покрыты источниками. Outline создаётся строго на основе этих кластеров — это гарантирует, что каждая секция имеет надёжную базу. При генерации каждой секции модель работает только с документами из соответствующего кластера — это предотвращает drift и hallucination.
Рычаги управления:
- Количество раундов retrieval (2 в оригинале) — увеличь до 3-4 для очень глубоких тем; уменьши до 1 для быстрого overview
- Количество кластеров (4-6 оптимально) — больше кластеров = больше детализация, меньше = обобщённее статья
- Depth of summarization — можно сделать два уровня summary: document → sub-cluster → main cluster для очень больших массивов
- Retrieval strategy для секций — по умолчанию reranking, можно заменить на semantic similarity или keyword matching
- Порядок секций — можно дать модели свободу переставить последовательность, или задать жёсткий порядок
Шаблон промпта
Этап 1: Расширяющийся поиск
Задача: написать статью про {тема}.
Источники: {список_документов}
ШАГ 1 — Базовый поиск:
Определи какие документы релевантны теме "{тема}".
Критерии релевантности: {критерии}.
Выведи список релевантных документов.
ШАГ 2 — Углублённый поиск:
Для каждого релевантного документа предложи 2-3 новых поисковых запроса для углубления темы.
Проведи поиск по этим запросам в оставшихся документах.
Выведи финальный список всех релевантных документов.
Этап 2: Кластеризация
У меня {N} документов про {тема}.
Раздели их на {K} тематических групп (кластеров) по смысловой близости.
Для каждого кластера выведи:
1. Название кластера
2. Список документов
3. Summary (3-4 предложения): какую тему покрывает кластер
Этап 3: Outline
У меня {K} кластеров документов про {тема}:
{список_кластеров_с_summary}
Создай outline статьи "{название_статьи}".
Требования:
- Каждая основная секция (кроме Introduction и Conclusion) = один кластер
- Markdown формат
- Для каждой секции укажи соответствующий кластер: ## 2. {название} [{Кластер N}]
Этап 4: Генерация секции
Напиши секцию "{название_секции}" для статьи про {тема}.
Outline всей статьи:
{outline}
Документы кластера "{название_кластера}":
{список_документов}
Требования:
- Используй ТОЛЬКО информацию из документов кластера
- Каждое утверждение должно иметь источник [номер документа]
- Объём: {объём} слов
- Если данных недостаточно — пропусти аспект, не додумывай
Плейсхолдеры:
{тема}— тема статьи{список_документов}— ваши источники{критерии}— критерии релевантности для вашей темы{N}— количество документов{K}— желаемое количество кластеров (4-6 оптимально){название_статьи}— название итоговой статьи{список_кластеров_с_summary}— результат этапа 2{outline}— результат этапа 3{название_секции}/{название_кластера}— конкретная секция{объём}— желаемый объём секции
Ограничения
⚠️ Многошаговость: Метод требует минимум 4 отдельных промпта (retrieval → clustering → outline → generation) плюс по одному промпту на каждую секцию статьи. Для статьи с 6 секциями это ~10 промптов. Быстро не получится.
⚠️ Размер knowledge base: Работает лучше всего когда источников много (20+). С малым количеством документов (<10) кластеризация теряет смысл — проще просто прочитать всё.
⚠️ Не для креативных задач: Метод оптимизирован для фактической точности, не для творческого письма. Если нужна яркая, живая статья с метафорами и стилем — этот подход будет слишком "сухим" и академичным.
⚠️ Качество кластеризации зависит от LLM: В исследовании использовали K-means на embeddings. В чате LLM делает кластеризацию "на глаз" — результат может быть менее точным, особенно если документы разнородные.
Как исследовали
Команда проверила метод на датасете WildSeek — это реальные пользовательские запросы к STORM (популярной системе генерации статей). Тестировали на темах которые люди действительно хотели изучить, не на синтетических примерах. Единственный источник знаний — Wikipedia API. Это важно: закрытая knowledge base, проверяется может ли метод работать строго в её границах.
Сравнивали с четырьмя baseline: наивный RAG (поиск → генерация одним запросом), двухэтапный RAG (outline → секционная генерация), STORM (симуляция диалогов для сбора знаний), OmniThink (динамическое расширение через "information tree"). Все baseline работали в режиме top-down — сначала план, потом поиск.
Тестировали на двух моделях: Qwen3-14B (базовые reasoning) и Qwen3-32B (с Deep Thinking Mode). Это показывает работает ли метод на разных масштабах и уровнях рассуждений. Ограничение контекста — 24K токенов для всех.
Ключевая метрика — Document Coverage: какой процент параграфов статьи реально подтверждён источниками. Для каждого параграфа LLM искала два самых похожих документа из knowledge base и проверяла: есть ли support или нет. Это прямо измеряет hallucination — если coverage 80%, значит 20% контента взято "из головы" модели.
Результаты удивили: ConvergeWriter показал coverage 80.14% на 14B модели против 53.88% у лучшего baseline (OmniThink). Разница огромная — почти на треть меньше hallucination. При этом по качеству оценок (relevance, breadth, depth, novelty) ConvergeWriter тоже выиграл. Особенно сильно по Novelty (4.22 vs 3.35) — это показывает, что кластеризация помогает найти неочевидные связи между документами.
Интересная находка: В ablation study убрали clustering — просто разделили документы на 5 равных частей. Результат: Novelty обвалилась с 4.58 до 3.60. Это доказывает, что именно смысловая группировка даёт value, не просто "разделить документы". Без кластеризации статья превращается в механическую конкатенацию кусков, теряется логика.
Вывод исследования: Bottom-up подход работает на любых моделях (14B, 32B), в любых режимах (standard, deep thinking). Преимущество стабильное — это означает ценность в самой идее "данные → структура", не в тонкостях реализации.
