הריצו את 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.