Draai ai-hedge-fund op een aangepaste OpenAI-compatibele base URL.
Updated 2026-07-30
ai-hedge-fund bouwt zijn OpenAI-modellen met LangChain's ChatOpenAI en leest de base URL uit OPENAI_API_BASE. Zet hem op https://api.apisrouter.com/v1, exporteer één sleutel, en elke analist-agent in het fonds routeert via één endpoint.
Snel antwoord: OPENAI_API_BASE plus één sleutel.
De OpenAI-provider van ai-hedge-fund wordt geïnstantieerd als ChatOpenAI(model=model_name, api_key=api_key, base_url=base_url), en die base_url komt uit os.getenv("OPENAI_API_BASE") in src/llm/models.py. De override is dus twee regels in .env: wijs OPENAI_API_BASE naar https://api.apisrouter.com/v1 en zet OPENAI_API_KEY op je gateway-sleutel. Elk model dat via de OpenAI-provider draait, post nu naar de gateway. Let goed op de naam van de variabele: het is OPENAI_API_BASE, de conventie uit het LangChain-tijdperk, niet OPENAI_BASE_URL. De verkeerde exporteren wordt stilletjes genegeerd en verzoeken blijven naar api.openai.com gaan, wat de meest voorkomende manier is waarop deze instelling niet lijkt te werken.
OPENAI_API_BASE=https://api.apisrouter.com/v1
OPENAI_API_KEY=sk-APIsRouter-...
FINANCIAL_DATASETS_API_KEY=... # market data, unrelated to the LLM endpointHoe ai-hedge-fund een model en een provider kiest.
ai-hedge-fund (virattt op GitHub, ongeveer 62K sterren) simuleert een fonds als een comité van agents: analistpersona's gemodelleerd naar bekende beleggers, plus waardering-, sentiment-, fundamentals- en technische-analyse-agents, die een risicomanager en een portfoliomanager voeden die de uiteindelijke signalen produceren. Ze delen allemaal één modelkeuze per run, dus vermenigvuldigt één run je modelbeslissing over elke agent en elk ticker. Modelselectie kent twee paden. Interactief opent het draaien van poetry run python src/main.py --ticker AAPL,MSFT,NVDA zonder model-flag een questionary-kiezer. Scripted neemt de --model-flag een modelnaam, maar alleen namen die bestaan in het modelregister van de repo: find_model_by_name() zoekt de string op in src/llm/api_models.json, en elke registervermelding draagt display_name, model_name en provider. Als de lookup faalt, raadt de CLI geen provider; hij valt terug op de interactieve kiezer, wat er bij automatisering toe doet omdat een onbekend ID een scripted run verandert in een run die op toetsenbordinvoer blijft wachten. Het provider-veld beslist over de routering. Vermeldingen gemarkeerd als OpenAI gaan via ChatOpenAI en eerbiedigen OPENAI_API_BASE; vermeldingen gemarkeerd als Anthropic gaan via ChatAnthropic en ANTHROPIC_API_KEY, waarbij je base URL volledig wordt omzeild. Dat is het kerninzicht voor gateway-routering: de provider-kolom selecteert de client en dus het endpoint, ongeacht wie het model daadwerkelijk heeft gemaakt.
Volledige instelling: .env plus een registervermelding per gatewaymodel.
Voor modellen die het register al vermeldt onder de OpenAI-provider, volstaat de .env-override alleen; de model-string wordt ongewijzigd doorgegeven aan het endpoint. Om een Claude-, DeepSeek- of Qwen-ID via de gateway op dezelfde sleutel te draaien, voeg je een vermelding toe aan src/llm/api_models.json met het catalogus-ID als model_name en, cruciaal, "OpenAI" als provider. Provider selecteert de client, dus een als-OpenAI-gemarkeerde vermelding routeert via ChatOpenAI en je OPENAI_API_BASE, ook al is het model zelf geen OpenAI-model. De vermelding verschijnt dan in de interactieve kiezer en resolveert via --model in scripts. Dit is een JSON-bewerking van drie regels in je kloon, geen codewijziging, en het is de gedocumenteerde vorm die het register al gebruikt. Houd de providernatieve vermeldingen in gedachten als contrast: het selecteren van een registermodel gemarkeerd als Anthropic zoekt naar ANTHROPIC_API_KEY en gaat rechtstreeks naar het endpoint van Anthropic. Als je bedoeling één gatewaysleutel voor alles is, draai je modellen dan via als-OpenAI-gemarkeerde vermeldingen en kun je de per-leverancier-sleutels volledig ongezet laten.
{
"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"
}Een model kiezen voor een agentcomité.
Omdat het register elke kandidaat aanspreekbaar maakt achter één flag, is de eerlijke evaluatie empirisch: draai dezelfde tickers en datums door twee of drie modellen en vergelijk de signalen en de uitgaven. De gebruiksweergave per sleutel prijst elke sweep voor je, wat modelkeuze verandert van een debat in een meting.
- Eén run is veel verdicten. Elke analistpersona redeneert over dezelfde filings en prijsdata per ticker, dus de modelkeuze wordt vermenigvuldigd met het aantal agents keer het aantal tickers. Een frontier-redeneer-ID (claude-opus-4-7, gpt-5.5) verhoogt de kwaliteit van elk verdict tegen een navenant vermenigvuldigde tokenrekening.
- claude-sonnet-4-6 is de verstandige standaard: sterk genoeg dat persona-redenering coherent blijft over lange fundamentele context, geprijsd voor runs die uitwaaieren over een dozijn agents en een mandje tickers.
- deepseek-v4-pro en qwen3.7-max zijn het waard om te benchmarken voor brede sweeps, waar het prijsverschil per run zich opstapelt over elke backtestdatum.
- Wat je ook kiest, pin het vast. Signalen van verschillende snapshots van een bewegend model zijn niet vergelijkbaar over een backtestvenster; gebruik exacte ID's en noteer de model-string naast de resultaten zoals een random seed.
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 |
| 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 |
De faalmodi specifiek voor ai-hedge-fund.
De verkeerde omgevingsvariabele. Deze repo leest OPENAI_API_BASE. OPENAI_BASE_URL, de variabele die andere tools gebruiken, wordt niet geraadpleegd, en hem instellen doet niets behalve je ervan overtuigen dat de override kapot is. Als verzoeken nog steeds api.openai.com raken, controleer dan eerst de naam van de variabele. --model met een ongeregistreerd ID. find_model_by_name() kent alleen vermeldingen in api_models.json. Geef een catalogus-ID door die niet is geregistreerd en de CLI print een not-found-bericht en valt terug op de interactieve kiezer, wat in een cronjob of CI-run een stille hang betekent, geen foutafsluiting. Registreer het ID eerst; dan resolveren scripted runs het deterministisch. Providergemarkeerde vermeldingen die de gateway omzeilen. Het kiezen van een registermodel wiens provider Anthropic, Google of DeepSeek is, routeert via de native client en sleutel van die leverancier. Als je verwachtte dat de run in je gatewaygebruikslogboek zou verschijnen en dat niet gebeurde, is de provider-kolom van het model dat je koos de verklaring. Datafouten die zich voordoen als LLM-fouten. Prijs- en fundamentele data komen van de financiële-data-API geconfigureerd door FINANCIAL_DATASETS_API_KEY, een volledig aparte service. Een ontbrekende of uitgeputte datasleutel laat de run falen voor of tussen LLM-aanroepen, en de traceback kan lezen als een modelprobleem. De twee credentials falen onafhankelijk; debug ze onafhankelijk. Interactieve prompts in automatisering. Zelfs met alles geconfigureerd opent het vergeten van de --model-flag de kiezer. Voor onbewaakte runs, geef altijd --model door met een geregistreerd ID.
Wie routeert ai-hedge-fund via een gateway.
- Backtesters die tickers en datumbereiken sweepen, waar een agentcomité per ticker per datum tokenuitgaven de dominante kost maakt en gebruik per sleutel het natuurlijke grootboek.
- Onderzoekers die modelverdicten vergelijken. Dezelfde run onder twee model-ID's is een flag-wijziging, en signaalonenigheid tussen modellen is zelf interessante data.
- Bouwers die de repo uitbreiden met nieuwe agents die één endpoint en één sleutel willen onder hoeveel persona's ze ook toevoegen.
- Developers die Claude- of DeepSeek-redenering willen binnen een repo wiens schoonste routeringspad OpenAI-gevormd is, zonder een leverancierssleutel per providervermelding te onderhouden.
- Developers zonder toegang tot de facturering van een bepaalde leverancier. Toegang op basis van opwaarderen zonder kaartvereiste verwijdert de aanmeldingsafhankelijkheid per provider.
Verifieer het endpoint en debug de eerste run.
Bevestig dat de gateway de ID's bedient die je hebt geregistreerd voordat je een run start; registermodel_name-strings moeten exact overeenkomen met bediende ID's. De faalladder van de eerste run: een 401 betekent dat OPENAI_API_KEY niet de gatewaysleutel is in de omgeving waarmee poetry daadwerkelijk is gestart. Een model-not-found-fout van de gateway betekent dat de model_name van de registervermelding een tikfout heeft ten opzichte van /v1/models. Een run die stopt om om invoer te vragen betekent dat de --model-string het register miste. Een leveranciersleutelfout (Anthropic, Google) betekent dat de provider van de geselecteerde vermelding niet OpenAI is. En een data-gevormde traceback vóór enige modeloutput wijst naar FINANCIAL_DATASETS_API_KEY, niet naar het LLM-pad. Zodra een run voltooit, toont de APIsRouter-console model per verzoek, tokenaantallen en uitgaven. Een comitérun is tientallen aanroepen over analisten-, risico- en portfoliofasen, en de gebruiksweergave is hoe je ziet wat één beslissing daadwerkelijk kost voordat je het opschaalt naar een sweep.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY" | head -50Veelgestelde vragen
Welke omgevingsvariabele stelt een aangepaste base URL in voor ai-hedge-fund?
OPENAI_API_BASE. De OpenAI-provider in src/llm/models.py bouwt ChatOpenAI met base_url=os.getenv("OPENAI_API_BASE"). OPENAI_BASE_URL wordt niet gelezen door deze repo, gebruik dus exact de API_BASE-schrijfwijze.
Kan ai-hedge-fund Claude- of DeepSeek-modellen draaien via één sleutel?
Ja, door het ID te registreren in src/llm/api_models.json met provider ingesteld op "OpenAI". Provider selecteert de client, dus een als-OpenAI-gemarkeerde vermelding routeert via ChatOpenAI en je OPENAI_API_BASE, en het catalogus-ID wordt als platte string doorgegeven aan de gateway.
Waarom zet --model me in een interactieve kiezer?
De --model-waarde wordt opgezocht met find_model_by_name() tegen api_models.json. Onbekende ID's worden niet geraden; de CLI print een not-found-bericht en opent de kiezer. Voeg een registervermelding toe voor het ID en scripted runs resolveren het zonder te vragen.
Heb ik nog steeds ANTHROPIC_API_KEY of andere leverancierssleutels nodig?
Niet voor gateway-gerouteerde modellen. Leverancierssleutels worden alleen geraadpleegd door registervermeldingen gemarkeerd met de provider van die leverancier. Als elk model dat je draait is geregistreerd onder de OpenAI-provider, is de gatewaysleutel de enige LLM-credential die de run nodig heeft.
Verandert de marktdata-instelling wanneer ik het LLM-endpoint wijzig?
Nee. Prijs- en fundamentele data stromen via de financiële-data-API geconfigureerd door FINANCIAL_DATASETS_API_KEY, wat onafhankelijk is van de LLM-base-URL. De twee credentials falen in verschillende fasen van een run, dus debug ze apart.
Hoe duur is één ai-hedge-fund-run?
Het schaalt met agents keer tickers: elke analistpersona, plus risico- en portfoliomanagement, redeneert per ticker. Runs met één mandje landen doorgaans in de tienduizenden tot honderdduizenden tokens, en backtest-sweeps vermenigvuldigen dat met het datumraster. De gebruiksweergave per sleutel geeft het exacte cijfer per run.