Chain of Density (CoD)

[object Object]

Chain of Density (цепочка плотности) — техника итеративной суммаризации, при которой модель пишет несколько версий резюме одинаковой длины, каждый раз добавляя пропущенные ключевые сущности и факты. С каждой итерацией текст становится информативнее при том же объёме.

В 2026 году CoD удобнее понимать не как “ещё один способ суммаризировать”, а как controlled editing workflow. Модель не просто пересказывает текст, а шаг за шагом перераспределяет ограниченный space budget в пользу более полезных деталей.

Представьте, что вам нужно пересказать книгу ровно в 5 предложениях. Первая попытка — общие фразы: «Книга о приключениях героя». Вторая — вы добавляете имена и места. Третья — ключевые события. Четвёртая — причины и следствия. Пятая — каждое слово на вес золота, ничего лишнего. Chain of Density — именно так: одна и та же длина, но каждый раз больше информации.

Суть в двух словах

Chain of Density — это итеративный подход к суммаризации. Модель пишет 5 версий резюме одинаковой длины (~80 слов). Каждая следующая версия плотнее предыдущей: модель находит 1-3 пропущенные ключевые сущности и встраивает их в текст, заменяя общие фразы конкретикой. Первая версия — «разреженная» (sparse), последняя — «плотная» (dense).

Результат: резюме, в котором каждое слово несёт максимум информации. По данным исследования Adams et al. (2023), люди в 4 из 5 случаев предпочитают CoD-резюме обычным.

ПромптChatGPT
Статья: [вставьте текст статьи]

Напиши 5 резюме этой статьи, каждое длиной ~80 слов.

Резюме 1: общее описание с 1-2 ключевыми сущностями.
Каждое следующее резюме: добавь 1-3 пропущенные ключевые сущности (имена, числа, факты), НЕ увеличивая длину. Заменяй общие фразы конкретикой.

Для каждого резюме укажи:
- Добавленные сущности
- Текст резюме
Ответ модели

Резюме 1 (разреженное) Добавленные сущности: SpaceX, Falcon 9 Новая миссия SpaceX стала важным шагом в развитии космической отрасли. Компания успешно запустила ракету Falcon 9, которая вывела на орбиту группу спутников. Запуск прошёл без проблем, а первая ступень вернулась на платформу в океане. Это событие привлекло внимание СМИ и инвесторов.

Резюме 5 (плотное) Добавленные сущности: Starlink V3, мыс Канаверал, 23 спутника, 347-я посадка SpaceX 15 марта запустила Falcon 9 с мыса Канаверал, выведя 23 спутника Starlink V3 с лазерными межспутниковыми каналами на орбиту 550 км. Первая ступень B1081 совершила 19-й полёт и 347-ю посадку на платформу ASOG. Starlink V3 обеспечивают в 10 раз большую пропускную способность. Общая группировка достигла 6400 аппаратов, покрывая 70 стран.

Подходит для: суммаризации статей, отчётов, протоколов совещаний, научных работ — везде, где нужно максимум информации в минимуме текста.

Что такое Chain of Density

Техника была предложена исследователями из Columbia University и Salesforce в 2023 году (Adams et al.). Они обнаружили проблему: стандартные резюме от языковых моделей слишком «разреженные» — много общих слов, мало конкретики. Люди же предпочитают плотные, информативные резюме.

Идея CoD проста: вместо одного запроса на суммаризацию, модель проходит 5 итераций. На каждой итерации она добавляет 1-3 пропущенные ключевые сущности (entity), не увеличивая длину текста. Для этого приходится перефразировать, сжимать, убирать воду — и с каждым шагом резюме становится плотнее.

Как это работает

Примеры использования

Суммаризация деловой статьи

ПромптClaude Sonnet 4
Текст статьи: «Яндекс объявил о запуске YandexGPT 4 — новой версии языковой модели с поддержкой контекстного окна в 32 000 токенов. Модель обучена на мультиязычных данных с акцентом на русский язык. По словам руководителя направления Алексея Гусева, YandexGPT 4 показывает улучшение на 35% в задачах генерации текста на русском по сравнению с предыдущей версией. Модель доступна через API Yandex Cloud и интегрирована в Алису. Стоимость составляет 0.2 руб. за 1000 токенов. Яндекс также анонсировал fine-tuning API для корпоративных клиентов, позволяющий дообучать модель на собственных данных.»

Выполни Chain of Density: напиши 5 резюме длиной ровно ~40 слов каждое. Каждое следующее резюме плотнее предыдущего — добавляй 1-3 пропущенные ключевые сущности, не увеличивая длину.
Ответ модели

Резюме 1 [сущности: Яндекс, YandexGPT] Яндекс представил новую версию своей языковой модели YandexGPT, которая значительно улучшена по сравнению с предыдущей. Модель стала доступна разработчикам и пользователям через различные каналы компании.

Резюме 2 [+YandexGPT 4, русский язык, API] Яндекс выпустил YandexGPT 4 — языковую модель с фокусом на русский язык. Модель доступна через API и показывает заметное улучшение качества генерации текста. Разработчики могут интегрировать её в свои продукты.

Резюме 3 [+32K токенов, +35%, Yandex Cloud] Яндекс запустил YandexGPT 4 с контекстным окном 32 000 токенов и улучшением на 35% в генерации русского текста. Модель доступна через API Yandex Cloud. Акцент на мультиязычность с приоритетом русского языка.

Резюме 4 [+Алиса, 0.2 руб/1K токенов, Алексей Гусев] YandexGPT 4 с окном 32K токенов улучшает генерацию русского текста на 35%, сообщил Алексей Гусев. Модель интегрирована в Алису, доступна через API Yandex Cloud по цене 0.2 руб. за 1000 токенов.

Резюме 5 [+fine-tuning API, корпоративные клиенты] YandexGPT 4 (32K токенов, +35% на русском) доступна через Yandex Cloud за 0.2 руб./1K токенов и в Алисе. Руководитель Алексей Гусев анонсировал fine-tuning API для корпоративных клиентов, позволяющий дообучать модель на своих данных.

Суммаризация протокола совещания

ПромптChatGPT
Протокол совещания:
«Встреча отдела маркетинга, 28 февраля. Присутствовали: Мария Козлова (руководитель), Дмитрий Ли (SMM), Анна Волкова (контент). Обсуждали: 1) Q1 отчёт — расходы на рекламу выросли на 22%, но конверсия упала с 3.2% до 2.8%. 2) Запуск TikTok-канала — Дмитрий представил план, бюджет 150K руб/мес, старт 15 марта. 3) Редизайн лендинга — Анна показала A/B тесты: вариант B дал +18% конверсии. Решение: утвердить бюджет TikTok, запустить вариант B лендинга до 5 марта, Мария подготовит отчёт по ROI рекламных каналов к 10 марта.»

Chain of Density: 5 резюме по ~35 слов. Каждое следующее плотнее.
Ответ модели

Резюме 1 [сущности: отдел маркетинга] На совещании отдела маркетинга обсудили текущие результаты рекламы, планы по новым каналам и улучшение конверсии сайта. Приняли несколько решений по ближайшим действиям.

Резюме 2 [+рост расходов, TikTok, лендинг] Отдел маркетинга обсудил рост расходов на рекламу при падении конверсии, запуск TikTok-канала и редизайн лендинга. Приняты решения по бюджету и срокам запуска.

Резюме 3 [+22% расходы, 2.8% конверсия, 150K бюджет] Расходы на рекламу выросли на 22%, конверсия упала до 2.8%. Утверждён TikTok-канал с бюджетом 150K руб/мес. Редизайн лендинга показал +18% конверсии в A/B тесте.

Резюме 4 [+Козлова, Ли, Волкова, вариант B] Мария Козлова провела совещание: расходы +22%, конверсия 2.8%. Дмитрий Ли запускает TikTok (150K/мес, старт 15 марта). Анна Волкова показала A/B тест: вариант B лендинга даёт +18% конверсии.

Резюме 5 [+сроки: 5 марта, 10 марта, ROI-отчёт] Совещание 28 февраля: расходы +22%, конверсия 2.8%. Решения: TikTok (Ли, 150K/мес, старт 15 марта), лендинг вариант B до 5 марта (Волкова, +18%). Козлова готовит ROI-отчёт к 10 марта.

Суммаризация научной работы

ПромптClaude Sonnet 4
Выполни Chain of Density для абстракта научной статьи.

Абстракт: [вставьте абстракт статьи]

Напиши 5 резюме по ~50 слов. На каждой итерации добавляй 1-3 пропущенные ключевые сущности: названия методов, метрики, числа, датасеты. Не увеличивай длину. Для каждого резюме укажи добавленные сущности.
Ответ модели

Резюме 1 [сущности: RAG, языковые модели] Исследование представляет новый подход к улучшению RAG-систем для языковых моделей. Метод повышает качество ответов за счёт более точного извлечения релевантных документов. Эксперименты подтверждают эффективность подхода на нескольких бенчмарках.

Резюме 3 [+adaptive retrieval, MMLU, +12% точность] Метод adaptive retrieval динамически определяет, когда RAG-системе нужен внешний контекст, а когда модель может ответить самостоятельно. На MMLU точность выросла на 12%. Подход совместим с GPT-4 и Llama 3 без дообучения.

Резюме 5 [+confidence threshold 0.7, latency -40%, NQ, TriviaQA] Adaptive retrieval с порогом уверенности 0.7 пропускает ненужные RAG-запросы: +12% точность на MMLU, +8% на NQ, +15% на TriviaQA при снижении latency на 40%. Работает с GPT-4 и Llama 3 70B без fine-tuning, через prompt-based calibration.

Сравнение: обычное резюме vs Chain of Density

Обычное резюме (один запрос)
Компания представила новый продукт, который значительно улучшает работу пользователей. Инновационное решение уже доступно на рынке и привлекло внимание специалистов отрасли. Ожидается рост спроса в ближайшие месяцы.
Chain of Density (итерация 4-5)
Яндекс запустил YandexGPT 4 (32K токенов, +35% на русском) через Yandex Cloud за 0.2 руб./1K токенов. Fine-tuning API для корпоративных клиентов, интеграция с Алисой. Конкурент GigaChat в сегменте русскоязычных моделей.
Не обязательно использовать именно 5 итераций. Для коротких текстов достаточно 3 итераций. Для длинных научных статей или отчётов можно увеличить до 7. Исследование показывает, что оптимальная плотность обычно достигается на итерации 3-4 — дальше текст может стать слишком «сжатым» и трудным для восприятия.

Как понимать Chain of Density в 2026

Сегодня CoD логично ставить рядом с iterative rewriting, executive summary compression, entity-aware summarization и prompt-chained editing workflows. Его реальная сила не в том, что итог “всегда лучше”, а в том, что он делает компрессию управляемой. Вы можете явно выбрать, на какой итерации остановиться, исходя из нужного баланса между плотностью и читаемостью.

Где техника реально полезна

CoD особенно хорошо работает, когда:

  • summary должен быть коротким, но насыщенным;
  • важна entity coverage, а не только общий смысл;
  • вы делаете дайджесты, briefings, release notes, research notes или exec summaries.

В этих сценариях обычная single-pass суммаризация часто оставляет слишком много “воды”, а CoD помогает целенаправленно её вытеснять.

Где CoD не стоит переоценивать

Подход имеет и очевидные границы: если исходный текст короткий, многоитерационная компрессия избыточна; слишком плотный финальный слой может быть хуже для обычного читателя; а если модель не поняла исходный материал, CoD лишь плотнее упакует ту же ошибку. Поэтому на практике CoD лучше использовать как управляемый редакторский режим, а не как дефолтную суммаризацию для всего подряд.

Когда использовать

Плюсы

  • Люди предпочитают CoD-резюме обычным в 4 из 5 случаев
  • Максимум информации при фиксированной длине текста
  • Прозрачный процесс — видно, как резюме уплотняется шаг за шагом
  • Работает с любыми моделями и языками
  • Отлично подходит для дайджестов, брифов, executive summary

Минусы

  • Требует 5 итераций — больше токенов, чем обычная суммаризация
  • Финальная версия может быть слишком плотной для неподготовленного читателя
  • Для очень коротких текстов (2-3 абзаца) техника избыточна
  • Модель может «выдумывать» сущности, если их не хватает в оригинале

Варианты применения

ЗадачаЧто уплотняетсяЭффект
Executive summaryОбщие фразы → цифры и фактыРуководитель получает суть за 30 секунд
Дайджест новостейПересказ → ключевые события и именаБольше новостей в одном письме
Протоколы встречОписание обсуждений → решения и дедлайныКонкретный список действий
Научные статьиОбщие выводы → методы, метрики, датасетыБыстрая оценка релевантности
Резюме кандидатовОбщие навыки → проекты, числа, результатыТочнее скрининг
Предпочтения людей: CoD vs обычные резюме (из статьи Adams et al.)
CoD (итерация 4)80%
Обычное резюме GPT-452%
CoD (итерация 5, макс. плотность)65%
Человеческое резюме70%

Данные из исследования Adams et al. (2023): итерация 4 Chain of Density получила наивысшие оценки людей, опередив как обычные GPT-4 резюме, так и человеческие. Итерация 5 оценена ниже — слишком плотный текст читать сложнее.

Техническая реализация

Chain of Density в одном промпте (OpenAI)

from openai import OpenAI

client = OpenAI()

def chain_of_density(
    article: str,
    num_iterations: int = 5,
    summary_length: int = 80,
) -> list[dict]:
    """
    Chain of Density Prompting:
    итеративная суммаризация с нарастающей плотностью.
    Возвращает список резюме от sparse к dense.
    """
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {
                "role": "system",
                "content": (
                    "Ты — эксперт по суммаризации. "
                    "Выполни Chain of Density: напиши "
                    f"{num_iterations} резюме статьи, "
                    f"каждое длиной ~{summary_length} слов.\n\n"
                    "Правила:\n"
                    "1. Резюме 1 — разреженное: общие "
                    "фразы, 1-2 ключевые сущности.\n"
                    "2. Каждое следующее резюме: добавь "
                    "1-3 пропущенные КЛЮЧЕВЫЕ СУЩНОСТИ "
                    "(имена, числа, даты, метрики, "
                    "названия), НЕ увеличивая длину.\n"
                    "3. Убирай воду и общие фразы, "
                    "заменяй конкретикой.\n"
                    "4. Длина каждого резюме ~"
                    f"{summary_length} слов — строго.\n\n"
                    "Формат ответа для каждой итерации:\n"
                    "### Резюме N\n"
                    "Добавленные сущности: ...\n"
                    "Текст: ..."
                ),
            },
            {
                "role": "user",
                "content": f"Статья:\n{article}",
            },
        ],
        temperature=0.3,
    )

    return response.choices[0].message.content


article_text = """
Яндекс объявил о запуске YandexGPT 4 —
новой версии языковой модели с поддержкой
контекстного окна в 32 000 токенов...
"""

result = chain_of_density(article_text)
print(result)

Пошаговый CoD через Anthropic API

import anthropic

client = anthropic.Anthropic()

def chain_of_density_iterative(
    article: str,
    num_iterations: int = 5,
    summary_length: int = 80,
) -> list[dict]:
    """
    Chain of Density с отдельным вызовом
    на каждую итерацию. Позволяет контролировать
    процесс и останавливать при достижении
    оптимальной плотности.
    """
    summaries = []

    # Итерация 1: разреженное резюме
    first_msg = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=512,
        messages=[
            {
                "role": "user",
                "content": (
                    f"Статья:\n{article}\n\n"
                    f"Напиши общее резюме длиной "
                    f"~{summary_length} слов. "
                    "Используй 1-2 ключевые сущности. "
                    "Остальное — общими словами."
                ),
            }
        ],
    )

    current_summary = first_msg.content[0].text
    summaries.append({
        "iteration": 1,
        "summary": current_summary,
        "added_entities": [],
    })

    # Итерации 2-N: уплотнение
    for i in range(2, num_iterations + 1):
        msg = client.messages.create(
            model="claude-sonnet-4-20250514",
            max_tokens=512,
            messages=[
                {
                    "role": "user",
                    "content": (
                        f"Оригинальная статья:\n{article}\n\n"
                        f"Текущее резюме:\n"
                        f"{current_summary}\n\n"
                        "Задача: перепиши резюме, "
                        "добавив 1-3 пропущенные "
                        "ключевые сущности (имена, "
                        "числа, факты, метрики). "
                        "НЕ увеличивай длину — замени "
                        "общие фразы конкретикой.\n\n"
                        f"Длина: ~{summary_length} слов.\n"
                        "Сначала перечисли добавленные "
                        "сущности, затем новое резюме."
                    ),
                }
            ],
        )

        response_text = msg.content[0].text
        current_summary = response_text
        summaries.append({
            "iteration": i,
            "summary": current_summary,
        })

    return summaries


article = "..."
results = chain_of_density_iterative(article)
for s in results:
    print(f"\n--- Итерация {s['iteration']} ---")
    print(s["summary"])

Продвинутый паттерн: CoD + JSON Mode для структурированного вывода

import json
from openai import OpenAI

client = OpenAI()

def cod_structured(
    article: str,
    num_iterations: int = 5,
    summary_length: int = 80,
) -> list[dict]:
    """
    Chain of Density со структурированным выводом.
    Возвращает JSON с сущностями и метриками
    плотности для каждой итерации.
    """
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {
                "role": "system",
                "content": (
                    "Выполни Chain of Density "
                    f"({num_iterations} итераций, "
                    f"~{summary_length} слов каждая).\n\n"
                    "Верни JSON:\n"
                    "{\n"
                    '  "summaries": [\n'
                    "    {\n"
                    '      "iteration": 1,\n'
                    '      "added_entities": '
                    '["entity1", ...],\n'
                    '      "total_entities": 2,\n'
                    '      "summary": "текст",\n'
                    '      "word_count": 80\n'
                    "    }\n"
                    "  ]\n"
                    "}\n\n"
                    "Каждая итерация добавляет 1-3 "
                    "ключевые сущности из статьи, "
                    "не увеличивая длину резюме."
                ),
            },
            {
                "role": "user",
                "content": f"Статья:\n{article}",
            },
        ],
        temperature=0.3,
        response_format={"type": "json_object"},
    )

    result = json.loads(
        response.choices[0].message.content
    )

    # Метрика плотности: сущности / слова
    for s in result["summaries"]:
        s["density"] = round(
            s["total_entities"] / s["word_count"],
            3,
        )

    return result["summaries"]


summaries = cod_structured("текст статьи...")

for s in summaries:
    print(
        f"Итерация {s['iteration']}: "
        f"{s['total_entities']} сущностей, "
        f"плотность {s['density']}"
    )
    print(f"  {s['summary'][:100]}...\n")
Модель может начать увеличивать длину резюме на поздних итерациях, чтобы уместить больше информации. Контролируйте это: указывайте точное количество слов и проверяйте длину программно. Если резюме стало длиннее на 20% — перегенерируйте эту итерацию с более строгим промптом.

Оценка плотности резюме

Количество ключевых сущностей на итерацию (при ~80 словах)
Итерация 1 (sparse)20
Итерация 240
Итерация 360
Итерация 4 (оптимум)80
Итерация 5 (dense)95

Каждая итерация добавляет 1-3 ключевые сущности. К итерации 4-5 резюме содержит практически все важные факты из оригинала при фиксированной длине.

Проверьте себя

Проверьте себя

1. В чём ключевая идея Chain of Density?

2. Какая итерация Chain of Density получила наивысшую оценку от людей в исследовании Adams et al.?

3. Что делает модель, когда добавляет новые сущности, но не может увеличить длину резюме?