Draai TradingAgents op een aangepaste OpenAI-compatibele backend.
Updated 2026-07-30
TradingAgents wordt geleverd met een openai_compatible-providermodus. Zet backend_url op https://api.apisrouter.com/v1, exporteer één sleutel, en zowel de deep-think- als quick-think-agents routeren via één endpoint met elk catalogusmodel aanspreekbaar per ID.
Snel antwoord: drie instellingen routeren TradingAgents overal naartoe.
TradingAgents ondersteunt aangepaste endpoints native. Zet llm_provider op "openai_compatible", zet backend_url op je endpointadres, en exporteer OPENAI_COMPATIBLE_API_KEY met een sleutel voor dat endpoint. Met APIsRouter is de backend-URL https://api.apisrouter.com/v1, en elk model in de catalogus wordt aanspreekbaar vanuit de slots deep_think_llm en quick_think_llm via zijn exacte model-ID. Dit is een gedocumenteerd configuratiepad in de upstream-repo, geen fork of patch. Dezelfde waarden kunnen ook als omgevingsvariabelen worden geleverd (TRADINGAGENTS_LLM_PROVIDER, TRADINGAGENTS_LLM_BACKEND_URL, TRADINGAGENTS_DEEP_THINK_LLM, TRADINGAGENTS_QUICK_THINK_LLM), zodat een geplande taak of CI-runner van backend kan wisselen zonder Python-code aan te raken.
config["llm_provider"] = "openai_compatible"
config["backend_url"] = "https://api.apisrouter.com/v1"
# auth: export OPENAI_COMPATIBLE_API_KEY=sk-...Hoe TradingAgents met zijn LLM-backend praat.
TradingAgents (TauricResearch op GitHub, 93K+ sterren) is een multi-agent handelsframework. Eén analyserun waaiert uit over een analistenteam dat fundamentals, sentiment, nieuws en technische analyse dekt, dan bediscussiëren een bull-onderzoeker en een bear-onderzoeker de zaak over één of meer debatronden, stelt een trader-agent de positie voor, en beoordeelt een risicomanagementlaag hem voordat de uiteindelijke beslissing valt. Het framework splitst dat werk over twee modelslots. deep_think_llm handelt de redeneerzware stappen af: het onderzoeksdebat, de traderbeslissing, en risicoreview. quick_think_llm handelt de hoogvolume-stappen af: data lezen, nieuws samenvatten, en analistenrapporten opstellen. Beide slots doen standaard /v1/chat/completions-verzoeken. De providerinstelling beslist alleen naar welke client en host die verzoeken gaan, en openai_compatible stuurt ze naar welke backend_url je ook configureert. Native ondersteunt TradingAgents ook OpenAI, Anthropic, Google en DeepSeek als first-party providers, maar elke heeft zijn eigen account, zijn eigen sleutel, en één provider per run nodig. De openai_compatible-modus laat dat samenvallen: TradingAgents geeft het modelveld door als platte string, dus wanneer het endpoint achter backend_url meerdere leveranciers bedient, kunnen een Claude-deep-think-slot en een GPT- of DeepSeek-quick-think-slot in dezelfde analyse draaien. Die menging per rol is de praktische reden om het framework via een gateway te routeren in plaats van via één leverancierendpoint.
Volledige instelling: Python-config of omgevingsvariabelen.
Het programmatische pad kopieert DEFAULT_CONFIG en overschrijft vier sleutels. De sleutel die authenticeert tegen het aangepaste endpoint wordt gelezen uit OPENAI_COMPATIBLE_API_KEY, dus hoeft nooit in de config-dict of het bronbestand te verschijnen. Het omgevingsvariabelenpad zet dezelfde waarden via de _ENV_OVERRIDES-mapping in default_config.py en werkt zowel voor de Python-API als de interactieve CLI (tradingagents, of python -m cli.main). Merk op dat backend_url standaard None is, in welk geval de client van elke provider terugvalt op zijn eigen standaardendpoint; de override treedt pas in werking zodra je hem expliciet zet. Marktdata is een aparte zaak. TradingAgents haalt koersen en fundamentals via zijn dataleveranciers (bijvoorbeeld ALPHA_VANTAGE_API_KEY), en die credentials zijn los van het LLM-endpoint. Het wijzigen van backend_url raakt de datapijplijn niet.
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)Deep-think- en quick-think-modellen kiezen.
De upstream-standaard paart een frontiermodel in het deep-slot met een mini-model in het quick-slot, wat de juiste vorm is: besteed redeneercapaciteit waar de beslissing wordt genomen, en volumecapaciteit waar het lezen gebeurt. Routeren via één endpoint maakt de paring een wijziging van twee regels tussen runs, dus is de praktische workflow om het deep-slot vast te houden en het quick-slot te A/B'en tegen je backtestmetrieken in plaats van te gissen.
- deep_think_llm draagt het bull/bear-debat, de traderbeslissing, en risicoreview. Weinig aanroepen per run, maar elke redeneert over de volledige analistencontext, en max_debate_rounds vermenigvuldigt ze. Hier verdient een frontier-redeneermodel (claude-opus-4-7, gpt-5.5) zijn tokens.
- quick_think_llm vuurt bij elke analiststap: fundamentals lezen, sentiment scoren, nieuws samenvatten, rapporten opstellen. Het grootste deel van het verzoekvolume van een run landt hier, dus een snel mid-tier-model (claude-sonnet-4-6, deepseek-v4-pro) houdt runs snel zonder de debatinputs te degraderen.
- Langecontextladingen, zoals volledige filings of grote nieuwsvensters voeden aan de analisten, zijn waar gemini-3.1-pro-preview het waard is om te testen in het quick-slot.
- Backtests versterken alles. Een sweep over 50 tickers en 20 datums is 1.000 propagate()-aanroepen, dus een quick-think-modelkeuze die marginaal lijkt op één run domineert de tokenrekening op sweep-schaal.
Betaal naar gebruik · onder officiële prijzen
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Model | Officiële prijs | Onze prijs |
|---|---|---|
| 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 |
Backtesten op sweep-schaal: sleutels, pinning, en limieten.
Zodra de instelling voor één run werkt, verschuift het faaloppervlak naar de sweep. Drie gewoontes houden een backtest van meerdere dagen reproduceerbaar en debugbaar. Pin exacte model-ID's. Kale modelnamen zijn bij sommige leveranciers rollende pointers die stilletjes naar nieuwere snapshots verschuiven, wat betekent dat een backtest die maandag start en vrijdag eindigt mogelijk niet één model heeft gedraaid. Waar de catalogus een gedateerde variant vermeldt, plaats het gedateerde ID in de config, en noteer de config-dict naast de resultaten zoals je een random seed zou noteren. Gebruik één sleutel per experiment. Sleutels zijn gratis aan te maken, en een sleutel scopen naar een sweep verandert het gebruikslogboek in het kostengrootboek van het experiment: tokenaantallen en uitgaven per model, filterbaar tot precies de runs in die sweep. Wanneer twee experimenten een sleutel delen, betekent uitgaven achteraf toewijzen tijdstempels grepen. Ken je gelijktijdigheidsplafond voordat je parallelliseert. propagate() is synchroon per ticker-datum, dus sweeps sharden meestal over processen. Elke shard vermenigvuldigt eerst het verzoektempo op het quick-think-slot, en een 429 midden in een debat kost een hele run, geen enkel verzoek. Voer het aantal shards geleidelijk op terwijl je de console in de gaten houdt in plaats van koud vijftig workers te lanceren; gepoolde upstream-kanalen verhogen het plafond maar maken het niet oneindig.
Wie routeert TradingAgents via een gateway.
- Backtesters die ticker-per-datum-sweeps draaien. Honderden propagate()-aanroepen per experiment maken gebruikszichtbaarheid per sleutel en één factureringsoppervlak nuttiger dan vier leveranciersdashboards.
- Onderzoekers die modelparen vergelijken. deep_think_llm wisselen tussen Claude-, GPT- en DeepSeek-ID's is een configbewerking tegen één endpoint, geen nieuw leveranciersaccount per kandidaat.
- Teams die leveranciers per rol mixen. Claude voor het debat, DeepSeek voor analistenvolume. Native providermodus vergrendelt een run op één leverancier; een multi-vendor-endpoint niet.
- Developers zonder toegang tot de facturering van een bepaalde leverancier. Toegang op basis van opwaarderen zonder kaartvereiste verwijdert de aanmeldingsafhankelijkheid per provider.
- Geplande en CI-runs. De env-only-instelling betekent dat de runner-image één secret nodig heeft (OPENAI_COMPATIBLE_API_KEY) in plaats van één per provider.
Verifieer het endpoint en debug de eerste run.
Bevestig voordat je een volledige analyse draait dat het endpoint antwoordt met de modellen die je van plan bent te gebruiken. Eén curl-regel tegen /v1/models met je sleutel lijst elk aanspreekbaar ID op; de strings in deep_think_llm en quick_think_llm moeten exact overeenkomen met die ID's. De faalmodi op een eerste run zijn consistent. Een 401 betekent bijna altijd dat OPENAI_COMPATIBLE_API_KEY werd geëxporteerd in een andere shell dan die waarin tradingagents draait, of helemaal niet werd geëxporteerd; omgevingsvariabelen gezet in .bashrc bereiken geen systemd-unit of cronjob tenzij het unit-bestand ze zelf exporteert. Een model-not-found-fout betekent dat de ID-string niet overeenkomt met de catalogus: ID's zijn exact, versieachtervoegsels inbegrepen, en de /v1/models-output hierboven is de bron van waarheid. Een verbindingsfout met backend_url gezet betekent meestal dat de URL zijn /v1-achtervoegsel mist, aangezien de client routepaden zoals /chat/completions toevoegt aan welke base je ook geeft. Als de run werkt maar lijkt vast te lopen in de debatfase, is dat normale latentie voor redeneermodellen over lange contexten in plaats van een endpointprobleem; houd debug=True aan om agentstappen te zien streamen. Echte timeouts op zeer lange deep-think-beurten zijn een client-side instelling, en het is de moeite waard om ze te verhogen voordat je concludeert dat de backend het verzoek liet vallen. Zodra verzoeken stromen, toont de APIsRouter-console model per verzoek, tokenaantallen en uitgaven, wat voor een framework zo aanroepzwaar de snelste manier is om precies te zien waar de tokens van een run naartoe gaan.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $OPENAI_COMPATIBLE_API_KEY" | head -50Veelgestelde vragen
Ondersteunt TradingAgents Claude- en Gemini-modellen via één openai_compatible-endpoint?
Ja. In openai_compatible-modus stuurt het framework het modelveld als platte string naar backend_url over /v1/chat/completions. Elk ID dat het endpoint bedient werkt, inclusief Claude-, Gemini- en DeepSeek-ID's, in zowel het deep-think- als quick-think-slot.
Welke API-sleutel gebruikt TradingAgents met een aangepaste backend_url?
OPENAI_COMPATIBLE_API_KEY. De openai_compatible-provider leest hem uit de omgeving, dus de sleutel verschijnt nooit in je config-dict of bronbestanden. OPENAI_API_KEY wordt alleen gebruikt door de native openai-provider.
Kunnen deep_think_llm en quick_think_llm van verschillende leveranciers komen in dezelfde run?
Via een multi-vendor-endpoint, ja: beide slots posten naar dezelfde backend_url en de model-string beslist de leverancier per verzoek. Met native providers (openai, anthropic, google, deepseek) is een run vergrendeld op één leverancier voor beide slots.
Heb ik nog steeds een OpenAI-account nodig zodra backend_url is ingesteld?
Nee. Met llm_provider ingesteld op openai_compatible gaat geen verzoek naar OpenAI-hosts en wordt OPENAI_API_KEY niet gelezen. Je hebt nog steeds de marktdatacredentials nodig die TradingAgents gebruikt (bijvoorbeeld ALPHA_VANTAGE_API_KEY), die onafhankelijk zijn van het LLM-endpoint.
Eerbiedigt de interactieve CLI het aangepaste endpoint ook?
Ja. De CLI (tradingagents, of python -m cli.main) resolveert dezelfde config, en de omgevingsvariabelen TRADINGAGENTS_LLM_PROVIDER / TRADINGAGENTS_LLM_BACKEND_URL overschrijven hem voor de providerprompt, dus geplande of gecontaineriseerde CLI-runs hebben geen interactieve invoer nodig voor routering.
Hoeveel tokens verbruikt één TradingAgents-analyse?
Het varieert met max_debate_rounds, het aantal analisten, en hoeveel marktcontext ze opnemen; een enkele ticker-datum-analyse landt doorgaans in de honderdduizenden tokens, de meeste op het quick-think-slot. De gebruiksweergave per sleutel in de APIsRouter-console toont de exacte splitsing per run, wat betrouwbaarder is dan schatten.