Выбор шлюза AI API — это уже не та задача, что два года назад. В 2024 году большинство разработчиков либо обращались к OpenAI напрямую, либо поднимали локально LiteLLM. Теперь есть хостинговые варианты с ценовыми панелями, кредитными лимитами на ключ и каталогами моделей, охватывающими десятки провайдеров. Категория выросла настолько, что неверный выбор означает необходимость потом переделывать существенную часть интеграции.
В этой статье сравниваются четыре шлюза, которые часто всплывают в обсуждениях разработчиков: CometAPI, Portkey, LiteLLM и Cloudflare AI Gateway. Цель — не выбрать победителя (каждый уместен в своей ситуации), а прояснить, что именно делает каждый, чтобы вы могли сопоставить инструмент со своим кейсом.
Примечание о названиях моделей: Идентификаторы моделей, используемые в этой статье (например,
gpt-5.4,claude-opus-4-7), — это идентификаторы платформы CometAPI. Это не официальные названия от OpenAI или Anthropic, у которых собственные правила именования.
Что на самом деле делают эти инструменты
Прежде чем сравнивать функции, полезно точно понимать, что делает шлюз AI API. Минимальный функционал: он находится между вашим приложением и одним или несколькими AI‑провайдерами, пересылая запросы и возвращая ответы. Сверх этого минимального набора возможности шлюзов сильно расходятся.
Некоторые шлюзы — например, Cloudflare AI Gateway — в первую очередь являются прослойкой‑пасс‑тру, которая добавляет логирование и кэширование, не затрагивая ваш API‑ключ или цены. Другие, как CometAPI, действуют как реселлер: вы платите им, они платят базовому провайдеру, а разница в цене — часть их ценностного предложения. LiteLLM отличается ещё сильнее — это ПО, которое вы запускаете у себя, а не хостинговый сервис.
Понимание этих различий важно до того, как вы начнёте оценивать конкретные функции.
Сравнение функций
Таблица ниже основана на информации из официальной документации каждого продукта или публичной панели на май 2026 года. Функции, отмеченные тире (—), не были подтверждены в официальных источниках на момент написания.
| Функция | CometAPI | Portkey | LiteLLM | Cloudflare AI Gateway |
|---|---|---|---|---|
| Развертывание | Хостинг (SaaS) | Хостинг + самохостинг | Самохостинг (open source) | Хостинг (на периферии Cloudflare) |
| Каталог моделей | 500+ моделей у разных провайдеров | 1,600+ LLMs через единый API | Зависит от вашей конфигурации | OpenAI, Anthropic, Workers AI |
| Ценообразование | Реселлер (платите CometAPI) | Прокси + плата за платформу | Только стоимость инфраструктуры | Прокси (есть бесплатный тариф) |
| Совместимый с OpenAI API | Да (api.cometapi.com/v1) | Да (api.portkey.ai/v1) | Да (локальный или удаленный) | Да (через URL шлюза) |
| Кредитные лимиты на ключ | Да (в панели) | Да | Да (через конфиг) | — |
| Групповые ценовые коэффициенты | Да (0.8x по умолчанию, 0.1x для internal) | — | — | — |
| Журналирование запросов | Да (4 типа логов) | Да | Да | Да |
| Мониторинг успешности | Да (доступность за 30 дней) | Да | Да | Да |
| Бесплатный тариф | Да (для новых аккаунтов) | Да | Open source (стоимость инфраструктуры) | Да |
| Возможность самохостинга | Нет (enterprise: выделенный сервер) | Да | Да (основной сценарий) | Нет |
Источники: Панель CometAPI, Главная страница Portkey, LiteLLM GitHub, Документация Cloudflare AI Gateway
Подключение к каждому шлюзу
Все четыре шлюза предоставляют совместимый с OpenAI endpoint, поэтому одна и та же структура клиента работает для всех — вы меняете только base_url, учетные данные и, в случае Portkey, способ указания модели.
Python
import osfrom openai import OpenAIdef require_env(name: str) -> str: """Raise a clear error if a required environment variable is missing.""" val = os.environ.get(name) if not val: raise ValueError(f"Missing required environment variable: {name}") return val# ── CometAPI ────────────────────────────────────────────────────────────────# Hosted reseller with 500+ models. Use CometAPI model identifiers (e.g. "gpt-5.4").cometapi_client = OpenAI( base_url="https://api.cometapi.com/v1", api_key=require_env("COMETAPI_KEY"),)# ── Portkey ─────────────────────────────────────────────────────────────────# Hosted gateway with observability and 1,600+ LLMs.# Route to a provider by prefixing the model name: "@openai/gpt-4o", "@anthropic/claude-3-5-sonnet", etc.# x-portkey-api-key is required; it authenticates requests to Portkey's gateway.portkey_client = OpenAI( base_url="https://api.portkey.ai/v1", api_key=require_env("PORTKEY_API_KEY"), default_headers={ "x-portkey-api-key": require_env("PORTKEY_API_KEY"), },)# ── LiteLLM ──────────────────────────────────────────────────────────────────# Self-hosted proxy. Provider credentials (OPENAI_API_KEY etc.) are set server-side.# By default the proxy does not validate the client API key — "anything" works.# If you have enabled virtual keys on your LiteLLM instance, pass a virtual key instead.litellm_client = OpenAI( base_url=os.environ.get("LITELLM_BASE_URL", "http://localhost:4000"), api_key=os.environ.get("LITELLM_API_KEY", "anything"),)# ── Cloudflare AI Gateway ───────────────────────────────────────────────────# URL-based pass-through. Keep your real provider API key — Cloudflare does not replace it.cf_account_id = require_env("CF_ACCOUNT_ID")cf_gateway_id = require_env("CF_GATEWAY_ID")cloudflare_client = OpenAI( base_url=( f"https://gateway.ai.cloudflare.com/v1" f"/{cf_account_id}/{cf_gateway_id}/openai" ), api_key=require_env("OPENAI_API_KEY"),)def ask(client: OpenAI, model: str, question: str) -> str: """ Minimal wrapper showing the common call pattern across all four gateways. Model format varies by gateway: CometAPI: "gpt-5.4", "claude-opus-4-7", etc. (CometAPI identifiers) Portkey: "@openai/gpt-4o", "@anthropic/claude-3-5-sonnet", etc. LiteLLM: whatever model names you configured in your proxy Cloudflare: standard OpenAI model names, e.g. "gpt-4o" This function does not handle finish_reason, tool_calls, or provider errors. For production error handling, see: How to Debug Failed AI API Generations. """ response = client.chat.completions.create( model=model, messages=[{"role": "user", "content": question}], ) return response.choices[0].message.content or ""
Node.js
import OpenAI from "openai";function requireEnv(name) { const val = process.env[name]; if (!val) throw new Error(`Missing required environment variable: ${name}`); return val;}// ── CometAPI ────────────────────────────────────────────────────────────────const cometClient = new OpenAI({ baseURL: "https://api.cometapi.com/v1", apiKey: requireEnv("COMETAPI_KEY"),});// ── Portkey ─────────────────────────────────────────────────────────────────// Route to a provider by prefixing the model: "@openai/gpt-4o", "@anthropic/claude-3-5-sonnet"const portkeyClient = new OpenAI({ baseURL: "https://api.portkey.ai/v1", apiKey: requireEnv("PORTKEY_API_KEY"), defaultHeaders: { "x-portkey-api-key": requireEnv("PORTKEY_API_KEY"), },});// ── LiteLLM ──────────────────────────────────────────────────────────────────// Self-hosted. Default mode accepts any API key value.// Set LITELLM_BASE_URL if your server runs on a different host or port.const litellmClient = new OpenAI({ baseURL: process.env.LITELLM_BASE_URL ?? "http://localhost:4000", apiKey: process.env.LITELLM_API_KEY ?? "anything",});// ── Cloudflare AI Gateway ───────────────────────────────────────────────────const cfClient = new OpenAI({ baseURL: `https://gateway.ai.cloudflare.com/v1/${requireEnv("CF_ACCOUNT_ID")}/${requireEnv("CF_GATEWAY_ID")}/openai`, apiKey: requireEnv("OPENAI_API_KEY"),});/** * Minimal wrapper showing the common call pattern. * Model format varies by gateway — see Python example above for details. * Does not handle finish_reason or error recovery; add those for production use. */async function ask(client, model, question) { const response = await client.chat.completions.create({ model, messages: [{ role: "user", content: question }], }); return response.choices[0].message.content ?? "";}
Паттерн подключения одинаков для всех четырёх. Существенные различия проявляются в другом: что вы можете наблюдать, чем управлять и что происходит, когда что‑то ломается.
В чем каждый инструмент действительно силен
CometAPI
Главное предложение CometAPI — это хостинговый каталог с более чем 500 endpoint‑ами моделей, включая модели генерации изображений и видео наряду с текстовыми. Цены формируются через систему групповых коэффициентов — для группы по умолчанию применяется множитель 0.8x к базовым ставкам CometAPI. Вы можете настроить разные группы коэффициентов для внутреннего использования (0.1x) и для платящих клиентов, что упрощает построение многоуровневого продукта без управления отдельными аккаунтами.
Панель даёт четыре типа логов (стандартные API‑вызовы, генерация изображений, генерация видео, Midjourney), обзор доступности за 30 дней и кредитные лимиты на ключ. Лимиты позволяют выдавать API‑ключи клиентам или подрядчикам с жёстким потолком расходов, что решает реальную проблему при распределении доступа к общему аккаунту.
Чего нет в CometAPI: самохостинга (для enterprise можно запросить выделенный сервер, но это не стандартная опция самохостинга), лимитирования запросов на уровне шлюза или SSO.
Лучше всего подходит: независимым разработчикам и небольшим командам, которым нужно маршрутизировать множество моделей — включая изображения и видео — через один API‑ключ и одно биллинг‑отношение, а также тем, кому нужны бюджетные ограничения на уровень ключа.
Portkey
Portkey — это хостинговый шлюз, ориентированный на наблюдаемость. Он предоставляет доступ к 1,600+ LLM через единый API, а маршрутизация осуществляется префиксом провайдера в названии модели (@openai/gpt-4o, @anthropic/claude-3-5-sonnet). Это означает, что вам не нужны отдельные конфигурации клиентов для каждого провайдера — один клиент Portkey покрывает всех, а вы просто меняете строку модели.
Помимо маршрутизации, Portkey предлагает трассировку запросов, версионирование промптов и отказоустойчивую маршрутизацию, настраиваемую в панели, а не в коде. Опция самохостинга позволяет запускать Portkey на собственной инфраструктуре, если этого требуют требования по соответствию.
Репозиторий Portkey с открытым исходным кодом активно поддерживается — проверяйте текущий счётчик звёзд напрямую, а не полагайтесь на числа здесь, так как они часто меняются.
Лучше всего подходит: командам, которым нужны аудиторские следы, многопровайдерская маршрутизация из единой конфигурации клиента или контроль за экспозицией API‑ключей среди разработчиков.
LiteLLM
LiteLLM — это Python‑пакет и прокси‑сервер, а не хостинговый сервис. Вы запускаете его у себя. Это важное отличие: никакая третья сторона не обрабатывает ваши запросы и не хранит ваши API‑ключи. Учетные данные провайдеров (ваши реальные ключи OpenAI, Anthropic и т. п.) задаются на стороне сервера через переменные окружения; клиент просто указывает на локальный прокси.
По умолчанию LiteLLM не валидирует API‑ключ, который присылает клиент — подойдёт любое значение. Если вы включите управление виртуальными ключами, клиенты передают виртуальные ключи, которые LiteLLM валидирует в своей базе. В обоих случаях прокси переводит запросы в формате OpenAI в тот формат, который ожидает вышестоящий провайдер, так что ваш прикладной код не меняется при добавлении нового провайдера.
Компромисс — операционные издержки: вы отвечаете за запуск, масштабирование и обновление сервера.
Лучше всего подходит: командам с DevOps‑возможностями, организациям с ограничениями по соответствию, запрещающими сторонние API‑прокси, или тем, кто хочет межпровайдерскую маршрутизацию без доверия содержимого запросов SaaS‑вендору.
Cloudflare AI Gateway
Cloudflare AI Gateway структурно отличается от остальных трёх. Вы не меняете свой API‑ключ и не платите Cloudflare за доступ к моделям. Вместо этого вы заменяете базовый URL провайдера на URL, управляемый Cloudflare, который добавляет логирование, кэширование и лимитирование на периферии.
Поскольку Cloudflare расположен между вашим приложением и провайдером, он может кэшировать идентичные запросы — полезно, если ваше приложение часто отправляет одинаковые промпты. Бесплатный тариф покрывает большинство сценариев инди‑разработчиков. Ограничение — охват: Cloudflare не агрегирует модели разных провайдеров. Вам всё равно нужны отдельные аккаунты и ключи для каждого используемого провайдера.
Лучше всего подходит: разработчикам, уже использующим инфраструктуру Cloudflare, или тем, кому нужны кэширование и логирование поверх существующих аккаунтов провайдеров без нового биллинга и без изменения API‑ключей.
Подбор по сценариям
| Сценарий | Рекомендованный инструмент | Причина |
|---|---|---|
| Инди‑приложение, хотите попробовать 10+ моделей с одним API‑ключом | CometAPI | Широкий каталог, простая настройка, кредитные лимиты на ключ |
| Нужны генерация изображений и видео в одной интеграции | CometAPI | Единый endpoint для текстовых, графических и видеомоделей |
| Команда из 5 человек, нужно отслеживать, кто какую модель использует | Portkey | Трассировка запросов, управление командами |
| Маршрутизация к 1,600+ LLM из одной конфигурации клиента | Portkey | Маршрутизация @provider/model, без настройки под каждого |
| Хотите фолбэк‑маршрутизацию между провайдерами без правок кода | Portkey | Декларативная настройка фолбэков в панели |
| Enterprise с требованиями к размещению данных | LiteLLM (самохостинг) | Нет сторонней обработки трафика |
| Бюджет нулевой, готовность к самостоятельному управлению | LiteLLM | Open source, без платформенной стоимости |
| Уже используете OpenAI напрямую, нужен кэш | Cloudflare AI Gateway | Только замена URL, без нового биллинга |
| Нужен RBAC для нескольких команд | Portkey или LiteLLM | У обоих есть управление ролями/командами; у CometAPI и Cloudflare нет |
Чего эти четыре инструмента не покрывают
Это сравнение охватывает шлюзы, которые чаще всего встречаются в обсуждениях инди‑разработчиков. На рынке есть и другие варианты: Helicone сосредоточен на наблюдаемости без роли прокси, OpenRouter специализируется на маршрутизации к open‑weight и исследовательским моделям, а AWS Bedrock — это управляемый сервис Amazon, ориентированный на корпоративные нагрузки. Если ваши требования не укладываются в описанные четыре, обратите внимание на них.
Переход
Если вы сейчас обращаетесь к провайдеру напрямую и рассматриваете шлюз, правка кода минимальна. Для CometAPI вы добавляете одну переменную окружения и меняете base_url. Для Portkey вы добавляете заголовок и меняете способ указания модели (@openai/gpt-4o вместо gpt-4o). Для Cloudflare вы меняете только URL, не трогая API‑ключ провайдера. Для LiteLLM вы сначала запускаете локальный сервер, затем направляете клиента на него.
Более важный вопрос — не как перейти, а нужно ли это. Если вы обращаетесь к одному провайдеру, проблем с видимостью затрат нет и межмодельная маршрутизация не нужна, шлюз добавит сложность без пользы. Если вы работаете с несколькими провайдерами, раздаёте ключи подрядчикам или сталкиваетесь с регулярными неожиданными счетами, накладные расходы на интеграцию окупятся.
FAQ
Могу ли я использовать эти шлюзы вместе?
Да. Некоторые команды запускают LiteLLM в самохостинге для чувствительных нагрузок и CometAPI для всего остального. Cloudflare AI Gateway может стоять перед запросами к CometAPI, если вам нужен кэш Cloudflare поверх — хотя это добавляет сетевой хоп.
Хранят ли эти шлюзы мои промпты?
Зависит от инструмента и вашей конфигурации. Portkey и CometAPI по умолчанию логируют запросы; у обоих есть настройки хранения. LiteLLM хранит только то, что вы настроили, на вашей инфраструктуре. Поведение логирования Cloudflare описано в их документации по AI Gateway. Прочитайте условия приватности любого хостингового сервиса, прежде чем отправлять через него чувствительный контент.
Что происходит, если шлюз недоступен?
Для хостинговых шлюзов (CometAPI, Portkey, Cloudflare) недоступность шлюза означает, что ваше приложение не может достичь AI‑провайдера по этому пути. LiteLLM, запущенный локально, имеет ту же доступность, что и ваш собственный сервер. Прежде чем полагаться на любой хостинговый шлюз в продакшене, проверьте его SLA и наличие фолбэка напрямую на провайдера в случае недоступности самого шлюза.
Есть ли бесплатный способ оценить каждый до принятия решения?
Да. У CometAPI и Portkey есть бесплатные тарифы. LiteLLM — open source и требует только вашей инфраструктуры. Cloudflare AI Gateway бесплатен в щедрых пределах. Вы можете прогнать все четыре на одинаковых тестовых промптах перед выбором.
Как выбрать правильные названия моделей для каждого шлюза?
У каждого шлюза свои соглашения. CometAPI использует собственные идентификаторы (gpt-5.4, claude-opus-4-7). Portkey использует формат @provider/model-name (@openai/gpt-4o, @anthropic/claude-3-5-sonnet). В LiteLLM используются имена моделей, которые вы определяете в конфиге прокси. Cloudflare пропускает стандартные имена моделей провайдера без изменений. Перед написанием кода проверьте в документации каждого шлюза актуальный список моделей.
Влияет ли смена шлюза на мои текущие лимиты скорости?
Да. Если вы переходите с прямых вызовов OpenAI на шлюз, который управляет отношениями с провайдером (например, CometAPI), ваши фактические лимиты определяются аккаунтом шлюза у OpenAI, а не вашим личным. Уточните поведение лимитов у шлюза до миграции продакшен‑трафика.
