Patakbuhin ang gpt-researcher sa isang custom OpenAI-compatible endpoint.

Updated 2026-07-30

Binabasa ng gpt-researcher ang OPENAI_BASE_URL mula sa environment at hinahati ang trabaho nito sa tatlong model slot. Itakda ang base URL sa https://api.apisrouter.com/v1, panatilihin ang openai: prefix, at maaaring magkaiba ang FAST_LLM, SMART_LLM, at STRATEGIC_LLM na model ng katalogo sa likod ng iisang key.

Mabilisang sagot: isang limang-linyang .env block.

Ang nadokumentong custom-endpoint path ng gpt-researcher ay mga environment variable. Itakda ang OPENAI_BASE_URL sa https://api.apisrouter.com/v1, itakda ang OPENAI_API_KEY sa gateway key mo, at i-assign ang tatlong model slot gamit ang openai: provider prefix. Sinasabi ng prefix sa gpt-researcher kung aling client ang gagamitin; ipinapasa ang string pagkatapos ng colon sa endpoint, kaya valid ang anumang id na si-serve ng gateway, kasama na ang mga Claude at Gemini id. Ito ang configuration na nadokumento sa docs.gptr.dev para sa mga custom OpenAI-compatible endpoint, at gumagana ito nang magkatulad para sa pip package, sa web app, at sa mga multi-agent flow, dahil lahat ng ito ay ni-resolve ang parehong config.

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

Paano ginagastos ng gpt-researcher ang mga token sa tatlong slot.

Ang gpt-researcher (assafelovic sa GitHub, humigit-kumulang 28K stars) ay ginagawang isang nasaliksik at may-citation na report ang isang query: nagpaplano ito ng mga tanong sa pananaliksik, kumakalat ng mga web search sa pamamagitan ng isang retriever, nagsu-scrape at nagbubuod ng mga source, at pagkatapos ay sumusulat ng long-form na report. Hinahati ng framework ang pipeline na iyon sa tatlong ma-configure na model slot sa halip na iisa lamang. Hinahawakan ng FAST_LLM ang mataas na volume, mababang stakes na trabaho, pangunahin ang pagbubuod ng mga na-scrape na page. Ang SMART_LLM ang gumagawa ng mabigat na pagsusulat, kasama na ang huling report. Hinahawakan ng STRATEGIC_LLM ang pagpaplano: paggawa ng mga tanong sa pananaliksik at pagdedesisyon sa approach. Sa labas ng kahon, nagde-default ang tatlong ito sa mga model ng OpenAI (gpt-4o-mini, gpt-4.1, at o4-mini ayon-ayon sa oras ng pagsulat), kaya naman napaka-epektibo ng iisang OPENAI_BASE_URL override: gumagamit ang tatlong slot ng OpenAI-shaped na client, kaya iisang base URL ang naglilipat sa buong pipeline. Dahil kumukuha ang bawat slot ng sarili nitong provider:model string, hindi kailangang magbahagi ng vendor ang mga slot. Maaaring magbuod ang isang run gamit ang mabilis na Claude model, sumulat gamit ang mas malakas na Claude o GPT model, at magplano gamit ang isang reasoning-tier na model, lahat sa pamamagitan ng parehong endpoint at key. Sa isang single-vendor na key, mangangailangan ang paghahalong iyon ng tatlong account; sa likod ng isang gateway, tatlong linya lamang ito sa .env.

Buong setup: .env kasama ang Python API.

Gumawa ng isang .env file sa working directory mo (o i-export ang mga variable sa shell) at patakbuhin ang gpt-researcher gaya ng dati; binabasa ng pip package at ng web app ang parehong environment. Walang kailangang endpoint-specific na code ang Python API, iyan mismo ang punto: configuration ang routing, at nananatiling magkatulad ang research code kahit na ang endpoint ay sa OpenAI o sa isang gateway. May dalawang katabing setting na mahalaga. Tumatakbo ang web retrieval sa pamamagitan ng isang retriever, Tavily bilang default, na may sariling key (TAVILY_API_KEY); hiwalay ang credential na iyon sa LLM endpoint at kailangan pa rin para sa live na web research. At nagde-default ang embeddings sa openai:text-embedding-3-small, ibig sabihin ay sumusunod ang mga embedding call sa parehong OpenAI-shaped na client configuration; kung hindi si-serve ng endpoint sa likod ng OPENAI_BASE_URL ang embedding model na iyon, i-configure ang EMBEDDING sa isang provider na si-serve ito (gumagamit ang docs ng custom: prefix para sa mga OpenAI-compatible embedding endpoint, at sinusuportahan din ang mga local na opsyon tulad ng 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

Pagpili ng mga model per slot.

Iginagabay ng mga upstream default ang tamang hugis, maliit na model para sa volume, malakas na model para sa pagsulat, reasoning model para sa pagpaplano, kaya panatilihin ang hugis na iyon at i-upgrade ang mga slot sa halip na pantayin ang lahat sa isang model. Sa likod ng isang endpoint, isang linyang pagbabago sa .env per run ang isang A/B sa pagitan ng dalawang manunulat, at sinasabi ng per-key usage log kung magkano talaga ang naigastos ng bawat configuration ng report.

  • Ang FAST_LLM ang pinaka-madalas gumana: binubuod ang bawat na-scrape na source. Ang isang mabilis na id (claude-haiku-4-5-20251001, deepseek-v4-flash) ay nag-iingat na hindi dominado ng gastos sa summarization ang isang report na maraming source, at limitado ang epekto sa kalidad dito dahil ang mga buod ay pinapakain sa manunulat, hindi sa mambabasa.
  • Isinusulat ng SMART_LLM ang report na tunay na binabasa ng user. Mahabang output, sustained na istruktura, disiplina sa citation: dito talaga sulit ang gastos sa claude-sonnet-4-6 o gpt-5.5, at agad na lumalabas dito ang pagbaba ng kalidad.
  • Hinuhubog ng STRATEGIC_LLM ang run bago pa ito magsimula. Ang mahihinang tanong sa pananaliksik ay gumagawa ng mahinang report gaano man kagaling ang manunulat; kaunting tawag pero malaking leverage ang isang matibay-sa-reasoning na model dito.
  • Sulit subukan ang mga long-context na id tulad ng gemini-3.1-pro-preview sa SMART slot para sa mga detailed_report na run, kung saan gumagana ang manunulat sa ibabaw ng isang malaking naipong context ng mga buod.

Pay-as-you-go · mas mababa sa opisyal na presyo

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

ModelOpisyal na PresyoAming Presyo
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

Ang mga failure mode na specific sa gpt-researcher.

Ang pagkakaltas sa provider prefix. Ang format ng slot ay provider:model, at ang prefix ang pumipili ng client. Ang pagtatakda ng SMART_LLM=claude-sonnet-4-6 nang wala ang openai: ay hindi nagruruta ng isang Claude id sa pamamagitan ng base URL mo; sinusubukan nitong bigyang-kahulugan ng gpt-researcher ang string bilang ibang provider. Dapat panatilihin ng bawat model sa custom endpoint ang openai: prefix, dahil pinapangalanan ng "openai" dito ang protocol, hindi ang vendor. Tahimik na sumusunod ang embeddings sa override. OpenAI-shaped na model ang default na EMBEDDING, kaya kapag nakaturo na ang OPENAI_BASE_URL sa isang gateway, doon din pupunta ang mga embedding request. Kung hindi si-serve ng gateway ang embedding id na iyon, nabibigo ang mga research run habang pinoproseso ang source sa halip na sa unang chat call, na nagliligaw sa mga tao papunta sa maling slot. Itakda nang tahasan ang EMBEDDING at mawawala ang sintomas. Ang pagsisisi sa endpoint dahil sa kabiguan ng retriever. Ang isang nawawala o naubos na TAVILY_API_KEY ay sumisira sa search phase, at ang resultang empty-source na error ay parang LLM failure sa unang tingin. Isang hiwalay na serbisyo na may sariling key ang retriever; tingnan ito nang hiwalay. Ang laon na environment sa pagitan ng mga run. Binabasa ang .env file mula sa working directory. Ang pagpapatakbo ng web app mula sa isang directory at ng Python API mula sa iba ay nangangahulugan ng dalawang magkaibang config, at halos palaging ito ang dahilan ng "gumagana sa app pero hindi sa script ko". Hiwalay ang mga setting ng token limit sa kakayahan ng model. May sarili itong per-slot na token limit ang gpt-researcher (FAST_TOKEN_LIMIT, SMART_TOKEN_LIMIT, at mga kaugnay na setting) na may conservative na default. Ang pagtuturo ng SMART_LLM sa isang long-context na model ay hindi awtomatikong nagtataas ng mga limitasyong iyon; ayusin ang mga ito nang sinasadya kung gusto mo ng mas mahahabang generation.

Sino ang nagru-route ng gpt-researcher sa pamamagitan ng isang gateway.

  • Mga team na gumagawa ng umuulit na mga report (market scans, literature reviews, competitive briefs) kung saan mas mahalaga ang visibility sa gastos per run sa tatlong model slot kaysa sa isang relasyon sa isang vendor.
  • Mga mananaliksik na naghahambing ng mga writer model. Tatlong .env edit lamang, hindi tatlong vendor account, ang panatilihing fixed ang FAST at STRATEGIC habang pinapalitan ang SMART sa pagitan ng Claude, GPT, at DeepSeek id.
  • Mga builder na nag-i-embed ng gpt-researcher sa mga produkto, kung saan pinapalitan ng isang gateway key per environment ang bunton ng vendor secrets sa deploy pipeline.
  • Mga user na gustong ipasulat sa Claude o Gemini ang report habang hindi ginagalaw ang stock na OpenAI-shaped na configuration ng gpt-researcher.
  • Mga developer na walang access sa billing ng isang partikular na vendor. Ang top-up based na access na walang kailangang card ay inaalis ang per-provider na sign-up dependency.

I-verify ang endpoint at i-debug ang unang report.

Ilista muna ang mga model ng gateway; dapat eksaktong tumugma ang string pagkatapos ng openai: sa bawat slot sa isang si-serve na id, kasama na ang mga version suffix. Malinaw na naaayos ang mga kabiguan sa unang run. Ang ibig sabihin ng 401 ay wala ang OPENAI_API_KEY sa environment na aktwal na nakikita ng process; nilo-load ang mga .env file mula sa working directory, kaya patakbuhin mula sa kinaroroonan ng file o i-export ang mga variable nang global. Ang pinapangalanan ng isang model-not-found na error ay ang slot na may typo. Ang isang kabiguan habang pinoproseso ang source sa halip na sa oras ng pagpaplano ay tumuturo sa embeddings o sa retriever, hindi sa mga chat slot: tingnan ang EMBEDDING at TAVILY_API_KEY bago galawin ang LLM config. Isang burst ng dose-dosenang request sa lahat ng tatlong slot ang isang buong research run, kaya kapag natapos na ito, ang per-request na view ng APIsRouter console ang pinakamabilis na paraan para makita ang hati ng FAST/SMART/STRATEGIC sa tunay na tokens at tunay na gastos, at para mahuli ang isang slot na gumagamit ng higit pa sa nararapat sa role nito.

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

Mga madalas itanong

Maaari bang gumamit ang gpt-researcher ng Claude o Gemini models sa pamamagitan ng OPENAI_BASE_URL?

Oo. Pinipili ng openai: prefix ang OpenAI-shaped na client, at ipinapasa ang model string pagkatapos ng colon sa endpoint. Valid ang anumang id na si-serve ng gateway sa alinman sa tatlong slot, kasama na ang mga Claude, Gemini, at DeepSeek id.

Kailangan bang parehong vendor ang FAST_LLM, SMART_LLM, at STRATEGIC_LLM?

Hindi. Independiyenteng provider:model string ang bawat slot. Sa likod ng isang multi-vendor na endpoint, karaniwang setup ang isang mabilis na Claude id para sa mga buod, isang mas malakas na Claude o GPT id para sa pagsulat ng report, at isang reasoning-tier na id para sa pagpaplano, lahat sa isang key.

Kailangan ko pa ba ng Tavily key pagkatapos baguhin ang LLM endpoint?

Oo, kung gusto mo ng live na web research. Kinukuha ng retriever (Tavily bilang default, itinatakda sa pamamagitan ng RETRIEVER) ang mga resulta ng paghahanap at may sarili itong key. Hiwalay na serbisyo ito sa LLM endpoint at hindi naaapektuhan ng OPENAI_BASE_URL.

Ano ang nangyayari sa embeddings kapag itinakda ko ang OPENAI_BASE_URL?

OpenAI-shaped na model ang default na embedding, kaya sumusunod ang mga embedding call sa parehong client configuration at tumatama sa gateway mo. Kung hindi si-serve ng gateway ang embedding id na iyon, itakda nang tahasan ang EMBEDDING sa isang provider na si-serve nito, o sa isang local na opsyon; kung hindi, nabibigo ang mga run habang pinoproseso ang source.

Gumagana rin ba ang configuration na ito para sa web app at multi-agent mode?

Oo. Ni-resolve ng pip package, ng web application, at ng mga multi-agent flow ang parehong environment configuration, kaya iisang .env file ang nag-ruruta sa kanila nang magkatulad.

Magkano ang gastos ng isang research run sa pamamagitan ng gateway?

Nakadepende ito sa report type at kung ilang source ang ibinabalik ng retriever: nagbubuod ang FAST_LLM ng bawat source, sumusulat ang SMART_LLM ng report, nagpaplano ang STRATEGIC_LLM. Karamihan sa mga run ay tumatama sa sampu-sampung libo hanggang daan-daang libong token. Ipinapakita ng per-key usage view ang eksaktong hati per slot, na mas mainam kaysa sa pagtantiya.