הריצו את TradingAgents על backend תואם OpenAI מותאם אישית.
Updated 2026-07-30
TradingAgents מגיע עם מצב ספק openai_compatible. הגדירו את backend_url ל-https://api.apisrouter.com/v1, ייצאו מפתח אחד, וה-agents של deep-think ו-quick-think מנותבים דרך endpoint יחיד עם כל מודל קטלוג ניתן לכתובת לפי id.
תשובה מהירה: שלוש הגדרות מנתבות את TradingAgents לכל מקום.
TradingAgents תומך ב-endpoints מותאמים אישית באופן נטיבי. הגדירו את llm_provider ל-"openai_compatible", הגדירו את backend_url לכתובת ה-endpoint שלכם, וייצאו OPENAI_COMPATIBLE_API_KEY עם מפתח עבור ה-endpoint הזה. עם APIsRouter כתובת ה-backend היא https://api.apisrouter.com/v1, וכל מודל בקטלוג הופך ניתן-לכתובת מסלוטי deep_think_llm ו-quick_think_llm לפי ה-id המדויק שלו. זהו נתיב הגדרה מתועד במאגר ה-upstream, לא fork או תיקון. אותם ערכים יכולים גם להיות מסופקים כמשתני סביבה (TRADINGAGENTS_LLM_PROVIDER, TRADINGAGENTS_LLM_BACKEND_URL, TRADINGAGENTS_DEEP_THINK_LLM, TRADINGAGENTS_QUICK_THINK_LLM), כך שמשימה מתוזמנת או runner של CI יכולים להחליף backends בלי לגעת בקוד Python.
config["llm_provider"] = "openai_compatible"
config["backend_url"] = "https://api.apisrouter.com/v1"
# auth: export OPENAI_COMPATIBLE_API_KEY=sk-...איך TradingAgents מדבר עם ה-backend של ה-LLM שלו.
TradingAgents (TauricResearch ב-GitHub, +93K כוכבים) הוא framework מסחר רב-agent. הרצת ניתוח אחת מתפצלת על פני צוות אנליסטים שמכסה יסודות, סנטימנט, חדשות, וטכניקלים, ואז חוקר bull וחוקר bear מתווכחים על המקרה על פני סבב ויכוח אחד או יותר, agent סוחר מציע את הפוזיציה, ושכבת ניהול-סיכון סוקרת אותה לפני ההחלטה הסופית. ה-framework מפצל את העבודה הזו על פני שני סלוטי מודל. deep_think_llm מטפל בשלבים הכבדים-בנימוק: ויכוח המחקר, החלטת הסוחר, וסקירת הסיכון. quick_think_llm מטפל בשלבים בנפח-גבוה: קריאת נתונים, סיכום חדשות, וניסוח דוחות אנליסט. שני הסלוטים מוציאים בקשות /v1/chat/completions סטנדרטיות. הגדרת ה-provider רק קובעת לאיזה client ו-host הבקשות האלה הולכות, ו-openai_compatible שולח אותן אל כל backend_url שאתם מגדירים. באופן נטיבי, TradingAgents גם תומך ב-OpenAI, Anthropic, Google, ו-DeepSeek כספקים מדרגה-ראשונה, אבל כל אחד צריך חשבון משלו, מפתח משלו, וספק אחד להרצה. מצב openai_compatible קורס את זה: TradingAgents מעביר את שדה ה-model כמחרוזת פשוטה, כך שכש-endpoint מאחורי backend_url משרת כמה ספקים, סלוט deep-think של Claude וסלוט quick-think של GPT או DeepSeek יכולים לרוץ באותו ניתוח. הערבוב-לפי-תפקיד הזה הוא הסיבה המעשית לנתב את ה-framework דרך gateway במקום endpoint ספק-יחיד.
הגדרה מלאה: הגדרת Python או משתני סביבה.
הנתיב הפרוגרמטי מעתיק את DEFAULT_CONFIG ודורס ארבעה מפתחות. המפתח שמאמת מול ה-endpoint המותאם אישית נקרא מ-OPENAI_COMPATIBLE_API_KEY, כך שהוא אף פעם לא צריך להופיע ב-dict ההגדרה או בקובץ המקור. נתיב משתני-הסביבה מגדיר את אותם הערכים דרך המיפוי _ENV_OVERRIDES ב-default_config.py ועובד גם עבור ה-Python API וגם עבור ה-CLI האינטראקטיבי (tradingagents, או python -m cli.main). שימו לב ש-backend_url ברירת מחדל היא None, ובמקרה כזה ה-client של כל ספק נופל חזרה אל ה-endpoint ברירת המחדל שלו; הדריסה נכנסת לתוקף רק ברגע שאתם מגדירים אותה במפורש. נתוני שוק הם עניין נפרד. TradingAgents מושך ציטוטים ויסודות דרך ספקי הנתונים שלו (למשל ALPHA_VANTAGE_API_KEY), ואישורים אלה בלתי תלויים ב-endpoint של ה-LLM. שינוי backend_url לא נוגע בצינור הנתונים.
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG
config = DEFAULT_CONFIG.copy()
config["llm_provider"] = "openai_compatible"
config["backend_url"] = "https://api.apisrouter.com/v1"
config["deep_think_llm"] = "claude-opus-4-7" # debate rounds + trade decision
config["quick_think_llm"] = "claude-sonnet-4-6" # analysts, summaries
config["max_debate_rounds"] = 2
ta = TradingAgentsGraph(debug=True, config=config)
_, decision = ta.propagate("NVDA", "2026-07-15")
print(decision)בחירת מודלי deep-think ו-quick-think.
ברירת המחדל ב-upstream מזווגת מודל מהחזית בסלוט העמוק עם מודל mini בסלוט המהיר, וזו הצורה הנכונה: הוציאו קיבולת נימוק היכן שההחלטה מתקבלת, וקיבולת נפח היכן שהקריאה נעשית. ניתוב דרך endpoint אחד הופך את הזיווג לשינוי בן שתי שורות בין הרצות, אז זרימת העבודה המעשית היא לקבע את הסלוט העמוק ולבצע A/B על הסלוט המהיר מול מדדי ה-backtest שלכם במקום לנחש.
- deep_think_llm נושא את ויכוח ה-bull/bear, החלטת הסוחר, וסקירת הסיכון. מעט קריאות להרצה, אבל כל אחת מנמקת על פני כל הקשר האנליסטים, ו-max_debate_rounds מכפיל אותן. כאן מודל נימוק מהחזית (claude-opus-4-7, gpt-5.5) מרוויח את הטוקנים שלו.
- quick_think_llm יורה בכל שלב אנליסט: קריאת יסודות, ניקוד סנטימנט, סיכום חדשות, ניסוח דוחות. רוב נפח הבקשות של הרצה נוחת כאן, אז מודל מהיר בשכבה-בינונית (claude-sonnet-4-6, deepseek-v4-pro) שומר על הרצות מהירות בלי לפגוע בקלטי הוויכוח.
- עומסים בהקשר-ארוך, כמו הזנת דיווחים מלאים או חלונות חדשות גדולים לתוך האנליסטים, הם המקום ש-gemini-3.1-pro-preview שווה בדיקה בסלוט המהיר.
- Backtests מגבירים הכל. סריקה על פני 50 טיקרים ו-20 תאריכים היא 1,000 קריאות propagate(), כך שבחירת מודל quick-think שנראית שולית בהרצה אחת שולטת בחשבון הטוקן בקנה מידה של סריקה.
תשלום לפי שימוש · מתחת למחיר הרשמי
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.5 | $5.00 / $30.00 per M | $4.00 / $24.00 per M |
| Gemini 3.1 Pro Preview | $2.00 / $12.00 per M | $1.60 / $9.60 per M |
| DeepSeek V4 Pro | $0.43 / $0.87 per M | $0.40 / $0.90 per M |
בדיקות backtest בקנה מידה: מפתחות, נעיצה, ומגבלות.
ברגע שההגדרה להרצה בודדת עובדת, שטח הכשל עובר אל הסריקה. שלוש הרגלים שומרים על backtest רב-יומי בר-שחזור וניתן-לדיבוג. נעצו ids מדויקים של מודלים. שמות מודל גולמיים אצל חלק מהספקים הם מצביעים מתגלגלים שעוברים בשקט ל-snapshots חדשים יותר, מה שאומר ש-backtest שהתחיל ביום שני והסתיים ביום שישי אולי לא הריץ מודל אחד. היכן שהקטלוג מפרט וריאנט מתוארך, שימו את ה-id המתוארך בהגדרה, ורשמו ביומן את ה-dict של ההגדרה לצד התוצאות כמו שהייתם רושמים random seed. השתמשו במפתח אחד לכל ניסוי. מפתחות חופשיים ליצירה, וקיבוע מפתח לסריקה הופך את לוג השימוש לספר החשבונות של הניסוי: ספירות טוקן והוצאה לכל מודל, ניתנים לסינון בדיוק להרצות שבסריקה הזו. כששני ניסויים חולקים מפתח, ייחוס הוצאה בדיעבד פירושו לחפש timestamps. דעו את תקרת המקביליות שלכם לפני שאתם מקבילים. propagate() סינכרוני לכל טיקר-תאריך, כך שסריקות בדרך כלל מתפצלות על פני תהליכים. כל shard מכפיל את קצב הבקשות על סלוט quick-think קודם, ו-429 באמצע ויכוח עולה הרצה שלמה, לא בקשה אחת. העלו את מספר ה-shards בהדרגה תוך צפייה בקונסולה במקום להשיק חמישים workers קר; ערוצי upstream עם pool מעלים את התקרה אבל לא הופכים אותה לאינסופית.
מי מנתב את TradingAgents דרך gateway.
- מבצעי backtest שמריצים סריקות טיקר-לפי-תאריך. מאות קריאות propagate() לכל ניסוי הופכות נראות שימוש-לפי-מפתח ומשטח חיוב יחיד לשימושיים יותר מארבעה לוחות מחוונים ספק.
- חוקרים שמשווים זוגות מודלים. החלפת deep_think_llm בין ids של Claude, GPT, ו-DeepSeek היא עריכת הגדרה מול endpoint אחד, לא חשבון ספק חדש לכל מועמד.
- צוותים שמערבבים ספקים לפי תפקיד. Claude לוויכוח, DeepSeek לנפח האנליסטים. מצב provider נטיבי נועל הרצה לספק אחד; endpoint רב-ספקים לא.
- מפתחים ללא גישה לחיוב של ספק נתון. גישה מבוססת-הטענה בלי דרישת כרטיס מסירה את תלות ההרשמה לכל ספק.
- הרצות מתוזמנות ו-CI. ההגדרה מבוססת-הסביבה-בלבד אומרת ש-image ה-runner צריך סוד אחד (OPENAI_COMPATIBLE_API_KEY) במקום אחד לכל ספק.
אמתו את ה-endpoint ובצעו דיבוג להרצה הראשונה.
לפני הרצת ניתוח מלא, אשרו שה-endpoint עונה עם המודלים שאתם מתכננים להשתמש בהם. curl בשורה אחת מול /v1/models עם המפתח שלכם מציג כל id ניתן-לכתובת; המחרוזות ב-deep_think_llm וב-quick_think_llm חייבות להתאים ל-ids האלה בדיוק. מצבי הכשל בהרצה ראשונה עקביים. 401 כמעט תמיד אומר ש-OPENAI_COMPATIBLE_API_KEY יוצא ב-shell שונה מזה שמריץ את tradingagents, או שלא יוצא בכלל; משתני סביבה שהוגדרו ב-.bashrc לא מגיעים ל-unit של systemd או משימת cron אלא אם קובץ ה-unit עצמו מייצא אותם. שגיאת model-not-found אומרת שמחרוזת ה-id לא תואמת את הקטלוג: ids מדויקים, כולל סיומות גרסה, ופלט ה-/v1/models למעלה הוא מקור האמת. שגיאת חיבור עם backend_url מוגדר בדרך כלל אומרת שה-URL חסר את הסיומת /v1 שלו, מכיוון שה-client מוסיף נתיבי route כמו /chat/completions לכל בסיס שלא תתנו. אם ההרצה עובדת אבל נראית תקועה בשלב הוויכוח, זו latency נורמלית עבור מודלי נימוק על פני הקשרים ארוכים ולא בעיית endpoint; השאירו debug=True כדי לצפות בצעדי ה-agent זורמים. timeouts אמיתיים על תורות deep-think ארוכות מאוד הם הגדרה בצד-הלקוח, ושווה להעלות אותם לפני שאתם מסיקים שה-backend הפיל את הבקשה. ברגע שבקשות זורמות, קונסולת APIsRouter מציגה מודל לכל בקשה, ספירות טוקן, והוצאה, וזו הדרך המהירה ביותר לראות בדיוק לאן הולכים הטוקנים של הרצה עבור framework כבד-קריאות כמו זה.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $OPENAI_COMPATIBLE_API_KEY" | head -50שאלות נפוצות
האם TradingAgents תומך במודלי Claude ו-Gemini דרך endpoint openai_compatible אחד?
כן. במצב openai_compatible ה-framework שולח את שדה ה-model כמחרוזת פשוטה אל backend_url מעל /v1/chat/completions. כל id שה-endpoint משרת עובד, כולל ids של Claude, Gemini, ו-DeepSeek, בכל אחד מסלוטי ה-deep-think או ה-quick-think.
איזה מפתח API TradingAgents משתמש בו עם backend_url מותאם אישית?
OPENAI_COMPATIBLE_API_KEY. ספק ה-openai_compatible קורא אותו מהסביבה, כך שהמפתח אף פעם לא מופיע ב-dict ההגדרה שלכם או בקבצי המקור. OPENAI_API_KEY משמש רק על ידי ספק ה-openai הנטיבי.
האם deep_think_llm ו-quick_think_llm יכולים להגיע מספקים שונים באותה הרצה?
דרך endpoint רב-ספקים, כן: שני הסלוטים שולחים אל אותו backend_url ומחרוזת המודל קובעת את הספק לכל בקשה. עם ספקים נטיביים (openai, anthropic, google, deepseek) הרצה נעולה לספק אחד עבור שני הסלוטים.
האם אני עדיין צריך חשבון OpenAI ברגע ש-backend_url מוגדר?
לא. עם llm_provider מוגדר ל-openai_compatible, שום בקשה לא הולכת אל hosts של OpenAI ו-OPENAI_API_KEY לא נקרא. אתם עדיין צריכים את אישורי נתוני השוק ש-TradingAgents משתמש בהם (למשל ALPHA_VANTAGE_API_KEY), שבלתי תלויים ב-endpoint של ה-LLM.
האם ה-CLI האינטראקטיבי מכבד גם את ה-endpoint המותאם אישית?
כן. ה-CLI (tradingagents, או python -m cli.main) פותר את אותה הגדרה, ומשתני הסביבה TRADINGAGENTS_LLM_PROVIDER / TRADINGAGENTS_LLM_BACKEND_URL דורסים אותה לפני שאלת ה-provider, כך שהרצות CLI מתוזמנות או ב-container לא צריכות קלט אינטראקטיבי לניתוב.
כמה טוקנים ניתוח TradingAgents אחד צורך?
זה משתנה לפי max_debate_rounds, מספר האנליסטים, וכמה הקשר שוק הם קולטים; ניתוח טיקר-תאריך בודד בדרך כלל נוחת במאות אלפי טוקנים, רובם על סלוט ה-quick-think. תצוגת השימוש לפי מפתח בקונסולת APIsRouter מציגה את הפיצול המדויק לכל הרצה, מה שאמין יותר מהערכה.