Ejecuta gpt-researcher en un endpoint personalizado compatible con OpenAI.
Updated 2026-07-30
gpt-researcher lee OPENAI_BASE_URL del entorno y divide su trabajo en tres slots de modelo. Configura la URL base a https://api.apisrouter.com/v1, conserva el prefijo openai:, y FAST_LLM, SMART_LLM y STRATEGIC_LLM pueden ser cada uno un modelo distinto del catálogo detrás de una clave.
Respuesta rápida: un bloque de cinco líneas en .env.
La ruta documentada de endpoint personalizado de gpt-researcher son variables de entorno. Configura OPENAI_BASE_URL a https://api.apisrouter.com/v1, configura OPENAI_API_KEY con tu clave del gateway, y asigna los tres slots de modelo con el prefijo de proveedor openai:. El prefijo le dice a gpt-researcher qué cliente usar; el string después de los dos puntos se pasa al endpoint, así que cualquier id que sirva el gateway es válido, ids de Claude y Gemini incluidos. Esta es la configuración documentada en docs.gptr.dev para endpoints personalizados compatibles con OpenAI, y funciona idénticamente para el paquete pip, la web app y los flujos multi-agente, porque todos resuelven la misma 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.5Cómo gasta gpt-researcher tokens entre tres slots.
gpt-researcher (assafelovic en GitHub, unas 28K estrellas) convierte una consulta en un informe investigado y citado: planifica preguntas de investigación, abre búsquedas web a través de un recuperador, extrae y resume fuentes, y luego escribe un informe extenso. El framework divide ese pipeline entre tres slots de modelo configurables en lugar de uno. FAST_LLM maneja el trabajo de alto volumen y bajo riesgo, principalmente resumir páginas extraídas. SMART_LLM hace la escritura pesada, incluido el informe final. STRATEGIC_LLM maneja la planificación: generar las preguntas de investigación y decidir el enfoque. De fábrica estos usan por defecto modelos de OpenAI (gpt-4o-mini, gpt-4.1 y o4-mini respectivamente al momento de escribir esto), que es exactamente por qué el único override de OPENAI_BASE_URL es tan efectivo: los tres slots usan el cliente con forma de OpenAI, así que una URL base mueve todo el pipeline. Como cada slot toma su propio string provider:model, los slots no necesitan compartir proveedor. Una ejecución puede resumir con un modelo Claude rápido, escribir con un modelo Claude o GPT más fuerte, y planificar con un modelo de nivel razonamiento, todo a través del mismo endpoint y clave. Con una clave de un solo proveedor, esa mezcla requeriría tres cuentas; detrás de un gateway son tres líneas en .env.
Configuración completa: .env más la API de Python.
Crea un archivo .env en tu directorio de trabajo (o exporta las variables en el shell) y ejecuta gpt-researcher como de costumbre; el paquete pip y la web app leen el mismo entorno. La API de Python no necesita ningún código específico de endpoint, que es la idea: el enrutamiento es configuración, y el código de investigación se queda idéntico sea el endpoint de OpenAI o de un gateway. Dos ajustes adyacentes importan. La recuperación web corre a través de un retriever, Tavily por defecto, con su propia clave (TAVILY_API_KEY); esa credencial es independiente del endpoint de LLM y sigue siendo requerida para investigación web en vivo. Y los embeddings usan por defecto openai:text-embedding-3-small, lo que significa que las llamadas de embedding siguen la misma configuración de cliente con forma de OpenAI; si el endpoint detrás de OPENAI_BASE_URL no sirve ese modelo de embedding, configura EMBEDDING a un proveedor que sí lo haga (los docs usan el prefijo custom: para endpoints de embedding compatibles con OpenAI, y opciones locales como Ollama también se admiten).
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 .envElegir modelos por slot.
Los valores por defecto upstream codifican la forma correcta, modelo pequeño para volumen, modelo fuerte para escritura, modelo de razonamiento para planificación, así que mantén esa forma y mejora los slots en lugar de aplanarlos a un solo modelo. Detrás de un endpoint, un A/B entre dos escritores es un cambio de .env de una línea por ejecución, y el log de uso por clave te dice lo que realmente costó cada configuración de informe.
- FAST_LLM dispara la mayor parte: cada fuente extraída se resume. Un id rápido (claude-haiku-4-5-20251001, deepseek-v4-flash) evita que un informe con muchas fuentes esté dominado por el coste de resumen, y la pérdida de calidad aquí está acotada porque los resúmenes alimentan al escritor, no al lector.
- SMART_LLM escribe el informe que el usuario realmente lee. Salida larga, estructura sostenida, disciplina de citación: aquí es donde claude-sonnet-4-6 o gpt-5.5 se ganan el gasto, y donde recortar calidad se nota de inmediato.
- STRATEGIC_LLM da forma a la ejecución antes de que empiece. Malas preguntas de investigación producen un mal informe sin importar cuán bueno sea el escritor; un modelo fuerte en razonamiento aquí son pocas llamadas pero alto apalancamiento.
- Vale la pena probar ids de contexto largo como gemini-3.1-pro-preview en el slot SMART para ejecuciones de detailed_report, donde el escritor trabaja sobre un gran contexto acumulado de resúmenes.
Pago por uso · por debajo del precio oficial
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Modelo | Precio oficial | Nuestro precio |
|---|---|---|
| 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 |
Los modos de fallo específicos de gpt-researcher.
Omitir el prefijo de proveedor. El formato del slot es provider:model, y el prefijo selecciona el cliente. Configurar SMART_LLM=claude-sonnet-4-6 sin openai: no enruta un id de Claude a través de tu URL base; hace que gpt-researcher intente interpretar el string como un proveedor distinto. Cada modelo de endpoint personalizado debe conservar el prefijo openai:, porque "openai" aquí nombra el protocolo, no el proveedor. Los embeddings siguiendo el override sin avisar. El EMBEDDING por defecto es un modelo con forma de OpenAI, así que una vez que OPENAI_BASE_URL apunta a un gateway, las peticiones de embedding también van ahí. Si el gateway no sirve ese id de embedding, las ejecuciones de investigación fallan durante el procesamiento de fuentes en lugar de en la primera llamada de chat, lo que engaña a la gente a depurar el slot equivocado. Configura EMBEDDING explícitamente y el síntoma desaparece. Culpar al endpoint por fallos del retriever. Una TAVILY_API_KEY faltante o agotada rompe la fase de búsqueda, y los errores de fuente vacía resultantes parecen superficialmente fallos de LLM. El retriever es un servicio separado con una clave separada; revísalo por separado. Entorno obsoleto entre ejecuciones. El archivo .env se lee desde el directorio de trabajo. Ejecutar la web app desde un directorio y la API de Python desde otro significa dos configs distintas, y "funciona en la app pero no en mi script" casi siempre es esto. Los ajustes de límite de tokens son separados de la capacidad del modelo. gpt-researcher lleva sus propios límites de tokens por slot (FAST_TOKEN_LIMIT, SMART_TOKEN_LIMIT y ajustes relacionados) con valores por defecto conservadores. Apuntar SMART_LLM a un modelo de contexto largo no eleva por sí solo esos límites; ajústalos deliberadamente si quieres generaciones más largas.
Quién enruta gpt-researcher a través de un gateway.
- Equipos que generan informes recurrentes (escaneos de mercado, revisiones de literatura, resúmenes competitivos) donde la visibilidad de coste por ejecución entre tres slots de modelo importa más que una sola relación de proveedor.
- Investigadores que comparan modelos de escritura. Mantener fijos FAST y STRATEGIC mientras se intercambia SMART entre ids de Claude, GPT y DeepSeek son tres ediciones de .env, no tres cuentas de proveedor.
- Constructores que integran gpt-researcher en productos, donde una clave de gateway por entorno reemplaza un paquete de secretos de proveedor en el pipeline de despliegue.
- Usuarios que quieren que Claude o Gemini redacten el informe manteniendo intacta la configuración de fábrica con forma de OpenAI de gpt-researcher.
- Desarrolladores sin acceso a la facturación de un proveedor concreto. El acceso mediante recarga sin necesidad de tarjeta elimina la dependencia de registrarse en cada proveedor.
Verifica el endpoint y depura el primer informe.
Lista primero los modelos del gateway; el string después de openai: en cada slot debe coincidir exactamente con un id servido, sufijos de versión incluidos. Los fallos de primera ejecución se clasifican con claridad. Un 401 significa que OPENAI_API_KEY está ausente del entorno que el proceso realmente ve; los archivos .env se cargan desde el directorio de trabajo, así que ejecuta desde donde vive el archivo o exporta las variables globalmente. Un error de modelo no encontrado nombra el slot con la errata. Un fallo durante el procesamiento de fuentes en lugar de en el momento de planificación apunta a embeddings o al retriever, no a los slots de chat: revisa EMBEDDING y TAVILY_API_KEY antes de tocar la config del LLM. Una ejecución de investigación completa es una ráfaga de docenas de peticiones a través de los tres slots, así que una vez que se completa, la vista por petición de la consola de APIsRouter es la forma más rápida de ver la división FAST/SMART/STRATEGIC en tokens y gasto reales, y de detectar un slot que está consumiendo más de lo que merece su rol.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY" | head -50Preguntas frecuentes
¿Puede gpt-researcher usar modelos Claude o Gemini a través de OPENAI_BASE_URL?
Sí. El prefijo openai: selecciona el cliente con forma de OpenAI, y el string de modelo después de los dos puntos se pasa al endpoint. Cualquier id que sirva el gateway es válido en cualquiera de los tres slots, incluidos ids de Claude, Gemini y DeepSeek.
¿Tienen que ser del mismo proveedor FAST_LLM, SMART_LLM y STRATEGIC_LLM?
No. Cada slot es un string provider:model independiente. Detrás de un endpoint multi-proveedor, una configuración común es un id de Claude rápido para resúmenes, un id de Claude o GPT más fuerte para escribir el informe, y un id de nivel razonamiento para planificar, todo con una clave.
¿Sigo necesitando una clave de Tavily después de cambiar el endpoint de LLM?
Sí, si quieres investigación web en vivo. El retriever (Tavily por defecto, configurado vía RETRIEVER) obtiene resultados de búsqueda y tiene su propia clave. Es un servicio separado del endpoint de LLM y no se ve afectado por OPENAI_BASE_URL.
¿Qué pasa con los embeddings cuando configuro OPENAI_BASE_URL?
El embedding por defecto es un modelo con forma de OpenAI, así que las llamadas de embedding siguen la misma configuración de cliente y llegan a tu gateway. Si el gateway no sirve ese id de embedding, configura EMBEDDING explícitamente a un proveedor que sí lo haga, o a una opción local; de lo contrario las ejecuciones fallan durante el procesamiento de fuentes.
¿Funciona esta configuración también para la web app y el modo multi-agente?
Sí. El paquete pip, la aplicación web y los flujos multi-agente resuelven la misma configuración de entorno, así que un archivo .env los enruta de forma idéntica.
¿Cuánto cuesta una ejecución de investigación a través del gateway?
Depende del tipo de informe y de cuántas fuentes devuelva el retriever: FAST_LLM resume cada fuente, SMART_LLM escribe el informe, STRATEGIC_LLM planifica. La mayoría de las ejecuciones aterrizan en decenas a cientos de miles de tokens. La vista de uso por clave muestra la división exacta por slot, que supera a estimar.