Uruchom gpt-researcher na niestandardowym endpoincie kompatybilnym z OpenAI.
Updated 2026-07-30
gpt-researcher czyta OPENAI_BASE_URL ze środowiska i dzieli swoją pracę na trzy sloty modeli. Ustaw base URL na https://api.apisrouter.com/v1, zachowaj prefiks openai:, a FAST_LLM, SMART_LLM i STRATEGIC_LLM mogą być każdy innym modelem z katalogu za jednym kluczem.
Szybka odpowiedź: pięciolinijkowy blok .env.
Udokumentowana ścieżka niestandardowego endpointu gpt-researcher to zmienne środowiskowe. Ustaw OPENAI_BASE_URL na https://api.apisrouter.com/v1, ustaw OPENAI_API_KEY na swój klucz bramki i przypisz trzy sloty modeli z prefiksem providera openai:. Prefiks mówi gpt-researcher, którego klienta użyć; string po dwukropku jest przekazywany do endpointu, więc działa dowolny identyfikator serwowany przez bramkę, łącznie z identyfikatorami Claude i Gemini. To konfiguracja udokumentowana na docs.gptr.dev dla niestandardowych endpointów kompatybilnych z OpenAI, i działa identycznie dla pakietu pip, aplikacji webowej i przepływów wieloagentowych, ponieważ wszystkie one rozwiązują tę samą konfigurację.
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.5Jak gpt-researcher wydaje tokeny na trzech slotach.
gpt-researcher (assafelovic na GitHubie, około 28 tys. gwiazdek) zamienia zapytanie w przebadany, cytowany raport: planuje pytania badawcze, rozchodzi wyszukiwania internetowe przez retriever, zbiera i streszcza źródła, a potem pisze długoformowy raport. Framework dzieli ten pipeline na trzy konfigurowalne sloty modeli, zamiast na jeden. FAST_LLM obsługuje pracę o wysokim wolumenie i niskiej stawce, głównie streszczanie zebranych stron. SMART_LLM robi ciężkie pisanie, łącznie z finalnym raportem. STRATEGIC_LLM obsługuje planowanie: generowanie pytań badawczych i decydowanie o podejściu. Od razu po instalacji domyślnie to modele OpenAI (odpowiednio gpt-4o-mini, gpt-4.1 i o4-mini w momencie pisania), co jest dokładnie tym, dlaczego pojedyncze nadpisanie OPENAI_BASE_URL jest tak skuteczne: wszystkie trzy sloty używają klienta w kształcie OpenAI, więc jeden base URL przesuwa cały pipeline. Ponieważ każdy slot przyjmuje własny string provider:model, sloty nie muszą dzielić dostawcy. Uruchomienie może streszczać szybkim modelem Claude, pisać mocniejszym modelem Claude albo GPT i planować modelem z tieru rozumowania, wszystko przez ten sam endpoint i klucz. Na kluczu jednego dostawcy taka mieszanka wymagałaby trzech kont; za bramką to trzy linijki w .env.
Pełna konfiguracja: .env plus Python API.
Stwórz plik .env w swoim katalogu roboczym (albo wyeksportuj zmienne w powłoce) i uruchom gpt-researcher jak zwykle; zarówno pakiet pip, jak i aplikacja webowa czytają to samo środowisko. Python API w ogóle nie potrzebuje kodu specyficznego dla endpointu, i o to chodzi: routing to konfiguracja, a kod badawczy zostaje identyczny, niezależnie czy endpoint jest od OpenAI, czy to bramka. Dwa sąsiednie ustawienia mają znaczenie. Retrieval internetowy działa przez retriever, domyślnie Tavily, z własnym kluczem (TAVILY_API_KEY); to poświadczenie jest niezależne od endpointu LLM i wciąż wymagane dla żywego researchu internetowego. A embeddingi domyślnie to openai:text-embedding-3-small, co oznacza, że wywołania embeddingu podążają za tą samą konfiguracją klienta w kształcie OpenAI; jeśli endpoint za OPENAI_BASE_URL nie serwuje tego modelu embeddingu, skonfiguruj EMBEDDING na providera, który to robi (dokumentacja używa prefiksu custom: dla endpointów embeddingu kompatybilnych z OpenAI, a lokalne opcje jak Ollama też są wspierane).
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 .envDobór modeli per slot.
Domyślne ustawienia upstream kodują właściwy kształt: mały model do wolumenu, silny model do pisania, model rozumowania do planowania, więc zachowaj ten kształt i ulepszaj sloty, zamiast spłaszczać je do jednego modelu. Za jednym endpointem, A/B między dwoma autorami to zmiana jednej linijki .env per uruchomienie, a log użycia per klucz mówi Ci, ile faktycznie kosztowała każda konfiguracja raportu.
- FAST_LLM strzela najczęściej: każde zebrane źródło zostaje streszczone. Szybki identyfikator (claude-haiku-4-5-20251001, deepseek-v4-flash) powstrzymuje raport z wieloma źródłami przed zdominowaniem przez koszt streszczania, a strata jakości jest tu ograniczona, bo streszczenia karmią autora, nie czytelnika.
- SMART_LLM pisze raport, który użytkownik faktycznie czyta. Długi output, podtrzymana struktura, dyscyplina cytowania: to miejsce, gdzie claude-sonnet-4-6 albo gpt-5.5 zarabia na swój wydatek, i gdzie cięcie jakości natychmiast widać.
- STRATEGIC_LLM kształtuje uruchomienie, zanim się zacznie. Złe pytania badawcze produkują zły raport, bez względu na to, jak dobry jest autor; model silny w rozumowaniu to tu niewiele wywołań, ale wysoka dźwignia.
- Identyfikatory z długim kontekstem jak gemini-3.1-pro-preview warto przetestować w slocie SMART przy uruchomieniach detailed_report, gdzie autor pracuje na dużym, zakumulowanym kontekście streszczeń.
Płatność za użycie · poniżej cen oficjalnych
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Model | Cena oficjalna | Nasza cena |
|---|---|---|
| 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 |
Tryby awarii charakterystyczne dla gpt-researcher.
Porzucenie prefiksu providera. Format slotu to provider:model, a prefiks wybiera klienta. Ustawienie SMART_LLM=claude-sonnet-4-6 bez openai: nie kieruje identyfikatora Claude przez Twój base URL; sprawia, że gpt-researcher próbuje zinterpretować string jako innego providera. Każdy model niestandardowego endpointu musi zachować prefiks openai:, ponieważ "openai" nazywa tu protokół, nie dostawcę. Embeddingi po cichu podążające za nadpisaniem. Domyślny EMBEDDING to model w kształcie OpenAI, więc gdy tylko OPENAI_BASE_URL wskaże na bramkę, żądania embeddingu też tam idą. Jeśli bramka nie serwuje tego identyfikatora embeddingu, uruchomienia badawcze zawodzą podczas przetwarzania źródeł, a nie przy pierwszym wywołaniu czatu, co zwodzi ludzi do debugowania złego slotu. Ustaw EMBEDDING jawnie, a objaw znika. Obwinianie endpointu za awarie retrievera. Brakująca albo wyczerpana TAVILY_API_KEY łamie fazę wyszukiwania, a wynikające z tego błędy pustych źródeł wyglądają powierzchownie jak awarie LLM. Retriever to osobna usługa z osobnym kluczem; sprawdzaj go osobno. Nieaktualne środowisko między uruchomieniami. Plik .env jest czytany z katalogu roboczego. Uruchamianie aplikacji webowej z jednego katalogu, a Python API z innego oznacza dwie różne konfiguracje, i "działa w aplikacji, ale nie w moim skrypcie" to prawie zawsze to. Ustawienia limitów tokenów są osobne od możliwości modelu. gpt-researcher niesie własne limity tokenów per slot (FAST_TOKEN_LIMIT, SMART_TOKEN_LIMIT i pokrewne ustawienia) z zachowawczymi wartościami domyślnymi. Skierowanie SMART_LLM na model z długim kontekstem samo w sobie nie podnosi tych limitów; strójcie je świadomie, jeśli chcecie dłuższych generacji.
Kto kieruje gpt-researcher przez bramkę.
- Zespoły generujące powtarzające się raporty (skany rynkowe, przeglądy literatury, briefy konkurencyjne), gdzie widoczność kosztu per uruchomienie na trzech slotach modeli liczy się bardziej niż relacja z jednym dostawcą.
- Badacze porównujący modele autora. Trzymanie FAST i STRATEGIC na stałym poziomie, podczas gdy zamieniasz SMART między identyfikatorami Claude, GPT i DeepSeek, to trzy edycje .env, nie trzy konta u dostawców.
- Twórcy osadzający gpt-researcher w produktach, gdzie jeden klucz bramki per środowisko zastępuje wiązkę sekretów dostawców w pipeline'ie wdrożeniowym.
- Użytkownicy, którzy chcą, żeby Claude albo Gemini pisali raport, zachowując przy tym nietkniętą fabryczną konfigurację gpt-researcher w kształcie OpenAI.
- Deweloperzy bez dostępu do rozliczeń danego dostawcy. Dostęp oparty na doładowaniu, bez wymogu karty, usuwa zależność od rejestracji u każdego dostawcy z osobna.
Zweryfikuj endpoint i debuguj pierwszy raport.
Wylistuj najpierw modele bramki; string po openai: w każdym slocie musi dokładnie zgadzać się z serwowanym identyfikatorem, łącznie z sufiksami wersji. Awarie pierwszego uruchomienia sortują się czysto. 401 oznacza, że OPENAI_API_KEY jest nieobecna w środowisku, które faktycznie widzi proces; pliki .env ładują się z katalogu roboczego, więc uruchamiaj tam, gdzie żyje plik, albo wyeksportuj zmienne globalnie. Błąd model-not-found nazywa slot z literówką. Awaria podczas przetwarzania źródeł, a nie w czasie planowania, wskazuje na embeddingi albo retriever, nie na sloty czatu: sprawdź EMBEDDING i TAVILY_API_KEY, zanim dotkniesz konfiguracji LLM. Pełne uruchomienie badawcze to zryw dziesiątek żądań na wszystkich trzech slotach, więc gdy się zakończy, widok per żądanie konsoli APIsRouter to najszybszy sposób, żeby zobaczyć podział FAST/SMART/STRATEGIC w prawdziwych tokenach i prawdziwych wydatkach, i złapać slot, który zużywa więcej, niż zasługuje jego rola.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY" | head -50Częste pytania
Czy gpt-researcher może używać modeli Claude albo Gemini przez OPENAI_BASE_URL?
Tak. Prefiks openai: wybiera klienta w kształcie OpenAI, a string modelu po dwukropku jest przekazywany do endpointu. Działa dowolny identyfikator serwowany przez bramkę w dowolnym z trzech slotów, łącznie z identyfikatorami Claude, Gemini i DeepSeek.
Czy FAST_LLM, SMART_LLM i STRATEGIC_LLM muszą być od tego samego dostawcy?
Nie. Każdy slot to niezależny string provider:model. Za wielodostawcowym endpointem częstą konfiguracją jest szybki identyfikator Claude do streszczeń, mocniejszy identyfikator Claude albo GPT do pisania raportu i identyfikator z tieru rozumowania do planowania, wszystko na jednym kluczu.
Czy nadal potrzebuję klucza Tavily po zmianie endpointu LLM?
Tak, jeśli chcesz żywego researchu internetowego. Retriever (domyślnie Tavily, ustawiany przez RETRIEVER) pobiera wyniki wyszukiwania i ma własny klucz. To osobna usługa od endpointu LLM, niezależna od OPENAI_BASE_URL.
Co się dzieje z embeddingami, gdy ustawiam OPENAI_BASE_URL?
Domyślny embedding to model w kształcie OpenAI, więc wywołania embeddingu podążają za tą samą konfiguracją klienta i trafiają do Twojej bramki. Jeśli bramka nie serwuje tego identyfikatora embeddingu, ustaw EMBEDDING jawnie na providera, który to robi, albo na opcję lokalną; w przeciwnym razie uruchomienia zawodzą podczas przetwarzania źródeł.
Czy ta konfiguracja działa też dla aplikacji webowej i trybu wieloagentowego?
Tak. Pakiet pip, aplikacja webowa i przepływy wieloagentowe wszystkie rozwiązują tę samą konfigurację środowiska, więc jeden plik .env kieruje nimi identycznie.
Ile kosztuje jedno uruchomienie badawcze przez bramkę?
Zależy od typu raportu i tego, ile źródeł zwraca retriever: FAST_LLM streszcza każde źródło, SMART_LLM pisze raport, STRATEGIC_LLM planuje. Większość uruchomień ląduje w dziesiątkach do setek tysięcy tokenów. Widok użycia per klucz pokazuje dokładny podział per slot, co bije szacowanie.