Проблема ограничения окна контекста
Каждый разработчик рано или поздно сталкивается с одной и той же проблемой при работе с большими языковыми моделями (LLM): чатбот прекрасно работает первые несколько циклов общения, затем начинает забывать детали разговора. Агент выполняет многошаговый процесс и теряет исходные цели уже на середине пути. Система извлечения информации загружает слишком много данных в запрос, что приводит к снижению качества ответов.
Это проблема ограничения окна контекста, которая не решается простым переходом на модель с большим окном. Мы столкнулись с этим при разработке ассистента искусственного интеллекта для платформы бронирования путешествий.
Почему увеличение размера окна контекста – это не решение проблемы
Некоторые модели предлагают огромные размеры окон контекстов:
- Claude 3.5 Sonnet имеет окно размером до 200 тысяч токенов;
- GPT-4o поддерживает до 128 тысяч токенов;
- Gemini 1.5 Pro может обрабатывать до 2 миллионов токенов.
Однако простое расширение окна контекста создает три ключевых проблемы:
Стоимость
Входящие токены стоят денег. При обработке запросов длиной в миллионы токенов расходы значительно возрастают еще до того, как модель начнет генерировать ответ.
Задержка обработки
Обработка запроса объемом в сотни тысяч токенов занимает гораздо больше времени, чем обработка короткого запроса. Это критично для интерфейсов реального времени, где задержка между сообщениями должна быть минимальной.
Падение качества
Исследования показывают, что модели уделяют меньше внимания контенту, расположенному посередине очень длинных контекстов. Этот эффект называется "потеря в середине". Факты, размещенные далеко от начала или конца длинного контекста, могут просто игнорироваться моделью.
Таким образом, вопрос заключается не в том, как вместить все данные в один запрос, а в том, какие именно данные должны находиться в контексте прямо сейчас.
Четыре стратегии работы с окнами контекста
Мы используем четыре подхода, комбинируя их в зависимости от конкретной задачи. Каждый подход сам по себе не нов, но важно знать, когда какой использовать.
Скользящее окно с суммированием
Для чатботов и разговорных агентов мы сохраняем последние N сообщений полностью и суммируем более старые сообщения. Ключевое решение здесь – частота суммирования.