Configuration d'API personnalisée pour ai-hedge-fund
Updated 2026-09-05
La sélection du fournisseur précède la configuration de l'endpoint. Suivez la fabrique et le registre de modèles actuels, puis validez les données, la sortie de l'agent et l'évaluation comme des étapes distinctes.
Identifiez le chemin applicatif actuel
Pour l'application ai-hedge-fund actuelle, confirmez le fournisseur du registre du modèle avant de définir OPENAI_API_BASE. À la révision fc1bf250, la fabrique client se trouve dans hedge_fund/llm/client.py et lit un registre voisin. Les anciens tutoriels qui ne font référence qu'à src/llm/models.py décrivent un autre chemin applicatif. Figez votre checkout et utilisez le point d'entrée qui importe la fabrique actuelle. Commencez par le contrôle préalable du fournisseur ci-dessous, puis exercez le client du projet avant de collecter les données financières nécessaires à un cycle de recherche complet.
Résolvez le fournisseur avant de définir l'URL de base
make_llm sélectionne un fournisseur à partir de l'identifiant de modèle choisi. Sa branche OpenAI transmet OPENAI_API_BASE à ChatOpenAI et lit la clé API correspondante. Un identifiant inconnu revient au transport Anthropic dans la source examinée ; exporter simplement une URL de base OpenAI ne suffit donc pas. Confirmez d'abord que l'ID exact du modèle de l'endpoint est enregistré sous OpenAI. Ici, OpenAI identifie l'adaptateur de transport ; cela ne certifie pas le fournisseur du modèle sous-jacent. Ne modifiez pas une entrée de registre globale sans comprendre tous les workflows qui la consomment.
| Paramètre | Objectif | Contrôle |
|---|---|---|
| HEDGE_FUND_LLM_MODEL | Sélectionner l'ID exact du modèle | Le registre résout le fournisseur prévu |
| OPENAI_API_BASE | Remplacer l'endpoint du transport OpenAI | S'applique à la branche OpenAI |
| OPENAI_API_KEY | Authentifier ce transport | Disponible pour le processus client |
| api_models.json | Associer les IDs de modèles aux fournisseurs | Le chemin actuel est hedge_fund/llm/ |
Inspectez une configuration sans envoyer de requête
L'exemple ci-dessous échoue avant la construction du client si le registre local sélectionne un autre transport. Définissez RESEARCH_MODEL_ID sur un ID de catalogue dont vous avez vérifié l'enregistrement dans l'application. S'il est absent, ajoutez volontairement une ligne de registre locale en utilisant les champs existants display_name, model_name et provider, tout en conservant les autres entrées. Le placeholder ne constitue pas une affirmation de prise en charge du modèle. Fournissez la clé via votre environnement ou votre magasin de secrets. Ce contrôle préalable vérifie uniquement la sélection ; il ne peut pas établir l'accès réseau, les droits du compte, la sortie structurée ou la qualité de la recherche.
import os
from hedge_fund.llm.registry import provider_for
model = os.environ["RESEARCH_MODEL_ID"]
if provider_for(model) != "OpenAI":
raise RuntimeError("MODEL_TRANSPORT_MISMATCH")
os.environ["HEDGE_FUND_LLM_MODEL"] = model
os.environ["OPENAI_API_BASE"] = "https://api.apisrouter.com/v1"
assert os.environ["OPENAI_API_KEY"]
# Selection check only; no make_llm() or model request.Tracez la route de modèle proposée
La route du modèle commence après la résolution du registre. L'application a encore besoin d'un client de données financières, d'une définition d'univers et d'une date de recherche explicite. Une clé de passerelle n'est ni un identifiant Financial Datasets ni un droit de redistribuer des données de marché. Validez séparément les identifiants d'entreprises, la devise et la sémantique des horodatages. Pour les entreprises cotées sur plusieurs marchés, précisez si l'analyse porte sur l'émetteur, une classe d'actions locale ou un certificat de dépôt. Gardez les preuves de requêtes du modèle séparées de celles du fournisseur de données afin qu'une série financière manquante ne soit pas diagnostiquée à tort comme un problème de LLM.
Validez les décisions analysées comme des données
La fabrique examinée enveloppe les clients fournisseurs derrière une méthode complete(system, user). Son texte de réponse n'est pas automatiquement un résultat de recherche valide. Inspectez la couche agent qui analyse le JSON, gère l'abstention et combine les sorties. Une réponse peut être non vide mais mal formée, contradictoire en interne ou non étayée par les entrées. Conservez la réponse brute masquée et l'objet analysé dans un même enregistrement de requête. Validez les champs attendus et les états autorisés plutôt que de rechercher une phrase rassurante. Traitez un résultat manquant ou rejeté comme indisponible, et non comme un signal neutre qui entrerait silencieusement dans l'agrégation du portefeuille.
import os
from hedge_fund.llm.client import make_llm, extract_json
from hedge_fund.llm.registry import provider_for
model = os.environ["HEDGE_FUND_LLM_MODEL"]
assert provider_for(model) == "OpenAI"
client = make_llm(model=model)
result = extract_json(client.complete(
"Return a JSON object with a boolean ready field.",
"Set ready to true.",
))
assert result.get("ready") is True
# This request tests the client and parser, not financial research.Rendez le premier cycle de recherche court et vérifiable
Après un test client autorisé, choisissez un émetteur et une question délimitée avec des preuves sous licence ou publiques. Confirmez que chaque outil requis a renvoyé l'entreprise et la période attendues, puis comparez l'explication générée aux documents originaux. Gardez le premier run en lecture seule et conservez une étape explicite de revue humaine. Évaluez si la sortie cite des preuves favorables et contradictoires, enregistre les données manquantes et distingue les hypothèses des calculs. Le nom d'un rôle d'analyste ou d'un style d'investissement ne prouve pas que le raisonnement généré reproduit les méthodes ou le jugement d'une personne réelle.
Gardez les preuves de backtest indépendantes
Une application peut terminer un cycle de recherche alors que son évaluation historique reste invalide. Examinez les horodatages de publication, les données révisées, la sélection des entreprises survivantes et l'utilisation éventuelle d'informations actuelles dans les prompts historiques. Séparez les périodes de développement, de validation et de test réservé avant d'itérer sur les prompts ou les paramètres de stratégie. Enregistrez le benchmark, les hypothèses de coûts de transaction et chaque configuration tentée. Choisir à répétition un prompt à partir de la même période de test transforme cette période en données de développement. Rendez compte honnêtement d'une évaluation incomplète au lieu de remplir un tableau de résultats avec un rendement illustratif qui pourrait être pris pour une mesure.
Contrôlez les échecs et la dépense totale de recherche
Comptez les appels de modèle, les nouvelles tentatives, les erreurs d'analyse, les frais de données financières et le calcul local au niveau de la tâche. Un délai d'attente d'endpoint peut laisser la facturation inconnue jusqu'au rapprochement de l'utilisation. Réessayez les défaillances temporaires de transport dans un budget fixe ; ne répétez pas inchangées les défaillances d'authentification ou de sélection du fournisseur. Gardez une étape échouée et son erreur masquée disponibles pour la revue. Une réponse générique de passerelle peut aider à isoler le transport, mais seuls les tests du client du projet vérifient son comportement d'adaptateur. Une comparaison de coûts utile conserve le même paquet source, les mêmes rôles et les mêmes critères d'acceptation de sortie pour les modèles candidats.
Preuves et limites
La fabrique et le registre actuels ont été examinés à fc1bf250 le 5 septembre 2026. Les exemples sont des modèles étayés par les sources ; aucune requête APIsRouter ni aucun cycle de recherche complet n'a été exécuté pour ce guide. Des appels antérieurs via d'autres passerelles n'établissent pas cette intégration. Gardez séparés les résultats du client, de l'outil de données et de l'artefact complet lors de la validation de votre environnement.
Questions fréquentes
Pourquoi mon ID personnalisé demande-t-il une clé Anthropic ?
Dans la fabrique examinée, un ID de modèle non enregistré revient à Anthropic. Vérifiez provider_for(model) et le registre actuel hedge_fund/llm/api_models.json avant la construction du client.
OPENAI_API_BASE redirige-t-il chaque fournisseur ?
Non. Il est lu dans la branche du client OpenAI. Les autres fournisseurs du registre construisent leurs propres clients et peuvent utiliser des paramètres différents.
Quels champs du registre sont pertinents ?
Le registre examiné lit display_name, model_name et provider. Préservez l'ID exact de l'endpoint et sélectionnez volontairement le transport.
Un modèle présent dans le menu de l'application implique-t-il l'accès à l'endpoint ?
Non. Vérifiez l'ID exact et l'accès du compte avec l'endpoint choisi. Le registre de l'application détermine la sélection du client, pas le catalogue de la passerelle.
Que vérifier après que le client a renvoyé du JSON ?
Validez les outils de données financières, le schéma de sortie de l'agent, le comportement d'abstention et l'artefact final de recherche lié aux preuves au moyen d'une tâche délimitée.
Puis-je utiliser la sortie pour placer automatiquement un ordre ?
Ce guide couvre la configuration de recherche. L'autorisation des ordres, les limites, le rapprochement et la revue opérationnelle relèvent d'un système d'exécution validé séparément.