Jalankan proksi serasi OpenAI secara tempatan untuk setiap perkhidmatan AI awan utama. Simpan kunci API sekali sahaja dan benarkan mana-mana aplikasi klien — desktop, mudah alih atau web — berkomunikasi dengan http://localhost bukannya mendaftarkan kunci dalam setiap alat.
Bermula
1. Lancarkan Aplikasi
Buka AIProxyServer. Pada pelancaran pertama, proksi bermula secara automatik dan mendengar pada port 8421 pada mesin tempatan anda. Tetingkap utama memaparkan tiga bahagian:
- Pelayan Proksi — status semasa, URL asas dan butang untuk memulakan atau menghentikan pendengar
- Token Bearer — togol pengesahan pilihan dan paparan token
- Penyedia — setiap penyedia AI awan yang disokong, dengan butang Tetapkan Kunci API bagi setiap baris
2. Tambahkan Kunci API Pertama Anda
- Pilih mana-mana penyedia daripada senarai Penyedia (contohnya OpenAI (ChatGPT))
- Klik Dapatkan kunci API untuk membuka konsol penyedia dalam pelayar anda, kemudian cipta atau salin kunci
- Klik Tetapkan Kunci API pada baris yang sama dan tampalkan nilainya ke dalam dialog
- Klik Simpan. Label status bertukar kepada Dikonfigurasikan dalam warna hijau
3. Sambungkan Aplikasi Klien
Halakan mana-mana klien serasi OpenAI kepada proksi. URL Asas ialah http://localhost:8421/<provider>/v1. Segmen penyedia menentukan awan yang menerima permintaan.
# Contoh: OpenAI Python SDK dihalakan kepada proksi
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)
Klien tidak pernah melihat kunci sebenar. AIProxyServer melampirkan kelayakan huluan apabila ia memajukan permintaan.
Gambaran Keseluruhan Antara Muka
Panel Pelayan Proksi
| Medan | Perihalan |
|---|---|
| Status | Berjalan apabila pendengar aktif, Dihentikan sebaliknya. |
| URL Asas | Alamat yang patut digunakan oleh aplikasi klien, termasuk nama hos dan port. Klik Salin untuk menyalinnya ke papan keratan. |
| Butang Mula / Henti | Togol pendengar HTTP tanpa menutup aplikasi. |
Panel Token Bearer
- Wajibkan pengesahan Token Bearer — kotak semak yang menghidupkan atau mematikan pengesahan. Dimatikan secara lalai untuk penggunaan tempatan yang mudah.
- Medan token — paparan baca sahaja bagi token semasa. Ditunjukkan sebagai titik; gunakan Salin untuk mengambilnya.
- Jana Semula — keluarkan token rawak baharu. Klien sedia ada mesti dikemas kini dengan nilai baharu.
Panel Penyedia
Satu baris bagi setiap penyedia awan yang disokong. Setiap baris memaparkan:
- Nama paparan (contohnya Claude (Anthropic))
- Status konfigurasi — hijau Dikonfigurasikan apabila kunci API disimpan, kelabu Belum dikonfigurasikan sebaliknya
- Laluan URL yang digunakan oleh klien anda, cth.
/anthropic/v1/chat/completions - Tetapkan Kunci API — membuka dialog untuk memasukkan kelayakan
- Dapatkan kunci API — membuka konsol penyedia dalam pelayar anda
Penyedia yang Disokong
Sebelas perkhidmatan AI awan disertakan. Kebanyakannya menggunakan format OpenAI Chat Completions secara asli dan diproksikan seperti sedia ada. Tiga perkhidmatan (Anthropic, Gemini, ERNIE) menggunakan protokol sendiri; AIProxyServer menterjemah permintaan dan respons secara langsung supaya klien anda hanya melihat bentuk OpenAI.
| Penyedia | Awalan laluan | Perkara yang anda perlukan |
|---|---|---|
| OpenAI (ChatGPT) | /openai/v1 | Kunci API daripada platform.openai.com |
| Claude (Anthropic) | /anthropic/v1 | Kunci API daripada Anthropic Console |
| Gemini (Google) | /gemini/v1 | Kunci API daripada Google AI Studio |
| Grok (xAI) | /grok/v1 | Kunci API daripada xAI Console |
| Azure OpenAI (Copilot) | /copilot/v1 | Kunci API serta URL titik akhir penggunaan anda |
| Perplexity | /perplexity/v1 | Kunci API daripada tetapan Perplexity |
| Groq | /groq/v1 | Kunci API daripada Groq Cloud |
| DeepSeek | /deepseek/v1 | Kunci API daripada DeepSeek Platform |
| Kimi (Moonshot) | /kimi/v1 | Kunci API daripada Moonshot Console |
| Qwen (DashScope) | /qwen/v1 | Kunci API daripada Alibaba DashScope |
| ERNIE (Baidu) | /ernie/v1 | Kedua-dua API Key dan Secret Key daripada Baidu Qianfan |
Nota khusus penyedia
- Azure OpenAI — tampalkan titik akhir penggunaan penuh ke dalam Medan URL Asas Titik Akhir , contohnya
https://my-resource.openai.azure.com/openai/deployments/gpt-4o. Proksi menambahkan/chat/completions?api-version=2024-02-01secara automatik. - ERNIE — Baidu Qianfan menggunakan OAuth, jadi kedua-dua API Key dan Secret Key diperlukan. AIProxyServer meminta dan menyimpan cache token akses di latar belakang.
- Gemini — pengesahan menggunakan parameter pertanyaan URL; proksi menambahkannya untuk anda. Kuota seminit peringkat percuma masih terpakai.
Rujukan API
Titik akhir
| Kaedah | Laluan | Perihalan |
|---|---|---|
| GET | /health | Semakan kesiagaan. Mengembalikan status perkhidmatan dan senarai penyedia. Tiada pengesahan diperlukan. |
| GET | /v1/providers | Penyedia yang dikonfigurasikan dan metadata. |
| GET | /<provider>/v1/models | Senarai model bagi penyedia tertentu, dalam format OpenAI. |
| POST | /<provider>/v1/chat/completions | Permintaan OpenAI Chat Completions. Hantar stream:true untuk SSE. |
Penstriman
Apabila klien menghantar "stream": true, proksi membalas dengan Server-Sent Events dalam format 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]
Strim asli Anthropic dan Gemini diterjemahkan kepada bentuk ini supaya semua klien boleh menggunakan satu penghurai.
Pengepala pengesahan
Apabila Wajibkan pengesahan Token Bearer dihidupkan, hantarkan token daripada tetingkap utama bersama setiap permintaan:
Authorization: Bearer <token-shown-in-app>
Tetapan
Buka tetingkap Tetapan daripada ikon gear dalam bar alat bawah.
| Tetapan | Lalai | Perihalan |
|---|---|---|
| Port Proksi | 8421 | Port TCP yang diikat oleh pendengar. Perubahan memerlukan proksi dimulakan semula. |
| Mula Pelayan Secara Automatik | Hidup | Mulakan proksi apabila aplikasi dilancarkan. |
| Benarkan Akses LAN | Mati | Apabila dimatikan, proksi hanya mengikat kepada 127.0.0.1. Apabila dihidupkan, peranti lain pada Wi-Fi anda boleh mencapai proksi. |
| Wajibkan Token Bearer | Mati | Apabila dihidupkan, setiap permintaan mesti menyertakan token yang dipaparkan dalam tetingkap utama. Sangat disyorkan setiap kali Benarkan Akses LAN dihidupkan. |
Contoh Klien
cURL
# OpenAI (laluan terus)
curl http://localhost:8421/openai/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Hello"}]
}'
# Claude melalui bentuk OpenAI yang sama
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", # diabaikan apabila Token Bearer dimatikan
)
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
// Menggunakan mana-mana klien Dart yang serasi OpenAI
final client = OpenAIClient(
baseUrl: 'http://localhost:8421/anthropic/v1',
apiKey: '', // tidak digunakan apabila Token Bearer dimatikan
);
localhost dengan IP LAN Mac anda (ditunjukkan dalam medan URL Asas apabila Benarkan Akses LAN dihidupkan).Petua
- Biarkan Token Bearer dimatikan semasa anda membangunkan secara tempatan; hidupkannya sebaik sahaja anda mengaktifkan akses LAN.
- Gunakan URL Asas yang berbeza bagi setiap penyedia dalam kod klien supaya anda boleh menukar penyedia dengan menukar satu pemalar.
- Proksi bermula secara automatik, tetapi anda boleh menghentikannya sementara dari tetingkap utama jika berlaku konflik port.
- Jika peringkat percuma penyedia mengehadkan kadar anda, mesej ralat huluan dimajukan tanpa perubahan. Tiada logik cuba semula disembunyikan daripada klien.
- Titik akhir
/v1/providersberguna untuk mengetahui penyedia yang dikonfigurasikan semasa waktu jalanan.
Penyelesaian Masalah
Proksi tidak dapat dimulakan
- Proses lain mungkin sudah menggunakan port 8421. Tukar port dalam Tetapan dan mulakan semula proksi.
- Semak log sistem untuk mesej ralat yang dipaparkan pada masa mula.
Permintaan mengembalikan 401 Unauthorized
- Keperluan Token Bearer dihidupkan tetapi klien tidak menghantar
Authorization: Bearer ...pengepala. - Kunci API penyedia sendiri mungkin tidak sah — ralat huluan dimajukan, jadi semak isi mesej.
Permintaan mengembalikan "API key is not configured"
- Buka senarai Penyedia dan klik Tetapkan Kunci API untuk penyedia berkenaan.
- Untuk ERNIE, kedua-dua API Key dan Secret Key mesti diisi. Untuk Azure OpenAI, URL Asas Titik Akhir juga diperlukan.
Peranti mudah alih tidak dapat mencapai proksi
- Hidupkan Benarkan Akses LAN dalam Tetapan.
- Gunakan IP LAN yang ditunjukkan dalam medan URL Asas, bukan
localhost. - Pastikan kedua-dua peranti berada pada rangkaian Wi-Fi yang sama dan tembok api anda membenarkan sambungan masuk pada port proksi.
Respons penstriman tiba serentak
- Pastikan klien anda menghantar
"stream": truedalam badan JSON. - Sesetengah pustaka HTTP menyangga SSE secara lalai — nyahdayakan penimbalan respons pada bahagian klien.
Privasi
- Kunci API disimpan secara disulitkan dengan Fernet dalam
~/Library/Application Support/AIProxyServer/credentials.enc. Kunci penyulitan dalammaster.keymempunyai kebenaran 0600. - Token Bearer, apabila dihidupkan, juga hanya disimpan dalam peti simpanan disulitkan dan tidak pernah ditulis ke fail tetapan biasa.
- Proksi hanya memajukan permintaan kepada penyedia yang telah anda konfigurasikan secara jelas. Ia tidak membuat panggilan keluar lain.
- Tiada telemetri, tiada analitis, tiada pelaporan ranap.
- Pengikatan rangkaian lalai ialah
127.0.0.1sahaja. Pendedahan LAN adalah pilihan. - Kandungan perbualan tidak disimpan. AIProxyServer memajukan bait dan terus melupakannya.