gpt-researcher একটা কাস্টম OpenAI-compatible endpoint-এ চালান।

Updated 2026-07-30

gpt-researcher environment থেকে OPENAI_BASE_URL পড়ে এবং তার কাজ তিনটা model slot জুড়ে split করে। base URL-কে https://api.apisrouter.com/v1-এ সেট করুন, openai: prefix রাখুন, এবং FAST_LLM, SMART_LLM, এবং STRATEGIC_LLM প্রত্যেকে এক key-এর পিছনে ভিন্ন catalog model হতে পারে।

দ্রুত উত্তর: পাঁচ-লাইনের একটা .env ব্লক।

gpt-researcher-এর documented কাস্টম-endpoint path হলো environment variable। OPENAI_BASE_URL-কে https://api.apisrouter.com/v1-এ সেট করুন, OPENAI_API_KEY-কে আপনার gateway key-তে সেট করুন, এবং তিনটা model slot-কে openai: provider prefix সহ assign করুন। Prefix gpt-researcher-কে বলে দেয় কোন client ব্যবহার করতে হবে; colon-এর পরের string endpoint-এ pass through হয়, তাই gateway যা serve করে সেই id valid, Claude এবং Gemini id সহ। এটাই docs.gptr.dev-এ কাস্টম OpenAI-compatible endpoint-এর জন্য documented configuration, এবং এটা pip package, web app, এবং multi-agent flow-এর জন্য অভিন্নভাবে কাজ করে, কারণ এদের সবাই একই config resolve করে।

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 কীভাবে তিনটা slot জুড়ে token খরচ করে।

gpt-researcher (GitHub-এ assafelovic, প্রায় 28K star) একটা query-কে একটা researched, cited report-এ পরিণত করে: এটা research question plan করে, একটা retriever দিয়ে web search fan out করে, source scrape ও summarize করে, এবং তারপর একটা long-form report লেখে। Framework সেই pipeline-কে এক model-এর বদলে তিনটা configurable model slot জুড়ে split করে। FAST_LLM high-volume, low-stakes কাজ handle করে, প্রধানত scraped page summarize করা। SMART_LLM ভারী writing করে, final report সহ। STRATEGIC_LLM planning handle করে: research question generate করা এবং approach ঠিক করা। Out of the box এগুলো OpenAI model-এ default করে (লেখার সময় যথাক্রমে gpt-4o-mini, gpt-4.1, এবং o4-mini), যে কারণেই single OPENAI_BASE_URL override এতটা effective: তিনটা slot-ই OpenAI-shaped client ব্যবহার করে, তাই এক base URL পুরো pipeline move করে। প্রতিটা slot তার নিজস্ব provider:model string নেয় বলে, slot-গুলোর এক vendor share করার দরকার নেই। একটা run একটা fast Claude model দিয়ে summarize করতে পারে, একটা stronger Claude বা GPT model দিয়ে লিখতে পারে, এবং একটা reasoning-tier model দিয়ে plan করতে পারে, সবই একই endpoint এবং key দিয়ে। একটা single-vendor key-তে সেই mix তিনটা account দাবি করত; একটা gateway-র পিছনে এটা .env-এ তিন লাইন।

সম্পূর্ণ সেটআপ: .env প্লাস Python API।

আপনার working directory-তে একটা .env file বানান (বা shell-এ variable export করুন) এবং যথারীতি gpt-researcher চালান; pip package এবং web app দুটোই একই environment পড়ে। Python API-এর কোনো endpoint-specific code দরকার নেই মোটেও, যেটাই মূল কথা: routing হলো configuration, এবং research code endpoint OpenAI-র হোক বা একটা gateway-র, একই থাকে। দুটো সংলগ্ন setting গুরুত্বপূর্ণ। Web retrieval একটা retriever দিয়ে চলে, default হিসেবে Tavily, তার নিজস্ব key সহ (TAVILY_API_KEY); সেই credential LLM endpoint থেকে স্বাধীন এবং live web research-এর জন্য এখনও প্রয়োজনীয়। এবং embedding default করে openai:text-embedding-3-small-এ, মানে embedding call একই OpenAI-shaped client configuration অনুসরণ করে; OPENAI_BASE_URL-এর পিছনের endpoint সেই embedding model serve না করলে, EMBEDDING-কে এমন একটা provider-এ configure করুন যা করে (doc OpenAI-compatible embedding endpoint-এর জন্য custom: prefix ব্যবহার করে, এবং Ollama-র মতো local option-ও সাপোর্টেড)।

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

প্রতি slot-এ model বেছে নেওয়া।

Upstream default সঠিক shape encode করে, volume-এর জন্য ছোট model, writing-এর জন্য strong model, planning-এর জন্য reasoning model, তাই সেই shape রাখুন এবং slot-গুলোকে এক model-এ flatten না করে upgrade করুন। এক endpoint-এর পিছনে, দুইটা writer-এর মধ্যে একটা A/B হলো run প্রতি এক-লাইনের .env change, এবং per-key usage log আপনাকে বলে দেয় প্রতিটা report configuration আসলে কত খরচ করেছে।

  • FAST_LLM সবচেয়ে বেশি fire করে: প্রতিটা scraped source summarize হয়। একটা fast id (claude-haiku-4-5-20251001, deepseek-v4-flash) একটা many-source report-কে summarization cost দিয়ে dominate হওয়া থেকে আটকায়, এবং এখানে quality loss bounded কারণ summary reader না, writer-কে feed করে।
  • SMART_LLM সেই report লেখে যা user আসলে পড়ে। লম্বা output, sustained structure, citation discipline: এখানেই claude-sonnet-4-6 বা gpt-5.5 তার spend আয় করে, এবং যেখানে quality কমালে তা সাথে সাথে দেখা যায়।
  • STRATEGIC_LLM run শুরু হওয়ার আগে সেটাকে আকার দেয়। খারাপ research question একটা খারাপ report তৈরি করে writer যতই ভালো হোক না কেন; একটা reasoning-strong model এখানে কম call কিন্তু high leverage।
  • gemini-3.1-pro-preview-এর মতো long-context id detailed_report run-এ SMART slot-এ test করার যোগ্য, যেখানে writer summary-র একটা বড় accumulated context জুড়ে কাজ করে।

ব্যবহার অনুযায়ী পেমেন্ট · অফিশিয়াল মূল্যের নিচে

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-specific failure mode।

Provider prefix বাদ দেওয়া। Slot format হলো provider:model, এবং prefix client বেছে নেয়। openai: ছাড়া SMART_LLM=claude-sonnet-4-6 সেট করলে একটা Claude id আপনার base URL দিয়ে route হয় না; এটা gpt-researcher-কে string-টা একটা ভিন্ন provider হিসেবে interpret করার চেষ্টা করায়। প্রতিটা কাস্টম-endpoint model-কে openai: prefix রাখতে হবে, কারণ এখানে "openai" protocol-এর নাম দেয়, vendor-এর না। Override নীরবে অনুসরণ করা Embedding। Default EMBEDDING একটা OpenAI-shaped model, তাই OPENAI_BASE_URL একবার একটা gateway-তে point করলে, embedding request-ও সেখানেই যায়। Gateway সেই embedding id serve না করলে, research run প্রথম chat call-এ না বরং source processing-এর সময় fail করে, যা মানুষকে ভুল slot debug করতে বিভ্রান্ত করে। EMBEDDING explicitly সেট করুন আর symptom অদৃশ্য হয়ে যায়। Retriever failure-এর জন্য endpoint-কে দোষারোপ করা। একটা missing বা exhausted TAVILY_API_KEY search phase ভেঙে দেয়, এবং resulting empty-source error উপরিভাবে LLM failure-এর মতো দেখায়। Retriever একটা আলাদা key সহ আলাদা service; আলাদাভাবে check করুন। Run-এর মধ্যে stale environment। .env file working directory থেকে পড়া হয়। এক directory থেকে web app এবং আরেক directory থেকে Python API চালানো মানে দুইটা ভিন্ন config, এবং "app-এ কাজ করে কিন্তু আমার script-এ না" প্রায় সবসময় এটাই। Token-limit setting model capability থেকে আলাদা। gpt-researcher-এর নিজস্ব per-slot token limit আছে (FAST_TOKEN_LIMIT, SMART_TOKEN_LIMIT, এবং সংশ্লিষ্ট setting) conservative default সহ। SMART_LLM-কে একটা long-context model-এ point করা নিজে থেকে সেই limit বাড়ায় না; লম্বা generation চাইলে ইচ্ছাকৃতভাবে সেগুলো tune করুন।

কারা একটা gateway দিয়ে gpt-researcher route করে।

  • Recurring report generate করা Team (market scan, literature review, competitive brief) যেখানে তিনটা model slot জুড়ে per-run cost visibility একটা single vendor relationship-এর চেয়ে বেশি গুরুত্বপূর্ণ।
  • Writer model তুলনা করা Researcher। FAST এবং STRATEGIC ধরে রেখে SMART-কে Claude, GPT, এবং DeepSeek id-র মধ্যে swap করা তিনটা .env edit, তিনটা vendor account না।
  • Product-এ gpt-researcher embed করা Builder, যেখানে প্রতি environment এক gateway key deploy pipeline-এ vendor secret-এর একটা bundle replace করে।
  • যে ব্যবহারকারীরা Claude বা Gemini-কে report writing করাতে চান, gpt-researcher-এর stock OpenAI-shaped configuration স্পর্শ না করেই।
  • Developer যাদের কোনো নির্দিষ্ট vendor-এর billing-এ access নেই। কোনো card requirement ছাড়া Top-up based access per-provider sign-up dependency সরিয়ে দেয়।

Endpoint verify করুন এবং প্রথম report debug করুন।

প্রথমে gateway-এর model list করুন; প্রতিটা slot-এ openai:-এর পরের string exactly একটা served id-র সাথে মিলতে হবে, version suffix সহ। প্রথম-run failure পরিষ্কারভাবে sort হয়। একটা 401 মানে process আসলে যে environment দেখে সেখানে OPENAI_API_KEY নেই; .env file working directory থেকে load হয়, তাই file যেখানে থাকে সেখান থেকে চালান বা globally variable export করুন। একটা model-not-found error typo-সহ slot-এর নাম দেয়। Planning-এর সময় না বরং source processing-এর সময় একটা failure embedding বা retriever-এর দিকে ইঙ্গিত করে, chat slot-এর দিকে না: LLM config touch করার আগে EMBEDDING এবং TAVILY_API_KEY check করুন। একটা পূর্ণ research run মানে তিনটা slot জুড়ে ডজন ডজন request-এর একটা burst, তাই এটা শেষ হলে, real token এবং real spend-এ FAST/SMART/STRATEGIC split দেখার সবচেয়ে দ্রুত উপায় হলো APIsRouter console-এর per-request view, এবং একটা slot ধরতে যা তার role-এর প্রাপ্যতার চেয়ে বেশি খরচ করছে।

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

সাধারণ প্রশ্ন

gpt-researcher কি OPENAI_BASE_URL দিয়ে Claude বা Gemini model ব্যবহার করতে পারে?

হ্যাঁ। openai: prefix OpenAI-shaped client বেছে নেয়, এবং colon-এর পরের model string endpoint-এ pass through হয়। gateway যা serve করে সেই id তিনটা slot-এর যেকোনোটিতেই valid, Claude, Gemini, এবং DeepSeek id সহ।

FAST_LLM, SMART_LLM, এবং STRATEGIC_LLM-কে কি একই vendor হতে হবে?

না। প্রতিটা slot একটা independent provider:model string। একটা multi-vendor endpoint-এর পিছনে, একটা সাধারণ setup হলো summary-র জন্য একটা fast Claude id, report writing-এর জন্য একটা stronger Claude বা GPT id, এবং planning-এর জন্য একটা reasoning-tier id, সবই এক key-তে।

LLM endpoint পাল্টানোর পর কি আমার এখনও একটা Tavily key দরকার?

হ্যাঁ, live web research চাইলে। Retriever (default Tavily, RETRIEVER দিয়ে সেট) search result fetch করে এবং তার নিজস্ব key আছে। এটা LLM endpoint থেকে আলাদা একটা service এবং OPENAI_BASE_URL দ্বারা অপ্রভাবিত।

OPENAI_BASE_URL সেট করলে embedding-এর কী হয়?

Default embedding একটা OpenAI-shaped model, তাই embedding call একই client configuration অনুসরণ করে এবং আপনার gateway-তে আঘাত করে। Gateway সেই embedding id serve না করলে, EMBEDDING-কে explicitly এমন একটা provider-এ সেট করুন যা করে, বা একটা local option-এ; নাহলে run source processing-এর সময় fail করে।

এই configuration কি web app এবং multi-agent mode-এর জন্যও কাজ করে?

হ্যাঁ। pip package, web application, এবং multi-agent flow সবাই একই environment configuration resolve করে, তাই এক .env file তাদের অভিন্নভাবে route করে।

Gateway দিয়ে একটা research run কত খরচ করে?

এটা report type এবং retriever কতগুলো source return করে তার উপর নির্ভর করে: FAST_LLM প্রতিটা source summarize করে, SMART_LLM report লেখে, STRATEGIC_LLM plan করে। বেশিরভাগ run কয়েক দশ হাজার থেকে কয়েক লক্ষ token-এ পৌঁছায়। per-key usage view exact per-slot split দেখায়, যা অনুমানের চেয়ে ভালো।