AIProxyServer - Guide

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

  1. Välj valfri leverantör i listan Leverantörer (till exempel OpenAI (ChatGPT))
  2. Klicka på Hämta API-nyckel för att öppna leverantörens konsol i webbläsaren och skapa eller kopiera en nyckel
  3. Klicka på Ange API-nyckel på samma rad och klistra in värdet i dialogrutan
  4. 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ältBeskrivning
StatusKörs när lyssnaren är aktiv, Stoppad annars.
Bas-URLAdressen som klientappar ska använda, inklusive värdnamn och port. Klicka på Kopiera för att kopiera den till urklipp.
Starta-/Stoppa-knappVä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.
Observera: Om du aktiverar Tillåt LAN-åtkomst i Inställningar utan att aktivera tokenen kan vem som helst på samma Wi-Fi-nätverk använda din proxy och dina API-nycklar. Hjälptexten under tokenpanelen varnar dig när du är i det läget.

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örSökvägsprefixDet du behöver
OpenAI (ChatGPT)/openai/v1API-nyckel från platform.openai.com
Claude (Anthropic)/anthropic/v1API-nyckel från Anthropic Console
Gemini (Google)/gemini/v1API-nyckel från Google AI Studio
Grok (xAI)/grok/v1API-nyckel från xAI Console
Azure OpenAI (Copilot)/copilot/v1API-nyckel samt URL till din distributionsslutpunkt
Perplexity/perplexity/v1API-nyckel från Perplexity-inställningar
Groq/groq/v1API-nyckel från Groq Cloud
DeepSeek/deepseek/v1API-nyckel från DeepSeek Platform
Kimi (Moonshot)/kimi/v1API-nyckel från Moonshot Console
Qwen (DashScope)/qwen/v1API-nyckel från Alibaba DashScope
ERNIE (Baidu)/ernie/v1Bå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-01 automatiskt.
  • 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

MetodSökvägBeskrivning
GET/healthKontroll av tillgänglighet. Returnerar tjänststatus och leverantörslista. Ingen autentisering krävs.
GET/v1/providersKonfigurerade leverantörer och metadata.
GET/<provider>/v1/modelsModellista för angiven leverantör i OpenAI-format.
POST/<provider>/v1/chat/completionsOpenAI 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ällningStandardBeskrivning
Proxyport8421TCP-porten som lyssnaren binder till. Ändring kräver omstart av proxyn.
Starta server automatisktStarta proxyn när appen öppnas.
Tillåt LAN-åtkomstAvNä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-tokenAvNä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
);
Mobila enheter på Wi-Fi: byt ut 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": true i 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 i master.key har 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.1 endast. LAN-exponering är valfri.
  • Konversationsinnehåll lagras inte. AIProxyServer vidarebefordrar byte och glömmer dem omedelbart.