Rode o gpt-researcher em um endpoint personalizado compatível com OpenAI.

Updated 2026-07-30

O gpt-researcher lê OPENAI_BASE_URL do ambiente e divide seu trabalho em três slots de modelo. Defina a base URL como https://api.apisrouter.com/v1, mantenha o prefixo openai:, e FAST_LLM, SMART_LLM, e STRATEGIC_LLM podem cada um ser um modelo diferente do catálogo atrás de uma chave.

Resposta rápida: um bloco de cinco linhas no .env.

O caminho documentado de endpoint personalizado do gpt-researcher são variáveis de ambiente. Defina OPENAI_BASE_URL como https://api.apisrouter.com/v1, defina OPENAI_API_KEY como sua chave do gateway, e atribua os três slots de modelo com o prefixo de provider openai:. O prefixo diz ao gpt-researcher qual cliente usar; a string depois dos dois-pontos é passada para o endpoint, então qualquer id que o gateway sirva é válido, ids Claude e Gemini incluídos. Essa é a configuração documentada em docs.gptr.dev para endpoints personalizados compatíveis com OpenAI, e funciona identicamente para o pacote pip, o web app, e os fluxos multi-agente, porque todos eles resolvem a mesma 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

Como o gpt-researcher gasta tokens em três slots.

O gpt-researcher (assafelovic no GitHub, cerca de 28 mil estrelas) transforma uma consulta em um relatório pesquisado e citado: ele planeja perguntas de pesquisa, se ramifica em buscas web através de um retriever, faz scraping e resume fontes, e então escreve um relatório longo. O framework divide esse pipeline em três slots de modelo configuráveis em vez de um só. FAST_LLM cuida do trabalho de alto volume e baixo risco, principalmente resumindo páginas raspadas. SMART_LLM faz a redação pesada, incluindo o relatório final. STRATEGIC_LLM cuida do planejamento: gerando as perguntas de pesquisa e decidindo a abordagem. Prontos para uso, esses têm como padrão modelos OpenAI (gpt-4o-mini, gpt-4.1, e o4-mini respectivamente no momento em que isso foi escrito), que é exatamente por que a sobrescrita única OPENAI_BASE_URL é tão eficaz: todos os três slots usam o cliente com formato OpenAI, então uma base URL move o pipeline inteiro. Como cada slot recebe sua própria string provider:model, os slots não precisam compartilhar um fornecedor. Uma execução pode resumir com um modelo Claude rápido, escrever com um modelo Claude ou GPT mais forte, e planejar com um modelo de camada de raciocínio, tudo através do mesmo endpoint e chave. Em uma chave de fornecedor único, essa mistura exigiria três contas; atrás de um gateway são três linhas no .env.

Configuração completa: .env mais a API Python.

Crie um arquivo .env no seu diretório de trabalho (ou exporte as variáveis no shell) e rode o gpt-researcher normalmente; o pacote pip e o web app ambos leem o mesmo ambiente. A API Python não precisa de nenhum código específico de endpoint, o que é o ponto: roteamento é configuração, e o código de pesquisa permanece idêntico seja o endpoint da OpenAI ou de um gateway. Duas configurações adjacentes importam. Recuperação web roda através de um retriever, Tavily por padrão, com sua própria chave (TAVILY_API_KEY); essa credencial é independente do endpoint de LLM e ainda necessária para pesquisa web ao vivo. E embeddings têm como padrão openai:text-embedding-3-small, o que significa que as chamadas de embedding seguem a mesma configuração de cliente com formato OpenAI; se o endpoint por trás de OPENAI_BASE_URL não servir esse modelo de embedding, configure EMBEDDING para um provider que sirva (os docs usam o prefixo custom: para endpoints de embedding compatíveis com OpenAI, e opções locais como Ollama também são suportadas).

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())  # o roteamento vem inteiramente do .env

Escolhendo modelos por slot.

Os padrões upstream codificam o formato certo, modelo pequeno para volume, modelo forte para redação, modelo de raciocínio para planejamento, então mantenha esse formato e faça upgrade dos slots em vez de achatá-los em um só modelo. Atrás de um endpoint, um A/B entre dois redatores é uma mudança de uma linha no .env por execução, e o log de uso por chave te diz quanto cada configuração de relatório realmente custou.

  • FAST_LLM dispara mais: toda fonte raspada é resumida. Um id rápido (claude-haiku-4-5-20251001, deepseek-v4-flash) evita que um relatório com muitas fontes seja dominado pelo custo de sumarização, e perda de qualidade aqui é limitada porque resumos alimentam o redator, não o leitor.
  • SMART_LLM escreve o relatório que o usuário de fato lê. Saída longa, estrutura sustentada, disciplina de citação: é aqui que claude-sonnet-4-6 ou gpt-5.5 ganha o gasto, e onde cortar qualidade aparece imediatamente.
  • STRATEGIC_LLM molda a execução antes dela começar. Perguntas de pesquisa ruins produzem um relatório ruim não importa quão bom o redator seja; um modelo forte em raciocínio aqui é poucas chamadas mas alta alavancagem.
  • Ids de contexto longo como gemini-3.1-pro-preview valem a pena testar no slot SMART para execuções detailed_report, onde o redator trabalha sobre um grande contexto acumulado de resumos.

Pague pelo uso · abaixo do preço oficial

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

ModeloPreço oficialNosso preço
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

Os modos de falha específicos do gpt-researcher.

Descartar o prefixo de provider. O formato do slot é provider:model, e o prefixo seleciona o cliente. Definir SMART_LLM=claude-sonnet-4-6 sem openai: não roteia um id Claude pela sua base URL; faz o gpt-researcher tentar interpretar a string como um provider diferente. Todo modelo de endpoint personalizado precisa manter o prefixo openai:, porque "openai" aqui nomeia o protocolo, não o fornecedor. Embeddings seguindo a sobrescrita silenciosamente. O EMBEDDING padrão é um modelo com formato OpenAI, então assim que OPENAI_BASE_URL aponta para um gateway, requisições de embedding também vão para lá. Se o gateway não servir esse id de embedding, execuções de pesquisa falham durante o processamento de fontes em vez de na primeira chamada de chat, o que engana as pessoas a depurar o slot errado. Defina EMBEDDING explicitamente e o sintoma desaparece. Culpar o endpoint por falhas de retriever. Uma TAVILY_API_KEY faltando ou esgotada quebra a fase de busca, e os erros de fonte vazia resultantes parecem superficialmente falhas de LLM. O retriever é um serviço separado com uma chave separada; verifique-o separadamente. Ambiente obsoleto entre execuções. O arquivo .env é lido do diretório de trabalho. Rodar o web app de um diretório e a API Python de outro significa duas configs diferentes, e "funciona no app mas não no meu script" é quase sempre isso. Configurações de limite de token são separadas da capacidade do modelo. O gpt-researcher carrega seus próprios limites de token por slot (FAST_TOKEN_LIMIT, SMART_TOKEN_LIMIT, e configurações relacionadas) com padrões conservadores. Apontar SMART_LLM para um modelo de contexto longo não eleva esses limites por si só; ajuste-os deliberadamente se você quiser gerações mais longas.

Quem roteia o gpt-researcher por um gateway.

  • Times gerando relatórios recorrentes (varreduras de mercado, revisões de literatura, briefings competitivos) onde visibilidade de custo por execução entre três slots de modelo importa mais do que um relacionamento com um único fornecedor.
  • Pesquisadores comparando modelos redatores. Manter FAST e STRATEGIC fixos enquanto troca SMART entre ids Claude, GPT, e DeepSeek são três edições no .env, não três contas de fornecedor.
  • Desenvolvedores incorporando o gpt-researcher em produtos, onde uma chave de gateway por ambiente substitui um pacote de segredos de fornecedor no pipeline de deploy.
  • Usuários que querem Claude ou Gemini fazendo a redação do relatório enquanto mantêm a configuração padrão com formato OpenAI do gpt-researcher intocada.
  • Desenvolvedores sem acesso ao faturamento de um determinado fornecedor. O acesso baseado em recarga sem exigência de cartão remove a dependência de cadastro por provedor.

Verifique o endpoint e depure o primeiro relatório.

Liste os modelos do gateway primeiro; a string depois de openai: em cada slot precisa corresponder a um id servido exatamente, sufixos de versão incluídos. Falhas de primeira execução se separam claramente. Um 401 significa que OPENAI_API_KEY está ausente do ambiente que o processo de fato vê; arquivos .env carregam do diretório de trabalho, então rode de onde o arquivo vive ou exporte as variáveis globalmente. Um erro model-not-found nomeia o slot com o erro de digitação. Uma falha durante o processamento de fontes em vez de no momento de planejamento aponta para embeddings ou o retriever, não os slots de chat: verifique EMBEDDING e TAVILY_API_KEY antes de mexer na config de LLM. Uma execução de pesquisa completa é uma rajada de dezenas de requisições entre os três slots, então assim que ela completa, a visão por requisição do console da APIsRouter é a forma mais rápida de ver a divisão FAST/SMART/STRATEGIC em tokens reais e gasto real, e de pegar um slot que está consumindo mais do que seu papel merece.

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

Perguntas frequentes

O gpt-researcher pode usar modelos Claude ou Gemini através de OPENAI_BASE_URL?

Sim. O prefixo openai: seleciona o cliente com formato OpenAI, e a string de modelo depois dos dois-pontos é passada para o endpoint. Qualquer id que o gateway sirva é válido em qualquer um dos três slots, incluindo ids Claude, Gemini, e DeepSeek.

FAST_LLM, SMART_LLM, e STRATEGIC_LLM precisam ser do mesmo fornecedor?

Não. Cada slot é uma string provider:model independente. Atrás de um endpoint multi-fornecedor, uma configuração comum é um id Claude rápido para resumos, um id Claude ou GPT mais forte para redação de relatório, e um id de camada de raciocínio para planejamento, tudo em uma chave.

Ainda preciso de uma chave Tavily depois de mudar o endpoint de LLM?

Sim, se você quiser pesquisa web ao vivo. O retriever (Tavily por padrão, definido via RETRIEVER) busca resultados de pesquisa e tem sua própria chave. É um serviço separado do endpoint de LLM e não é afetado por OPENAI_BASE_URL.

O que acontece com embeddings quando eu defino OPENAI_BASE_URL?

O embedding padrão é um modelo com formato OpenAI, então chamadas de embedding seguem a mesma configuração de cliente e vão para seu gateway. Se o gateway não servir esse id de embedding, defina EMBEDDING explicitamente para um provider que sirva, ou para uma opção local; caso contrário, execuções falham durante o processamento de fontes.

Essa configuração funciona para o web app e o modo multi-agente também?

Sim. O pacote pip, o aplicativo web, e os fluxos multi-agente todos resolvem a mesma configuração de ambiente, então um arquivo .env os roteia identicamente.

Quanto custa uma execução de pesquisa pelo gateway?

Depende do tipo de relatório e de quantas fontes o retriever retorna: FAST_LLM resume cada fonte, SMART_LLM escreve o relatório, STRATEGIC_LLM planeja. A maioria das execuções fica entre dezenas e centenas de milhares de tokens. A visão de uso por chave mostra a divisão exata por slot, o que supera estimar.