<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>api - Tag - Jordan Chapuy – IA, tech et produit, simplement</title><link>https://jordanchapuy.com/tags/api/</link><description>api - Tag - Jordan Chapuy – IA, tech et produit, simplement</description><generator>Hugo -- gohugo.io</generator><language>fr</language><lastBuildDate>Sat, 07 Nov 2026 08:30:00 +0100</lastBuildDate><atom:link href="https://jordanchapuy.com/tags/api/" rel="self" type="application/rss+xml"/><item><title>C'est quoi une API (Application Programming Interface) ?</title><link>https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-api/</link><pubDate>Sat, 07 Nov 2026 08:30:00 +0100</pubDate><author>Jordan Chapuy</author><guid>https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-api/</guid><description><![CDATA[<p>« C&rsquo;est bloqué côté API. » « Il nous faudrait une API pour ça. » « Est-ce que l&rsquo;outil a une API ? »</p>
<p>Si vous travaillez dans le numérique, vous avez forcément entendu une de ces phrases. Peut-être en hochant la tête, avec une idée assez floue de ce qu&rsquo;il y avait derrière. Et c&rsquo;est normal : c&rsquo;est un de ces mots que tout le monde utilise et que personne ne prend le temps d&rsquo;expliquer.</p>
<p>Je l&rsquo;ai effleuré dans <a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-cle-api/" rel="">mon article sur les clés d&rsquo;API</a>, le temps de trois paragraphes. Mais je me suis dit que je n&rsquo;expliquais pas assez. Parce que les API ne servent pas qu&rsquo;aux agents IA : elles sont derrière à peu près toutes les applications que vous utilisez.</p>
<p>De mon côté, je baigne dedans depuis longtemps. J&rsquo;en ai consommé dans les applications mobiles que j&rsquo;ai développées, j&rsquo;en ai conçu, et j&rsquo;en ai souvent discuté avec des PO. Alors essayons de rendre ça simple.</p>
<p>Pour ça, je vous emmène à l&rsquo;hôtel. Oui, encore. On y était déjà pour la clé d&rsquo;API, autant y rester :)</p>
<h2 id="le-room-service">Le room service</h2>
<p>Vous êtes dans votre chambre, il est tard, vous avez faim. Vous n&rsquo;allez pas descendre en cuisine, ouvrir le frigo et vous faire un gratin au milieu des cuisiniers. Ce n&rsquo;est pas votre cuisine, vous ne savez pas où sont rangées les choses, et puis, vous n&rsquo;avez tout simplement pas le droit d&rsquo;y être.</p>
<p>À la place, il y a la carte du room service posée sur la table de votre chambre. Vous la lisez, vous choisissez ce que vous voulez, puis vous appelez pour commander ce délicieux gratin de ravioles (car vous avez très envie de cette spécialité de la Drôme) en donnant votre numéro de chambre. Un peu plus tard, on frappe : votre plateau est là.</p>
<p>Vous n&rsquo;avez aucune idée de ce qui s&rsquo;est passé en cuisine. Combien de cuisiniers, quel four, d&rsquo;où vient la crème. Et vous n&rsquo;avez pas besoin de le savoir. Vous avez fait une demande prévue par le menu, et vous avez reçu ce qui était annoncé.</p>
<p>Une API, c&rsquo;est ce room service. Mais entre deux logiciels.</p>
<h2 id="une-api-avec-des-mots-simples">Une API, avec des mots simples</h2>
<p>API veut dire <em>Application Programming Interface</em>, interface de programmation en français. Le mot important, c&rsquo;est <strong>interface</strong> : un point de contact entre deux choses, avec des règles pour la manière de se parler.</p>
<p>Quand vous utilisez une application, vous passez par son interface graphique : des écrans, des boutons, des menus. C&rsquo;est fait pour des humains. Un logiciel, lui, n&rsquo;a ni yeux ni doigts. Quand il veut quelque chose d&rsquo;un autre logiciel, il passe par une autre porte : l&rsquo;API. C&rsquo;est une liste de demandes que le service accepte de recevoir, avec la manière de les formuler et ce qu&rsquo;il répondra.</p>
<p>Prenez l&rsquo;application météo de votre téléphone. Elle n&rsquo;a pas de stations météo sur les toits. Elle demande les prévisions à un service spécialisé, via son API, et se contente de les afficher joliment. Le service météo, c&rsquo;est la cuisine. L&rsquo;application, c&rsquo;est vous dans la chambre.</p>
<h2 id="une-demande-une-réponse">Une demande, une réponse</h2>
<p>Concrètement, ça fonctionne par échanges. Un logiciel envoie une demande (on dit une <strong>requête</strong>), l&rsquo;autre renvoie une <strong>réponse</strong>.</p>
<p>La requête de l&rsquo;application météo ressemble, en gros, à « donne-moi la météo de Paris pour demain ». Et la réponse pourrait ressembler à ça :</p>
<div class="code-block open" style="counter-reset: code-block 0">
    <div class="code-header language-json">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copier dans le presse-papiers"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;ville&#34;</span><span class="p">:</span> <span class="s2">&#34;Paris&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;date&#34;</span><span class="p">:</span> <span class="s2">&#34;2026-11-08&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;temperature&#34;</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;ciel&#34;</span><span class="p">:</span> <span class="s2">&#34;nuageux&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;pluie&#34;</span><span class="p">:</span> <span class="s2">&#34;20 %&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>
<p>Pas de jolie icône de nuage, pas de mise en page. Juste les informations, rangées dans un format que n&rsquo;importe quel programme sait lire (celui-là s&rsquo;appelle <strong>JSON</strong>, et vous en croiserez très souvent).</p>
<p>C&rsquo;est un point que je trouve important quand on travaille sur un produit : <strong>l&rsquo;API donne les informations, pas l&rsquo;affichage</strong>. C&rsquo;est l&rsquo;application qui décide quoi en faire : un gros chiffre sur l&rsquo;écran d&rsquo;accueil, un widget, une notification « prenez un parapluie ». La même réponse peut servir un site web, une application mobile, une montre connectée ou l&rsquo;application d&rsquo;un partenaire.</p>
<h2 id="la-carte-cest-la-documentation">La carte, c&rsquo;est la documentation</h2>
<p>Revenons au room service. Ce qui rend tout ça possible, c&rsquo;est la carte. Elle dit ce qu&rsquo;on peut commander, comment le demander, et ce qu&rsquo;on va recevoir.</p>
<p>Une API a la même chose : sa <strong>documentation</strong>. Elle est écrite par l&rsquo;équipe qui fabrique l&rsquo;API à destination des développeurs qui vont s&rsquo;en servir. « Pour obtenir la météo, envoyez telle demande à telle adresse, en précisant la ville et la date. Vous recevrez la température, le ciel et le risque de pluie. »</p>
<p>Et comme au room service, <strong>ce qui n&rsquo;est pas sur la carte ne se commande pas</strong>. Vous pouvez réclamer une pizza tant que vous voulez, si elle n&rsquo;y est pas, la cuisine ne la fera pas. Une API ne fait que ce qui a été prévu. Si elle ne donne pas la vitesse du vent, l&rsquo;application ne pourra pas l&rsquo;afficher, même si le service météo la connaît parfaitement.</p>
<p>C&rsquo;est souvent ce qui se cache derrière « ce n&rsquo;est pas possible, ce n&rsquo;est pas dans l&rsquo;API ». Le service sait peut-être le faire, mais il ne le propose simplement pas à l&rsquo;extérieur (ou pas encore).</p>
<h2 id="il-y-en-a-partout">Il y en a partout</h2>
<p>Une fois qu&rsquo;on a l&rsquo;image en tête, on en voit partout.</p>
<ul>
<li>Vous payez sur un site marchand : le site transmet le paiement à l&rsquo;API d&rsquo;un service comme Stripe ou PayPal, qui répond « accepté » ou « refusé ».</li>
<li>Votre fil d&rsquo;actualités sur votre réseau social préféré, il vient d&rsquo;une API. Tout l&rsquo;algorithme est sur le serveur.</li>
<li>Vos outils se parlent dans n8n ou Zapier : chaque étape, c&rsquo;est un appel à l&rsquo;API d&rsquo;un service.</li>
<li>Et les IA aussi : Claude et ChatGPT ont leur API, qui permet à d&rsquo;autres applications d&rsquo;utiliser leurs modèles (c&rsquo;est d&rsquo;ailleurs comme ça qu&rsquo;on peut <a href="https://jordanchapuy.com/posts/2025/02/creer-des-fonctionnalites-augmentees-par-ia-dans-une-application-mobile-llm-intelligence-artificielle/" rel="">ajouter de l&rsquo;IA dans une application mobile</a>).</li>
</ul>
<p>Et puis il y a toutes celles qu&rsquo;on ne voit jamais. Par exemple un outil de tracking pour permettre d&rsquo;analyser le trafic d&rsquo;un site. Ou même les API que le serveur lui-même consomme pour vous fournir les bonnes informations - eh oui, il y a parfois des intermédiaires.</p>
<h2 id="publique-partenaire-ou-interne">Publique, partenaire ou interne</h2>
<p>Toutes les API ne sont pas ouvertes à tout le monde.</p>
<p>Le room service est réservé aux clients de l&rsquo;hôtel. Mais la même cuisine prépare aussi les plats du restaurant, du bar, et peut-être les repas du personnel. Une cuisine, plusieurs guichets, chacun avec sa carte.</p>
<p>Pour les API, c&rsquo;est pareil :</p>
<ul>
<li>une API <strong>publique</strong> est ouverte à qui veut (souvent avec une inscription et <a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-cle-api/" rel="">une clé</a>) : la météo, Notion, Slack ;</li>
<li>une API <strong>partenaire</strong> n&rsquo;est accessible qu&rsquo;à quelques entreprises, avec un contrat ;</li>
<li>une API <strong>interne</strong> ne sert qu&rsquo;à l&rsquo;entreprise elle-même, entre ses propres logiciels et ses équipes.</li>
</ul>
<p>Dans les applications mobiles que j&rsquo;ai développées, il y avait l&rsquo;application d&rsquo;un côté, le serveur (le <em>back-end</em>) de l&rsquo;autre, et une API interne au milieu pour qu&rsquo;ils se parlent. Parfois, des API de services tiers venaient s&rsquo;y ajouter. On peut même aller jusqu&rsquo;à fabriquer une API sur mesure pour une seule application, j&rsquo;en parlais <a href="https://jordanchapuy.com/posts/2023/12/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-3-backend-for-frontend-bff" rel="">à propos du Backend for Frontend</a>.</p>
<h2 id="ce-que-ça-change-quand-on-travaille-sur-un-produit">Ce que ça change quand on travaille sur un produit</h2>
<p>Si vous êtes PO, designer, chef de projet, ou simplement curieux de ce que racontent les développeurs, voilà ce que je trouve utile d&rsquo;avoir en tête.</p>
<p><strong>Une API, c&rsquo;est un contrat.</strong> Une fois la carte écrite et acceptée, la cuisine et les clients peuvent avancer chacun de leur côté. L&rsquo;équipe mobile n&rsquo;a pas besoin d&rsquo;attendre que le serveur soit terminé : elle connaît la forme des réponses et peut travailler avec de fausses données en attendant (on appelle ça des <em>mocks</em>). C&rsquo;est souvent ce qu&rsquo;il y a derrière « on attend l&rsquo;API / on attend le back-end » : soit le plat n&rsquo;est pas encore cuisiné, soit, plus embêtant, la carte n&rsquo;est pas encore écrite.</p>
<p><strong>On ne change pas la carte du jour au lendemain.</strong> Si vous retirez le gratin, les habitués qui le commandaient chaque soir vont être déçus. Pour une API, c&rsquo;est pire : les logiciels qui l&rsquo;utilisent cassent. C&rsquo;est pour ça qu&rsquo;on parle de <strong>versions</strong>. On garde l&rsquo;ancienne carte un moment, on publie la nouvelle à côté, et on prévient avant de retirer l&rsquo;ancienne. Une modification qui paraît anodine (renommer un champ, changer le format d&rsquo;une date) peut demander beaucoup de coordination quand d&rsquo;autres en dépendent. Faites discuter vos équipes !</p>
<p><strong>La cuisine a ses limites.</strong> Elle ne peut pas préparer mille plateaux à la minute. Beaucoup d&rsquo;API limitent le nombre de demandes autorisées (on parle de <em>rate limit</em>), et certaines sont payantes à l&rsquo;usage. Bon à savoir avant d&rsquo;imaginer une fonctionnalité qui interroge un service toutes les secondes.</p>
<p><strong>Dépendre d&rsquo;une API, c&rsquo;est dépendre de quelqu&rsquo;un.</strong> Si la cuisine ferme, plus de room service. Si un service tiers tombe en panne, change ses conditions ou ferme son API, la fonctionnalité qui en dépend s&rsquo;arrête aussi. Ça ne veut pas dire qu&rsquo;il faut s&rsquo;en priver, mais ça vaut le coup de se demander ce que fait le produit quand la réponse n&rsquo;arrive pas.</p>
<p><strong>Il faut dire qui commande.</strong> Au room service, on donne son numéro de chambre, pour savoir où livrer et sur quelle note mettre le plateau. La plupart des API demandent la même chose. C&rsquo;est le rôle de la <a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-cle-api/" rel="">clé d&rsquo;API</a>, le badge d&rsquo;hôtel dont je parlais dans l&rsquo;article précédent.</p>
<h2 id="et-les-agents-ia-dans-tout-ça-">Et les agents IA, dans tout ça ?</h2>
<p>Un <a href="https://jordanchapuy.com/posts/2026/05/c-est-quoi-un-agent-ia/" rel="">agent IA</a> est un logiciel. Quand vous lui demandez de lire votre agenda ou de créer une page Notion, il ne va pas cliquer dans l&rsquo;interface comme vous le feriez (enfin, la plupart du temps). Il passe par l&rsquo;API du service.</p>
<p>Souvent pas directement : un <a href="https://jordanchapuy.com/posts/2026/10/c-est-quoi-un-connecteur-ia-relier-claude-ou-chatgpt-a-vos-outils-en-quelques-clics/" rel="">connecteur</a> ou un <a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-un-mcp-model-context-protocol/" rel="">MCP</a> fait l&rsquo;intermédiaire. Mais en bout de chaîne, ce sont souvent des appels à une API. C&rsquo;est pour ça qu&rsquo;un service sans API est difficile à brancher à un agent.</p>
<p>J&rsquo;en parle plus en détail dans <a href="https://jordanchapuy.com/posts/2026/10/comment-connecter-son-agent-ia-a-ses-outils-gmail-notion-google-agenda/" rel="">la série sur la connexion d&rsquo;un agent à vos outils</a>.</p>
<h2 id="avec-quoi-on-repart-">Avec quoi on repart ?</h2>
<p>Une API, au fond, c&rsquo;est une forme de discussion et un contrat entre logiciels. On ne débarque pas dans la cuisine des autres : on lit la carte, on commande ce qui est prévu, on donne son numéro de chambre, et on reçoit son plateau. On fait une demande, on obtient une réponse.</p>
<p>Il existe aussi un autre cas intéressant : quand c&rsquo;est l&rsquo;hôtel qui doit vous prévenir, sans que vous ayez rien demandé. C&rsquo;est le principe du <strong>webhook</strong>, et il aura son article dans la série.</p>
<hr>
<blockquote>
<p><strong>Connecter un agent IA à d&rsquo;autres services</strong> :</p>
<ul>
<li><a href="https://jordanchapuy.com/posts/2026/10/comment-connecter-son-agent-ia-a-ses-outils-gmail-notion-google-agenda/" rel="">Comment connecter son agent IA à ses outils (Gmail, Notion, Google Agenda&hellip;) ?</a></li>
<li><a href="https://jordanchapuy.com/posts/2026/10/c-est-quoi-un-connecteur-ia-relier-claude-ou-chatgpt-a-vos-outils-en-quelques-clics/" rel="">C&rsquo;est quoi un connecteur IA ? Relier Claude ou ChatGPT à vos outils en quelques clics</a></li>
<li><a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-un-mcp-model-context-protocol/" rel="">C&rsquo;est quoi un MCP ? Le port USB-C qui branche votre agent IA à vos outils</a></li>
<li><a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-cle-api/" rel="">C&rsquo;est quoi une clé d&rsquo;API ? Le badge d&rsquo;hôtel qui ouvre vos outils à votre agent IA</a></li>
<li>C&rsquo;est quoi un CLI ?</li>
<li>C&rsquo;est quoi un webhook ?</li>
</ul>
<p>Hors-série complémentaire :</p>
<ul>
<li><a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-api/" rel="">C&rsquo;est quoi une API (Application Programming Interface) ?</a></li>
</ul></blockquote>
]]></description></item><item><title>C'est quoi une clé d'API ? Le badge d'hôtel qui ouvre vos outils à votre agent IA</title><link>https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-cle-api/</link><pubDate>Wed, 04 Nov 2026 08:30:00 +0100</pubDate><author>Jordan Chapuy</author><guid>https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-cle-api/</guid><description><![CDATA[<p>Vous voulez brancher un nouvel outil à votre agent. Un MCP, un service dans n8n, une petite application. Tout se passe bien, et puis arrive un champ vide avec cette consigne : « Collez votre clé d&rsquo;API ici ».</p>
<p>Une clé d&rsquo;API, c&rsquo;est une longue suite de lettres et de chiffres qui pourrait ressembler à <code>sk-4f9a2c...</code>. Et partout où on en parle, le même avertissement revient : ne la partagez avec personne.</p>
<p>Alors c&rsquo;est quoi au juste ? Un mot de passe ? Un code d&rsquo;accès ? Un peu des deux. Pour l&rsquo;expliquer, je vous propose une image : <strong>le badge d&rsquo;une chambre d&rsquo;hôtel</strong>. Gardez-la en tête, on va s&rsquo;en servir tout le long.</p>
<h2 id="pourquoi-connecter-son-agent-déjà-">Pourquoi connecter son agent, déjà ?</h2>
<p>Petit rappel, si vous arrivez directement ici.</p>
<p><a href="https://jordanchapuy.com/posts/2026/05/c-est-quoi-un-agent-ia/" rel="">Un agent IA</a> repose sur un modèle qui a appris énormément de choses sur le monde. Mais il ne sait rien de vous. Il n&rsquo;a jamais vu vos mails, votre agenda, vos notes ou vos projets. Ses réponses sont justes en général, rarement justes <strong>pour vous</strong>.</p>
<p>En le branchant à vos outils, il travaille avec vos vraies données, à jour. Et il peut agir à votre place : ranger, créer, préparer, envoyer.</p>
<p>C&rsquo;est le sujet de <a href="https://jordanchapuy.com/posts/2026/10/comment-connecter-son-agent-ia-a-ses-outils-gmail-notion-google-agenda/" rel="">l&rsquo;article qui ouvre cette série</a>, si vous voulez creuser.</p>
<h2 id="dabord-cest-quoi-une-api-">D&rsquo;abord, c&rsquo;est quoi une API ?</h2>
<p>Quand vous utilisez Notion, vous passez par son interface : des pages, des boutons, des menus. C&rsquo;est pensé pour des humains, avec des yeux et une interface pour interagir (souris, trackpad, écran tactile).</p>
<p>Un programme lui n&rsquo;a pas besoin de toute cette mise en page et navigation. Il se sert d&rsquo;une autre entrée : l&rsquo;<strong>API</strong>, pour <em>Application Programming Interface</em> (interface de programmation, en français). C&rsquo;est une liste de demandes que le service accepte, formulées d&rsquo;une manière bien précise.</p>
<p>Ce sont les développeurs du service qui vont créer et gérer l&rsquo;API pour que d&rsquo;autres développeurs (et donc programmes) puissent interragir avec le service en question d&rsquo;une manière cadrée et définie à l&rsquo;avance. Une documentation n&rsquo;est jamais bien loin - « Pour créer une tâche, il faut appeler cette url et il faudra indiquer ces informations dans ces champs là ».</p>
<p>Presque tous les services en ont une : Notion, Slack, et bien sûr les IA elles-mêmes. Petite note, les <a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-un-mcp-model-context-protocol/" rel="">MCP</a> et <a href="https://jordanchapuy.com/posts/2026/10/c-est-quoi-un-connecteur-ia-relier-claude-ou-chatgpt-a-vos-outils-en-quelques-clics/" rel="">connecteurs</a> dont je parlais dans les articles précédents ne font parfois rien d&rsquo;autre que parler à cette API à votre place.</p>
<p>J&rsquo;ai pris le temps de détailler tout ça, avec une histoire de room service, dans <a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-api/" rel="">un article dédié aux API</a>.</p>
<h2 id="et-la-clé-alors-">Et la clé, alors ?</h2>
<p>Une API ne répond pas à n&rsquo;importe qui. Avant de donner vos pages Notion, elle veut savoir deux choses : qui demande ? A-t-il le droit ?</p>
<p>La clé répond aux deux d&rsquo;un coup. Le programme la joint à chacune de ses demandes, et l&rsquo;API sait à qui elle a affaire.</p>
<p>C&rsquo;est là que l&rsquo;hôtel entre en scène. À votre arrivée, la réception vérifie votre identité <strong>une fois</strong>, puis vous tend un badge. Ensuite, plus besoin de sortir votre passeport devant chaque porte : vous passez le badge, et ça s&rsquo;ouvre. La porte ne sait pas vraiment qui vous êtes. Elle sait que ce badge est lié à la chambre 117 et qu&rsquo;il a le droit d&rsquo;entrer.</p>
<p>La clé d&rsquo;API fonctionne pareil. Vous vous connectez une fois à votre compte, vous créez une clé, et vous la donnez à l&rsquo;outil ou à l&rsquo;agent. Il ne connaîtra jamais votre mot de passe. Et le service considère chaque demande faite avec cette clé comme venant de vous.</p>
<p>Pour moi, ça n&rsquo;a rien de nouveau. En tant que développeur, je manipule des clés d&rsquo;API depuis bien avant les LLM et les agents. Dès qu&rsquo;on veut qu&rsquo;un programme utilise un service, c&rsquo;est le geste de base : on fait ses appels avec une clé pour s&rsquo;authentifier. Dans les applications mobiles que j&rsquo;ai créées pour mes clients, il y en avait parfois pour des services tiers.</p>
<p>Ce qui change aujourd&rsquo;hui, c&rsquo;est que ce ne sont plus seulement les développeurs qui en voient passer. Avec les agents, tout le monde finit par tomber dessus.</p>
<h2 id="ce-qui-est-bien-avec-une-clé-dapi">Ce qui est bien avec une clé d&rsquo;API</h2>
<p><strong>Ça marche presque partout.</strong> Les clés d&rsquo;API existent depuis longtemps, et quasiment tous les services en proposent. Même ceux qui n&rsquo;ont ni connecteur ni MCP. Et ça ne dépend pas de l&rsquo;IA que vous utilisez : la même clé fonctionne avec Claude, ChatGPT, n8n ou un petit script.</p>
<p><strong>Elle agit en votre nom.</strong> Au bar de l&rsquo;hôtel, on vous propose de mettre la consommation sur la note de la chambre. Le badge est lié à vous. Une clé aussi : ce que l&rsquo;agent fait avec, le service le compte comme fait par vous, sur votre compte, avec vos données.</p>
<p><strong>On peut en avoir plusieurs.</strong> La réception fait un badge par personne de la chambre. De la même façon, on peut créer une clé par usage : une pour l&rsquo;agent, une pour n8n, une pour telle application. Chacune avec son nom. On sait qui fait quoi, et on peut en couper une sans toucher aux autres.</p>
<p><strong>On choisit les portes.</strong> Votre badge ouvre votre chambre, la salle de sport et la piscine. Pas les autres chambres, ni la cuisine. Beaucoup de services permettent la même chose : une clé en lecture seule, une clé qui ne voit qu&rsquo;un seul projet, une clé qui peut créer mais pas supprimer. On dit qu&rsquo;on « scope » la clé, qu&rsquo;on limite sa portée.</p>
<p>J&rsquo;aime bien quand un service le permet. Je peux restreindre la clé à ce dont l&rsquo;outil a vraiment besoin. C&rsquo;est le principe que je défends depuis le début de cette série : le meilleur moyen d&rsquo;empêcher un agent de faire une bêtise, ce n&rsquo;est pas de le lui interdire dans un prompt, c&rsquo;est de ne pas lui en donner la capacité.</p>
<p><strong>On ne donne pas son mot de passe.</strong> L&rsquo;agent n&rsquo;a jamais vos identifiants. Il ne peut pas essayer de se connecter avec sur un autre service. Il ne va pas non plus le divulguer, volontairement ou non. Attention par contre, la clé, elle, pourrait fuiter selon la façon dont on la donne à l&rsquo;agent.</p>
<p><strong>On la retire en un clic.</strong> Badge perdu ? La réception le désactive et vous en refait un. Votre séjour continue. Une clé, c&rsquo;est pareil : vous la supprimez, votre compte reste intact, votre mot de passe ne change pas, vos autres clés continuent de fonctionner. Si quelqu&rsquo;un a trouve une clé qui a fuité, il ne peut rien en faire, elle a été désactivé.</p>
<h2 id="où-on-la-trouve-où-on-la-met">Où on la trouve, où on la met</h2>
<p><strong>Pour la trouver</strong>, direction les paramètres du service. La rubrique s&rsquo;appelle souvent « API », « Développeurs », « Intégrations » ou « Clés ». On clique sur « Créer une clé », on lui donne un nom, parfois on choisit ses droits, et la clé apparaît.</p>
<p>Souvent, elle n&rsquo;est affichée <strong>qu&rsquo;une seule fois</strong>. Copiez-la tout de suite. Si vous la perdez, pas de panique : on la supprime et on en refait une. Comme le badge.</p>
<p><strong>Pour la mettre</strong>, ça dépend de l&rsquo;outil. Certains ont un champ prévu pour (n8n, la configuration d&rsquo;un MCP, une application). Les agents qui tournent sur votre machine la lisent souvent dans un fichier de réglages, rangé à part.</p>
<p>Un réflexe à prendre, par contre : <strong>évitez de coller la clé directement dans la conversation</strong>. Ce que vous écrivez dans le chat est conservé dans l&rsquo;historique, chez le fournisseur de l&rsquo;IA, et peut se retrouver dans d&rsquo;autres fichiers. Une clé, c&rsquo;est mieux rangée à un seul endroit, prévu pour ça.</p>
<h2 id="clé-dapi-ou-connexion-avec-son-compte-">Clé d&rsquo;API ou connexion avec son compte ?</h2>
<p>Dans <a href="https://jordanchapuy.com/posts/2026/10/c-est-quoi-un-connecteur-ia-relier-claude-ou-chatgpt-a-vos-outils-en-quelques-clics/" rel="">l&rsquo;article sur les connecteurs</a>, je disais que l&rsquo;un de leurs avantages, c&rsquo;est de ne pas avoir de clé à manipuler. On clique sur « Se connecter avec Google », on accepte les accès, et c&rsquo;est fini.</p>
<p>En coulisse, il y a quand même une sorte de clé. Sauf que c&rsquo;est le service qui la fabrique, la range et la renouvelle tout seul. Vous n&rsquo;y touchez jamais. (Ça s&rsquo;appelle OAuth, et vous n&rsquo;avez pas besoin de retenir le nom.)</p>
<p>Alors, laquelle choisir ? J&rsquo;ai envie dire, peu importe, ça aura souvent la même finalité. Regardez peut-être s&rsquo;il y a une différence dans les droits d&rsquo;accès accordés (le scope).</p>
<h2 id="les-risques">Les risques</h2>
<p><strong>C&rsquo;est un secret utile.</strong> Un badge trouvé dans le couloir ouvre votre chambre. La porte ne vérifie pas que c&rsquo;est bien vous qui le tenez. Une clé d&rsquo;API, c&rsquo;est pareil : celui qui la possède agit en votre nom. Il peut lire vos données, les modifier ou les supprimer selon les droits de la clé. Et si le service est payant, il dépense votre argent.</p>
<p><strong>Elle fuit facilement.</strong> Une capture d&rsquo;écran partagée un peu vite, un message à un collègue, un document collaboratif, un projet publié en ligne&hellip; Une clé, c&rsquo;est du texte, et le texte se copie partout. Certains services repèrent les clés publiées par erreur et les désactivent d&rsquo;office mais ne comptez pas trop dessus.</p>
<p><strong>Les agents aussi peuvent la lire.</strong> Un agent qui a accès à vos fichiers a accès à ceux où dorment vos clés. Un MCP ou un skill malveillant peut aller les chercher. C&rsquo;est un des risques que je décrivais <a href="https://jordanchapuy.com/posts/2026/08/evitez-les-skills-ia-malveillants-auditez-les-automatiquement/" rel="">à propos des skills</a> : vérifiez ce que vous installez.</p>
<p>Quelques réflexes simples, donc :</p>
<ul>
<li>une clé par usage, avec un nom clair ;</li>
<li>les droits minimum, quand le service permet de les choisir ;</li>
<li>un plafond de dépense, quand le service est payant ;</li>
<li>jamais dans le chat, sur une capture ou dans un document partagé ;</li>
<li>au moindre doute, on la supprime et on en refait une. C&rsquo;est l&rsquo;affaire d&rsquo;une minute.</li>
</ul>
<div class="details admonition note open">
        <div class="details-summary admonition-title">
            <i class="icon fas fa-pencil-alt" aria-hidden="true"></i>Et Claude ou ChatGPT, dans tout ça ?<i class="details-icon fas fa-angle-right" aria-hidden="true"></i>
        </div>
        <div class="details-content">
            <div class="admonition-content">Claude et ChatGPT s&rsquo;utilisent aussi via API, avec une clé. C&rsquo;est comme ça que n8n, un script ou une autre application peuvent se servir de leurs modèles. Mais attention : c&rsquo;est facturé à part, à l&rsquo;usage, en dehors de votre abonnement. Votre abonnement Claude ou ChatGPT ne couvre pas ce que vous consommez avec une clé. Raison de plus pour fixer un plafond de dépense.</div>
        </div>
    </div><h2 id="un-badge-pas-une-baguette-magique">Un badge, pas une baguette magique</h2>
<p>Une clé d&rsquo;API n&rsquo;a rien de mystérieux, ni de réservé aux développeurs. C&rsquo;est un badge. Il ouvre les bonnes portes à votre agent, en votre nom, sans jamais lui confier votre mot de passe.</p>
<p>Et comme un badge d&rsquo;hôtel, on le garde pour soi, on ne lui donne pas plus de portes que nécessaire, et on le fait désactiver au moindre doute.</p>
<p>Prochaine étape de la série : le <strong>CLI</strong>. Ces outils qu&rsquo;on pilote en tapant des commandes, que les agents adorent, et qui réclament souvent&hellip; une clé d&rsquo;API.</p>
<hr>
<blockquote>
<p><strong>Connecter un agent IA à d&rsquo;autres services</strong> :</p>
<ul>
<li><a href="https://jordanchapuy.com/posts/2026/10/comment-connecter-son-agent-ia-a-ses-outils-gmail-notion-google-agenda/" rel="">Comment connecter son agent IA à ses outils (Gmail, Notion, Google Agenda&hellip;) ?</a></li>
<li><a href="https://jordanchapuy.com/posts/2026/10/c-est-quoi-un-connecteur-ia-relier-claude-ou-chatgpt-a-vos-outils-en-quelques-clics/" rel="">C&rsquo;est quoi un connecteur IA ? Relier Claude ou ChatGPT à vos outils en quelques clics</a></li>
<li><a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-un-mcp-model-context-protocol/" rel="">C&rsquo;est quoi un MCP ? Le port USB-C qui branche votre agent IA à vos outils</a></li>
<li><a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-cle-api/" rel="">C&rsquo;est quoi une clé d&rsquo;API ? Le badge d&rsquo;hôtel qui ouvre vos outils à votre agent IA</a></li>
<li>C&rsquo;est quoi un CLI ?</li>
<li>C&rsquo;est quoi un webhook ?</li>
</ul>
<p>Hors-série complémentaire :</p>
<ul>
<li><a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-api/" rel="">C&rsquo;est quoi une API (Application Programming Interface) ?</a></li>
</ul></blockquote>
]]></description></item><item><title>Créer des fonctionnalités augmentées par l'IA dans une application mobile</title><link>https://jordanchapuy.com/posts/2025/02/creer-des-fonctionnalites-augmentees-par-ia-dans-une-application-mobile-llm-intelligence-artificielle/</link><pubDate>Tue, 04 Feb 2025 15:23:00 +0100</pubDate><author>Jordan Chapuy</author><guid>https://jordanchapuy.com/posts/2025/02/creer-des-fonctionnalites-augmentees-par-ia-dans-une-application-mobile-llm-intelligence-artificielle/</guid><description><![CDATA[<p>Bienvenue en 2025. L&rsquo;IA est toujours à la mode et elle s&rsquo;intègre de plus en plus dans notre quotidien. Mais qu&rsquo;en est-il de notre poche ? Oui, vous savez, on y glisse nos smartphones - un autre truc qui a eu son moment de gloire il y a quelques années, et avec lequel on est maintenant inséparable.</p>
<p>On a envie d&rsquo;associer les deux, d&rsquo;avoir notre IA de poche. En tant que créateur d&rsquo;applications mobiles (Product Owner, Développeur, Designer), on peut y participer !</p>
<p>J&rsquo;en profite pour expliciter les différentes interactions qu&rsquo;il peut y avoir avec l&rsquo;IA sur un smartphone :</p>
<ul>
<li>Un utilisateur peut jouer avec l&rsquo;IA du système qui est intégré dans divers composants pour par exemple reformuler une phrase, générer une image, faire une action, etc. Le développeur n&rsquo;a pas la main dessus, c&rsquo;est le système qui gère.</li>
<li>Le développeur peut apprendre à l&rsquo;IA du système comment interagir avec son application, en exposant certaines données et intentions. L&rsquo;utilisateur pourra par exemple lancer une action réalisée par l&rsquo;application via Siri.</li>
<li>Le développeur peut créer des fonctionnalités boostées à l&rsquo;IA au sein de son application. L&rsquo;utilisateur pourra s&rsquo;en servir depuis l&rsquo;application.</li>
</ul>
<p>Aujourd&rsquo;hui, on va se concentrer sur le dernier cas : créer des fonctionnalités augmentées par l&rsquo;IA. On va se donner un aperçu de ce que l&rsquo;on pourrait faire dans nos applications et des options pour y arriver.</p>
<h1 id="quelques-exemples-dusages">Quelques exemples d&rsquo;usages</h1>
<p>Ce que l&rsquo;on voit le plus souvent, ce sont des fonctionnalités qui <strong>manipulent un contenu textuel</strong> déjà présent. On propose de résumer l&rsquo;article actuellement affiché dans une application de news, par exemple. On pourrait aussi sélectionner un paragraphe et demander plus d&rsquo;explications. Ou même traduire. On peut également proposer à l&rsquo;utilisateur d&rsquo;améliorer le contenu qu&rsquo;il a créé - il pourrait reformuler, corriger, compléter.</p>
<p><strong>Générer du contenu</strong> grâce aux données personnalisées est un autre usage intéressant. Une application de liste de courses pourrait par exemple proposer des idées de recette en fonction des aliments ajoutés par l&rsquo;utilisateur. Peut-être même que des recommandations pourraient apparaître autour de la nutrition.</p>
<p>Et pourquoi pas un champ de texte voire un chat pour <strong>trouver et utiliser des fonctionnalités existantes</strong> dans l&rsquo;application ? Sur une application complexe avec beaucoup de pages et de profondeur, ce pourrait être pratique. L&rsquo;utilisateur pourrait demander de &ldquo;réserver un aller-retour à Valence pour demain&rdquo; ou &ldquo;envoyer 100€ à ma mère&rdquo; avec ses propres mots.</p>
<p>De nombreuses possibilités existent aussi du côté des jeux. En faisant varier des dialogues, ou en les créant pleinement. En <strong>générant des niveaux</strong>, des parties, des quiz. Peut-être même que l&rsquo;utilisateur pourrait <strong>indiquer un thème</strong>, non prévu initialement, et le modèle d&rsquo;IA ferait le reste. On commence tout juste à gratter la surface, à imaginer de nouveaux usages.</p>
<h1 id="état-des-lieux">État des lieux</h1>
<p>Les innovations et les possibilités qui tournent autour de l&rsquo;IA vont vite (sauf chez Apple, qui a à la fois du retard et un cycle de release long - petite balle perdue gratuite :)). Où en est-on aujourd&rsquo;hui ?</p>
<p>Commençons du côté de la pomme. Le flagship actuel est l&rsquo;iPhone 16 Pro. iOS est en version 18.2.1. Apple Intelligence est disponible à partir de iOS 18.1 sur l&rsquo;ensemble des modèles d&rsquo;iPhone 16, ainsi que le 15 Pro et le 15 Pro Max. En Europe, on doit cependant attendre le mois d&rsquo;avril pour accéder au système Apple Intelligence.</p>
<p>Sur Android, la dernière version est actuellement la 15 (API 35). Gemini est l&rsquo;actuel modèle d&rsquo;IA de Google, et d&rsquo;autres constructeurs comme Samsung ajoutent aussi leur propre couche d&rsquo;<em>intelligence</em> (Galaxy IA). Certains smartphones récents ont le droit à <a href="https://ai.google.dev/gemini-api/docs/get-started/android_aicore" target="_blank" rel="noopener noreffer ">Gemini nano</a> pour une exécution locale : c&rsquo;est à partir du Google Pixel 8 Pro et Samsung S24, et d&rsquo;autres appareils s&rsquo;ajoutent progressivement.</p>
<p>Les deux systèmes proposent bien aux utilisateurs des fonctionnalités augmentées par l&rsquo;IA. Mais côté développement, <strong>on est très limité pour créer</strong>. iOS ne propose que les <a href="https://developer.apple.com/documentation/appintents" target="_blank" rel="noopener noreffer ">App Intents</a> pour faire découvrir nos applications à Siri et Spotlight. Et sur Android, Gemini nano est au stade expérimental. Il y a <strong>très peu d&rsquo;appareils compatibles</strong> et <a href="https://developer.android.com/ai/gemini-nano#supported-functionality" target="_blank" rel="noopener noreffer ">les possibilités sont <strong>limitées</strong></a>.</p>
<p>À côté de cela, on voit d&rsquo;autres solutions légères qui émergent pour être <strong>exécutées sur un smartphone</strong>. On trouve par exemple les ensembles de modèles <a href="https://ai.google.dev/gemma" target="_blank" rel="noopener noreffer ">Gemma</a> de Google, <a href="https://azure.microsoft.com/en-us/products/phi" target="_blank" rel="noopener noreffer ">Phi</a> de Microsoft ou encore <a href="https://www.llama.com/" target="_blank" rel="noopener noreffer ">Llama</a> de Meta. Ces trois familles de modèles sont d&rsquo;ailleurs <strong>open-source</strong>. Plus étonnant, on trouve également des outils comme <a href="https://picovoice.ai/picollm/" target="_blank" rel="noopener noreffer ">PicoLLM</a> qui permettent de compresser les modèles !</p>
<p>Évidemment, tout ce que je raconte au-dessus changera avec le temps. Il y aura de nouveaux appareils, des nouvelles versions d&rsquo;OS, des LLMs, etc. Un prochain rendez-vous que l&rsquo;on peut prévoir : mai et juin pour les keynotes d&rsquo;Apple et de Google, puis quelques temps après la sortie des nouvelles majeures d&rsquo;OS.</p>
<h1 id="comment-avoir-accès-à-un-modèle-">Comment avoir accès à un modèle ?</h1>
<p>Actuellement, pour créer des fonctionnalités augmentées par l&rsquo;IA dans une application mobile, il faut interagir avec un modèle. On va créer des prompts adaptés à nos cas d&rsquo;utilisations puis interpréter la réponse. Une réponse que l&rsquo;on aura forcée dans un standard (du JSON par exemple).</p>
<p>Pour que notre application communique avec un modèle, nous avons plusieurs options.</p>
<h2 id="via-notre-serveur-et-une-api-tierce">Via notre serveur et une API tierce</h2>
<p>C&rsquo;est actuellement un des choix <strong>les plus répandus et les plus efficaces</strong>. Les applications mobiles ont déjà l&rsquo;habitude de discuter avec des serveurs - on aura simplement de nouvelles routes pour obtenir des inférences. Notre serveur fait la passerelle vers <a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-api/" rel="">l&rsquo;API</a> d&rsquo;OpenAI par exemple, et ce sont ces derniers qui hébergent le modèle.</p>
<p>Les intérêts sont multiples. On peut <strong>cibler tous les appareils</strong> (puissant ou entrée de gamme, récent ou vieux) et tous les systèmes (Android, iOS) peu importe la version (la toute dernière comme la plus vieille). Eh oui, il ne s&rsquo;agit là que de requêtes HTTP et de stream de données.</p>
<p>On s&rsquo;assure au passage d&rsquo;avoir le même comportement entre les différents appareils et systèmes, puisque c&rsquo;est <strong>le même modèle</strong> qui est utilisé en bout de chaîne. Les règles métiers et prompts sont aussi partagées. On pourra facilement et rapidement les <a href="https://jordanchapuy.com/posts/2023/08/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-1-pourquoi" rel="">modifier à distance sans mettre à jour les applications mobiles</a>.</p>
<p>D’ailleurs, on peut aussi changer le modèle utilisé par un autre (une nouvelle version ou un concurrent) sans devoir redéployer notre application. Tout comme on pourrait utiliser plusieurs modèles en parallèle.</p>
<p>Le <strong>coût</strong> sera cependant <strong>élevé</strong>. La charge principale viendra de l&rsquo;utilisation d&rsquo;un service tiers comme OpenAI. Le coût augmentera selon deux vecteurs : le nombre d&rsquo;utilisateurs et le nombre d&rsquo;usages. En effet, les API tiers facturent au nombre de token généré pour l&rsquo;utilisation de leurs LLMs.</p>
<p>C&rsquo;est d&rsquo;autant plus important que notre serveur agisse en tant qu&rsquo;intermédiaire : une communication directe entre les applications et le service tiers impliquerait d&rsquo;<strong>exposer en public nos <a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-cle-api/" rel="">clés d&rsquo;APIs</a></strong>. Il serait alors très facile pour une personne d&rsquo;utiliser nos clés, augmentant ainsi notre facture.</p>
<p><strong>Quelques solutions :</strong> <a href="https://platform.openai.com/docs/overview" target="_blank" rel="noopener noreffer ">OpenAI</a>, <a href="https://www.anthropic.com/api" target="_blank" rel="noopener noreffer ">Anthropic</a>, <a href="https://ai.google.dev/api" target="_blank" rel="noopener noreffer ">Gemini</a>. On peut ajouter <a href="https://firebase.google.com/docs/vertex-ai" target="_blank" rel="noopener noreffer ">Firebase</a> qui est une rare solution à proposer un accès direct (sans serveur) sécurisé à une LLM (Gemini en l&rsquo;occurrence).</p>
<h2 id="via-notre-serveur-qui-héberge-un-modèle">Via notre serveur qui héberge un modèle</h2>
<p>Le second choix qui est également très répandu est celui d’héberger soi-même un modèle sur nos serveurs. On garde ainsi <strong>les avantages de passer par notre serveur</strong> (compatibilités avec tous les appareils, facilité de changement du modèle, utilisation de plusieurs modèles, …) tout en ayant <strong>plus de contrôle</strong>.</p>
<p>Un des aspects les plus intéressant concerne les données. En hébergeant un modèle open-source, on s&rsquo;assure <strong>un meilleur contrôle sur nos données</strong> et la manière dont elles sont utilisées, et surtout par <strong>qui</strong>.</p>
<p>Le coût sera aussi maîtrisé différemment. Exit un prix au token via une API tierce, cette fois on paie l&rsquo;hébergement du modèle.</p>
<p>Maintenant, comment choisir entre utiliser une API tierce et héberger un modèle ? Quelques insight possibles pour décider :</p>
<ul>
<li>passer par une API tierce pour prototyper rapidement, quand on est une petite entreprise, qu&rsquo;il n&rsquo;y a pas de données confidentielles.</li>
<li>héberger un modèle quand on est une plus grande entreprise, quand on veut mieux contrôler l’usage des données.</li>
</ul>
<p><strong>Quelques solutions :</strong> <a href="https://mistral.ai/" target="_blank" rel="noopener noreffer ">Mistral</a> qui est open-source et français, se balader sur le <a href="https://huggingface.co/" target="_blank" rel="noopener noreffer ">marketplace de Hugging Face</a>.</p>
<h2 id="en-local-avec-les-solutions-natives">En local avec les solutions natives</h2>
<p>Il existe aujourd&rsquo;hui des modèles plus légers qui peuvent fonctionner sur nos ordinateurs et nos téléphones, et certains appareils les intègrent par défaut. On peut donc les utiliser directement pour faire des inférences « <em><strong>on-device</strong></em> ».</p>
<p>Il y a plusieurs avantages à cette exécution locale. Premièrement, le coût. Il n&rsquo;y en a tout simplement pas. <strong>Pas besoin de payer</strong> un service tiers ou d&rsquo;héberger une solution existante, le modèle est déjà présent sur le téléphone. En fait, c&rsquo;est l&rsquo;utilisateur qui porte le coût : c&rsquo;est la puissance de son smartphone, via sa puce et sa batterie, qui réalisera toutes les opérations. On pensera alors à ménager sa batterie.</p>
<p>Deuxièmement, la <strong>confidentialité</strong>. Le modèle étant sur l&rsquo;appareil, les données sensibles n&rsquo;ont pas besoin de transiter sur internet ou d&rsquo;être lues par un serveur tiers. C&rsquo;est une des promesses phares de ces modèles. On restera méfiant tout de même s&rsquo;il faut utiliser des données très sensibles - l&rsquo;inférence est peut-être locale, mais des logs et données pourraient très bien remonter à des serveurs.</p>
<p>La rapidité est un potentiel troisième avantage. L&rsquo;inférence locale s&rsquo;oppose à une inférence sur un serveur distant qui nécessite des aller-retour sur internet. La communication réseau prenant du temps, on tient là un gain intéressant. Je parlerais d&rsquo;ailleurs plutôt de <strong>meilleure latence de réponse</strong>. D&rsquo;une certaine manière, les serveurs d&rsquo;OpenAI (par exemple) sont bien plus puissants que les puces de nos smartphones. Ce n&rsquo;est pas l&rsquo;inférence qui est plus rapide, mais plutôt le délai pour obtenir les réponses (grâce à des étapes en moins). À condition bien sûr d&rsquo;avoir un smartphone haut de gamme.</p>
<p>Tient-on alors la solution parfaite ? Aujourd&rsquo;hui en tout cas, on en est loin. On est très limité en termes de cibles compatibles. Il n&rsquo;y a rien sur iOS, Apple ne permet pas de prompter avec son Apple Intelligence. C&rsquo;est réalisable seulement sur Android, et même là, les smartphones disposant d&rsquo;une solution intégrée (Gemini Nano) sont peu nombreux, récents, et chers. Le pourcentage d&rsquo;utilisateurs que l&rsquo;on pourrait atteindre est <strong>faible</strong>.</p>
<p>C&rsquo;est également toujours marqué par Google comme <strong>expérimental</strong>, et selon les smartphones, le modèle n&rsquo;est pas pleinement intégré par défaut, il faut effectuer quelques actions.</p>
<p>Un point d&rsquo;attention qu&rsquo;il faudra garder en tête le jour où les modèles embarqués seront plus répandus : leurs différences. Apple et Google proposeront chacun leurs solutions, et il sera difficile (impossible ?) de reproduire avec certitude les mêmes comportements.</p>
<div class="code-block open" style="counter-reset: code-block 0">
    <div class="code-header language-kotlin">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copier dans le presse-papiers"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-kotlin" data-lang="kotlin"><span class="line"><span class="cl"><span class="n">scope</span><span class="p">.</span><span class="n">launch</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// Single string input prompt
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="k">val</span> <span class="py">input</span> <span class="p">=</span> <span class="s2">&#34;I want you to act as an English proofreader. I will provide you</span>
</span></span><span class="line"><span class="cl">    <span class="n">texts</span><span class="p">,</span> <span class="n">and</span> <span class="n">I</span> <span class="n">would</span> <span class="n">like</span> <span class="n">you</span> <span class="n">to</span> <span class="n">review</span> <span class="n">them</span> <span class="k">for</span> <span class="n">any</span> <span class="n">spelling</span><span class="p">,</span> <span class="n">grammar</span><span class="p">,</span> <span class="n">or</span>
</span></span><span class="line"><span class="cl">    <span class="n">punctuation</span> <span class="n">errors</span><span class="p">.</span> <span class="n">Once</span> <span class="n">you</span> <span class="n">have</span> <span class="n">finished</span> <span class="n">reviewing</span> <span class="n">the</span> <span class="n">text</span><span class="p">,</span> <span class="n">provide</span> <span class="n">me</span>
</span></span><span class="line"><span class="cl">    <span class="n">with</span> <span class="n">any</span> <span class="n">necessary</span> <span class="n">corrections</span> <span class="n">or</span> <span class="n">suggestions</span> <span class="k">for</span> <span class="n">improving</span> <span class="n">the</span> <span class="n">text</span><span class="p">:</span> <span class="n">These</span>
</span></span><span class="line"><span class="cl">    <span class="n">arent</span> <span class="n">the</span> <span class="n">droids</span> <span class="n">your</span> <span class="n">looking</span> <span class="k">for</span><span class="p">.</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="k">val</span> <span class="py">response</span> <span class="p">=</span> <span class="n">generativeModel</span><span class="p">.</span><span class="n">generateContent</span><span class="p">(</span><span class="n">input</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">print</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="n">text</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">// Or multiple strings as input
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="k">val</span> <span class="py">response</span> <span class="p">=</span> <span class="n">generativeModel</span><span class="p">.</span><span class="n">generateContent</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">  <span class="n">content</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">text</span><span class="p">(</span><span class="s2">&#34;I want you to act as an English proofreader. I will provide you texts</span>
</span></span><span class="line"><span class="cl">      <span class="n">and</span> <span class="n">I</span> <span class="n">would</span> <span class="n">like</span> <span class="n">you</span> <span class="n">to</span> <span class="n">review</span> <span class="n">them</span> <span class="k">for</span> <span class="n">any</span> <span class="n">spelling</span><span class="p">,</span> <span class="n">grammar</span><span class="p">,</span> <span class="n">or</span>
</span></span><span class="line"><span class="cl">      <span class="n">punctuation</span> <span class="n">errors</span><span class="p">.</span><span class="s2">&#34;)</span>
</span></span><span class="line"><span class="cl">    <span class="n">text</span><span class="p">(</span><span class="s2">&#34;Once you have finished reviewing the text, provide me with any</span>
</span></span><span class="line"><span class="cl">      <span class="n">necessary</span> <span class="n">corrections</span> <span class="n">or</span> <span class="n">suggestions</span> <span class="k">for</span> <span class="n">improving</span> <span class="n">the</span> <span class="n">text</span><span class="p">:</span><span class="s2">&#34;)</span>
</span></span><span class="line"><span class="cl">    <span class="n">text</span><span class="p">(</span><span class="s2">&#34;These arent the droids your looking for.&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="n">print</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="n">text</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>
<h2 id="en-local-avec-un-modèle-à-intégrer">En local avec un modèle à intégrer</h2>
<p>En attendant qu&rsquo;une grande majorité des appareils Android et iOS embarquent au sein de leurs systèmes des modèles accessibles aux développeurs, une solution pour avoir une exécution locale serait d&rsquo;intégrer soi-même un modèle existant dans l&rsquo;application.</p>
<p>Ainsi, on peut théoriquement cibler bien plus d&rsquo;appareils et de systèmes / versions ; tant que ceux-ci sont assez puissants. On garderait alors la plupart des avantages d&rsquo;une inférence locale : la rapidité sur les bons appareils, la confidentialité, et le coût réduit.</p>
<p>Réduit, mais pas inexistant. Le modèle n&rsquo;étant pas embarqué dans le système de l&rsquo;appareil, <strong>il faut le rendre téléchargeable</strong>&hellip; et donc l&rsquo;héberger. On aura un coût de stockage et de bande passante. La bonne nouvelle, c&rsquo;est que le téléchargement ne doit se faire qu&rsquo;une seule fois par l&rsquo;utilisateur au moment où l&rsquo;application en aura besoin. Chaque usage sera ensuite totalement local et n&rsquo;aura pas d&rsquo;impact sur les coûts.</p>
<p>Cette contrainte a un second désavantage : elle requiert <strong>un effort pour l&rsquo;utilisateur</strong>. Il devra télécharger un modèle. Même si l&rsquo;application fait tout le travail, l&rsquo;utilisateur va devoir patienter - un modèle étant lourd. Il devra aussi réserver de la place sur son appareil pour stocker ce modèle. Modèle qui ne fonctionnera que sur cette application.</p>
<p>Imaginons que plusieurs applications optent pour cette solution, cela représenterait des gigaoctets de téléchargement et de stockage. Ce n&rsquo;est pas viable.</p>
<p><strong>Quelques solutions :</strong> <a href="https://ai.google.dev/gemma" target="_blank" rel="noopener noreffer ">Gemma</a> de Google, <a href="https://azure.microsoft.com/en-us/products/phi" target="_blank" rel="noopener noreffer ">Phi</a> de Microsoft, <a href="https://www.llama.com/" target="_blank" rel="noopener noreffer ">Llama</a> de Meta.  <a href="https://picovoice.ai/picollm/" target="_blank" rel="noopener noreffer ">PicoLLM</a> pour la compression.</p>
<div class="code-block open" style="counter-reset: code-block 0">
    <div class="code-header language-dart">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copier dans le presse-papiers"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-dart" data-lang="dart"><span class="line"><span class="cl"><span class="kd">final</span> <span class="n">gemma</span> <span class="o">=</span> <span class="n">FlutterGemmaPlugin</span><span class="p">.</span><span class="n">instance</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Async response
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">String</span> <span class="n">response</span> <span class="o">=</span> <span class="kd">await</span> <span class="n">gemma</span><span class="p">.</span><span class="n">getResponse</span><span class="p">(</span><span class="nl">prompt:</span> <span class="s1">&#39;Tell me something interesting&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">print</span><span class="p">(</span><span class="n">response</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Stream response
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">gemma</span><span class="p">.</span><span class="n">getAsyncResponse</span><span class="p">(</span><span class="nl">prompt:</span> <span class="s1">&#39;Tell me something interesting&#39;</span><span class="p">).</span><span class="n">listen</span><span class="p">((</span><span class="kt">String</span><span class="o">?</span> <span class="n">token</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="n">print</span><span class="p">(</span><span class="n">token</span><span class="p">));</span></span></span></code></pre></div></div>
<h1 id="en-bref">En bref</h1>
<p>Les LLMs ne sont plus seulement utilisés à travers des applications de chat où l&rsquo;utilisateur écrit des prompts. On est dans une phase d&rsquo;exploration où beaucoup de possibilités restent à être imaginée et testée, mais des premiers usages existent déjà au sein d&rsquo;applications mobiles.</p>
<p>Et cela va très vite. Les idées fusent, les PoC se multiplient, et les appareils avec des modèles on-device vont se répandre. Les fonctionnalités augmentées par l&rsquo;IA pourraient devenir un incontournable. Il nous est déjà possible d&rsquo;en créer, il ne tient qu&rsquo;à nous d&rsquo;explorer.</p>
]]></description></item><item><title>Mettre à jour une application mobile sans passer par les stores - #3 Backend for Frontend (BFF)</title><link>https://jordanchapuy.com/posts/2023/12/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-3-backend-for-frontend-bff/</link><pubDate>Fri, 22 Dec 2023 19:05:00 +0100</pubDate><author>Jordan Chapuy</author><guid>https://jordanchapuy.com/posts/2023/12/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-3-backend-for-frontend-bff/</guid><description><![CDATA[<p>De nos jours, il est rare de trouver une application qui ne communique pas du tout avec l&rsquo;extérieur. <strong>La majorité des applications</strong> que l&rsquo;on utilise <strong>font des requêtes vers un ou plusieurs serveurs</strong> - pour demander des données, les afficher dynamiquement, et pour en envoyer.</p>
<p>J&rsquo;ai fait le test avec mon téléphone, j&rsquo;ai eu du mal à trouver une application qui ne faisait aucune requête (en tout cas en apparence, je n&rsquo;en suis même pas sûr à 100%). J&rsquo;ai la calculatrice qui vit sa vie dans son coin.</p>
<p>Pourquoi je raconte ça ? Parce que ces applications font très probablement des requêtes <strong>vers un serveur qui leur appartient</strong>. En d&rsquo;autres termes, l&rsquo;équipe, le département, ou l&rsquo;entreprise qui gère le développement de l&rsquo;application est également responsable du serveur.</p>
<p>Dans l&rsquo;épisode précédent, on a vu qu&rsquo;<a href="https://jordanchapuy.com/posts/2023/09/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-2-remote-config-feature-flag" rel="">une configuration à distance permettait de changer le comportement d&rsquo;une application mobile</a>. Et que la configuration à distance, ce pouvait être simplement un fichier JSON ou une <a href="https://jordanchapuy.com/posts/2026/11/c-est-quoi-une-api/" rel="">API</a> qui exposait quelques valeurs.</p>
<p>De là à faire le rapprochement entre les données envoyées par nos serveurs et la possibilité de changer le comportement d&rsquo;une application mobile à distance, il n&rsquo;y a vraiment qu&rsquo;un petit pas. Alors faisons-le !</p>
<h1 id="vers-une-api-spécialisée">Vers une API spécialisée</h1>
<p>En général, ce qu&rsquo;on retrouve souvent, c&rsquo;est un backend qui tends vers de l&rsquo;envoi de données brutes aux fronts. Et qui s&rsquo;approche plus ou moins du REST. Pour alimenter une page, le front mobile devra effectuer une ou plusieurs requêtes puis traiter les données, appliquer un peu de logique.</p>
<p>Imaginons une page agenda sur notre application. On a envie de mettre en valeur les événements qui ont lieu aujourd&rsquo;hui, dans de jolis encarts avec un maximum d&rsquo;informations, ainsi que les 3 prochains événements. Pour le reste, on les groupe par semaine glissante et juste le titre nous suffira.</p>
<p>Notre backend nous propose une route qui retourne 100 événements, à partir du début de la semaine. Côté front mobile, on va devoir trier par date, filtrer les événements passés, mettre de côté les événements du jour et également les 3 prochains pour la mise en valeur, puis ensuite faire des groupes par semaine glissante.</p>
<p>Beaucoup de logique métier qui se retrouve côté client (l&rsquo;application). Si on décide de changer, disons par exemple la sélection des événements qui sont mis en valeur, <strong>il faut modifier l&rsquo;application et donc redéployer</strong>, ce qui implique de <a href="https://jordanchapuy.com/posts/2023/08/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-1-pourquoi" rel="">traverser tout le process de soumission sur les stores que l&rsquo;on aimerait éviter</a>.</p>
<p>Sans parler des données qui transitent sur le réseau : on a besoin que du titre pour une grande partie des événements. On augmente au passage la charge serveur pour rien. Bonne nouvelle, on a dit qu&rsquo;on est responsable du serveur - on peut décider d&rsquo;y <strong>déporter certaines logiques</strong>.</p>
<p>Le backend pourrait :</p>
<ul>
<li>Trier dans l’ordre adapté,</li>
<li>Ne renvoyer que les futurs événements.</li>
<li>Porter la mise en valeur en envoyant deux listes distinctes, et indiquer juste le titre pour les événements lointains.</li>
<li>Grouper par semaine glissante.</li>
<li>Aller plus loin en portant la logique de présentation. “Afficher une carte avec un titre, une description, une date pour cet événement mis en valeur, afficher un simple titre pour cet événement, etc”. On commencerait alors à parler de <a href="https://jordanchapuy.com/posts/2024/01/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-4-server-driven-ui" rel="">Server-Driven UI</a>.</li>
</ul>
<p>En fonction de ce que l&rsquo;on déporte sur le backend, on pourra <strong>modifier le comportement de l&rsquo;application à distance</strong> en déployant une nouvelle version du backend plutôt que de l&rsquo;application. Et c&rsquo;est souvent bien plus rapide.</p>
<p>Notre API, qui était généraliste, devient spécialisée pour un front.</p>
<h2 id="le-cas-graphql">Le cas GraphQL</h2>
<p>Un petit aparté sur GraphQL. Je le mettrais bien dans le panier <em>API généraliste</em> pour notre histoire. Oui, ça apporte une certaine flexibilité au front qui consomme l&rsquo;API, il peut sélectionner ce qu&rsquo;il veut, mais à la fin, <strong>c&rsquo;est toujours le front qui construit les requêtes</strong>. On veut finalement filtrer les événements passés ? Eh bien il faut redéployer l&rsquo;application.</p>
<p>Certes, c&rsquo;est une modification très simple puisque c&rsquo;est peut-être seulement un paramètre dans la requête GraphQL à ajouter ou modifier, mais cette modification est à faire côté client (notre application). Elle impliquera une soumission de la version sur les stores.</p>
<p>On n&rsquo;est pas dans la spécialisation de notre API, elle ne porte pas de la logique supplémentaire dédiée au front.</p>
<h1 id="backend-for-frontend">Backend for Frontend</h1>
<p>Avoir une API spécialisée, ça peut nous embêter dans certains cas. Si j&rsquo;ai plusieurs fronts par exemple : un site web et une application mobile. Il y a parfois une logique différente entre les deux. Le web est une autre plateforme, l&rsquo;interface est très différente. Pour l&rsquo;agenda, je veux tout afficher sous la forme d&rsquo;un calendrier mensuel.</p>
<p>On comprend donc l&rsquo;intérêt d&rsquo;avoir une API généraliste qui essaye de faire plaisir à tout le monde. Pour autant, on perçoit aussi les avantages d&rsquo;avoir une API spécialisée. C&rsquo;est là qu&rsquo;intervient le principe de Backend for Frontend : on peut avoir les deux !</p>
<p>Un Backend For Frontend, souvent connu avec l&rsquo;acronyme BFF, est une couche intermédiaire entre un backend et un frontend. Concrètement, <strong>c&rsquo;est un backend supplémentaire qui va traiter des données spécifiquement pour un type de front</strong> (une application mobile par exemple).</p>
<p>Notre front mobile va effectuer toutes ses requêtes en passant par le Back for Front, et uniquement ce dernier. <strong>C&rsquo;est le Back for Front qui appellera le backend pour obtenir les données nécessaires</strong>. Il pourra ensuite appliquer de la <strong>logique dédiée</strong> avant de renvoyer les données à l&rsquo;application mobile. Le site web aurait de son côté son propre Back for Front.</p>
<p>Vu que le Back for Front devient le point d&rsquo;entrée unique du front, il peut servir d&rsquo;<strong>agrégateur</strong>. Peut-être que pour notre agenda, on avait besoin de la liste des événements futurs et également des événements où l&rsquo;on est inscrit. Plutôt que de faire deux requêtes, le front n&rsquo;en fera qu&rsquo;une seule vers le BFF.</p>
<p>Avec cette mécanique, on voit rapidement plusieurs avantages :</p>
<ul>
<li>On sépare les logiques spécialisées. Il y a un BFF mobile, un BFF web, etc.</li>
<li>On sépare la partie spécialisée de la partie généraliste. Il y a un backend qui ne subit pas les caprices du front.</li>
<li>Un développeur mobile peut plus aisément sortir de son éco-système et effectuer des changements sur le BFF.</li>
<li>On peut regrouper plusieurs ressources en une seule route, et réfléchir en termes de page, d&rsquo;écran.</li>
<li>On cache la complexité au front. Il n&rsquo;y a pas à savoir s&rsquo;il y a plusieurs services ou même s&rsquo;il y a un partenaire externe.</li>
</ul>
<p>Et notamment, ce qui nous intéresse particulièrement dans cette série d&rsquo;articles, <strong>on déporte de la logique client (app mobile) sur un serveur distant (notre BFF)</strong>. On peut donc modifier du comportement sans passer par les stores ! On aime :)</p>
<p>C’est tout de même une décision à peser dans l’équipe. Qui dit couche supplémentaire, dit une <strong>maintenance supplémentaire</strong>. Il y a une nouvelle brique qui doit évoluer et être déployée. Déléguer davantage au Back for Front augmente au passage les possibilités d’erreurs sur l’application - elle est plus permissive. On songera à monitorer plus en profondeur ce qu’il se passe dans l’application.</p>
<hr>
<blockquote>
<p>Série d&rsquo;articles <strong>Mettre à jour une application mobile sans passer par les stores</strong> :</p>
<ul>
<li><a href="https://jordanchapuy.com/posts/2023/08/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-1-pourquoi" rel="">#1 Pourquoi</a></li>
<li><a href="https://jordanchapuy.com/posts/2023/09/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-2-remote-config-feature-flag" rel="">#2 Remote config, Feature Flag &amp; co</a></li>
<li><a href="https://jordanchapuy.com/posts/2023/12/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-3-backend-for-frontend-bff" rel="">#3 Backend for Frontend (BFF)</a></li>
<li><a href="https://jordanchapuy.com/posts/2024/01/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-4-server-driven-ui" rel="">#4 Server-Driven UI</a></li>
<li><a href="https://jordanchapuy.com/posts/2024/07/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-5-interpreteur-de-code" rel="">#5 Interpréteur de code</a></li>
<li><a href="https://jordanchapuy.com/posts/2024/08/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-6-over-the-air-update-ota" rel="">#6 Over-the-air update (OTA)</a></li>
<li><a href="https://jordanchapuy.com/posts/2024/11/mettre-a-jour-une-application-mobile-sans-passer-par-les-stores-7-ressources" rel="">#7 Les ressources</a></li>
<li>#8 En résumé, mes options</li>
</ul>
<p>Hors-série :</p>
<ul>
<li>Accélérer le temps de review App Store d&rsquo;une application iOS</li>
<li>Forcer la mise à jour d&rsquo;une application mobile</li>
</ul></blockquote>
]]></description></item></channel></rss>