Контекстное окно LLM: лимиты, длинные документы и обходные пути
Основы3 минРедакция Innovialabs
Коротко
Контекстное окно — это объём текста в токенах, который модель видит за один запрос; всё, что не поместилось, для неё не существует, а длинные документы обрабатывают через сжатие, разбиение на части или RAG.
Что такое контекстное окно
Контекстное окно — максимальный объём текста, измеряемый в токенах, который модель обрабатывает за один запрос. В него входит всё сразу:
- системная инструкция;
- история диалога;
- вложенные документы и результаты инструментов;
- ответ, который модель генерирует.
Модель не помнит прошлые разговоры сама по себе. Каждый запрос — это чистый лист, и «память» чата существует только потому, что приложение заново отправляет историю внутри окна.
Что происходит при переполнении
Зависит от того, как устроено приложение:
- API возвращает ошибку, если запрос длиннее окна;
- приложение обрезает старые сообщения, и модель «забывает» начало разговора;
- ответ обрывается, если на генерацию не осталось места.
Опасен второй вариант: ошибки нет, но модель уверенно отвечает, не видя важных условий из начала диалога.
Эффект lost in the middle
Даже если документ поместился, это не значит, что модель одинаково внимательна ко всем его частям. Исследования показывают эффект lost in the middle: информацию в начале и в конце длинного контекста модели используют надёжнее, чем информацию в середине.
Что из этого следует:
- кладите ключевую инструкцию в начало или повторяйте её в конце;
- вопрос пользователя ставьте после документа, а не перед ним;
- не добавляйте в контекст лишнее «на всякий случай» — шум мешает найти нужное.
Современные модели справляются с длинным контекстом лучше прежних, но проверять качество на своих данных всё равно нужно.
Как работать с длинными документами
| Подход | Как работает | Когда подходит |
|---|---|---|
| Просто большое окно | Весь документ в одном запросе | Разовый анализ одного документа |
| Разбиение (chunking) | Документ делится на части, каждая обрабатывается отдельно | Перевод, извлечение данных, проверка по частям |
| Map-reduce суммаризация | Сначала резюме частей, потом резюме резюме | Краткое изложение очень длинных текстов |
| Скользящее резюме | Старая часть диалога заменяется кратким пересказом | Длинные чаты, ассистенты поддержки |
| RAG | Из базы извлекаются только релевантные фрагменты | Вопросы по большой базе знаний |
Как выбрать подход
- Один документ, разовая задача — если помещается в окно, отправляйте целиком.
- Много документов или база знаний — нужен RAG: поиск подбирает несколько подходящих фрагментов, и модель отвечает по ним.
- Длинный диалог — храните последние сообщения дословно, а старые сжимайте в резюме.
- Задача по частям (перевод, разметка) — разбейте на куски с небольшим перекрытием, чтобы не терялся смысл на границах.
Типичные ошибки
- Считать, что большое окно решает всё. Длинный контекст дороже, медленнее и не гарантирует внимания к деталям.
- Резать документ посреди предложения или таблицы. Делите по разделам и абзацам.
- Не учитывать язык. Русский и узбекский текст занимает больше токенов, чем английский, и окно заполняется быстрее.
- Не оставлять места под ответ. Резервируйте токены на генерацию заранее.