Руководство совместимости Claude Code gateway
Поддерживайте совместимость LLM gateway с Claude Code: конечные точки, которые он вызывает, заголовки и поля тела, которые необходимо передавать, и что перестает работать при их удалении.
На этой странице документированы запросы, которые Claude Code отправляет на шлюз, включая конечные точки, которые он вызывает, заголовки и поля тела, которые шлюз должен передавать, и какие функции перестают работать, если он этого не делает. Она написана для операторов, настраивающих продукт шлюза для работы с Claude Code.
Claude apps gateway, самостоятельно размещаемый шлюз Anthropic, предоставляет собственную справку по конечным точкам по адресу GET /protocol, охватывающую конечные точки входа, вывода, управляемых параметров, обнаружения модели и телеметрии этого шлюза. Это отдельный документ от этого руководства.
- Чтобы развернуть существующий или сторонний шлюз для вашей организации, см. Развертывание LLM gateway
- Если вы отдельный разработчик, аутентифицирующий Claude Code на шлюзе с учетными данными, которые вам были предоставлены, см. Подключение Claude Code к LLM gateway
На этой странице рассматривается:
- Форматы API и конечные точки для обслуживания для каждого
- Поведение клиента по методу подключения: как идентификаторы моделей, значения
anthropic-beta, поля запроса и значения по умолчанию отличаются между форматами и входом в Claude apps gateway - Заголовки запроса: какие должны достичь вышестоящего сервера и какие может использовать ваш шлюз
- Заголовки ответа: что возвращать, чтобы обнаружение зависания, повторные попытки и отображение лимита использования работали
- Блок атрибуции системного приглашения и как он взаимодействует с кэшированием приглашений
- Сквозная передача функций: что перестает работать при удалении заголовков или полей тела
- Обнаружение модели
На этой странице используются два термина для описания того, что ваш шлюз делает с каждым заголовком и полем тела:
- Передавать без изменений: передать его вышестоящему серверу побайтово
- Использовать: шлюз может прочитать его для маршрутизации, атрибуции или трассировки и не обязан передавать его
Все, что не отмечено как передача без изменений, вы можете использовать или игнорировать.
Форматы API
Шлюз должен предоставлять клиентам Claude Code по крайней мере один из следующих форматов API. Клиент выбирает формат и указывает Claude Code на ваш шлюз с помощью переменных в столбце "Selected by" таблицы ниже.
Google Cloud's Agent Platform — это конечная точка Claude в Google Cloud, ранее известная как Vertex AI; названия её переменных сохраняют написание VERTEX.
| Формат | Selected by | Endpoints | Forward unchanged |
|---|---|---|---|
| Anthropic Messages | ANTHROPIC_BASE_URL |
/v1/messages, /v1/messages/count_tokens (опционально) |
anthropic-beta и anthropic-version заголовки запроса |
| Amazon Bedrock InvokeModel | ANTHROPIC_BEDROCK_BASE_URL с CLAUDE_CODE_USE_BEDROCK=1 |
/model/{model}/invoke, /model/{model}/invoke-with-response-stream, /model/{model}/count-tokens (опционально) |
anthropic_beta и anthropic_version поля тела запроса |
| Google Cloud's Agent Platform rawPredict | ANTHROPIC_VERTEX_BASE_URL с CLAUDE_CODE_USE_VERTEX=1 |
:rawPredict, :streamRawPredict, count-tokens:rawPredict (опционально) |
anthropic-beta и anthropic-version заголовки запроса, и поле anthropic_version в теле запроса |
Foundry и Claude Platform on AWS
Microsoft Foundry и Claude Platform on AWS реализуют формат Anthropic Messages. Claude Code маршрутизирует к ним через их собственные переменные, ANTHROPIC_FOUNDRY_BASE_URL и ANTHROPIC_AWS_BASE_URL, но шлюз, находящийся перед любым из них, реализует строку Anthropic Messages выше. Шлюз, находящийся перед Claude Platform on AWS, должен также пересылать заголовок anthropic-workspace-id, который эта платформа требует для каждого запроса.
Опциональные endpoints и стартовый трафик
Endpoints подсчёта токенов — единственные опциональные: когда их нет, Claude Code переходит на оценку использования контекста на основе количества символов.
Сопоставляйте по пути, а не по полному URL:
- Запросы вывода отправляются на
/v1/messages?beta=true - Метод Google Cloud's Agent Platform добавляет суффиксы к пути модели издателя, как в
/projects/{project}/locations/{location}/publishers/anthropic/models/{model}:streamRawPredict
Шлюз также видит лучший трафик при запуске, который он может отклонить без нарушения чего-либо. Шлюз формата Anthropic Messages получает зонд HEAD /api/hello для прогрева соединения, который Claude Code пропускает, когда настроен HTTP-прокси или сертификат клиента. Шлюз формата Amazon Bedrock получает запрос GET /inference-profiles?type=SYSTEM_DEFINED и, когда настроенная модель является профилем вывода, поиски GET /inference-profiles/{profile}.
Проверка доступности fast mode никогда не появляется в логах шлюза: она вызывает api.anthropic.com напрямую, а не следует ANTHROPIC_BASE_URL, поэтому в сети, которая блокирует прямой исходящий трафик на api.anthropic.com, fast mode может сообщить об ошибке подключения, в то время как вывод через шлюз продолжает работать. Проверка безопасности домена WebFetch также вызывает api.anthropic.com напрямую. Use fast mode behind proxies and LLM gateways охватывает переменные, которые его восстанавливают.
Потоковая передача
Потоковая передача ответов вывода. Claude Code читает поток по мере его поступления, поэтому если ваш шлюз буферизирует полные ответы перед их передачей, Claude Code зависает.
Когда клиент использует формат Amazon Bedrock, передавайте тело ответа InvokeModelWithResponseStream и его заголовок Content-Type: application/vnd.amazon.eventstream без изменений, и не преобразуйте поток в server-sent events. См. Streaming errors behind a gateway or proxy.
Пересылайте также keep-alive пинги. На соединениях через ANTHROPIC_BASE_URL или ANTHROPIC_AWS_BASE_URL, Claude Code считает каждый байт, который ваш шлюз передаёт, включая SSE события ping и строки комментариев, и прерывает поток, который молчит в течение 300 секунд по умолчанию. Пинги вышестоящего сервера — единственный трафик во время длительных пауз размышления, поэтому если ваш шлюз удаляет или буферизирует их, Claude Code прерывает поток во время этих пауз; Automatic retries охватывает то, что прерванный поток сообщает в зависимости от того, насколько далеко продвинулся ответ. Вышестоящий сервер, который вообще не отправляет пинги, такой как двоичный event-stream Amazon Bedrock, оставляет эти паузы без чего-либо для передачи. При переводе с такого вышестоящего сервера выдавайте свои собственные события ping во время молчаливых пауз. Шлюзы, достигнутые через ANTHROPIC_BEDROCK_BASE_URL, ANTHROPIC_VERTEX_BASE_URL или ANTHROPIC_FOUNDRY_BASE_URL, не обёрнуты этим байт-уровневым сторожем, даже когда они передают формат Anthropic Messages; там 5-минутный timeout неактивности прерывает молчаливый поток вместо этого, и на соединениях ANTHROPIC_BEDROCK_BASE_URL вы можете добавить байт-уровневый сторож с помощью CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK.
Несоответствие формата с вышестоящим сервером
Какой формат использует клиент, определяет, что получает ваш шлюз. Распространённый режим отказа — несоответствие между форматом, который клиент отправляет вашему шлюзу, и форматом, который принимает вышестоящий поставщик позади него.
- Когда клиент использует формат Amazon Bedrock или Google Cloud's Agent Platform, Claude Code отправляет только подмножество своего полного набора возможностей, которое эти поставщики принимают
- Когда клиент использует формат Anthropic Messages, Claude Code отправляет полный набор, даже если ваш шлюз пересылает на вышестоящий сервер Amazon Bedrock или Google Cloud's Agent Platform
Преодоление этого различия — задача вашего шлюза. Feature pass-through описывает, что ломается, когда это не происходит.
Если ваш вышестоящий сервер — Amazon Bedrock или Google Cloud's Agent Platform, вы можете избежать преодоления, предоставив вместо этого формат этого поставщика. Route to a cloud provider through a gateway показывает конфигурацию клиента для этого формата.
Как метод подключения изменяет поведение клиента
Способ подключения разработчика к вашему шлюзу определяет, какие ID моделей, значения anthropic-beta и поля запроса отправляет Claude Code, а также какие значения по умолчанию он применяет. Ваш шлюз видит одно из трёх поведений клиента:
- Формат Amazon Bedrock или Agent Platform: разработчик устанавливает
CLAUDE_CODE_USE_BEDROCK=1сANTHROPIC_BEDROCK_BASE_URLилиCLAUDE_CODE_USE_VERTEX=1сANTHROPIC_VERTEX_BASE_URL, указывающие на ваш шлюз. Claude Code использует ID моделей этого поставщика, поля запроса и значения по умолчанию. - Формат Anthropic Messages: разработчик устанавливает
ANTHROPIC_BASE_URLна ваш шлюз. Claude Code рассматривает шлюз как Claude API и не может определить, на какой upstream вы перенаправляете. - Вход в шлюз Claude apps: разработчик входит в шлюз Claude apps. Этот шлюз использует формат Anthropic Messages, но может маршрутизировать на любой upstream, поэтому Claude Code отправляет только значения
anthropic-betaи предположения о возможностях модели, которые также принимают Amazon Bedrock и Agent Platform.
Запросы и значения по умолчанию по методу подключения
Таблица ниже сравнивает три метода подключения, по одному поведению в строке. Она исключает Microsoft Foundry и Claude Platform на AWS, которые также используют формат Anthropic Messages, но которые Claude Code достигает через свои собственные переменные. Для них см. страницы Microsoft Foundry и Claude Platform на AWS.
| Поведение | Формат Amazon Bedrock или Agent Platform | Формат Anthropic Messages | Вход в шлюз Claude apps |
|---|---|---|---|
| ID моделей в запросах по умолчанию | Форма поставщика, например us.anthropic.claude-opus-4-8 на Amazon Bedrock |
ID Anthropic, например claude-opus-4-8 |
ID Anthropic |
Отправляемые значения anthropic-beta |
Подмножество, которое принимают Amazon Bedrock и Agent Platform | Полный набор, описанный в разделе передача функций, если разработчик не устанавливает CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS |
Подмножество, которое принимают Amazon Bedrock и Agent Platform |
| Поля запроса для ID модели, которую Claude Code не распознаёт, например alias шлюза | Thinking с фиксированным бюджетом вместо адаптивного рассуждения, и без полей управления усилиями или контекстом | Всё, что принимают текущие модели Claude на Claude API, включая адаптивное рассуждение, усилие и управление контекстом, которые upstream Amazon Bedrock или Agent Platform может отклонить | То же, что формат Amazon Bedrock или Agent Platform |
| TTL кэша подсказок на один час при согласии разработчика | Запрашивается через поле ttl в cache_control, без значения beta |
Запрашивается через поле ttl плюс значение extended-cache-ttl в anthropic-beta, которое вы должны перенаправить |
См. таблицу доступность и ограничения шлюза Claude apps |
Модель для фоновых задач, если ANTHROPIC_DEFAULT_HAIKU_MODEL не закрепляет одну |
Модель Sonnet по умолчанию или основная модель после выбора одной, как описано на страницах Amazon Bedrock и Agent Platform | Основная модель или модель Haiku по умолчанию, когда ANTHROPIC_API_KEY или apiKeyHelper предоставляет ключ Anthropic Console и ANTHROPIC_AUTH_TOKEN не установлен |
Основная модель |
Для функций, которые поддерживает каждое подключение, и телеметрии, которую оно отправляет Anthropic по умолчанию, см. Доступность функций и Поведение по умолчанию по поставщику API.
Параметры для нераспознанных ID моделей
Два параметра на стороне клиента изменяют то, что Claude Code предполагает для ID модели, которую он не распознаёт, независимо от того, какой метод подключения использует разработчик:
- Окно контекста: Claude Code предполагает 200K или 1M, когда ID содержит
[1m]. Чтобы объявить реальное окно, см. Исправьте окно для шлюза или пользовательского ID модели - Возможности: чтобы дать alias шлюза возможности модели позади него, сопоставьте ID Anthropic этой модели с вашим alias с помощью записи
modelOverridesв параметрах, которые вы распространяете. Для того, где применяются переменныеANTHROPIC_DEFAULT_*_MODEL_SUPPORTED_CAPABILITIES, см. передача функций
Заголовки запроса
Claude Code включает эти заголовки в запросы API. Имена заголовков не чувствительны к регистру на проводе. Пересылайте anthropic-version и anthropic-beta без изменений, плюс anthropic-workspace-id когда upstream — это Claude Platform on AWS; остальное gateway может использовать для маршрутизации, атрибуции и трассировки и не обязан пересылать.
| Заголовок | Описание |
|---|---|
Authorization, x-api-key |
Учетные данные gateway разработчика, в одном или обоих заголовках в зависимости от того, какую переменную учетных данных они установили |
anthropic-version |
Версия API, в настоящее время 2023-06-01. Запросы формата Amazon Bedrock и Google Cloud's Agent Platform также содержат поле тела anthropic_version, значение которого — строка диалекта поставщика, а не значение этого заголовка |
anthropic-beta |
Значения возможностей, разделенные запятыми, для запроса. Пересылайте заголовок дословно; не создавайте список разрешений отдельных значений, потому что набор изменяется с выпусками Claude Code. Когда разработчик аутентифицируется с помощью входа claude.ai, что возможно, когда ANTHROPIC_BASE_URL установлен без переменной учетных данных gateway, этот заголовок также содержит возможность OAuth, которую требует upstream, и удаление его приводит к отказу этих запросов с 401 |
x-claude-code-session-id |
Уникальный идентификатор текущего сеанса Claude Code. Используйте его для агрегирования всех запросов из одного сеанса без анализа тел запросов |
x-claude-code-agent-id |
Идентификатор подагента, который выдал запрос, присутствует только в запросах от агента, порожденного Claude Code внутри сеанса. Используйте его с идентификатором сеанса для отнесения затрат к параллельным агентам |
x-claude-code-parent-agent-id |
Идентификатор агента, который породил запрашивающего агента, присутствует только для вложенных агентов |
Идентификаторы подагентов генерируются заново для каждого порождения. Агенты товарищей, названные члены команды агентов, повторно используют стабильный идентификатор на основе имени при переподключениях. В обоих случаях идентификатор идентифицирует агента, а не человека или устройство, поэтому не рассматривайте заголовок идентификатора агента как идентификатор пользователя.
Если ваши разработчики установили ANTHROPIC_CUSTOM_HEADERS, эти заголовки также появляются в запросах.
Заголовки подсказок Gateway
Claude Code также может отправлять подсказки маршрутизации: факты для каждого запроса, которые gateway или маршрутизатор может использовать для планирования, кэширования или отнесения запроса. Требуется Claude Code v2.1.273 или позже.
Наличие их в запросе зависит от того, куда Claude Code его отправляет:
- Прямое подключение к API Anthropic: отправляются по умолчанию
- Пользовательский базовый URL: отключено по умолчанию, потому что прокси, который отклоняет неизвестные заголовки, приведет к отказу запроса. Чтобы их получить, установите
CLAUDE_CODE_GATEWAY_HINT_HEADERS=1для ваших разработчиков, например в блокеenvуправляемых параметров - Любой другой backend, включая Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry и Claude Platform on AWS: отправляются только когда установлено
CLAUDE_CODE_GATEWAY_HINT_HEADERS=1
Установка CLAUDE_CODE_GATEWAY_HINT_HEADERS на 0 останавливает заголовки на каждом подключении.
Заголовки содержат только то, что указано в строках ниже: фиксированные словари, имена инструментов и длительности, никогда текст подсказки или содержимое файлов. Каждое значение — это печатаемый ASCII.
| Заголовок | Описание |
|---|---|
x-claude-code-request-class |
Какой тип запроса это: main для хода основного разговора, subagent для хода подагента, workflow для агента, работающего внутри workflow, compaction для запроса суммирования, который компактирует разговор, или auxiliary для побочных запросов, таких как названия сеансов, классификаторы и резюме. Отправляется на каждом запросе |
x-claude-code-agent-type |
Тип подагента, который выдал запрос: встроенное имя типа агента, такое как Explore, Plan или general-purpose, или custom для определяемого пользователем агента, teammate для члена команды агентов, работающего в процессе лидера, или fork для ветвления текущего разговора. Присутствует только на собственных ходах подагента; запросы компактирования или побочные запросы подагента сохраняют идентификатор агента, но не содержат тип. Имя агента, выбранное пользователем, никогда не отправляется |
x-claude-code-compaction |
Присутствует в запросе, который суммирует разговор во время компактирования. Значение говорит, что его вызвало: auto когда окно контекста приближалось к емкости, manual для /compact, или reactive когда API отклонил запрос как слишком длинный. Отсутствует на каждом другом запросе |
x-claude-code-context-compacted |
Присутствует один раз, на первом запросе основного разговора после компактирования, с теми же значениями, что и x-claude-code-compaction. Префикс разговора перед этим запросом больше не используется, поэтому кэш, основанный на нем, может быть удален |
x-claude-code-prev-tool-durations |
Измеренное время выполнения вызовов инструментов, результаты которых содержит этот запрос, как <name>=<ms>;<name>=<ms>, например Bash=742;Read=9. Отправляется на следующем запросе того же разговора после пакета вызовов инструментов, из основного сеанса или подагента |
Перед анализом x-claude-code-prev-tool-durations проверьте, как Claude Code строит значение и что оно опускает:
- Записи: одна на каждый выполненный вызов инструмента, в порядке сбора его результата, в целых миллисекундах
- Ограничение: Claude Code отправляет максимум 32 записи и 4 КБ, сохраняя первые записи
- Кодирование: имена инструментов кодируются в процентах, охватывая
%,;,=, запятую, пробел и любой символ вне печатаемого ASCII - Анализ: разделите на
;, затем на=, и декодируйте каждое имя - Отсутствие: вызовы компактирования, побочные запросы и первый запрос нового подсказки никогда его не содержат. Не читайте отсутствующий заголовок как ход, который не запустил никакие инструменты
- Времена: каждое исключает подсказки разрешения и hooks, и параллельные вызовы инструментов каждый сообщают свое собственное время, поэтому записи не складываются в промежуток между запросами
Пересылка как открытые списки
Рассматривайте заголовки и поля тела как открытые списки, а не закрытые. Claude Code получает возможности в выпусках, и они поступают как новые значения anthropic-beta, новые поля тела запроса и иногда новые заголовки anthropic-* или x-claude-code-*.
При пересылке на upstream формата Anthropic пропускайте заголовки запроса anthropic-* и поля тела запроса без изменений, а не создавайте список разрешений видимых вами сегодня. Gateway, привязанный к наблюдаемому списку, удаляет заголовок или поле следующей возможности и ломает его при выпуске, который его вводит.
Исключением является upstream, не относящийся к Anthropic, такой как Amazon Bedrock или Google Cloud's Agent Platform, где преодоление различия схемы — задача gateway; см. сквозная передача функций.
Заголовки ответов
Claude Code читает эти заголовки ответов для обнаружения зависших потоков, чтобы решить, следует ли и когда повторить попытку, а также для отображения лимитов использования. В таблице указано, что возвращать для каждого. Также пропускайте тела ответов об ошибках без изменений, чтобы восстановление при отклонении возможностей Claude Code могло соответствовать формулировке ошибки вышестоящего сервера.
| Заголовок | Что возвращать и почему |
|---|---|
content-type |
Возвращайте text/event-stream для потоковых ответов в формате Anthropic Messages и application/vnd.amazon.eventstream без изменений для ответов в формате Amazon Bedrock, где другой тип приводит к сбою запроса. Streaming указывает, какие соединения выполняют обнаружение зависания на этих потоках |
retry-after |
Возвращайте целое число секунд вместо даты HTTP. Claude Code ждет по крайней мере столько времени перед следующей автоматической повторной попыткой, и вне сеансов CLAUDE_CODE_RETRY_WATCHDOG значение выше 60 останавливает повторные попытки и показывает ошибку сразу же |
x-should-retry |
Пропускайте значение вышестоящего сервера без изменений. Claude Code читает этот заголовок как один из входных данных при решении о повторной попытке неудачного запроса: true отмечает ответ как подлежащий повторной попытке, а false отмечает его как не подлежащий повторной попытке. Для количества повторных попыток, отката и того, какие сбои Claude Code повторяет, см. автоматические повторные попытки |
anthropic-ratelimit-unified-* |
Пропускайте значения вышестоящего сервера без изменений при каждом ответе. Claude Code читает их при успешных ответах для отображения использования в соответствии с лимитами плана разработчикам, вошедшим в систему с помощью claude.ai, и при 429 для различения лимита плана или лимита расходов от временного дросселирования; см. лимиты использования |
Блок атрибуции системного приглашения
Claude Code добавляет в начало системного приглашения короткий блок атрибуции, содержащий версию клиента и отпечаток, полученный из разговора. Конечная точка api.anthropic.com удаляет блок перед обработкой, когда он поступает без изменений в качестве первого системного блока, поэтому он не влияет на кеширование приглашений первой стороны. Любой другой upstream получает его как часть приглашения.
Удаление является позиционным, поэтому оно работает только тогда, когда шлюз пересылает массив system без изменений. Чтобы исключить блок из приглашения без потери другого системного содержимого:
- Пересылайте массив
systemточно так, как он был получен, сохраняя блок первым: добавление другого системного блока в начало, переупорядочение массива или преобразование его в одну строку нарушает удаление, и блок затем достигает модели и ключа кеша приглашений. - Сохраняйте блок в собственной записи массива: конечная точка рассматривает объединённый блок, который начинается с заголовка атрибуции, как атрибуцию в целом и удаляет всё объединённое в него, включая остальную часть системного приглашения.
- Если ваш шлюз должен переформатировать системное содержимое, установите
CLAUDE_CODE_ATTRIBUTION_HEADER=0, чтобы Claude Code опустил блок. Anthropic и конечные точки Claude облачных поставщиков читают блок для атрибуции, поэтому опустите его на клиенте, а не удаляйте или перемещайте его в шлюзе.
Переменная существует для совместимости с шлюзом и кешированием третьей стороны, а не как элемент управления конфиденциальностью: при прямом подключении полный запрос в любом случае поступает в API Anthropic. Когда оба из этих условий выполняются, Claude Code сохраняет блок в запросах классификатора режима автоматического выбора даже когда вы устанавливаете переменную на 0:
- Запросы поступают на
api.anthropic.com, сANTHROPIC_BASE_URLне установленной или указывающей на этот хост, и ни один поставщик третьей стороны не выбран. - Активные учётные данные не являются профилем Anthropic или учётными данными федерации.
Запросы классификатора пропускают остальную часть системного приглашения Claude Code, поэтому на этих запросах блок является единственным маркером в теле запроса, который идентифицирует их как трафик Claude Code. Когда любое из условий не выполняется, через шлюз LLM, у поставщика третьей стороны или с активным профилем или учётными данными федерации, установка 0 удаляет блок из запросов классификатора также. До версии v2.1.229 это исключение не существовало: установка 0 удаляла блок из этих запросов классификатора, и когда API отклонял неидентифицированные запросы, режим автоматического выбора не работал на каждом действии, которое он отправлял классификатору.
Начиная с Claude Code v2.1.181, блок стабилен в течение всего времени жизни разговора, когда запросы маршрутизируются через пользовательский базовый URL, поэтому кеш приглашений на стороне шлюза, использующий ключ на основе полного тела запроса, работает без отключения его, и любой поставщик, на которого ваш шлюз пересылает запросы, получает стабильный префикс приглашения. До версии v2.1.181 блок включал токен для каждого запроса, который изменял начало системного приглашения при каждом запросе. На этих версиях установите CLAUDE_CODE_ATTRIBUTION_HEADER=0, когда ваш шлюз выполняет любое из этих действий:
- Реализует кеш приглашений, использующий ключ на основе тела запроса.
- Пересылает запросы поставщику третьей стороны, такому как Amazon Bedrock, Microsoft Foundry или Google Cloud's Agent Platform, в формате Anthropic Messages или в собственном формате поставщика, где изменяющийся префикс снижает повторное использование кеша приглашений у этого поставщика.
Сквозная передача функций
Claude Code рассматривает шлюз ANTHROPIC_BASE_URL как конечную точку в формате Anthropic и отправляет ему бета-заголовки и поля тела запроса, которые он отправляет на api.anthropic.com, за исключением небольшого набора диагностики и значений по умолчанию, зарезервированных для прямых соединений, таких как значение по умолчанию для потоковой передачи инструментов с точной настройкой, описанное ниже. Этот набор варьируется в зависимости от версии, поэтому не полагайтесь на его содержимое.
Возможности, которые добавляют поля тела, связывают их с бета-заголовком, и эта пара передается вместе. Шлюз, который удаляет заголовок при передаче тела или пересылает тело в формате Anthropic на вышестоящий сервер с другой схемой, создает жесткие ошибки 400; только когда обе части отсутствуют вместе, функция отключается без ошибок. Шлюз, который переписывает или редактирует тела запросов для проверки содержимого, нарушает связь так же, как это делает удаление, поэтому проверяйте без изменений. В таблице указано, где функция отклоняется от связи.
Потоковая передача инструментов с точной настройкой — это одно из значений по умолчанию для прямого соединения: она отключена по умолчанию всякий раз, когда запросы маршрутизируются через пользовательский базовый URL, и шлюз получает ее, когда разработчики устанавливают CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING=1.
| Функция | Бета-заголовок и пара тела | Симптом при нарушении | Исправление |
|---|---|---|---|
| Адаптивное рассуждение | Нет бета-заголовка. Claude Code отправляет thinking: {"type": "adaptive"} для Claude 4.6 и более поздних версий и рассматривает неизвестные имена моделей, такие как псевдонимы шлюза, как текущие модели, которые получают это поле |
Ошибка 400, указывающая на поле thinking или тег adaptive, когда сборка вышестоящей модели его не принимает |
Обновите вышестоящий сервер. На Opus 4.6 и Sonnet 4.6 разработчики могут вместо этого установить CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1 |
| Управление контекстом | Бета-заголовок управления контекстом связан с полем тела context_management |
Ошибка 400 с сообщением Extra inputs are not permitted. Часто встречается, когда шлюз принимает запросы в формате Anthropic, но пересылает их на Amazon Bedrock |
Пересылайте оба, или CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 |
| Расширенный контекст и чередующееся мышление | Только бета-заголовки, нет поля тела | Молча недоступно, когда заголовок удален; вышестоящий сервер никогда не видит запрос возможности | Пересылайте anthropic-beta без изменений |
| Бета поля инструментов | Связанные с инструментами бета-заголовки связаны с полями схемы инструментов, такими как strict и defer_loading |
Ошибка 400, указывающая на неизвестное поле схемы инструмента, когда тело проходит без своего заголовка |
Пересылайте оба, или CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 |
| Усилие и структурированные выходные данные | Поле тела output_config содержит параметры усилия, формата структурированного выхода и бюджета задачи; каждый связан с собственным бета-заголовком |
Ошибка 400, указывающая на output_config, часто Extra inputs are not permitted, на вышестоящих серверах Amazon Bedrock и Google Cloud's Agent Platform |
Пересылайте поле и его заголовки вместе |
| Кэширование подсказок | Нет бета-связи. Claude Code прикрепляет маркеры cache_control к блокам system и записям messages, включая записи role: "system", добавленные в середину разговора |
Нет ошибки: разговор выставляется как некэшированный ввод на каждом ходу, видимый как высокие input_tokens с небольшой или отсутствующей активностью кэша в usage |
Пересылайте cache_control без изменений везде, где он появляется, и не преобразуйте блочную форму system или содержимое сообщения в простые строки |
| Подсчет токенов | Нет бета-связи; использует конечную точку count_tokens |
Нет ошибки: Claude Code возвращается к оценке на основе символов, поэтому /context показывает приблизительные подсчеты |
Предоставьте конечную точку для точного подсчета токенов |
Переменные ANTHROPIC_DEFAULT_*_MODEL_SUPPORTED_CAPABILITIES объявляют возможности модели только в конфигурациях поставщика: CLAUDE_CODE_USE_BEDROCK, CLAUDE_CODE_USE_VERTEX, CLAUDE_CODE_USE_FOUNDRY и CLAUDE_CODE_USE_MANTLE. Они не имеют никакого эффекта за шлюзом ANTHROPIC_BASE_URL.
Автоматический повтор и пересылка ошибок
То, что Claude Code делает после отклонения вышестоящим сервером, зависит от того, что было отклонено:
- Когда вышестоящий сервер отклоняет поле
thinking, системное сообщение в середине разговора или маркерcache_controlна таком сообщении, Claude Code повторяет запрос и отключает отклоненную возможность для остальной части разговора - Когда вышестоящий сервер отклоняет подпись мышления, включая ошибку
400, сообщение которой говорит, что блокbound to a different conversation, Claude Code удаляет более ранние блоки мышления из запроса, повторяет и исключает их из каждого последующего запроса. Новые ответы по-прежнему включают мышление - Когда шлюз или его вышестоящий сервер отклоняет запись инструмента-советника в
toolsкак неизвестный тип инструмента, Claude Code повторяет запрос один раз без этой записи и ее значенияanthropic-beta. Более поздние запросы к этому базовому URL оставляют советника без внимания до выхода Claude Code, и/advisorнедоступен разработчику в течение этого времени. Claude Code распознает это отклонение по ответу400или422, сообщение которого называет тип инструмента послеInput tag, напримерInput tag 'advisor_20260301'. До версии v2.1.280 Claude Code не повторял это отклонение - Claude Code не повторяет отклонения управления контекстом или полей схемы инструментов, поэтому эти ошибки
400достигают разработчика
Отклонение bound to a different conversation поступает из проверки сохраненного мышления API, которая не срабатывает, когда содержимое system, tools или более ранних messages отличается от запроса, который создал мышление. Шлюз, который переписывает любое из этого содержимого, может вызвать само отклонение; Libraries, proxies, and gateways охватывает то, что нужно пересылать без изменений.
Логика повтора совпадает с формулировкой ошибки вышестоящего сервера, поэтому пересылайте тела ответов об ошибках без изменений. Шлюз, который оборачивает ошибки вышестоящего сервера в свой собственный конверт, нарушает путь восстановления, даже если он сохраняет код состояния, если только сообщение конверта не содержит стабильный токен capability_rejected:. Claude apps gateway заменяет эти токены на формулировки ошибок облачных поставщиков, например capability_rejected: prompt_too_long.
Отключение предварительных возможностей
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 останавливает Claude Code от отправки предварительных возможностей и их полей тела на каждого поставщика, включая управление контекстом и бета-поля инструментов. Переменная не влияет на адаптивное рассуждение, которое выбирается по модели, а не по бета. Она никогда не подавляет возможность OAuth, которую требует аутентификация подписки.
На Claude Code v2.1.227 или более поздней версии ваша организация может сохранить поиск инструментов MCP в соответствии с этой переменной через управляемые параметры. То, что Claude Code отправляет с этим переопределением, зависит от того, как вы подключаетесь:
- При прямом соединении или через шлюз, установленный с
ANTHROPIC_BASE_URL, Claude Code продолжает отправлять бета-заголовок поиска инструментов, поля инструментовdefer_loadingи блокиtool_reference, и удаляет остальное - На облачном поставщике или при входе через Claude apps gateway, переопределение не имеет никакого эффекта
Набор возможностей, которые Claude Code отправляет, растет с каждым выпуском. Для текущих строк бета-заголовков см. справочник бета-заголовков; протестируйте свой шлюз против новых выпусков Claude Code, а не закрепляйте наблюдаемый список.
Обнаружение моделей
Когда ANTHROPIC_BASE_URL указывает на gateway, который предоставляет формат Anthropic Messages, Claude Code может запросить конечную точку /v1/models gateway при запуске и добавить возвращаемые модели в средство выбора /model. Если вы или ваш администратор установили replaceBuiltInOptions в линейке modelPicker, Claude Code скрывает обнаруженные модели из средства выбора.
Разработчики включают это, установив CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 в своей собственной среде или через управляемые параметры. Обнаружение отключено по умолчанию, чтобы gateway-ы, поддерживаемые общим ключом API, не выводили каждую модель, к которой ключ может получить доступ, каждому пользователю.
Когда выполняется обнаружение
Обнаружение применяется только к формату Anthropic Messages. Оно не выполняется, когда:
- Установлена любая переменная поставщика
CLAUDE_CODE_USE_*, даже если также установленANTHROPIC_BASE_URL ANTHROPIC_BASE_URLне установлен или указывает наapi.anthropic.com
Обнаружение все еще выполняется, когда несущественный трафик отключен, потому что запрос идет только на ваш gateway. До версии v2.1.257 обнаружение не выполнялось, пока несущественный трафик был отключен.
Запрос и ответ
Запрос — это GET /v1/models?limit=1000 с тайм-аутом 3 секунды по умолчанию, и любое перенаправление рассматривается как отказ, поэтому учетные данные не могут утечь на цель перенаправления. Gateway, который отвечает медленнее, чем тайм-аут, или тот, который перенаправляет /v1/models, даже http на https, молча не выполняет обнаружение; обслуживайте конечную точку непосредственно по настроенному базовому URL.
Чтобы дать медленному gateway больше времени, установите CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MS. Переменная требует Claude Code v2.1.269 или позже.
Claude Code отправляет запрос обнаружения с обоими заголовками учетных данных ниже и опускает заголовок, значение которого не разрешается. Отправка обоих заголовков требует Claude Code v2.1.248 или позже. Более ранние версии отправляют только Authorization, когда установлен ANTHROPIC_AUTH_TOKEN, и только x-api-key в противном случае.
Authorization:ANTHROPIC_AUTH_TOKENкак токен носителя, в противном случае значениеapiKeyHelperкак токен носителя. В этом случае Claude Code ждет, пока помощник вернет результат перед отправкой запроса.x-api-key: разрешенный Claude Code ключ API, такой какANTHROPIC_API_KEY. Когда значение помощника является единственным учетным данием, этот заголовок также его содержит, поэтому значение поступает в оба заголовка.
Claude Code также отправляет любые заголовки из ANTHROPIC_CUSTOM_HEADERS. Когда пользовательский заголовок имеет непустое значение, Claude Code отправляет его вместо встроенного заголовка с тем же именем, сопоставляя имена без учета регистра.
Когда ни одно значение заголовка учетных данных не разрешается, Claude Code пропускает обнаружение и записывает строку [gatewayDiscovery] skipped в журнал отладки сеанса claude --debug. Если вы предоставляете учетные данные только через ANTHROPIC_CUSTOM_HEADERS, Claude Code все равно пропускает обнаружение.
Claude Code читает id, опциональный display_name и опциональный description из каждой записи в массиве data ответа:
{
"data": [
{
"id": "claude-sonnet-4-6",
"display_name": "Claude Sonnet 4.6",
"description": "Default model for everyday coding tasks"
},
{ "id": "claude-opus-4-8" }
]
}
Claude Code сохраняет запись, когда ее id содержит claude или anthropic где-либо в строке, сопоставляя без учета регистра, и игнорирует остальное. ID с префиксом поставщика, такие как vertex_ai/claude-sonnet-4-6 или bedrock/anthropic.claude-sonnet-4-5, проходят фильтр; ID, который не содержит ни одну подстроку, не проходит. До версии v2.1.223 Claude Code сохранял запись только когда ее id начинался с claude или anthropic, что скрывало ID с префиксом поставщика.
Записи средства выбора и кеширование
Средство выбора — это интерактивный список моделей, который открывается, когда разработчик запускает /model в Claude Code. Каждая обнаруженная запись использует display_name как свое имя, когда gateway отправляет такое, которое отличается от id. В противном случае запись показывает имя модели, когда Claude Code распознает id, и id, когда не распознает. Например, запись с id my-gateway-claude-sonnet-4-6 и без display_name отображается как Sonnet 4.6.
Обнаружение добавляет только модели, которые разрешает управляемый параметр availableModels.
Каждая запись также показывает description модели, свернутую в одну строку. Запись без description вместо этого читается как "From gateway". До версии v2.1.257 каждая обнаруженная запись читалась как "From gateway".
Обнаруженный ID не получает свою собственную строку, когда он совпадает со строкой, уже находящейся в средстве выбора:
- Одинаковый ID: обнаруженный ID точно совпадает с ID существующей строки, или оба ID являются написаниями одной и той же версии Fable.
- Та же модель, что и встроенный псевдоним: когда обнаруженный явный ID называет модель, на которую встроенный псевдоним в настоящее время разрешается, средство выбора показывает только строку псевдонима. Например, пока
sonnetразрешается вclaude-sonnet-5, обнаруженныйclaude-sonnet-5объединяется в строкуsonnet, и обнаруженныйclaude-sonnet-4-6все еще получает свою собственную строку. До версии v2.1.197 Claude Code не объединял эти ID во встроенные строки, поэтомуclaude-sonnet-5также получал свою собственную строку "From gateway".
Результаты кешируются в ~/.claude/cache/gateway-models.json или %USERPROFILE%\.claude\cache\gateway-models.json на Windows и обновляются при каждом запуске. Если вы установили CLAUDE_CONFIG_DIR, кеш находится в этом каталоге вместо этого. Если запрос не выполняется или gateway не реализует /v1/models, средство выбора возвращается к кешированному списку из предыдущего запуска или к встроенному списку моделей. Если ваш gateway обслуживает модели Claude под псевдонимами, которые не совпадают с фильтром обнаружения, разработчики могут добавить эти псевдонимы вручную с помощью переменных конфигурации модели.
Связанные ресурсы
Для остальной документации gateway и базовых справочников API:
- Обзор gateway: что такое gateway и как выбрать между Claude apps gateway и другим продуктом
- Другие LLM gateway: как развернуть gateway, который работает в вашей организации, и как он взаимодействует с подписками claude.ai
- Развертывание LLM gateway для вашей организации: контрольный список администратора, который использует этот контракт
- Подключение Claude Code к LLM gateway: конфигурация для каждого разработчика и таблица устранения неполадок
- Справочник бета-заголовков: текущий набор значений
anthropic-beta - Messages API: формат API, который реализует gateway формата Anthropic