הריצו את gpt-researcher על endpoint תואם OpenAI מותאם אישית.

Updated 2026-07-30

gpt-researcher קורא את OPENAI_BASE_URL מהסביבה ומפצל את העבודה שלו על פני שלושה סלוטי מודל. הגדירו את ה-base URL ל-https://api.apisrouter.com/v1, שמרו על הקידומת openai:, ו-FAST_LLM, SMART_LLM, ו-STRATEGIC_LLM יכולים כל אחד להיות מודל קטלוג אחר מאחורי מפתח אחד.

תשובה מהירה: בלוק .env בן חמש שורות.

הנתיב המתועד של gpt-researcher ל-endpoint מותאם אישית הוא משתני סביבה. הגדירו את OPENAI_BASE_URL ל-https://api.apisrouter.com/v1, הגדירו את OPENAI_API_KEY למפתח ה-gateway שלכם, והקצו את שלושת סלוטי המודל עם קידומת ה-provider בשם openai:. הקידומת אומרת ל-gpt-researcher איזה client להשתמש בו; המחרוזת אחרי הנקודתיים מועברת אל ה-endpoint, כך שכל id שה-gateway משרת תקף, כולל ids של Claude ו-Gemini. זו ההגדרה המתועדת ב-docs.gptr.dev עבור endpoints תואמי OpenAI מותאמים אישית, והיא עובדת באופן זהה עבור חבילת ה-pip, אפליקציית ה-web, וזרימות ה-multi-agent, מכיוון שכולן פותרות את אותה ההגדרה.

OPENAI_BASE_URL=https://api.apisrouter.com/v1
OPENAI_API_KEY=sk-APIsRouter-...
FAST_LLM=openai:claude-haiku-4-5-20251001
SMART_LLM=openai:claude-sonnet-4-6
STRATEGIC_LLM=openai:gpt-5.5

איך gpt-researcher מוציא טוקנים על פני שלושה סלוטים.

gpt-researcher (assafelovic ב-GitHub, כ-28K כוכבים) הופך שאילתה לדוח מחקר עם ציטוטים: הוא מתכנן שאלות מחקר, מפזר חיפושי web דרך retriever, גורד ומסכם מקורות, ואז כותב דוח ארוך-טופס. ה-framework מפצל את הצינור הזה על פני שלושה סלוטי מודל ניתנים להגדרה במקום אחד. FAST_LLM מטפל בעבודה בנפח-גבוה וסיכון-נמוך, בעיקר סיכום דפים שנגרדו. SMART_LLM עושה את הכתיבה הכבדה, כולל הדוח הסופי. STRATEGIC_LLM מטפל בתכנון: ייצור שאלות המחקר והחלטה על הגישה. כברירת מחדל אלה מוגדרים למודלי OpenAI (gpt-4o-mini, gpt-4.1, ו-o4-mini בהתאמה בעת כתיבת שורות אלה), וזו בדיוק הסיבה שדריסת OPENAI_BASE_URL היחידה יעילה כל כך: כל שלושת הסלוטים משתמשים ב-client בצורת-OpenAI, כך ש-base URL אחד מזיז את כל הצינור. מכיוון שכל סלוט לוקח מחרוזת provider:model משלו, הסלוטים לא צריכים לחלוק ספק. הרצה יכולה לסכם עם מודל Claude מהיר, לכתוב עם מודל Claude או GPT חזק יותר, ולתכנן עם מודל בשכבת-נימוק, הכל דרך אותו endpoint ומפתח. על מפתח ספק-יחיד התמהיל הזה היה דורש שלושה חשבונות; מאחורי gateway זה שלוש שורות ב-.env.

הגדרה מלאה: .env בתוספת ה-Python API.

צרו קובץ .env בתיקיית העבודה שלכם (או ייצאו את המשתנים ב-shell) והריצו את gpt-researcher כרגיל; גם חבילת ה-pip וגם אפליקציית ה-web קוראות את אותה הסביבה. ה-Python API לא צריך שום קוד ספציפי-ל-endpoint בכלל, וזו הנקודה: הניתוב הוא הגדרה, וקוד המחקר נשאר זהה בין אם ה-endpoint הוא של OpenAI או של gateway. שתי הגדרות סמוכות חשובות. אחזור web רץ דרך retriever, Tavily כברירת מחדל, עם מפתח משלו (TAVILY_API_KEY); האישור הזה בלתי תלוי ב-endpoint של ה-LLM ועדיין נדרש למחקר web חי. ו-embeddings כברירת מחדל הם openai:text-embedding-3-small, מה שאומר שקריאות ה-embedding עוקבות אחר אותה הגדרת client בצורת-OpenAI; אם ה-endpoint מאחורי OPENAI_BASE_URL לא משרת את מודל ה-embedding הזה, הגדירו את EMBEDDING לספק שכן (התיעוד משתמש בקידומת custom: עבור endpoints תואמי-OpenAI של embedding, ואפשרויות מקומיות כמו Ollama נתמכות גם הן).

import asyncio
from gpt_researcher import GPTResearcher

async def main():
    researcher = GPTResearcher(
        query="State of small modular reactors in 2026",
        report_type="research_report",
    )
    await researcher.conduct_research()
    report = await researcher.write_report()
    print(report)

asyncio.run(main())  # routing comes entirely from .env

בחירת מודלים לכל סלוט.

ברירות המחדל של ה-upstream מקודדות את הצורה הנכונה, מודל קטן לנפח, מודל חזק לכתיבה, מודל נימוק לתכנון, אז שמרו על הצורה הזו ושדרגו את הסלוטים במקום להשטיח אותם למודל אחד. מאחורי endpoint אחד, A/B בין שני כותבים הוא שינוי .env בשורה אחת לכל הרצה, ולוג השימוש לפי מפתח אומר לכם מה כל הגדרת דוח באמת עלתה.

  • FAST_LLM יורה הכי הרבה: כל מקור שנגרד מסוכם. id מהיר (claude-haiku-4-5-20251001, deepseek-v4-flash) שומר על דוח עם הרבה-מקורות מלהיות נשלט על ידי עלות סיכום, ואובדן איכות כאן מוגבל מכיוון שסיכומים מזינים את הכותב ולא את הקורא.
  • SMART_LLM כותב את הדוח שהמשתמש באמת קורא. פלט ארוך, מבנה מתמשך, משמעת ציטוטים: כאן claude-sonnet-4-6 או gpt-5.5 מרוויח את ההוצאה, וכאן קיצוץ באיכות מופיע מיד.
  • STRATEGIC_LLM מעצב את ההרצה לפני שהיא מתחילה. שאלות מחקר גרועות מייצרות דוח גרוע לא משנה כמה טוב הכותב; מודל חזק-בנימוק כאן הוא מעט קריאות אבל מינוף גבוה.
  • ids בהקשר-ארוך כמו gemini-3.1-pro-preview שווים בדיקה בסלוט ה-SMART עבור הרצות detailed_report, שבהן הכותב עובד על פני הקשר גדול שנצבר מסיכומים.

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

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

מודלמחיר רשמיהמחיר שלנו
Claude Haiku 4.5 20251001$1.00 / $5.00 per M$0.80 / $4.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

מצבי הכשל הספציפיים ל-gpt-researcher.

השמטת קידומת ה-provider. פורמט הסלוט הוא provider:model, והקידומת בוחרת את ה-client. הגדרת SMART_LLM=claude-sonnet-4-6 בלי openai: לא מנתבת id של Claude דרך ה-base URL שלכם; היא גורמת ל-gpt-researcher לנסות לפרש את המחרוזת כספק אחר. כל מודל endpoint-מותאם-אישית חייב לשמור את הקידומת openai:, מכיוון ש-"openai" כאן נוקב בפרוטוקול, לא בספק. Embeddings שעוקבים בשקט אחרי הדריסה. ה-EMBEDDING ברירת המחדל הוא מודל בצורת-OpenAI, אז ברגע ש-OPENAI_BASE_URL מצביע אל gateway, בקשות embedding הולכות לשם גם כן. אם ה-gateway לא משרת את ה-id של embedding הזה, הרצות מחקר נכשלות במהלך עיבוד מקורות במקום בקריאת הצ'אט הראשונה, מה שמטעה אנשים לבצע דיבוג לסלוט הלא נכון. הגדירו EMBEDDING במפורש והתסמין נעלם. האשמת ה-endpoint בכשלי retriever. TAVILY_API_KEY חסר או מוצה שובר את שלב החיפוש, ושגיאות המקור-הריק שנובעות נראות שטחית כמו כשלי LLM. ה-retriever הוא שירות נפרד עם מפתח נפרד; בדקו אותו בנפרד. סביבה מיושנת בין הרצות. קובץ ה-.env נקרא מתיקיית העבודה. הרצת אפליקציית ה-web מתיקייה אחת וה-Python API מאחרת פירושה שתי הגדרות שונות, ו-"זה עובד באפליקציה אבל לא בסקריפט שלי" הוא כמעט תמיד זה. הגדרות מגבלת-טוקן נפרדות מיכולת המודל. gpt-researcher נושא מגבלות טוקן משלו לכל-סלוט (FAST_TOKEN_LIMIT, SMART_TOKEN_LIMIT, והגדרות קשורות) עם ברירות מחדל שמרניות. הפניית SMART_LLM אל מודל בהקשר-ארוך לא מעלה בעצמה את המגבלות האלה; כווננו אותן במכוון אם אתם רוצים יצירות ארוכות יותר.

מי מנתב את gpt-researcher דרך gateway.

  • צוותים שמייצרים דוחות חוזרים (סריקות שוק, סקירות ספרות, תדריכי תחרות) שם נראות עלות-לכל-הרצה על פני שלושה סלוטי מודל חשובה יותר מיחסי ספק בודדים.
  • חוקרים שמשווים מודלי כותב. שמירת FAST ו-STRATEGIC קבועים תוך החלפת SMART בין ids של Claude, GPT, ו-DeepSeek היא שלוש עריכות .env, לא שלושה חשבונות ספק.
  • בונים שמטמיעים את gpt-researcher במוצרים, שם מפתח gateway אחד לכל סביבה מחליף חבילת סודות ספק בצינור הפריסה.
  • משתמשים שרוצים ש-Claude או Gemini יכתבו את הדוח תוך שמירה על הגדרת ה-OpenAI הסטנדרטית של gpt-researcher ללא שינוי.
  • מפתחים ללא גישה לחיוב של ספק נתון. גישה מבוססת-הטענה בלי דרישת כרטיס מסירה את התלות בהרשמה לכל ספק.

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

רשמו קודם את המודלים של ה-gateway; המחרוזת אחרי openai: בכל סלוט חייבת להתאים בדיוק ל-id מוגש, כולל סיומות גרסה. כשלי הרצה ראשונה ממוינים בבירור. 401 אומר ש-OPENAI_API_KEY נעדר מהסביבה שהתהליך באמת רואה; קבצי .env נטענים מתיקיית העבודה, אז הריצו מהמקום שבו הקובץ חי או ייצאו את המשתנים גלובלית. שגיאת model-not-found נוקבת בסלוט עם טעות ההקלדה. כשל במהלך עיבוד מקורות במקום בזמן תכנון מצביע על embeddings או ה-retriever, לא על סלוטי הצ'אט: בדקו EMBEDDING ו-TAVILY_API_KEY לפני שאתם נוגעים בהגדרת ה-LLM. הרצת מחקר מלאה היא פרץ של עשרות בקשות על פני שלושת הסלוטים, אז ברגע שהיא מסתיימת, התצוגה לכל-בקשה של קונסולת APIsRouter היא הדרך המהירה ביותר לראות את הפיצול FAST/SMART/STRATEGIC בטוקנים אמיתיים והוצאה אמיתית, ולתפוס סלוט שצורך יותר ממה שהתפקיד שלו מצדיק.

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

שאלות נפוצות

האם gpt-researcher יכול להשתמש במודלי Claude או Gemini דרך OPENAI_BASE_URL?

כן. הקידומת openai: בוחרת את ה-client בצורת-OpenAI, ומחרוזת המודל אחרי הנקודתיים מועברת אל ה-endpoint. כל id שה-gateway משרת תקף בכל אחד משלושת הסלוטים, כולל ids של Claude, Gemini, ו-DeepSeek.

האם FAST_LLM, SMART_LLM, ו-STRATEGIC_LLM חייבים להיות מאותו ספק?

לא. כל סלוט הוא מחרוזת provider:model עצמאית. מאחורי endpoint רב-ספקים, הגדרה נפוצה היא id מהיר של Claude לסיכומים, id חזק יותר של Claude או GPT לכתיבת הדוח, ו-id בשכבת-נימוק לתכנון, הכל על מפתח אחד.

האם אני עדיין צריך מפתח Tavily אחרי שינוי ה-endpoint של ה-LLM?

כן, אם אתם רוצים מחקר web חי. ה-retriever (Tavily כברירת מחדל, מוגדר דרך RETRIEVER) מביא תוצאות חיפוש ויש לו מפתח משלו. זהו שירות נפרד מ-endpoint ה-LLM ולא מושפע מ-OPENAI_BASE_URL.

מה קורה ל-embeddings כשאני מגדיר OPENAI_BASE_URL?

ה-embedding ברירת המחדל הוא מודל בצורת-OpenAI, כך שקריאות embedding עוקבות אחר אותה הגדרת client ופוגעות ב-gateway שלכם. אם ה-gateway לא משרת את ה-id של embedding הזה, הגדירו את EMBEDDING במפורש לספק שכן, או לאופציה מקומית; אחרת הרצות נכשלות במהלך עיבוד מקורות.

האם ההגדרה הזו עובדת גם עבור אפליקציית ה-web ומצב ה-multi-agent?

כן. חבילת ה-pip, אפליקציית ה-web, וזרימות ה-multi-agent כולן פותרות את אותה הגדרת סביבה, כך שקובץ .env אחד מנתב אותן באופן זהה.

כמה עולה הרצת מחקר אחת דרך ה-gateway?

זה תלוי בסוג הדוח ובכמה מקורות ה-retriever מחזיר: FAST_LLM מסכם כל מקור, SMART_LLM כותב את הדוח, STRATEGIC_LLM מתכנן. רוב ההרצות נוחתות בעשרות עד מאות אלפי טוקנים. תצוגת השימוש לפי מפתח מציגה את הפיצול המדויק לכל סלוט, מה שעדיף על הערכה.