AIProxyServer - מדריך

הפעילו שרת מתווך מקומי תואם OpenAI עבור כל שירותי ה-AI המובילים בענן. שמרו את מפתחות ה-API פעם אחת ואפשרו לכל אפליקציית לקוח — למחשב שולחני, לנייד או לאינטרנט — לתקשר עם http://localhost במקום לרשום מפתחות בכל כלי.


תחילת העבודה

1. הפעלת האפליקציה

פתחו את AIProxyServer. בהפעלה הראשונה שרת המתווך מתחיל לפעול אוטומטית ומאזין ביציאה 8421 של המחשב המקומי שלכם. החלון הראשי מציג שלושה חלקים:

  • שרת מתווך — המצב הנוכחי, כתובת ה-URL הבסיסית וכפתור להפעלה או עצירה של המאזין
  • אסימון Bearer — מתג אימות אופציונלי ותצוגת אסימון
  • ספקים — כל ספקי ה-AI בענן הנתמכים, עם הגדרת מפתח API כפתור בכל שורה

2. הוספת מפתח ה-API הראשון

  1. בחרו ספק כלשהו מרשימת הספקים (לדוגמה OpenAI ‏(ChatGPT))
  2. לחצו על קבלת מפתח API כדי לפתוח את מסוף הספק בדפדפן שלכם, ואז צרו או העתיקו מפתח
  3. לחצו על הגדרת מפתח API באותה שורה והדביקו את הערך בתיבת הדו-שיח
  4. לחצו על שמירה. תווית המצב משתנה ל- מוגדר בירוק

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 — תיבת סימון שמפעילה או מכבה אימות. כבויה כברירת מחדל לשימוש מקומי נוח.
  • שדה אסימון — תצוגה לקריאה בלבד של האסימון הנוכחי. מוצג כנקודות; השתמשו ב- העתקה כדי לקבל אותו.
  • יצירה מחדש — הנפקת אסימון אקראי חדש. יש לעדכן לקוחות קיימים בערך החדש.
שימו לב: אם תפעילו את אפשר גישה דרך LAN בהגדרות בלי להפעיל את האסימון, כל אדם באותה רשת Wi-Fi יוכל להשתמש בשרת המתווך ובמפתחות ה-API שלכם. טקסט העזר מתחת ללוח האסימון מזהיר אתכם כשאתם במצב זה.

לוח הספקים

שורה אחת לכל ספק 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 כבוי
);
התקנים ניידים ברשת Wi-Fi: החליפו את 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 מעביר בתים ושוכח אותם מיד.