← Cloudflare AI Gateway / ai-gateway / configuration
Custom Providers
Обзор
Custom Providers позволяют интегрировать провайдеров ИИ, которые изначально не поддерживаются AI Gateway. Эта функция даёт возможность использовать наблюдаемость, кэширование, ограничение скорости запросов и другие возможности AI Gateway с любым провайдером ИИ, у которого есть эндпойнт HTTPS API.
Сценарии использования
- Внутренние модели ИИ: подключайтесь к AI-моделям вашей организации, размещённым на собственной инфраструктуре
- Региональные провайдеры: Интегрируйтесь с AI-провайдерами, доступными в вашем регионе
- Специализированные модели: Используйте специализированные AI-сервисы, недоступные через стандартных провайдеров
- Пользовательские эндпойнты: Направляйте запросы в собственную AI-инфраструктуру
Перед началом работы
Предварительные требования
- Активный аккаунт Cloudflare с доступом к AI Gateway
- Действительный API-ключ вашего пользовательского AI-провайдера
- Базовый URL HTTPS для API вашего провайдера
Аутентификация
Эндпойнты API для создания, чтения, обновления и удаления custom providers требуют аутентификации. Вам нужно создать API-токен Cloudflare с соответствующими разрешениями.
Чтобы создать API-токен:
- Перейдите в Страница токенов API в панели управления Cloudflare ↗
- Нажмите Create Token
- Выберите Custom Token и добавьте следующие разрешения:
AI Gateway - Edit
- Нажмите Continue to summary и затем Create Token
- Скопируйте токен, он понадобится вам в
Authorization: Bearer $CLOUDFLARE_API_TOKENзаголовок
Создайте custom provider
Чтобы создать новый Custom Provider с помощью API:
-
Получите ваш Account ID и Account Tag.
-
Отправьте
POSTзапрос, чтобы создать нового пользовательского провайдера:
# Run `wrangler whoami` to get your account ID to replace $CLOUDFLARE_ACCOUNT_ID,
# and `wrangler auth token` to get an auth token to replace $CLOUDFLARE_API_TOKEN.
curl -X POST "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai-gateway/custom-providers" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "My Custom Provider",
"slug": "some-provider",
"base_url": "https://api.myprovider.com",
"description": "Custom AI provider for internal models",
"enable": true
}'Обязательные поля:
name(string): отображаемое имя вашего провайдераslug(string): уникальный идентификатор (буквенно-цифровой, с дефисами). Должен быть уникальным в пределах вашего аккаунта.base_url(string): URL-адрес конечной точки API вашего провайдера по протоколу HTTPS. Должен начинаться сhttps://.
Необязательные поля:
description(string): описание провайдераlink(string): URL-адрес документации провайдераenable(boolean): активен ли провайдер (по умолчанию:false)beta(boolean): отметить как бета-функцию (по умолчанию:false)curl_example(string): пример команды cURL для использования провайдераjs_example(string): пример кода на JavaScript для использования провайдера
Ответ:
{
"success": true,
"result": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"account_id": "abc123def456",
"account_tag": "my-account",
"name": "My Custom Provider",
"slug": "some-provider",
"base_url": "https://api.myprovider.com",
"description": "Custom AI provider for internal models",
"enable": true,
"beta": false,
"logo": "Base64 encoded SVG logo",
"link": null,
"curl_example": null,
"js_example": null,
"created_at": 1700000000,
"modified_at": 1700000000
}
}Чтобы создать новый Custom Provider в панели управления:
- Войдите в Панель управления Cloudflare ↗ и выберите свой аккаунт.
- Перейдите в Compute & AI > AI Gateway > Custom Providers ↗.
- Выберите Добавить Custom Provider.
- Введите следующую информацию:
- Имя провайдера: отображаемое имя вашего провайдера
- Слаг провайдера: Уникальный идентификатор (буквенно-цифровой, с дефисами)
- Базовый URL: HTTPS-адрес API-эндпойнта вашего провайдера (например,
https://api.myprovider.com/v1)
- Выберите Save чтобы создать собственного провайдера.
Получение списка Custom Providers
Получение списка всех custom providers с возможностью фильтрации и пагинации:
# Run `wrangler whoami` to get your account ID to replace $CLOUDFLARE_ACCOUNT_ID,
# and `wrangler auth token` to get an auth token to replace $CLOUDFLARE_API_TOKEN.
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai-gateway/custom-providers" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"Параметры запроса:
page(number): номер страницы (по умолчанию:1)per_page(number): количество элементов на странице (по умолчанию:20, максимум:100)enable(boolean): фильтр по статусу включенияbeta(boolean): фильтр по бета-статусуsearch(string): поиск по полям id, name или slugorder_by(string): поле и направление сортировки (по умолчанию:"name ASC")
Примеры:
Список только включённых провайдеров:
# Run `wrangler whoami` to get your account ID to replace $CLOUDFLARE_ACCOUNT_ID,
# and `wrangler auth token` to get an auth token to replace $CLOUDFLARE_API_TOKEN.
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai-gateway/custom-providers?enable=true" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"Поиск конкретных провайдеров:
# Run `wrangler whoami` to get your account ID to replace $CLOUDFLARE_ACCOUNT_ID,
# and `wrangler auth token` to get an auth token to replace $CLOUDFLARE_API_TOKEN.
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai-gateway/custom-providers?search=custom" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"Ответ:
{
"success": true,
"result": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "My Custom Provider",
"slug": "some-provider",
"base_url": "https://api.myprovider.com",
"enable": true,
"created_at": 1700000000,
"modified_at": 1700000000
}
],
"result_info": {
"page": 1,
"per_page": 20,
"total_count": 1,
"total_pages": 1
}
}Чтобы просмотреть все свои Custom Providers:
- Войдите в Панель управления Cloudflare ↗ и выберите свой аккаунт.
- Перейдите в Compute & AI > AI Gateway > Custom Providers ↗.
- Вы увидите список всех своих пользовательских провайдеров с их названиями, slug, базовыми URL и статусом.
Получение конкретного пользовательского провайдера
Получение сведений о конкретном custom provider по его ID:
# Run `wrangler whoami` to get your account ID to replace $CLOUDFLARE_ACCOUNT_ID,
# and `wrangler auth token` to get an auth token to replace $CLOUDFLARE_API_TOKEN.
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai-gateway/custom-providers/{provider_id}" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"Ответ:
{
"success": true,
"result": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"account_id": "abc123def456",
"account_tag": "my-account",
"name": "My Custom Provider",
"slug": "some-provider",
"base_url": "https://api.myprovider.com",
"description": "Custom AI provider for internal models",
"enable": true,
"beta": false,
"logo": "Base64 encoded SVG logo",
"link": "https://docs.myprovider.com",
"curl_example": "curl -X POST https://api.myprovider.com/v1/chat ...",
"js_example": "fetch('https://api.myprovider.com/v1/chat', {...})",
"created_at": 1700000000,
"modified_at": 1700000000
}
}Обновление пользовательского провайдера
Обновление существующего пользовательского провайдера. Все поля необязательны, указывайте только те, которые нужно изменить:
# Run `wrangler whoami` to get your account ID to replace $CLOUDFLARE_ACCOUNT_ID,
# and `wrangler auth token` to get an auth token to replace $CLOUDFLARE_API_TOKEN.
curl -X PATCH "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai-gateway/custom-providers/{provider_id}" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated Provider Name",
"enable": true,
"description": "Updated description"
}'Поля, доступные для обновления:
name(string): отображаемое имя провайдераslug(string): идентификатор провайдераbase_url(string): URL-адрес конечной точки API (должен использовать HTTPS)description(string): описание провайдераlink(string): URL-адрес документацииenable(boolean): статус активностиbeta(boolean): флаг бета-версииcurl_example(string): пример команды cURLjs_example(string): пример кода на JavaScript
Примеры:
Включите провайдера:
# Run `wrangler whoami` to get your account ID to replace $CLOUDFLARE_ACCOUNT_ID,
# and `wrangler auth token` to get an auth token to replace $CLOUDFLARE_API_TOKEN.
curl -X PATCH "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai-gateway/custom-providers/{provider_id}" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"enable": true}'Обновление URL провайдера:
# Run `wrangler whoami` to get your account ID to replace $CLOUDFLARE_ACCOUNT_ID,
# and `wrangler auth token` to get an auth token to replace $CLOUDFLARE_API_TOKEN.
curl -X PATCH "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai-gateway/custom-providers/{provider_id}" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"base_url": "https://api.newprovider.com"}'Чтобы обновить существующий Custom Provider:
- Войдите в Панель управления Cloudflare ↗ и выберите свой аккаунт.
- Перейдите в Compute & AI > AI Gateway > Custom Providers ↗.
- Найдите custom provider, который хотите обновить, и выберите Изменить.
- Обновите поля, которые нужно изменить (name, slug, base URL и т. д.).
- Выберите Save, чтобы применить изменения.
Удаление пользовательского провайдера
Удаление пользовательского провайдера:
# Run `wrangler whoami` to get your account ID to replace $CLOUDFLARE_ACCOUNT_ID,
# and `wrangler auth token` to get an auth token to replace $CLOUDFLARE_API_TOKEN.
curl -X DELETE "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai-gateway/custom-providers/{provider_id}" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"Ответ:
{
"success": true,
"result": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "My Custom Provider",
"slug": "some-provider"
}
}Чтобы удалить Custom Provider:
- Войдите в Панель управления Cloudflare ↗ и выберите свой аккаунт.
- Перейдите в Compute & AI > AI Gateway > Custom Providers ↗.
- Найдите custom provider, который хотите удалить, и выберите Удалить.
- Подтвердите удаление, когда появится запрос.
Использование пользовательских провайдеров с AI Gateway
После того как вы создадите custom provider, вы можете направлять запросы через AI Gateway одним из двух способов: Unified API или специфичный для провайдера эндпойнт. При обращении к вашему custom provider любым из этих способов добавляйте к slug префикс custom-.
Как работает маршрутизация URL
Когда AI Gateway получает запрос для пользовательского провайдера, он формирует URL вышестоящего сервера, объединяя настроенный провайдером base_url путем, который следует после custom-{slug}/ в URL шлюза.
base_url поле должно содержать только корневой домен (или домен с фиксированным префиксом) API провайдера. Любые специфичные для API сегменты пути (например, /v1/chat/completions) указываются в URL запроса, а не в base_url.
Формула:
Gateway URL: https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-{slug}/{provider-path}
Upstream URL: {base_url}/{provider-path}Всё после custom-{slug}/ в URL вашего запроса добавляется непосредственно к base_url чтобы сформировать итоговый URL вышестоящего провайдера. Это означает, что {provider-path} может включать несколько сегментов пути, параметры запроса или любую структуру пути, которую требует ваш провайдер.
Выбор между Unified API и специфичным для поставщика эндпойнтом
Unified API (/compat) |
Специфичный для провайдера эндпойнт | |
|---|---|---|
| Подходит для | Провайдеры с API, совместимыми с OpenAI | Провайдеры с любой структурой API |
| Формат запроса | Должен следовать соглашению OpenAI /chat/completions схеме |
Использует нативный формат запросов провайдера |
| Контроль маршрута | Зафиксировано на /compat/chat/completions |
Полный контроль над upstream-путём |
| Как указать провайдера | model поле: custom-{slug}/{model-name} |
Путь URL: /custom-{slug}/{path} |
Используйте Unified API если ваш пользовательский провайдер принимает совместимый с OpenAI /chat/completions формат запроса. Это самый простой вариант, который хорошо работает с OpenAI SDK.
Используйте специфичный для провайдера эндпойнт если ваш пользовательский провайдер использует нестандартный путь API или формат запроса. Это дает вам полный контроль как над путем URL, так и над телом запроса, отправляемым вышестоящему провайдеру.
Через Unified API
Unified API отправляет запросы к эндпойнту chat completions провайдера в формате, совместимом с OpenAI. Укажите модель в формате custom-{slug}/{model-name}.
# Run `wrangler auth token` to get an auth token to replace $CF_AIG_TOKEN for use with the API.
curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/chat/completions \
-H "Authorization: Bearer $PROVIDER_API_KEY" \
-H "cf-aig-authorization: Bearer $CF_AIG_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "custom-some-provider/model-name",
"messages": [{"role": "user", "content": "Hello!"}]
}'Через эндпойнт конкретного провайдера
Специфичный для провайдера эндпойнт даёт полный контроль над вышестоящим путём. Всё, что идёт после custom-{slug}/ в URL добавляется к base_url.
# Run `wrangler auth token` to get an auth token to replace $CF_AIG_TOKEN for use with the API.
curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-some-provider/v1/chat/completions \
-H "Authorization: Bearer $PROVIDER_API_KEY" \
-H "cf-aig-authorization: Bearer $CF_AIG_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "model-name",
"messages": [{"role": "user", "content": "Hello!"}]
}'Если base_url это https://api.myprovider.com, этот запрос проксируется на: https://api.myprovider.com/v1/chat/completions
Примеры
В следующих примерах показано, как настроить base_url и формировать URL-адреса запросов для разных типов провайдеров.
Пример 1: OpenAI-совместимый провайдер (стандартный /v1/ путь)
Многие провайдеры следуют соглашению OpenAI и размещают свой API по адресу {domain}/v1/chat/completions.
Конфигурация:
slug:my-openai-compatbase_url:https://api.example-provider.com
Специфичный для провайдера эндпойнт:
curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-my-openai-compat/v1/chat/completions \
-H "Authorization: Bearer $PROVIDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "example-model",
"messages": [{"role": "user", "content": "Hello!"}]
}'Сопоставление URL:
| Компонент | Значение |
|---|---|
| URL шлюза | https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-my-openai-compat/v1/chat/completions |
base_url |
https://api.example-provider.com |
| Путь провайдера | /v1/chat/completions |
| Upstream URL | https://api.example-provider.com/v1/chat/completions |
Поскольку этот провайдер совместим с OpenAI, вы также можете использовать Unified API:
curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/chat/completions \
-H "Authorization: Bearer $PROVIDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "custom-my-openai-compat/example-model",
"messages": [{"role": "user", "content": "Hello!"}]
}'Пример 2: провайдер с нестандартным путём API
Некоторые провайдеры используют пути API, которые не соответствуют /v1/ соглашение. Например, если эндпойнт чата провайдера находится по адресу https://api.custom-ai.com/api/coding/paas/v4/chat/completions.
Конфигурация:
slug:custom-aibase_url:https://api.custom-ai.com
Специфичный для провайдера эндпойнт:
curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-custom-ai/api/coding/paas/v4/chat/completions \
-H "Authorization: Bearer $PROVIDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "custom-ai-model",
"messages": [{"role": "user", "content": "Hello!"}]
}'Сопоставление URL:
| Компонент | Значение |
|---|---|
| URL шлюза | https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-custom-ai/api/coding/paas/v4/chat/completions |
base_url |
https://api.custom-ai.com |
| Путь провайдера | /api/coding/paas/v4/chat/completions |
| Upstream URL | https://api.custom-ai.com/api/coding/paas/v4/chat/completions |
Пример 3: самостоятельно размещённая модель с префиксом пути
Если ваша модель размещена за обратным прокси или на платформе, добавляющей к пути префикс, указывайте только фиксированную часть этого префикса в base_url если это значение общее для всех ваших конечных точек. В противном случае оставьте base_url просто как домен.
Конфигурация (только для домена base_url):
slug:internal-llmbase_url:https://ml.internal.example.com
Специфичный для провайдера эндпойнт:
curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-internal-llm/serving/models/my-model:predict \
-H "Authorization: Bearer $INTERNAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"instances": [{"prompt": "Summarize the following text:"}]
}'Сопоставление URL:
| Компонент | Значение |
|---|---|
| URL шлюза | https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-internal-llm/serving/models/my-model:predict |
base_url |
https://ml.internal.example.com |
| Путь провайдера | /serving/models/my-model:predict |
| Upstream URL | https://ml.internal.example.com/serving/models/my-model:predict |
Пример 4: провайдер, использующий OpenAI SDK с пользовательским base URL
При использовании OpenAI SDK для подключения к пользовательскому провайдеру через AI Gateway укажите в SDK base_url к специфичному для провайдера пути конечной точки шлюза (включая префикс версии API, который ожидает ваш провайдер).
Конфигурация:
slug:alt-providerbase_url:https://api.alt-provider.com
Python (OpenAI SDK):
from openai import OpenAI
client = OpenAI(
api_key="your-provider-api-key",
base_url="https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-alt-provider/v1",
default_headers={
"cf-aig-authorization": "Bearer {cf_aig_token}",
},
)
# The SDK appends /chat/completions to the base_url automatically.
# Final upstream URL: https://api.alt-provider.com/v1/chat/completions
response = client.chat.completions.create(
model="alt-model-v2",
messages=[{"role": "user", "content": "Hello!"}],
)Сопоставление URL:
| Компонент | Значение |
|---|---|
SDK base_url |
https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-alt-provider/v1 |
| SDK добавляет | /chat/completions |
| Полный URL шлюза | https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-alt-provider/v1/chat/completions |
Провайдер base_url |
https://api.alt-provider.com |
| Путь провайдера | /v1/chat/completions |
| Upstream URL | https://api.alt-provider.com/v1/chat/completions |
Распространённые ошибки
409 Conflict - Duplicate slug
{
"success": false,
"errors": [
{
"code": 1003,
"message": "A custom provider with this slug already exists",
"path": ["body", "slug"]
}
]
}Слаг каждого custom provider должен быть уникальным в пределах вашего аккаунта. Выберите другой слаг или обновите существующего провайдера.
404 Not Found
{
"success": false,
"errors": [
{
"code": 1004,
"message": "Custom Provider not found"
}
]
}Указанный ID провайдера не существует, либо у вас нет к нему доступа. Проверьте ID провайдера и свои учётные данные для аутентификации.
400 Bad Request - Invalid base_url
{
"success": false,
"errors": [
{
"code": 1002,
"message": "base_url must be a valid HTTPS URL starting with https://",
"path": ["body", "base_url"]
}
]
} base_url поле должно содержать корректный URL с HTTPS. URL с HTTP не поддерживаются из соображений безопасности.
404 при обращении к custom provider
Если от upstream-провайдера приходит ошибка 404, наиболее частой причиной обычно является неверное сопоставление путей. Убедитесь, что:
- Ваш
base_urlпринимает значение поставщика: корневой домен (например,https://api.provider.com) вместо включения сегментов пути API. - URL запроса включает полный путь API после
custom-{slug}/. Например, если вышестоящий эндпойнтhttps://api.provider.com/api/v2/chat, URL вашего шлюза должен заканчиваться на/custom-{slug}/api/v2/chat. - Нет ни дублирующихся, ни отсутствующих сегментов пути. Распространённая ошибка: включение
/v1в обоихbase_urlи пути запроса, в результате чего вышестоящий сервер получает/v1/v1/chat/completions.
Рекомендации
- Используйте описательные slugs: выбирайте slug, которые чётко идентифицируют провайдера (например,
internal-gpt,regional-ai) - Документируйте свои интеграции: Используйте
curl_exampleиjs_exampleполя, чтобы привести примеры использования - Включайте постепенно: Протестируйте с помощью
enable: falseперед активацией провайдера - Отслеживайте использование: Используйте аналитику AI Gateway для отслеживания запросов к вашим custom providers
- Защитите свои эндпойнты: убедитесь, что base URL вашего custom provider реализует надлежащую аутентификацию и авторизацию
- Использование BYOK: Безопасно храните API-ключи провайдера с помощью BYOK вместо того чтобы включать их в каждый запрос
Ограничения
- Пользовательские провайдеры привязаны к конкретному аккаунту и не используются совместно между аккаунтами Cloudflare
-
base_urlдолжен использовать HTTPS (HTTP не поддерживается) - Слаги провайдера должны быть уникальными в рамках каждого аккаунта
- Настройки кэширования и ограничения частоты запросов применяются глобально к провайдеру, а не к отдельной модели