Claude Code с DeepSeek: как восстановиться после Input length exceeds maximum
Сначала сохраните diff и состояние задачи вне чата, затем попробуйте точечный /compact. Если он тоже падает, откатите диалог через checkpoint или начните чистую сессию, а после проверьте модель, шлюз и порог автосжатия.
Содержание

Вы добавляете в Claude Code короткую фразу, а в ответ получаете status_code=400, Input length 1048609 exceeds the maximum length 1048566. Не отправляйте тот же запрос снова и не пытайтесь просто удалить 43 символа. Надежнее действовать так: сначала сохранить код и состояние задачи вне диалога, затем попробовать управляемый /compact, при неудаче откатить историю или открыть чистую сессию и только после этого искать слой, который отклонил запрос.
Сообщение говорит лишь о том, что для какого-то компонента вход оказался на 43 неуказанные единицы длиннее лимита. Из него нельзя понять, считаются ли токены, символы или байты. Оно также не доказывает, что запрос дошел до DeepSeek: отказ мог произойти в Claude Code, совместимом API, роутере или reverse proxy.
Сначала сохраните результат работы, а не историю чата
Прекратите вызывать модель из переполненной сессии. Изменения в файлах обычно уже лежат на диске. Рискует потеряться другое: что именно сделано, что проверено и какой шаг должен быть следующим.
Откройте второй терминал и зафиксируйте состояние без помощи модели:
claude --version
git status --short
git diff --stat
git diff > claude-context-recovery.patch
git diff --cached > claude-context-recovery-staged.patch
Если Git не используется, скопируйте измененные файлы или сделайте snapshot через локальную историю редактора. Затем вручную создайте короткий RECOVERY.md:
Цель:
Измененные файлы:
Что уже проверено:
Что еще не работает:
Ключевые решения:
Один следующий шаг:
Не загружать снова: полные логи, весь репозиторий, лишнюю историю
Эта заметка не должна быть красивой. Ее задача — позволить новой сессии восстановить работу из нескольких абзацев, а не снова загружать огромный диалог.
Для диагностики сохраняйте только безопасные данные: версию Claude Code, точный model ID, домен Base URL, название прокси и текст ошибки. Не печатайте API Key, Authorization-заголовки, полный рабочий prompt или переменные окружения с секретами.
Определите, какой именно лимит сработал
Похожие ошибки требуют разных исправлений.
| Текст ошибки | Что он может означать | Первый шаг |
|---|---|---|
Input length X exceeds the maximum length Y | Один из слоев ограничивает вход или размер запроса; единица измерения неизвестна | Сократить историю и tool output, затем найти отклонивший слой |
input length and max_tokens exceed context limit: A + B > C | Вход плюс зарезервированный ответ не помещаются в контекст | Делать compact раньше; уменьшать output budget только при подтвержденной причине |
HTTP 413 или request body too large | Сработал лимит HTTP body либо reverse proxy | Проверить вложения, кодирование и body-size в прокси |
All target providers failed | Роутер мог скрыть исходную ошибку провайдера | Смотреть raw attempt, логи и request ID шлюза |
В Claude Code #42 пользователь описывал случай, когда сумма входа и max_tokens превышала окно. В #8136 другой пользователь предположил, что /compact не успевает сработать, потому что самому запросу на сжатие нужен запас под ответ. Это отдельные пользовательские отчеты, а не доказательство причины вашей ошибки.
Поэтому разница в 43 единицы ничего не говорит о том, сколько видимого текста надо удалить. Claude Code добавляет системные инструкции, историю, tool definitions, содержимое файлов и результаты инструментов. Нужен заметный запас, а не попытка попасть ровно на единицу ниже границы.
Ветка A: /compact еще выполняется
Если slash-команды работают, сначала посмотрите занятое место, затем сожмите историю с явными инструкциями.
/context
После этого запустите:
/compact Сохрани цель, измененные файлы, проверенные результаты, ключевые решения, нерешенную проблему и следующий шаг. Удали полные логи, повторные листинги файлов, отброшенные ветки и постороннее обсуждение.
После удачного compact не просите сразу просканировать весь проект. Проверьте сессию небольшим запросом с наблюдаемым результатом:
Прочитай только RECOVERY.md и src/auth/session.ts. Скажи, какую функцию менять дальше. Не сканируй другие каталоги и не изменяй файлы.
Считать восстановление успешным можно, когда одновременно выполнены четыре условия:
/contextпоказывает заметно меньшую загрузку;- короткий запрос больше не возвращает 400;
- модель правильно повторяет цель, список измененных файлов и следующий шаг;
git diffи результаты тестов совпадают с вашей заметкой.
Compact может отбросить детали. Постоянные правила проекта лучше хранить в CLAUDE.md, а важное состояние текущей задачи — в файле или issue, а не только в длинной переписке.
Ветка B: /compact тоже отвечает Conversation too long или тем же 400
Не запускайте /compact по кругу на одной и той же переполненной истории. В Claude Code #26317 пользователь описал ситуацию, когда после достижения лимита сама команда сжатия стала возвращать Conversation too long. Закрытие issue со статусом not planned не означает, что проблема гарантированно исчезла во всех версиях и у всех совместимых endpoint.
Откатитесь до большого лога или чтения файла
В официальной документации по checkpointing указано, что можно выполнить /rewind либо дважды нажать Esc при пустом поле ввода. Доступные варианты включают:
- Restore conversation — откатить диалог, сохранив текущий код;
- Summarize from here — сжать сообщения после выбранной точки;
- Summarize up to here — сжать более раннюю историю и оставить последние сообщения.
Выберите checkpoint перед вставкой полного лога, чтением большого файла или массивным результатом инструмента. Сначала полезно вернуть разговор назад, но оставить код, а затем дать узкую задачу.
Суммаризация все равно может вызвать модель. Если upstream отклоняет и ее, эта ветка не поможет — переходите к чистому контексту.
Если откат не сработал, используйте /clear или новую сессию
/clear
Согласно официальному справочнику команд, /clear начинает новый диалог с пустым контекстом, а прежняя сессия остается сохраненной. Команда не отменяет изменения на диске и не удаляет Git diff.
Первое сообщение в чистой сессии должно быть ограниченным:
Прочитай RECOVERY.md, git diff --stat и два перечисленных там файла. Сначала проверь текущее состояние. Не сканируй весь репозиторий. Предложи только следующий шаг и дождись подтверждения перед изменениями.
Не запускайте сразу claude --continue, claude --resume или /resume. Официальная документация по сессиям говорит, что resume восстанавливает полную историю и результаты инструментов. Если именно они вызвали переполнение, следующий запрос снова упадет.
Найдите проблемный слой четырьмя дешевыми проверками
Когда работа уже сохранена, меняйте по одной переменной и используйте одну и ту же маленькую read-only задачу.
| Проверка | Результат | Что вероятнее всего означает |
|---|---|---|
| Тот же endpoint и модель, но чистая сессия и маленькая задача | Успех | Виновата накопленная история или большой tool output старой сессии |
| Та же маленькая задача в чистой сессии | Ошибка | Проверяйте model mapping, envelope запроса, версию клиента и серверный cap |
| Если разрешено, сравните официальный endpoint и промежуточный gateway | Прямой вызов работает, gateway нет | Ищите лимит, конвертацию или скрытие ошибки в gateway |
/compact падает, а запрос после /clear проходит | Успех | Запрос на сжатие не поместился в реальное окно или клиент неверно оценил его размер |
Снимите конфигурацию маршрута без секретов:
printf 'BASE_URL=%s\nMODEL=%s\nOPUS=%s\nSONNET=%s\nHAIKU=%s\nSUBAGENT=%s\n' \
"${ANTHROPIC_BASE_URL:-<unset>}" \
"${ANTHROPIC_MODEL:-<unset>}" \
"${ANTHROPIC_DEFAULT_OPUS_MODEL:-<unset>}" \
"${ANTHROPIC_DEFAULT_SONNET_MODEL:-<unset>}" \
"${ANTHROPIC_DEFAULT_HAIKU_MODEL:-<unset>}" \
"${CLAUDE_CODE_SUBAGENT_MODEL:-<unset>}"
Здесь намеренно нет ANTHROPIC_AUTH_TOKEN. Отдельно запишите, проходит ли запрос через Claude Code Router, switcher, корпоративный шлюз, reverse proxy или fallback между провайдерами.
В Claude Code Router #1799 пользователь сообщил, что gateway заменял исходную ошибку контекста общим сообщением All target providers failed. Предложенный им локальный patch нельзя считать универсальным решением, но сам пример показывает: в логах поддержки нужно сохранять upstream status, body и request ID.
Проверьте реальный маршрут DeepSeek, а не только метку [1m]
По состоянию на 30 сентября 2026 года в примере клиентских переменных окружения на официальной странице интеграции DeepSeek с Claude Code указано:
ANTHROPIC_MODEL,ANTHROPIC_DEFAULT_OPUS_MODELиANTHROPIC_DEFAULT_SONNET_MODEL—deepseek-flash[1m];ANTHROPIC_DEFAULT_HAIKU_MODELиCLAUDE_CODE_SUBAGENT_MODEL—deepseek-flash;CLAUDE_CODE_AUTO_COMPACT_WINDOW=786432.
На той же странице отдельно описан маппинг на стороне сервиса для Claude-style названий: имена, начинающиеся с claude-opus, сопоставляются с deepseek-v4-pro, а начинающиеся с claude-haiku или claude-sonnet — с deepseek-flash. Этот серверный маппинг и явные значения из клиентского примера — разные факты; их нельзя объединять в один вывод о фактическом маршруте.
Ни один из этих фрагментов не доказывает, какая модель и какое окно обслуживали запрос конкретного клиента. Для диагностики проверьте доступные request/usage records, исходное поле model, выбранные provider/route и upstream request ID, а не делайте вывод только по интерфейсу или старому гайду.
Метка [1m] также не гарантирует, что каждый промежуточный слой примет миллион токенов. Claude Code, compatibility API, gateway, fallback provider и финальная модель могут иметь разные ограничения; кроме того, часть окна нужна под ответ.
Настройте более ранний compact, а не завышайте окно
В текущем примере DeepSeek используется:
export CLAUDE_CODE_AUTO_COMPACT_WINDOW="786432"
Это порог раннего сжатия на стороне клиента, а не способ увеличить жесткий лимит провайдера. В официальном справочнике переменных Claude Code сказано, что значение задается целым числом, ограничено реальным окном модели и имеет приоритет над /autocompact, launch flags и settings.
Если ваша модель или gateway принимает меньше, укажите меньшее подтвержденное значение. CLAUDE_AUTOCOMPACT_PCT_OVERRIDE позволяет начать сжатие раньше, но не может расширить окно.
Не используйте CLAUDE_CODE_MAX_CONTEXT_TOKENS как кнопку «разблокировать больше контекста». Эта переменная сообщает Claude Code проверенный размер окна нестандартной модели. Завышенное значение лишь откладывает compact и повышает вероятность upstream 400.
На практике надежнее делать следующее:
- фильтровать большие логи через
grep,rg,tailили скрипт; - читать крупные файлы по функциям и диапазонам строк;
- выполнять
/clearмежду несвязанными задачами; - отдавать широкий поиск subagent, чтобы основной диалог получил краткий итог;
- запускать сфокусированный
/compactперед новой фазой, а не на последних токенах; - не дублировать схемы, полные build logs и целые diff.
Перепроверьте исправление на одной маленькой задаче
После восстановления или изменения настроек:
- откройте чистую сессию;
- прочитайте только
RECOVERY.mdи один небольшой файл; - запросите короткий ответ с четкой границей;
- убедитесь, что 400 исчез;
- добавляйте файлы и tool calls постепенно.
Если падает даже минимальный запрос, перестаньте урезать старую переписку и проверяйте endpoint, model mapping, proxy behavior и формат запроса. Если проблема воспроизводится только в длинной сессии, ищите слишком поздний compact, чрезмерный tool output и отсутствие границ между задачами.
Частые вопросы
Почему перезапуск Claude Code не помог?
Перезапуск не всегда означает пустую историю. --continue, --resume и выбор сохраненной сессии возвращают старый диалог. Для проверки нужна действительно новая сессия и маленький контрольный запрос.
Поможет ли уменьшение output tokens?
Только если ошибка прямо говорит, что вход вместе с max_tokens превышает общий контекст. Когда существует отдельный лимит на input, уменьшение ответа не гарантирует исправление.
Решит ли проблему другой gateway?
Не обязательно. Другой маршрут поможет, если текущий gateway имеет меньший body limit или скрывает upstream error. Ни один шлюз не может превысить жесткий лимит финальной модели.
/clear удалит код?
Нет. Он очищает контекст разговора, а не файлы на диске. Но перед очисткой все равно проверьте git status, сохраните patch, commit или snapshot редактора.
Почему нельзя удалить ровно 43 символа?
Единица измерения неизвестна, а в запрос входят невидимые системные данные, tools и история. Надежнее создать большой запас, чем пытаться попасть ровно под границу.
Короткая схема восстановления
Запомните порядок: сохранить diff и ручной handoff во втором терминале → выполнить /context → попробовать сфокусированный /compact → при неудаче откатиться через /rewind до большого вывода → если это не помогло, сделать /clear или открыть новую сессию → маленьким контрольным запросом найти слой ограничения → поставить автосжатие ниже подтвержденного серверного окна.
Такой подход не требует угадывать, что именно означает число 43, и не обещает, что прокси обойдет жесткий лимит модели. Сначала он защищает уже сделанную работу, а затем превращает расплывчатую ошибку 400 в последовательную проверку каждого слоя.