Wybór bramki API dla AI nie jest dziś tym samym problemem, co dwa lata temu. W 2024 r. większość deweloperów albo wywoływała bezpośrednio OpenAI, albo uruchamiała lokalnie LiteLLM. Teraz dostępne są hostowane opcje z pulpitami cenowymi, limitami kredytowymi per klucz i katalogami modeli obejmującymi dziesiątki dostawców. Ta kategoria rozrosła się na tyle, że zły wybór może oznaczać konieczność cofania realnych prac integracyjnych później.
Ten artykuł porównuje cztery bramki, które często pojawiają się w dyskusjach deweloperów: CometAPI, Portkey, LiteLLM i Cloudflare AI Gateway. Celem nie jest wskazanie zwycięzcy — każda ma sens w innej sytuacji — lecz przedstawienie, co faktycznie robi każda z nich, abyś mógł dopasować narzędzie do swojego przypadku użycia.
Uwaga dotycząca nazw modeli: Identyfikatory modeli użyte w tym artykule (takie jak
gpt-5.4,claude-opus-4-7) to identyfikatory platformy CometAPI. Nie są to oficjalne nazwy OpenAI ani Anthropic, których konwencje nazewnictwa są inne.
Co te narzędzia faktycznie robią
Zanim porównamy funkcje, warto precyzyjnie określić, czym jest bramka API dla AI. W minimalnym zakresie: znajduje się między Twoją aplikacją a jednym lub wieloma dostawcami AI, przekazując żądania i zwracając odpowiedzi. Poza tym minimum bramki znacząco się różnią.
Niektóre bramki — na przykład Cloudflare AI Gateway — to przede wszystkim warstwa przepuszczająca, która dodaje logowanie i cache’owanie, nie dotykając Twojego klucza API ani cen. Inne, jak CometAPI, działają jak reseller: płacisz im, oni płacą dostawcy bazowemu, a różnica w cenie jest częścią propozycji wartości. LiteLLM jest z kolei czymś innym — to oprogramowanie, które uruchamiasz samodzielnie, a nie usługa hostowana.
Zrozumienie tego rozróżnienia ma znaczenie, zanim zaczniesz oceniać konkretne funkcje.
Porównanie funkcji
Poniższa tabela wykorzystuje informacje z oficjalnej dokumentacji każdego produktu lub publicznego panelu na maj 2026 r. Funkcje oznaczone myślnikiem (—) nie były potwierdzone w oficjalnych źródłach w momencie pisania.
| Funkcja | CometAPI | Portkey | LiteLLM | Cloudflare AI Gateway |
|---|---|---|---|---|
| Sposób wdrożenia | Hostowane (SaaS) | Hostowane + self-host | Self-host (open source) | Hostowane (edge Cloudflare) |
| Katalog modeli | 500+ modeli u wielu dostawców | 1 600+ LLM przez ujednolicone API | Zależny od Twojej konfiguracji | OpenAI, Anthropic, Workers AI |
| Model cenowy | Reseller (płacisz CometAPI) | Przepuszczające + opłata platformowa | Tylko koszt infrastruktury | Przepuszczające (dostępny darmowy pakiet) |
| API zgodne z OpenAI | Tak (api.cometapi.com/v1) | Tak (api.portkey.ai/v1) | Tak (lokalnie lub zdalnie) | Tak (przez URL bramki) |
| Limity kredytów per klucz | Tak (dashboard) | Tak | Tak (w konfiguracji) | — |
| Współczynniki cen wg grup | Tak (domyślnie 0.8x, wewnętrznie 0.1x) | — | — | — |
| Rejestrowanie żądań | Tak (4 typy logów) | Tak | Tak | Tak |
| Monitorowanie skuteczności | Tak (widok dostępności z 30 dni) | Tak | Tak | Tak |
| Darmowy pakiet | Tak (nowe konta) | Tak | Open source (koszt infra) | Tak |
| Opcja samodzielnego hostowania | Nie (enterprise: dedykowany serwer) | Tak | Tak (kluczowy scenariusz) | Nie |
Źródła: CometAPI dashboard, Portkey homepage, LiteLLM GitHub, Cloudflare AI Gateway documentation
Łączenie się z każdą bramką
Wszystkie cztery bramki udostępniają punkt końcowy zgodny z OpenAI, co oznacza, że ta sama struktura klienta działa dla wszystkich — zmieniasz base_url, poświadczenia, a w przypadku Portkey także sposób określania modelu.
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 ?? "";}
Wzorzec połączenia jest taki sam dla wszystkich czterech. Istotne różnice pojawiają się gdzie indziej: w tym, co możesz obserwować, co kontrolować i co się dzieje, gdy coś się psuje.
Do czego każde narzędzie nadaje się naprawdę dobrze
CometAPI
Główna oferta CometAPI to hostowany katalog z ponad 500 endpointami modeli, w tym modele generowania obrazów i wideo obok modeli tekstowych. Cennik działa w oparciu o system współczynników dla grup — domyślna grupa stosuje mnożnik 0.8x względem stawek bazowych CometAPI. Możesz skonfigurować różne grupy współczynników dla użycia wewnętrznego (0.1x) vs. płacących klientów, co ułatwia budowę ofert warstwowych bez zarządzania oddzielnymi kontami.
Dashboard oferuje cztery typy logów (standardowe wywołania API, generowanie obrazów, generowanie wideo, Midjourney), widok dostępności z 30 dni oraz limity kredytowe per klucz. Limity kredytowe pozwalają przekazywać klucze API klientom lub podwykonawcom z twardym limitem wydatków, co rozwiązuje realny problem przy dystrybucji dostępu do wspólnego konta.
Czego CometAPI nie oferuje: samodzielnego hostowania (klienci enterprise mogą zamówić dedykowany serwer, ale nie jest to standardowa opcja self-host), limitowania szybkości na poziomie bramki ani SSO.
Najlepsze zastosowanie: niezależni deweloperzy i małe zespoły, które chcą routować między wieloma modelami — w tym obrazem i wideo — za pomocą jednego klucza API i jednej relacji rozliczeniowej, a także potrzebują kontroli budżetu per klucz.
Portkey
Portkey to hostowana bramka zbudowana wokół obserwowalności. Daje dostęp do 1 600+ LLM przez ujednolicone API, z routingiem realizowanym przez prefiksowanie nazwy modelu dostawcą (@openai/gpt-4o, @anthropic/claude-3-5-sonnet). Oznacza to, że nie potrzebujesz oddzielnych konfiguracji klienta dla każdego dostawcy — jeden klient Portkey obsługuje wszystkich, a Ty podmieniasz łańcuch modelu.
Poza routingiem Portkey zapewnia śledzenie żądań, wersjonowanie promptów oraz routing awaryjny, który konfigurujesz w panelu zamiast w kodzie. Opcja self-hostingu pozwala uruchomić Portkey we własnej infrastrukturze, jeśli wymagają tego kwestie zgodności.
Repozytorium GitHub dla otwartoźródłowej bramki Portkey jest aktywnie utrzymywane — sprawdź aktualną liczbę gwiazdek bezpośrednio, zamiast polegać na liczbie podanej tutaj, ponieważ często się zmienia.
Najlepsze zastosowanie: zespoły potrzebujące ścieżek audytu, routingu do wielu dostawców z jednej konfiguracji klienta lub chcące zarządzać ekspozycją kluczy API wśród deweloperów.
LiteLLM
LiteLLM to pakiet Pythona i serwer proxy, a nie usługa hostowana. Uruchamiasz go sam. To istotne rozróżnienie: nie ma strony trzeciej obsługującej Twoje żądania ani przechowującej Twoje klucze API. Poświadczenia dostawców (Twój prawdziwy klucz OpenAI, klucz Anthropic itd.) są ustawiane po stronie serwera jako zmienne środowiskowe; klient wskazuje jedynie na lokalny proxy.
Domyślnie LiteLLM nie weryfikuje klucza API przesyłanego przez klientów — dowolna wartość działa. Jeśli włączysz zarządzanie kluczami wirtualnymi, klienci przekazują klucze wirtualne, które LiteLLM weryfikuje względem własnej bazy. W obu przypadkach proxy tłumaczy żądania w formacie OpenAI na format oczekiwany przez dostawcę nadrzędnego, więc kod aplikacji nie zmienia się, gdy dodajesz nowego dostawcę.
Kompromisem jest narzut operacyjny: odpowiadasz za uruchamianie, skalowanie i aktualizowanie serwera.
Najlepsze zastosowanie: zespoły z kompetencjami devops, organizacje z wymaganiami zgodności zabraniającymi zewnętrznych proxy API lub każdy, kto chce routingu między dostawcami bez powierzania treści żądań dostawcy SaaS.
Cloudflare AI Gateway
Cloudflare AI Gateway strukturalnie różni się od pozostałych trzech. Nie zmieniasz klucza API ani nie płacisz Cloudflare za dostęp do modeli. Zamiast tego podmieniasz bazowy URL dostawcy na URL zarządzany przez Cloudflare, który dodaje logowanie, cache’owanie i limitowanie szybkości na krawędzi.
Ponieważ Cloudflare znajduje się między Twoją aplikacją a dostawcą, może cache’ować identyczne żądania — przydatne, jeśli aplikacja wysyła wielokrotnie te same prompty. Darmowy pakiet pokrywa większość zastosowań niezależnych deweloperów. Ograniczeniem jest zakres: Cloudflare nie agreguje modeli wielu dostawców. Nadal potrzebujesz oddzielnych kont i kluczy dla każdego dostawcy, z którego korzystasz.
Najlepsze zastosowanie: deweloperzy już korzystający z infrastruktury Cloudflare lub każdy, kto chce cache’owania i logowania na wierzchu istniejących kont dostawców, bez wprowadzania nowej relacji rozliczeniowej lub zmiany kluczy API.
Dopasowanie do scenariuszy
| Scenariusz | Rekomendowane narzędzie | Powód |
|---|---|---|
| Indie aplikacja, chcesz przetestować 10+ modeli jednym kluczem API | CometAPI | Szeroki katalog, prosta konfiguracja, limity budżetu per klucz |
| Potrzebujesz generowania obrazu + wideo w tej samej integracji | CometAPI | Ujednolicony endpoint dla modeli tekstowych, obrazowych i wideo |
| Zespół 5-osobowy, trzeba śledzić, kto używa jakiego modelu | Portkey | Śledzenie żądań, zarządzanie zespołem |
| Routing do 1 600+ LLM w jednej konfiguracji klienta | Portkey | Routing @provider/model, bez konfiguracji per dostawca |
| Chcesz routing awaryjny między dostawcami bez zmian w kodzie | Portkey | Deklaratywna konfiguracja fallbacku w panelu |
| Enterprise z wymaganiami dot. lokalizacji danych | LiteLLM (self-host) | Brak obsługi ruchu przez stronę trzecią |
| Budżet zerowy, komfort z samodzielnym utrzymaniem | LiteLLM | Open source, brak kosztu platformy |
| Już używasz bezpośrednio OpenAI, chcesz cache’owania | Cloudflare AI Gateway | Tylko podmiana URL, bez nowej relacji rozliczeniowej |
| Potrzebujesz RBAC dla wielu zespołów | Portkey lub LiteLLM | Oba mają zarządzanie zespołami/rolami; CometAPI i Cloudflare nie |
Czego te cztery nie obejmują
To porównanie dotyczy bramek najczęściej pojawiających się w rozmowach niezależnych deweloperów. Na rynku są też inne opcje warte poznania: Helicone koncentruje się na obserwowalności bez działania jako proxy, OpenRouter specjalizuje się w routingu do modeli open-weight i badawczych, a AWS Bedrock to zarządzana usługa AI Amazonu skierowana do obciążeń enterprise. Jeśli Twoje wymagania nie pasują do żadnej z powyższych, to kolejne miejsca, w które warto zajrzeć.
Zmiana rozwiązania
Jeśli obecnie wywołujesz dostawcę bezpośrednio i rozważasz bramkę, zmiana w kodzie jest niewielka. Dla CometAPI dodajesz jedną zmienną środowiskową i zmieniasz base_url. Dla Portkey dodajesz nagłówek i zmieniasz sposób określania modelu (@openai/gpt-4o zamiast gpt-4o). Dla Cloudflare zmieniasz URL bez ruszania klucza API dostawcy. Dla LiteLLM najpierw uruchamiasz lokalny serwer, potem kierujesz do niego klienta.
Większe pytanie brzmi nie “jak się przesiąść”, ale “czy w ogóle tego potrzebujesz”. Jeśli wywołujesz jednego dostawcę, nie masz problemów z widocznością kosztów i nie potrzebujesz routingu między modelami, bramka doda złożoność bez korzyści. Jeśli korzystasz z wielu dostawców, dystrybuujesz klucze podwykonawcom lub zaskakujące rachunki wracają jak bumerang, koszt integracji się opłaca.
FAQ
Czy mogę używać tych bramek razem?
Tak. Niektóre zespoły uruchamiają LiteLLM self-hosted dla wrażliwych obciążeń, a CometAPI dla reszty. Cloudflare AI Gateway może stać przed żądaniami do CometAPI, jeśli chcesz mieć warstwę cache Cloudflare na wierzchu — choć dodaje to dodatkowy skok sieciowy.
Czy te bramki przechowują moje prompty?
To zależy od narzędzia i konfiguracji. Portkey i CometAPI domyślnie logują żądania; oba mają ustawienia retencji. LiteLLM przechowuje tylko to, co skonfigurujesz, we własnej infrastrukturze. Zachowanie logowania Cloudflare opisano w dokumentacji AI Gateway. Przeczytaj warunki prywatności każdej usługi hostowanej, zanim wyślesz przez nią wrażliwe treści.
Co się stanie, jeśli bramka przestanie działać?
W przypadku hostowanych bramek (CometAPI, Portkey, Cloudflare) niedostępność bramki oznacza, że Twoja aplikacja nie dotrze do dostawcy AI tą ścieżką. LiteLLM uruchomione lokalnie ma taką samą dostępność jak Twój własny serwer. Zanim zobowiążesz się do hostowanej bramki w produkcji, sprawdź jej SLA i czy oferuje fallback bezpośrednio do dostawcy, jeśli sama bramka jest niedostępna.
Czy jest darmowy sposób na ocenę każdej z nich przed decyzją?
Tak. CometAPI i Portkey mają darmowe plany. LiteLLM jest open source i kosztuje tylko infrastruktura, na której go uruchomisz. Cloudflare AI Gateway jest bezpłatny w ramach hojnych limitów. Możesz przetestować wszystkie cztery na tych samych promptach przed podjęciem decyzji.
Jak wybrać poprawne nazwy modeli dla każdej bramki?
Każda bramka ma własną konwencję. CometAPI używa własnych identyfikatorów (gpt-5.4, claude-opus-4-7). Portkey korzysta z formatu @provider/model-name (@openai/gpt-4o, @anthropic/claude-3-5-sonnet). LiteLLM używa nazw modeli zdefiniowanych w Twojej konfiguracji proxy. Cloudflare przekazuje standardowe nazwy modeli dostawców bez zmian. Sprawdź dokumentację każdej bramki, aby poznać aktualną listę modeli przed pisaniem kodu.
Czy zmiana bramki wpływa na moje dotychczasowe limity szybkości?
Tak. Jeśli przechodzisz z bezpośrednich wywołań OpenAI na bramkę, która zarządza relacją z dostawcą (jak CometAPI), Twoje efektywne limity wynikają z konta bramki u OpenAI, a nie z Twojego własnego. Zweryfikuj zachowanie limitów z bramką przed migracją ruchu produkcyjnego.
