Kjør en lokal OpenAI-kompatibel proxy for alle store skybaserte KI-tjenester. Lagre API-nøkler én gang, og la enhver klientapp — for skrivebord, mobil eller nett — kommunisere med http://localhost i stedet for å registrere nøkler i hvert verktøy.
Kom i gang
1. Start appen
Åpne AIProxyServer. Ved første oppstart starter proxyen automatisk og lytter på port 8421 på den lokale maskinen din. Hovedvinduet viser tre seksjoner:
- Proxy-server — gjeldende status, basis-URL og en knapp for å starte eller stoppe lytteren
- Bearer-token — valgfri bryter for autentisering og visning av token
- Leverandører — hver støttede skybaserte KI-leverandør, med en Angi API-nøkkel -knapp per rad
2. Legg til din første API-nøkkel
- Velg en hvilken som helst leverandør fra leverandørlisten (for eksempel OpenAI (ChatGPT))
- Klikk på Hent API-nøkkel for å åpne leverandørens konsoll i nettleseren, og opprett eller kopier deretter en nøkkel
- Klikk på Angi API-nøkkel på samme rad og lim inn verdien i dialogboksen
- Klikk på Lagre. Statusetiketten endres til Konfigurert i grønt
3. Koble til en klientapp
Pek enhver OpenAI-kompatibel klient mot proxyen. Basis-URL-en er http://localhost:8421/<provider>/v1. Leverandørsegmentet velger hvilken sky som mottar forespørselen.
# Eksempel: OpenAI Python SDK rettet mot proxyen
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8421/openai/v1",
api_key="not-used-but-required-by-sdk",
)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)
Klienten ser aldri den ekte nøkkelen. AIProxyServer legger ved oppstrømslegitimasjonen når den videresender forespørselen.
Oversikt over grensesnittet
Proxy-serverpanel
| Felt | Beskrivelse |
|---|---|
| Status | Kjører når lytteren er aktiv, Stoppet ellers. |
| Basis-URL | Adressen klientappene skal bruke, inkludert vertsnavn og port. Klikk på Kopier for å kopiere den til utklippstavlen. |
| Start / Stopp-knapp | Slå HTTP-lytteren av eller på uten å avslutte appen. |
Bearer-tokenpanel
- Krev Bearer-token-autentisering — avkrysningsboks som slår autentisering av eller på. Av som standard for problemfri lokal bruk.
- Token-felt — skrivebeskyttet visning av gjeldende token. Vises som prikker; bruk Kopier for å hente det.
- Generer på nytt — utsted et nytt tilfeldig token. Eksisterende klienter må oppdateres med den nye verdien.
Leverandørpanel
Én rad per støttede skybaserte leverandør. Hver rad viser:
- Visningsnavnet (for eksempel Claude (Anthropic))
- Konfigurasjonsstatus — grønn Konfigurert når en API-nøkkel er lagret, grå Ikke konfigurert ellers
- URL-banen klientene dine bruker, f.eks.
/anthropic/v1/chat/completions - Angi API-nøkkel — åpner en dialogboks for å skrive inn legitimasjon
- Hent API-nøkkel — åpner leverandørens konsoll i nettleseren
Støttede leverandører
Elleve skybaserte KI-tjenester følger med. De fleste bruker OpenAI Chat Completions-formatet direkte og proxys uendret. Tre (Anthropic, Gemini, ERNIE) bruker sine egne protokoller; AIProxyServer oversetter forespørsler og svar fortløpende, slik at klienten din bare ser OpenAI-formater.
| Leverandør | Rute-prefiks | Dette trenger du |
|---|---|---|
| OpenAI (ChatGPT) | /openai/v1 | API-nøkkel fra platform.openai.com |
| Claude (Anthropic) | /anthropic/v1 | API-nøkkel fra Anthropic Console |
| Gemini (Google) | /gemini/v1 | API-nøkkel fra Google AI Studio |
| Grok (xAI) | /grok/v1 | API-nøkkel fra xAI Console |
| Azure OpenAI (Copilot) | /copilot/v1 | API-nøkkel samt URL-en til distribusjonsendepunktet ditt |
| Perplexity | /perplexity/v1 | API-nøkkel fra Perplexity-innstillinger |
| Groq | /groq/v1 | API-nøkkel fra Groq Cloud |
| DeepSeek | /deepseek/v1 | API-nøkkel fra DeepSeek Platform |
| Kimi (Moonshot) | /kimi/v1 | API-nøkkel fra Moonshot Console |
| Qwen (DashScope) | /qwen/v1 | API-nøkkel fra Alibaba DashScope |
| ERNIE (Baidu) | /ernie/v1 | Både API Key og Secret Key fra Baidu Qianfan |
Leverandørspesifikke merknader
- Azure OpenAI — lim inn hele distribusjonsendepunktet i Endpoint Base URL -feltet, for eksempel
https://my-resource.openai.azure.com/openai/deployments/gpt-4o. Proxyen legger til/chat/completions?api-version=2024-02-01automatisk. - ERNIE — Baidu Qianfan bruker OAuth, så både API Key og Secret Key er påkrevd. AIProxyServer henter og mellomlagrer tilgangstokener i bakgrunnen.
- Gemini — autentisering skjer med URL-spørringsparameter; proxyen legger den til for deg. Gratisnivåets kvoter per minutt gjelder fortsatt.
API-referanse
Endepunkter
| Metode | Bane | Beskrivelse |
|---|---|---|
| GET | /health | Aktivitetssjekk. Returnerer tjenestestatus og leverandørliste. Ingen autentisering kreves. |
| GET | /v1/providers | Konfigurerte leverandører og metadata. |
| GET | /<provider>/v1/models | Modelliste for den angitte leverandøren, i OpenAI-format. |
| POST | /<provider>/v1/chat/completions | OpenAI Chat Completions-forespørsel. Send stream:true for SSE. |
Strømming
Når klienten sender "stream": true, svarer proxyen med Server-Sent Events i OpenAI-format:
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant"},...}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"content":"Hello"},...}]}
data: [DONE]
Anthropic- og Gemini-native strømmer oversettes til dette formatet, slik at alle klienter kan bruke én parser.
Autentiseringsoverskrift
Når Krev Bearer-token-autentisering er på, send tokenet fra hovedvinduet med hver forespørsel:
Authorization: Bearer <token-shown-in-app>
Innstillinger
Åpne Innstillinger-vinduet fra tannhjulikonet på den nederste verktøylinjen.
| Innstilling | Standard | Beskrivelse |
|---|---|---|
| Proxy-port | 8421 | TCP-porten lytteren binder seg til. Endring krever omstart av proxyen. |
| Start server automatisk | På | Start proxyen når appen åpnes. |
| Tillat LAN-tilgang | Av | Når den er av, binder proxyen seg bare til 127.0.0.1. Når den er på, kan andre enheter på Wi-Fi-nettverket ditt nå proxyen. |
| Krev Bearer-token | Av | Når den er på, må hver forespørsel inkludere tokenet som vises i hovedvinduet. Anbefales sterkt når Tillat LAN-tilgang er på. |
Klienteksempler
cURL
# OpenAI (gjennomslipp)
curl http://localhost:8421/openai/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Hello"}]
}'
# Claude via samme OpenAI-format
curl http://localhost:8421/anthropic/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"messages": [{"role": "user", "content": "Hello"}],
"max_tokens": 1024
}'
OpenAI Python SDK
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8421/gemini/v1",
api_key="placeholder", # ignorert når Bearer Token er av
)
stream = client.chat.completions.create(
model="gemini-2.0-flash",
messages=[{"role": "user", "content": "Tell me a joke"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)
Flutter / Dart
// Bruk en hvilken som helst OpenAI-kompatibel Dart-klient
final client = OpenAIClient(
baseUrl: 'http://localhost:8421/anthropic/v1',
apiKey: '', // brukes ikke når Bearer Token er av
);
localhost med Mac-ens LAN-IP (vist i Basis-URL-feltet når Tillat LAN-tilgang er på).Tips
- La Bearer-tokenet være av mens du utvikler lokalt; slå det på straks du aktiverer LAN-tilgang.
- Bruk ulike basis-URL-er per leverandør i klientkoden, slik at du kan bytte leverandør ved å endre én konstant.
- Proxyen starter automatisk, men du kan stoppe den midlertidig fra hovedvinduet hvis det oppstår en portkonflikt.
- Hvis en leverandørs gratisnivå begrenser deg, videresendes oppstrømsfeilmeldingen ordrett. Ingen logikk for nye forsøk er skjult for klienten.
- Endepunktet
/v1/providerser nyttig for å finne ut hvilke leverandører som er konfigurert under kjøring.
Feilsøking
Proxyen starter ikke
- En annen prosess bruker kanskje allerede port 8421. Endre porten i Innstillinger og start proxyen på nytt.
- Kontroller systemloggen for feilmeldingen som vises ved oppstart.
En forespørsel returnerer 401 Unauthorized
- Kravet om Bearer-token er på, men klienten sendte ikke en samsvarende
Authorization: Bearer ...-overskrift. - Leverandørens egen API-nøkkel kan være ugyldig — oppstrømsfeilen videresendes, så kontroller meldingsteksten.
En forespørsel returnerer "API key is not configured"
- Åpne leverandørlisten og klikk på Angi API-nøkkel for den aktuelle leverandøren.
- For ERNIE må både API Key og Secret Key være fylt ut. For Azure OpenAI kreves også Endpoint Base URL.
Mobil enhet kan ikke nå proxyen
- Slå på Tillat LAN-tilgang i Innstillinger.
- Bruk LAN-IP-en som vises i Basis-URL-feltet, ikke
localhost. - Sørg for at begge enhetene er på samme Wi-Fi-nettverk, og at brannmuren tillater innkommende tilkoblinger på proxy-porten.
Strømmesvar kommer på én gang
- Kontroller at klienten sender
"stream": truei JSON-brødteksten. - Noen HTTP-biblioteker mellomlagrer SSE som standard — deaktiver svarbuffering på klientsiden.
Personvern
- API-nøkler lagres kryptert med Fernet i
~/Library/Application Support/AIProxyServer/credentials.enc. Krypteringsnøkkelen imaster.keyhar 0600-tillatelser. - Bearer-tokenet lagres, når det er aktivert, også bare i det krypterte hvelvet og skrives aldri til den vanlige innstillingsfilen.
- Proxyen videresender bare forespørsler til leverandører du uttrykkelig har konfigurert. Den foretar ingen andre utgående kall.
- Ingen telemetri, ingen analyse, ingen krasjrapportering.
- Standard nettverksbinding er
127.0.0.1bare. LAN-eksponering er valgfri. - Samtaleinnhold lagres ikke. AIProxyServer videresender byte og glemmer dem umiddelbart.