Kør en lokal OpenAI-kompatibel proxy for alle større cloud-AI-tjenester. Gem API-nøgler én gang, og lad enhver klientapp — desktop, mobil eller web — tale med http://localhost i stedet for at registrere nøgler i hvert eneste værktøj.
Kom godt i gang
1. Start appen
Åbn AIProxyServer. Ved første start starter proxyen automatisk og lytter på port 8421 på din lokale maskine. Hovedvinduet viser tre sektioner:
- Proxy Server — aktuel status, base-URL og en knap til at starte eller stoppe lytteren
- Bearer Token — valgfri godkendelseskontakt og tokenvisning
- Providers — alle understøttede cloud-AI-udbydere med en Set API Key-knap pr. række
2. Tilføj din første API-nøgle
- Vælg en udbyder fra listen Providers (for eksempel OpenAI (ChatGPT))
- Klik på Get API key for at åbne udbyderens konsol i din browser, og opret eller kopier derefter en nøgle
- Klik på Set API Key i samme række, og indsæt værdien i dialogen
- Klik på Save. Statusetiketten skifter til grønt Configured
3. Forbind en klientapp
Peg enhver OpenAI-kompatibel klient mod proxyen. Base-URL'en er http://localhost:8421/<provider>/v1. Udbyder-segmentet bestemmer, hvilken cloud der modtager forespørgslen.
# Eksempel: OpenAI Python SDK peget mod 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 aldrig den rigtige nøgle. AIProxyServer vedhæfter upstream-legitimationsoplysningerne, når den videresender forespørgslen.
Oversigt over grænsefladen
Proxy Server-panel
| Felt | Beskrivelse |
|---|---|
| Status | Running når lytteren er aktiv, ellers Stopped. |
| Base URL | Den adresse, klientapps skal bruge, inklusive værtsnavn og port. Klik på Copy for at kopiere den til udklipsholderen. |
| Start / Stop-knap | Slå HTTP-lytteren til og fra uden at afslutte appen. |
Bearer Token-panel
- Require Bearer Token authentication — afkrydsningsfelt der slår godkendelse til eller fra. Slået fra som standard for problemfri lokal brug.
- Token field — skrivebeskyttet visning af det aktuelle token. Vises som prikker; brug Copy for at hente det.
- Regenerate — udsted et nyt tilfældigt token. Eksisterende klienter skal opdateres med den nye værdi.
Providers-panel
Én række pr. understøttet cloud-udbyder. Hver række viser:
- Visningsnavnet (for eksempel Claude (Anthropic))
- Konfigurationsstatus — grøn Configured når en API-nøgle er gemt, ellers grå Not configured
- URL-stien dine klienter bruger, f.eks.
/anthropic/v1/chat/completions - Set API Key — åbner en dialog til indtastning af legitimationsoplysninger
- Get API key — åbner udbyderens konsol i din browser
Understøttede udbydere
Elleve cloud-AI-tjenester er inkluderet. De fleste bruger OpenAI Chat Completions-formatet nativt og videresendes som de er. Tre (Anthropic, Gemini, ERNIE) taler deres egne protokoller; AIProxyServer oversætter forespørgsler og svar i farten, så din klient kun nogensinde ser OpenAI-formater.
| Udbyder | Rutepræfiks | Hvad du har brug for |
|---|---|---|
| OpenAI (ChatGPT) | /openai/v1 | API-nøgle fra platform.openai.com |
| Claude (Anthropic) | /anthropic/v1 | API-nøgle fra Anthropic Console |
| Gemini (Google) | /gemini/v1 | API-nøgle fra Google AI Studio |
| Grok (xAI) | /grok/v1 | API-nøgle fra xAI Console |
| Azure OpenAI (Copilot) | /copilot/v1 | API-nøgle plus din deployment-endpoint-URL |
| Perplexity | /perplexity/v1 | API-nøgle fra Perplexity-indstillinger |
| Groq | /groq/v1 | API-nøgle fra Groq Cloud |
| DeepSeek | /deepseek/v1 | API-nøgle fra DeepSeek Platform |
| Kimi (Moonshot) | /kimi/v1 | API-nøgle fra Moonshot Console |
| Qwen (DashScope) | /qwen/v1 | API-nøgle fra Alibaba DashScope |
| ERNIE (Baidu) | /ernie/v1 | Både API Key og Secret Key fra Baidu Qianfan |
Udbyderspecifikke noter
- Azure OpenAI — indsæt det fulde deployment-endpoint i feltet Endpoint Base URL, for eksempel
https://my-resource.openai.azure.com/openai/deployments/gpt-4o. Proxyen tilføjer automatisk/chat/completions?api-version=2024-02-01. - ERNIE — Baidu Qianfan bruger OAuth, så både API Key og Secret Key er påkrævet. AIProxyServer anmoder om og cacher adgangstokens i baggrunden.
- Gemini — godkendelse foregår via en URL-forespørgselsparameter; proxyen tilføjer den for dig. Kvoter pr. minut for gratisniveauet gælder stadig.
API-reference
Endpoints
| Metode | Sti | Beskrivelse |
|---|---|---|
| GET | /health | Liveness-tjek. Returnerer tjenestestatus og udbyderliste. Ingen godkendelse påkrævet. |
| GET | /v1/providers | Konfigurerede udbydere og metadata. |
| GET | /<provider>/v1/models | Modelliste for den givne udbyder i OpenAI-format. |
| POST | /<provider>/v1/chat/completions | OpenAI Chat Completions-forespørgsel. Angiv 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 oversættes til dette format, så alle klienter kan bruge en enkelt parser.
Godkendelsesheader
Når Require Bearer Token authentication er slået til, skal du sende tokenet fra hovedvinduet med hver forespørgsel:
Authorization: Bearer <token-shown-in-app>
Indstillinger
Åbn vinduet Settings fra tandhjulsikonet i den nederste værktøjslinje.
| Indstilling | Standard | Beskrivelse |
|---|---|---|
| Proxy Port | 8421 | TCP-porten som lytteren binder til. Ændring kræver genstart af proxyen. |
| Auto Start Server | On | Start proxyen når appen starter. |
| Allow LAN Access | Off | Når slået fra, binder proxyen kun til 127.0.0.1. Når slået til, kan andre enheder på dit Wi-Fi nå proxyen. |
| Require Bearer Token | Off | Når slået til, skal hver forespørgsel inkludere det token, der vises i hovedvinduet. Stærkt anbefalet når Allow LAN Access er slået til. |
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 slået fra
)
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
// Brug af en hvilken som helst OpenAI-kompatibel Dart-klient
final client = OpenAIClient(
baseUrl: 'http://localhost:8421/anthropic/v1',
apiKey: '', // ubrugt når Bearer Token er slået fra
);
localhost med din Macs LAN-IP (vises i Base URL-feltet når Allow LAN Access er slået til).Tips
- Lad Bearer Token være slået fra mens du udvikler lokalt; slå det til i det øjeblik du aktiverer LAN-adgang.
- Brug forskellige Base-URL'er pr. udbyder i din klientkode, så du kan skifte udbyder ved at ændre én konstant.
- Proxyen starter automatisk, men du kan stoppe den midlertidigt fra hovedvinduet, hvis der opstår en portkonflikt.
- Hvis en udbyders gratisniveau ratebegrænser dig, videresendes upstream-fejlmeddelelsen ordret. Ingen retry-logik er skjult for klienten.
- Endpointet
/v1/providerser nyttigt til at opdage hvilke udbydere der er konfigureret ved kørselstid.
Fejlfinding
Proxyen vil ikke starte
- En anden proces bruger muligvis allerede port 8421. Skift porten i Settings og genstart proxyen.
- Tjek systemloggen for fejlmeddelelsen vist ved starttidspunktet.
En forespørgsel returnerer 401 Unauthorized
- Kravet om Bearer Token er slået til, men klienten sendte ikke en matchende
Authorization: Bearer ...-header. - Udbyderens egen API-nøgle er muligvis ugyldig — upstream-fejlen videresendes, så tjek meddelelsesteksten.
En forespørgsel returnerer "API key is not configured"
- Åbn listen Providers og klik på Set API Key for den pågældende udbyder.
- For ERNIE skal både API Key og Secret Key udfyldes. For Azure OpenAI er Endpoint Base URL også påkrævet.
Mobil enhed kan ikke nå proxyen
- Slå Allow LAN Access til i Settings.
- Brug LAN-IP'en vist i Base URL-feltet, ikke
localhost. - Sørg for at begge enheder er på samme Wi-Fi-netværk, og at din firewall tillader indgående forbindelser på proxy-porten.
Streaming-svar ankommer på én gang
- Sørg for at din klient sender
"stream": truei JSON-body'en. - Nogle HTTP-biblioteker buffrer SSE som standard — deaktivér svarbuffering på klientsiden.
Privatliv
- API-nøgler gemmes krypteret med Fernet i
~/Library/Application Support/AIProxyServer/credentials.enc. Krypteringsnøglen imaster.keyhar 0600-rettigheder. - Bearer Token, når aktiveret, gemmes også kun i det krypterede hvelv og skrives aldrig til den almindelige indstillingsfil.
- Proxyen videresender kun forespørgsler til udbydere, du eksplicit har konfigureret. Den foretager ingen andre udgående opkald.
- Ingen telemetri, ingen analyser, ingen nedbrudsrapportering.
- Standard-netværksbinding er kun
127.0.0.1. LAN-eksponering er opt-in. - Samtaleindhold gemmes ikke. AIProxyServer videresender bytes og glemmer dem straks.