Draai FinRobot op een aangepast OpenAI-compatibel endpoint.

Updated 2026-07-30

FinRobot leest zijn LLM-credentials uit een AutoGen OAI_CONFIG_LIST-bestand wier vermeldingen een base_url-sleutel accepteren. Voeg één vermelding toe die naar https://api.apisrouter.com/v1 wijst met een gatewaysleutel, en de forecaster-, rapportschrijver- en RAG-agents kunnen draaien op elk model-ID in de catalogus.

Snel antwoord: één vermelding in OAI_CONFIG_LIST.

De setup-instructies van FinRobot laten je OAI_CONFIG_LIST_sample hernoemen naar OAI_CONFIG_LIST en credentials invullen. Dat bestand is een standaard AutoGen-configlijst: een JSON-array waarbij elke vermelding model en api_key neemt, en optioneel base_url, wat het meegeleverde voorbeeld al demonstreert voor niet-standaard endpoints. Voeg een vermelding toe met je gatewaysleutel en base_url ingesteld op https://api.apisrouter.com/v1, en elke FinRobot-agent die het bestand laadt kan er via routeren. Eén addertje dat mensen tijd kost: de tutorials laden het bestand via autogen.config_list_from_json met een filter_dict dat vermeldingen selecteert op modelnaam. Als je nieuwe vermelding claude-sonnet-4-6 zegt maar het filter nog steeds vraagt om het GPT-ID van het voorbeeld, wordt je vermelding uitgefilterd en faalt de run op de oude credentials. Werk filter_dict bij om te matchen met het model dat je hebt toegevoegd, of laat het filter tijdens het testen weg.

[
    {
        "model": "claude-sonnet-4-6",
        "api_key": "sk-YOUR-APISROUTER-KEY",
        "base_url": "https://api.apisrouter.com/v1"
    }
]

Hoe FinRobot zijn LLM-config gebruikt.

FinRobot (AI4Finance-Foundation op GitHub, ongeveer 7,6K sterren) is een AI-agentplatform voor financiële analyse gebouwd op AutoGen (pyautogen 0.2.19 of nieuwer). Zijn agents zijn verpakte workflows: een Market_Analyst-forecaster die bedrijfsnieuws en fundamentals ophaalt en de beweging van volgende week voorspelt, een jaarverslagschrijver die filings omzet in een aandelenonderzoeks-PDF, en retrieval-augmented QA-agents over earnings calls en SEC-filings. Elke tutorial bouwt dezelfde llm_config-vorm: een dict wiens config_list komt uit autogen.config_list_from_json dat het bestand OAI_CONFIG_LIST leest. Die llm_config wordt doorgegeven aan wrapperklassen zoals SingleAssistant en SingleAssistantShadow uit finrobot.agents.workflow, die de onderliggende AutoGen-agents bezitten. De endpointbeslissing leeft dus volledig in het JSON-bestand: de OpenAI-client van AutoGen stuurt /v1/chat/completions-verzoeken naar welke base_url de geselecteerde vermelding ook draagt en geeft het model-veld door als platte string. Die platte string is de praktische winst. Wanneer het endpoint achter base_url meerdere leveranciers bedient, rijdt een Claude-, DeepSeek- of Qwen-ID mee door dezelfde OpenAI-gevormde config zonder dat FinRobot het merkt, en wordt het wisselen van het analysemodel een JSON-bewerking van één regel plus een matchende filter_dict.

Volledige instelling: configbestand, filter en datasleutels.

FinRobot splitst credentials over twee bestanden, en slechts één daarvan gaat over de LLM. OAI_CONFIG_LIST bevat modelendpoints en sleutels. config_api_keys bevat marktdatacredentials (FINNHUB_API_KEY, FMP_API_KEY, SEC_API_KEY, en sociale sleutels), geladen apart via register_keys_from_json. Het routeren van de LLM via een gateway wijzigt het eerste bestand en laat het tweede ongemoeid, dus nieuwspulls, fundamentals en filings gedragen zich precies zoals voorheen. Het onderstaande tutorialpatroon is de structuur van de forecaster-notebook met de gatewayvermelding geselecteerd. Dezelfde llm_config werkt voor de jaarverslag- en RAG-tutorials, die alleen verschillen in welke workflowklasse ze instantiëren.

import autogen
from finrobot.utils import register_keys_from_json
from finrobot.agents.workflow import SingleAssistant

llm_config = {
    "config_list": autogen.config_list_from_json(
        "../OAI_CONFIG_LIST",
        filter_dict={"model": ["claude-sonnet-4-6"]},  # match your entry
    ),
    "timeout": 120,
    "temperature": 0,
}

register_keys_from_json("../config_api_keys")  # finnhub/fmp/sec data keys

assistant = SingleAssistant("Market_Analyst", llm_config,
                            human_input_mode="NEVER")
assistant.chat("Analyze NVDA news this week and predict next week's movement.")

Modellen kiezen per FinRobot-workflow.

De schone experimentlus: zet de ticker en datumreeks vast, draai dezelfde workflow eenmaal per kandidaatvermelding, en vergelijk outputs naast elkaar. Achter één endpoint is elke kandidaat een filter_dict-bewerking, en het gebruikslogboek per sleutel geeft je de tokenrekening per kandidaat zonder spreadsheetwerk.

  • De jaarverslagschrijver is de zwaarste redeneertaak: hij leest filingsecties, synthetiseert een investeringsthesis, en stelt een gestructureerd rapport op. claude-opus-4-7 of gpt-5.5 in die workflow is waar outputkwaliteit zichtbaar verandert.
  • De marktforecaster is een kortere, herhaalde taak over nieuws en fundamentals. claude-sonnet-4-6 of deepseek-v4-pro handelt het goed af, en doet ertoe wanneer je het dagelijks draait over een watchlist.
  • RAG-QA over earnings calls is retrieval plus synthese over lange uittreksels, wat langecontext-ID's bevoordeelt; gemini-3.1-pro-preview is het waard om daar te testen tegen claude-sonnet-4-6.
  • Omdat vermeldingen worden geselecteerd via filter_dict, kun je één bestand bewaren met een frontier-vermelding en een snelle vermelding tegen dezelfde base_url en per notebook kiezen, in plaats van credentials per run te bewerken.
  • Model-ID's zijn exacte strings. FinRobot geeft ze ongevalideerd door, dus de /v1/models-lijst van het endpoint is de gezaghebbende schrijfwijze.

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.

ModelOfficiële prijsOnze 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.4$2.50 / $15.00 per M$2.00 / $12.00 per M
DeepSeek V4 Pro$0.43 / $0.87 per M$0.40 / $0.90 per M
Gemini 3.1 Pro Preview$2.00 / $12.00 per M$1.60 / $9.60 per M

Faalmodi specifiek voor FinRobot.

De filter_dict-mismatch is de grote. config_list_from_json retourneert alleen vermeldingen wier model overeenkomt met het filter; een filter dat niets matcht gooit een fout over een lege configlijst, en een filter dat de overgebleven vermeldingen van het voorbeeld matcht, stuurt verzoeken naar OpenAI met placeholder-sleutels, wat zich uit als een 401 van de verkeerde host. Wanneer routeringswijzigingen niet lijken door te werken, print eerst de gerezolveerde config_list. Relatieve paden zijn de tweede. De tutorials laden "../OAI_CONFIG_LIST" omdat notebooks één niveau onder de repo-root zitten; een script in de root wil in plaats daarvan "OAI_CONFIG_LIST", en AutoGen accepteert ook de omgevingsvariabele OAI_CONFIG_LIST die de JSON-string draagt, wat padproblemen in containers omzeilt. Commentaarregels zijn de derde. De setup-instructies zeggen je de commentaarnotities uit de voorbeeldbestanden te verwijderen omdat ze de JSON ongeldig maken; een JSONDecodeError bij opstarten betekent dat er een verdwaald commentaar is overgebleven. Datacredentials falen onafhankelijk. Als de agent prima chat maar nieuws of fundamentals leeg terugkomen, is dat een config_api_keys-probleem (Finnhub, FMP, SEC), geen endpointprobleem. En de aparte FinRobot Pro-aandelenmodule configureert zijn sleutels via een config.ini in plaats daarvan; vanaf juli 2026 dekken de gedocumenteerde instellingen een openai_api_key maar geen base-URL-override, dus behandel die module als direct-vendor totdat upstream er een documenteert.

Wie routeert FinRobot via een gateway.

  • Analisten die aandelenrapporten genereren over een dekkingslijst. Lange filingcontexten per rapport maken prijsverschillen per model materieel, en één endpoint maakt het model een keuze per run.
  • Quantteams die de forecaster dagelijks draaien over een watchlist, waar een snel mid-tier-ID de terugkerende rekening vlak houdt zonder de workflow te herschrijven.
  • Onderzoekers die modelfamilies vergelijken op identieke financiële taken. Elke kandidaat is één configvermelding, geen leveranciersaccount en SDK-wissel.
  • Teams die AutoGen-gebaseerde stacks standaardiseren. FinRobot deelt de OAI_CONFIG_LIST-conventie met andere AutoGen-projecten, dus één gatewayvermeldingsformaat bedient ze allemaal.
  • 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.

Lijst de modellen op die je sleutel kan aanspreken voordat je een notebook opent; elke model-string in OAI_CONFIG_LIST en elke filter_dict-waarde moet exact overeenkomen met een bediend ID. Draai dan de kortst mogelijke chat via SingleAssistant en kijk naar de console. Een 401 betekent dat de api_key van de geselecteerde vermelding niet bij het endpoint in zijn base_url hoort; controleer welke vermelding het filter daadwerkelijk koos. Een model-not-found-fout is een tikfout in het ID van de vermelding. Een verbindingsfout betekent meestal dat base_url zijn /v1-achtervoegsel kwijt is. Als de agent lust zonder toolresultaten, zijn de datasleutels in config_api_keys de verdachten, niet het LLM-endpoint. Zodra verzoeken stromen, toont de APIsRouter-console model per verzoek, tokenaantallen en uitgaven. Rapportschrijfruns zijn lange multi-turn-gesprekken, en de gebruiksweergave toont wat één rapport daadwerkelijk kost voordat je er vijftig plant.

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

Veelgestelde vragen

Ondersteunt FinRobot een aangepast OpenAI-compatibel endpoint?

Ja. FinRobot leest AutoGen-stijl OAI_CONFIG_LIST-vermeldingen, en vermeldingen accepteren een base_url-sleutel naast model en api_key. Wijs base_url naar de gateway, houd je filter_dict matchend met het model van de vermelding, en de agents routeren erdoorheen.

Kunnen FinRobot-agents draaien op Claude-, DeepSeek- of Qwen-modellen?

Ja. AutoGen geeft het model-veld door als platte string over /v1/chat/completions, dus elk ID dat het endpoint bedient werkt. De modelnaam in de vermelding en in filter_dict hoeft alleen exact overeen te komen met het catalogus-ID.

Waarom negeert FinRobot mijn nieuwe OAI_CONFIG_LIST-vermelding?

Bijna altijd de filter_dict. De tutorials filteren vermeldingen op modelnaam, dus een vermelding wier model niet overeenkomt met het filter wordt stilletjes uitgesloten. Werk filter_dict bij naar je nieuwe model-ID, of laad het bestand zonder filter tijdens het testen.

Veranderen mijn Finnhub-, FMP- en SEC-sleutels wanneer ik het LLM-endpoint wijzig?

Nee. Marktdatacredentials leven in config_api_keys en laden via register_keys_from_json, volledig gescheiden van OAI_CONFIG_LIST. Het routeren van de LLM via een gateway raakt de datapijplijn niet.

Op welke AutoGen-versie is dit van toepassing?

FinRobot pint pyautogen 0.2.19 of nieuwer en gebruikt de 0.2-stijl config_list_from_json-loader. De base_url-sleutel in configvermeldingen is standaard over die generatie, dus zijn geen FinRobot-codewijzigingen nodig.

Eerbiedigt de FinRobot Pro-aandelenmodule ook base_url?

Niet zoals gedocumenteerd. Zijn config.ini stelt een openai_api_key bloot onder API_KEYS maar geen endpointoverride vanaf juli 2026. De hier beschreven OAI_CONFIG_LIST-routering geldt voor de belangrijkste FinRobot-agents en -tutorials.