Developer guide
Аутентификация с помощью API-ключа
Заголовок, содержащий API-ключ, и base URL для настройки SDK
Шлюз CLEVI выполняет аутентификацию совместимых с OpenAI и совместимых с Anthropic путей с помощью одного API-ключа.
На стороне клиента необходимо настроить два значения: заголовок аутентификации, содержащий ключ, и base URL SDK. Допустимый формат заголовка и base URL различаются в зависимости от спецификации.
После завершения настройки запросите список моделей, чтобы сразу проверить успешность аутентификации.
При ошибке аутентификации возвращается 401, а если после успешной аутентификации не выполнены условия авторизации или лимитов, возвращается 403.
Получите API-ключ на странице API-ключей в консоли. На этой же странице можно управлять отзывом ключа и областью его использования.
Заголовок аутентификации
Обе спецификации помещают API-ключ в один из заголовков запроса. Используйте заголовок X-API-Key или Authorization; допустимый формат зависит от спецификации.
| Заголовок | Совместимость с OpenAI | Совместимость с Anthropic |
|---|---|---|
| X-API-Key: <ключ> | Разрешено | Разрешено |
| Authorization: Bearer <ключ> | Разрешено | Разрешено |
| Authorization: <ключ> (без Bearer) | Отклоняется | Разрешено |
При использовании заголовка Authorization в совместимом с OpenAI пути требуется префикс Bearer. Если отправить только ключ без префикса, шлюз отклонит запрос.
Имена заголовков нечувствительны к регистру, поэтому заголовок x-api-key, отправляемый Anthropic SDK, также работает без изменений. Если указать оба заголовка, приоритет имеет значение X-API-Key.
base URL
Ранее использовавшийся SDK можно использовать без изменений, заменив только base URL на указанный ниже адрес. Два адреса различаются наличием /v1, поэтому укажите адрес, соответствующий спецификации, без изменений.
| Спецификация | base URL | Правило пути |
|---|---|---|
| Совместимость с OpenAI | https://platform.clevi.net/api/v2/aiservice/openai/v1 | Включите /v1 в base URL. |
| Совместимость с Anthropic | https://platform.clevi.net/api/v2/aiservice/anthropic | Anthropic SDK самостоятельно добавляет /v1 к пути запроса, поэтому base URL заканчивается перед /v1. |
Проверка аутентификации
После настройки ключа и базового URL запросите список моделей, чтобы проверить успешность аутентификации. В примерах ниже один и тот же запрос выполняется с помощью curl, OpenAI SDK и Anthropic SDK. Вместо sk-... укажите ключ, выданный на странице API-ключей.
При запросе через curl укажите полный путь до /v1/models для обоих форматов. В первой команде для совместимого с OpenAI пути используется заголовок X-API-Key, во второй команде для совместимого с Anthropic пути — заголовок Authorization.
curl https://platform.clevi.net/api/v2/aiservice/openai/v1/models \
-H "X-API-Key: sk-..."
curl https://platform.clevi.net/api/v2/aiservice/anthropic/v1/models \
-H "Authorization: Bearer sk-..." \
-H "anthropic-version: 2023-06-01"В OpenAI SDK укажите в base_url адрес, включающий /v1.
from openai import OpenAI
client = OpenAI(
api_key="sk-...",
base_url="https://platform.clevi.net/api/v2/aiservice/openai/v1",
)
for model in client.models.list():
print(model.id)В Anthropic SDK укажите в base_url адрес, заканчивающийся перед /v1.
Для аутентификации используется заголовок x-api-key, отправляемый SDK, без изменений.
from anthropic import Anthropic
client = Anthropic(
api_key="sk-...",
base_url="https://platform.clevi.net/api/v2/aiservice/anthropic",
)
for model in client.models.list(limit=20).data:
print(model.id)Если любой из примеров возвращает ответ 200, аутентификация прошла успешно, а в поле data ответа содержится список моделей, доступных для вызова с этим ключом. Если возвращён ответ 401, проверьте причину в порядке, указанном в следующем разделе.
Ошибка аутентификации
Если отправить отсутствующий, просроченный или отозванный ключ, возвращается ответ 401. При вызове совместимого с OpenAI пути без ключа возвращается тело, показанное ниже, а для совместимого с Anthropic пути значением error.type является authentication_error.
{
"error": {
"message": "API key is required.",
"type": "invalid_request_error"
}
}При получении ответа 401 выполните следующие проверки по порядку.
- Проверьте состояние ключа на странице API-ключей. Если ключ просрочен или отозван, выпустите новый.
- Проверьте, что имя заголовка указано как X-API-Key или Authorization.
- Если в совместимом с OpenAI пути используется заголовок Authorization, проверьте наличие префикса Bearer.
После внесения изменений повторно выполните запрос списка моделей из раздела «Проверка аутентификации» и убедитесь, что возвращается ответ 200.
Общие заголовки
Все следующие заголовки являются необязательными. Для упрощения отслеживания проблем рекомендуется указывать X-Request-Id.
| Заголовок | Назначение | Если не указать |
|---|---|---|
| X-Request-Id | Идентификатор для отслеживания запроса. В совместимом с Anthropic маршруте это же значение возвращается в заголовке request-id ответа. | Выдаётся сервером. |
| X-Region-Code | Указывает регион вызова. | Это global. |
| X-Product-Sku (также можно указать через параметр запроса product_sku) | Напрямую указывает Product SKU, используемый для тарификации. Заголовок имеет приоритет над параметром запроса и в основном используется в голосовых маршрутах. | В голосовых маршрутах пропускать нельзя. audio/speech и audio/transcriptions выбирают Product на основе model в теле запроса. |
| anthropic-version / anthropic-beta | Передаётся без изменений в совместимом с Anthropic маршруте. | Версия — 2023-06-01. |
Если ошибки 5xx повторяются, сообщите об этом через разделы справки и обращений, указав X-Request-Id. Если значение было задано напрямую, его можно сразу сопоставить с записями клиента.