הפעילו שרת מתווך מקומי תואם OpenAI עבור כל שירותי ה-AI המובילים בענן. שמרו את מפתחות ה-API פעם אחת ואפשרו לכל אפליקציית לקוח — למחשב שולחני, לנייד או לאינטרנט — לתקשר עם http://localhost במקום לרשום מפתחות בכל כלי.
תחילת העבודה
1. הפעלת האפליקציה
פתחו את AIProxyServer. בהפעלה הראשונה שרת המתווך מתחיל לפעול אוטומטית ומאזין ביציאה 8421 של המחשב המקומי שלכם. החלון הראשי מציג שלושה חלקים:
- שרת מתווך — המצב הנוכחי, כתובת ה-URL הבסיסית וכפתור להפעלה או עצירה של המאזין
- אסימון Bearer — מתג אימות אופציונלי ותצוגת אסימון
- ספקים — כל ספקי ה-AI בענן הנתמכים, עם הגדרת מפתח API כפתור בכל שורה
2. הוספת מפתח ה-API הראשון
- בחרו ספק כלשהו מרשימת הספקים (לדוגמה OpenAI (ChatGPT))
- לחצו על קבלת מפתח API כדי לפתוח את מסוף הספק בדפדפן שלכם, ואז צרו או העתיקו מפתח
- לחצו על הגדרת מפתח API באותה שורה והדביקו את הערך בתיבת הדו-שיח
- לחצו על שמירה. תווית המצב משתנה ל- מוגדר בירוק
3. חיבור אפליקציית לקוח
הפנו כל לקוח תואם OpenAI אל שרת המתווך. כתובת ה-URL הבסיסית היא http://localhost:8421/<provider>/v1. מקטע הספק קובע לאיזה ענן תישלח הבקשה.
# דוגמה: 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 — תיבת סימון שמפעילה או מכבה אימות. כבויה כברירת מחדל לשימוש מקומי נוח.
- שדה אסימון — תצוגה לקריאה בלבד של האסימון הנוכחי. מוצג כנקודות; השתמשו ב- העתקה כדי לקבל אותו.
- יצירה מחדש — הנפקת אסימון אקראי חדש. יש לעדכן לקוחות קיימים בערך החדש.
לוח הספקים
שורה אחת לכל ספק AI בענן נתמך. בכל שורה מוצגים:
- שם התצוגה (לדוגמה Claude (Anthropic))
- מצב ההגדרה — ירוק מוגדר כאשר מפתח API שמור, אפור לא מוגדר אחרת
- נתיב ה-URL שבו הלקוחות שלכם משתמשים, למשל
/anthropic/v1/chat/completions - הגדרת מפתח API — פותח תיבת דו-שיח להזנת אישורים
- קבלת מפתח API — פותח את מסוף הספק בדפדפן שלכם
ספקים נתמכים
כלולים 11 שירותי AI בענן. רובם משתמשים באופן מקורי בפורמט 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 | כבוי | כאשר מופעל, כל בקשה חייבת לכלול את האסימון המוצג בחלון הראשי. מומלץ מאוד בכל פעם שאפשר גישה דרך LAN מופעל. |
דוגמאות ללקוחות
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 כבוי
)
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 כבוי
);
localhost בכתובת ה-IP ברשת המקומית של ה-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 ברשת המקומית המוצגת בשדה כתובת ה-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 מעביר בתים ושוכח אותם מיד.