Faites tourner FinRobot sur un endpoint compatible OpenAI personnalisé.
Updated 2026-07-30
FinRobot lit ses identifiants LLM depuis un fichier AutoGen OAI_CONFIG_LIST dont les entrées acceptent une clé base_url. Ajoutez une entrée pointant vers https://api.apisrouter.com/v1 avec une clé de passerelle, et les agents forecaster, report-writer et RAG peuvent tourner sur n'importe quel id de modèle du catalogue.
Réponse rapide : une entrée dans OAI_CONFIG_LIST.
Les instructions de configuration de FinRobot vous font renommer OAI_CONFIG_LIST_sample en OAI_CONFIG_LIST et remplir les identifiants. Ce fichier est une liste de config AutoGen standard : un tableau JSON où chaque entrée prend model et api_key, et optionnellement base_url, que l'exemple fourni démontre déjà pour des endpoints non par défaut. Ajoutez une entrée avec votre clé de passerelle et base_url réglé sur https://api.apisrouter.com/v1, et chaque agent FinRobot qui charge le fichier peut router via elle. Un piège qui coûte du temps aux gens : les tutoriels chargent le fichier via autogen.config_list_from_json avec un filter_dict qui sélectionne les entrées par nom de modèle. Si votre nouvelle entrée dit claude-sonnet-4-6 mais que le filtre demande toujours l'id GPT de l'exemple, votre entrée est filtrée et l'exécution échoue sur les anciens identifiants. Mettez à jour le filter_dict pour correspondre au modèle que vous avez ajouté, ou retirez le filtre pendant les tests.
[
{
"model": "claude-sonnet-4-6",
"api_key": "sk-YOUR-APISROUTER-KEY",
"base_url": "https://api.apisrouter.com/v1"
}
]Comment FinRobot utilise sa config LLM.
FinRobot (AI4Finance-Foundation sur GitHub, environ 7 600 étoiles) est une plateforme d'agents IA pour l'analyse financière construite sur AutoGen (pyautogen 0.2.19 ou plus récent). Ses agents sont des workflows packagés : un forecaster Market_Analyst qui récupère les actualités et fondamentaux d'une entreprise et prédit le mouvement de la semaine suivante, un rédacteur de rapport annuel qui transforme des dépôts en PDF de recherche actions, et des agents de QA à récupération augmentée sur les résultats trimestriels et dépôts SEC. Chaque tutoriel construit la même forme de llm_config : un dict dont config_list vient de autogen.config_list_from_json lisant le fichier OAI_CONFIG_LIST. Ce llm_config est remis à des classes wrapper comme SingleAssistant et SingleAssistantShadow de finrobot.agents.workflow, qui possèdent les agents AutoGen sous-jacents. La décision d'endpoint vit donc entièrement dans le fichier JSON : le client OpenAI d'AutoGen envoie des requêtes /v1/chat/completions vers quel que soit le base_url que porte l'entrée sélectionnée et transmet le champ model comme une simple chaîne. Cette simple chaîne est le gain pratique. Quand l'endpoint derrière base_url sert plusieurs fournisseurs, un id Claude, DeepSeek ou Qwen circule via la même config à forme OpenAI sans que FinRobot ne le remarque, et changer le modèle d'analyse devient une modification JSON d'une ligne plus un filter_dict correspondant.
Configuration complète : fichier de config, filtre et clés de données.
FinRobot répartit les identifiants sur deux fichiers, et un seul concerne le LLM. OAI_CONFIG_LIST détient les endpoints et clés de modèle. config_api_keys détient les identifiants de données de marché (FINNHUB_API_KEY, FMP_API_KEY, SEC_API_KEY, et des clés sociales), chargés séparément via register_keys_from_json. Router le LLM via une passerelle change le premier fichier et laisse le second intact, donc les récupérations d'actualités, les fondamentaux et les dépôts se comportent exactement comme avant. Le motif de tutoriel ci-dessous est la structure du notebook forecaster avec l'entrée de passerelle sélectionnée. Le même llm_config fonctionne pour les tutoriels de rapport annuel et RAG, qui diffèrent seulement par la classe de workflow qu'ils instancient.
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.")Choisir des modèles par workflow FinRobot.
La boucle d'expérimentation propre : fixez la valeur et la plage de dates, faites tourner le même workflow une fois par entrée candidate, et comparez les sorties côte à côte. Derrière un seul endpoint, chaque candidat n'est qu'une modification de filter_dict, et le journal d'usage par clé vous donne la facture de tokens par candidat sans travail de tableur.
- Le rédacteur de rapport annuel est le travail de raisonnement le plus lourd : il lit des sections de dépôt, synthétise une thèse d'investissement, et rédige un rapport structuré. claude-opus-4-7 ou gpt-5.5 dans ce workflow est là où la qualité de sortie change visiblement.
- Le forecaster de marché est une tâche plus courte et répétée sur les actualités et fondamentaux. claude-sonnet-4-6 ou deepseek-v4-pro le gère bien, et compte quand vous le faites tourner sur une watchlist quotidiennement.
- Le QA RAG sur les résultats trimestriels est de la récupération plus synthèse sur de longs extraits, ce qui favorise les ids à long contexte ; gemini-3.1-pro-preview vaut la peine d'être testé contre claude-sonnet-4-6 là.
- Comme les entrées sont sélectionnées par filter_dict, vous pouvez garder un seul fichier avec une entrée de pointe et une entrée rapide contre le même base_url et choisir par notebook, plutôt que d'éditer les identifiants à chaque exécution.
- Les ids de modèle sont des chaînes exactes. FinRobot les transmet sans validation, donc le listing /v1/models de l'endpoint fait autorité sur l'orthographe.
Paiement à l'usage · en dessous du tarif officiel
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Modèle | Prix officiel | Notre prix |
|---|---|---|
| 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 |
Modes d'échec spécifiques à FinRobot.
La discordance de filter_dict est le gros morceau. config_list_from_json ne renvoie que les entrées dont le model correspond au filtre ; un filtre qui ne correspond à rien lève une erreur à propos d'une config_list vide, et un filtre qui correspond aux entrées restantes de l'exemple envoie des requêtes à OpenAI avec des clés d'espace réservé, ce qui se manifeste par un 401 depuis le mauvais hôte. Quand les changements de routage ne semblent pas prendre effet, affichez d'abord la config_list résolue. Les chemins relatifs sont le deuxième. Les tutoriels chargent "../OAI_CONFIG_LIST" parce que les notebooks se trouvent un niveau sous la racine du dépôt ; un script à la racine veut "OAI_CONFIG_LIST" à la place, et AutoGen accepte aussi la variable d'environnement OAI_CONFIG_LIST portant la chaîne JSON, ce qui contourne les problèmes de chemin dans les conteneurs. Les lignes de commentaire sont le troisième. Les instructions de configuration vous disent de retirer les notes de commentaire des fichiers exemples parce qu'elles rendent le JSON invalide ; un JSONDecodeError au démarrage signifie qu'un commentaire égaré a survécu. Les identifiants de données échouent indépendamment. Si l'agent discute bien mais que les actualités ou fondamentaux reviennent vides, c'est un problème de config_api_keys (Finnhub, FMP, SEC), pas un problème d'endpoint. Et le module actions FinRobot Pro séparé configure plutôt ses clés via un config.ini ; en date de juillet 2026, ses réglages documentés couvrent un openai_api_key mais aucune surcharge d'URL de base, donc considérez ce module comme direct-fournisseur jusqu'à ce que l'amont en documente une.
Qui route FinRobot via une passerelle.
- Les analystes qui génèrent des rapports actions sur une liste de couverture. Les longs contextes de dépôt par rapport rendent les différences de prix par modèle significatives, et un seul endpoint fait du modèle un choix par exécution.
- Les équipes quant qui font tourner le forecaster quotidiennement sur une watchlist, où un id rapide de niveau intermédiaire maintient la facture récurrente stable sans réécrire le workflow.
- Les chercheurs qui comparent des familles de modèles sur des tâches financières identiques. Chaque candidat n'est qu'une entrée de config, pas un compte fournisseur et un changement de SDK.
- Les équipes qui standardisent des piles basées sur AutoGen. FinRobot partage la convention OAI_CONFIG_LIST avec d'autres projets AutoGen, donc un seul format d'entrée de passerelle les sert tous.
- Les développeurs sans accès à la facturation d'un fournisseur donné. Un accès basé sur la recharge, sans exigence de carte, supprime la dépendance à une inscription par fournisseur.
Vérifiez l'endpoint et déboguez la première exécution.
Listez les modèles que votre clé peut adresser avant d'ouvrir un notebook ; chaque chaîne de modèle dans OAI_CONFIG_LIST et chaque valeur de filter_dict doit correspondre exactement à un id servi. Faites ensuite tourner le chat le plus court possible via SingleAssistant et observez la console. Un 401 signifie que l'api_key de l'entrée sélectionnée n'appartient pas à l'endpoint de son base_url ; vérifiez quelle entrée le filtre a réellement choisie. Une erreur model-not-found est une faute de frappe dans l'id de l'entrée. Une erreur de connexion signifie généralement que base_url a perdu son suffixe /v1. Si l'agent boucle sans résultats d'outils, les clés de données dans config_api_keys sont les suspectes, pas l'endpoint LLM. Une fois que les requêtes circulent, la console APIsRouter affiche le modèle par requête, le nombre de tokens et la dépense. Les exécutions de rédaction de rapport sont de longues conversations multi-tours, et la vue d'usage montre ce que coûte réellement un rapport avant d'en planifier cinquante.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Questions fréquentes
FinRobot prend-il en charge un endpoint compatible OpenAI personnalisé ?
Oui. FinRobot lit des entrées OAI_CONFIG_LIST de style AutoGen, et les entrées acceptent une clé base_url aux côtés de model et api_key. Pointez base_url vers la passerelle, gardez votre filter_dict correspondant au model de l'entrée, et les agents routent via elle.
Les agents FinRobot peuvent-ils tourner sur des modèles Claude, DeepSeek ou Qwen ?
Oui. AutoGen transmet le champ model comme une simple chaîne sur /v1/chat/completions, donc tout id que sert l'endpoint fonctionne. Le nom de modèle dans l'entrée et dans filter_dict doit juste correspondre exactement à l'id du catalogue.
Pourquoi FinRobot ignore-t-il ma nouvelle entrée OAI_CONFIG_LIST ?
Presque toujours le filter_dict. Les tutoriels filtrent les entrées par nom de modèle, donc une entrée dont le model ne correspond pas au filtre est exclue silencieusement. Mettez à jour filter_dict avec votre nouvel id de modèle, ou chargez le fichier sans filtre pendant les tests.
Mes clés Finnhub, FMP et SEC changent-elles quand je change l'endpoint LLM ?
Non. Les identifiants de données de marché vivent dans config_api_keys et se chargent via register_keys_from_json, entièrement séparés de OAI_CONFIG_LIST. Router le LLM via une passerelle ne touche pas au pipeline de données.
À quelle version d'AutoGen cela s'applique-t-il ?
FinRobot fige pyautogen à 0.2.19 ou plus récent et utilise le chargeur config_list_from_json de style 0.2. La clé base_url dans les entrées de config est standard sur toute cette génération, donc aucun changement de code FinRobot n'est nécessaire.
Le module actions FinRobot Pro respecte-t-il aussi base_url ?
Pas selon la documentation. Son config.ini expose un openai_api_key sous API_KEYS mais aucune surcharge d'endpoint en date de juillet 2026. Le routage OAI_CONFIG_LIST décrit ici s'applique aux agents et tutoriels FinRobot principaux.