Rode o TradingAgents em um backend personalizado compatível com OpenAI.

Updated 2026-07-30

O TradingAgents vem com um modo de provider openai_compatible. Defina backend_url como https://api.apisrouter.com/v1, exporte uma chave, e tanto os agentes deep-think quanto quick-think roteiam através de um único endpoint com todo modelo do catálogo endereçável por id.

Resposta rápida: três configurações roteiam o TradingAgents para qualquer lugar.

O TradingAgents suporta endpoints personalizados nativamente. Defina llm_provider como "openai_compatible", defina backend_url como o endereço do seu endpoint, e exporte OPENAI_COMPATIBLE_API_KEY com uma chave para esse endpoint. Com a APIsRouter, a backend URL é https://api.apisrouter.com/v1, e todo modelo no catálogo se torna endereçável a partir dos slots deep_think_llm e quick_think_llm pelo seu id exato de modelo. Esse é um caminho de configuração documentado no repositório upstream, não um fork ou um patch. Os mesmos valores também podem ser fornecidos como variáveis de ambiente (TRADINGAGENTS_LLM_PROVIDER, TRADINGAGENTS_LLM_BACKEND_URL, TRADINGAGENTS_DEEP_THINK_LLM, TRADINGAGENTS_QUICK_THINK_LLM), então um job agendado ou runner de CI pode trocar de backend sem tocar em código Python.

config["llm_provider"] = "openai_compatible"
config["backend_url"] = "https://api.apisrouter.com/v1"
# auth: export OPENAI_COMPATIBLE_API_KEY=sk-...

Como o TradingAgents fala com seu backend de LLM.

O TradingAgents (TauricResearch no GitHub, mais de 93 mil estrelas) é um framework de trading multi-agente. Uma execução de análise se ramifica por um time de analistas cobrindo fundamentos, sentimento, notícias, e técnicos, depois um pesquisador otimista e um pesquisador pessimista discutem o caso ao longo de uma ou mais rodadas de debate, um agente trader propõe a posição, e uma camada de gestão de risco a revisa antes da decisão final. O framework divide esse trabalho em dois slots de modelo. deep_think_llm cuida das etapas pesadas em raciocínio: o debate de pesquisa, a decisão do trader, e a revisão de risco. quick_think_llm cuida das etapas de alto volume: ler dados, resumir notícias, e rascunhar relatórios de analista. Os dois slots emitem requisições /v1/chat/completions padrão. A configuração de provider só decide para qual cliente e host essas requisições vão, e openai_compatible as envia para qualquer backend_url que você configurar. Nativamente, o TradingAgents também suporta OpenAI, Anthropic, Google, e DeepSeek como providers de primeira parte, mas cada um precisa de sua própria conta, sua própria chave, e um provider por execução. O modo openai_compatible colapsa isso: o TradingAgents encaminha o campo model como uma string simples, então quando o endpoint por trás de backend_url serve múltiplos fornecedores, um slot deep-think Claude e um slot quick-think GPT ou DeepSeek podem rodar na mesma análise. Essa mistura por papel é a razão prática para rotear o framework por um gateway em vez de um endpoint de fornecedor único.

Configuração completa: config Python ou variáveis de ambiente.

O caminho programático copia DEFAULT_CONFIG e sobrescreve quatro chaves. A chave que autentica contra o endpoint personalizado é lida de OPENAI_COMPATIBLE_API_KEY, então ela nunca precisa aparecer no dict de config ou no arquivo fonte. O caminho de variável de ambiente define os mesmos valores através do mapeamento _ENV_OVERRIDES em default_config.py e funciona tanto para a API Python quanto para a CLI interativa (tradingagents, ou python -m cli.main). Note que backend_url tem como padrão None, caso em que o cliente de cada provider recai no próprio endpoint padrão; a sobrescrita só tem efeito depois que você a define explicitamente. Dados de mercado são uma preocupação separada. O TradingAgents puxa cotações e fundamentos através de seus fornecedores de dados (por exemplo ALPHA_VANTAGE_API_KEY), e essas credenciais não são relacionadas ao endpoint de LLM. Mudar backend_url não toca no pipeline de dados.

from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG

config = DEFAULT_CONFIG.copy()
config["llm_provider"] = "openai_compatible"
config["backend_url"] = "https://api.apisrouter.com/v1"
config["deep_think_llm"] = "claude-opus-4-7"    # rodadas de debate + decisão de trade
config["quick_think_llm"] = "claude-sonnet-4-6" # analistas, resumos
config["max_debate_rounds"] = 2

ta = TradingAgentsGraph(debug=True, config=config)
_, decision = ta.propagate("NVDA", "2026-07-15")
print(decision)

Escolhendo modelos deep-think e quick-think.

O padrão upstream combina um modelo de ponta no slot deep com um modelo mini no slot quick, que é o formato certo: gaste capacidade de raciocínio onde a decisão é tomada, e capacidade de volume onde a leitura é feita. Rotear por um endpoint torna a combinação uma mudança de duas linhas entre execuções, então o workflow prático é manter o slot deep fixo e fazer A/B do slot quick contra suas métricas de backtest em vez de adivinhar.

  • deep_think_llm carrega o debate otimista/pessimista, a decisão do trader, e a revisão de risco. Poucas chamadas por execução, mas cada uma raciocina sobre o contexto completo dos analistas, e max_debate_rounds as multiplica. É aqui que um modelo de raciocínio de ponta (claude-opus-4-7, gpt-5.5) ganha seus tokens.
  • quick_think_llm dispara em toda etapa de analista: ler fundamentos, pontuar sentimento, resumir notícias, rascunhar relatórios. A maior parte do volume de requisições de uma execução cai aqui, então um modelo rápido de camada média (claude-sonnet-4-6, deepseek-v4-pro) mantém as execuções rápidas sem degradar as entradas do debate.
  • Cargas de contexto longo, como alimentar arquivamentos completos ou grandes janelas de notícias para os analistas, são onde gemini-3.1-pro-preview vale a pena testar no slot rápido.
  • Backtests amplificam tudo. Uma varredura sobre 50 tickers e 20 datas são 1.000 chamadas propagate(), então uma escolha de modelo quick-think que parece marginal em uma execução domina a conta de tokens em escala de varredura.

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 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.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

Backtesting em escala de varredura: chaves, fixação, e limites.

Assim que a configuração de execução única funciona, a superfície de falha se move para a varredura. Três hábitos mantêm um backtest de múltiplos dias reproduzível e depurável. Fixe ids de modelo exatos. Nomes de modelo nus em alguns fornecedores são ponteiros rolantes que silenciosamente se movem para snapshots mais novos, o que significa que um backtest iniciado na segunda e terminado na sexta pode não ter rodado um único modelo. Onde o catálogo lista uma variante datada, coloque o id datado na config, e registre o dict de config junto aos resultados da mesma forma que você registraria uma semente aleatória. Use uma chave por experimento. Chaves são livres para criar, e limitar uma chave a uma varredura transforma o log de uso no livro-razão de custo do experimento: contagens de token e gasto por modelo, filtráveis exatamente para as execuções daquela varredura. Quando dois experimentos compartilham uma chave, atribuir gasto depois significa fazer grep em timestamps. Conheça seu teto de concorrência antes de paralelizar. propagate() é síncrono por ticker-data, então varreduras geralmente são fragmentadas entre processos. Cada fragmento multiplica a taxa de requisições no slot quick-think primeiro, e um 429 no meio do debate custa uma execução inteira, não uma requisição. Aumente a contagem de fragmentos observando o console em vez de lançar cinquenta workers a frio; canais upstream com pool elevam o teto mas não o tornam infinito.

Quem roteia o TradingAgents por um gateway.

  • Backtesters rodando varreduras ticker-por-data. Centenas de chamadas propagate() por experimento tornam visibilidade de uso por chave e uma única superfície de faturamento mais úteis do que quatro painéis de fornecedor.
  • Pesquisadores comparando pares de modelo. Trocar deep_think_llm entre ids Claude, GPT, e DeepSeek é uma edição de config contra um endpoint, não uma nova conta de fornecedor por candidato.
  • Times misturando fornecedores por papel. Claude para o debate, DeepSeek para volume de analista. O modo de provider nativo trava uma execução em um fornecedor; um endpoint multi-fornecedor não.
  • 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.
  • Execuções agendadas e de CI. A configuração só-ambiente significa que a imagem do runner precisa de um segredo (OPENAI_COMPATIBLE_API_KEY) em vez de um por fornecedor.

Verifique o endpoint e depure a primeira execução.

Antes de rodar uma análise completa, confirme que o endpoint responde com os modelos que você planeja usar. Um curl de uma linha contra /v1/models com sua chave lista todo id endereçável; as strings em deep_think_llm e quick_think_llm precisam corresponder a esses ids exatamente. Os modos de falha em uma primeira execução são consistentes. Um 401 quase sempre significa que OPENAI_COMPATIBLE_API_KEY foi exportada em um shell diferente daquele rodando tradingagents, ou não foi exportada de forma alguma; variáveis de ambiente definidas no .bashrc não chegam a uma unidade systemd ou um cron job a menos que o arquivo da unidade as exporte ele mesmo. Um erro model-not-found significa que a string do id não corresponde ao catálogo: ids são exatos, sufixos de versão incluídos, e a saída de /v1/models acima é a fonte da verdade. Um erro de conexão com backend_url definido geralmente significa que a URL está sem seu sufixo /v1, já que o cliente anexa caminhos de rota como /chat/completions a qualquer base que você fornecer. Se a execução funciona mas parece travar na fase de debate, isso é latência normal para modelos de raciocínio sobre contextos longos em vez de um problema de endpoint; mantenha debug=True ligado para observar as etapas do agente fluindo. Timeouts genuínos em turnos deep-think muito longos são uma configuração do lado do cliente, e vale a pena aumentá-la antes de concluir que o backend descartou a requisição. Assim que as requisições fluem, o console da APIsRouter mostra modelo, contagens de token e gasto por requisição, que para um framework tão intenso em chamadas é a forma mais rápida de ver exatamente para onde vão os tokens de uma execução.

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

Perguntas frequentes

O TradingAgents suporta modelos Claude e Gemini através de um endpoint openai_compatible?

Sim. No modo openai_compatible, o framework envia o campo model como uma string simples para backend_url via /v1/chat/completions. Qualquer id que o endpoint sirva funciona, incluindo ids Claude, Gemini, e DeepSeek, tanto no slot deep-think quanto quick-think.

Qual chave de API o TradingAgents usa com um backend_url personalizado?

OPENAI_COMPATIBLE_API_KEY. O provider openai_compatible a lê do ambiente, então a chave nunca aparece no seu dict de config ou arquivos fonte. OPENAI_API_KEY só é usada pelo provider openai nativo.

deep_think_llm e quick_think_llm podem vir de fornecedores diferentes na mesma execução?

Através de um endpoint multi-fornecedor, sim: os dois slots enviam para o mesmo backend_url e a string de modelo decide o fornecedor por requisição. Com providers nativos (openai, anthropic, google, deepseek), uma execução fica travada em um fornecedor para os dois slots.

Ainda preciso de uma conta OpenAI depois de definir backend_url?

Não. Com llm_provider definido como openai_compatible, nenhuma requisição vai para hosts da OpenAI e OPENAI_API_KEY não é lida. Você ainda precisa das credenciais de dados de mercado que o TradingAgents usa (por exemplo ALPHA_VANTAGE_API_KEY), que são independentes do endpoint de LLM.

A CLI interativa respeita o endpoint personalizado também?

Sim. A CLI (tradingagents, ou python -m cli.main) resolve a mesma config, e as variáveis de ambiente TRADINGAGENTS_LLM_PROVIDER / TRADINGAGENTS_LLM_BACKEND_URL a sobrescrevem antes do prompt de provider, então execuções agendadas ou em container da CLI não precisam de entrada interativa para roteamento.

Quantos tokens uma análise do TradingAgents consome?

Varia com max_debate_rounds, o número de analistas, e quanto contexto de mercado eles ingerem; uma única análise ticker-data tipicamente fica entre centenas de milhares de tokens, a maioria deles no slot quick-think. A visão de uso por chave no console da APIsRouter mostra a divisão exata por execução, que é mais confiável do que estimar.