Rode o ai-hedge-fund em uma base URL personalizada compatível com OpenAI.
Updated 2026-07-30
O ai-hedge-fund constrói seus modelos OpenAI com o ChatOpenAI do LangChain e lê a base URL de OPENAI_API_BASE. Defina-a como https://api.apisrouter.com/v1, exporte uma chave, e todo agente analista do fundo roteia por um único endpoint.
Resposta rápida: OPENAI_API_BASE mais uma chave.
O provedor OpenAI do ai-hedge-fund é instanciado como ChatOpenAI(model=model_name, api_key=api_key, base_url=base_url), e esse base_url vem de os.getenv("OPENAI_API_BASE") em src/llm/models.py. Então a sobrescrita são duas linhas no .env: aponte OPENAI_API_BASE para https://api.apisrouter.com/v1 e defina OPENAI_API_KEY como sua chave do gateway. Todo modelo que roda pelo provedor OpenAI agora envia requisições para o gateway. Preste atenção ao nome exato da variável: é OPENAI_API_BASE, a convenção da era LangChain, não OPENAI_BASE_URL. Exportar a errada é ignorado silenciosamente e as requisições continuam indo para api.openai.com, que é a forma mais comum dessa configuração parecer não funcionar.
OPENAI_API_BASE=https://api.apisrouter.com/v1
OPENAI_API_KEY=sk-APIsRouter-...
FINANCIAL_DATASETS_API_KEY=... # dados de mercado, não relacionado ao endpoint do LLMComo o ai-hedge-fund escolhe um modelo e um provedor.
O ai-hedge-fund (virattt no GitHub, cerca de 62 mil estrelas) simula um fundo como um comitê de agentes: personas de analista modeladas em investidores conhecidos, mais agentes de valuation, sentimento, fundamentos e técnicos, alimentando um gestor de risco e um gestor de portfólio que produzem os sinais finais. Todos eles compartilham uma escolha de modelo por execução, então uma única execução multiplica sua decisão de modelo por todo agente e todo ticker. A seleção de modelo tem dois caminhos. De forma interativa, rodar poetry run python src/main.py --ticker AAPL,MSFT,NVDA sem uma flag de modelo abre um seletor via questionary. Via script, a flag --model recebe um nome de modelo, mas só nomes que existem no registro de modelos do repositório: find_model_by_name() procura a string em src/llm/api_models.json, e cada entrada do registro carrega display_name, model_name, e provider. Se a busca falhar, a CLI não tenta adivinhar um provedor; ela recai no seletor interativo, o que importa para automação porque um id desconhecido transforma uma execução via script em uma que fica esperando entrada de teclado. O campo provider é o que decide o roteamento. Entradas marcadas como OpenAI passam pelo ChatOpenAI e respeitam OPENAI_API_BASE; entradas marcadas como Anthropic passam pelo ChatAnthropic e ANTHROPIC_API_KEY, ignorando sua base URL completamente. Esse é o insight chave para roteamento por gateway: a coluna provider seleciona o cliente e, portanto, o endpoint, independentemente de quem de fato criou o modelo.
Configuração completa: .env mais uma entrada de registro por modelo do gateway.
Para modelos que o registro já lista sob o provedor OpenAI, a sobrescrita no .env sozinha já basta; a string do modelo é passada para o endpoint tal como está. Para rodar um id Claude, DeepSeek, ou Qwen pelo gateway na mesma chave, adicione uma entrada em src/llm/api_models.json com o id do catálogo como model_name e, crucialmente, "OpenAI" como o provider. Provider seleciona o cliente, então uma entrada marcada como OpenAI passa pelo ChatOpenAI e pelo seu OPENAI_API_BASE mesmo que o modelo em si não seja um modelo OpenAI. A entrada então aparece no seletor interativo e resolve via --model em scripts. Isso é uma edição de três linhas em JSON no seu clone, não uma mudança de código, e é o formato documentado que o registro já usa. Mantenha em mente as entradas nativas de provedor como contraste: selecionar um modelo do registro marcado como Anthropic vai procurar ANTHROPIC_API_KEY e ir direto para o endpoint da Anthropic. Se sua intenção é uma chave de gateway para tudo, rode seus modelos por entradas marcadas como OpenAI e você pode deixar as chaves por fornecedor completamente sem definir.
{
"display_name": "Claude Sonnet 4.6 (gateway)",
"model_name": "claude-sonnet-4-6",
"provider": "OpenAI"
},
{
"display_name": "DeepSeek V4 Pro (gateway)",
"model_name": "deepseek-v4-pro",
"provider": "OpenAI"
}Escolhendo um modelo para um comitê de agentes.
Como o registro torna todo candidato endereçável atrás de uma flag, a avaliação honesta é empírica: rode os mesmos tickers e datas por dois ou três modelos e compare os sinais e o gasto. A visão de uso por chave precifica cada sweep para você, o que transforma a escolha de modelo de um debate em uma medição.
- Uma execução é muitos veredictos. Toda persona de analista raciocina sobre os mesmos filings e dados de preço por ticker, então a escolha de modelo é multiplicada pela contagem de agentes vezes a contagem de tickers. Um id de raciocínio de ponta (claude-opus-4-7, gpt-5.5) eleva a qualidade de todo veredicto a uma conta de tokens correspondentemente multiplicada.
- claude-sonnet-4-6 é o padrão sensato: forte o bastante para que o raciocínio de persona permaneça coerente sobre contexto fundamentalista longo, precificado para execuções que se ramificam por uma dúzia de agentes e uma cesta de tickers.
- deepseek-v4-pro e qwen3.7-max valem a pena testar para sweeps amplos, onde a diferença de preço por execução se acumula em cada data de backtest.
- Seja qual for sua escolha, fixe-a. Sinais de diferentes instantâneos de um modelo em movimento não são comparáveis ao longo de uma janela de backtest; use ids exatos e registre a string do modelo junto aos resultados como uma semente aleatória.
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.5 | $5.00 / $30.00 per M | $4.00 / $24.00 per M |
| DeepSeek V4 Pro | $0.43 / $0.87 per M | $0.40 / $0.90 per M |
| Qwen 3.7 Max | $2.50 / $7.50 per M | $2.50 / $7.50 per M |
Os modos de falha específicos do ai-hedge-fund.
A variável de ambiente errada. Este repositório lê OPENAI_API_BASE. OPENAI_BASE_URL, a variável que outras ferramentas usam, não é consultada, e defini-la não faz nada exceto te convencer de que a sobrescrita está quebrada. Se as requisições ainda chegam em api.openai.com, verifique o nome da variável antes de qualquer outra coisa. --model com um id não registrado. find_model_by_name() só conhece entradas em api_models.json. Passe um id do catálogo que não está registrado e a CLI imprime uma mensagem de não encontrado e cai no seletor interativo, o que num cron job ou execução de CI significa uma travada silenciosa, não uma saída com erro. Registre o id primeiro; então execuções via script o resolvem deterministicamente. Entradas marcadas por provedor ignorando o gateway. Escolher um modelo do registro cujo provider é Anthropic, Google, ou DeepSeek roteia pelo cliente e chave nativos daquele fornecedor. Se você esperava que a execução aparecesse no seu log de uso do gateway e não apareceu, a coluna provider do modelo que você escolheu é a explicação. Erros de dados disfarçados de erros de LLM. Dados de preço e fundamentos vêm da API financeira configurada por FINANCIAL_DATASETS_API_KEY, um serviço totalmente separado. Uma chave de dados faltando ou esgotada falha a execução antes ou entre chamadas de LLM, e o traceback pode parecer um problema de modelo. As duas credenciais falham independentemente; depure-as independentemente. Prompts interativos em automação. Mesmo com tudo configurado, esquecer a flag --model abre o seletor. Para execuções sem supervisão, sempre passe --model com um id registrado.
Quem roteia o ai-hedge-fund por um gateway.
- Backtesters varrendo tickers e faixas de datas, onde um comitê de agentes por ticker por data torna o gasto de tokens o custo dominante e o uso por chave o livro-razão natural.
- Pesquisadores comparando veredictos de modelo. A mesma execução sob dois ids de modelo é uma troca de flag, e a discordância de sinal entre modelos é em si um dado interessante.
- Desenvolvedores estendendo o repositório com novos agentes que querem um endpoint e uma chave por baixo de quantas personas eles adicionarem.
- Desenvolvedores que querem raciocínio Claude ou DeepSeek dentro de um repositório cujo caminho de roteamento mais limpo tem formato OpenAI, sem manter uma chave de fornecedor por entrada de provedor.
- 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.
Confirme que o gateway serve os ids que você registrou antes de lançar uma execução; as strings model_name do registro precisam corresponder aos ids servidos exatamente. A escada de falha da primeira execução: um 401 significa que OPENAI_API_KEY não é a chave do gateway no ambiente com o qual o poetry realmente foi lançado. Um erro model-not-found do gateway significa que o model_name da entrada do registro tem um erro de digitação em relação a /v1/models. Uma execução que para para pedir entrada significa que a string --model não bateu com o registro. Um erro de chave de fornecedor (Anthropic, Google) significa que o provider da entrada selecionada não é OpenAI. E um traceback com formato de dados antes de qualquer saída de modelo aponta para FINANCIAL_DATASETS_API_KEY, não para o caminho do LLM. Assim que uma execução completa, o console da APIsRouter mostra modelo, contagens de token e gasto por requisição. Uma execução de comitê são dezenas de chamadas entre analistas, risco, e etapas de portfólio, e a visão de uso é como você vê quanto uma decisão realmente custa antes de escalá-la em um sweep.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY" | head -50Perguntas frequentes
Qual variável de ambiente define uma base URL personalizada para o ai-hedge-fund?
OPENAI_API_BASE. O provedor OpenAI em src/llm/models.py constrói ChatOpenAI com base_url=os.getenv("OPENAI_API_BASE"). OPENAI_BASE_URL não é lido por este repositório, então use exatamente a grafia API_BASE.
O ai-hedge-fund pode rodar modelos Claude ou DeepSeek por uma chave?
Sim, registrando o id em src/llm/api_models.json com provider definido como "OpenAI". Provider seleciona o cliente, então uma entrada marcada como OpenAI passa pelo ChatOpenAI e pelo seu OPENAI_API_BASE, e o id do catálogo é passado para o gateway como uma string simples.
Por que --model me joga em um seletor interativo?
O valor de --model é buscado com find_model_by_name() contra api_models.json. Ids desconhecidos não são adivinhados; a CLI imprime uma mensagem de não encontrado e abre o seletor. Adicione uma entrada de registro para o id e execuções via script o resolvem sem perguntar.
Ainda preciso de ANTHROPIC_API_KEY ou outras chaves de fornecedor?
Não para modelos roteados pelo gateway. Chaves de fornecedor só são consultadas por entradas do registro marcadas com o provider daquele fornecedor. Se todo modelo que você roda está registrado sob o provider OpenAI, a chave do gateway é a única credencial de LLM que a execução precisa.
A configuração de dados de mercado muda quando eu mudo o endpoint do LLM?
Não. Dados de preço e fundamentos fluem pela API financeira configurada por FINANCIAL_DATASETS_API_KEY, que é independente da base URL do LLM. As duas credenciais falham em fases diferentes de uma execução, então depure-as separadamente.
Quanto custa uma execução do ai-hedge-fund?
Escala com agentes vezes tickers: cada persona de analista, mais gestão de risco e portfólio, raciocina por ticker. Execuções de cesta única tipicamente ficam entre dezenas e centenas de milhares de tokens, e sweeps de backtest multiplicam isso pela grade de datas. A visão de uso por chave dá a cifra exata por execução.