INTEGRITY Документация

Custom Providers

Обзор

Custom Providers позволяют интегрировать провайдеров ИИ, которые изначально не поддерживаются AI Gateway. Эта функция даёт возможность использовать наблюдаемость, кэширование, ограничение скорости запросов и другие возможности AI Gateway с любым провайдером ИИ, у которого есть эндпойнт HTTPS API.

Сценарии использования

Перед началом работы

Предварительные требования

Аутентификация

Эндпойнты API для создания, чтения, обновления и удаления custom providers требуют аутентификации. Вам нужно создать API-токен Cloudflare с соответствующими разрешениями.

Чтобы создать API-токен:

  1. Перейдите в Страница токенов API в панели управления Cloudflare
  2. Нажмите Create Token
  3. Выберите Custom Token и добавьте следующие разрешения:
    • AI Gateway - Edit
  4. Нажмите Continue to summary и затем Create Token
  5. Скопируйте токен, он понадобится вам в Authorization: Bearer $CLOUDFLARE_API_TOKEN заголовок

Создайте custom provider

Чтобы создать новый Custom Provider с помощью API:

  1. Получите ваш Account ID и Account Tag.

  2. Отправьте POST запрос, чтобы создать нового пользовательского провайдера:

Создайте Custom Provider
# 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 в панели управления:

  1. Войдите в Панель управления Cloudflare и выберите свой аккаунт.
  2. Перейдите в Compute & AI > AI Gateway > Custom Providers.
  3. Выберите Добавить Custom Provider.
  4. Введите следующую информацию:
    • Имя провайдера: отображаемое имя вашего провайдера
    • Слаг провайдера: Уникальный идентификатор (буквенно-цифровой, с дефисами)
    • Базовый URL: HTTPS-адрес API-эндпойнта вашего провайдера (например, https://api.myprovider.com/v1)
  5. Выберите 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 или slug
  • order_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:

  1. Войдите в Панель управления Cloudflare и выберите свой аккаунт.
  2. Перейдите в Compute & AI > AI Gateway > Custom Providers.
  3. Вы увидите список всех своих пользовательских провайдеров с их названиями, slug, базовыми URL и статусом.

Получение конкретного пользовательского провайдера

Получение сведений о конкретном custom provider по его ID:

Получение провайдера по 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): пример команды cURL
  • js_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:

  1. Войдите в Панель управления Cloudflare и выберите свой аккаунт.
  2. Перейдите в Compute & AI > AI Gateway > Custom Providers.
  3. Найдите custom provider, который хотите обновить, и выберите Изменить.
  4. Обновите поля, которые нужно изменить (name, slug, base URL и т. д.).
  5. Выберите 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:

  1. Войдите в Панель управления Cloudflare и выберите свой аккаунт.
  2. Перейдите в Compute & AI > AI Gateway > Custom Providers.
  3. Найдите custom provider, который хотите удалить, и выберите Удалить.
  4. Подтвердите удаление, когда появится запрос.

Использование пользовательских провайдеров с 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}.

Запрос через custom provider с использованием Unified API
# 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.

Конфигурация:

Специфичный для провайдера эндпойнт:

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.

Конфигурация:

Специфичный для провайдера эндпойнт:

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):

Специфичный для провайдера эндпойнт:

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, который ожидает ваш провайдер).

Конфигурация:

Python (OpenAI SDK):

Использование 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, наиболее частой причиной обычно является неверное сопоставление путей. Убедитесь, что:

  1. Ваш base_url принимает значение поставщика: корневой домен (например, https://api.provider.com) вместо включения сегментов пути API.
  2. URL запроса включает полный путь API после custom-{slug}/. Например, если вышестоящий эндпойнт https://api.provider.com/api/v2/chat, URL вашего шлюза должен заканчиваться на /custom-{slug}/api/v2/chat.
  3. Нет ни дублирующихся, ни отсутствующих сегментов пути. Распространённая ошибка: включение /v1 в обоих base_url и пути запроса, в результате чего вышестоящий сервер получает /v1/v1/chat/completions.

Рекомендации

  1. Используйте описательные slugs: выбирайте slug, которые чётко идентифицируют провайдера (например, internal-gpt, regional-ai)
  2. Документируйте свои интеграции: Используйте curl_example и js_example поля, чтобы привести примеры использования
  3. Включайте постепенно: Протестируйте с помощью enable: false перед активацией провайдера
  4. Отслеживайте использование: Используйте аналитику AI Gateway для отслеживания запросов к вашим custom providers
  5. Защитите свои эндпойнты: убедитесь, что base URL вашего custom provider реализует надлежащую аутентификацию и авторизацию
  6. Использование BYOK: Безопасно храните API-ключи провайдера с помощью BYOK вместо того чтобы включать их в каждый запрос

Ограничения