AIProxyServer - Veiledning

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

  1. Velg en leverandør fra Providers-listen (for eksempel OpenAI (ChatGPT))
  2. Klikk Get API key for å åpne leverandørens konsoll i nettleseren, og opprett eller kopier en nøkkel
  3. Klikk Set API Key på samme rad og lim inn verdien i dialogen
  4. 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

FeltBeskrivelse
StatusRunning når lytteren er aktiv, ellers Stopped.
Base URLAdressen klientapper skal bruke, inkludert vertsnavn og port. Klikk Copy for å kopiere den til utklippstavlen.
Start / Stop-knappSlå 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.
Merk: Hvis du aktiverer Allow LAN Access i Settings uten å slå på tokenet, kan hvem som helst på samme Wi-Fi-nettverk bruke proxyen og API-nøklene dine. Hintteksten under tokenpanelet advarer deg når du er i denne tilstanden.

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ørRuteprefiksHva du trenger
OpenAI (ChatGPT)/openai/v1API-nøkkel fra platform.openai.com
Claude (Anthropic)/anthropic/v1API-nøkkel fra Anthropic Console
Gemini (Google)/gemini/v1API-nøkkel fra Google AI Studio
Grok (xAI)/grok/v1API-nøkkel fra xAI Console
Azure OpenAI (Copilot)/copilot/v1API-nøkkel pluss deployment-endpoint-URL
Perplexity/perplexity/v1API-nøkkel fra Perplexity-innstillinger
Groq/groq/v1API-nøkkel fra Groq Cloud
DeepSeek/deepseek/v1API-nøkkel fra DeepSeek Platform
Kimi (Moonshot)/kimi/v1API-nøkkel fra Moonshot Console
Qwen (DashScope)/qwen/v1API-nøkkel fra Alibaba DashScope
ERNIE (Baidu)/ernie/v1Bå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-01 automatisk.
  • 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

MetodeStiBeskrivelse
GET/healthLiveness-sjekk. Returnerer tjenestestatus og leverandørliste. Ingen autentisering nødvendig.
GET/v1/providersKonfigurerte leverandører og metadata.
GET/<provider>/v1/modelsModelliste for den gitte leverandøren, i OpenAI-format.
POST/<provider>/v1/chat/completionsOpenAI 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.

InnstillingStandardBeskrivelse
Proxy Port8421TCP-porten lytteren binder seg til. Endring krever omstart av proxyen.
Auto Start ServerOnStart proxyen når appen starter.
Allow LAN AccessOffNå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 TokenOffNå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
);
Mobile enheter på Wi-Fi: erstatt 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": true i 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 i master.key har 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.