<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Comparison on kenji.blog</title><link>http://kenji.blog/fr/tags/comparison/</link><description>Recent content in Comparison on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 12:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/fr/tags/comparison/index.xml" rel="self" type="application/rss+xml"/><item><title>Comparaison complète des API ChatGPT, Gemini et Claude ! Laquelle choisir ?</title><link>http://kenji.blog/fr/p/chatgpt-gemini-claude-api-comparison/</link><pubDate>Fri, 11 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/fr/p/chatgpt-gemini-claude-api-comparison/</guid><description>&lt;img src="http://kenji.blog/p/chatgpt-gemini-claude-api-comparison/img/eyecatch.jpg" alt="Featured image of post Comparaison complète des API ChatGPT, Gemini et Claude ! Laquelle choisir ?" />&lt;h1 id="comparaison-complète-des-api-chatgpt-gemini-et-claude--laquelle-choisir-">Comparaison complète des API ChatGPT, Gemini et Claude ! Laquelle choisir ?
&lt;/h1>&lt;p>L&amp;rsquo;évolution de la technologie de l&amp;rsquo;IA est remarquable, en particulier dans le domaine des grands modèles de langage (LLM : Large Language Model), où ChatGPT (série GPT) d&amp;rsquo;OpenAI, Gemini de Google et Claude d&amp;rsquo;Anthropic se livrent une lutte acharnée pour la suprématie à trois. En 2026, chaque entreprise publie de nouveaux modèles et fonctionnalités d&amp;rsquo;API en l&amp;rsquo;espace de quelques mois, voire de quelques semaines, et pour les développeurs ou les architectes informatiques des entreprises, la question de savoir &amp;ldquo;quelle API intégrer dans un produit&amp;rdquo; est devenue une décision cruciale qui peut déterminer le succès ou l&amp;rsquo;échec d&amp;rsquo;un projet.&lt;/p>
&lt;p>Dans cet article, nous comparerons et expliquerons en détail les API de ces 3 principaux fournisseurs d&amp;rsquo;IA du point de vue des développeurs, sans nous limiter à une simple liste de spécifications, mais en allant jusqu&amp;rsquo;à la conception de l&amp;rsquo;architecture, la structure tarifaire détaillée, l&amp;rsquo;analyse mathématique de la latence, des exemples d&amp;rsquo;implémentation concrets avec Python et Node.js, et les dernières méthodes d&amp;rsquo;optimisation des coûts telles que le cache de prompts.&lt;/p>
&lt;p>Nous visons à ce que cela devienne un guide complet pour que nos lecteurs puissent sélectionner l&amp;rsquo;API LLM la plus adaptée à leur propre cas d&amp;rsquo;utilisation, et construire des applications d&amp;rsquo;IA évolutives et rentables.&lt;/p>
&lt;hr>
&lt;h2 id="1-philosophie-et-concepts-de-conception-de-chaque-api-llm">1. Philosophie et concepts de conception de chaque API LLM
&lt;/h2>&lt;p>Lors du choix technologique, il est d&amp;rsquo;abord très important de comprendre avec quelle philosophie chaque entreprise construit ses modèles et API.&lt;/p>
&lt;h3 id="11-openai-chatgpt">1.1 OpenAI (ChatGPT)
&lt;/h3>&lt;p>OpenAI s&amp;rsquo;est donné pour mission la &amp;ldquo;réalisation de l&amp;rsquo;intelligence artificielle générale (IAG)&amp;rdquo; et continue de tirer vers le haut les standards de facto de l&amp;rsquo;industrie. Ils fournissent une variété de modèles adaptés à chaque cas d&amp;rsquo;utilisation, tels que GPT-4o, GPT-4o-mini, et le modèle o1 spécialisé dans le raisonnement. Leur écosystème est le plus mature, et ils possèdent l&amp;rsquo;abondance de bibliothèques et de documentation la plus importante, qu&amp;rsquo;elle soit officielle ou non.&lt;/p>
&lt;h3 id="12-google-gemini">1.2 Google (Gemini)
&lt;/h3>&lt;p>Google met en avant la politique &amp;ldquo;AI First&amp;rdquo; et fait de sa scalabilité, qui exploite au maximum sa propre infrastructure (réseau TPU), son arme principale. Gemini 1.5 Pro/Flash possède une fenêtre de contexte impressionnante allant jusqu&amp;rsquo;à 2 millions de jetons (tokens), ce qui lui permet de traiter d&amp;rsquo;énormes documents, ainsi que des heures de vidéo et d&amp;rsquo;audio en une seule fois, ce qui constitue sa principale caractéristique. L&amp;rsquo;intégration forte avec Google Cloud (Vertex AI) est également très attrayante pour les entreprises.&lt;/p>
&lt;h3 id="13-anthropic-claude">1.3 Anthropic (Claude)
&lt;/h3>&lt;p>Anthropic est une entreprise fondée par d&amp;rsquo;anciens membres d&amp;rsquo;OpenAI, adoptant une approche unique de sécurité appelée &amp;ldquo;Constitutional AI&amp;rdquo; (IA Constitutionnelle). Claude 3.5 Sonnet et Opus recueillent un soutien enthousiaste de la part de nombreux développeurs grâce à leur grande capacité de raisonnement, leur compétence en génération de code, et surtout leurs &amp;ldquo;conversations naturelles, semblables à celles des humains&amp;rdquo; et leur &amp;ldquo;faible taux d&amp;rsquo;hallucinations&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="2-comparaison-détaillée-des-spécifications-des-familles-de-modèles">2. Comparaison détaillée des spécifications des familles de modèles
&lt;/h2>&lt;p>Nous comparons les spécifications des modèles phares actuels en 2026.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Fournisseur&lt;/th>
&lt;th>Modèle phare&lt;/th>
&lt;th>Longueur max du contexte&lt;/th>
&lt;th>Principaux atouts&lt;/th>
&lt;th>Cas d&amp;rsquo;utilisation recommandés&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>OpenAI&lt;/strong>&lt;/td>
&lt;td>GPT-4o&lt;/td>
&lt;td>128K&lt;/td>
&lt;td>Vitesse, reconnaissance visuelle, prise en charge audio&lt;/td>
&lt;td>Applications interactives, tâches d&amp;rsquo;ordre général&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>OpenAI&lt;/strong>&lt;/td>
&lt;td>o1-preview&lt;/td>
&lt;td>128K&lt;/td>
&lt;td>Raisonnement logique avancé, mathématiques, codage&lt;/td>
&lt;td>Génération d&amp;rsquo;algorithmes complexes, recherche&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Google&lt;/strong>&lt;/td>
&lt;td>Gemini 1.5 Pro&lt;/td>
&lt;td>2,000K&lt;/td>
&lt;td>Traitement de textes très longs, multimodal (vidéo, audio)&lt;/td>
&lt;td>Analyse de bases de code gigantesques, résumé de vidéos&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Google&lt;/strong>&lt;/td>
&lt;td>Gemini 1.5 Flash&lt;/td>
&lt;td>2,000K&lt;/td>
&lt;td>Faible latence, haut débit, coût extrêmement bas&lt;/td>
&lt;td>Traitement en temps réel, traitement par lots de données massives&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Anthropic&lt;/strong>&lt;/td>
&lt;td>Claude 3.5 Sonnet&lt;/td>
&lt;td>200K&lt;/td>
&lt;td>Capacité de codage, génération de textes naturels&lt;/td>
&lt;td>Assistance au développement logiciel, support client avancé&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Anthropic&lt;/strong>&lt;/td>
&lt;td>Claude 3.5 Haiku&lt;/td>
&lt;td>200K&lt;/td>
&lt;td>Réponse ultra-rapide, rapport coût-performance&lt;/td>
&lt;td>IA Edge (en périphérie), chatbots en temps réel&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="3-plongée-dans-larchitecture--les-coulisses-des-requêtes-api">3. Plongée dans l&amp;rsquo;architecture : les coulisses des requêtes API
&lt;/h2>&lt;p>Lorsque l&amp;rsquo;on appelle une API LLM, quel type de traitement a lieu en arrière-plan ? Pour optimiser les performances, il est nécessaire de comprendre cette architecture.&lt;/p>
&lt;p>Le diagramme Mermaid ci-dessous montre la vue d&amp;rsquo;ensemble, depuis l&amp;rsquo;envoi de la requête API par le client jusqu&amp;rsquo;au retour des jetons (tokens) en streaming.&lt;/p>
&lt;div class="mermaid">graph TD
A["Application Client"] -->|HTTP/REST or gRPC| B["Passerelle API"]
B --> C["Équilibreur de charge"]
C --> D["Cluster d'inférence"]
D --> E["Tokeniseur (BPE / SentencePiece)"]
E --> F["Cache KV &amp; Mécanisme d'attention"]
F --> G["Blocs Transformer (Passe avant)"]
G --> H["Couche de sortie (Logits)"]
H --> I["Échantillonneur (Temperature, Top-p, Top-k)"]
I --> J["Détokeniseur"]
J -->|Réponse en streaming (Morceau)| A&lt;/div>
&lt;h3 id="31-algorithmes-de-tokenisation">3.1 Algorithmes de Tokenisation
&lt;/h3>&lt;p>Le texte saisi dans l&amp;rsquo;API est divisé en interne en unités appelées &amp;ldquo;jetons&amp;rdquo; (tokens).&lt;/p>
&lt;ul>
&lt;li>&lt;strong>OpenAI (tiktoken)&lt;/strong> : Adopte l&amp;rsquo;encodage Byte-Pair Encoding (BPE). Il offre une compression extrêmement efficace, en particulier en anglais, mais a tendance à gonfler le nombre de jetons pour les langues non alphabétiques comme le japonais.&lt;/li>
&lt;li>&lt;strong>Google (Gemini)&lt;/strong> : Adopte SentencePiece (Unigram Language Model). Il est performant en multilingue et tend à pouvoir représenter des textes, même en japonais, avec un nombre de jetons relativement faible.&lt;/li>
&lt;li>&lt;strong>Anthropic (Claude)&lt;/strong> : Utilise une version personnalisée de BPE. Le support multilingue a été renforcé, et depuis Claude 3, l&amp;rsquo;efficacité des jetons pour le japonais a également été considérablement améliorée.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="4-analyse-mathématique-de-la-latence-et-des-performances">4. Analyse mathématique de la latence et des performances
&lt;/h2>&lt;p>Dans les applications en temps réel, la latence affecte directement l&amp;rsquo;expérience utilisateur (UX). La latence d&amp;rsquo;une API LLM, $T_{total}$, peut être modélisée mathématiquement de la manière suivante.&lt;/p>
$$ T_{total} = T_{network} + T_{TTFT} + (N \times T_{TPOT}) $$
&lt;p>Ici, chaque variable a la signification suivante :&lt;/p>
&lt;ul>
&lt;li>$T_{network}$ : Temps d&amp;rsquo;aller-retour du réseau (RTT).&lt;/li>
&lt;li>$T_{TTFT}$ (Time To First Token) : Temps nécessaire pour générer le premier jeton. Dépend fortement du coût de calcul de l&amp;rsquo;attention, qui est proportionnel au carré de la longueur du prompt (nombre de jetons d&amp;rsquo;entrée).&lt;/li>
&lt;li>$N$ : Nombre total de jetons de sortie.&lt;/li>
&lt;li>$T_{TPOT}$ (Time Per Output Token) : Temps de génération par jeton. Étant un modèle autorégressif, il est calculé en série en fonction des sorties précédentes.&lt;/li>
&lt;/ul>
&lt;h3 id="41-complexité-du-mécanisme-dauto-attention">4.1 Complexité du mécanisme d&amp;rsquo;auto-attention
&lt;/h3>&lt;p>La complexité de calcul de l&amp;rsquo;auto-attention (Self-Attention) dans l&amp;rsquo;architecture Transformer augmente de manière quadratique par rapport à la longueur de la séquence d&amp;rsquo;entrée $L$.&lt;/p>
$$ \text{Complexity} = O(L^2 \cdot d) $$
&lt;p>Ici, $d$ est la dimension du vecteur de plongement (embedding). En raison de cette contrainte, $T_{TTFT}$ se dégrade généralement très rapidement lorsque le prompt s&amp;rsquo;allonge.
Cependant, Gemini 1.5 de Google adopte des architectures d&amp;rsquo;optimisation innovantes telles que &amp;ldquo;Ring Attention&amp;rdquo; et &amp;ldquo;Block-wise Compute&amp;rdquo;, réussissant à générer le premier jeton en un temps raisonnable (de quelques secondes à quelques dizaines de secondes) même avec une entrée massive de 2 millions de jetons.&lt;/p>
&lt;hr>
&lt;h2 id="5-structure-tarifaire-et-stratégies-doptimisation-des-coûts">5. Structure tarifaire et stratégies d&amp;rsquo;optimisation des coûts
&lt;/h2>&lt;p>Le coût de l&amp;rsquo;API est essentiellement calculé en fonction du nombre de jetons d&amp;rsquo;entrée et de sortie.&lt;/p>
$$ Cost = (Tokens_{in} \times Rate_{in}) + (Tokens_{out} \times Rate_{out}) $$
&lt;p>Toutefois, de nouveaux mécanismes ont été introduits dans les API récentes pour réduire considérablement les coûts.&lt;/p>
&lt;h3 id="51-cache-de-prompts-prompt-caching">5.1 Cache de prompts (Prompt Caching)
&lt;/h3>&lt;p>L&amp;rsquo;envoi de très longs prompts système ou d&amp;rsquo;une grande quantité de documents récupérés par RAG à chaque fois entraîne des coûts énormes. Pour y remédier, chaque entreprise propose une fonction de mise en cache.&lt;/p>
&lt;p>Avec Anthropic (Claude) et Google (Gemini), il est possible de réduire considérablement les coûts d&amp;rsquo;entrée (jusqu&amp;rsquo;à 90 %) en mettant en cache des blocs de texte spécifiques.&lt;/p>
&lt;p>Le modèle de coût lors de l&amp;rsquo;utilisation du cache est le suivant :&lt;/p>
$$ Cost_{cached} = (Tokens_{cache\_write} \times Rate_{cache\_write}) + (Tokens_{cache\_read} \times Rate_{cache\_read}) + (Tokens_{out} \times Rate_{out}) $$
&lt;p>Ici, $Rate_{cache\_read}$ est fixé à environ 10 % à 25 % du $Rate_{in}$ habituel. Cela permet d&amp;rsquo;exploiter un chatbot à moindre coût tout en maintenant en permanence une base de code de plusieurs dizaines de milliers de lignes en tant que connaissances contextuelles.&lt;/p>
&lt;h3 id="52-api-par-lots-batch-api">5.2 API par lots (Batch API)
&lt;/h3>&lt;p>Pour les tâches ne nécessitant pas de temps réel (analyse de journaux, classification de grandes quantités de données, etc.), OpenAI et Anthropic fournissent une API par lots (Batch API). C&amp;rsquo;est un mécanisme puissant qui permet d&amp;rsquo;envoyer des requêtes en groupe et de recevoir les résultats dans les 24 heures, à la moitié du prix normal de l&amp;rsquo;API (50 % de réduction).&lt;/p>
&lt;hr>
&lt;h2 id="6-comparaison-de-lexpérience-développeur-dx-et-des-sdk">6. Comparaison de l&amp;rsquo;expérience développeur (DX) et des SDK
&lt;/h2>&lt;p>Du point de vue de l&amp;rsquo;efficacité du développement, nous comparons les SDK (Software Development Kit) fournis par chaque entreprise.&lt;/p>
&lt;h3 id="61-api-openai">6.1 API OpenAI
&lt;/h3>&lt;p>C&amp;rsquo;est la plus largement utilisée et la prise en charge par les bibliothèques tierces (LangChain, LlamaIndex, etc.) est la plus rapide. De plus, la fonctionnalité de sorties structurées (Structured Outputs) garantit le retour de réponses respectant à 100 % le schéma JSON, ce qui facilite grandement l&amp;rsquo;intégration des systèmes.&lt;/p>
&lt;h3 id="62-api-anthropic-claude">6.2 API Anthropic (Claude)
&lt;/h3>&lt;p>L&amp;rsquo;interface de son SDK est raffinée et réputée très facile à utiliser, notamment au niveau des définitions de types TypeScript. La structure de l&amp;rsquo;API Message est particulièrement intuitive, permettant d&amp;rsquo;écrire simplement des requêtes multimodales incluant plusieurs images.&lt;/p>
&lt;h3 id="63-api-google-gemini">6.3 API Google Gemini
&lt;/h3>&lt;p>Il existe deux types d&amp;rsquo;accès : via Google Cloud Vertex AI et via AI Studio (Google Gen AI SDK), ce qui peut sembler un peu confus pour les débutants. Cependant, le SDK Vertex AI destiné aux entreprises est entièrement intégré au système de gestion des identités et des accès (IAM) de GCP, permettant de mettre en place un environnement de développement sécurisé.&lt;/p>
&lt;hr>
&lt;h2 id="7-pratique--implémentation-dun-test-dintégration-de-plusieurs-api-avec-python">7. Pratique ! Implémentation d&amp;rsquo;un test d&amp;rsquo;intégration de plusieurs API avec Python
&lt;/h2>&lt;p>Ici, nous allons utiliser Python pour implémenter un script qui envoie des requêtes asynchrones simultanées aux trois API (OpenAI, Anthropic, Gemini) et compare leurs latences.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">asyncio&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">openai&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AsyncOpenAI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">anthropic&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AsyncAnthropic&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">google.generativeai&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">genai&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Initialisation des clients&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">openai_client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AsyncOpenAI&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api_key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">environ&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;OPENAI_API_KEY&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">anthropic_client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AsyncAnthropic&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api_key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">environ&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;ANTHROPIC_API_KEY&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">genai&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">configure&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api_key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">environ&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;GEMINI_API_KEY&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">prompt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;Veuillez expliquer de manière simple pour les débutants les bases de l&amp;#39;informatique quantique et son impact sur la cryptographie actuelle.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">fetch_openai&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">start_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">openai_client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">chat&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">completions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;gpt-4o&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[{&lt;/span>&lt;span class="s2">&amp;#34;role&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;user&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;content&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">prompt&lt;/span>&lt;span class="p">}],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_tokens&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1024&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">elapsed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">start_time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;OpenAI (GPT-4o)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">elapsed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">choices&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">content&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">fetch_anthropic&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">start_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">anthropic_client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">messages&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;claude-3-5-sonnet-20240620&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[{&lt;/span>&lt;span class="s2">&amp;#34;role&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;user&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;content&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">prompt&lt;/span>&lt;span class="p">}],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_tokens&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1024&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">elapsed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">start_time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;Anthropic (Claude 3.5 Sonnet)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">elapsed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">content&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">fetch_gemini&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">start_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">genai&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">GenerativeModel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;gemini-1.5-pro&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Utilisation de la méthode asynchrone du SDK Python Gemini&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">generate_content_async&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">prompt&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">elapsed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">time&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">start_time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s2">&amp;#34;Google (Gemini 1.5 Pro)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">elapsed&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Envoi de requêtes à chaque API LLM...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Exécution des 3 API en parallèle&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">results&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">asyncio&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gather&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fetch_openai&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fetch_anthropic&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fetch_gemini&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">provider&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">latency&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">text&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">results&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;--- &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">provider&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Latency: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">latency&lt;/span>&lt;span class="si">:&lt;/span>&lt;span class="s2">.2f&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> seconds&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Response (Excerpt): &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">[:&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">...&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">asyncio&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">main&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>En exécutant ce script, vous pouvez facilement mesurer quel modèle répond le plus rapidement (en minimisant $T_{total}$) dans un environnement réseau réel.&lt;/p>
&lt;hr>
&lt;h2 id="8-implémentation-du-tool-calling-function-calling-avec-nodejs">8. Implémentation du Tool Calling (Function Calling) avec Node.js
&lt;/h2>&lt;p>Pour qu&amp;rsquo;un LLM fonctionne non pas comme un simple chatbot, mais comme un &amp;ldquo;agent IA&amp;rdquo; qui interagit avec des systèmes externes, le Tool Calling (ou Function Calling) est indispensable. Voici un exemple en Node.js (TypeScript) où l&amp;rsquo;API OpenAI est invitée à appeler une API météo.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="nx">OpenAI&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s2">&amp;#34;openai&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">openai&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">OpenAI&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">apiKey&lt;/span>: &lt;span class="kt">process.env.OPENAI_API_KEY&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">async&lt;/span> &lt;span class="kd">function&lt;/span> &lt;span class="nx">runAgent() {&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">tools&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;function&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">function&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">name&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;get_weather&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">description&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;Obtient la météo actuelle pour la ville spécifiée.&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">parameters&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;object&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">properties&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">location&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">type&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;string&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">description&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;Nom de la ville (ex: Tokyo, New York)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">required&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;location&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="nx">openai&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">chat&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">completions&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">create&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">model&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;gpt-4o&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">messages&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[{&lt;/span> &lt;span class="nx">role&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;user&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;content&amp;#34;&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;Quel temps fait-il à Tokyo aujourd&amp;#39;hui ? Aurai-je besoin d&amp;#39;un parapluie ?&amp;#34;&lt;/span> &lt;span class="p">}],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">tools&lt;/span>: &lt;span class="kt">tools&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">tool_choice&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;auto&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">response&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">choices&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">message&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">message&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">tool_calls&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">toolCall&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">message&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">tool_calls&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sb">`Le LLM a demandé un appel d&amp;#39;outil : Nom de la fonction = &lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">toolCall&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="kd">function&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">args&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">JSON&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">parse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">toolCall&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="kd">function&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">arguments&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sb">`Arguments : &lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nx">args&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">location&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Implémentez ici la logique pour appeler l&amp;#39;API météo réelle (ex: OpenWeatherMap)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// const weather = await fetchWeatherFromAPI(args.location);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Vous pouvez passer le résultat obtenu au LLM pour générer la réponse finale
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">runAgent&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="k">catch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Claude 3.5 Sonnet et Gemini 1.5 Pro disposent également de fonctionnalités de Tool Calling équivalentes. Bien qu&amp;rsquo;il y ait quelques différences dans la façon dont les schémas sont définis, le flux de base est commun.&lt;/p>
&lt;hr>
&lt;h2 id="9-rag-vs-fenêtre-de-contexte-étendue--que-faut-il-adopter-">9. RAG vs Fenêtre de contexte étendue : Que faut-il adopter ?
&lt;/h2>&lt;p>Actuellement, l&amp;rsquo;un des plus grands débats en matière d&amp;rsquo;architecture d&amp;rsquo;IA d&amp;rsquo;entreprise est de savoir s&amp;rsquo;il faut &amp;ldquo;utiliser RAG (génération augmentée par la recherche) pour intégrer des connaissances externes, ou tout confier à une fenêtre de contexte massive (Long Context)&amp;rdquo;.&lt;/p>
&lt;h3 id="avantages-et-défis-de-rag-retrieval-augmented-generation">Avantages et défis de RAG (Retrieval-Augmented Generation)
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Avantages&lt;/strong> : Faible coût (car seuls les morceaux nécessaires sont placés dans le prompt), facilité d&amp;rsquo;identification des preuves (sources) de la réponse.&lt;/li>
&lt;li>&lt;strong>Défis&lt;/strong> : Comme cela dépend de la précision de la recherche sémantique, cette méthode n&amp;rsquo;est pas adaptée aux tâches de raisonnement complexe où le contexte est dispersé dans plusieurs documents (par exemple : &amp;ldquo;Analysez chronologiquement la cause fondamentale du retard du projet A à partir des procès-verbaux de toutes les réunions de l&amp;rsquo;année dernière&amp;rdquo;).&lt;/li>
&lt;/ul>
&lt;h3 id="contexte-étendu-long-context-comme-les-2-millions-de-jetons-de-gemini-15-pro">Contexte étendu (Long Context, comme les 2 millions de jetons de Gemini 1.5 Pro)
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Avantages&lt;/strong> : Aucune perte d&amp;rsquo;information due à la recherche. Même dans le test de &amp;ldquo;chercher une aiguille dans une botte de foin&amp;rdquo; (Needle In A Haystack : NIAH), Gemini 1.5 Pro et Claude 3.5 Sonnet peuvent extraire des informations avec une précision de plus de 99 %.&lt;/li>
&lt;li>&lt;strong>Défis&lt;/strong> : La consommation de jetons devient massive et fait grimper les coûts, et la latence ($T_{TTFT}$) augmente.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Conclusion&lt;/strong> : La meilleure pratique en 2026 est l&amp;rsquo;&lt;strong>&amp;ldquo;approche hybride&amp;rdquo;&lt;/strong>. La conception dominante consiste à utiliser le RAG avec une base de données vectorielle pour les questions-réponses quotidiennes, et à utiliser un contexte étendu avec cache de prompts pour les tâches spécialisées nécessitant une analyse complexe ou la révision d&amp;rsquo;un code complet.&lt;/p>
&lt;hr>
&lt;h2 id="10-comparaison-des-capacités-de-traitement-multimodal">10. Comparaison des capacités de traitement multimodal
&lt;/h2>&lt;p>Dans les applications d&amp;rsquo;IA de nouvelle génération, il est nécessaire de comprendre directement non seulement le texte, mais aussi les images, le son et les vidéos.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant User as "Utilisateur"
participant Client as "Application Frontend"
participant API as "API LLM (Multimodal)"
User->>Client: Téléchargement Vidéo &amp; Prompt Texte
Client->>API: Envoi d'Octets Vidéo/URI + Texte
Note over API: Découpage vidéo &amp; séparation audio
Note over API: Modèle d'Embedding Multimodal
API-->>Client: Retour de Résumé Textuel &amp; Horodatages
Client-->>User: Affichage des Insights&lt;/div>
&lt;ul>
&lt;li>&lt;strong>OpenAI (GPT-4o)&lt;/strong> : La précision de la reconnaissance d&amp;rsquo;images est extrêmement élevée et elle excelle dans la lecture de dessins manuscrits ou de graphiques complexes. En outre, la conversation vocale native à très faible latence (quelques centaines de millisecondes) à l&amp;rsquo;aide de l&amp;rsquo;API Realtime est également très puissante.&lt;/li>
&lt;li>&lt;strong>Google (Gemini 1.5 Pro)&lt;/strong> : &lt;strong>Surpasse les autres en matière d&amp;rsquo;analyse vidéo.&lt;/strong> Vous pouvez insérer directement un fichier vidéo d&amp;rsquo;une heure (images + audio) et il est capable de répondre à des questions précises telles que &amp;ldquo;Quel est le titre du document tenu par la personne visible sur le bord droit de l&amp;rsquo;écran à 12 minutes 45 secondes ?&amp;rdquo;.&lt;/li>
&lt;li>&lt;strong>Anthropic (Claude 3.5 Sonnet)&lt;/strong> : Ses capacités de reconnaissance d&amp;rsquo;images (Vision) sont au même niveau que GPT-4o et très remarquables. Il fait preuve d&amp;rsquo;une force inégalée dans l&amp;rsquo;aide au développement frontend, par exemple en lui donnant une capture d&amp;rsquo;écran de l&amp;rsquo;interface utilisateur et en demandant : &amp;ldquo;Générez le code du composant React pour cet écran&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="11-sécurité-et-conformité-de-niveau-entreprise">11. Sécurité et conformité de niveau entreprise
&lt;/h2>&lt;p>Lorsque les entreprises utilisent des API LLM dans un environnement de production, leurs principales préoccupations sont &amp;ldquo;nos données seront-elles utilisées pour former l&amp;rsquo;IA ?&amp;rdquo; et &amp;ldquo;répondent-elles aux exigences de conformité ?&amp;rdquo;.&lt;/p>
&lt;p>Les trois sociétés déclarent explicitement qu&amp;rsquo;elles &lt;strong>n&amp;rsquo;utilisent pas les données (prompts et réponses) envoyées via l&amp;rsquo;API pour former leurs modèles (Zero Data Retention / No Training on Customer Data)&lt;/strong> (*cela diffère pour les interfaces de discussion Web gratuites destinées aux consommateurs).&lt;/p>
&lt;p>Si un niveau de sécurité encore plus élevé est requis :&lt;/p>
&lt;ul>
&lt;li>&lt;strong>OpenAI&lt;/strong> : En passant par Azure OpenAI Service, vous pouvez bénéficier de la sécurité de niveau entreprise de Microsoft, de son SLA et d&amp;rsquo;une connexion réseau fermée via Azure Private Link.&lt;/li>
&lt;li>&lt;strong>Google&lt;/strong> : En passant par Google Cloud Vertex AI, il est possible d&amp;rsquo;avoir une isolation réseau stricte en utilisant VPC Service Controls et une protection des données via CMEK (clés de chiffrement gérées par le client).&lt;/li>
&lt;li>&lt;strong>Anthropic&lt;/strong> : En l&amp;rsquo;utilisant via AWS Bedrock ou Google Cloud Vertex AI, vous pouvez vous appuyer sur l&amp;rsquo;infrastructure de sécurité robuste de ces fournisseurs de cloud.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="12-conclusion--le-guide-de-sélection-ultime-par-cas-dutilisation">12. Conclusion : Le guide de sélection ultime par cas d&amp;rsquo;utilisation
&lt;/h2>&lt;p>Bien que nous ayons effectué une comparaison sous plusieurs angles jusqu&amp;rsquo;à présent, la conclusion finale à la question &amp;ldquo;laquelle choisir ?&amp;rdquo; dépend de votre cas d&amp;rsquo;utilisation.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Développement de logiciels complexes, génération de code et raisonnement avancé&lt;/strong> :
&lt;strong>👑 Gagnant : Claude 3.5 Sonnet (Anthropic)&lt;/strong>
Il offre actuellement les meilleures performances dans la compréhension du contexte du code, la refactorisation et la création de textes naturels et humains. La facilité d&amp;rsquo;utilisation de l&amp;rsquo;API et l&amp;rsquo;efficacité de ses coûts grâce au cache de prompts sont également exceptionnelles.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Analyse de documents ultra-longs et traitement par lots de vidéo/audio&lt;/strong> :
&lt;strong>👑 Gagnant : Gemini 1.5 Pro (Google)&lt;/strong>
La fenêtre de contexte de 2 millions de jetons est une arme unique. Il n&amp;rsquo;y a pas de meilleur choix que Gemini pour les tâches nécessitant une vue d&amp;rsquo;ensemble des données, telles que l&amp;rsquo;analyse d&amp;rsquo;un manuel PDF de plusieurs centaines de pages ou le résumé d&amp;rsquo;un long enregistrement de réunion.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Polyvalence, vitesse d&amp;rsquo;exécution et sorties structurées stables (JSON)&lt;/strong> :
&lt;strong>👑 Gagnant : GPT-4o / GPT-4o-mini (OpenAI)&lt;/strong>
Il accomplit toutes sortes de tâches sans difficulté et bénéficie de la prise en charge d&amp;rsquo;outils tiers la plus abondante. L&amp;rsquo;écosystème OpenAI est indispensable lorsque vous avez besoin d&amp;rsquo;un parsing JSON infaillible utilisant les sorties structurées (Structured Outputs) ou d&amp;rsquo;un raisonnement logique très avancé avec le modèle o1.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h3 id="recommandation-pour-le-routage-multi-modèles">Recommandation pour le routage multi-modèles
&lt;/h3>&lt;p>Plutôt que de s&amp;rsquo;appuyer sur une seule API (vendor lock-in), la tendance future est l&amp;rsquo;architecture de &lt;strong>&amp;ldquo;routage LLM&amp;rdquo;&lt;/strong> qui bascule dynamiquement d&amp;rsquo;un modèle à l&amp;rsquo;autre en fonction de la difficulté et de l&amp;rsquo;importance de la tâche.
Par exemple, vous pouvez répondre aux questions simples des utilisateurs avec des modèles peu coûteux et rapides comme &lt;code>GPT-4o-mini&lt;/code> ou &lt;code>Gemini 1.5 Flash&lt;/code>, et ne basculer la tâche sur &lt;code>Claude 3.5 Sonnet&lt;/code> que si un traitement complexe est jugé nécessaire, permettant d&amp;rsquo;atteindre un équilibre optimal entre coût et performances.&lt;/p>
&lt;p>L&amp;rsquo;évolution de l&amp;rsquo;IA ne s&amp;rsquo;arrête jamais. Comprenez profondément les forces et faiblesses de chaque API ainsi que les caractéristiques de leur architecture, et construisez des applications d&amp;rsquo;IA flexibles et évolutives.&lt;/p></description></item></channel></rss>