FinRobot auf einem custom OpenAI-kompatiblen Endpoint betreiben.
Updated 2026-07-30
FinRobot liest seine LLM-Credentials aus einer AutoGen-OAI_CONFIG_LIST-Datei, deren Einträge einen base_url-Key akzeptieren. Füg einen Eintrag hinzu, der auf https://api.apisrouter.com/v1 mit einem Gateway-Key zeigt, und der Forecaster, der Report-Writer und die RAG-Agenten können auf jeder Modell-ID im Katalog laufen.
Kurzantwort: ein Eintrag in OAI_CONFIG_LIST.
FinRobots Setup-Anleitung lässt dich OAI_CONFIG_LIST_sample zu OAI_CONFIG_LIST umbenennen und Credentials eintragen. Diese Datei ist eine Standard-AutoGen-Config-Liste: ein JSON-Array, in dem jeder Eintrag model und api_key nimmt, und optional base_url, was die mitgelieferte Sample-Datei schon für Nicht-Standard-Endpoints demonstriert. Füg einen Eintrag mit deinem Gateway-Key hinzu und setz base_url auf https://api.apisrouter.com/v1, und jeder FinRobot-Agent, der die Datei lädt, kann darüber routen. Eine Falle, die Leute Zeit kostet: die Tutorials laden die Datei über autogen.config_list_from_json mit einem filter_dict, das Einträge nach Modellname wählt. Sagt dein neuer Eintrag claude-sonnet-4-6, der Filter fragt aber noch nach der GPT-ID des Samples, wird dein Eintrag rausgefiltert, und der Run scheitert an den alten Credentials. Aktualisier filter_dict auf das Modell, das du hinzugefügt hast, oder lass den Filter beim Testen weg.
[
{
"model": "claude-sonnet-4-6",
"api_key": "sk-YOUR-APISROUTER-KEY",
"base_url": "https://api.apisrouter.com/v1"
}
]Wie FinRobot seine LLM-Config nutzt.
FinRobot (AI4Finance-Foundation auf GitHub, rund 7.600 Stars) ist eine KI-Agenten-Plattform für Finanzanalyse, gebaut auf AutoGen (pyautogen 0.2.19 oder neuer). Seine Agenten sind verpackte Workflows: ein Market_Analyst-Forecaster, der Unternehmensnews und Fundamentaldaten zieht und die Bewegung der nächsten Woche vorhersagt, ein Annual-Report-Writer, der Filings in ein Equity-Research-PDF verwandelt, und Retrieval-Augmented-QA-Agenten über Earnings Calls und SEC-Filings. Jedes Tutorial baut dieselbe llm_config-Form: ein Dict, dessen config_list von autogen.config_list_from_json kommt, das die OAI_CONFIG_LIST-Datei liest. Dieses llm_config wird Wrapper-Klassen wie SingleAssistant und SingleAssistantShadow aus finrobot.agents.workflow übergeben, die die zugrundeliegenden AutoGen-Agenten besitzen. Die Endpoint-Entscheidung lebt also komplett in der JSON-Datei: AutoGens OpenAI-Client sendet /v1/chat/completions-Requests an die base_url des gewählten Eintrags und reicht das model-Feld als reinen String weiter. Dieser reine String ist der praktische Gewinn. Bedient der Endpoint hinter base_url mehrere Vendoren, reist eine Claude-, DeepSeek- oder Qwen-ID unbemerkt durch dieselbe OpenAI-förmige Config, und das Analyse-Modell zu wechseln wird zu einer Ein-Zeilen-JSON-Bearbeitung plus einem passenden filter_dict.
Vollständiges Setup: Config-Datei, Filter und Daten-Keys.
FinRobot splittet Credentials über zwei Dateien, und nur eine davon betrifft das LLM. OAI_CONFIG_LIST hält Modell-Endpoints und Keys. config_api_keys hält Marktdaten-Credentials (FINNHUB_API_KEY, FMP_API_KEY, SEC_API_KEY und Social-Keys), separat geladen über register_keys_from_json. Das LLM über ein Gateway zu routen ändert die erste Datei und lässt die zweite unangetastet, News-Abrufe, Fundamentaldaten und Filings verhalten sich also exakt wie zuvor. Das Tutorial-Muster unten ist die Struktur des Forecaster-Notebooks mit dem Gateway-Eintrag gewählt. Dieselbe llm_config funktioniert für die Annual-Report- und RAG-Tutorials, die sich nur darin unterscheiden, welche Workflow-Klasse sie instanziieren.
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.")Modelle pro FinRobot-Workflow wählen.
Die saubere Experiment-Schleife: Ticker und Datumsbereich festhalten, denselben Workflow einmal pro Kandidaten-Eintrag laufen lassen und Outputs nebeneinander vergleichen. Hinter einem Endpoint ist jeder Kandidat eine filter_dict-Bearbeitung, und das Nutzungslog pro Key gibt dir die Token-Rechnung pro Kandidat ohne Tabellenkalkulations-Arbeit.
- Der Annual-Report-Writer ist der schwerste Reasoning-Job: er liest Filing-Abschnitte, synthetisiert eine Investment-These und entwirft einen strukturierten Report. claude-opus-4-7 oder gpt-5.5 in diesem Workflow ist, wo sich die Output-Qualität sichtbar ändert.
- Der Market-Forecaster ist eine kürzere, wiederholte Aufgabe über News und Fundamentaldaten. claude-sonnet-4-6 oder deepseek-v4-pro erledigt das gut, und es zählt, wenn du es täglich über eine Watchlist laufen lässt.
- RAG-QA über Earnings Calls ist Retrieval plus Synthese über lange Auszüge, was Long-Context-IDs begünstigt; gemini-3.1-pro-preview lohnt dort einen Test gegen claude-sonnet-4-6.
- Weil Einträge über filter_dict gewählt werden, kannst du eine Datei mit einem Frontier-Eintrag und einem schnellen Eintrag gegen dieselbe base_url halten und pro Notebook wählen, statt Credentials pro Run zu bearbeiten.
- Modell-IDs sind exakte Strings. FinRobot reicht sie unvalidiert durch, die /v1/models-Liste des Endpoints ist also die maßgebliche Schreibweise.
Nutzungsbasiert · unter offiziellem Preis
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Modell | Offizieller Preis | Unser Preis |
|---|---|---|
| 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 |
Fehlerbilder speziell für FinRobot.
Der filter_dict-Mismatch ist der große. config_list_from_json gibt nur Einträge zurück, deren model zum Filter passt; ein Filter, der auf nichts passt, wirft einen Fehler über eine leere Config-Liste, und ein Filter, der auf die übrig gebliebenen Sample-Einträge passt, schickt Requests mit Platzhalter-Keys an OpenAI, was sich als 401 vom falschen Host zeigt. Scheinen Routing-Änderungen keine Wirkung zu zeigen, druck zuerst die aufgelöste config_list. Relative Pfade sind der zweite. Die Tutorials laden "../OAI_CONFIG_LIST", weil Notebooks eine Ebene unter dem Repo-Root sitzen; ein Skript am Root will stattdessen "OAI_CONFIG_LIST", und AutoGen akzeptiert auch die Umgebungsvariable OAI_CONFIG_LIST mit dem JSON-String, was Pfadprobleme in Containern umgeht. Kommentarzeilen sind der dritte. Die Setup-Anleitung sagt dir, die Kommentarnotizen aus den Sample-Dateien zu entfernen, weil sie das JSON ungültig machen; ein JSONDecodeError beim Start bedeutet, ein vagabundierender Kommentar hat überlebt. Daten-Credentials scheitern unabhängig. Chattet der Agent problemlos, kommen News oder Fundamentaldaten aber leer zurück, ist das ein config_api_keys-Problem (Finnhub, FMP, SEC), kein Endpoint-Problem. Und das separate FinRobot-Pro-Equity-Modul konfiguriert seine Keys über eine config.ini stattdessen; Stand Juli 2026 decken seine dokumentierten Einstellungen einen openai_api_key ab, aber keinen Base-URL-Override, behandle dieses Modul also als direkten Vendor-Zugang, bis Upstream einen dokumentiert.
Wer FinRobot über ein Gateway routet.
- Analysten, die Equity-Reports über eine Coverage-Liste generieren. Lange Filing-Kontexte pro Report machen Preisunterschiede pro Modell relevant, und ein Endpoint macht das Modell zu einer Wahl pro Run.
- Quant-Teams, die den Forecaster täglich über eine Watchlist laufen lassen, wo eine schnelle Mid-Tier-ID die wiederkehrende Rechnung flach hält, ohne den Workflow umzuschreiben.
- Forscher, die Modellfamilien an identischen Finanzaufgaben vergleichen. Jeder Kandidat ist ein Config-Eintrag, kein Vendor-Konto- und SDK-Wechsel.
- Teams, die AutoGen-basierte Stacks standardisieren. FinRobot teilt die OAI_CONFIG_LIST-Konvention mit anderen AutoGen-Projekten, ein Gateway-Eintragsformat bedient also alle.
- Entwickler ohne Zugang zum Billing eines bestimmten Vendors. Guthabenbasierter Zugang ohne Kartenpflicht entfernt die Sign-up-Abhängigkeit pro Provider.
Endpoint verifizieren und den ersten Run debuggen.
Liste die Modelle, die dein Key adressieren kann, bevor du ein Notebook öffnest; jeder model-String in OAI_CONFIG_LIST und jeder filter_dict-Wert muss exakt zu einer bedienten ID passen. Lauf dann den kürzestmöglichen Chat über SingleAssistant und beobachte die Konsole. Ein 401 bedeutet, der api_key des gewählten Eintrags gehört nicht zum Endpoint in seiner base_url; prüfe, welchen Eintrag der Filter tatsächlich gewählt hat. Ein Model-not-found-Fehler ist ein ID-Tippfehler im Eintrag. Ein Connection-Fehler bedeutet meist, base_url hat sein /v1-Suffix verloren. Loopt der Agent ohne Tool-Ergebnisse, sind die Daten-Keys in config_api_keys die Verdächtigen, nicht der LLM-Endpoint. Sobald Requests fließen, zeigt die APIsRouter-Konsole Modell, Token-Zahlen und Ausgaben pro Anfrage. Report-Writing-Runs sind lange Multi-Turn-Konversationen, und die Nutzungsansicht zeigt, was ein Report tatsächlich kostet, bevor du fünfzig davon einplanst.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Häufige Fragen
Unterstützt FinRobot einen custom OpenAI-kompatiblen Endpoint?
Ja. FinRobot liest AutoGen-förmige OAI_CONFIG_LIST-Einträge, und Einträge akzeptieren einen base_url-Key neben model und api_key. Zeig base_url auf das Gateway, halt dein filter_dict passend zum model des Eintrags, und die Agenten routen darüber.
Können FinRobot-Agenten auf Claude-, DeepSeek- oder Qwen-Modellen laufen?
Ja. AutoGen reicht das model-Feld als reinen String über /v1/chat/completions weiter, jede vom Endpoint bediente ID funktioniert also. Der Modellname im Eintrag und in filter_dict muss nur exakt zur Katalog-ID passen.
Warum ignoriert FinRobot meinen neuen OAI_CONFIG_LIST-Eintrag?
Fast immer das filter_dict. Die Tutorials filtern Einträge nach Modellname, ein Eintrag, dessen model nicht zum Filter passt, wird also still ausgeschlossen. Aktualisier filter_dict auf deine neue Modell-ID, oder lade die Datei beim Testen ohne Filter.
Ändern sich meine Finnhub-, FMP- und SEC-Keys, wenn ich den LLM-Endpoint ändere?
Nein. Marktdaten-Credentials leben in config_api_keys und laden über register_keys_from_json, komplett getrennt von OAI_CONFIG_LIST. Das LLM über ein Gateway zu routen berührt die Datenpipeline nicht.
Für welche AutoGen-Version gilt das?
FinRobot pinnt pyautogen 0.2.19 oder neuer und nutzt den 0.2-Stil-config_list_from_json-Loader. Der base_url-Key in Config-Einträgen ist über diese Generation hinweg Standard, es sind also keine FinRobot-Code-Änderungen nötig.
Respektiert auch das FinRobot-Pro-Equity-Modul base_url?
Nicht laut Dokumentation. Seine config.ini exponiert einen openai_api_key unter API_KEYS, aber keinen Endpoint-Override, Stand Juli 2026. Das hier beschriebene OAI_CONFIG_LIST-Routing gilt für die Haupt-FinRobot-Agenten und -Tutorials.