TL;DR
LLM не использует нужные фрагменты из длинного текста — не потому что не видит их, а потому что при генерации ответа они «тонут» среди тысяч нерелевантных токенов. ReContext решает это через двухэтапный подход: сначала извлечь ключевые отрывки через анализ внутренних сигналов внимания модели, затем воспроизвести их прямо перед вопросом — не удаляя оригинальный текст, а добавляя «выжимку» рядом с запросом.
Конкретная находка: всего 128 токенов из 128 000 содержат 50–80% релевантности для ответа на вопрос. Проблема не в том, что нужный абзац отсутствует — он есть. Проблема в том, что при генерации модель не умеет стабильно «зацепиться» за него среди огромного шума.
Метод работает за R раундов (обычно 2–4). Каждый раунд: читаем контекст с учётом уже найденных отрывков → находим новые релевантные фрагменты → добавляем в «пул улик» → после последнего раунда генерируем ответ из полного текста + пул улик + вопрос. Каждый следующий раунд видит то, что нашли предыдущие — поэтому находки становятся глубже.
Схема метода
ИСХОДНЫЕ ДАННЫЕ: Длинный документ + Вопрос
РАУНД 1:
Читаем: [Документ] + [Вопрос]
Сигнал: Внутренние веса внимания → ТОП-K токенов по релевантности
Результат: Находим предложения вокруг выбранных токенов → Пул улик [E1]
РАУНД 2 (рекурсия):
Читаем: [Документ] + [Пул улик E1] + [Вопрос]
Сигнал: Веса переключились — теперь видят связанные фрагменты
Результат: Новые предложения → Пул улик [E1 + E2]
...N раундов...
ФИНАЛЬНАЯ ГЕНЕРАЦИЯ:
Промпт: [Документ] + [Пул улик EN] + [Вопрос]
Ответ: Генерируется из полного контекста + явно выделенных улик
⚠️ Техническое ограничение: Оригинальный метод работает через внутренние веса внимания модели — к ним нет доступа в ChatGPT/Claude интерфейсе. Ниже — ручная адаптация принципа, применимая в любом чате.
Пример применения
Задача: Основатель стартапа получил от инвестора 80-страничный отчёт по due diligence. ChatGPT отвечает на вопросы общо — явно «плывёт» по деталям. Нужно выяснить: какие конкретно риски отмечены по юридической структуре?
Промпт (Шаг 1 — поиск улик):
Я загружу большой документ. Твоя задача сейчас — только поиск,
не анализ.
Найди в тексте ниже ВСЕ фрагменты, которые прямо относятся к теме:
«юридические риски и структура владения».
Процитируй найденные отрывки дословно — именно текст из документа,
без пересказа. Пронумеруй каждый.
[Вставить полный текст отчёта]
Промпт (Шаг 2 — финальный ответ):
Вот оригинальный отчёт:
[Вставить полный текст]
А вот ключевые фрагменты по юридическим рискам, которые ты
нашёл ранее:
[Вставить цитаты из Шага 1]
Теперь вопрос: какие конкретные юридические риски критичны
перед закрытием сделки? Используй и оригинал, и выделенные отрывки.
Результат: Шаг 1 даст пронумерованные дословные цитаты из документа — без интерпретации, только текст. Шаг 2 сгенерирует ответ, опираясь одновременно на полный контекст и выделенные улики рядом с вопросом. Это снижает вероятность «потери» нужного абзаца при ответе — потому что он буквально стоит рядом с вопросом в момент генерации.
Почему это работает
Слабость LLM при длинных текстах. У моделей есть эффект «иголки в стоге сена»: нужный абзац физически присутствует, но в момент генерации внимание «размазывается» по тысячам токенов. Чем длиннее контекст — тем сильнее эффект. Модель отвечает не на основе конкретного факта, а на основе «общего впечатления» от документа.
Что модель умеет хорошо. Модель отлично работает с компактным, структурированным контекстом. Когда нужная информация стоит рядом с вопросом — точность резко растёт. Это то, что делает классический RAG (retrieval-augmented generation): сначала найди, потом ответь. ReContext делает то же самое — но не через внешнюю базу данных, а через собственные сигналы внимания модели.
Принцип «воспроизведения» (replay). Ключевая идея: найденные улики не заменяют оригинал, а повторяются рядом с вопросом. Полный документ остаётся. Это важно: простая обрезка контекста теряет детали, а здесь модель может обратиться к оригиналу если потребуется, но «стартовать» при генерации с улик в руках.
Рычаги управления в ручной версии: - Количество шагов — 2 достаточно для большинства задач; для сложных многоскачковых вопросов (где ответ связывает 3+ фрагмента) попробуй 3 прохода - Точность инструкции поиска — чем конкретнее формулировка темы в Шаге 1, тем точнее улики - Дословное цитирование — просить именно цитату, не пересказ: так при воспроизведении в Шаге 2 нет сломанного телефона
Шаблон промпта
Шаг 1 — Поиск улик:
Я дам тебе большой документ. Сейчас только находи, не анализируй.
Найди в тексте ниже ВСЕ фрагменты, которые прямо относятся к теме:
«{тема_поиска}».
Требования:
- Цитируй дословно, без пересказа
- Если фрагмент короткий — включи соседние предложения для контекста
- Пронумеруй каждый найденный отрывок
- Не добавляй оценок и выводов — только текст из документа
{длинный_документ}
Шаг 2 — Финальный ответ:
Вот исходный документ:
{длинный_документ}
Вот ключевые фрагменты по теме «{тема_поиска}», найденные ранее:
{цитаты_из_шага_1}
Вопрос: {твой_вопрос}
Отвечай, опираясь как на оригинальный документ, так и на
выделенные фрагменты.
Плейсхолдеры:
- {тема_поиска} — конкретная тема, не вопрос: «финансовые риски», «условия расторжения», «технические требования к интеграции»
- {длинный_документ} — полный текст: договор, отчёт, транскрипт, книга
- {твой_вопрос} — финальный вопрос, на который нужен ответ
🚀 Быстрый старт — вставь в чат:
Вот шаблон двухшагового метода поиска улик в длинных документах.
Адаптируй под мою задачу: {твоя задача с документом}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит какой документ анализируем и что ищем — потому что точность темы в Шаге 1 определяет качество улик, которые попадут в Шаг 2.
Почему это работает (теоретически)
Авторы доказали математически: каждый раунд воспроизведения улик монотонно приближает скрытое представление ответа модели к правильному вектору. То есть не «иногда помогает» — а каждый раунд гарантированно улучшает, хотя и с убывающей отдачей.
Интуиция простая: когда в Шаге 2 нужный абзац стоит рядом с вопросом, задача модели упрощается — не «найди в 128К токенах», а «применти это к вопросу». Именно это объясняет 24.6% прирост точности в экспериментах.
Ограничения
⚠️ Закрытые API: Оригинальный метод требует доступа к весам внимания (attention weights). ChatGPT, Claude, Gemini эти данные не отдают. Ручная адаптация — приближение, не точный метод.
⚠️ Латентность: Метод добавляет R дополнительных чтений документа перед финальным ответом. В ручной версии — это дополнительный запрос и копирование. Для быстрых вопросов не нужен.
⚠️ Размер контекстного окна: Ручная версия «склеивает» документ + улики + вопрос в один промпт. При очень большом документе это может упереться в лимит токенов модели.
⚠️ Не панацея: Метод лучше всего работает на фактических вопросах с опорой на конкретный текст (QA, юридический анализ, технический due diligence). Для творческих или оценочных задач («напиши в стиле документа» / «оцени качество аргументов») — слабее.
Как исследовали
Команда взяла три модели — Qwen3-4B, Qwen3-8B и Llama3.1-8B — и прогнала их через восемь бенчмарков с контекстом 128К токенов: от простых фактических вопросов (NarrativeQA) до многоскачкового рассуждения (HotpotQA) и верификации утверждений по книгам (CLIPPER). Каждый метод получал одинаковый входной контекст — честное сравнение.
Любопытная деталь дизайна: исследователи сначала построили рейтинговую кривую — отсортировали все токены по релевантности и посмотрели, сколько накопленной значимости покрывают топ 0.1% токенов. Оказалось: 128 токенов из 128К = 50–80% всей релевантности. Это и стало главным аргументом — не нужно сжимать контекст, нужно просто подвинуть нужное ближе к вопросу.
Сравнивали с пятью конкурентами: прямая генерация (Vanilla), методы усиления внимания (AttnSharp, DySCO), внешняя агентная память (A-MEM) и компрессия контекста (DAC). ReContext занял лучшее среднее место на всех трёх моделях. Средняя точность выросла с 0.24 до 0.30 — +24.6% относительного прироста. На 64К контексте — ещё лучше, +35%. Что особенно убеждает: прирост стабилен, когда включён режим «думающей» модели (chain-of-thought внутри модели) — значит, принцип работает независимо от того, «думает» ли модель сама по себе.
Адаптации и экстраполяции
🔧 Рекурсия вручную через два раунда поиска
Если Шаг 1 дал общие улики, а вопрос многосоставной — сделай ещё один промежуточный шаг: «Вот улики из первого поиска: [цитаты]. Каких деталей не хватает для полного ответа на вопрос [Х]? Найди в документе дополнительные фрагменты — только новые, не повторяй уже найденное.» Потом Шаг 2 с расширенным пулом.
🔧 Для переговоров и деловой переписки
Принцип «улик» работает не только с документами. Перед тем как попросить ChatGPT написать ответное письмо на жёсткое письмо клиента — сначала попроси: «Найди в этой переписке все места, где клиент явно или неявно обозначил свою позицию и ожидания. Процитируй дословно.» Потом пиши ответ, опираясь на найденное. Риск «промахнуться мимо претензии» резко падает.
Ресурсы
Статья: ReContext: Recursive Evidence Replay as LLM Harness for Long-Context Reasoning
Код: https://github.com/Yanjun-Zhao/ReContext
Авторы: Yanjun Zhao, Ruizhong Qiu, Tianxin Wei, Yuanchen Bei, Zhining Liu, Lingjie Chen, Ismini Lourentzou, Hanghang Tong, Jingrui He — University of Illinois Urbana-Champaign
