Ejecuta FinRobot en un endpoint personalizado compatible con OpenAI.

Updated 2026-07-30

FinRobot lee sus credenciales de LLM de un archivo OAI_CONFIG_LIST de AutoGen cuyas entradas aceptan una clave base_url. Añade una entrada apuntando a https://api.apisrouter.com/v1 con una clave del gateway, y los agentes forecaster, redactor de informes y RAG pueden correr en cualquier id de modelo del catálogo.

Respuesta rápida: una entrada en OAI_CONFIG_LIST.

Las instrucciones de configuración de FinRobot te hacen renombrar OAI_CONFIG_LIST_sample a OAI_CONFIG_LIST y rellenar credenciales. Ese archivo es una lista de configuración estándar de AutoGen: un array JSON donde cada entrada toma model y api_key, y opcionalmente base_url, que el propio ejemplo distribuido ya demuestra para endpoints no predeterminados. Añade una entrada con tu clave del gateway y base_url configurado a https://api.apisrouter.com/v1, y cada agente de FinRobot que cargue el archivo puede enrutar a través de él. Un detalle que le cuesta tiempo a la gente: los tutoriales cargan el archivo a través de autogen.config_list_from_json con un filter_dict que selecciona entradas por nombre de modelo. Si tu nueva entrada dice claude-sonnet-4-6 pero el filtro sigue pidiendo el id de GPT del ejemplo, tu entrada queda filtrada fuera y la ejecución falla con las credenciales antiguas. Actualiza el filter_dict para que coincida con el modelo que añadiste, o quita el filtro mientras pruebas.

[
    {
        "model": "claude-sonnet-4-6",
        "api_key": "sk-YOUR-APISROUTER-KEY",
        "base_url": "https://api.apisrouter.com/v1"
    }
]

Cómo usa FinRobot su config de LLM.

FinRobot (AI4Finance-Foundation en GitHub, unas 7.6K estrellas) es una plataforma de agentes de IA para análisis financiero construida sobre AutoGen (pyautogen 0.2.19 o más reciente). Sus agentes son flujos de trabajo empaquetados: un forecaster Market_Analyst que extrae noticias y fundamentales de una empresa y predice el movimiento de la siguiente semana, un redactor de informes anuales que convierte presentaciones en un PDF de investigación de renta variable, y agentes de QA con recuperación aumentada sobre llamadas de resultados y presentaciones de la SEC. Cada tutorial construye la misma forma de llm_config: un diccionario cuyo config_list viene de autogen.config_list_from_json leyendo el archivo OAI_CONFIG_LIST. Ese llm_config se entrega a clases envoltorio como SingleAssistant y SingleAssistantShadow de finrobot.agents.workflow, que poseen los agentes subyacentes de AutoGen. La decisión de endpoint por tanto vive por completo en el archivo JSON: el cliente OpenAI de AutoGen envía peticiones /v1/chat/completions a cualquier base_url que lleve la entrada seleccionada y reenvía el campo model como un string simple. Ese string simple es la victoria práctica. Cuando el endpoint detrás de base_url sirve a varios proveedores, un id de Claude, DeepSeek o Qwen viaja a través de la misma config con forma de OpenAI sin que FinRobot lo note, y cambiar el modelo de análisis se convierte en una edición JSON de una línea más un filter_dict que coincida.

Configuración completa: archivo de config, filtro y claves de datos.

FinRobot divide las credenciales en dos archivos, y solo uno concierne al LLM. OAI_CONFIG_LIST guarda endpoints de modelo y claves. config_api_keys guarda credenciales de datos de mercado (FINNHUB_API_KEY, FMP_API_KEY, SEC_API_KEY, y claves sociales), cargadas por separado a través de register_keys_from_json. Enrutar el LLM a través de un gateway cambia el primer archivo y deja el segundo intacto, así que las extracciones de noticias, fundamentales y presentaciones se comportan exactamente como antes. El patrón de tutorial de abajo es la estructura del notebook del forecaster con la entrada del gateway seleccionada. El mismo llm_config funciona para los tutoriales de informe anual y RAG, que difieren solo en qué clase de flujo de trabajo instancian.

import autogen
from finrobot.utils import register_keys_from_json
from finrobot.agents.workflow import SingleAssistant

llm_config = {
    "config_list": autogen.config_list_from_json(
        "../OAI_CONFIG_LIST",
        filter_dict={"model": ["claude-sonnet-4-6"]},  # match your entry
    ),
    "timeout": 120,
    "temperature": 0,
}

register_keys_from_json("../config_api_keys")  # finnhub/fmp/sec data keys

assistant = SingleAssistant("Market_Analyst", llm_config,
                            human_input_mode="NEVER")
assistant.chat("Analyze NVDA news this week and predict next week's movement.")

Elegir modelos por flujo de trabajo de FinRobot.

El bucle de experimento limpio: fija el ticker y el rango de fechas, ejecuta el mismo flujo de trabajo una vez por entrada candidata, y compara las salidas lado a lado. Detrás de un endpoint cada candidato es una edición de filter_dict, y el log de uso por clave te da la factura de tokens por candidato sin trabajo de hoja de cálculo.

  • El redactor de informes anuales es el trabajo de razonamiento más pesado: lee secciones de presentaciones, sintetiza una tesis de inversión, y redacta un informe estructurado. claude-opus-4-7 o gpt-5.5 en ese flujo es donde la calidad de salida cambia visiblemente.
  • El forecaster de mercado es una tarea más corta y repetida sobre noticias y fundamentales. claude-sonnet-4-6 o deepseek-v4-pro la maneja bien, e importa cuando la ejecutas diariamente sobre una lista de seguimiento.
  • La QA con RAG sobre llamadas de resultados es recuperación más síntesis sobre extractos largos, lo que favorece ids de contexto largo; gemini-3.1-pro-preview vale la pena probarlo ahí contra claude-sonnet-4-6.
  • Como las entradas se seleccionan por filter_dict, puedes mantener un archivo con una entrada de vanguardia y una entrada rápida contra el mismo base_url y elegir por notebook, en lugar de editar credenciales por ejecución.
  • Los ids de modelo son strings exactos. FinRobot los pasa sin validar, así que el listado /v1/models del endpoint es la grafía autorizada.

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.

ModeloPrecio oficialNuestro precio
Claude Opus 4.7$5.00 / $25.00 per M$4.00 / $20.00 per M
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
GPT-5.4$2.50 / $15.00 per M$2.00 / $12.00 per M
DeepSeek V4 Pro$0.43 / $0.87 per M$0.40 / $0.90 per M
Gemini 3.1 Pro Preview$2.00 / $12.00 per M$1.60 / $9.60 per M

Modos de fallo específicos de FinRobot.

El desajuste de filter_dict es el grande. config_list_from_json devuelve solo las entradas cuyo model coincide con el filtro; un filtro que no coincide con nada lanza un error sobre una lista de config vacía, y un filtro que coincide con las entradas sobrantes del ejemplo envía peticiones a OpenAI con claves de marcador de posición, que se manifiesta como un 401 desde el host equivocado. Cuando los cambios de enrutamiento no parecen tener efecto, imprime primero el config_list resuelto. Las rutas relativas son lo segundo. Los tutoriales cargan "../OAI_CONFIG_LIST" porque los notebooks están un nivel debajo de la raíz del repo; un script en la raíz quiere "OAI_CONFIG_LIST" en su lugar, y AutoGen también acepta la variable de entorno OAI_CONFIG_LIST llevando el string JSON, lo que evita problemas de rutas en contenedores. Las líneas de comentario son lo tercero. Las instrucciones de configuración te dicen que quites las notas de comentario de los archivos de ejemplo porque hacen que el JSON sea inválido; un JSONDecodeError al arrancar significa que sobrevivió un comentario suelto. Las credenciales de datos fallan de forma independiente. Si el agente conversa bien pero las noticias o fundamentales vuelven vacías, eso es un problema de config_api_keys (Finnhub, FMP, SEC), no un problema de endpoint. Y el módulo separado FinRobot Pro para renta variable configura sus claves a través de un config.ini en su lugar; a julio de 2026 sus ajustes documentados cubren un openai_api_key pero ninguna sobrescritura de URL base, así que trata ese módulo como directo al proveedor hasta que upstream documente una.

Quién enruta FinRobot a través de un gateway.

  • Analistas que generan informes de renta variable a través de una lista de cobertura. Los contextos largos de presentaciones por informe hacen que las diferencias de precio por modelo sean materiales, y un endpoint hace que el modelo sea una elección por ejecución.
  • Equipos cuantitativos que ejecutan el forecaster diariamente sobre una lista de seguimiento, donde un id rápido de nivel medio mantiene plana la factura recurrente sin reescribir el flujo de trabajo.
  • Investigadores que comparan familias de modelos en tareas financieras idénticas. Cada candidato es una entrada de config, no un cambio de cuenta y SDK de proveedor.
  • Equipos que estandarizan pilas basadas en AutoGen. FinRobot comparte la convención OAI_CONFIG_LIST con otros proyectos de AutoGen, así que un formato de entrada de gateway sirve a todos ellos.
  • 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 la primera ejecución.

Lista los modelos que tu clave puede direccionar antes de abrir un notebook; cada string de modelo en OAI_CONFIG_LIST y cada valor de filter_dict debe coincidir exactamente con un id servido. Luego ejecuta el chat más corto posible a través de SingleAssistant y observa la consola. Un 401 significa que el api_key de la entrada seleccionada no pertenece al endpoint en su base_url; revisa qué entrada realmente eligió el filtro. Un error de modelo no encontrado es una errata en el id de la entrada. Un error de conexión suele significar que base_url perdió su sufijo /v1. Si el agente da vueltas sin resultados de herramientas, las claves de datos en config_api_keys son las sospechosas, no el endpoint del LLM. Una vez que las peticiones fluyen, la consola de APIsRouter muestra el modelo por petición, el recuento de tokens y el gasto. Las ejecuciones de redacción de informes son conversaciones largas de varios turnos, y la vista de uso muestra lo que realmente cuesta un informe antes de programar cincuenta de ellos.

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

Preguntas frecuentes

¿FinRobot admite un endpoint personalizado compatible con OpenAI?

Sí. FinRobot lee entradas OAI_CONFIG_LIST al estilo AutoGen, y las entradas aceptan una clave base_url junto a model y api_key. Apunta base_url al gateway, mantén tu filter_dict coincidiendo con el model de la entrada, y los agentes enrutan a través de él.

¿Pueden los agentes de FinRobot correr en modelos Claude, DeepSeek o Qwen?

Sí. AutoGen reenvía el campo model como un string simple sobre /v1/chat/completions, así que funciona cualquier id que sirva el endpoint. El nombre del modelo en la entrada y en filter_dict solo tiene que coincidir exactamente con el id del catálogo.

¿Por qué FinRobot ignora mi nueva entrada de OAI_CONFIG_LIST?

Casi siempre el filter_dict. Los tutoriales filtran entradas por nombre de modelo, así que una entrada cuyo model no coincide con el filtro queda excluida silenciosamente. Actualiza filter_dict a tu nuevo id de modelo, o carga el archivo sin filtro mientras pruebas.

¿Cambian mis claves de Finnhub, FMP y SEC cuando cambio el endpoint de LLM?

No. Las credenciales de datos de mercado viven en config_api_keys y se cargan a través de register_keys_from_json, completamente separadas de OAI_CONFIG_LIST. Enrutar el LLM a través de un gateway no toca el pipeline de datos.

¿A qué versión de AutoGen aplica esto?

FinRobot fija pyautogen 0.2.19 o más reciente y usa el cargador config_list_from_json al estilo 0.2. La clave base_url en las entradas de config es estándar en esa generación, así que no se necesitan cambios de código en FinRobot.

¿Respeta base_url también el módulo FinRobot Pro para renta variable?

No según lo documentado. Su config.ini expone un openai_api_key bajo API_KEYS pero ninguna sobrescritura de endpoint a julio de 2026. El enrutamiento OAI_CONFIG_LIST descrito aquí aplica a los agentes y tutoriales principales de FinRobot.