Контекстное окно на практике: работа с длинными документами
Что реально влезает в контекст модели, почему «большое окно» не значит «клади всё», и стратегии для длинных документов: чанкинг, суммаризация, RAG.
Контекстное окно — это максимум токенов, которые модель удерживает за один запрос: и ваш вход, и её ответ. Современные окна велики, но «большое окно» не означает «клади в него всё подряд»: это бьёт по цене, скорости и качеству. Разберём, что действительно стоит помещать в контекст и как работать с документами, которые в него не влезают. Определение термина — в глоссарии.
Что занимает контекст
В окно должно уместиться всё сразу — а значит, каждая часть отъедает место у остальных:
- Системный промпт — инструкции роли и формата.
- История диалога — предыдущие сообщения, если ведёте разговор.
- Вложенные данные — документы, фрагменты кода, примеры few-shot.
- Текущий запрос пользователя.
- Ответ модели — на него тоже нужно оставить место: вход плюс
max_tokensне должны превышать окно.
Почему «больше контекста» не всегда лучше
- Цена растёт не медленнее линейного: чем больше входных токенов, тем дороже каждый запрос, а у части моделей есть порог длины промпта, после которого весь запрос переходит на повышенные ставки — смотрите на странице модели.
- Скорость падает: модели нужно «прочитать» весь вход перед ответом.
- Качество может снижаться: в очень длинном контексте модель хуже находит нужную деталь среди мусора — важное лучше держать ближе к запросу и не топить его в нерелевантном.
Стратегии для длинных документов
Чаще всего эти приёмы комбинируют. Например, для длинной переписки старые сообщения суммаризируют в компактное резюме, а свежие оставляют дословно — так диалог помещается в окно, не теряя контекста. Механику RAG подробно разбирает отдельный гайд основы RAG.
Как уместить документ в контекст
- Оцените размер документа в токенах — для русского текста берите запас, кириллица даёт больше токенов.
- Сравните с окном выбранной модели за вычетом места под системный промпт и ответ.
- Влезает целиком и это оправдано — отправляйте как есть; не влезает или дорого — выбирайте стратегию.
- Нужна обработка всего текста — чанкинг; нужна суть — суммаризация; нужен ответ по большой базе — RAG.
- Если задача упирается в объём, рассмотрите модель с бо́льшим окном — сравнить можно в каталоге.
Частые вопросы
Если окно большое, можно просто класть весь документ?
Технически да, пока влезает, но не всегда разумно: вы платите за все входные токены в каждом запросе, ответ идёт медленнее, а нужная деталь может потеряться в объёме. Часто дешевле и точнее подать только релевантный фрагмент.
Чем чанкинг отличается от RAG?
Чанкинг обрабатывает все фрагменты документа по очереди — когда нужен проход по всему тексту. RAG сначала находит поиском только релевантные запросу куски и подаёт лишь их — когда из большой базы нужен небольшой её фрагмент под конкретный вопрос.
Как понять, что документ не влезает в окно?
Прикиньте его размер в токенах и сравните с окном модели за вычетом системного промпта и max_tokens под ответ. Если сумма превышает окно, API вернёт ошибку — до этого лучше не доводить и заранее выбрать стратегию.