AIProxyServer - Οδηγός

Εκτελέστε έναν τοπικό διακομιστή μεσολάβησης συμβατό με OpenAI για κάθε σημαντική υπηρεσία AI στο cloud. Αποθηκεύστε τα κλειδιά API μία φορά και επιτρέψτε σε κάθε εφαρμογή-πελάτη — επιτραπέζια, κινητή ή διαδικτυακή — να επικοινωνεί με http://localhost αντί να καταχωρίζετε κλειδιά σε κάθε εργαλείο.


Ξεκινήστε

1. Εκκινήστε την εφαρμογή

Ανοίξτε το AIProxyServer. Κατά την πρώτη εκκίνηση, ο διακομιστής μεσολάβησης ξεκινά αυτόματα και ακούει στη θύρα 8421 του τοπικού σας υπολογιστή. Το κύριο παράθυρο εμφανίζει τρεις ενότητες:

  • Διακομιστής μεσολάβησης — τρέχουσα κατάσταση, βασικό URL και κουμπί για έναρξη ή διακοπή της ακρόασης
  • Διακριτικό Bearer — προαιρετικός διακόπτης ελέγχου ταυτότητας και εμφάνιση διακριτικού
  • Πάροχοι — κάθε υποστηριζόμενος πάροχος AI στο cloud, με ένα κουμπί Ορισμός κλειδιού API ανά γραμμή

2. Προσθέστε το πρώτο σας κλειδί API

  1. Επιλέξτε οποιονδήποτε πάροχο από τη λίστα Παρόχων (για παράδειγμα OpenAI (ChatGPT))
  2. Κάντε κλικ στο Λήψη κλειδιού API για να ανοίξετε την κονσόλα του παρόχου στο πρόγραμμα περιήγησής σας και, στη συνέχεια, δημιουργήστε ή αντιγράψτε ένα κλειδί
  3. Κάντε κλικ στο Ορισμός κλειδιού API στην ίδια γραμμή και επικολλήστε την τιμή στο παράθυρο διαλόγου
  4. Κάντε κλικ στο Αποθήκευση. Η ετικέτα κατάστασης αλλάζει σε Ρυθμίστηκε με πράσινο χρώμα

3. Συνδέστε μια εφαρμογή-πελάτη

Ρυθμίστε οποιονδήποτε πελάτη συμβατό με OpenAI ώστε να χρησιμοποιεί τον διακομιστή μεσολάβησης. Το Βασικό URL είναι http://localhost:8421/<provider>/v1. Το τμήμα παρόχου καθορίζει ποιο cloud λαμβάνει το αίτημα.

# Παράδειγμα: OpenAI Python SDK που δείχνει στον διακομιστή μεσολάβησης
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)

Ο πελάτης δεν βλέπει ποτέ το πραγματικό κλειδί. Το AIProxyServer προσθέτει τα διαπιστευτήρια ανάντη όταν προωθεί το αίτημα.


Επισκόπηση διεπαφής

Πίνακας διακομιστή μεσολάβησης

ΠεδίοΠεριγραφή
ΚατάστασηΣε λειτουργία όταν η ακρόαση είναι ενεργή, Διακόπηκε διαφορετικά.
Βασικό URLΗ διεύθυνση που πρέπει να χρησιμοποιούν οι εφαρμογές-πελάτες, συμπεριλαμβανομένων του ονόματος κεντρικού υπολογιστή και της θύρας. Κάντε κλικ στο Αντιγραφή για να την αντιγράψετε στο πρόχειρο.
Κουμπί Έναρξη / ΔιακοπήΕναλλάξτε την ακρόαση HTTP χωρίς να κλείσετε την εφαρμογή.

Πίνακας διακριτικού Bearer

  • Απαίτηση ελέγχου ταυτότητας με διακριτικό Bearer — πλαίσιο ελέγχου που ενεργοποιεί ή απενεργοποιεί τον έλεγχο ταυτότητας. Απενεργοποιημένο από προεπιλογή για εύκολη τοπική χρήση.
  • Πεδίο διακριτικού — εμφάνιση μόνο για ανάγνωση του τρέχοντος διακριτικού. Εμφανίζεται ως τελείες· χρησιμοποιήστε Αντιγραφή για να το αντιγράψετε.
  • Επαναδημιουργία — εκδίδει νέο τυχαίο διακριτικό. Οι υπάρχοντες πελάτες πρέπει να ενημερωθούν με τη νέα τιμή.
Προσοχή: Εάν ενεργοποιήσετε την επιλογή Να επιτρέπεται πρόσβαση LAN στις Ρυθμίσεις χωρίς να ενεργοποιήσετε το διακριτικό, οποιοσδήποτε στο ίδιο δίκτυο Wi-Fi μπορεί να χρησιμοποιήσει τον διακομιστή μεσολάβησής σας και τα κλειδιά API σας. Το κείμενο υπόδειξης κάτω από τον πίνακα διακριτικού σάς προειδοποιεί όταν βρίσκεστε σε αυτήν την κατάσταση.

Πίνακας παρόχων

Μία γραμμή για κάθε υποστηριζόμενο πάροχο cloud. Κάθε γραμμή εμφανίζει:

  • Το εμφανιζόμενο όνομα (για παράδειγμα Claude (Anthropic))
  • Κατάσταση ρύθμισης — πράσινο Ρυθμίστηκε όταν έχει αποθηκευτεί ένα κλειδί API, γκρι Δεν έχει ρυθμιστεί διαφορετικά
  • Η διαδρομή URL που χρησιμοποιούν οι πελάτες σας, π.χ. /anthropic/v1/chat/completions
  • Ορισμός κλειδιού API — ανοίγει ένα παράθυρο διαλόγου για εισαγωγή διαπιστευτηρίων
  • Λήψη κλειδιού API — ανοίγει την κονσόλα του παρόχου στο πρόγραμμα περιήγησής σας

Υποστηριζόμενοι πάροχοι

Περιλαμβάνονται έντεκα υπηρεσίες AI στο cloud. Οι περισσότερες χρησιμοποιούν εγγενώς τη μορφή OpenAI Chat Completions και προωθούνται ως έχουν. Τρεις (Anthropic, Gemini, ERNIE) χρησιμοποιούν δικά τους πρωτόκολλα· το AIProxyServer μεταφράζει αιτήματα και απαντήσεις δυναμικά, ώστε ο πελάτης σας να βλέπει μόνο μορφές OpenAI.

ΠάροχοςΠρόθεμα διαδρομήςΤι χρειάζεστε
OpenAI (ChatGPT)/openai/v1Κλειδί API από platform.openai.com
Claude (Anthropic)/anthropic/v1Κλειδί API από την Anthropic Console
Gemini (Google)/gemini/v1Κλειδί API από το Google AI Studio
Grok (xAI)/grok/v1Κλειδί API από την xAI Console
Azure OpenAI (Copilot)/copilot/v1Κλειδί API και URL τελικού σημείου ανάπτυξής σας
Perplexity/perplexity/v1Κλειδί API από τις ρυθμίσεις του Perplexity
Groq/groq/v1Κλειδί API από το Groq Cloud
DeepSeek/deepseek/v1Κλειδί API από το DeepSeek Platform
Kimi (Moonshot)/kimi/v1Κλειδί API από την Moonshot Console
Qwen (DashScope)/qwen/v1Κλειδί API από το Alibaba DashScope
ERNIE (Baidu)/ernie/v1Τόσο API Key όσο και Secret Key από το Baidu Qianfan

Σημειώσεις για συγκεκριμένους παρόχους

  • Azure OpenAI — επικολλήστε το πλήρες τελικό σημείο ανάπτυξης στο Βασικό URL τελικού σημείου πεδίο, για παράδειγμα https://my-resource.openai.azure.com/openai/deployments/gpt-4o. Ο διακομιστής μεσολάβησης προσθέτει το /chat/completions?api-version=2024-02-01 αυτόματα.
  • ERNIE — το Baidu Qianfan χρησιμοποιεί OAuth, επομένως απαιτούνται και τα δύο API Key και Secret Key . Το AIProxyServer ζητά και αποθηκεύει προσωρινά διακριτικά πρόσβασης στο παρασκήνιο.
  • Gemini — ο έλεγχος ταυτότητας γίνεται μέσω παραμέτρου ερωτήματος URL· ο διακομιστής μεσολάβησης την προσθέτει για εσάς. Εξακολουθούν να ισχύουν τα όρια ανά λεπτό του δωρεάν επιπέδου.

Αναφορά API

Τελικά σημεία

ΜέθοδοςΔιαδρομήΠεριγραφή
GET/healthΈλεγχος λειτουργικότητας. Επιστρέφει την κατάσταση της υπηρεσίας και τη λίστα παρόχων. Δεν απαιτείται έλεγχος ταυτότητας.
GET/v1/providersΡυθμισμένοι πάροχοι και μεταδεδομένα.
GET/<provider>/v1/modelsΛίστα μοντέλων για τον συγκεκριμένο πάροχο, σε μορφή OpenAI.
POST/<provider>/v1/chat/completionsΑίτημα OpenAI Chat Completions. Περάστε stream:true για SSE.

Ροή δεδομένων

Όταν ο πελάτης στέλνει "stream": true, ο διακομιστής μεσολάβησης απαντά με Server-Sent Events στη μορφή του 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]

Οι εγγενείς ροές Anthropic και Gemini μεταφράζονται σε αυτήν τη μορφή, ώστε όλοι οι πελάτες να μπορούν να χρησιμοποιούν έναν μόνο αναλυτή.

Κεφαλίδα ελέγχου ταυτότητας

Όταν η επιλογή Απαίτηση ελέγχου ταυτότητας με διακριτικό Bearer είναι ενεργή, στείλτε το διακριτικό από το κύριο παράθυρο με κάθε αίτημα:

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

Ρυθμίσεις

Ανοίξτε το παράθυρο Ρυθμίσεων από το εικονίδιο γραναζιού στην κάτω γραμμή εργαλείων.

ΡύθμισηΠροεπιλογήΠεριγραφή
Θύρα διακομιστή μεσολάβησης8421Θύρα TCP στην οποία δεσμεύεται η ακρόαση. Η αλλαγή απαιτεί επανεκκίνηση του διακομιστή μεσολάβησης.
Αυτόματη εκκίνηση διακομιστήΕνεργόΕκκινήστε τον διακομιστή μεσολάβησης κατά την εκκίνηση της εφαρμογής.
Να επιτρέπεται πρόσβαση LANΑνενεργόΌταν είναι ανενεργό, ο διακομιστής μεσολάβησης δεσμεύεται μόνο στη διεύθυνση 127.0.0.1. Όταν είναι ενεργό, άλλες συσκευές στο Wi-Fi σας μπορούν να φτάσουν τον διακομιστή μεσολάβησης.
Απαίτηση διακριτικού BearerΑνενεργόΌταν είναι ενεργό, κάθε αίτημα πρέπει να περιλαμβάνει το διακριτικό που εμφανίζεται στο κύριο παράθυρο. Συνιστάται ανεπιφύλακτα όποτε είναι ενεργό το Allow LAN Access.

Παραδείγματα πελάτη

cURL

# OpenAI (απευθείας προώθηση)
curl http://localhost:8421/openai/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

# Claude μέσω της ίδιας μορφής 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",  # αγνοείται όταν το Bearer Token είναι ανενεργό
)
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

// Χρήση οποιουδήποτε προγράμματος-πελάτη Dart συμβατού με OpenAI
final client = OpenAIClient(
  baseUrl: 'http://localhost:8421/anthropic/v1',
  apiKey: '', // δεν χρησιμοποιείται όταν το Bearer Token είναι ανενεργό
);
Κινητές συσκευές στο Wi-Fi: αντικαταστήστε το localhost με τη διεύθυνση IP LAN του Mac σας (εμφανίζεται στο πεδίο Βασικό URL όταν η επιλογή Να επιτρέπεται πρόσβαση LAN είναι ενεργή).

Συμβουλές

  • Αφήστε το διακριτικό Bearer ανενεργό όσο αναπτύσσετε τοπικά· ενεργοποιήστε το μόλις ενεργοποιήσετε την πρόσβαση LAN.
  • Χρησιμοποιήστε διαφορετικά Βασικά URL ανά πάροχο στον κώδικα πελάτη σας, ώστε να μπορείτε να αλλάζετε παρόχους αλλάζοντας μία σταθερά.
  • Ο διακομιστής μεσολάβησης εκκινείται αυτόματα, αλλά μπορείτε να τον διακόψετε προσωρινά από το κύριο παράθυρο εάν προκύψει διένεξη θύρας.
  • Εάν το δωρεάν επίπεδο ενός παρόχου σάς επιβάλει όριο ρυθμού, το μήνυμα σφάλματος ανάντη προωθείται αυτούσιο. Δεν αποκρύπτεται λογική επανάληψης από τον πελάτη.
  • Το τελικό σημείο /v1/providers είναι χρήσιμο για να ανακαλύπτετε ποιοι πάροχοι είναι ρυθμισμένοι κατά τον χρόνο εκτέλεσης.

Αντιμετώπιση προβλημάτων

Ο διακομιστής μεσολάβησης δεν ξεκινά

  • Κάποια άλλη διεργασία ίσως χρησιμοποιεί ήδη τη θύρα 8421. Αλλάξτε τη θύρα στις Ρυθμίσεις και επανεκκινήστε τον διακομιστή μεσολάβησης.
  • Ελέγξτε το αρχείο καταγραφής συστήματος για το μήνυμα σφάλματος που εμφανίζεται κατά την εκκίνηση.

Ένα αίτημα επιστρέφει 401 Unauthorized

  • Η απαίτηση διακριτικού Bearer είναι ενεργή, αλλά ο πελάτης δεν έστειλε αντίστοιχη κεφαλίδα Authorization: Bearer ... .
  • Το κλειδί API του παρόχου ίσως δεν είναι έγκυρο — το σφάλμα ανάντη προωθείται, επομένως ελέγξτε το σώμα του μηνύματος.

Ένα αίτημα επιστρέφει «Το κλειδί API δεν έχει ρυθμιστεί»

  • Ανοίξτε τη λίστα Παρόχων και κάντε κλικ στο Ορισμός κλειδιού API για τον συγκεκριμένο πάροχο.
  • Για το ERNIE, πρέπει να συμπληρωθούν και τα δύο, API Key και Secret Key. Για το Azure OpenAI, απαιτείται επίσης το Βασικό URL τελικού σημείου.

Η κινητή συσκευή δεν μπορεί να φτάσει τον διακομιστή μεσολάβησης

  • Ενεργοποιήστε την επιλογή Να επιτρέπεται πρόσβαση LAN στις Ρυθμίσεις.
  • Χρησιμοποιήστε τη διεύθυνση IP LAN που εμφανίζεται στο πεδίο Βασικό URL, όχι το localhost.
  • Βεβαιωθείτε ότι και οι δύο συσκευές βρίσκονται στο ίδιο δίκτυο Wi-Fi και ότι το τείχος προστασίας σας επιτρέπει εισερχόμενες συνδέσεις στη θύρα του διακομιστή μεσολάβησης.

Οι απαντήσεις ροής φτάνουν όλες μαζί

  • Βεβαιωθείτε ότι ο πελάτης σας στέλνει "stream": true στο σώμα JSON.
  • Ορισμένες βιβλιοθήκες HTTP αποθηκεύουν προσωρινά το SSE από προεπιλογή — απενεργοποιήστε την προσωρινή αποθήκευση απαντήσεων στην πλευρά του πελάτη.

Απόρρητο

  • Τα κλειδιά API αποθηκεύονται κρυπτογραφημένα με Fernet στο ~/Library/Application Support/AIProxyServer/credentials.enc. Το κλειδί κρυπτογράφησης στο master.key έχει δικαιώματα 0600.
  • Το διακριτικό Bearer, όταν είναι ενεργό, αποθηκεύεται επίσης μόνο στο κρυπτογραφημένο θησαυροφυλάκιο και δεν εγγράφεται ποτέ στο κανονικό αρχείο ρυθμίσεων.
  • Ο διακομιστής μεσολάβησης προωθεί αιτήματα μόνο σε παρόχους που έχετε ρυθμίσει ρητά. Δεν πραγματοποιεί άλλες εξερχόμενες κλήσεις.
  • Χωρίς τηλεμετρία, χωρίς αναλυτικά στοιχεία, χωρίς αναφορές σφαλμάτων.
  • Η προεπιλεγμένη δέσμευση δικτύου είναι 127.0.0.1 μόνο. Η έκθεση στο LAN είναι προαιρετική.
  • Τα περιεχόμενα συνομιλιών δεν αποθηκεύονται. Το AIProxyServer προωθεί byte και τα ξεχνά αμέσως.