הריצו את FinRobot על endpoint תואם OpenAI מותאם אישית.

Updated 2026-07-30

FinRobot קורא את אישורי ה-LLM שלו מקובץ OAI_CONFIG_LIST בסגנון AutoGen שהרשומות שלו מקבלות מפתח base_url. הוסיפו רשומה אחת שמפנה אל https://api.apisrouter.com/v1 עם מפתח gateway, וה-agents של החזאי, כותב הדוחות, וה-RAG יכולים לרוץ על כל id מודל בקטלוג.

תשובה מהירה: רשומה אחת ב-OAI_CONFIG_LIST.

הוראות ההגדרה של FinRobot אומרות לכם לשנות שם ל-OAI_CONFIG_LIST_sample ל-OAI_CONFIG_LIST ולמלא אישורים. הקובץ הזה הוא רשימת הגדרות סטנדרטית של AutoGen: מערך JSON שבו כל רשומה לוקחת model ו-api_key, ואופציונלית base_url, שהדוגמה המצורפת כבר מדגימה עבור endpoints לא-ברירת-מחדל. הוסיפו רשומה עם מפתח ה-gateway שלכם ו-base_url מוגדר ל-https://api.apisrouter.com/v1, וכל agent של FinRobot שטוען את הקובץ יכול לנתב דרכו. מלכודת אחת שעולה לאנשים זמן: המדריכים טוענים את הקובץ דרך autogen.config_list_from_json עם filter_dict שבוחר רשומות לפי שם מודל. אם הרשומה החדשה שלכם אומרת claude-sonnet-4-6 אבל ה-filter עדיין מבקש את ה-id של GPT מהדוגמה, הרשומה שלכם מסוננת החוצה וההרצה נכשלת על האישורים הישנים. עדכנו את filter_dict כך שיתאים למודל שהוספתם, או הסירו את ה-filter בזמן הבדיקה.

[
    {
        "model": "claude-sonnet-4-6",
        "api_key": "sk-YOUR-APISROUTER-KEY",
        "base_url": "https://api.apisrouter.com/v1"
    }
]

איך FinRobot משתמש בהגדרת ה-LLM שלו.

FinRobot (AI4Finance-Foundation ב-GitHub, כ-7.6K כוכבים) היא פלטפורמת AI agent לניתוח פיננסי הבנויה על AutoGen (pyautogen 0.2.19 ומעלה). ה-agents שלה הם workflows ארוזים: חזאי Market_Analyst שמושך חדשות ויסודות חברה ומנבא תנועה לשבוע הבא, כותב דוח שנתי שהופך דיווחים ל-PDF מחקר מניות, ו-agents של שאלות-ותשובות מבוססי-אחזור על שיחות רווחים ודיווחי SEC. כל מדריך בונה את אותה צורת llm_config: dict שה-config_list שלו מגיע מ-autogen.config_list_from_json שקורא את קובץ ה-OAI_CONFIG_LIST. ה-llm_config הזה נמסר אל מחלקות wrapper כמו SingleAssistant ו-SingleAssistantShadow מ-finrobot.agents.workflow, שמחזיקות את ה-agents של AutoGen שמתחתן. החלטת ה-endpoint לכן חיה כולה בקובץ ה-JSON: ה-client של OpenAI ב-AutoGen שולח בקשות /v1/chat/completions אל כל base_url שהרשומה שנבחרה נושאת ומעביר את שדה ה-model כמחרוזת פשוטה. המחרוזת הפשוטה הזו היא הניצחון המעשי. כשה-endpoint מאחורי base_url משרת כמה ספקים, id של Claude, DeepSeek, או Qwen רוכב דרך אותה הגדרה בצורת-OpenAI בלי ש-FinRobot ישים לב, והחלפת מודל הניתוח הופכת לעריכת JSON בשורה אחת בתוספת filter_dict תואם.

הגדרה מלאה: קובץ ההגדרה, ה-filter, ומפתחות הנתונים.

FinRobot מפצל אישורים על פני שני קבצים, ורק אחד מהם נוגע ל-LLM. OAI_CONFIG_LIST מחזיק endpoints ומפתחות של מודלים. config_api_keys מחזיק אישורי נתוני שוק (FINNHUB_API_KEY, FMP_API_KEY, SEC_API_KEY, ומפתחות רשתות חברתיות), נטען בנפרד דרך register_keys_from_json. ניתוב ה-LLM דרך gateway משנה את הקובץ הראשון ומשאיר את השני נגוע, כך שמשיכות חדשות, יסודות, ודיווחים מתנהגים בדיוק כמו קודם. תבנית המדריך למטה היא המבנה של notebook החזאי עם רשומת ה-gateway נבחרת. אותו llm_config עובד עבור המדריכים של הדוח השנתי וה-RAG, שנבדלים רק במחלקת ה-workflow שהם יוצרים instance עבורה.

import autogen
from finrobot.utils import register_keys_from_json
from finrobot.agents.workflow import SingleAssistant

llm_config = {
    "config_list": autogen.config_list_from_json(
        "../OAI_CONFIG_LIST",
        filter_dict={"model": ["claude-sonnet-4-6"]},  # match your entry
    ),
    "timeout": 120,
    "temperature": 0,
}

register_keys_from_json("../config_api_keys")  # finnhub/fmp/sec data keys

assistant = SingleAssistant("Market_Analyst", llm_config,
                            human_input_mode="NEVER")
assistant.chat("Analyze NVDA news this week and predict next week's movement.")

בחירת מודלים לכל workflow של FinRobot.

לולאת הניסוי הנקייה: קבעו את הטיקר וטווח התאריכים, הריצו את אותו workflow פעם אחת לכל רשומת מועמד, והשוו פלטים זה לצד זה. מאחורי endpoint אחד כל מועמד הוא עריכת filter_dict, ולוג השימוש לפי מפתח נותן לכם את חשבון הטוקן לכל מועמד בלי עבודת גיליון אלקטרוני.

  • כותב הדוח השנתי הוא עבודת הנימוק הכבדה ביותר: הוא קורא סעיפי דיווח, מסנתז תזת השקעה, ומנסח דוח מובנה. claude-opus-4-7 או gpt-5.5 ב-workflow הזה הוא המקום שבו איכות הפלט משתנה באופן גלוי.
  • החזאי הכלכלי הוא משימה קצרה יותר וחוזרת על פני חדשות ויסודות. claude-sonnet-4-6 או deepseek-v4-pro מטפל בזה היטב, וזה חשוב כשאתם מריצים אותו על פני רשימת מעקב מדי יום.
  • שאלות-ותשובות RAG על שיחות רווחים הן אחזור בתוספת סינתזה על פני קטעים ארוכים, מה שמעדיף ids בהקשר-ארוך; gemini-3.1-pro-preview שווה בדיקה שם מול claude-sonnet-4-6.
  • מכיוון שרשומות נבחרות לפי filter_dict, תוכלו לשמור קובץ אחד עם רשומת חזית ורשומה מהירה מול אותו base_url ולבחור לכל notebook, במקום לערוך אישורים לכל הרצה.
  • ids של מודלים הם מחרוזות מדויקות. FinRobot מעביר אותם ללא אימות, כך שרשימת ה-/v1/models של ה-endpoint היא האיות הסמכותי.

תשלום לפי שימוש · מתחת למחיר הרשמי

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

מודלמחיר רשמיהמחיר שלנו
Claude Opus 4.7$5.00 / $25.00 per M$4.00 / $20.00 per M
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
GPT-5.4$2.50 / $15.00 per M$2.00 / $12.00 per M
DeepSeek V4 Pro$0.43 / $0.87 per M$0.40 / $0.90 per M
Gemini 3.1 Pro Preview$2.00 / $12.00 per M$1.60 / $9.60 per M

מצבי כשל ספציפיים ל-FinRobot.

אי-ההתאמה של filter_dict היא הגדולה. config_list_from_json מחזיר רק רשומות שה-model שלהן תואם את ה-filter; filter שלא תואם כלום זורק שגיאה על רשימת הגדרה ריקה, ו-filter שתואם את רשומות הדוגמה הנותרות שולח בקשות ל-OpenAI עם מפתחות placeholder, מה שמתבטא כ-401 מה-host הלא נכון. כששינויי ניתוב לא נראים נכנסים לתוקף, הדפיסו קודם את ה-config_list שנפתר. נתיבים יחסיים הם השני. המדריכים טוענים "../OAI_CONFIG_LIST" מכיוון שה-notebooks יושבים רמה אחת מתחת לשורש המאגר; סקריפט בשורש רוצה "OAI_CONFIG_LIST" במקום, ו-AutoGen גם מקבל את משתנה הסביבה OAI_CONFIG_LIST שנושא את מחרוזת ה-JSON, מה שעוקף בעיות נתיב ב-containers. שורות comment הן השלישית. הוראות ההגדרה אומרות לכם להסיר את הערות ה-comment מקבצי הדוגמה מכיוון שהן הופכות את ה-JSON ללא-תקין; JSONDecodeError בעת ההפעלה אומר שהערה תועה שרדה. אישורי נתונים נכשלים באופן בלתי תלוי. אם ה-agent משוחח כרגיל אבל חדשות או יסודות חוזרים ריקים, זו בעיית config_api_keys (Finnhub, FMP, SEC), לא בעיית endpoint. ומודול ה-FinRobot Pro Equity הנפרד מגדיר את המפתחות שלו דרך config.ini במקום; נכון ליולי 2026 ההגדרות המתועדות שלו מכסות openai_api_key אבל בלי דריסת base-URL, אז התייחסו למודול הזה כישיר-לספק עד שה-upstream יתעד אחת.

מי מנתב את FinRobot דרך gateway.

  • אנליסטים שמייצרים דוחות מניות על פני רשימת כיסוי. הקשרי דיווח ארוכים לכל דוח הופכים הפרשי מחיר-לכל-מודל למהותיים, ו-endpoint אחד הופך את המודל לבחירה לכל הרצה.
  • צוותי quant שמריצים את החזאי מדי יום על פני רשימת מעקב, שם id בשכבה-בינונית מהירה שומר על החשבון החוזר שטוח בלי לכתוב מחדש את ה-workflow.
  • חוקרים שמשווים משפחות מודלים על משימות פיננסיות זהות. כל מועמד הוא רשומת הגדרה אחת, לא חשבון ספק והחלפת SDK.
  • צוותים שמתקננים ערימות מבוססות-AutoGen. FinRobot חולק את מוסכמת OAI_CONFIG_LIST עם פרויקטי AutoGen אחרים, כך שפורמט רשומת gateway אחד משרת את כולם.
  • מפתחים ללא גישה לחיוב של ספק נתון. גישה מבוססת-הטענה בלי דרישת כרטיס מסירה את התלות בהרשמה לכל ספק.

אמתו את ה-endpoint ובצעו דיבוג להרצה הראשונה.

רשמו את המודלים שהמפתח שלכם יכול לכתוב אליהם לפני פתיחת notebook; כל מחרוזת model ב-OAI_CONFIG_LIST וכל ערך filter_dict חייבים להתאים בדיוק ל-id מוגש. לאחר מכן הריצו את שיחת ה-chat הקצרה ביותר האפשרית דרך SingleAssistant וצפו בקונסולה. 401 אומר שה-api_key של הרשומה שנבחרה לא שייך ל-endpoint שב-base_url שלה; בדקו איזו רשומה ה-filter באמת בחר. שגיאת model-not-found היא טעות הקלדה ב-id ברשומה. שגיאת חיבור בדרך כלל אומרת ש-base_url איבד את הסיומת /v1 שלו. אם ה-agent לולה בלי תוצאות כלים, מפתחות הנתונים ב-config_api_keys הם החשודים, לא ה-endpoint של ה-LLM. ברגע שבקשות זורמות, קונסולת APIsRouter מציגה מודל לכל בקשה, ספירות טוקן, והוצאה. הרצות כתיבת דוחות הן שיחות רב-תוריות ארוכות, ותצוגת השימוש מציגה כמה דוח אחד באמת עולה לפני שאתם מתזמנים חמישים כאלה.

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

שאלות נפוצות

האם FinRobot תומך ב-endpoint תואם OpenAI מותאם אישית?

כן. FinRobot קורא רשומות OAI_CONFIG_LIST בסגנון AutoGen, ורשומות מקבלות מפתח base_url לצד model ו-api_key. הפנו את base_url אל ה-gateway, שמרו את filter_dict תואם למודל של הרשומה, וה-agents מנתבים דרכו.

האם ה-agents של FinRobot יכולים לרוץ על מודלי Claude, DeepSeek, או Qwen?

כן. AutoGen מעביר את שדה ה-model כמחרוזת פשוטה מעל /v1/chat/completions, כך שכל id שה-endpoint משרת עובד. שם המודל ברשומה וב-filter_dict פשוט חייב להתאים בדיוק ל-id מהקטלוג.

למה FinRobot מתעלם מרשומת ה-OAI_CONFIG_LIST החדשה שלי?

כמעט תמיד ה-filter_dict. המדריכים מסננים רשומות לפי שם מודל, כך שרשומה ששם ה-model שלה לא תואם את ה-filter מוחרגת בשקט. עדכנו את filter_dict אל ה-id החדש שלכם, או טענו את הקובץ בלי filter בזמן הבדיקה.

האם מפתחות Finnhub, FMP, ו-SEC שלי משתנים כשאני משנה את ה-endpoint של ה-LLM?

לא. אישורי נתוני שוק חיים ב-config_api_keys ונטענים דרך register_keys_from_json, נפרדים לגמרי מ-OAI_CONFIG_LIST. ניתוב ה-LLM דרך gateway לא נוגע בצינור הנתונים.

לאיזו גרסת AutoGen זה חל?

FinRobot נועץ את pyautogen 0.2.19 ומעלה ומשתמש בטוען config_list_from_json בסגנון 0.2. מפתח ה-base_url ברשומות הגדרה סטנדרטי לאורך אותו דור, כך שאין צורך בשינויי קוד ב-FinRobot.

האם מודול FinRobot Pro Equity מכבד גם base_url?

לא כפי שמתועד. ה-config.ini שלו חושף openai_api_key תחת API_KEYS אבל אין דריסת endpoint נכון ליולי 2026. הניתוב ב-OAI_CONFIG_LIST המתואר כאן חל על ה-agents והמדריכים העיקריים של FinRobot.