Главная / Статьи / Как ИИ-агенту уместиться в ограниченное контекстное окно: 7 практических стратегий

Как ИИ-агенту уместиться в ограниченное контекстное окно: 7 практических стратегий

Семь проверенных способов удержать долго работающих ИИ-агентов в пределах контекстного окна: сжатие, отсев, вынос в инструменты, системные промпты, дескрипторы, сжатый вывод и скользящее окно.

1219 слов

Каждый, кто строил агента, работающего дольше нескольких шагов, знает этот момент. Ошибка сообщает, что контекстное окно переполнено, или модель вдруг ведёт себя так, будто разговора двадцать сообщений назад не было. Вызовы инструментов, длинные цепочки рассуждений и громоздкие JSON-ответы съедают токены с пугающей скоростью.

Проблема растёт вместе со сложностью агента. Чем дольше он работает, тем больше состояния ему приходится нести, и рано или поздно окно становится узким местом. Здесь помогают семь техник. Все они не понадобятся: часто две-три уже заметно меняют стоимость, скорость и надёжность. Цель — успеть больше в том же окне.

1. Сжимайте историю

Это самая распространённая техника в реальных системах. Вместо того чтобы прогонять весь разговор заново, вы ведёте текущую сводку того, что важно:

  • принятые решения
  • рассуждения, которые стоит сохранить
  • итоговые результаты инструментов
  • предпочтения пользователя и текущее состояние

Старые ходы ужимаются, и полностью остаются только последние. Выбрасывайте примеры и светскую болтовню, держитесь за решения и результаты.

Например, после двадцати сообщений весь накопленный хвост можно сжать до заметки вроде: пользователь хочет консольное приложение на Python, выбран Click, есть три команды, тесты и документация ещё не готовы. Модели не нужны все предыдущие сообщения. Ей нужно то, что влияет на её следующий шаг.

Сжатие можно делать многоуровневым: сводка по каждому шагу, ещё одна по задаче и поверх них глобальная память проекта.

2. Отсеивайте сообщения и фильтруйте по релевантности

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

  • выбрасывать старые логи инструментов, как только их результаты учтены
  • удалять огромные JSON-ответы, вытащив из них ключевые поля
  • оставлять итоговые ответы и убирать промежуточную болтовню

Представьте веб-поиск, который возвращает HTML-страницу на 20 000 токенов. Держать сырую страницу в контексте бессмысленно. Разберите её один раз, извлеките нужное и выбросьте разметку. Модель всё равно получит полезные факты, не таская за собой тысячи бесполезных токенов.

3. Отдавайте тяжёлые вычисления инструментам

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

Допустим, нужно проанализировать огромный CSV. Не вставляйте его в промпт. Пусть инструмент посчитает статистику и сообщит что-то вроде «100 тыс. строк, средняя цена 23.4, 5% пустых значений в столбце X». Это гораздо дешевле, чем отправлять в окно весь набор данных. Модель рассуждает, инструменты считают.

4. Держите неизменные правила в системном промпте

Некоторые инструкции за весь разговор не меняются:

  • тон ассистента
  • доступные инструменты
  • требования к форматированию
  • эталонные примеры

Изложите их один раз в системном сообщении и перестаньте повторять. Если агент всегда должен отвечать в одной конкретной JSON-структуре, незачем напоминать об этом в каждом пользовательском ходе. В зависимости от размера инструкции и частоты вызовов модели экономия за долгую сессию может достигать сотен и даже тысяч токенов.

5. Передавайте дескрипторы, а не громадные блоки

Представьте схему базы данных из тысяч строк SQL, примерно 20 000 токенов. Вместо того чтобы класть её в окно, сообщите агенту, что схема хранится под именем вроде schema_v2 и при необходимости её можно получить через инструмент get_schema.

Теперь схема лежит в инструменте или отдельном ресурсе, и агент загружает её, только когда это действительно нужно. Такой подход подходит для любого крупного ресурса:

  • схем баз данных
  • длинных документов
  • конфигурационных файлов
  • документации API
  • баз знаний

Агент держит небольшую ссылку и подтягивает настоящее содержимое по запросу.

6. Сокращайте вывод инструментов до того, как его увидит модель

Сырой огромный вывод инструментов по возможности не должен попадать прямо в модель. Несколько типичных сокращений:

  • большой набор данных превращается в число строк плюс нужные столбцы
  • целая веб-страница превращается в заголовок, подзаголовки и метаданные
  • огромный JSON-документ сводится к ключам и полям, важным для решения

Допустим, инструмент базы данных находит тысячи строк, а агенту нужны только их количество и среднее по одному столбцу. Возвращать все строки было бы расточительно. Вместо этого инструмент может ответить парой строк:

100,000 rows
Average price: 23.4
Null values in column X: 5%

Теперь модель может рассуждать о результате с крошечным бюджетом токенов. Инструменты лучше всего работают как препроцессоры, превращающие массы сырых данных в тот небольшой срез, который модели действительно нужен, а не как простые трубы для данных.

7. Используйте скользящее окно

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

Недавняя часть может выглядеть так:

Recent context:
Message 31
Message 32
...
Message 40

а часть со старой информацией — так:

Earlier summary:
User is building a Python CLI app.
Click was selected.
Three commands have been implemented.Important memory:
Tests and documentation are still pending.

Подход простой, хорошо себя показывает и подходит для огромного числа сценариев. Многие чат-боты используют тот или иной его вариант, потому что он практично уравновешивает контекст, стоимость и качество.

С чего начать

Итак, семь техник:

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

Сжатие, отсев и сокращённый вывод инструментов — сильная стартовая тройка, и обычно уже она одна даёт большой выигрыш. Более глубокий урок в том, что агенту не нужно тащить за собой всё. Ему нужно нести правильную информацию. Как только контекст воспринимается как дефицитный ресурс, а не бесконечная память, проектировать масштабируемых агентов становится гораздо проще.