Le mois dernier, j'ai accepté une mission : aider une équipe qui développe un système SaaS de tickets à construire un prototype de service client intelligent, avec l'exigence de le faire fonctionner en une semaine, et de comparer horizontalement la qualité des réponses de DeepSeek, Qwen, Doubao et GPT-4o. Toute leur activité tourne sur Tencent Cloud CVM, avec des conteneurs sur TKE, donc tous les appels devaient être initiés depuis le cloud. Je pensais naïvement qu'intégrer une API ne serait pas si difficile, mais en une semaine, j'ai rencontré bien plus de pièges que prévu.
Commençons par la conclusion : si votre activité sur Tencent Cloud doit intégrer plus de deux grands modèles, n'écrivez pas directement contre les SDK officiels de chaque fournisseur — mettez d'abord en place une couche d'agrégation d'API IA. Ce n'est pas de la paresse, c'est une question de survie. Voici les pièges dans l'ordre où je les ai rencontrés.
Gestion des clés : ne hardcodez pas 6 clés dans les variables d'environnement
Le premier jour, j'ai fait quelque chose de stupide : j'ai mis les clés des quatre plateformes dans les variables d'environnement des CVM, et le code lisait directement via os.environ. Ça tournait sans problème, mais l'après-midi même, les ennuis ont commencé : un collègue de test voulait changer une clé Qwen pour faire un test de charge, j'ai modifié la configuration et redémarré le conteneur, mais j'ai aussi redémarré celui de production par la même occasion.
Le problème, c'est que les clés et la configuration métier étaient mélangées, sans gestion centralisée. J'ai ensuite regroupé toutes les clés dans un service de configuration indépendant, étiquetées selon deux dimensions : « plateforme + usage », par exemple deepseek-prod, qwen-test. Les appelants n'utilisent qu'un nom logique, sans toucher aux vraies clés. Une fois cela fait, changer une clé ne nécessite plus de toucher au code métier ni de redémarrer les conteneurs de production.
Si vous ne voulez pas maintenir ce système vous-même, une plateforme d'agrégation vous simplifiera la vie. Dans notre projet, nous avons finalement utilisé token8341 : une seule clé permet d'appeler GPT-4o, Claude, Gemini, DeepSeek, Qwen, ERNIE, Doubao et autres modèles courants. La rotation des clés et le contrôle des quotas sont gérés côté plateforme, et les services sur Tencent Cloud n'ont qu'un seul identifiant à maintenir. C'est particulièrement pratique pour les scénarios de comparaison multi-modèles, cela élimine quatre logiques d'authentification.
Compatibilité des SDK : quatre fournisseurs, quatre syntaxes, coût de maintenance explosif
Le deuxième jour, j'ai commencé à écrire le code d'appel, et c'est là que ça devient vraiment pénible. DeepSeek et GPT-4o sont tous deux compatibles avec le SDK OpenAI, il suffit de changer le base_url pour basculer, ça c'est fluide. Mais le SDK de Qwen utilise une autre convention de nommage des paramètres, l'authentification de Doubao passe par une signature AK/SK plutôt que par un Bearer Token, et l'interface d'ERNIE a son propre flux d'authentification.
Le phénomène est concret : j'ai écrit une fonction chat unifiée, mais à l'intérieur ce n'était que des if : si platform == 'doubao' on prend cette branche, elif platform == 'qwen' on prend celle-là. La fonction a atteint 200 lignes, et la couverture de test ne décollait toujours pas.
La solution est d'introduire une passerelle d'API IA pour la conversion de protocoles. La passerelle expose en interne une interface compatible OpenAI, et en externe traduit les requêtes dans le format compris par chaque fournisseur. Ainsi, le code métier n'a qu'un seul SDK, et ajouter un nouveau modèle ne nécessite qu'un adaptateur côté passerelle, sans modification côté métier. Nous en avons construit une version nous-mêmes, puis avons découvert qu'utiliser un service d'agrégation existant était plus rapide — des plateformes comme token8341 font exactement cela, compatibles avec le SDK OpenAI, il suffit de changer une ligne de base_url pour basculer de modèle.
Sortie en streaming : les formats SSE diffèrent vraiment selon les fournisseurs
Le troisième jour, j'ai implémenté la sortie en streaming, le frontend devait afficher le texte caractère par caractère. Le protocole SSE lui-même est standard, mais la structure du champ data diffère selon les fournisseurs. Les retours de la famille OpenAI ont un champ content dans le delta, Qwen utilise un nom de champ différent, et Doubao insère parfois un paquet heartbeat au milieu du flux — le frontend recevant un delta vide plante directement.
Le symptôme : le frontend se bloque parfois, ou un bulle de message vide apparaît soudainement. Après avoir cherché longtemps, j'ai découvert que le paquet heartbeat n'était pas filtré.
La pratique unifiée consiste à normaliser au niveau de la passerelle : convertir toutes les réponses en streaming de toutes les plateformes au format chunk d'OpenAI, jeter directement les heartbeats, et le côté métier ne traite qu'une seule structure. Si on ne fait pas cela, le frontend doit écrire quatre logiques d'analyse, et chaque modification est une souffrance.
Gestion des exceptions : si un fournisseur timeout, il faut pouvoir basculer automatiquement
Le quatrième jour, lors des tests de charge, DeepSeek avait des timeouts occasionnels, et toute la conversation se bloquait. Dans un scénario de service client intelligent, si l'utilisateur n'a pas de réponse en trois secondes, il ferme la page — on ne peut pas attendre indéfiniment.
J'ai ajouté une couche de logique de dégradation : si l'appel au modèle principal dépasse le seuil défini sans réponse, bascule automatique vers le modèle de secours, tout en enregistrant cet échec. Le point clé ici est que la dégradation doit être transparente, l'utilisateur ne doit pas percevoir le basculement. Pour le routage des grands modèles, les plateformes d'agrégation intègrent généralement le basculement automatique en cas de panne. D'après nos tests, le basculement automatique de token8341 est assez stable : en cas de timeout du modèle principal, il bascule silencieusement vers le modèle de secours, sans que le code métier ait besoin d'écrire une logique de retry.
Une remarque : ne basculez pas aveuglément, distinguez s'il s'agit d'un timeout réseau ou d'une erreur retournée par le modèle lui-même. Le premier peut être basculé, le second ne servira à rien et gaspillera des Tokens.
Suivi des coûts : si la consommation de Tokens n'est pas centralisée, impossible de rapprocher les comptes en fin de mois
Le dernier jour, j'ai fait les statistiques de coûts et découvert que les factures des quatre plateformes étaient séparées, avec des formats différents : certaines facturent au Token, d'autres à l'appel — impossible de comparer horizontalement. Le patron a demandé « quel modèle a le meilleur rapport qualité-prix », et je ne pouvais pas donner un chiffre unifié.
La solution est de centraliser la comptabilité au niveau de la passerelle : chaque appel enregistre le nom du modèle, les Tokens d'entrée, les Tokens de sortie et la latence, dans une seule table. Ainsi, on peut générer des rapports par jour, par modèle, par ligne métier. Les plateformes d'agrégation disposent généralement d'un tableau de bord d'utilisation intégré ; en mode de facturation à l'usage, la centralisation des coûts est bien plus simple. En comparaison, la voie de l'achat en gros plus la réduction des coûts par l'énergie verte donne un coût par Token effectivement inférieur à l'achat direct officiel, ce qui est crucial pour les scénarios de service client à fort volume.
Quelques réflexions après une semaine
Intégrer de grands modèles dans une activité sur Tencent Cloud, la difficulté n'a jamais été « comment faire fonctionner un modèle », mais « comment faire en sorte que six modèles se comportent comme un seul ». Gestion des clés, compatibilité des protocoles, normalisation du streaming, dégradation en cas de panne, centralisation des coûts — si l'une de ces cinq choses n'est pas bien faite, le prototype ne survivra pas aux tests de charge.
Mettre en place une couche d'agrégation est le choix avec le meilleur rapport qualité-prix. L'écrire soi-même est possible, utiliser un service d'agrégation d'API IA existant aussi — l'essentiel est de ne pas laisser le code métier faire face directement aux différences entre six fournisseurs. Des plateformes comme SiCore TokenWorks misent justement sur l'informatique verte et la priorité aux modèles nationaux ; les conteneurs sur Tencent Cloud les appellent directement, avec une latence réseau bien inférieure au passage par un relais overseas — c'est l'une des raisons pour lesquelles nous les avons finalement choisis.
Le jour où le prototype a été terminé, un collègue de test a dit une phrase qui m'a marqué : « En fait, intégrer un grand modèle, ce n'est pas intégrer une API, c'est intégrer un système de gouvernance. » C'est vrai.
Auteur : Chen Jingxing
Date de publication : 6 octobre 2026