Kör en lokal OpenAI-kompatibel proxy för alla större molnbaserade AI-tjänster. Spara API-nycklar en gång och låt valfri klientapp — på dator, mobil eller webben — ansluta till http://localhost istället för att registrera nycklar i varje verktyg.
Kom i gång
1. Starta appen
Öppna AIProxyServer. Vid första starten startar proxyn automatiskt och lyssnar på port 8421 på din lokala dator. Huvudfönstret visar tre avsnitt:
- Proxyserver — aktuell status, bas-URL och en knapp för att starta eller stoppa lyssnaren
- Bearer-token — valfri växling för autentisering och visning av token
- Leverantörer — varje molnbaserad AI-leverantör som stöds, med en Ange API-nyckel knapp på varje rad
2. Lägg till din första API-nyckel
- Välj valfri leverantör i listan Leverantörer (till exempel OpenAI (ChatGPT))
- Klicka på Hämta API-nyckel för att öppna leverantörens konsol i webbläsaren och skapa eller kopiera en nyckel
- Klicka på Ange API-nyckel på samma rad och klistra in värdet i dialogrutan
- Klicka på Spara. Statusetiketten ändras till Konfigurerad med grönt
3. Anslut en klientapp
Peka valfri OpenAI-kompatibel klient mot proxyn. Bas-URL:en är http://localhost:8421/<provider>/v1. Leverantörssegmentet väljer vilket moln som tar emot begäran.
# Exempel: OpenAI Python SDK riktad mot proxyn
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 verkliga nyckeln. AIProxyServer bifogar uppströmsinloggningsuppgifterna när den vidarebefordrar begäran.
Översikt över gränssnittet
Proxyserverpanelen
| Fält | Beskrivning |
|---|---|
| Status | Körs när lyssnaren är aktiv, Stoppad annars. |
| Bas-URL | Adressen som klientappar ska använda, inklusive värdnamn och port. Klicka på Kopiera för att kopiera den till urklipp. |
| Starta-/Stoppa-knapp | Växla HTTP-lyssnaren utan att avsluta appen. |
Bearer-tokenpanelen
- Kräv Bearer-tokenautentisering — kryssruta som aktiverar eller inaktiverar autentisering. Av som standard för smidig lokal användning.
- Tokenfält — skrivskyddad visning av den aktuella tokenen. Visas som punkter; använd Kopiera för att hämta den.
- Generera om — utfärda en ny slumpmässig token. Befintliga klienter måste uppdateras med det nya värdet.
Leverantörspanelen
En rad per molnbaserad leverantör som stöds. Varje rad visar:
- Visningsnamnet (till exempel Claude (Anthropic))
- Konfigurationsstatus — grön Konfigurerad när en API-nyckel är sparad, grå Inte konfigurerad annars
- URL-sökvägen som dina klienter använder, t.ex.
/anthropic/v1/chat/completions - Ange API-nyckel — öppnar en dialogruta för att ange inloggningsuppgifter
- Hämta API-nyckel — öppnar leverantörens konsol i webbläsaren
Leverantörer som stöds
Elva molnbaserade AI-tjänster ingår. De flesta använder OpenAI Chat Completions-formatet direkt och proxas oförändrade. Tre (Anthropic, Gemini, ERNIE) använder egna protokoll; AIProxyServer översätter begäranden och svar direkt så att din klient alltid bara ser OpenAI-format.
| Leverantör | Sökvägsprefix | Det du behöver |
|---|---|---|
| OpenAI (ChatGPT) | /openai/v1 | API-nyckel från platform.openai.com |
| Claude (Anthropic) | /anthropic/v1 | API-nyckel från Anthropic Console |
| Gemini (Google) | /gemini/v1 | API-nyckel från Google AI Studio |
| Grok (xAI) | /grok/v1 | API-nyckel från xAI Console |
| Azure OpenAI (Copilot) | /copilot/v1 | API-nyckel samt URL till din distributionsslutpunkt |
| Perplexity | /perplexity/v1 | API-nyckel från Perplexity-inställningar |
| Groq | /groq/v1 | API-nyckel från Groq Cloud |
| DeepSeek | /deepseek/v1 | API-nyckel från DeepSeek Platform |
| Kimi (Moonshot) | /kimi/v1 | API-nyckel från Moonshot Console |
| Qwen (DashScope) | /qwen/v1 | API-nyckel från Alibaba DashScope |
| ERNIE (Baidu) | /ernie/v1 | Både API Key och Secret Key från Baidu Qianfan |
Leverantörsspecifika anmärkningar
- Azure OpenAI — klistra in hela distributionsslutpunkten i fältet Endpoint Base URL , till exempel
https://my-resource.openai.azure.com/openai/deployments/gpt-4o. Proxyn lägger till/chat/completions?api-version=2024-02-01automatiskt. - ERNIE — Baidu Qianfan använder OAuth, så både API Key och Secret Key krävs. AIProxyServer begär och cachelagrar åtkomsttoken i bakgrunden.
- Gemini — autentisering sker med URL-frågeparameter; proxyn lägger till den åt dig. Kvoter per minut för gratisnivån gäller fortfarande.
API-referens
Slutpunkter
| Metod | Sökväg | Beskrivning |
|---|---|---|
| GET | /health | Kontroll av tillgänglighet. Returnerar tjänststatus och leverantörslista. Ingen autentisering krävs. |
| GET | /v1/providers | Konfigurerade leverantörer och metadata. |
| GET | /<provider>/v1/models | Modellista för angiven leverantör i OpenAI-format. |
| POST | /<provider>/v1/chat/completions | OpenAI Chat Completions-begäran. Skicka stream:true för SSE. |
Strömning
När klienten skickar "stream": true, svarar proxyn 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- och Gemini-strömmar översätts till detta format så att alla klienter kan använda samma tolkare.
Autentiseringshuvud
När Kräv Bearer-tokenautentisering är på, skicka tokenen från huvudfönstret med varje begäran:
Authorization: Bearer <token-shown-in-app>
Inställningar
Öppna fönstret Inställningar från kugghjulsikonen i den nedre verktygsraden.
| Inställning | Standard | Beskrivning |
|---|---|---|
| Proxyport | 8421 | TCP-porten som lyssnaren binder till. Ändring kräver omstart av proxyn. |
| Starta server automatiskt | På | Starta proxyn när appen öppnas. |
| Tillåt LAN-åtkomst | Av | När den är av binder proxyn endast till 127.0.0.1. När den är på kan andra enheter på ditt Wi-Fi nå proxyn. |
| Kräv Bearer-token | Av | När den är på måste varje begäran innehålla tokenen som visas i huvudfönstret. Rekommenderas starkt när Tillåt LAN-åtkomst är på. |
Klientexempel
cURL
# OpenAI (direkt vidarebefordran)
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 samma 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", # ignoreras när Bearer Token är 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
// Använd valfri OpenAI-kompatibel Dart-klient
final client = OpenAIClient(
baseUrl: 'http://localhost:8421/anthropic/v1',
apiKey: '', // används inte när Bearer Token är av
);
localhost mot din Macs LAN-IP (visas i fältet Bas-URL när Tillåt LAN-åtkomst är på).Tips
- Låt Bearer Token vara av medan du utvecklar lokalt; aktivera den så snart du aktiverar LAN-åtkomst.
- Använd olika bas-URL:er per leverantör i klientkoden så att du kan byta leverantör genom att ändra en konstant.
- Proxyn startar automatiskt, men du kan tillfälligt stoppa den från huvudfönstret om en portkonflikt uppstår.
- Om en leverantörs gratisnivå hastighetsbegränsar dig vidarebefordras uppströmsfelmeddelandet ordagrant. Ingen logik för återförsök döljs för klienten.
- Slutpunkten
/v1/providersär användbar för att upptäcka vilka leverantörer som är konfigurerade vid körning.
Felsökning
Proxyn startar inte
- En annan process kanske redan använder port 8421. Ändra porten i Inställningar och starta om proxyn.
- Kontrollera systemloggen för felmeddelandet som visas vid start.
En begäran returnerar 401 Unauthorized
- Kravet på Bearer Token är på, men klienten skickade inte någon matchande
Authorization: Bearer ...rubrik. - Leverantörens egen API-nyckel kan vara ogiltig — uppströmsfelet vidarebefordras, så kontrollera meddelandetexten.
En begäran returnerar "API key is not configured"
- Öppna listan Leverantörer och klicka på Ange API-nyckel för den aktuella leverantören.
- För ERNIE måste både API Key och Secret Key fyllas i. För Azure OpenAI krävs även Endpoint Base URL.
Mobil enhet kan inte nå proxyn
- Aktivera Tillåt LAN-åtkomst i Inställningar.
- Använd LAN-IP:n som visas i fältet Bas-URL, inte
localhost. - Kontrollera att båda enheterna är på samma Wi-Fi-nätverk och att brandväggen tillåter inkommande anslutningar på proxyporten.
Strömmande svar kommer på en gång
- Kontrollera att klienten skickar
"stream": truei JSON-brödtexten. - Vissa HTTP-bibliotek buffrar SSE som standard — inaktivera svarsbuffering på klientsidan.
Integritet
- API-nycklar lagras krypterat med Fernet i
~/Library/Application Support/AIProxyServer/credentials.enc. Krypteringsnyckeln imaster.keyhar behörigheten 0600. - Bearer-tokenen lagras, när den är aktiverad, också endast i det krypterade valvet och skrivs aldrig till den vanliga inställningsfilen.
- Proxyn vidarebefordrar bara begäranden till leverantörer som du uttryckligen har konfigurerat. Den gör inga andra utgående anrop.
- Ingen telemetri, ingen analys, ingen kraschrapportering.
- Standardnätverksbindning är
127.0.0.1endast. LAN-exponering är valfri. - Konversationsinnehåll lagras inte. AIProxyServer vidarebefordrar byte och glömmer dem omedelbart.