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č
- Odaberite bilo kojeg davatelja s popisa Davatelji usluga (na primjer OpenAI (ChatGPT))
- Kliknite Dohvati API ključ kako biste u pregledniku otvorili konzolu davatelja, a zatim izradite ili kopirajte ključ
- Kliknite Postavi API ključ u istom retku i zalijepite vrijednost u dijaloški okvir
- 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
| Polje | Opis |
|---|---|
| Stanje | Pokrenuto kada je slušatelj aktivan, Zaustavljeno u suprotnom. |
| Osnovni URL | Adresa 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/Zaustavi | Uključ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.
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 usluge | Prefiks rute | Što vam je potrebno |
|---|---|---|
| OpenAI (ChatGPT) | /openai/v1 | API ključ iz platform.openai.com |
| Claude (Anthropic) | /anthropic/v1 | API ključ iz konzole Anthropic Console |
| Gemini (Google) | /gemini/v1 | API ključ iz usluge Google AI Studio |
| Grok (xAI) | /grok/v1 | API ključ iz konzole xAI Console |
| Azure OpenAI (Copilot) | /copilot/v1 | API ključ i URL krajnje točke vaše implementacije |
| Perplexity | /perplexity/v1 | API ključ iz postavki usluge Perplexity |
| Groq | /groq/v1 | API ključ iz usluge Groq Cloud |
| DeepSeek | /deepseek/v1 | API ključ s platforme DeepSeek Platform |
| Kimi (Moonshot) | /kimi/v1 | API ključ iz konzole Moonshot Console |
| Qwen (DashScope) | /qwen/v1 | API ključ iz usluge Alibaba DashScope |
| ERNIE (Baidu) | /ernie/v1 | API 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
| Metoda | Putanja | Opis |
|---|---|---|
| GET | /health | Provjera dostupnosti. Vraća stanje usluge i popis davatelja. Provjera autentičnosti nije potrebna. |
| GET | /v1/providers | Konfigurirani davatelji i metapodaci. |
| GET | /<provider>/v1/models | Popis modela za zadanog davatelja u OpenAI formatu. |
| POST | /<provider>/v1/chat/completions | Zahtjev 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.
| Postavka | Zadano | Opis |
|---|---|---|
| Priključak proxyja | 8421 | TCP priključak na koji se slušatelj veže. Promjena zahtijeva ponovno pokretanje proxyja. |
| Automatski pokreni poslužitelj | Uključeno | Pokrenite proxy pri pokretanju aplikacije. |
| Dopusti pristup putem LAN-a | Isključeno | Kada 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 nositelja | Isključeno | Kada 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
);
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/providerskorisna 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": trueu 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 datotecimaster.keyima 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.