Jalankan gpt-researcher di endpoint OpenAI-compatible custom.

Updated 2026-07-30

gpt-researcher membaca OPENAI_BASE_URL dari environment dan membagi kerjanya ke tiga slot model. Setel base URL ke https://api.apisrouter.com/v1, pertahankan prefiks openai:, dan FAST_LLM, SMART_LLM, serta STRATEGIC_LLM masing-masing bisa menjadi model katalog berbeda di balik satu key.

Jawaban singkat: blok .env lima baris.

Jalur endpoint-custom yang terdokumentasi milik gpt-researcher adalah environment variable. Setel OPENAI_BASE_URL ke https://api.apisrouter.com/v1, setel OPENAI_API_KEY ke key gateway Anda, dan tetapkan tiga slot model dengan prefiks provider openai:. Prefiks itu memberi tahu gpt-researcher client mana yang dipakai; string setelah titik dua diteruskan ke endpoint, jadi id apa pun yang dilayani gateway valid, termasuk id Claude dan Gemini. Ini adalah konfigurasi yang terdokumentasi di docs.gptr.dev untuk endpoint OpenAI-compatible custom, dan berfungsi identik untuk pip package, web app, dan flow multi-agent, karena semuanya meresolusi config yang sama.

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

Bagaimana gpt-researcher membelanjakan token di tiga slot.

gpt-researcher (assafelovic di GitHub, sekitar 28K bintang) mengubah query menjadi laporan yang diriset dan bersitasi: ia merencanakan pertanyaan riset, menyebar pencarian web lewat retriever, meng-scrape dan meringkas sumber, lalu menulis laporan long-form. Framework ini membagi pipeline itu ke tiga slot model yang bisa dikonfigurasi alih-alih satu. FAST_LLM menangani kerja bervolume tinggi dan berisiko rendah, terutama meringkas halaman yang di-scrape. SMART_LLM melakukan penulisan berat, termasuk laporan akhir. STRATEGIC_LLM menangani perencanaan: menghasilkan pertanyaan riset dan memutuskan pendekatan. Di luar kotak, ketiganya default ke model OpenAI (gpt-4o-mini, gpt-4.1, dan o4-mini masing-masing saat tulisan ini dibuat), yang justru menjelaskan mengapa override OPENAI_BASE_URL tunggal begitu efektif: ketiga slot memakai client berbentuk-OpenAI, jadi satu base URL menggerakkan seluruh pipeline. Karena setiap slot mengambil string provider:model-nya sendiri, slot-slot itu tidak perlu berbagi vendor. Satu run bisa meringkas dengan model Claude yang cepat, menulis dengan model Claude atau GPT yang lebih kuat, dan merencanakan dengan model tier-reasoning, semuanya lewat endpoint dan key yang sama. Pada key satu-vendor, campuran itu akan butuh tiga akun; di balik gateway, itu hanya tiga baris di .env.

Setup lengkap: .env plus Python API.

Buat file .env di direktori kerja Anda (atau export variabelnya di shell) dan jalankan gpt-researcher seperti biasa; pip package dan web app sama-sama membaca environment yang sama. Python API tidak membutuhkan kode khusus-endpoint sama sekali, itulah intinya: routing adalah konfigurasi, dan kode riset tetap identik entah endpoint-nya milik OpenAI atau gateway. Dua pengaturan yang berdekatan penting diketahui. Retrieval web berjalan lewat retriever, Tavily secara default, dengan key-nya sendiri (TAVILY_API_KEY); kredensial itu independen dari endpoint LLM dan tetap dibutuhkan untuk riset web live. Dan embedding default ke openai:text-embedding-3-small, yang berarti panggilan embedding mengikuti konfigurasi client berbentuk-OpenAI yang sama; jika endpoint di balik OPENAI_BASE_URL tidak melayani model embedding itu, konfigurasikan EMBEDDING ke provider yang melayaninya (dokumentasi memakai prefiks custom: untuk endpoint embedding OpenAI-compatible, dan opsi lokal seperti Ollama juga didukung).

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

Memilih model per slot.

Default upstream mengkodekan bentuk yang benar, model kecil untuk volume, model kuat untuk penulisan, model reasoning untuk perencanaan, jadi pertahankan bentuk itu dan tingkatkan slot-nya alih-alih meratakannya jadi satu model. Di balik satu endpoint, A/B antara dua penulis hanya perubahan .env satu baris per run, dan log penggunaan per-key memberi tahu Anda berapa sebenarnya biaya tiap konfigurasi laporan.

  • FAST_LLM menembak paling sering: setiap sumber yang di-scrape diringkas. Id cepat (claude-haiku-4-5-20251001, deepseek-v4-flash) menjaga laporan bersumber-banyak agar tidak didominasi biaya peringkasan, dan kehilangan kualitas di sini terbatas karena ringkasan menyuapi penulis, bukan pembaca.
  • SMART_LLM menulis laporan yang benar-benar dibaca pengguna. Output panjang, struktur yang bertahan, disiplin sitasi: di sinilah claude-sonnet-4-6 atau gpt-5.5 layak mendapat pengeluarannya, dan di sinilah pemotongan kualitas langsung terlihat.
  • STRATEGIC_LLM membentuk run sebelum dimulai. Pertanyaan riset yang buruk menghasilkan laporan yang buruk tidak peduli seberapa bagus penulisnya; model yang kuat-reasoning di sini adalah panggilan yang sedikit tapi leverage yang tinggi.
  • Id long-context seperti gemini-3.1-pro-preview layak diuji di slot SMART untuk run detailed_report, di mana penulis bekerja atas context besar yang terakumulasi dari ringkasan.

Bayar sesuai pemakaian · di bawah harga resmi

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

ModelHarga ResmiHarga Kami
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

Mode kegagalan spesifik gpt-researcher.

Menghilangkan prefiks provider. Format slot-nya adalah provider:model, dan prefiks itu memilih client-nya. Mengeset SMART_LLM=claude-sonnet-4-6 tanpa openai: tidak merutekan id Claude lewat base URL Anda; itu membuat gpt-researcher mencoba menafsirkan string itu sebagai provider yang berbeda. Setiap model endpoint-custom harus mempertahankan prefiks openai:, karena "openai" di sini menamai protokolnya, bukan vendornya. Embedding diam-diam mengikuti override. EMBEDDING default adalah model berbentuk-OpenAI, jadi begitu OPENAI_BASE_URL mengarah ke gateway, request embedding juga pergi ke sana. Jika gateway tidak melayani id embedding itu, run riset gagal saat pemrosesan sumber alih-alih pada panggilan chat pertama, yang menyesatkan orang untuk debug slot yang salah. Setel EMBEDDING secara eksplisit dan gejalanya hilang. Menyalahkan endpoint untuk kegagalan retriever. TAVILY_API_KEY yang hilang atau habis merusak fase pencarian, dan error empty-source yang dihasilkan terlihat sekilas seperti kegagalan LLM. Retriever adalah layanan terpisah dengan key terpisah; periksa secara terpisah. Environment yang basi antar run. File .env dibaca dari direktori kerja. Menjalankan web app dari satu direktori dan Python API dari direktori lain berarti dua config berbeda, dan "berfungsi di app tapi tidak di script saya" hampir selalu ini. Pengaturan batas-token terpisah dari kapabilitas model. gpt-researcher membawa batas token per-slotnya sendiri (FAST_TOKEN_LIMIT, SMART_TOKEN_LIMIT, dan pengaturan terkait) dengan default yang konservatif. Mengarahkan SMART_LLM ke model long-context tidak dengan sendirinya menaikkan batas-batas itu; setel secara sengaja jika Anda menginginkan generasi yang lebih panjang.

Siapa yang merutekan gpt-researcher melalui gateway.

  • Tim yang menghasilkan laporan berulang (scan pasar, tinjauan literatur, brief kompetitif) di mana visibilitas biaya per-run lintas tiga slot model lebih penting daripada hubungan satu vendor.
  • Peneliti yang membandingkan model penulis. Menetapkan FAST dan STRATEGIC tetap sambil menukar SMART antara id Claude, GPT, dan DeepSeek hanya tiga edit .env, bukan tiga akun vendor.
  • Builder yang menyematkan gpt-researcher di produk, di mana satu key gateway per environment menggantikan sekumpulan secret vendor di pipeline deploy.
  • Pengguna yang menginginkan Claude atau Gemini melakukan penulisan laporan sambil membiarkan konfigurasi berbentuk-OpenAI bawaan gpt-researcher tidak tersentuh.
  • Developer tanpa akses ke billing vendor tertentu. Akses berbasis top-up tanpa syarat kartu menghilangkan ketergantungan sign-up per provider.

Verifikasi endpoint dan debug laporan pertama.

Daftar model gateway dulu; string setelah openai: di setiap slot harus cocok persis dengan id yang dilayani, termasuk suffix versi. Kegagalan run pertama tersortir dengan bersih. 401 berarti OPENAI_API_KEY tidak ada di environment yang benar-benar dilihat proses; file .env dimuat dari direktori kerja, jadi jalankan dari tempat file itu berada atau export variabelnya secara global. Error model-not-found menyebut slot dengan salah ketiknya. Kegagalan saat pemrosesan sumber alih-alih saat perencanaan menunjuk ke embedding atau retriever, bukan slot chat: periksa EMBEDDING dan TAVILY_API_KEY sebelum menyentuh config LLM. Satu run riset penuh adalah burst puluhan request lintas ketiga slot, jadi setelah selesai, tampilan per-request konsol APIsRouter adalah cara tercepat melihat pembagian FAST/SMART/STRATEGIC dalam token nyata dan pengeluaran nyata, dan menangkap slot yang mengonsumsi lebih dari yang layak diterima perannya.

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

Pertanyaan umum

Bisakah gpt-researcher memakai model Claude atau Gemini lewat OPENAI_BASE_URL?

Ya. Prefiks openai: memilih client berbentuk-OpenAI, dan string model setelah titik dua diteruskan ke endpoint. Id apa pun yang dilayani gateway valid di salah satu dari tiga slot, termasuk id Claude, Gemini, dan DeepSeek.

Haruskah FAST_LLM, SMART_LLM, dan STRATEGIC_LLM berasal dari vendor yang sama?

Tidak. Setiap slot adalah string provider:model yang independen. Di balik endpoint multi-vendor, setup yang umum adalah id Claude cepat untuk ringkasan, id Claude atau GPT yang lebih kuat untuk penulisan laporan, dan id tier-reasoning untuk perencanaan, semuanya dalam satu key.

Apakah saya masih butuh key Tavily setelah mengubah endpoint LLM?

Ya, jika Anda menginginkan riset web live. Retriever (Tavily secara default, diset lewat RETRIEVER) mengambil hasil pencarian dan punya key-nya sendiri. Ia adalah layanan terpisah dari endpoint LLM dan tidak terpengaruh OPENAI_BASE_URL.

Apa yang terjadi pada embedding saat saya mengeset OPENAI_BASE_URL?

Embedding default adalah model berbentuk-OpenAI, jadi panggilan embedding mengikuti konfigurasi client yang sama dan mengenai gateway Anda. Jika gateway tidak melayani id embedding itu, setel EMBEDDING secara eksplisit ke provider yang melayaninya, atau ke opsi lokal; jika tidak, run gagal saat pemrosesan sumber.

Apakah konfigurasi ini berfungsi untuk web app dan mode multi-agent juga?

Ya. pip package, aplikasi web, dan flow multi-agent semuanya meresolusi konfigurasi environment yang sama, jadi satu file .env merutekan mereka secara identik.

Berapa biaya satu run riset lewat gateway?

Tergantung pada tipe laporan dan berapa banyak sumber yang dikembalikan retriever: FAST_LLM meringkas setiap sumber, SMART_LLM menulis laporan, STRATEGIC_LLM merencanakan. Sebagian besar run mendarat di puluhan hingga ratusan ribu token. Tampilan penggunaan per-key menunjukkan pembagian per-slot yang persis, yang lebih baik daripada menaksir.