Ошибка context_length_exceeded — переполнен контекст
Модель отказалась отвечать, потому что запрос не помещается. Разбираем, из чего складывается контекст и что резать в первую очередь.
2 мин · · ошибки · токены · модели
Ошибка context_length_exceeded означает, что запрос вместе с запрошенным ответом не помещается в контекстное окно модели. Запрос отклоняется целиком, до генерации — и это хорошая новость: за отклонённый запрос денег не берут.
Из чего складывается контекст
Считается всё, что уходит в модель за один вызов.
Системный промпт. В агентах он часто занимает тысячи токенов, про которые вы не помните, потому что писали их не вы.
Вся история переписки. Модель не помнит предыдущие вызовы — клиент пересылает историю заново каждый раз. Поэтому длинный диалог упирается в лимит внезапно: последнее сообщение было коротким, а вместе с историей перевалило за границу.
Определения инструментов. Схемы функций в JSON занимают больше, чем кажется: десяток инструментов легко даёт пару тысяч токенов.
Вложенные файлы и результаты вызовов инструментов. В агентных сценариях это обычно самая крупная часть.
И, наконец, max_tokens — место, зарезервированное под ответ. Оно вычитается из окна заранее. Запрос на 195 тысяч токенов при окне в 200 тысяч упрётся в лимит, если вы попросили max_tokens: 8000.
Что делать по порядку
Уменьшите max_tokens. Самое дешёвое действие. Часто выставлено «с запасом» вроде 64 000, хотя ответ нужен на две тысячи. Это освобождает окно мгновенно.
Обрежьте историю. Оставьте системный промпт, несколько первых сообщений (в них обычно задача) и последние — середину диалога чаще всего можно выбросить без потерь.
Уберите результаты инструментов. Вывод команды, который агент прочитал пять шагов назад, в контексте больше не нужен. Многие фреймворки умеют чистить старые результаты автоматически, поищите такую настройку.
Сожмите историю в резюме. Замените первые двадцать сообщений одним абзацем с выводами. Дороже предыдущих вариантов — за резюме тоже платите, — но работает, когда диалог принципиально длинный.
Возьмите модель с большим окном. Последний шаг, а не первый: если контекст растёт бесконтрольно, большее окно лишь отодвинет проблему и увеличит счёт, потому что платите вы за каждый токен на входе.
Как не встречать эту ошибку
Считайте токены до отправки, а не после отказа. Практическое правило для прикидки: один токен — примерно четыре символа латиницы или два-три символа кириллицы. Точные цифры даёт токенизатор, но для проверки «влезаем или нет» приближения достаточно.
И следите за формой роста. Если в логах видно, как размер запроса растёт на каждом шаге агента, лимит вы встретите обязательно — вопрос лишь в том, на каком шаге.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Ключи OpenAI API в открытом доступе: почему ими нельзя пользоватьсяОткуда берутся «бесплатные» ключи на GitHub, почему пользоваться ими опасно и для вас, и для владельца, и как защитить собственный ключ от такой же утечки.
- Ошибки GLM API: почему не работает запрос и как это исправитьНеверный id модели, переполненный контекст 128K, ключ, баланс, лимиты: типичные причины ошибок GLM API и быстрый способ найти свою.
- xAI Grok API: подключение Grok 4.7, цена и контекст 256KКак вызвать grok-4.7 через OpenAI-совместимый API, что делать с лимитом контекста 256K и сколько стоят типичные запросы. Плюс сравнение с Grok 4.6.
- GPT-6 Astra или Claude Fable 5.1: две топовые модели по цене и индексуДве дорогие модели с одинаковым индексом силы и разной ценой в Zukko. Считаем разовый запрос и агентную сессию с кэшем и объясняем, как выбрать на своих данных.