Kjør en lokal OpenAI-kompatibel proxy for alle store sky-AI-tjenester. Lagre API-nøkler én gang, og la enhver klientapp — desktop, mobil eller web — snakke 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å din lokale maskin. Hovedvinduet viser tre seksjoner:
- Proxy Server — nåværende status, base-URL og en knapp for å starte eller stoppe lytteren
- Bearer Token — valgfri autentiseringsbryter og tokenvisning
- Providers — hver støttet sky-AI-leverandør, med en Set API Key-knapp per rad
2. Legg til din første API-nøkkel
- Velg en leverandør fra Providers-listen (for eksempel OpenAI (ChatGPT))
- Klikk Get API key for å åpne leverandørens konsoll i nettleseren, og opprett eller kopier en nøkkel
- Klikk Set API Key på samme rad og lim inn verdien i dialogen
- Klikk Save. Statusetiketten endres til grønt Configured
3. Koble til en klientapp
Pek enhver OpenAI-kompatibel klient mot proxyen. Base-URL er http://localhost:8421/<provider>/v1. Leverandørsegmentet bestemmer hvilken sky som mottar forespørselen.
# Eksempel: OpenAI Python SDK pekt 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øms legitimasjon når den videresender forespørselen.
Oversikt over grensesnittet
Proxy Server-panel
| Felt | Beskrivelse |
|---|---|
| Status | Running når lytteren er aktiv, ellers Stopped. |
| Base URL | Adressen klientapper skal bruke, inkludert vertsnavn og port. Klikk Copy for å kopiere den til utklippstavlen. |
| Start / Stop-knapp | Slå HTTP-lytteren av og på uten å avslutte appen. |
Bearer Token-panel
- Require Bearer Token authentication — avkrysningsboks som slår autentisering på eller av. Av som standard for problemfri lokal bruk.
- Token field — skrivebeskyttet visning av det nåværende tokenet. Vises som prikker; bruk Copy for å hente det.
- Regenerate — utsted et nytt tilfeldig token. Eksisterende klienter må oppdateres med den nye verdien.
Providers-panel
Én rad per støttet skyleverandør. Hver rad viser:
- Visningsnavnet (for eksempel Claude (Anthropic))
- Konfigurasjonsstatus — grønn Configured når en API-nøkkel er lagret, ellers grå Not configured
- URL-stien klientene dine bruker, f.eks.
/anthropic/v1/chat/completions - Set API Key — åpner en dialog for å skrive inn legitimasjon
- Get API key — åpner leverandørens konsoll i nettleseren din
Støttede leverandører
Elleve sky-AI-tjenester er inkludert. De fleste bruker OpenAI Chat Completions-formatet nativt og videresendes som de er. Tre (Anthropic, Gemini, ERNIE) snakker sine egne protokoller; AIProxyServer oversetter forespørsler og svar i farten slik at klienten din bare noensinne ser OpenAI-former.
| Leverandør | Ruteprefiks | Hva du trenger |
|---|---|---|
| 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 pluss deployment-endpoint-URL |
| 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 notater
- Azure OpenAI — lim inn hele deployment-endpoint i feltet Endpoint Base URL, 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 forespør og bufrer tilgangstokener i bakgrunnen.
- Gemini — autentisering skjer via URL-spørringsparameter; proxyen legger den til for deg. Kvoter per minutt for gratisnivået gjelder fortsatt.
API-referanse
Endepunkter
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /health | Liveness-sjekk. Returnerer tjenestestatus og leverandørliste. Ingen autentisering nødvendig. |
| GET | /v1/providers | Konfigurerte leverandører og metadata. |
| GET | /<provider>/v1/models | Modelliste for den gitte leverandøren, i OpenAI-format. |
| POST | /<provider>/v1/chat/completions | OpenAI Chat Completions-forespørsel. Send stream:true for SSE. |
Streaming
Når klienten sender "stream": true, svarer proxyen med Server-Sent Events i OpenAI's 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]
Native streams fra Anthropic og Gemini oversettes til dette formatet slik at alle klienter kan bruke en enkelt parser.
Autentiseringsheader
Når Require Bearer Token authentication er på, send tokenet fra hovedvinduet med hver forespørsel:
Authorization: Bearer <token-shown-in-app>
Innstillinger
Åpne Settings-vinduet fra tannhjulsikonet i den nederste verktøylinjen.
| Innstilling | Standard | Beskrivelse |
|---|---|---|
| Proxy Port | 8421 | TCP-porten lytteren binder seg til. Endring krever omstart av proxyen. |
| Auto Start Server | On | Start proxyen når appen starter. |
| Allow LAN Access | Off | Når av binder proxyen seg kun til 127.0.0.1. Når på kan andre enheter på Wi-Fi-en din nå proxyen. |
| Require Bearer Token | Off | Når på må hver forespørsel inkludere tokenet som vises i hovedvinduet. Sterkt anbefalt når Allow LAN Access er på. |
Klienteksempler
cURL
# OpenAI (passthrough)
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", # ignoreres 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 av en hvilken som helst OpenAI-kompatibel Dart-klient
final client = OpenAIClient(
baseUrl: 'http://localhost:8421/anthropic/v1',
apiKey: '', // ubrukt når Bearer Token er av
);
localhost med Macens LAN-IP (vises i Base URL-feltet når Allow LAN Access er på).Tips
- La Bearer Token være av mens du utvikler lokalt; slå det på i det øyeblikket du aktiverer LAN-tilgang.
- Bruk distinkte Base-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å rate-begrenser deg, videresendes oppstrøms feilmelding ordrett. Ingen retry-logikk skjules for klienten.
/v1/providers-endepunktet er nyttig for å oppdage hvilke leverandører som er konfigurert i kjøretid.
Feilsøking
Proxyen vil ikke starte
- En annen prosess bruker kanskje allerede port 8421. Endre porten i Settings og start proxyen på nytt.
- Sjekk systemloggen for feilmeldingen som vises ved oppstart.
En forespørsel returnerer 401 Unauthorized
- Bearer Token-kravet er på, men klienten sendte ikke en samsvarende
Authorization: Bearer ...-header. - Leverandørens egen API-nøkkel kan være ugyldig — oppstrømsfeilen videresendes, så sjekk meldingsteksten.
En forespørsel returnerer "API key is not configured"
- Åpne Providers-listen og klikk Set API Key for den aktuelle leverandøren.
- For ERNIE må både API Key og Secret Key fylles ut. For Azure OpenAI er Endpoint Base URL også påkrevd.
Mobil enhet kan ikke nå proxyen
- Slå Allow LAN Access på i Settings.
- Bruk LAN-IP-en som vises i Base URL-feltet, ikke
localhost. - Sørg for at begge enheter er på samme Wi-Fi-nettverk og at brannmuren tillater innkommende tilkoblinger på proxy-porten.
Streaming-svar ankommer alle samtidig
- Sørg for at klienten sender
"stream": truei JSON-kroppen. - Noen HTTP-biblioteker bufrer SSE som standard — deaktiver responsbufring på klientsiden.
Personvern
- API-nøkler lagres kryptert med Fernet i
~/Library/Application Support/AIProxyServer/credentials.enc. Krypteringsnøkkelen imaster.keyhar 0600-rettigheter. - Bearer Token, når aktivert, lagres også kun i det krypterte hvelvet og skrives aldri til den vanlige innstillingsfilen.
- Proxyen videresender kun forespørsler til leverandører du eksplisitt har konfigurert. Den gjør ingen andre utgående kall.
- Ingen telemetri, ingen analyser, ingen krasjrapportering.
- Standard nettverksbinding er bare
127.0.0.1. LAN-eksponering er opt-in. - Samtaleinnhold lagres ikke. AIProxyServer videresender byte og glemmer dem umiddelbart.