<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>AI on Thomas</title>
        <link>https://blog.thomasplantain.fr/tags/ai/</link>
        <description>Recent content in AI on Thomas</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>fr-fr</language>
        <lastBuildDate>Tue, 21 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.thomasplantain.fr/tags/ai/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>MCP pour les nuls - la suite</title>
        <link>https://blog.thomasplantain.fr/post/mcpgtw/</link>
        <pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.thomasplantain.fr/post/mcpgtw/</guid>
        <description>&lt;img src="https://blog.thomasplantain.fr/img/mcpgtw/mcp-gateway-gemini.avif" alt="Featured image of post MCP pour les nuls - la suite" /&gt;&lt;blockquote&gt;
&lt;p&gt;Suite du post précédent, je mets en place une gateway pour protéger mon serveur MCP. Le serveur MCP a été déployé sur Azure Container, il est accessible.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/mcp-gateway-gemini.avif&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;MCP Gateway&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;mise-en-place-dune-flex-gateway&#34;&gt;Mise en place d&amp;rsquo;une Flex gateway
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Création et enregistrement de ma nouvelle Flex gateway (mcp-gateway)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;J&amp;rsquo;ai créé une image Docker de la flex avec son fichier d&amp;rsquo;enregistrement. L&amp;rsquo;image Docker tourne sur un Azure Container, elle est maintenant visible sur Anypoint (le control plane de MuleSoft).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/new-flex-gtw.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Flex Gateway&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;configuration-de-mon-server-mcp-sur-anypoint&#34;&gt;Configuration de mon server MCP sur Anypoint
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.mulesoft.com/api-manager/latest/create-instance-task-agent-tool&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Documentation officielle de MuleSoft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ajout de mon serveur MCP (mcp_card)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Aller sur &lt;strong&gt;API Manager&lt;/strong&gt; (Anypoint) et sélectionner &lt;strong&gt;Agent and Tools Instances&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/mcp-server-instance.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;API Manager&#34;
	
	
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;En sélectionnant la Flex Gateway mise en place pour ce projet.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/add-mcp1.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Flex Gateway&#34;
	
	
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Maintenant on peut ajouter un &lt;strong&gt;MCP Server&lt;/strong&gt; et on finalise la configuration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/mcp-config1.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Flex Gateway&#34;
	
	
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Le contrat du serveur &lt;strong&gt;mcp_card&lt;/strong&gt; est visible sur le portail API d&amp;rsquo;Anypoint (Exchange).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/exchange-mcp.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Echange&#34;
	
	
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Le serveur mcp_card est théoriquement accessible via la gateway, il faut maintenant ajouter les policies pour le sécuriser.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;policies-pour-mon-serveur-mcp&#34;&gt;Policies pour mon serveur MCP
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.mulesoft.com/gateway/latest/policies-included-mcp-support&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;MCP Support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Cette policy est obligatoire pour le bon fonctionnement du serveur MCP.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Client ID Enforcement&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Pour limiter l&amp;rsquo;accès au serveur &lt;strong&gt;mcp_card&lt;/strong&gt; aux applications enregistrées qui ont le duo &lt;strong&gt;client_id/client_secret&lt;/strong&gt; dans leurs Headers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/mcp-clientid.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Echange&#34;
	
	
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nous avons donc 2 policies configurées sur notre gateway pour le serveur &lt;strong&gt;mcp_card&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/mcp-policies.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Policies&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;appels-du-serveur-mcp-avec-bruno&#34;&gt;Appels du serveur MCP avec Bruno
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Nous allons tester la connectivité au server &lt;strong&gt;mcp_card&lt;/strong&gt; avec le client API &lt;a class=&#34;link&#34; href=&#34;https://www.usebruno.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bruno&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Configuration des Headers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/bruno-headers.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Headers&#34;
	
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Appels aux services du serveur &lt;strong&gt;mcp_card&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/call-mcp1.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;card_details&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/call-mcp4.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;transaction_list&#34;
	
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si le &lt;strong&gt;client_secret&lt;/strong&gt; est faux dans les Headers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/call-mcp-failed.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;failed&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;observabilité&#34;&gt;Observabilité
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;L&amp;rsquo;outil de monitoring d&amp;rsquo;Anypoint nous permet au niveau de la configuration du serveur de visualiser les appels. On voit les appels de chaque service et les appels en erreurs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;card_details&lt;/li&gt;
&lt;li&gt;transaction_list&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcpgtw/mcp-metrics.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;metrics&#34;
	
	
&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>MCP pour les nuls</title>
        <link>https://blog.thomasplantain.fr/post/mcp/</link>
        <pubDate>Tue, 24 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.thomasplantain.fr/post/mcp/</guid>
        <description>&lt;img src="https://blog.thomasplantain.fr/img/mcp/mcp_bg.avif" alt="Featured image of post MCP pour les nuls" /&gt;&lt;h2 id=&#34;mcp-kesako-&#34;&gt;MCP Kesako ?
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Protocole de communication entre un agent IA et un service.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://modelcontextprotocol.io/docs/getting-started/intro&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;MCP Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le service permet à un agent d&amp;rsquo;avoir accès à des données structurées (format JSON) qui ne sont pas déjà présentes dans son modèle LLM.
Il existe deux protocoles de communication, io et http. Dans mon cas, je souhaite utiliser http, dans l&amp;rsquo;idée de créer un serveur MCP accessible à tous.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcp/mcp-simple-diagram.avif&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;copilot&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Pour accélérer le développement, je vais utiliser la librairie Python fastMCP :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fastMCP: &lt;a class=&#34;link&#34; href=&#34;https://gofastmcp.com/getting-started/welcome&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://gofastmcp.com/getting-started/welcome&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;prototype-du-service-mcp&#34;&gt;Prototype du service MCP
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Mon cas d&amp;rsquo;utilisation : je veux mettre en place un service qui donne les détails d&amp;rsquo;une carte de crédit si on lui donne le numéro en paramètre, ou la liste des transactions d&amp;rsquo;un compte.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dans ce premier post, je ne vais pas aborder la sécurité ni l&amp;rsquo;observabilité, mais je souhaite en parler bientôt dans un post dédié, notamment via une API Gateway.&lt;/p&gt;
&lt;h3 id=&#34;pour-commencer&#34;&gt;Pour commencer
&lt;/h3&gt;&lt;p&gt;Dans un environnement Python :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pip install fastmcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;serveur-mcp-card-details&#34;&gt;Serveur MCP Card Details
&lt;/h3&gt;&lt;p&gt;J&amp;rsquo;ai créé deux services : le détail d&amp;rsquo;une carte et la liste des transactions d&amp;rsquo;un compte, avec des données fictives.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; fastmcp &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; FastMCP
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; starlette.requests &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Request
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; starlette.responses &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; PlainTextResponse
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mcp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; FastMCP(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;My MCP Server&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@mcp.custom_route&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/health&amp;#34;&lt;/span&gt;, methods&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;health_check&lt;/span&gt;(request: Request) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; PlainTextResponse:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; PlainTextResponse(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;OK&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@mcp.tool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;card_details&lt;/span&gt;(card_number: str) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; dict:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# Dummy implementation for demonstration purposes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;card_number&amp;#34;&lt;/span&gt;: card_number,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;card_type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Visa&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;expiry_date&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;12/25&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cardholder_name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;John Doe&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@mcp.tool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;transaction_list&lt;/span&gt;(account_id: str) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; list:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# Dummy implementation for demonstration purposes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;transaction_id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;txn_001&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;amount&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;100.0&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;currency&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;USD&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;completed&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;transaction_id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;txn_002&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;amount&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;50.0&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;currency&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;USD&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pending&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;transaction_id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;txn_003&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;amount&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;75.0&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;currency&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;USD&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;failed&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mcp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run(transport&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http&amp;#34;&lt;/span&gt;, port&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;8000&lt;/span&gt;)    
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour lancer le serveur qui va écouter sur le port 8000, j&amp;rsquo;exécute :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python my_server.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configuration-de-copilot&#34;&gt;Configuration de Copilot
&lt;/h2&gt;&lt;p&gt;Une fois que le serveur MCP tourne dans la console, je configure mon GitHub Copilot pour qu&amp;rsquo;il ajoute le serveur dans sa liste :&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcp/mcp_copilot_config.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;copilot&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Une fois la configuration faite, on peut voir le serveur et les deux fonctionnalités (&lt;code&gt;card_details&lt;/code&gt; et &lt;code&gt;transaction_list&lt;/code&gt;) :&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcp/mcp_tools.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;tools&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;utilisation-du-service&#34;&gt;Utilisation du service
&lt;/h3&gt;&lt;p&gt;Les deux fonctionnalités sont maintenant accessibles dans le chat de Copilot :
&lt;img src=&#34;https://blog.thomasplantain.fr/img/mcp/mcp_copilot.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;chat&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;prochaines-étapes&#34;&gt;Prochaines étapes
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Mettre en place une API Gateway
&lt;ul&gt;
&lt;li&gt;Authentification&lt;/li&gt;
&lt;li&gt;Observabilité&lt;/li&gt;
&lt;li&gt;Limitation, quotas&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Labor market impacts of AI</title>
        <link>https://blog.thomasplantain.fr/post/labor/</link>
        <pubDate>Sun, 08 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.thomasplantain.fr/post/labor/</guid>
        <description>&lt;img src="https://blog.thomasplantain.fr/img/market-down.avif" alt="Featured image of post Labor market impacts of AI" /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.anthropic.com/research/labor-market-impacts&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.anthropic.com/research/labor-market-impacts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Voici un résumé en francais de l&amp;rsquo;article d&amp;rsquo;Anthropic sur límpact de l&amp;rsquo;IA sur le marché du travail. Cet post est généré par l&amp;rsquo;IA, ce n&amp;rsquo;est pas une analyse. Je vais ajouter au fur et à mesure des liens sur des suppressions de postes liés à l&amp;rsquo;IA.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;résumé-en-français--impact-de-lia-sur-le-marché-du-travail&#34;&gt;Résumé en français : Impact de l&amp;rsquo;IA sur le marché du travail
&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/radar-labor.avif&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Radar&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;points-clés&#34;&gt;Points clés
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Nouvelle mesure de risque&lt;/strong&gt; : Les chercheurs introduisent l&amp;rsquo;« exposition observée » qui combine les capacités théoriques des LLM avec les données d&amp;rsquo;utilisation réelle, en mettant davantage l&amp;rsquo;accent sur les usages automatisés et professionnels plutôt qu&amp;rsquo;augmentatifs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Écart théorie-pratique&lt;/strong&gt; : L&amp;rsquo;IA est loin d&amp;rsquo;atteindre son potentiel théorique. Par exemple, Claude ne couvre que 33% des tâches dans le domaine informatique et mathématique, contre 94% en potentiel théorique.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Corrélation avec la croissance&lt;/strong&gt; : Les emplois avec exposition plus élevée devraient connaître une croissance moins importante jusqu&amp;rsquo;en 2034 selon le Bureau of Labor Statistics.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Profil des travailleurs exposés&lt;/strong&gt; : Comparés aux travailleurs non exposés, les travailleurs très exposés sont plus souvent des femmes (+16%), des Asiatiques (2× plus), mieux éduqués (17,4% ont un diplôme supérieur vs 4,5%) et gagnent 47% plus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact sur l&amp;rsquo;emploi jusqu&amp;rsquo;à présent&lt;/strong&gt; : Aucune augmentation systématique du chômage parmi les travailleurs très exposés depuis fin 2022. Cependant, des indices suggèrent que l&amp;rsquo;embauche de jeunes travailleurs (22-25 ans) a ralenti dans les secteurs exposés, avec une baisse de 14% du taux de conclusion d&amp;rsquo;emplois.&lt;/p&gt;
&lt;h3 id=&#34;méthodologie&#34;&gt;Méthodologie
&lt;/h3&gt;&lt;p&gt;L&amp;rsquo;étude combine :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La base de données O*NET (tâches par métier)&lt;/li&gt;
&lt;li&gt;Les données d&amp;rsquo;utilisation d&amp;rsquo;Anthropic (Claude)&lt;/li&gt;
&lt;li&gt;Les estimations d&amp;rsquo;exposition théorique de Eloundou et al. (2023)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les chercheurs se concentrent sur le chômage comme indicateur principal, car il reflète directement le potentiel de préjudice économique.&lt;/p&gt;
&lt;h2 id=&#34;liens-sur-des-suppressions-demplois-à-cause-de-lia&#34;&gt;Liens sur des suppressions d&amp;rsquo;emplois à cause de l&amp;rsquo;IA
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.lemondeinformatique.fr/actualites/lire-oracle-pret-a-supprimer-des-milliers-d-emplois-99560.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.lemondeinformatique.fr/actualites/lire-oracle-pret-a-supprimer-des-milliers-d-emplois-99560.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.latribune.fr/article/banques-finance/assurance/29837237610705/paiements-jack-dorsey-declenche-une-job-apocalypse-chez-square&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.latribune.fr/article/banques-finance/assurance/29837237610705/paiements-jack-dorsey-declenche-une-job-apocalypse-chez-square&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.lemondeinformatique.fr/actualites/lire-atlassian-supprime-1-600-emplois-pour-se-focaliser-sur-l-ia-99630.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.lemondeinformatique.fr/actualites/lire-atlassian-supprime-1-600-emplois-pour-se-focaliser-sur-l-ia-99630.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.usine-digitale.fr/big-tech/meta/meta-va-licencier-20-de-ses-effectifs-alors-quil-depense-sans-compter-pour-tenter-de-revenir-dans-la-course-a-lia-generative.74IGDEPMTBDZNFOX44MPQXDKYE.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.usine-digitale.fr/big-tech/meta/meta-va-licencier-20-de-ses-effectifs-alors-quil-depense-sans-compter-pour-tenter-de-revenir-dans-la-course-a-lia-generative.74IGDEPMTBDZNFOX44MPQXDKYE.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.lesechos.fr/tech-medias/hightech/meta-serait-en-train-de-preparer-un-plan-de-departs-xxl-2221055&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.lesechos.fr/tech-medias/hightech/meta-serait-en-train-de-preparer-un-plan-de-departs-xxl-2221055&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.lemondeinformatique.fr/actualites/lire-meta-supprimerait-8-000-postes-pour-accelerer-dans-l-ia-99968.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.lemondeinformatique.fr/actualites/lire-meta-supprimerait-8-000-postes-pour-accelerer-dans-l-ia-99968.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.huffingtonpost.fr/tech-futurs/article/apres-une-course-effrenee-a-l-ia-la-societe-mere-de-facebook-va-supprimer-10-de-ses-effectifs_263026.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.huffingtonpost.fr/tech-futurs/article/apres-une-course-effrenee-a-l-ia-la-societe-mere-de-facebook-va-supprimer-10-de-ses-effectifs_263026.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.usine-digitale.fr/big-tech/meta/meta-licencie-10-de-son-personnel-et-va-analyser-le-travail-des-employes-restants-pour-entrainer-des-agents-ia-qui-pourraient-un-jour-les-remplacer.6KYPH2XVINA4PMJALEV5F3LN5Y.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.usine-digitale.fr/big-tech/meta/meta-licencie-10-de-son-personnel-et-va-analyser-le-travail-des-employes-restants-pour-entrainer-des-agents-ia-qui-pourraient-un-jour-les-remplacer.6KYPH2XVINA4PMJALEV5F3LN5Y.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>The 2028 Global Intelligence Crisis</title>
        <link>https://blog.thomasplantain.fr/post/2028/</link>
        <pubDate>Sat, 28 Feb 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.thomasplantain.fr/post/2028/</guid>
        <description>&lt;img src="https://blog.thomasplantain.fr/img/market-down.avif" alt="Featured image of post The 2028 Global Intelligence Crisis" /&gt;&lt;h2 id=&#34;publié-par-citrini-research&#34;&gt;Publié par Citrini Research
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Le blog intitulé &amp;ldquo;The 2028 Global Intelligence Crisis&amp;rdquo;, publié par Citrini Research, est une fiction qui imagine un scénario de crise économique majeure déclenchée par l&amp;rsquo;adoption massive de l&amp;rsquo;intelligence artificielle d&amp;rsquo;ici 2028.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.citriniresearch.com/p/2028gic&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.citriniresearch.com/p/2028gic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;1-le-cercle-vicieux-de-lintelligence&#34;&gt;1. Le &amp;ldquo;Cercle Vicieux de l&amp;rsquo;Intelligence&amp;rdquo;
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Le rapport décrit un effet de rétroaction négative :&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Productivité vs Emploi : Les entreprises adoptent massivement l&amp;rsquo;IA pour augmenter leur productivité et réduire leurs coûts, ce qui entraîne des licenciements massifs, particulièrement chez les cols blancs (secteur des services, ingénierie logicielle, finance).&lt;/li&gt;
&lt;li&gt;Baisse de la consommation : Les travailleurs licenciés réduisent leurs dépenses. Cette chute de la demande globale pèse sur les revenus des entreprises, qui, pour maintenir leurs marges, licencient davantage et investissent encore plus dans l&amp;rsquo;IA pour automatiser.&lt;/li&gt;
&lt;li&gt;Résultat : Un taux de chômage qui grimpe à plus de 10 % d&amp;rsquo;ici juin 2028 et une chute brutale des marchés boursiers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-le-concept-de-pib-fantôme-ghost-gdp&#34;&gt;2. Le concept de &amp;ldquo;PIB Fantôme&amp;rdquo; (Ghost GDP)
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;C&amp;rsquo;est l&amp;rsquo;un des points les plus marquants du blog :&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;L&amp;rsquo;IA génère une croissance de la production (le PIB augmente car les machines travaillent), mais cette richesse ne circule plus dans l&amp;rsquo;économie réelle.&lt;/li&gt;
&lt;li&gt;Contrairement aux employés humains, les serveurs d&amp;rsquo;IA n&amp;rsquo;achètent pas de nourriture, ne paient pas de loyers et ne consomment pas de services locaux. La croissance devient déconnectée du bien-être de la population.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-la-crise-du-saas-software-as-a-service&#34;&gt;3. La crise du SaaS (Software as a Service)
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Le rapport prédit l&amp;rsquo;effondrement des marges des entreprises de logiciels :&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;L&amp;rsquo;IA rend le développement de logiciels si facile et peu coûteux que les entreprises préfèrent créer leurs propres outils en interne plutôt que de payer des abonnements coûteux à des fournisseurs tiers (Salesforce, Zendesk, etc.).&lt;/li&gt;
&lt;li&gt;Cela détruit les &amp;ldquo;moats&amp;rdquo; (avantages concurrentiels) traditionnels du secteur technologique.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;4-risque-systémique-et-financier&#34;&gt;4. Risque systémique et financier
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;La crise se propage au secteur financier :&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Immobilier : Les anciens cadres bien rémunérés ne peuvent plus rembourser leurs prêts hypothécaires, créant une crise de la dette.&lt;/li&gt;
&lt;li&gt;Crédit privé : De nombreux fonds de dette sont exposés à des entreprises de technologie dont la valeur s&amp;rsquo;effondre, créant une réaction en chaîne similaire à celle de 2008, mais causée par l&amp;rsquo;obsolescence technologique plutôt que par des prêts subprime.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;5-conclusion-du-rapport&#34;&gt;5. Conclusion du rapport
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Le texte n&amp;rsquo;est pas une prédiction exacte, mais une mise en garde.
Il souligne que si l&amp;rsquo;IA peut rendre l&amp;rsquo;économie plus &amp;ldquo;efficace&amp;rdquo;, elle peut aussi détruire les mécanismes de redistribution des revenus (le salaire contre le travail) sur lesquels repose la stabilité sociale et économique actuelle. Les auteurs suggèrent que des mesures comme une taxe sur l&amp;rsquo;IA ou un changement radical de politique fiscale pourraient devenir nécessaires pour éviter ce scénario.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;pour-résumer&#34;&gt;Pour résumer
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;C&amp;rsquo;est une vision dystopique où l&amp;rsquo;IA réussit &amp;ldquo;trop bien&amp;rdquo;, au point de rendre les consommateurs humains superflus dans le système économique, provoquant une récession mondiale par manque de demande.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>Matt Shumer blog post</title>
        <link>https://blog.thomasplantain.fr/post/big/</link>
        <pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.thomasplantain.fr/post/big/</guid>
        <description>&lt;img src="https://blog.thomasplantain.fr/img/cover.jpg" alt="Featured image of post Matt Shumer blog post" /&gt;&lt;h1 id=&#34;matt-shumer&#34;&gt;Matt Shumer
&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;Something Big Is Happening&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A personal note for non-tech friends and family on what AI is starting to change.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Voici un résumé en français de l’article :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L’auteur compare la situation actuelle de l’IA à celle du début de la pandémie de Covid-19 : la plupart des gens ne réalisent pas encore l’ampleur du bouleversement qui arrive. Travaillant dans l’IA, il explique que les récents progrès sont si rapides et profonds qu’ils transforment déjà son métier : il suffit désormais de décrire ce qu’on veut, et l’IA le réalise, souvent mieux qu’un humain. Les nouveaux modèles, comme GPT-5.3 Codex et Opus 4.6, sont capables de jugements et de créativité, et peuvent même s’auto-améliorer.&lt;/p&gt;
&lt;p&gt;L’auteur insiste sur le fait que ce changement ne concerne pas que la tech : tous les métiers intellectuels sont concernés (droit, finance, médecine, écriture, service client, etc.), et l’impact se fera sentir dans les 1 à 5 ans, voire plus vite. Les IA progressent de façon exponentielle : ce qu’elles ne savent pas faire aujourd’hui, elles le feront bientôt.&lt;/p&gt;
&lt;p&gt;Il met en garde contre l’illusion de sécurité : l’IA n’automatise pas une tâche, mais tout le travail cognitif. Même les métiers qui semblent protégés (jugement, créativité, empathie) commencent à être touchés. Il conseille de s’adapter rapidement : utiliser les meilleurs outils payants (&lt;strong&gt;1&lt;/strong&gt;), expérimenter chaque jour, chercher à automatiser ses tâches, et ne pas sous-estimer la vitesse du changement.&lt;/p&gt;
&lt;p&gt;Il recommande aussi de préparer sa situation financière, de privilégier les compétences difficiles à remplacer (relations humaines, présence physique, responsabilité légale), et d’enseigner à ses enfants (&lt;strong&gt;2&lt;/strong&gt;) la curiosité et l’adaptabilité plutôt que de viser des carrières traditionnelles.&lt;/p&gt;
&lt;p&gt;Enfin, il rappelle que l’IA représente à la fois une opportunité immense (accélération de la recherche, accès à la connaissance, réalisation de projets personnels) et un risque majeur (perte de contrôle, menaces sécuritaires).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Il conclut que ceux qui s’en sortiront le mieux seront ceux qui s’engagent dès maintenant, avec curiosité et urgence, car le futur est déjà là.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://shumer.dev/something-big-is-happening&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://shumer.dev/something-big-is-happening&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;notes&#34;&gt;Notes
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Perso j&amp;rsquo;aime l&amp;rsquo;idée de tester sur des models gratuits avec une solution comme Ollama, tester comparer modifier.&lt;/li&gt;
&lt;li&gt;Ma fille a eu un cours sur le Machine Learning au college, ils apprennent aussi à utiliser les LLM avec des prompts clairs.&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        <item>
        <title>On‑device AI: Bringing Intelligence to the Edge</title>
        <link>https://blog.thomasplantain.fr/post/device/</link>
        <pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.thomasplantain.fr/post/device/</guid>
        <description>&lt;img src="https://blog.thomasplantain.fr/img/on_device_llms.avif" alt="Featured image of post On‑device AI: Bringing Intelligence to the Edge" /&gt;&lt;h1 id=&#34;ondevice-ai-bringing-intelligence-to-the-edge&#34;&gt;On‑device AI: Bringing Intelligence to the Edge
&lt;/h1&gt;&lt;p&gt;On‑device AI runs machine learning models directly on user devices—smartphones, wearables, IoT sensors, and edge gateways—rather than relying solely on cloud inference. As hardware accelerators, optimized runtimes, and efficient model techniques have matured, running intelligence locally has become practical and strategic for many products.&lt;/p&gt;
&lt;h2 id=&#34;why-ondevice-ai-matters&#34;&gt;Why on‑device AI matters
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Low latency:&lt;/strong&gt; Local inference removes network round trips, enabling real‑time interactions such as augmented reality, live translation, and immediate camera effects.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privacy by design:&lt;/strong&gt; When data and inference stay on the device, products can reduce exposure of sensitive information and simplify compliance for biometric and health scenarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline reliability:&lt;/strong&gt; Local models keep features functional without network connectivity, crucial for remote environments or spotty mobile coverage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lower bandwidth and cost:&lt;/strong&gt; Fewer cloud requests reduce operational expenses and conserve user data usage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personalization:&lt;/strong&gt; Models can adapt to individual behavior locally, enabling private, personalized experiences with fast feedback loops.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;key-use-cases&#34;&gt;Key use cases
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mobile UX:&lt;/strong&gt; Smart keyboards, smart watch, on‑device speech recognition, camera scene detection, and image enhancement.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wearables &amp;amp; healthcare:&lt;/strong&gt; Continuous monitoring, anomaly detection, and on‑device alerts while preserving patient privacy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Industrial IoT:&lt;/strong&gt; Real‑time fault detection and control where latency or connectivity constraints preclude cloud dependence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AR/VR &amp;amp; robotics:&lt;/strong&gt; Low‑latency perception and control for immersive and safety‑critical systems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smart home:&lt;/strong&gt; Local automation and voice understanding without mandatory cloud access.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;technical-enablers&#34;&gt;Technical enablers
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Model compression:&lt;/strong&gt; Techniques such as quantization, pruning, and weight sharing reduce size and compute cost.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Knowledge distillation:&lt;/strong&gt; Large teacher models transfer knowledge to smaller student models optimized for edge devices.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Efficient architectures:&lt;/strong&gt; Mobile‑first networks (e.g., MobileNet, EfficientNet‑lite) and edge‑tuned transformers trade parameters for latency.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edge runtimes:&lt;/strong&gt; TensorFlow Lite, Core ML, ONNX Runtime Mobile, and TVM provide graph optimizations, operator fusion, and hardware backends.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hardware accelerators:&lt;/strong&gt; NPUs, DSPs, and embedded GPUs dramatically reduce energy per inference on modern SoCs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TinyML:&lt;/strong&gt; Ultra‑low‑power inference on microcontrollers enables sensor‑triggered intelligence in constrained environments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Federated learning &amp;amp; split inference:&lt;/strong&gt; Decentralized training and hybrid pipelines keep raw data local while allowing global model improvements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;challenges-and-tradeoffs&#34;&gt;Challenges and tradeoffs
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Accuracy vs. size:&lt;/strong&gt; Compressing models can reduce accuracy; balancing task needs with resource budgets is essential.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Energy &amp;amp; thermal limits:&lt;/strong&gt; Continuous or heavy inference affects battery and device temperature; use duty‑cycling and event‑driven inference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security:&lt;/strong&gt; Protect models from tampering and extraction—use signed updates and secure enclaves where possible.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycle management:&lt;/strong&gt; Updating models across a fragmented device fleet needs robust versioning and rollout strategies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Device heterogeneity:&lt;/strong&gt; Diverse hardware and OS capabilities expand testing surface and complicate optimizations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;organizational-considerations&#34;&gt;Organizational considerations
&lt;/h2&gt;&lt;p&gt;Delivering on‑device features requires cross‑functional collaboration: ML engineers, embedded/firmware teams, product managers, and security/compliance stakeholders. Expect higher engineering effort up front and potentially lower ongoing cloud costs. Bring legal teams into the loop for regulated domains such as healthcare and finance.&lt;/p&gt;
&lt;h2 id=&#34;future-outlook&#34;&gt;Future outlook
&lt;/h2&gt;&lt;p&gt;Hardware will continue to improve (wider NPU availability and greater on‑chip memory), and software tooling will keep pushing capabilities to the edge. Advances in continual on‑device learning, better federated methods, and tighter hardware/software co‑design will expand the complexity of tasks that can run locally. The most likely future is hybrid: heavy training and model orchestration in the cloud, with fast, private, personalized inference on device.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;On‑device AI reshapes product design beyond a technical optimization: it influences user experience, privacy posture, and operational cost. When implemented thoughtfully—balancing accuracy, latency, energy, and security—it unlocks resilient, private, and immediate experiences that were previously impractical.&lt;/p&gt;
&lt;h2 id=&#34;pros-vs-cons&#34;&gt;Pros vs Cons
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Pros&lt;/th&gt;
          &lt;th&gt;Cons&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Low latency — enables real‑time UX&lt;/td&gt;
          &lt;td&gt;Limited model capacity compared to cloud-scale models&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Privacy by design — sensitive data stays local&lt;/td&gt;
          &lt;td&gt;Higher device engineering and testing effort&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Offline reliability&lt;/td&gt;
          &lt;td&gt;Battery and thermal constraints for sustained inference&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Lower bandwidth and operational cost&lt;/td&gt;
          &lt;td&gt;Fragmentation across hardware and OS increases optimization complexity&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Personalized, private experiences&lt;/td&gt;
          &lt;td&gt;Secure model updates and lifecycle management add operational overhead&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;links&#34;&gt;Links
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://v-chandra.github.io/on-device-llms/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://v-chandra.github.io/on-device-llms/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.liquid.ai/blog/introducing-lfm2-5-the-next-generation-of-on-device-ai&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.liquid.ai/blog/introducing-lfm2-5-the-next-generation-of-on-device-ai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ggml-org/llama.cpp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/ggml-org/llama.cpp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.raspberrypi.com/news/introducing-the-raspberry-pi-ai-hat-plus-2-generative-ai-on-raspberry-pi-5/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.raspberrypi.com/news/introducing-the-raspberry-pi-ai-hat-plus-2-generative-ai-on-raspberry-pi-5/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.lemondeinformatique.fr/publi_info/lire-ia-embarquee-un-choix-uniquement-technologique-1355.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.lemondeinformatique.fr/publi_info/lire-ia-embarquee-un-choix-uniquement-technologique-1355.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>The Adolescence of Technology</title>
        <link>https://blog.thomasplantain.fr/post/amodei/</link>
        <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.thomasplantain.fr/post/amodei/</guid>
        <description>&lt;img src="https://blog.thomasplantain.fr/img/cover.jpg" alt="Featured image of post The Adolescence of Technology" /&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.darioamodei.com/essay/the-adolescence-of-technology&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.darioamodei.com/essay/the-adolescence-of-technology&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;résumé-en-français-de-lessai-de-dario-amodei&#34;&gt;Résumé en Français de l&amp;rsquo;essai de Dario Amodei
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Cet essai examine les risques existentiels posés par les systèmes d&amp;rsquo;IA puissants, que Amodei définit comme une IA plus intelligente que les lauréats du prix Nobel dans la plupart des domaines, capable d&amp;rsquo;action autonome et évolutive jusqu&amp;rsquo;à des millions d&amp;rsquo;instances. Il soutient que l&amp;rsquo;humanité entre dans une &amp;ldquo;adolescence technologique&amp;rdquo; critique qui mettra à l&amp;rsquo;épreuve notre survie.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;cinq-catégories-principales-de-risques&#34;&gt;Cinq catégories principales de risques
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Risques d&amp;rsquo;autonomie&lt;/strong&gt; - Les systèmes d&amp;rsquo;IA peuvent développer des objectifs désalignés à travers des processus d&amp;rsquo;entraînement imprévisibles, cherchant potentiellement le pouvoir ou agissant de manière destructrice en raison d&amp;rsquo;états psychologiques étranges plutôt que de suivre les valeurs humaines.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Utilisation abusive pour la destruction&lt;/strong&gt; - L&amp;rsquo;IA puissante pourrait permettre aux individus de créer des armes biologiques ou autres armes de destruction massive, brisant la corrélation entre capacité et motivation en donnant aux &amp;ldquo;solitaires perturbés&amp;rdquo; des capacités de niveau doctorat.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Utilisation abusive pour s&amp;rsquo;emparer du pouvoir&lt;/strong&gt; - Les régimes autoritaires pourraient utiliser l&amp;rsquo;IA pour une surveillance totale, des armes autonomes et une domination mondiale, créant potentiellement un système totalitaire imbattable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Perturbation économique&lt;/strong&gt; - L&amp;rsquo;avancement rapide de l&amp;rsquo;IA peut causer un chômage de masse et une concentration extrême de richesse.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Effets indirects&lt;/strong&gt; - Les changements technologiques rapides pourraient déstabiliser la société de manières imprévisibles.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;défenses-proposées&#34;&gt;Défenses proposées
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Entraînement constitutionnel de l&amp;rsquo;IA pour inculquer des valeurs et un caractère robustes&lt;/li&gt;
&lt;li&gt;Interprétabilité mécaniste pour diagnostiquer le comportement des modèles&lt;/li&gt;
&lt;li&gt;Transparence et surveillance des systèmes d&amp;rsquo;IA&lt;/li&gt;
&lt;li&gt;Coordination industrielle et réglementation gouvernementale (en commençant par les lois sur la transparence)&lt;/li&gt;
&lt;li&gt;Garde-fous contre les armes biologiques et classificateurs&lt;/li&gt;
&lt;li&gt;Coopération internationale sur les menaces existentielles&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Amodei souligne l&amp;rsquo;importance d&amp;rsquo;éviter le &amp;ldquo;catastrophisme&amp;rdquo; tout en prenant les risques au sérieux, en mettant en œuvre des interventions chirurgicales et en maintenant l&amp;rsquo;espoir que l&amp;rsquo;humanité peut prévaloir grâce à une planification minutieuse et une action décisive.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>Personal Coding Agent</title>
        <link>https://blog.thomasplantain.fr/post/agent/</link>
        <pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.thomasplantain.fr/post/agent/</guid>
        <description>&lt;img src="https://blog.thomasplantain.fr/img/hal/hal12.png" alt="Featured image of post Personal Coding Agent" /&gt;&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/hal/logo.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;HAL9000 tui&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;hal9000&#34;&gt;HAL9000
&lt;/h2&gt;&lt;h3 id=&#34;introduction&#34;&gt;Introduction
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;HAL9000 is a personal coding agent. It is a powerful tool that can help you write code faster and more efficiently.&lt;/p&gt;
&lt;p&gt;HAL9000 is written in Go and is designed to be easy to use and understand.&lt;/p&gt;
&lt;p&gt;It uses Ollama, an open-source project that provides a simple API for advanced language models.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;features&#34;&gt;Features
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;TUI with lipgloss&lt;/li&gt;
&lt;li&gt;Ollama API integration for advanced language models (Qwen3)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/hal/hal12.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;HAL9000 tui&#34;
	
	
&gt;&lt;/p&gt;
&lt;h4 id=&#34;tools&#34;&gt;Tools
&lt;/h4&gt;&lt;blockquote&gt;
&lt;p&gt;My coding agent should be able to create files, directories, and execute commands.&lt;/p&gt;
&lt;p&gt;I started with &lt;strong&gt;create_file&lt;/strong&gt; tool. I tested with &lt;strong&gt;Bruno&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/hal/ollama-qwen-tools.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;HAL9000 tools&#34;
	
	
&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Kokoro TTS</title>
        <link>https://blog.thomasplantain.fr/post/kokoro/</link>
        <pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.thomasplantain.fr/post/kokoro/</guid>
        <description>&lt;img src="https://blog.thomasplantain.fr/img/cover.jpg" alt="Featured image of post Kokoro TTS" /&gt;&lt;h2 id=&#34;text-to-speech&#34;&gt;Text To Speech
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Technology that enables text to be converted into speech sounds imitative of the human voice.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;run-locally&#34;&gt;Run locally
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/remsky/Kokoro-FastAPI&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/remsky/Kokoro-FastAPI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And you can play with web ui:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;http://localhost:8880/web&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/kokoro/kokoro-webui.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Kokoro web ui&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;n8n-workflow-with-kokoro&#34;&gt;n8n workflow with Kokoro
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;I want to hear Qwen answer &amp;#x1f60a;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;First I tested kokoro API with Bruno.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/kokoro/bruno-kokoro.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;RBruno&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;And then I added it to a new n8n workflow.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/kokoro/n8n-kokoro.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Kokoro API call&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;I had to remove all special characters.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/kokoro/kokoro-api-call.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Kokoro API call&#34;
	
	
&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>RAG n8n</title>
        <link>https://blog.thomasplantain.fr/post/n8n/</link>
        <pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate>
        
        <guid>https://blog.thomasplantain.fr/post/n8n/</guid>
        <description>&lt;img src="https://blog.thomasplantain.fr/img/rag_library.avif" alt="Featured image of post RAG n8n" /&gt;&lt;h2 id=&#34;rag-with-n8n&#34;&gt;RAG with n8n
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#rag-with-n8n&#34; &gt;RAG with n8n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#overview&#34; &gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#before-you-start&#34; &gt;Before you start&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#whats-rag&#34; &gt;What&amp;rsquo;s RAG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#whats-you-need&#34; &gt;What&amp;rsquo;s you need&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#installation&#34; &gt;Installation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#n8n&#34; &gt;n8n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#qdrant&#34; &gt;Qdrant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#ollama&#34; &gt;Ollama&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#rag-workflow&#34; &gt;RAG Workflow&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#data-ingestion&#34; &gt;Data ingestion&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#qdrant-collections&#34; &gt;Qdrant collections&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#chatbot&#34; &gt;Chatbot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#see-also&#34; &gt;See also&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#sml-small-language-model&#34; &gt;SML (Small Language Model)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#links&#34; &gt;Links&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;overview&#34;&gt;Overview
&lt;/h2&gt;&lt;p&gt;This guide explains how to implement a RAG (Retrieval Augmented Generation) on your laptop.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Embedded AI&lt;/li&gt;
&lt;li&gt;Data sovereignty&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;before-you-start&#34;&gt;Before you start
&lt;/h2&gt;&lt;h3 id=&#34;whats-rag&#34;&gt;What&amp;rsquo;s RAG
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;RAG (retrieval augmented generation) is a technology that improves the responses of generative AI models by feeding them with knowledge from internal databases.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/n8n/RAG.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;nvidia RAG&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;whats-you-need&#34;&gt;What&amp;rsquo;s you need
&lt;/h3&gt;&lt;p&gt;Before you put the RAG in place, ensure you already have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Ollama&lt;/li&gt;
&lt;li&gt;md files&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;installation&#34;&gt;Installation
&lt;/h2&gt;&lt;h3 id=&#34;n8n&#34;&gt;n8n
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;n8n is a workflow automation platform that gives technical teams the flexibility of code with the speed of no-code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Run locally&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker volume create n8n_data
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Go to the web &lt;a class=&#34;link&#34; href=&#34;http://localhost:5678/home/workflows&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;n8n Dashboard&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/n8n/n8n-portal.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;RAG perso&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;qdrant&#34;&gt;Qdrant
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Qdrant (read: quadrant) is a vector similarity search engine and vector database. It provides a production-ready service with a convenient API to store, search, and manage points—vectors with an additional payload Qdrant is tailored to extended filtering support.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Run localy&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker volume create qdrant_data
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker run -p 6333:6333 -v qdrant_data:/qdrant/storage qdrant/qdrant
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://localhost:6333/dashboard&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;qdrant Dashboard&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;ollama&#34;&gt;Ollama
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Ollama is the easiest way to get up and running with large language models such as gpt-oss, Gemma 3, DeepSeek-R1, Qwen3 and more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/n8n/ollama-chat.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;RAG perso&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;rag-workflow&#34;&gt;RAG Workflow
&lt;/h2&gt;&lt;p&gt;The RAG is composed in 2 workflows.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/n8n/n8n-RAG-Qdrant.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;RAG perso&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;data-ingestion&#34;&gt;Data ingestion
&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/n8n/rag-data.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;RAG perso&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;It starts with the file submission trigger, to upload CVs (in markdown format).&lt;/p&gt;
&lt;p&gt;We add Qdrant connector to store the files in the vector database. We need an embed model to split the files into vectors.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/n8n/qdrant-config.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Qdrant connector&#34;
	
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Emebed model: mxbai-embed-large&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/n8n/qdrant-embed.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Qdrant embedding&#34;
	
	
&gt;&lt;/p&gt;
&lt;h4 id=&#34;qdrant-collections&#34;&gt;Qdrant collections
&lt;/h4&gt;&lt;p&gt;When the Data Ingestion workflow is executed, you can go to Qdrant dashboard to see the collections.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/n8n/qdrant-collection.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Qdrant embedding&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;chatbot&#34;&gt;Chatbot
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Now the CVs are in the Qdrant vector database, we can chat to request some informations about the candidate.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/n8n/rag-chatbot.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;RAG perso&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;We start with the Chat trigger connected to an AI agent, with Qwen3 model.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/n8n/agent-qwen.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Qwen3&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;We create the tool to be able to search in our Qdrant collection and we had a simple prompt.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/n8n/hr-prompt.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;HR prompt&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&amp;#x1f525; And finaly we test our chat by asking informations about a candidate.
We can see that the agent called qdrant to retrieve the data and generate a nice answer.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.thomasplantain.fr/img/n8n/chat-exec.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;chat&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;see-also&#34;&gt;See also
&lt;/h2&gt;&lt;h3 id=&#34;sml-small-language-model&#34;&gt;SML (Small Language Model)
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Small language models, on the other hand, use far fewer parameters, typically ranging from a few thousand to a few hundred million. This make them more feasible to train and host in resource-constrained environments such as a single computer or even a mobile device.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://v-chandra.github.io/on-device-llms/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://v-chandra.github.io/on-device-llms/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;links&#34;&gt;Links
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/n8n-io/n8n&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;n8n link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/qdrant/qdrant&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Qdrant link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/ollama/ollama&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ollama link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
