Fai girare TradingAgents su un backend OpenAI-compatible personalizzato.
Updated 2026-07-30
TradingAgents viene distribuito con una modalità provider openai_compatible. Imposta backend_url su https://api.apisrouter.com/v1, esporta una chiave, ed entrambi gli agenti deep-think e quick-think instradano attraverso un unico endpoint con ogni modello del catalogo indirizzabile per id.
Risposta rapida: tre impostazioni instradano TradingAgents ovunque.
TradingAgents supporta endpoint personalizzati nativamente. Imposta llm_provider su "openai_compatible", imposta backend_url sull'indirizzo del tuo endpoint, ed esporta OPENAI_COMPATIBLE_API_KEY con una chiave per quell'endpoint. Con APIsRouter l'URL backend è https://api.apisrouter.com/v1, e ogni modello nel catalogo diventa indirizzabile dagli slot deep_think_llm e quick_think_llm tramite il suo id di modello esatto. Questo è un percorso di configurazione documentato nel repo a monte, non un fork o una patch. Gli stessi valori possono anche essere forniti come variabili d'ambiente (TRADINGAGENTS_LLM_PROVIDER, TRADINGAGENTS_LLM_BACKEND_URL, TRADINGAGENTS_DEEP_THINK_LLM, TRADINGAGENTS_QUICK_THINK_LLM), così un job programmato o un runner CI può cambiare backend senza toccare codice Python.
config["llm_provider"] = "openai_compatible"
config["backend_url"] = "https://api.apisrouter.com/v1"
# auth: export OPENAI_COMPATIBLE_API_KEY=sk-...Come TradingAgents parla con il suo backend LLM.
TradingAgents (TauricResearch su GitHub, oltre 93K stelle) è un framework di trading multi-agente. Un'esecuzione di analisi si dirama su un team di analisti che copre fondamentali, sentiment, notizie, e tecnica, poi un ricercatore rialzista e uno ribassista discutono il caso su uno o più round di dibattito, un agente trader propone la posizione, e uno strato di risk management la revisiona prima della decisione finale. Il framework divide quel lavoro su due slot di modello. deep_think_llm gestisce i passi pesanti sul ragionamento: il dibattito di ricerca, la decisione del trader, e la revisione del rischio. quick_think_llm gestisce i passi ad alto volume: leggere dati, riassumere notizie, e redigere report degli analisti. Entrambi gli slot emettono richieste /v1/chat/completions standard. L'impostazione provider decide solo verso quale client e host vanno quelle richieste, e openai_compatible le invia a qualunque backend_url tu configuri. Nativamente, TradingAgents supporta anche OpenAI, Anthropic, Google, e DeepSeek come provider di prima parte, ma ognuno ha bisogno del proprio account, della propria chiave, e di un provider per esecuzione. La modalità openai_compatible collassa questo: TradingAgents inoltra il campo model come stringa semplice, quindi quando l'endpoint dietro backend_url serve più fornitori, uno slot deep-think Claude e uno slot quick-think GPT o DeepSeek possono girare nella stessa analisi. Quel mixing per ruolo è la ragione pratica per instradare il framework tramite un gateway piuttosto che un endpoint a fornitore singolo.
Configurazione completa: config Python o variabili d'ambiente.
Il percorso programmatico copia DEFAULT_CONFIG e sovrascrive quattro chiavi. La chiave che autentica contro l'endpoint personalizzato viene letta da OPENAI_COMPATIBLE_API_KEY, quindi non deve mai apparire nel dict di config o nel file sorgente. Il percorso a variabili d'ambiente imposta gli stessi valori tramite la mappatura _ENV_OVERRIDES in default_config.py e funziona sia per l'API Python che per la CLI interattiva (tradingagents, o python -m cli.main). Nota che backend_url ha come default None, nel qual caso il client di ogni provider ricade sul proprio endpoint predefinito; l'override ha effetto solo una volta che lo imposti esplicitamente. I dati di mercato sono una questione separata. TradingAgents recupera quotazioni e fondamentali tramite i suoi fornitori di dati (per esempio ALPHA_VANTAGE_API_KEY), e quelle credenziali non sono correlate all'endpoint LLM. Cambiare backend_url non tocca la pipeline dati.
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" # debate rounds + trade decision
config["quick_think_llm"] = "claude-sonnet-4-6" # analysts, summaries
config["max_debate_rounds"] = 2
ta = TradingAgentsGraph(debug=True, config=config)
_, decision = ta.propagate("NVDA", "2026-07-15")
print(decision)Scegliere i modelli deep-think e quick-think.
Il default a monte abbina un modello di frontiera nello slot deep con un modello mini nello slot quick, che è la forma giusta: spendi capacità di ragionamento dove si prende la decisione, e capacità di volume dove si fa la lettura. Instradare tramite un endpoint rende l'abbinamento una modifica di due righe tra esecuzioni, quindi il flusso di lavoro pratico è tenere fisso lo slot deep e mettere in A/B lo slot quick contro le tue metriche di backtest piuttosto che indovinare.
- deep_think_llm porta il dibattito bull/bear, la decisione del trader, e la revisione del rischio. Poche chiamate per esecuzione, ma ognuna ragiona sull'intero contesto degli analisti, e max_debate_rounds le moltiplica. Qui un modello di ragionamento di frontiera (claude-opus-4-7, gpt-5.5) guadagna i suoi token.
- quick_think_llm spara a ogni passo dell'analista: leggere fondamentali, valutare il sentiment, riassumere notizie, redigere report. La maggior parte del volume di richieste di un'esecuzione atterra qui, quindi un modello veloce di fascia media (claude-sonnet-4-6, deepseek-v4-pro) mantiene le esecuzioni rapide senza degradare gli input del dibattito.
- I carichi a contesto lungo, come alimentare filing completi o ampie finestre di notizie agli analisti, sono dove vale la pena testare gemini-3.1-pro-preview nello slot quick.
- I backtest amplificano tutto. Uno sweep su 50 ticker e 20 date sono 1.000 chiamate propagate(), quindi una scelta di modello quick-think che sembra marginale su un'esecuzione domina il conto token a scala di sweep.
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 |
| 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 a scala di sweep: chiavi, fissaggio, e limiti.
Una volta che la configurazione a singola esecuzione funziona, la superficie di fallimento si sposta sullo sweep. Tre abitudini mantengono un backtest multi-giorno riproducibile e debuggabile. Fissa gli id di modello esatti. I nomi di modello nudi su alcuni fornitori sono puntatori scorrevoli che si spostano silenziosamente verso snapshot più recenti, il che significa che un backtest iniziato lunedì e finito venerdì potrebbe non aver eseguito un solo modello. Dove il catalogo elenca una variante datata, metti l'id datato nella config, e registra il dict di config accanto ai risultati come faresti con un random seed. Usa una chiave per esperimento. Le chiavi sono gratis da creare, e delimitare una chiave a uno sweep trasforma il log di utilizzo nel libro mastro dei costi dell'esperimento: conteggi di token e spesa per modello, filtrabili esattamente alle esecuzioni di quello sweep. Quando due esperimenti condividono una chiave, attribuire la spesa dopo significa fare grep sui timestamp. Conosci il tuo tetto di concorrenza prima di parallelizzare. propagate() è sincrono per ticker-data, quindi gli sweep di solito si dividono su più processi. Ogni shard moltiplica il tasso di richieste prima sullo slot quick-think, e un 429 a metà dibattito costa un'intera esecuzione, non una richiesta. Aumenta gradualmente il numero di shard osservando la console piuttosto che lanciare cinquanta worker a freddo; i canali pooled a monte alzano il tetto ma non lo rendono infinito.
Chi instrada TradingAgents tramite un gateway.
- Backtester che eseguono sweep ticker-per-data. Centinaia di chiamate propagate() per esperimento rendono la visibilità di utilizzo per chiave e una singola superficie di fatturazione più utili di quattro dashboard fornitore.
- Ricercatori che confrontano coppie di modelli. Scambiare deep_think_llm tra id Claude, GPT, e DeepSeek è una modifica di config contro un endpoint, non un nuovo account fornitore per candidato.
- Team che mescolano fornitori per ruolo. Claude per il dibattito, DeepSeek per il volume degli analisti. La modalità provider nativa blocca un'esecuzione a un fornitore; un endpoint multi-fornitore no.
- 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.
- Esecuzioni programmate e CI. La configurazione solo-ambiente significa che l'immagine del runner ha bisogno di un segreto (OPENAI_COMPATIBLE_API_KEY) invece di uno per fornitore.
Verifica l'endpoint e fai debug della prima esecuzione.
Prima di eseguire un'analisi completa, conferma che l'endpoint risponda con i modelli che intendi usare. Una curl a una riga contro /v1/models con la tua chiave elenca ogni id indirizzabile; le stringhe in deep_think_llm e quick_think_llm devono corrispondere esattamente a quegli id. Le modalità di fallimento su una prima esecuzione sono coerenti. Un 401 quasi sempre significa che OPENAI_COMPATIBLE_API_KEY è stata esportata in una shell diversa da quella che esegue tradingagents, o non esportata affatto; le variabili d'ambiente impostate in .bashrc non raggiungono una unit systemd o un cron job a meno che il file unit non le esporti da solo. Un errore modello-non-trovato significa che la stringa dell'id non corrisponde al catalogo: gli id sono esatti, suffissi di versione inclusi, e l'output di /v1/models sopra è la fonte di verità. Un errore di connessione con backend_url impostato di solito significa che all'URL manca il suffisso /v1, poiché il client aggiunge percorsi di route come /chat/completions a qualunque base tu dia. Se l'esecuzione funziona ma sembra bloccarsi nella fase di dibattito, quella è latenza normale per modelli di ragionamento su contesti lunghi piuttosto che un problema di endpoint; tieni debug=True acceso per osservare i passi dell'agente in streaming. I timeout genuini su turni deep-think molto lunghi sono un'impostazione lato client, e vale la pena alzarli prima di concludere che il backend abbia scartato la richiesta. Una volta che le richieste fluiscono, la console di APIsRouter mostra il modello per richiesta, i conteggi dei token e la spesa, che per un framework così intenso di chiamate è il modo più rapido di vedere esattamente dove vanno i token di un'esecuzione.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $OPENAI_COMPATIBLE_API_KEY" | head -50Domande frequenti
TradingAgents supporta modelli Claude e Gemini tramite un unico endpoint openai_compatible?
Sì. In modalità openai_compatible il framework invia il campo model come stringa semplice a backend_url su /v1/chat/completions. Funziona qualsiasi id che l'endpoint serve, inclusi id Claude, Gemini, e DeepSeek, sia nello slot deep-think sia quick-think.
Quale chiave API usa TradingAgents con un backend_url personalizzato?
OPENAI_COMPATIBLE_API_KEY. Il provider openai_compatible la legge dall'ambiente, quindi la chiave non appare mai nel tuo dict di config o nei file sorgente. OPENAI_API_KEY viene usata solo dal provider openai nativo.
deep_think_llm e quick_think_llm possono provenire da fornitori diversi nella stessa esecuzione?
Tramite un endpoint multi-fornitore, sì: entrambi gli slot inviano allo stesso backend_url e la stringa di modello decide il fornitore per richiesta. Con provider nativi (openai, anthropic, google, deepseek) un'esecuzione è bloccata a un fornitore per entrambi gli slot.
Ho ancora bisogno di un account OpenAI una volta impostato backend_url?
No. Con llm_provider impostato su openai_compatible, nessuna richiesta va verso host OpenAI e OPENAI_API_KEY non viene letta. Hai comunque bisogno delle credenziali dei dati di mercato che TradingAgents usa (per esempio ALPHA_VANTAGE_API_KEY), indipendenti dall'endpoint LLM.
La CLI interattiva rispetta anch'essa l'endpoint personalizzato?
Sì. La CLI (tradingagents, o python -m cli.main) risolve la stessa config, e le variabili d'ambiente TRADINGAGENTS_LLM_PROVIDER / TRADINGAGENTS_LLM_BACKEND_URL la sovrascrivono prima del prompt del provider, quindi le esecuzioni CLI programmate o containerizzate non hanno bisogno di input interattivo per il routing.
Quanti token consuma un'analisi di TradingAgents?
Varia con max_debate_rounds, il numero di analisti, e quanto contesto di mercato ingeriscono; una singola analisi ticker-data tipicamente arriva a centinaia di migliaia di token, la maggior parte sullo slot quick-think. La vista di utilizzo per chiave nella console di APIsRouter mostra la divisione esatta per esecuzione, il che è più affidabile che stimare.