Rode o FinRobot em um endpoint personalizado compatível com OpenAI.
Updated 2026-07-30
O FinRobot lê suas credenciais de LLM de um arquivo AutoGen OAI_CONFIG_LIST cujas entradas aceitam uma chave base_url. Adicione uma entrada apontando para https://api.apisrouter.com/v1 com uma chave de gateway, e os agentes de previsão, redação de relatório, e RAG podem rodar em qualquer id de modelo do catálogo.
Resposta rápida: uma entrada em OAI_CONFIG_LIST.
As instruções de configuração do FinRobot mandam você renomear OAI_CONFIG_LIST_sample para OAI_CONFIG_LIST e preencher credenciais. Esse arquivo é uma lista de config AutoGen padrão: um array JSON onde cada entrada aceita model e api_key, e opcionalmente base_url, que o exemplo distribuído já demonstra para endpoints não-padrão. Adicione uma entrada com sua chave de gateway e base_url definido como https://api.apisrouter.com/v1, e todo agente do FinRobot que carrega o arquivo pode rotear por ele. Uma pegadinha que custa tempo às pessoas: os tutoriais carregam o arquivo através de autogen.config_list_from_json com um filter_dict que seleciona entradas por nome de modelo. Se sua nova entrada diz claude-sonnet-4-6 mas o filtro ainda pede o id GPT do exemplo, sua entrada é filtrada para fora e a execução falha nas credenciais antigas. Atualize o filter_dict para corresponder ao modelo que você adicionou, ou remova o filtro enquanto testa.
[
{
"model": "claude-sonnet-4-6",
"api_key": "sk-YOUR-APISROUTER-KEY",
"base_url": "https://api.apisrouter.com/v1"
}
]Como o FinRobot usa sua config de LLM.
O FinRobot (AI4Finance-Foundation no GitHub, cerca de 7,6 mil estrelas) é uma plataforma de agentes de IA para análise financeira construída sobre o AutoGen (pyautogen 0.2.19 ou mais recente). Seus agentes são workflows empacotados: um forecaster Market_Analyst que puxa notícias e fundamentos da empresa e prevê o movimento da próxima semana, um redator de relatório anual que transforma arquivamentos em um PDF de pesquisa de ações, e agentes de QA com retrieval-augmented sobre teleconferências de resultados e arquivamentos da SEC. Cada tutorial constrói o mesmo formato de llm_config: um dict cujo config_list vem de autogen.config_list_from_json lendo o arquivo OAI_CONFIG_LIST. Esse llm_config é entregue a classes wrapper como SingleAssistant e SingleAssistantShadow de finrobot.agents.workflow, que possuem os agentes AutoGen subjacentes. A decisão de endpoint, portanto, vive inteiramente no arquivo JSON: o cliente OpenAI do AutoGen envia requisições /v1/chat/completions para qualquer base_url que a entrada selecionada carregue e encaminha o campo model como uma string simples. Essa string simples é a vitória prática. Quando o endpoint por trás de base_url serve múltiplos fornecedores, um id Claude, DeepSeek, ou Qwen anda pela mesma config com formato OpenAI sem o FinRobot notar, e trocar o modelo de análise vira uma edição JSON de uma linha mais um filter_dict correspondente.
Configuração completa: arquivo de config, filtro, e chaves de dados.
O FinRobot divide credenciais entre dois arquivos, e só um deles diz respeito ao LLM. OAI_CONFIG_LIST contém endpoints e chaves de modelo. config_api_keys contém credenciais de dados de mercado (FINNHUB_API_KEY, FMP_API_KEY, SEC_API_KEY, e chaves sociais), carregadas separadamente através de register_keys_from_json. Rotear o LLM por um gateway muda o primeiro arquivo e deixa o segundo intocado, então buscas de notícias, fundamentos, e arquivamentos se comportam exatamente como antes. O padrão de tutorial abaixo é a estrutura do notebook forecaster com a entrada de gateway selecionada. O mesmo llm_config funciona para os tutoriais de relatório anual e RAG, que diferem só em qual classe de workflow eles instanciam.
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"]}, # combine com sua entrada
),
"timeout": 120,
"temperature": 0,
}
register_keys_from_json("../config_api_keys") # chaves de dados finnhub/fmp/sec
assistant = SingleAssistant("Market_Analyst", llm_config,
human_input_mode="NEVER")
assistant.chat("Analyze NVDA news this week and predict next week's movement.")Escolhendo modelos por workflow do FinRobot.
O experimento limpo que funciona: fixe o ticker e a faixa de datas, rode o mesmo workflow uma vez por entrada candidata, e compare as saídas lado a lado. Atrás de um endpoint cada candidato é uma edição de filter_dict, e o log de uso por chave dá a você a conta de tokens por candidato sem trabalho de planilha.
- O redator de relatório anual é o trabalho de raciocínio mais pesado: ele lê seções de arquivamento, sintetiza uma tese de investimento, e rascunha um relatório estruturado. claude-opus-4-7 ou gpt-5.5 nesse workflow é onde a qualidade da saída muda visivelmente.
- O forecaster de mercado é uma tarefa mais curta e repetida sobre notícias e fundamentos. claude-sonnet-4-6 ou deepseek-v4-pro lida bem com isso, e importa quando você o roda diariamente em uma lista de acompanhamento.
- QA por RAG sobre teleconferências de resultados é recuperação mais síntese sobre trechos longos, o que favorece ids de contexto longo; gemini-3.1-pro-preview vale a pena testar contra claude-sonnet-4-6 ali.
- Como entradas são selecionadas por filter_dict, você pode manter um arquivo com uma entrada de ponta e uma entrada rápida contra o mesmo base_url e escolher por notebook, em vez de editar credenciais por execução.
- Ids de modelo são strings exatas. O FinRobot os passa sem validação, então a listagem /v1/models do endpoint é a grafia autoritativa.
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.
| Modelo | Preço oficial | Nosso preço |
|---|---|---|
| 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 falha específicos do FinRobot.
A incompatibilidade de filter_dict é o grande problema. config_list_from_json retorna só entradas cujo model bate com o filtro; um filtro que não bate com nada levanta um erro sobre uma lista de config vazia, e um filtro que bate com entradas remanescentes do exemplo envia requisições para a OpenAI com chaves de placeholder, o que aparece como um 401 do host errado. Quando mudanças de roteamento parecem não ter efeito, imprima o config_list resolvido primeiro. Caminhos relativos são o segundo problema. Os tutoriais carregam "../OAI_CONFIG_LIST" porque notebooks ficam um nível abaixo da raiz do repositório; um script na raiz quer "OAI_CONFIG_LIST" em vez disso, e o AutoGen também aceita a variável de ambiente OAI_CONFIG_LIST carregando a string JSON, o que contorna problemas de caminho em containers. Linhas de comentário são o terceiro. As instruções de configuração mandam você remover as notas de comentário dos arquivos de exemplo porque elas tornam o JSON inválido; um JSONDecodeError na inicialização significa que um comentário perdido sobreviveu. Credenciais de dados falham independentemente. Se o chat do agente funciona bem mas notícias ou fundamentos voltam vazios, isso é um problema de config_api_keys (Finnhub, FMP, SEC), não um problema de endpoint. E o módulo separado FinRobot Pro para ações configura suas chaves através de um config.ini; em julho de 2026, suas configurações documentadas cobrem um openai_api_key mas nenhuma sobrescrita de base URL, então trate esse módulo como fornecedor-direto até o upstream documentar uma.
Quem roteia o FinRobot por um gateway.
- Analistas gerando relatórios de ações por uma lista de cobertura. Contextos de arquivamento longos por relatório tornam diferenças de preço por modelo materiais, e um endpoint torna o modelo uma escolha por execução.
- Times quant rodando o forecaster diariamente sobre uma lista de acompanhamento, onde um id de camada média rápido mantém a conta recorrente estável sem reescrever o workflow.
- Pesquisadores comparando famílias de modelo em tarefas financeiras idênticas. Cada candidato é uma entrada de config, não uma troca de conta de fornecedor e SDK.
- Times padronizando stacks baseadas em AutoGen. O FinRobot compartilha a convenção OAI_CONFIG_LIST com outros projetos AutoGen, então um formato de entrada de gateway serve todos eles.
- 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 a primeira execução.
Liste os modelos que sua chave pode endereçar antes de abrir um notebook; toda string de modelo em OAI_CONFIG_LIST e todo valor de filter_dict precisam corresponder a um id servido exatamente. Depois rode o chat mais curto possível através de SingleAssistant e observe o console. Um 401 significa que a api_key da entrada selecionada não pertence ao endpoint em seu base_url; verifique qual entrada o filtro de fato escolheu. Um erro model-not-found é um erro de digitação no id da entrada. Um erro de conexão geralmente significa que base_url perdeu seu sufixo /v1. Se o agente entra em loop sem resultados de ferramenta, as chaves de dados em config_api_keys são as suspeitas, não o endpoint de LLM. Assim que as requisições fluem, o console da APIsRouter mostra modelo, contagens de token e gasto por requisição. Execuções de redação de relatório são conversas longas de múltiplos turnos, e a visão de uso mostra quanto um relatório de fato custa antes de você agendar cinquenta deles.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Perguntas frequentes
O FinRobot suporta um endpoint personalizado compatível com OpenAI?
Sim. O FinRobot lê entradas OAI_CONFIG_LIST no estilo AutoGen, e entradas aceitam uma chave base_url junto com model e api_key. Aponte base_url para o gateway, mantenha seu filter_dict correspondendo ao model da entrada, e os agentes roteiam por ele.
Os agentes do FinRobot podem rodar em modelos Claude, DeepSeek, ou Qwen?
Sim. O AutoGen encaminha o campo model como uma string simples via /v1/chat/completions, então qualquer id que o endpoint sirva funciona. O nome do modelo na entrada e no filter_dict só precisa corresponder ao id do catálogo exatamente.
Por que o FinRobot ignora minha nova entrada OAI_CONFIG_LIST?
Quase sempre é o filter_dict. Os tutoriais filtram entradas por nome de modelo, então uma entrada cujo model não bate com o filtro é excluída silenciosamente. Atualize filter_dict para seu novo id de modelo, ou carregue o arquivo sem filtro enquanto testa.
Minhas chaves Finnhub, FMP, e SEC mudam quando eu mudo o endpoint de LLM?
Não. Credenciais de dados de mercado vivem em config_api_keys e carregam através de register_keys_from_json, completamente separadas de OAI_CONFIG_LIST. Rotear o LLM por um gateway não toca no pipeline de dados.
A qual versão do AutoGen isso se aplica?
O FinRobot fixa pyautogen 0.2.19 ou mais recente e usa o carregador config_list_from_json no estilo 0.2. A chave base_url em entradas de config é padrão nessa geração, então nenhuma mudança de código do FinRobot é necessária.
O módulo FinRobot Pro para ações também respeita base_url?
Não como documentado. Seu config.ini expõe um openai_api_key sob API_KEYS mas nenhuma sobrescrita de endpoint em julho de 2026. O roteamento OAI_CONFIG_LIST descrito aqui se aplica aos agentes e tutoriais principais do FinRobot.