Поставщик инференса
Отправляйте вызовы модели с вашего самостоятельно размещённого сервера Claude Managed Agents в Amazon Bedrock, Claude Models on Google Cloud (Google managed), Microsoft Foundry или в шлюз моделей, которым управляете вы, вместо Claude API.
По умолчанию ваш сервер отправляет вызовы модели в Claude API. На этой странице показано, как отправлять их облачному поставщику или в шлюз моделей, которым управляете вы. Чтобы сменить поставщика:
- Поместите пример из раздела вашего поставщика на этой странице в файл настроек сервера.
- Передайте серверу учётные данные поставщика, как показано в том же разделе.
- Перезапустите сервер, как показано в разделе Где находятся настройки. В Docker Compose, если на шаге 2 изменились
.envилиdocker-compose.yml, вместо этого выполнитеdocker compose up -d, потому что при перезапуске они не перечитываются. - Проверьте поставщика.
Параметр inference.provider принимает следующие значения:
inference.provider | Куда направляются вызовы модели | Чем сервер проходит аутентификацию |
|---|---|---|
anthropic (по умолчанию) | Claude API | ANTHROPIC_API_KEY |
bedrock | Amazon Bedrock | Ваши учётные данные AWS |
vertex | Claude Models on Google Cloud (Google managed) | Google Application Default Credentials |
foundry | Microsoft Foundry | Ключ API Foundry или Microsoft Entra ID |
gateway | Шлюз моделей, которым управляете вы | Ключ или токен, который принимает ваш шлюз |
При любом значении, кроме anthropic, серверу не нужен ключ API Claude. Он игнорирует ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN и ANTHROPIC_BASE_URL. Единственное исключение — шлюз моделей, ключ которого сервер по вашему указанию считывает из одной из этих переменных.
Агенты называют модели по их идентификаторам в Claude API, например claude-opus-5-5. Сервер преобразует идентификатор, поэтому определение агента работает без изменений с любым поставщиком, который обслуживает эту модель.
Некоторые инструменты и настройки агентов зависят от поставщика. См. раздел Различия, зависящие от вашего поставщика инференса.
Передача серверу облачных учётных данных
То, как учётные данные облачного поставщика попадают на сервер, зависит от вашей установки:
- Docker Compose: передайте каждую переменную и файл серверу.
- Kubernetes: чарт сервера не передаёт переменные AWS, Google Cloud или Azure, поэтому используйте “workload identity” (удостоверение рабочей нагрузки) вашего облака. Создайте сервисный аккаунт с аннотацией удостоверения рабочей нагрузки вашего облака и установите в
server.serviceAccountNameего имя. Эта аннотация указана вvalues.yamlчарта. В Azure Kubernetes Service также установитеserver.azureWorkloadIdentity: true.
Amazon Bedrock
inference:
provider: bedrock
region: us-east-1
#model_id_prefix: global.anthropic.
#model_id_overrides:
# claude-opus-5-5: us.anthropic.claude-opus-5-5Сервер подписывает свои вызовы любыми учётными данными, которые находит на хосте цепочка учётных данных по умолчанию AWS SDK. Это может быть роль задачи или идентификатор пода. На рабочей станции это может быть AWS_PROFILE или AWS_ACCESS_KEY_ID.
Включите в учётной записи модели, которые вы используете. Удостоверению AWS, которым сервер подписывает вызовы, нужны следующие разрешения:
bedrock:InvokeModelиbedrock:InvokeModelWithResponseStreamдля моделей и профилей инференса, которые вы используете.bedrock:ListFoundationModelsиbedrock:ListInferenceProfilesдля ресурса*. Сервер считывает списки моделей Amazon Bedrock, чтобы агенты могли использовать модель, более новую, чем выпуск вашего сервера. Чтобы пропустить это, установитеinference.list_models: false.
По умолчанию сервер добавляет us.anthropic. перед каждым идентификатором модели, что указывает на “cross-region inference profile” (межрегиональный профиль инференса). Чтобы использовать другое семейство профилей, раскомментируйте model_id_prefix.
Claude Models on Google Cloud (Google managed)
inference:
provider: vertex
region: us-east5
project_id: my-project
#model_id_overrides:
# claude-haiku-4-5: claude-haiku-4-5@20251001Параметр region обязателен. Это расположение Google Cloud’s Agent Platform, в котором доступны используемые вами модели, или global. project_id — это проект, в котором выполняются вызовы и на который выставляется за них счёт.
Сервер использует Google Application Default Credentials: файл, указанный в GOOGLE_APPLICATION_CREDENTIALS, или сервисный аккаунт, который прикрепляют Compute Engine, Cloud Run или GKE. Этому удостоверению нужна роль roles/aiplatform.user в проекте. В проекте должны быть включены API aiplatform.googleapis.com и используемые вами модели Claude.
Microsoft Foundry
inference:
provider: foundry
foundry:
resource: my-resource
#model_id_overrides:
# claude-opus-5-5: team-a-opusresource — это имя вашего ресурса Foundry, первая часть его имени хоста: <resource>.services.ai.azure.com.
Учётные данные берутся из окружения сервера:
- Ключ API Foundry: установите
ANTHROPIC_FOUNDRY_API_KEY. В стеке Compose передайте переменную серверу. В Kubernetes поместите её в Secretcma-server-upstream. Если в файле значений сервера указаноearlierNames: true, у Secret другое имя. Найдите его в разделе Kubernetes: имена ваших объектов. - Microsoft Entra ID: оставьте переменную
ANTHROPIC_FOUNDRY_API_KEYнеустановленной. Тогда сервер получает токен для субъекта-службы, удостоверения рабочей нагрузки в Azure Kubernetes Service или управляемого удостоверения. Удостоверению нужна роль Azure в ресурсе Foundry, разрешающая вызовы его развёртываний моделей. Для субъекта-службы установитеAZURE_TENANT_ID,AZURE_CLIENT_IDиAZURE_CLIENT_SECRET.
Запрос к Foundry указывает развёртывание, и сервер отправляет идентификатор модели в качестве имени развёртывания. Если у развёртывания другое имя, сопоставьте его с помощью model_id_overrides.
Сопоставление отличающегося идентификатора модели
В вашей облачной учётной записи модель может иметь идентификатор, отличный от того, который отправляет сервер. В этом случае раскомментируйте строки model_id_overrides в примере для этого поставщика и сопоставьте идентификатор Claude API с идентификатором вашей учётной записи. Оба идентификатора должны указывать одну и ту же модель, потому что сервер формирует каждый запрос для модели, которую указывает агент.
Шлюз моделей
Сначала проверьте, какие запросы принимает ваш “model gateway” (шлюз моделей):
- Те же запросы, что и Claude API, с одними долгоживущими учётными данными: оставьте поставщика по умолчанию. Установите в
ANTHROPIC_BASE_URLадрес шлюза, а вANTHROPIC_API_KEYилиANTHROPIC_AUTH_TOKEN— учётные данные, которые ожидает шлюз. - Те же запросы, что и Claude API, но с краткосрочными токенами, учётными данными в другом заголовке или собственными идентификаторами моделей: установите
inference.provider: gatewayсformat: anthropic-messages. - Формат InvokeModel Amazon Bedrock: установите
inference.provider: gatewayсformat: bedrock-invoke. - Формат
rawPredictClaude Models on Google Cloud (Google managed): установитеinference.provider: gatewayсformat: vertex-raw-predict.
Этот пример устанавливает inference.provider: gateway с format: bedrock-invoke для шлюза, который принимает один долгоживущий ключ. Поместите ключ в переменную окружения и укажите имя переменной, но никогда не само значение:
inference:
provider: gateway
gateway:
url: "https://llm-gateway.example.com/v1/model/{model}/invoke"
format: bedrock-invoke
# Quote every model_map value.
model_map:
claude-opus-5-5: "us.anthropic.claude-opus-5-5"
claude-sonnet-5: "us.anthropic.claude-sonnet-5"
credentials:
supplier: env
env: { var: LLM_GATEWAY_KEY }
send_as: { header: x-api-key }url— маршрут модели в шлюзе.{model}отмечает место, куда подставляется идентификатор модели. URL должен начинаться сhttps://и оканчиваться на/invoke.model_mapсопоставляет каждый идентификатор модели, который может указать агент, с идентификатором, который ожидает шлюз. Сервер отклоняет модель, для которой нет записи.send_asзадаёт заголовок, в котором передаётся ключ. Без него сервер отправляетAuthorization: Bearer <key>.- В стеке Compose передайте переменную серверу.
- В Kubernetes чарт сервера не может передать вашу собственную переменную. Но он передаёт
ANTHROPIC_AUTH_TOKEN, которую считывает из Secretcma-server-upstream, поэтому используйте это имя:- Установите
env: { var: ANTHROPIC_AUTH_TOKEN }. - Поместите ключ шлюза в Secret
cma-server-upstreamпод именемANTHROPIC_AUTH_TOKEN. Если в файле значений сервера указаноearlierNames: true, у Secret другое имя. Найдите его в разделе Kubernetes: имена ваших объектов.
- Установите
Для format: anthropic-messages замените блок gateway следующим:
inference:
gateway:
url: "https://llm-gateway.example.com/v1/messages"
format: anthropic-messages
# Quote every model_map value.
model_map:
claude-opus-5-5: "corp-claude-opus"
claude-sonnet-5: "corp-claude-sonnet"Здесь url — полный URL маршрута Messages шлюза, без {model}.
Для format: vertex-raw-predict замените блок gateway следующим:
inference:
gateway:
url: "https://llm-gateway.example.com/v1/projects/my-project/locations/global/publishers/anthropic/models/{model}:rawPredict"
format: vertex-raw-predict
# Quote every model_map value.
model_map:
claude-opus-5-5: "claude-opus-5-5"
claude-sonnet-5: "claude-sonnet-5"Здесь url — маршрут rawPredict шлюза, и он должен оканчиваться на /{model}:rawPredict. Значение в model_map не может содержать двоеточие. Блок credentials остаётся без изменений. Сервер отправляет собственные учётные данные вашего шлюза и не получает учётных данных Google.
В справочнике по конфигурации перечислены другие настройки шлюза, такие как streaming и параметр inference.headers.
Краткосрочные токены
Если ваш шлюз принимает краткосрочные токены, замените блок credentials следующим:
inference:
credentials:
supplier: oauth_exchange
assertion:
url: "https://app.example.com/assertion"
auth: { type: mtls, cert_file: /etc/callback/client.pem, key_file: /etc/callback/client.key }
exchange:
token_url: "https://login.example.com/oauth2/token"
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer"Тогда сервер получает каждый токен в два этапа. Сначала он обращается к HTTP-“callback” (обратному вызову), который создаёте вы. Обратный вызов возвращает “assertion” (утверждение) — подписанное заявление, обычно являющееся JSON Web Token (JWT). Затем сервер обменивает утверждение на вашем эндпоинте токенов OAuth на токен доступа, который он отправляет шлюзу.
authопределяет, как сервер проходит аутентификацию в обратном вызове. В примере используется клиентский сертификат. Чтобы использовать bearer-токен, который сервер считывает из файла, установитеauth: { type: bearer_file, token_file: /etc/callback/token }.exchangeуказывает ваш эндпоинт токенов OAuth. Сервер отправляет на этот эндпоинт толькоgrant_typeи утверждение, без идентификатора клиента и секрета.- Если вашему эндпоинту токенов нужно больше, не указывайте
exchange. Пусть ваш обратный вызов сам получает токен доступа и возвращает его в полеassertion, которое сервер затем отправляет шлюзу. - В Kubernetes поместите файлы сертификатов в Secret, укажите его имя в
server.extensionFiles.secretNameчарта и направьтеcert_fileиkey_fileна/run/cma-server/extension-files/.
Сервер отправляет обратному вызову запрос POST со следующим телом:
{
"version": 1,
"purpose": "inference",
"session": {
"id": "sesn_011CZkZAtmR3yMPDzynEDxu7",
"agent_id": "agent_011CYm1BLqPXpQRk5khsSXrs",
"environment_id": "env_01595EKxaaTTGwwY3kyXdtbs"
},
"principal": {
"issuer": "https://login.example.com/oauth2/default",
"subject": "00u1a2b3c4d5e6f7g8h9"
},
"request_id": "req_011CSHoEeqs5C35K2UUqR7Fy"
}principal — это вызывающая сторона, создавшая сессию. Для вызывающей стороны с единым входом issuer — это issuer_url этой вызывающей стороны, а subject — её субъект. Для ключа API сервера principal — это {"issuer": "cma", "subject": "server"}. Пусть обратный вызов игнорирует поля, которые ему неизвестны.
Обратный вызов отвечает кодом состояния 200 и следующим телом:
{ "assertion": "<signed JWT>", "reuse": "session" }reuse указывает, какие сессии могут использовать токен. При значении session, используемом по умолчанию, его может использовать только сессия из запроса, что подходит для токена, указывающего одного пользователя. При значении deployment сессии используют токен совместно, поэтому возвращайте deployment только для токена, который указывает вашу организацию и ни одного человека.
Если обратный вызов или эндпоинт токенов завершается ошибкой, ход заканчивается событием session.error с типом model_request_failed_error, а сессия остаётся пригодной к использованию. Причина указана в журнале сервера, в строке, содержащей credential supplier failed.
Если в ответе эндпоинта токенов нет expires_in, а в токене нет заявки exp, сервер отправляет токен, но не сохраняет его. Тогда он запрашивает новый токен при каждом вызове модели.
Описание других настроек, таких как renew_before и ca_file, см. в таблицах справочника по конфигурации: настройки шлюза моделей и настройки краткосрочных токенов.
Токены Microsoft Entra ID
Если ваш шлюз проверяет токены Microsoft Entra ID по собственной регистрации приложения, замените блок credentials следующим:
inference:
credentials:
supplier: azure
azure: { scope: "api://11111111-2222-3333-4444-555555555555/.default" }scope — это URI идентификатора приложения или идентификатор приложения из регистрации приложения шлюза, за которым следует /.default. Указывайте только собственную регистрацию шлюза. Токен для другого ресурса позволил бы тому, кто управляет шлюзом, действовать там от имени сервера.
Токен выдаётся собственному удостоверению Azure сервера, настроенному так же, как для Microsoft Entra ID в разделе Microsoft Foundry. Если регистрация требует роли приложения, назначьте эту роль удостоверению до запуска сервера. Более позднее назначение вступает в силу только тогда, когда сервер получает новый токен.
Токен указывает это удостоверение и ни одного человека, поэтому шлюзу, которому нужно знать, какой человек выполняет вызов, требуется oauth_exchange. Прогоните ход через свой шлюз под удостоверением, которое будут использовать ваши серверы, прежде чем полагаться на этот поставщик учётных данных.
Проверка поставщика
После изменения настроек и перезапуска сервера найдите в журнале сервера следующую строку. Она сообщает, что сервер нашёл учётные данные для поставщика:
level=INFO msg="upstream credential resolved" provider=bedrockЭта строка не доказывает, что в вашей учётной записи включена модель. Отсутствующая модель проявляется как session.error на первом ходе, в котором она используется.
Шлюз, который вы указываете в ANTHROPIC_BASE_URL, может отклонять поле или заголовок резервного переключения на стороне сервера. Если по этой причине каждый ход завершается ошибкой, установите inference.model_fallback: false в файле настроек.
Эта страница была полезной?