Неограниченная история диалога может переполнить контекст
Симптом
Во время тестирования агент внезапно начал завершать каждый запрос ошибкой
LLMResponseError: No choices in OpenRouter response.
Контекст
Чтобы разобраться в сбое, мы добавили логирование и при этом перезапустили процесс. После перезапуска агент снова заработал. Само логирование не могло исправить ответы OpenRouter, зато перезапуск очистил состояние, жившее только в памяти процесса: историю текущего диалога. Такое хранение было частью архитектуры, а не ошибкой само по себе.
Поскольку очистка истории совпала с восстановлением, основной гипотезой стало переполнение контекстного окна модели. Восстановление после перезапуска - сильный сигнал, но само по себе оно не доказывает диагноз.
Вероятная причина
В базовом каркасе контроль контекстного окна был реализован лишь частично. Объём контекста, извлекаемого из памяти, ограничивался, но активная история диалога могла расти бесконтрольно. Этот пробел согласуется с тем, что после очистки истории агент восстановился.
Ошибочное предположение
Мы предполагали, что готовый каркас уже учитывает это базовое ограничение. В предыдущем продукте управление контекстом было заложено с самого начала, а этот каркас не предусматривал длинные диалоги.
Исправление
Мы добавили финальное ограничение контекста и скользящее резюме старых реплик. Цель - удерживать длинные диалоги в пределах окна модели, не теряя суть предыдущей части разговора.
Общий вывод
Ограничение только для контекста из памяти не ограничивает итоговый запрос к модели. Бюджет должен учитывать и активную историю диалога.