Uruchom lokalny serwer proxy zgodny z OpenAI dla wszystkich najważniejszych usług AI w chmurze. Zapisz klucze API raz i pozwól dowolnej aplikacji klienckiej — na komputerze, telefonie lub w przeglądarce — łączyć się z http://localhost zamiast rejestrować klucze w każdym narzędziu z osobna.
Pierwsze kroki
1. Uruchom aplikację
Otwórz AIProxyServer. Przy pierwszym uruchomieniu proxy startuje automatycznie i nasłuchuje na porcie 8421 komputera lokalnego. Okno główne zawiera trzy sekcje:
- Serwer proxy — bieżący status, bazowy adres URL oraz przycisk uruchamiania i zatrzymywania nasłuchu
- Token Bearer — opcjonalny przełącznik uwierzytelniania i podgląd tokena
- Dostawcy — wszyscy obsługiwani dostawcy AI w chmurze, z przyciskiem Ustaw klucz API w każdym wierszu
2. Dodaj pierwszy klucz API
- Wybierz dowolnego dostawcę z listy Dostawcy (na przykład OpenAI (ChatGPT))
- Kliknij Pobierz klucz API , aby otworzyć konsolę dostawcy w przeglądarce, a następnie utwórz lub skopiuj klucz
- Kliknij Ustaw klucz API w tym samym wierszu i wklej wartość w oknie dialogowym
- Kliknij Zapisz. Etykieta statusu zmieni się na Skonfigurowano w kolorze zielonym
3. Podłącz aplikację kliencką
Skieruj dowolnego klienta zgodnego z OpenAI na proxy. Bazowy adres URL to http://localhost:8421/<provider>/v1. Segment z nazwą dostawcy decyduje, która chmura otrzyma żądanie.
# Przykład: SDK OpenAI dla Pythona skierowany na 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)
Klient nigdy nie widzi prawdziwego klucza. AIProxyServer dołącza dane uwierzytelniające dostawcy dopiero przy przekazywaniu żądania.
Przegląd interfejsu
Panel serwera proxy
| Pole | Opis |
|---|---|
| Status | Działa gdy nasłuch jest aktywny, Zatrzymano w przeciwnym razie. |
| Bazowy adres URL | Adres, którego powinny używać aplikacje klienckie, wraz z nazwą hosta i portem. Kliknij Kopiuj , aby skopiować go do schowka. |
| Przycisk Start / Stop | Włącza i wyłącza nasłuch HTTP bez zamykania aplikacji. |
Panel tokena Bearer
- Wymagaj uwierzytelniania tokenem Bearer — pole wyboru włączające lub wyłączające uwierzytelnianie. Domyślnie wyłączone, aby ułatwić pracę lokalną.
- Pole tokena — podgląd bieżącego tokena tylko do odczytu. Wyświetlany jako kropki; użyj Kopiuj , aby go pobrać.
- Wygeneruj ponownie — tworzy nowy losowy token. Istniejących klientów trzeba zaktualizować nową wartością.
Panel dostawców
Jeden wiersz na każdego obsługiwanego dostawcę chmurowego. W każdym wierszu widoczne są:
- Nazwa wyświetlana (na przykład Claude (Anthropic))
- Status konfiguracji — zielone Skonfigurowano gdy klucz API jest zapisany, szare Nie skonfigurowano w przeciwnym razie
- Ścieżka URL używana przez klientów, np.
/anthropic/v1/chat/completions - Ustaw klucz API — otwiera okno wprowadzania danych uwierzytelniających
- Pobierz klucz API — otwiera konsolę dostawcy w przeglądarce
Obsługiwani dostawcy
W komplecie znajduje się jedenaście chmurowych usług AI. Większość natywnie korzysta z formatu OpenAI Chat Completions i jest przekazywana bez zmian. Trzy z nich (Anthropic, Gemini, ERNIE) mówią własnymi protokołami; AIProxyServer tłumaczy żądania i odpowiedzi w locie, więc Twój klient widzi wyłącznie struktury OpenAI.
| Dostawca | Prefiks trasy | Czego potrzebujesz |
|---|---|---|
| OpenAI (ChatGPT) | /openai/v1 | Klucz API z platform.openai.com |
| Claude (Anthropic) | /anthropic/v1 | Klucz API z Anthropic Console |
| Gemini (Google) | /gemini/v1 | Klucz API z Google AI Studio |
| Grok (xAI) | /grok/v1 | Klucz API z xAI Console |
| Azure OpenAI (Copilot) | /copilot/v1 | Klucz API oraz adres URL punktu końcowego wdrożenia |
| Perplexity | /perplexity/v1 | Klucz API z ustawień Perplexity |
| Groq | /groq/v1 | Klucz API z Groq Cloud |
| DeepSeek | /deepseek/v1 | Klucz API z DeepSeek Platform |
| Kimi (Moonshot) | /kimi/v1 | Klucz API z Moonshot Console |
| Qwen (DashScope) | /qwen/v1 | Klucz API z Alibaba DashScope |
| ERNIE (Baidu) | /ernie/v1 | Zarówno API Key, jak i Secret Key z Baidu Qianfan |
Uwagi dotyczące poszczególnych dostawców
- Azure OpenAI — wklej pełny adres punktu końcowego wdrożenia w pole Endpoint Base URL , na przykład
https://my-resource.openai.azure.com/openai/deployments/gpt-4o. Proxy dopisuje/chat/completions?api-version=2024-02-01automatycznie. - ERNIE — Baidu Qianfan korzysta z OAuth, więc wymagane są zarówno API Key jak i Secret Key . AIProxyServer pobiera i buforuje tokeny dostępu w tle.
- Gemini — uwierzytelnianie odbywa się przez parametr zapytania w adresie URL; proxy dodaje go za Ciebie. Limity minutowe darmowego planu nadal obowiązują.
Dokumentacja API
Punkty końcowe
| Metoda | Ścieżka | Opis |
|---|---|---|
| GET | /health | Sprawdzenie dostępności. Zwraca status usługi i listę dostawców. Nie wymaga uwierzytelnienia. |
| GET | /v1/providers | Skonfigurowani dostawcy i metadane. |
| GET | /<provider>/v1/models | Lista modeli danego dostawcy w formacie OpenAI. |
| POST | /<provider>/v1/chat/completions | Żądanie OpenAI Chat Completions. Przekaż stream:true , aby użyć SSE. |
Strumieniowanie
Gdy klient wysyła "stream": true, proxy odpowiada zdarzeniami Server-Sent Events w formacie OpenAI:
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant"},...}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"content":"Hello"},...}]}
data: [DONE]
Natywne strumienie Anthropic i Gemini są tłumaczone na tę postać, dzięki czemu wszyscy klienci mogą używać jednego parsera.
Nagłówek uwierzytelniania
Gdy Wymagaj uwierzytelniania tokenem Bearer jest włączone, wysyłaj token z okna głównego przy każdym żądaniu:
Authorization: Bearer <token-shown-in-app>
Ustawienia
Otwórz okno Ustawień, klikając ikonę koła zębatego na dolnym pasku narzędzi.
| Ustawienie | Domyślnie | Opis |
|---|---|---|
| Port proxy | 8421 | Port TCP, na którym nasłuchuje serwer. Zmiana wymaga ponownego uruchomienia proxy. |
| Automatyczne uruchamianie serwera | Wł. | Uruchamia proxy przy starcie aplikacji. |
| Zezwalaj na dostęp z sieci LAN | Wył. | Gdy wyłączone, proxy nasłuchuje wyłącznie na 127.0.0.1. Gdy włączone, inne urządzenia w sieci Wi-Fi mogą łączyć się z proxy. |
| Wymagaj tokena Bearer | Wył. | Gdy włączone, każde żądanie musi zawierać token wyświetlany w oknie głównym. Zdecydowanie zalecane zawsze, gdy włączony jest dostęp z sieci LAN. |
Przykłady klientów
cURL
# OpenAI (przekazywanie bezpośrednie)
curl http://localhost:8421/openai/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Hello"}]
}'
# Claude w tej samej strukturze OpenAI
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", # ignorowane, gdy token Bearer jest wyłączony
)
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
// Dowolny klient Dart zgodny z OpenAI
final client = OpenAIClient(
baseUrl: 'http://localhost:8421/anthropic/v1',
apiKey: '', // nieużywane, gdy token Bearer jest wyłączony
);
localhost adresem IP Maca w sieci LAN (widocznym w polu Bazowy adres URL, gdy Zezwalaj na dostęp z sieci LAN jest włączone).Wskazówki
- Podczas pracy lokalnej pozostaw token Bearer wyłączony; włącz go w chwili udostępnienia proxy w sieci LAN.
- W kodzie klienta używaj osobnych bazowych adresów URL dla każdego dostawcy, aby zmieniać dostawcę przez podmianę jednej stałej.
- Proxy uruchamia się automatycznie, ale w razie konfliktu portów możesz je tymczasowo zatrzymać z okna głównego.
- Jeśli darmowy plan dostawcy ograniczy liczbę żądań, komunikat błędu zostanie przekazany dosłownie. Żadna logika ponawiania nie jest ukryta przed klientem.
- Punkt końcowy
/v1/providersprzydaje się do sprawdzenia w czasie działania, którzy dostawcy są skonfigurowani.
Rozwiązywanie problemów
Proxy nie uruchamia się
- Port 8421 może być już zajęty przez inny proces. Zmień port w Ustawieniach i uruchom proxy ponownie.
- Sprawdź dziennik systemowy pod kątem komunikatu błędu wyświetlonego przy starcie.
Żądanie zwraca 401 Unauthorized
- Wymaganie tokena Bearer jest włączone, ale klient nie wysłał pasującego nagłówka
Authorization: Bearer .... - Klucz API dostawcy może być nieprawidłowy — błąd z serwera źródłowego jest przekazywany, więc sprawdź treść komunikatu.
Żądanie zwraca „API key is not configured”
- Otwórz listę Dostawcy i kliknij Ustaw klucz API przy danym dostawcy.
- W przypadku ERNIE trzeba wypełnić zarówno API Key, jak i Secret Key. W przypadku Azure OpenAI wymagany jest także Endpoint Base URL.
Urządzenie mobilne nie może połączyć się z proxy
- Włącz Zezwalaj na dostęp z sieci LAN w Ustawieniach.
- Użyj adresu IP w sieci LAN widocznego w polu Bazowy adres URL, a nie
localhost. - Upewnij się, że oba urządzenia są w tej samej sieci Wi-Fi, a zapora sieciowa zezwala na połączenia przychodzące na porcie proxy.
Odpowiedzi strumieniowe przychodzą wszystkie naraz
- Upewnij się, że klient wysyła
"stream": truew treści JSON. - Niektóre biblioteki HTTP domyślnie buforują SSE — wyłącz buforowanie odpowiedzi po stronie klienta.
Prywatność
- Klucze API są przechowywane w postaci zaszyfrowanej algorytmem Fernet w pliku
~/Library/Application Support/AIProxyServer/credentials.enc. Klucz szyfrowania w plikumaster.keyma uprawnienia 0600. - Token Bearer, gdy jest włączony, również jest przechowywany wyłącznie w zaszyfrowanym magazynie i nigdy nie trafia do zwykłego pliku ustawień.
- Proxy przekazuje żądania tylko do dostawców, których jawnie skonfigurowano. Nie wykonuje żadnych innych połączeń wychodzących.
- Bez telemetrii, bez analityki, bez raportowania awarii.
- Domyślnie serwer nasłuchuje wyłącznie na
127.0.0.1. Udostępnienie w sieci LAN wymaga świadomego włączenia. - Treść rozmów nie jest zapisywana. AIProxyServer przekazuje bajty i natychmiast o nich zapomina.