At vælge en AI API-gateway er ikke den samme udfordring, som det var for to år siden. I 2024 kaldte de fleste udviklere enten OpenAI direkte eller kørte LiteLLM lokalt. Nu findes der hosted-løsninger med pris-dashboards, kreditgrænser per nøgle og modelkataloger, der dækker dusinvis af udbydere. Kategorien er blevet så stor, at et forkert valg kan betyde, at du senere skal omgøre reelt integrationsarbejde.
Denne artikel sammenligner fire gateways, der ofte dukker op i udviklerdiskussioner: CometAPI, Portkey, LiteLLM og Cloudflare AI Gateway. Målet er ikke at kåre en vinder — hver giver mening i forskellige situationer — men at tydeliggøre, hvad hver enkelt faktisk gør, så du kan matche værktøjet til dit anvendelsesscenarie.
Bemærkning om modelnavne: Modelidentifikatorer brugt i denne artikel (såsom
gpt-5.4,claude-opus-4-7) er CometAPI-platformidentifikatorer. De er ikke officielle navne fra OpenAI eller Anthropic, hvis egne navngivningskonventioner er anderledes.
Hvad disse værktøjer faktisk gør
Før vi sammenligner funktioner, er det nyttigt at være præcis omkring, hvad en AI API-gateway gør. Som minimum: den sidder mellem din applikation og en eller flere AI-udbydere, videresender forespørgsler og returnerer svar. Ud over dette minimum divergerer gateways betydeligt.
Nogle gateways — for eksempel Cloudflare AI Gateway — er primært et pass-through-lag, der tilføjer logging og caching uden at røre ved din API-nøgle eller prissætning. Andre, som CometAPI, fungerer som forhandler: Du betaler dem, de betaler den underliggende udbyder, og prisforskellen er en del af værdiforslaget. LiteLLM er noget andet — det er software, du selv kører, ikke en hosted tjeneste.
At forstå denne sondring er vigtig, før du evaluerer nogen specifik funktion.
Funktionssammenligning
Tabellen nedenfor bruger information fra hvert produkts officielle dokumentation eller offentlige dashboard pr. maj 2026. Funktioner markeret med en tankestreg (—) var ikke bekræftet i officielle kilder på skrivningstidspunktet.
| Funktion | CometAPI | Portkey | LiteLLM | Cloudflare AI Gateway |
|---|---|---|---|---|
| Udrulning | Hosted (SaaS) | Hosted + selvhost | Selvhostet (open source) | Hosted (Cloudflare edge) |
| Modelkatalog | 500+ modeller på tværs af udbydere | 1,600+ LLMs via unified API | Afhænger af din konfiguration | OpenAI, Anthropic, Workers AI |
| Prismodel | Forhandler (betal CometAPI) | Pass-through + platformgebyr | Kun infrastruktur-omkostning | Pass-through (gratis niveau tilgængeligt) |
| OpenAI-kompatibel API | Ja (api.cometapi.com/v1) | Ja (api.portkey.ai/v1) | Ja (lokal eller remote) | Ja (via gateway-URL) |
| Kreditgrænser per nøgle | Ja (dashboard) | Ja | Ja (via konfiguration) | — |
| Gruppebaserede prisforhold | Ja (0.8x standard, 0.1x intern) | — | — | — |
| Forespørgselslogging | Ja (4 logtyper) | Ja | Ja | Ja |
| Overvågning af succesrate | Ja (30-dages oppetidsvisning) | Ja | Ja | Ja |
| Gratis niveau | Ja (nye konti) | Ja | Open source (infra-omkostning) | Ja |
| Selvhost-mulighed | Nej (enterprise: dedikeret server) | Ja | Ja (kernebrugsscenarie) | Nej |
Kilder: CometAPI-dashboard, Portkey-hjemmeside, LiteLLM GitHub, Cloudflare AI Gateway-dokumentation
Forbindelse til hver gateway
Alle fire gateways udstiller et OpenAI-kompatibelt endpoint, hvilket betyder, at den samme klientstruktur virker for dem alle — du ændrer base_url, legitimationsoplysninger og i Portkeys tilfælde, hvordan du angiver modellen.
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 ?? "";}
Forbindelsesmønstret er det samme på tværs af alle fire. De meningsfulde forskelle viser sig andre steder: hvad du kan observere, hvad du kan styre, og hvad der sker, når noget går i stykker.
Hvad hvert værktøj faktisk er godt til
CometAPI
CometAPIs primære tilbud er et hosted katalog med over 500 modelendpoints, inklusive billed- og videogenereringsmodeller sammen med tekstmodeller. Prissætningen kører gennem et gruppebaseret forholdssystem — standardgruppen anvender en 0.8x-multiplikator på CometAPIs basispriser. Du kan konfigurere forskellige forholdsgrupper til internt brug (0.1x) versus betalende kunder, hvilket gør det praktisk at bygge et lagdelt produkt uden at administrere separate konti.
Dashboardet giver dig fire typer logge (standard API-kald, billedgenerering, videogenerering, Midjourney), en 30-dages oppetidsvisning og kreditgrænser per nøgle. Kreditgrænser gør det muligt at give API-nøgler til kunder eller kontraktører med et hårdt loft på forbrug, hvilket løser et reelt problem, når du distribuerer adgang til en delt konto.
Hvad CometAPI ikke tilbyder: selvhosting (enterprise-kunder kan bede om en dedikeret server, men det er ikke en standard selvhostet mulighed), ratebegrænsning på gateway-niveau eller SSO.
Bedst egnet: Indie-udviklere og små teams, der vil route på tværs af mange modeller — inklusive billede og video — med én API-nøgle og én faktureringsrelation, og som har brug for budgetkontrol per nøgle.
Portkey
Portkey er en hosted gateway bygget omkring observability. Den giver adgang til 1,600+ LLM’er via et samlet API, med routing håndteret ved at præfikse modelnavnet med udbyderen (@openai/gpt-4o, @anthropic/claude-3-5-sonnet). Det betyder, at du ikke behøver separate klientkonfigurationer for hver udbyder — én Portkey-klient håndterer dem alle, og du bytter modelstrengen.
Udover routing tilbyder Portkey anmodningssporing, prompt-versionering og fallback-routing, som du konfigurerer i dashboardet i stedet for i koden. Selvhost-muligheden betyder, at du kan køre Portkey på din egen infrastruktur, hvis compliance kræver det.
GitHub-repositoriet for Portkeys open-source gateway vedligeholdes aktivt — tjek aktuelt stjerneantal direkte i stedet for at stole på et tal, der nævnes her, da det ændrer sig hyppigt.
Bedst egnet: Teams der har brug for revisionsspor, multi-udbyder-routing fra en enkelt klientkonfiguration, eller som vil styre API-nøgle-eksponering på tværs af udviklere.
LiteLLM
LiteLLM er en Python-pakke og en proxyserver, ikke en hosted tjeneste. Du kører den selv. Det er en væsentlig sondring: Der er ingen tredjepart, der håndterer dine forespørgsler eller opbevarer dine API-nøgler. Udbyderlegitimationsoplysninger (din rigtige OpenAI-nøgle, Anthropic-nøgle osv.) sættes som server-side miljøvariabler; klienten peger blot på den lokale proxy.
Som standard validerer LiteLLM ikke den API-nøgle, klienterne sender — enhver værdi virker. Hvis du aktiverer virtuel nøgleadministration, sender klienterne virtuelle nøgler, som LiteLLM validerer mod sin egen database. Uanset hvad oversætter proxyen OpenAI-formatforespørgsler til det format, upstream-udbyderen forventer, så din applikationskode ikke ændres, når du tilføjer en ny udbyder.
Afvejningen er driftsomkostninger: Du er selv ansvarlig for at drive, skalere og opdatere serveren.
Bedst egnet: Teams med devops-kapacitet, organisationer med compliance-krav, der forbyder tredjeparts API-proxyer, eller enhver der vil have cross-udbyder-routing uden at betro indholdet af forespørgsler til en SaaS-leverandør.
Cloudflare AI Gateway
Cloudflare AI Gateway er strukturelt anderledes end de tre andre. Du ændrer ikke din API-nøgle eller betaler Cloudflare for modeladgang. I stedet erstatter du udbyderens base-URL med en Cloudflare-administreret URL, der tilføjer logging, caching og ratebegrænsning ved kanten.
Fordi Cloudflare sidder mellem din applikation og udbyderen, kan den cache identiske forespørgsler — nyttigt hvis din applikation sender de samme prompts gentagne gange. Gratisniveauet dækker de fleste indie-udviklerbehov. Begrænsningen er rækkevidde: Cloudflare aggregerer ikke modeller på tværs af udbydere. Du har stadig brug for separate udbyderkonti og -nøgler for hver udbyder, du bruger.
Bedst egnet: Udviklere, der allerede bruger Cloudflares infrastruktur, eller enhver der vil have caching og logging oven på eksisterende udbyderkonti uden at introducere et nyt faktureringsforhold eller ændre API-nøgler.
Matchning af scenarier
| Scenarie | Anbefalet værktøj | Årsag |
|---|---|---|
| Indie-app, vil prøve 10+ modeller med én API-nøgle | CometAPI | Bredt katalog, enkel opsætning, kreditgrænser per nøgle |
| Behov for billede + video i samme integration | CometAPI | Samlet endpoint for tekst-, billede- og videomodeller |
| Team på 5, behov for at spore hvem der bruger hvilken model | Portkey | Anmodningssporing, teamadministration |
| Route til 1,600+ LLM’er med én klientkonfiguration | Portkey | @provider/model-routing, ingen opsætning per udbyder |
| Ønsker fallback-routing på tværs af udbydere uden kodeændringer | Portkey | Deklarativ fallback-konfiguration i dashboardet |
| Enterprise med krav om dataresidens | LiteLLM (selvhost) | Ingen tredjepartshåndtering af trafik |
| Budget er nul, komfortabel med egen drift | LiteLLM | Open source, ingen platformomkostning |
| Bruger allerede OpenAI direkte, ønsker caching | Cloudflare AI Gateway | Kun URL-byt, ingen ny faktureringsrelation |
| Behov for RBAC for flere teams | Portkey eller LiteLLM | Begge har team-/rolleadministration; CometAPI og Cloudflare har det ikke |
Hvad disse fire ikke dækker
Denne sammenligning dækker de gateways, der oftest dukker op i indie-udviklerdiskussioner. Markedet omfatter andre muligheder, som er værd at kende: Helicone fokuserer på observability uden at fungere som proxy, OpenRouter er specialiseret i routing til open-weight- og forskningsmodeller, og AWS Bedrock er Amazons administrerede AI-tjeneste rettet mod enterprise-workloads. Hvis dine krav ikke passer til nogen af de fire ovenfor, er det de næste steder at kigge.
Skiftet
Hvis du i øjeblikket kalder en udbyder direkte og overvejer en gateway, er kodeændringen lille. For CometAPI tilføjer du én miljøvariabel og ændrer base_url. For Portkey tilføjer du en header og ændrer, hvordan du angiver modellen (@openai/gpt-4o i stedet for gpt-4o). For Cloudflare ændrer du URL’en uden at røre ved din udbyders API-nøgle. For LiteLLM kører du først en lokal server og peger derefter din klient på den.
Det større spørgsmål er ikke, hvordan du foretager skiftet, men om du har brug for det. Hvis du kalder en enkelt udbyder, ikke har problemer med omkostningsindsigt og ikke behøver routing på tværs af modeller, tilføjer en gateway kompleksitet uden fordel. Hvis du rammer flere udbydere, distribuerer nøgler til kontraktører, eller oplever at uventede regninger er et tilbagevendende problem, er integrationsomkostningen indsatsen værd.
FAQ
Kan jeg bruge disse gateways sammen?
Ja. Nogle teams kører LiteLLM selvhostet til følsomme workloads og CometAPI til alt andet. Cloudflare AI Gateway kan placeres foran CometAPI-forespørgsler, hvis du vil have Cloudflares cachinglag ovenpå — men det tilføjer et netværkshop.
Gemmer disse gateways mine prompts?
Det afhænger af værktøjet og din konfiguration. Portkey og CometAPI logger forespørgsler som standard; begge har indstillinger for opbevaring. LiteLLM gemmer kun det, du konfigurerer det til at gemme, på din egen infrastruktur. Cloudflares logningsadfærd er beskrevet i deres AI Gateway-dokumentation. Læs fortrolighedsbetingelserne for enhver hosted tjeneste, før du sender følsomt indhold igennem den.
Hvad sker der, hvis gatewayen går ned?
For hosted gateways (CometAPI, Portkey, Cloudflare) betyder nedetid, at din applikation ikke kan nå AI-udbyderen via den vej. LiteLLM, der kører lokalt, har de samme tilgængelighedsegenskaber som din egen server. Før du forpligter dig til en hosted gateway i produktion, så tjek SLA’en og om der tilbydes direkte-udbyder-fallback, hvis selve gatewayen er utilgængelig.
Findes der en gratis måde at evaluere hver af dem, før man forpligter sig?
Ja. CometAPI og Portkey har begge gratis niveauer. LiteLLM er open source og koster kun den infrastruktur, du kører det på. Cloudflare AI Gateway er gratis inden for generøse grænser. Du kan køre alle fire mod de samme testprompter, før du beslutter dig.
Hvordan vælger jeg de rigtige modelnavne til hver gateway?
Hver gateway har sin egen konvention. CometAPI bruger sine egne identifikatorer (gpt-5.4, claude-opus-4-7). Portkey bruger formatet @provider/model-name (@openai/gpt-4o, @anthropic/claude-3-5-sonnet). LiteLLM bruger de modelnavne, du definerer i din proxykonfiguration. Cloudflare sender standard-udbydernes modelnavne videre uændret. Tjek hver gateways dokumentation for den aktuelle modelliste, før du skriver kode.
Påvirker det mine eksisterende rate limits at skifte gateway?
Ja. Hvis du går fra direkte OpenAI-kald til en gateway, der administrerer udbyderrelationen (som CometAPI), bestemmes dine effektive rate limits af gatewayens konto hos OpenAI, ikke din egen. Verificér rate limit-adfærden med gatewayen, før du migrerer produktionstrafik.
