Fai girare ai-hedge-fund su un URL base OpenAI-compatible personalizzato.
Updated 2026-07-30
ai-hedge-fund costruisce i suoi modelli OpenAI con ChatOpenAI di LangChain e legge l'URL base da OPENAI_API_BASE. Impostalo su https://api.apisrouter.com/v1, esporta una chiave, e ogni agente analista del fondo instrada attraverso un unico endpoint.
Risposta rapida: OPENAI_API_BASE più una chiave.
Il provider OpenAI di ai-hedge-fund viene istanziato come ChatOpenAI(model=model_name, api_key=api_key, base_url=base_url), e quel base_url proviene da os.getenv("OPENAI_API_BASE") in src/llm/models.py. Quindi l'override sono due righe in .env: punta OPENAI_API_BASE su https://api.apisrouter.com/v1 e imposta OPENAI_API_KEY sulla tua chiave gateway. Ogni modello che gira attraverso il provider OpenAI ora invia richieste al gateway. Nota bene il nome della variabile: è OPENAI_API_BASE, la convenzione dell'era LangChain, non OPENAI_BASE_URL. Esportare quella sbagliata viene ignorato silenziosamente e le richieste continuano ad arrivare a api.openai.com, il modo più comune in cui questa configurazione sembra non funzionare.
OPENAI_API_BASE=https://api.apisrouter.com/v1
OPENAI_API_KEY=sk-APIsRouter-...
FINANCIAL_DATASETS_API_KEY=... # market data, unrelated to the LLM endpointCome ai-hedge-fund sceglie un modello e un provider.
ai-hedge-fund (virattt su GitHub, circa 62K stelle) simula un fondo come un comitato di agenti: persona di analisti modellate su investitori noti, più agenti di valutazione, sentiment, fondamentali e tecnica, che alimentano un risk manager e un portfolio manager che producono i segnali finali. Tutti condividono una scelta di modello per esecuzione, quindi una singola esecuzione moltiplica la tua decisione di modello per ogni agente e ogni ticker. La selezione del modello ha due percorsi. In modo interattivo, eseguire poetry run python src/main.py --ticker AAPL,MSFT,NVDA senza flag --model apre un selettore questionary. In modo scriptato, il flag --model prende un nome di modello, ma solo nomi che esistono nel registro dei modelli del repo: find_model_by_name() cerca la stringa in src/llm/api_models.json, e ogni voce del registro porta display_name, model_name, e provider. Se la ricerca fallisce, la CLI non indovina un provider; ricade sul selettore interattivo, il che conta per l'automazione perché un id sconosciuto trasforma un'esecuzione scriptata in una che resta in attesa di input da tastiera. Il campo provider è ciò che decide il routing. Le voci contrassegnate OpenAI passano per ChatOpenAI e rispettano OPENAI_API_BASE; le voci contrassegnate Anthropic passano per ChatAnthropic e ANTHROPIC_API_KEY, bypassando del tutto il tuo URL base. Questa è l'intuizione chiave per il routing del gateway: la colonna provider seleziona il client e quindi l'endpoint, indipendentemente da chi ha effettivamente addestrato il modello.
Configurazione completa: .env più una voce di registro per modello gateway.
Per i modelli che il registro già elenca sotto il provider OpenAI, il solo override in .env è sufficiente; la stringa del modello viene passata all'endpoint così com'è. Per far girare un id Claude, DeepSeek, o Qwen attraverso il gateway sulla stessa chiave, aggiungi una voce a src/llm/api_models.json con l'id del catalogo come model_name e, fondamentale, "OpenAI" come provider. Provider seleziona il client, quindi una voce contrassegnata OpenAI instrada attraverso ChatOpenAI e il tuo OPENAI_API_BASE anche se il modello stesso non è un modello OpenAI. La voce appare quindi nel selettore interattivo e si risolve tramite --model negli script. Questa è una modifica JSON di tre righe nel tuo clone, non una modifica al codice, ed è la forma documentata che il registro già usa. Tieni a mente le voci native per provider come contrasto: selezionare un modello del registro contrassegnato Anthropic cercherà ANTHROPIC_API_KEY e andrà dritto all'endpoint nativo di Anthropic. Se il tuo obiettivo è una chiave gateway per tutto, fai girare i tuoi modelli attraverso voci contrassegnate OpenAI e puoi lasciare le chiavi per singolo fornitore del tutto non impostate.
{
"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"
}Scegliere un modello per un comitato di agenti.
Poiché il registro rende ogni candidato indirizzabile dietro un flag, la valutazione onesta è empirica: esegui gli stessi ticker e le stesse date attraverso due o tre modelli e confronta i segnali e la spesa. La vista di utilizzo per chiave prezza ogni sweep per te, il che trasforma la scelta del modello da un dibattito in una misurazione.
- Un'esecuzione sono molti verdetti. Ogni persona analista ragiona sugli stessi documenti e dati di prezzo per ticker, quindi la scelta del modello viene moltiplicata per il numero di agenti per il numero di ticker. Un id di ragionamento di frontiera (claude-opus-4-7, gpt-5.5) alza la qualità di ogni verdetto a un conto token moltiplicato di conseguenza.
- claude-sonnet-4-6 è la scelta predefinita sensata: abbastanza forte da mantenere coerente il ragionamento delle persona su un lungo contesto fondamentale, prezzato per esecuzioni che si diramano su una dozzina di agenti e un paniere di ticker.
- deepseek-v4-pro e qwen3.7-max meritano un benchmark per sweep ampi, dove il divario di prezzo per esecuzione si accumula su ogni data di backtest.
- Qualunque cosa tu scelga, fissala. I segnali provenienti da diversi snapshot di un modello in movimento non sono comparabili in una finestra di backtest; usa id esatti e registra la stringa del modello accanto ai risultati come un random seed.
Pagamento a consumo · sotto i prezzi ufficiali
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Modello | Prezzo ufficiale | Il nostro prezzo |
|---|---|---|
| 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 |
Le modalità di errore specifiche di ai-hedge-fund.
La variabile d'ambiente sbagliata. Questo repo legge OPENAI_API_BASE. OPENAI_BASE_URL, la variabile che usano altri strumenti, non viene consultata, e impostarla non fa nulla se non convincerti che l'override sia rotto. Se le richieste continuano a colpire api.openai.com, controlla per prima cosa il nome della variabile. --model con un id non registrato. find_model_by_name() conosce solo le voci in api_models.json. Passa un id del catalogo che non è registrato e la CLI stampa un messaggio di non trovato e scende nel selettore interattivo, il che in un cron job o in un'esecuzione CI significa un blocco silenzioso, non un'uscita con errore. Registra prima l'id; poi le esecuzioni scriptate lo risolvono in modo deterministico. Voci contrassegnate per provider che bypassano il gateway. Scegliere un modello del registro il cui provider è Anthropic, Google, o DeepSeek instrada attraverso il client e la chiave nativi di quel fornitore. Se ti aspettavi che l'esecuzione apparisse nel tuo log di utilizzo del gateway e non è successo, la colonna provider del modello che hai scelto è la spiegazione. Errori di dati travestiti da errori LLM. I dati di prezzo e fondamentali provengono dall'API finanziaria configurata da FINANCIAL_DATASETS_API_KEY, un servizio completamente separato. Una chiave dati mancante o esaurita fa fallire l'esecuzione prima o tra le chiamate LLM, e il traceback può sembrare un problema di modello. Le due credenziali falliscono in modo indipendente; fai debug di entrambe in modo indipendente. Prompt interattivi nell'automazione. Anche con tutto configurato, dimenticare il flag --model apre il selettore. Per esecuzioni non presidiate, passa sempre --model con un id registrato.
Chi instrada ai-hedge-fund tramite un gateway.
- Backtester che eseguono sweep su ticker e intervalli di date, dove un comitato di agenti per ticker per data rende la spesa in token il costo dominante e l'utilizzo per chiave il libro mastro naturale.
- Ricercatori che confrontano i verdetti dei modelli. La stessa esecuzione sotto due id di modello è un cambio di flag, e il disaccordo tra segnali di modelli diversi è di per sé un dato interessante.
- Builder che estendono il repo con nuovi agenti e vogliono un endpoint e una chiave sotto qualunque numero di persona aggiungano.
- Sviluppatori che vogliono il ragionamento di Claude o DeepSeek dentro un repo il cui percorso di routing più pulito è a forma OpenAI, senza mantenere una chiave fornitore per voce di provider.
- Sviluppatori senza accesso alla fatturazione di un dato fornitore. L'accesso basato su ricarica senza obbligo di carta rimuove la dipendenza dalla registrazione per provider.
Verifica l'endpoint e fai debug della prima esecuzione.
Conferma che il gateway serva gli id che hai registrato prima di lanciare un'esecuzione; le stringhe model_name del registro devono corrispondere esattamente agli id serviti. La scala di fallimento della prima esecuzione: un 401 significa che OPENAI_API_KEY non è la chiave del gateway nell'ambiente con cui poetry ha effettivamente lanciato. Un errore modello-non-trovato dal gateway significa che il model_name della voce del registro ha un errore di battitura rispetto a /v1/models. Un'esecuzione che si ferma per chiedere input significa che la stringa --model non ha trovato corrispondenza nel registro. Un errore di chiave del fornitore (Anthropic, Google) significa che il provider della voce selezionata non è OpenAI. E un traceback a forma di dati prima di qualsiasi output del modello punta a FINANCIAL_DATASETS_API_KEY, non al percorso LLM. Una volta completata un'esecuzione, la console di APIsRouter mostra il modello per richiesta, i conteggi dei token e la spesa. Un'esecuzione di comitato sono dozzine di chiamate tra analisti, rischio e fasi di portafoglio, e la vista di utilizzo è come vedi quanto costa davvero una decisione prima di scalarla in uno sweep.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY" | head -50Domande frequenti
Quale variabile d'ambiente imposta un URL base personalizzato per ai-hedge-fund?
OPENAI_API_BASE. Il provider OpenAI in src/llm/models.py costruisce ChatOpenAI con base_url=os.getenv("OPENAI_API_BASE"). OPENAI_BASE_URL non viene letta da questo repo, quindi usa esattamente la grafia API_BASE.
ai-hedge-fund può far girare modelli Claude o DeepSeek attraverso una chiave?
Sì, registrando l'id in src/llm/api_models.json con provider impostato su "OpenAI". Provider seleziona il client, quindi una voce contrassegnata OpenAI instrada attraverso ChatOpenAI e il tuo OPENAI_API_BASE, e l'id del catalogo viene passato al gateway come stringa semplice.
Perché --model mi fa cadere in un selettore interattivo?
Il valore di --model viene cercato con find_model_by_name() contro api_models.json. Gli id sconosciuti non vengono indovinati; la CLI stampa un messaggio di non trovato e apre il selettore. Aggiungi una voce di registro per l'id e le esecuzioni scriptate lo risolvono senza chiedere input.
Ho ancora bisogno di ANTHROPIC_API_KEY o di altre chiavi fornitore?
Non per i modelli instradati tramite gateway. Le chiavi fornitore vengono consultate solo dalle voci di registro contrassegnate con il provider di quel fornitore. Se ogni modello che esegui è registrato sotto il provider OpenAI, la chiave gateway è l'unica credenziale LLM di cui l'esecuzione ha bisogno.
La configurazione dei dati di mercato cambia quando cambio l'endpoint LLM?
No. I dati di prezzo e fondamentali fluiscono attraverso l'API finanziaria configurata da FINANCIAL_DATASETS_API_KEY, indipendente dall'URL base LLM. Le due credenziali falliscono in fasi diverse di un'esecuzione, quindi fai debug separatamente.
Quanto costa un'esecuzione di ai-hedge-fund?
Scala con agenti per ticker: ogni persona analista, più risk e portfolio management, ragiona per ticker. Le esecuzioni su un singolo paniere arrivano tipicamente a decine o centinaia di migliaia di token, e gli sweep di backtest moltiplicano questo per la griglia di date. La vista di utilizzo per chiave dà la cifra esatta per esecuzione.