AIProxyServer - Vodič

Pokrenite lokalni proxy poslužitelj kompatibilan s OpenAI-jem za sve glavne AI usluge u oblaku. API ključeve spremite jednom i omogućite svakoj klijentskoj aplikaciji — stolnoj, mobilnoj ili web-aplikaciji — da komunicira s http://localhost umjesto da ključeve registrirate u svakom alatu.


Početak rada

1. Pokrenite aplikaciju

Otvorite AIProxyServer. Pri prvom pokretanju proxy se automatski pokreće i sluša na priključku 8421 vašeg lokalnog računala. Glavni prozor prikazuje tri odjeljka:

  • Proxy poslužitelj — trenutačno stanje, osnovni URL i gumb za pokretanje ili zaustavljanje slušatelja
  • Token nositelja — neobavezna sklopka za provjeru autentičnosti i prikaz tokena
  • Davatelji usluga — svi podržani davatelji AI usluga u oblaku, svaki s gumbom Postavi API ključ u svojem retku

2. Dodajte prvi API ključ

  1. Odaberite bilo kojeg davatelja s popisa Davatelji usluga (na primjer OpenAI (ChatGPT))
  2. Kliknite Dohvati API ključ kako biste u pregledniku otvorili konzolu davatelja, a zatim izradite ili kopirajte ključ
  3. Kliknite Postavi API ključ u istom retku i zalijepite vrijednost u dijaloški okvir
  4. Kliknite Spremi. Oznaka stanja promijenit će se u Konfigurirano i postati zelena

3. Povežite klijentsku aplikaciju

Usmjerite bilo koji klijent kompatibilan s OpenAI-jem na proxy. Osnovni URL je http://localhost:8421/<provider>/v1. Segment davatelja određuje kojem se oblaku zahtjev šalje.

# Example: OpenAI Python SDK pointed at the proxy
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)

Klijent nikada ne vidi stvarni ključ. AIProxyServer dodaje pristupne podatke uzvodne usluge kada prosljeđuje zahtjev.


Pregled sučelja

Ploča proxy poslužitelja

PoljeOpis
StanjePokrenuto kada je slušatelj aktivan, Zaustavljeno u suprotnom.
Osnovni URLAdresa koju klijentske aplikacije trebaju upotrebljavati, uključujući naziv računala i priključak. Kliknite Kopiraj kako biste je kopirali u međuspremnik.
Gumb Pokreni/ZaustaviUključite ili isključite HTTP slušatelj bez zatvaranja aplikacije.

Ploča tokena nositelja

  • Zahtijevaj provjeru autentičnosti tokenom nositelja — potvrdni okvir kojim se provjera autentičnosti uključuje ili isključuje. Zadano je isključena radi jednostavne lokalne uporabe.
  • Polje tokena — prikaz trenutačnog tokena samo za čitanje. Prikazan je kao točkice; upotrijebite Kopiraj kako biste ga preuzeli.
  • Ponovno generiraj — izdaje novi nasumični token. Postojeći klijenti moraju se ažurirati novom vrijednošću.
Napomena: Ako omogućite Dopusti pristup putem LAN-a u Postavkama bez uključivanja tokena, svatko na istoj Wi-Fi mreži može upotrebljavati vaš proxy i API ključeve. Tekst savjeta ispod ploče tokena upozorava vas kada ste u tom stanju.

Ploča davatelja usluga

Za svakog podržanog davatelja usluge u oblaku prikazuje se jedan redak. Svaki redak sadrži:

  • Naziv za prikaz (na primjer Claude (Anthropic))
  • Stanje konfiguracije — zeleno Konfigurirano kada je API ključ spremljen, sivo Nije konfigurirano u suprotnom
  • URL putanju koju vaši klijenti upotrebljavaju, npr. /anthropic/v1/chat/completions
  • Postavi API ključ — otvara dijaloški okvir za unos pristupnih podataka
  • Dohvati API ključ — otvara konzolu davatelja u vašem pregledniku

Podržani davatelji usluga

Uključeno je jedanaest AI usluga u oblaku. Većina izvorno upotrebljava format OpenAI Chat Completions i prosljeđuje se bez izmjena. Tri usluge (Anthropic, Gemini, ERNIE) upotrebljavaju vlastite protokole; AIProxyServer u hodu prevodi zahtjeve i odgovore kako bi vaš klijent uvijek primao samo OpenAI strukture.

Davatelj uslugePrefiks ruteŠto vam je potrebno
OpenAI (ChatGPT)/openai/v1API ključ iz platform.openai.com
Claude (Anthropic)/anthropic/v1API ključ iz konzole Anthropic Console
Gemini (Google)/gemini/v1API ključ iz usluge Google AI Studio
Grok (xAI)/grok/v1API ključ iz konzole xAI Console
Azure OpenAI (Copilot)/copilot/v1API ključ i URL krajnje točke vaše implementacije
Perplexity/perplexity/v1API ključ iz postavki usluge Perplexity
Groq/groq/v1API ključ iz usluge Groq Cloud
DeepSeek/deepseek/v1API ključ s platforme DeepSeek Platform
Kimi (Moonshot)/kimi/v1API ključ iz konzole Moonshot Console
Qwen (DashScope)/qwen/v1API ključ iz usluge Alibaba DashScope
ERNIE (Baidu)/ernie/v1API Key i Secret Key iz usluge Baidu Qianfan

Napomene za pojedine davatelje

  • Azure OpenAI — zalijepite cijelu krajnju točku implementacije u polje Osnovni URL krajnje točke , na primjer https://my-resource.openai.azure.com/openai/deployments/gpt-4o. Proxy automatski dodaje /chat/completions?api-version=2024-02-01 .
  • ERNIE — Baidu Qianfan upotrebljava OAuth, pa su potrebni i API Key i Secret Key . AIProxyServer u pozadini traži i predmemorira pristupne tokene.
  • Gemini — provjera autentičnosti provodi se parametrom URL upita; proxy ga dodaje umjesto vas. I dalje vrijede ograničenja broja zahtjeva u minuti za besplatnu razinu.

Referenca za API

Krajnje točke

MetodaPutanjaOpis
GET/healthProvjera dostupnosti. Vraća stanje usluge i popis davatelja. Provjera autentičnosti nije potrebna.
GET/v1/providersKonfigurirani davatelji i metapodaci.
GET/<provider>/v1/modelsPopis modela za zadanog davatelja u OpenAI formatu.
POST/<provider>/v1/chat/completionsZahtjev OpenAI Chat Completions. Proslijedite stream:true za SSE.

Strujanje

Kada klijent pošalje "stream": true, proxy odgovara događajima koje šalje poslužitelj u OpenAI formatu:

data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant"},...}]}

data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"content":"Hello"},...}]}

data: [DONE]

Izvorni tokovi usluga Anthropic i Gemini prevode se u taj oblik kako bi svi klijenti mogli upotrebljavati jedan parser.

Zaglavlje za provjeru autentičnosti

Kada je Zahtijevaj provjeru autentičnosti tokenom nositelja uključeno, uz svaki zahtjev pošaljite token iz glavnog prozora:

Authorization: Bearer <token-shown-in-app>

Postavke

Otvorite prozor Postavke pomoću ikone zupčanika na donjoj alatnoj traci.

PostavkaZadanoOpis
Priključak proxyja8421TCP priključak na koji se slušatelj veže. Promjena zahtijeva ponovno pokretanje proxyja.
Automatski pokreni poslužiteljUključenoPokrenite proxy pri pokretanju aplikacije.
Dopusti pristup putem LAN-aIsključenoKada je isključeno, proxy se veže samo na 127.0.0.1. Kada je uključeno, drugi uređaji na vašoj Wi-Fi mreži mogu pristupiti proxyju.
Zahtijevaj token nositeljaIsključenoKada je uključeno, svaki zahtjev mora sadržavati token prikazan u glavnom prozoru. Snažno se preporučuje kad god je uključen pristup putem LAN-a.

Primjeri klijenata

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 the same OpenAI shape
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",  # ignored when Bearer Token is off
)
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

// Using any OpenAI-compatible Dart client
final client = OpenAIClient(
  baseUrl: 'http://localhost:8421/anthropic/v1',
  apiKey: '', // unused when Bearer Token is off
);
Mobilni uređaji na Wi-Fi mreži: zamijenite localhost LAN IP adresom svojeg Maca (prikazana je u polju Osnovni URL kada je Dopusti pristup putem LAN-a uključeno).

Savjeti

  • Ostavite token nositelja isključen dok lokalno razvijate; uključite ga čim omogućite pristup putem LAN-a.
  • U klijentskom kodu upotrebljavajte zaseban osnovni URL za svakog davatelja kako biste davatelja mogli promijeniti izmjenom jedne konstante.
  • Proxy se automatski pokreće, ali ga možete privremeno zaustaviti iz glavnog prozora ako dođe do sukoba priključaka.
  • Ako davateljeva besplatna razina ograniči broj vaših zahtjeva, poruka o uzvodnoj pogrešci prosljeđuje se neizmijenjena. Klijentu nije skrivena nikakva logika ponovnog pokušaja.
  • Krajnja točka /v1/providers korisna je za otkrivanje davatelja konfiguriranih tijekom izvođenja.

Rješavanje problema

Proxy se ne pokreće

  • Drugi proces možda već upotrebljava priključak 8421. Promijenite priključak u Postavkama i ponovno pokrenite proxy.
  • U zapisniku sustava provjerite poruku o pogrešci prikazanu pri pokretanju.

Zahtjev vraća 401 Unauthorized

  • Zahtjev za tokenom nositelja je uključen, ali klijent nije poslao odgovarajuće zaglavlje Authorization: Bearer ... .
  • Davateljev API ključ možda nije valjan — uzvodna pogreška prosljeđuje se pa provjerite tijelo poruke.

Zahtjev vraća „API key is not configured”

  • Otvorite popis Davatelji usluga i kliknite Postavi API ključ za dotičnog davatelja.
  • Za ERNIE moraju biti ispunjeni API Key i Secret Key. Za Azure OpenAI potreban je i osnovni URL krajnje točke.

Mobilni uređaj ne može pristupiti proxyju

  • Uključite Dopusti pristup putem LAN-a u Postavkama.
  • Upotrijebite LAN IP adresu prikazanu u polju Osnovni URL, a ne localhost.
  • Provjerite jesu li oba uređaja na istoj Wi-Fi mreži i dopušta li vatrozid dolazne veze na priključku proxyja.

Strujani odgovori stižu odjednom

  • Provjerite šalje li vaš klijent "stream": true u JSON tijelu.
  • Neke HTTP biblioteke zadano pohranjuju SSE u međuspremnik — onemogućite pohranu odgovora u međuspremnik na strani klijenta.

Privatnost

  • API ključevi pohranjeni su uz Fernet šifriranje u datoteci ~/Library/Application Support/AIProxyServer/credentials.enc. Ključ za šifriranje u datoteci master.key ima dopuštenja 0600.
  • Kada je omogućen, token nositelja također se pohranjuje samo u šifrirani trezor i nikada se ne zapisuje u običnu datoteku postavki.
  • Proxy prosljeđuje zahtjeve samo davateljima koje ste izričito konfigurirali. Ne uspostavlja nikakve druge izlazne veze.
  • Bez telemetrije, analitike i izvješća o rušenju.
  • Zadano mrežno vezanje je samo 127.0.0.1 . Izlaganje LAN-u mora se izričito omogućiti.
  • Sadržaj razgovora ne pohranjuje se. AIProxyServer prosljeđuje bajtove i odmah ih zaboravlja.