AIProxyServer - Przewodnik

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

  1. Wybierz dowolnego dostawcę z listy Dostawcy (na przykład OpenAI (ChatGPT))
  2. Kliknij Pobierz klucz API , aby otworzyć konsolę dostawcy w przeglądarce, a następnie utwórz lub skopiuj klucz
  3. Kliknij Ustaw klucz API w tym samym wierszu i wklej wartość w oknie dialogowym
  4. 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

PoleOpis
StatusDziała gdy nasłuch jest aktywny, Zatrzymano w przeciwnym razie.
Bazowy adres URLAdres, którego powinny używać aplikacje klienckie, wraz z nazwą hosta i portem. Kliknij Kopiuj , aby skopiować go do schowka.
Przycisk Start / StopWłą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ą.
Uwaga: Jeśli włączysz Zezwalaj na dostęp z sieci LAN w Ustawieniach bez włączenia tokena, każdy w tej samej sieci Wi-Fi może korzystać z Twojego proxy i Twoich kluczy API. Podpowiedź pod panelem tokena ostrzega, gdy znajdziesz się w takiej sytuacji.

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.

DostawcaPrefiks trasyCzego potrzebujesz
OpenAI (ChatGPT)/openai/v1Klucz API z platform.openai.com
Claude (Anthropic)/anthropic/v1Klucz API z Anthropic Console
Gemini (Google)/gemini/v1Klucz API z Google AI Studio
Grok (xAI)/grok/v1Klucz API z xAI Console
Azure OpenAI (Copilot)/copilot/v1Klucz API oraz adres URL punktu końcowego wdrożenia
Perplexity/perplexity/v1Klucz API z ustawień Perplexity
Groq/groq/v1Klucz API z Groq Cloud
DeepSeek/deepseek/v1Klucz API z DeepSeek Platform
Kimi (Moonshot)/kimi/v1Klucz API z Moonshot Console
Qwen (DashScope)/qwen/v1Klucz API z Alibaba DashScope
ERNIE (Baidu)/ernie/v1Zaró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-01 automatycznie.
  • 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żkaOpis
GET/healthSprawdzenie dostępności. Zwraca status usługi i listę dostawców. Nie wymaga uwierzytelnienia.
GET/v1/providersSkonfigurowani dostawcy i metadane.
GET/<provider>/v1/modelsLista 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.

UstawienieDomyślnieOpis
Port proxy8421Port TCP, na którym nasłuchuje serwer. Zmiana wymaga ponownego uruchomienia proxy.
Automatyczne uruchamianie serweraWł.Uruchamia proxy przy starcie aplikacji.
Zezwalaj na dostęp z sieci LANWył.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 BearerWył.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
);
Urządzenia mobilne w sieci Wi-Fi: zastąp 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/providers przydaje 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": true w 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 pliku master.key ma 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.