<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Azure | The .NET Blog</title><link>https://thedotnetblog.com/fr/tags/azure/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>fr</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Tue, 02 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/fr/tags/azure/index.xml" rel="self" type="application/rss+xml"/><item><title>Microsoft Foundry Avril 2026 : Foundry Local GA, GPT-5.5, CodeAct avec Hyperlight</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/microsoft-foundry-april-2026-whats-new/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/microsoft-foundry-april-2026-whats-new/</guid><description>Le récapitulatif Foundry d'avril est chargé : Foundry Local atteint la GA, GPT-5.5 arrive, Agent Framework reçoit le traçage OpenTelemetry, CodeAct exécute Python dans des micro-VMs Hyperlight, et le tableau de bord de surveillance des agents est disponible.</description><content:encoded>&lt;p&gt;Un mois chargé pour Microsoft Foundry. Voici les annonces les plus importantes.&lt;/p&gt;
&lt;h2 id="foundry-local-est-généralement-disponible"&gt;Foundry Local est Généralement Disponible&lt;/h2&gt;
&lt;p&gt;Foundry Local — le runtime d&amp;rsquo;IA local multiplateforme de Microsoft — passe de la préversion à la GA sur Windows, macOS (Apple Silicon) et Linux x64. Inférence de modèles locaux prête pour la production avec un SDK convivial pour les développeurs. La version 1.1 ajoute la transcription, les embeddings et la prise en charge de l&amp;rsquo;API Responses.&lt;/p&gt;
&lt;h2 id="gpt-55"&gt;GPT-5.5&lt;/h2&gt;
&lt;p&gt;Le dernier modèle de la famille GPT-5 est maintenant disponible dans Foundry. Quota par défaut pour les abonnements Tier 5 et Tier 6. Si vous avez travaillé avec des variantes antérieures de GPT-5, cela vaut la peine d&amp;rsquo;être évalué pour vos cas d&amp;rsquo;utilisation.&lt;/p&gt;
&lt;h2 id="traçage-dagent-framework-dans-foundry"&gt;Traçage d&amp;rsquo;Agent Framework dans Foundry&lt;/h2&gt;
&lt;p&gt;Deux fonctionnalités de traçage sont disponibles en préversion ce mois-ci :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Traçage de Microsoft Agent Framework&lt;/strong&gt; — Les agents MAF peuvent maintenant émettre des traces OpenTelemetry dans Foundry. Déboguez le comportement des agents, tracez l&amp;rsquo;exécution en plusieurs étapes, exposez la latence et les erreurs dans les appels d&amp;rsquo;outils. Cela comble un vrai manque : savoir &lt;em&gt;ce que votre agent a réellement fait&lt;/em&gt; en production, pas seulement ce qu&amp;rsquo;il a retourné.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Traçage des agents hébergés&lt;/strong&gt; — Les sessions, appels d&amp;rsquo;outils et étapes d&amp;rsquo;exécution des agents hébergés apparaissent également dans les traces Foundry. La même histoire d&amp;rsquo;observabilité étendue au niveau hébergé.&lt;/p&gt;
&lt;h2 id="codeact-avec-hyperlight-alpha"&gt;CodeAct avec Hyperlight (Alpha)&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est l&amp;rsquo;ajout techniquement le plus intéressant : Agent Framework peut désormais exécuter du code Python dans des micro-machines virtuelles &lt;a href="https://github.com/hyperlight-dev/hyperlight"&gt;Hyperlight&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;CodeAct est le modèle où un agent génère et exécute du code Python comme outil. La préoccupation évidente est la sécurité — vous exécutez du code généré par le modèle. Les micro-VMs d&amp;rsquo;Hyperlight fournissent une isolation au niveau du processus avec un temps de démarrage proche du natif, rendant l&amp;rsquo;exécution de code en sandbox pratique sans la surcharge de conteneurs ou de VMs complets.&lt;/p&gt;
&lt;p&gt;Pour les flux de travail agentiques où l&amp;rsquo;exécution de code est nécessaire, c&amp;rsquo;est une amélioration de sécurité significative par rapport à l&amp;rsquo;exécution de code dans le processus hôte.&lt;/p&gt;
&lt;h2 id="tableau-de-bord-de-surveillance-des-agents-préversion"&gt;Tableau de Bord de Surveillance des Agents (Préversion)&lt;/h2&gt;
&lt;p&gt;Un tableau de bord d&amp;rsquo;opérations unifié combinant l&amp;rsquo;utilisation des tokens, la latence, le taux de succès des exécutions et les scores des évaluateurs en une seule vue. La distinction par rapport aux tableaux de bord d&amp;rsquo;observabilité classiques : il inclut les résultats d&amp;rsquo;évaluation aux côtés des métriques opérationnelles, vous permettant de corréler « l&amp;rsquo;agent est plus lent » avec « les scores de l&amp;rsquo;évaluateur ont chuté » — ou de confirmer qu&amp;rsquo;ils ne sont pas liés.&lt;/p&gt;
&lt;h2 id="évaluateurs-personnalisés-dévaluation-continue-préversion"&gt;Évaluateurs Personnalisés d&amp;rsquo;Évaluation Continue (Préversion)&lt;/h2&gt;
&lt;p&gt;Vous pouvez maintenant apporter vos propres évaluateurs basés sur du code ou des prompts dans les pipelines d&amp;rsquo;évaluation continue. Auparavant, l&amp;rsquo;évaluation continue était limitée aux évaluateurs intégrés. Les évaluateurs personnalisés vous permettent d&amp;rsquo;appliquer des critères de qualité spécifiques à votre équipe dans votre boucle de surveillance en production.&lt;/p&gt;
&lt;h2 id="inventaire-des-agents-dans-le-plan-de-contrôle"&gt;Inventaire des Agents dans le Plan de Contrôle&lt;/h2&gt;
&lt;p&gt;La vue Operate du Plan de Contrôle Foundry affiche désormais tous les agents pris en charge dans un abonnement : agents Foundry, Azure SRE Agent, boucles d&amp;rsquo;agents Logic Apps et agents personnalisés enregistrés. Une vue pour comprendre ce qui est déployé et où.&lt;/p&gt;
&lt;p&gt;Publication originale : &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-apr-2026/"&gt;What&amp;rsquo;s new in Microsoft Foundry | April 2026&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Votre Agent MAF Local Vient d'Obtenir une Maison en Production</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/maf-agent-local-to-production-foundry-hosted-agents/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/maf-agent-local-to-production-foundry-hosted-agents/</guid><description>Foundry Hosted Agents donne à votre agent Microsoft Agent Framework une identité, un scaling, une persistance de session et une observabilité sans configuration supplémentaire. Voici à quoi cela ressemble en pratique.</description><content:encoded>&lt;p&gt;Faire fonctionner un agent localement est la partie amusante. La partie délicate est tout ce qui vient après : le déployer sans perdre la tête, gérer les sessions, configurer l&amp;rsquo;identité, câbler l&amp;rsquo;observabilité. Cela signifie généralement beaucoup d&amp;rsquo;infrastructure personnalisée.&lt;/p&gt;
&lt;p&gt;Foundry Hosted Agents vient de supprimer la majeure partie de cette infrastructure pour les utilisateurs de Microsoft Agent Framework (MAF).&lt;/p&gt;
&lt;h2 id="ce-que-foundry-hosted-agents-fait-vraiment"&gt;Ce que Foundry Hosted Agents Fait Vraiment&lt;/h2&gt;
&lt;p&gt;Lorsque vous déployez un agent MAF dans Foundry Hosted Agents, la plateforme gère une liste étonnamment longue de choses que vous auriez autrement à construire vous-même :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mise à l&amp;rsquo;échelle à zéro&lt;/strong&gt; — votre agent ne coûte rien en idle et redémarre automatiquement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sandboxes isolés par VM par session&lt;/strong&gt; — chaque session utilisateur obtient son propre sandbox avec persistance du système de fichiers qui survit aux événements de réduction d&amp;rsquo;échelle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entra ID intégré&lt;/strong&gt; — chaque agent obtient sa propre identité pour appeler les modèles Foundry, Toolbox et les services Azure sans secrets dans l&amp;rsquo;image&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Déploiements versionnés&lt;/strong&gt; — chaque déploiement est un instantané immuable, avec support de déploiement blue/green et canary&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observabilité sans configuration&lt;/strong&gt; — &lt;code&gt;APPLICATIONINSIGHTS_CONNECTION_STRING&lt;/code&gt; est injecté au runtime pour que les traces OpenTelemetry de MAF s&amp;rsquo;écoulent automatiquement dans App Insights&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce dernier point est vraiment appréciable. Pas de câblage supplémentaire, pas de configuration additionnelle. Les traces apparaissent simplement.&lt;/p&gt;
&lt;h2 id="la-différence-de-code-est-minime"&gt;La Différence de Code Est Minime&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est ce que j&amp;rsquo;apprécie le plus dans cette intégration. Vous ne réécrivez pas votre agent. Vous l&amp;rsquo;encapsulez simplement :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En .NET :&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI.Foundry.Hosting&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WebApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddFoundryResponses&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MapFoundryResponses&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;En Python :&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ResponsesHostServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;C&amp;rsquo;est tout. La même logique que vous avez testée localement est ce qui s&amp;rsquo;exécute en production. La plateforme l&amp;rsquo;encapsule dans l&amp;rsquo;infrastructure de gestion de sessions, d&amp;rsquo;identité et de scaling.&lt;/p&gt;
&lt;h2 id="deux-protocoles-un-agent"&gt;Deux Protocoles, Un Agent&lt;/h2&gt;
&lt;p&gt;Les Hosted Agents supportent deux styles d&amp;rsquo;endpoints :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Responses&lt;/strong&gt; (&lt;code&gt;/responses&lt;/code&gt;) — compatible OpenAI, gère l&amp;rsquo;historique des conversations et le streaming. Bon défaut pour les agents de type chat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invocations&lt;/strong&gt; (&lt;code&gt;/invocations&lt;/code&gt;) — vous définissez le schéma requête/réponse. Bon pour les workflows non conversationnels.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous construisez quelque chose qui ressemble à une conversation, commencez avec Responses. Si vous construisez un agent de type API qui prend une entrée structurée et retourne une sortie structurée, Invocations vous donne la flexibilité.&lt;/p&gt;
&lt;h2 id="le-flux-de-déploiement-avec-azd"&gt;Le Flux de Déploiement avec &lt;code&gt;azd&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Lorsque vous exécutez &lt;code&gt;azd up&lt;/code&gt; avec un agent MAF :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Crée optionnellement un projet Foundry et déploie un modèle&lt;/li&gt;
&lt;li&gt;Empaquette votre code et pousse une image vers Azure Container Registry&lt;/li&gt;
&lt;li&gt;Provisionne du calcul depuis l&amp;rsquo;image ACR&lt;/li&gt;
&lt;li&gt;Attribue un Entra ID dédié à l&amp;rsquo;agent&lt;/li&gt;
&lt;li&gt;Expose un endpoint stable (&lt;code&gt;https://{project_endpoint}/agents/{agent_name}&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Gère tout le reste à partir de ce point&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Les sessions persistent jusqu&amp;rsquo;à 30 jours. Le calcul inactif est déprovisionné après 15 minutes et restauré transparemment sur la prochaine requête. Du point de vue de l&amp;rsquo;agent, rien n&amp;rsquo;a changé.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;La distance entre &amp;ldquo;fonctionnant localement&amp;rdquo; et &amp;ldquo;s&amp;rsquo;exécutant en production&amp;rdquo; a toujours été longue et douloureuse pour les agents IA. Foundry Hosted Agents + MAF réduit considérablement cet écart. Si vous avez déjà un agent local construit avec Agent Framework, cela vaut la peine d&amp;rsquo;essayer aujourd&amp;rsquo;hui.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;équipe annonce que GA arrive bientôt — c&amp;rsquo;est actuellement en preview. Consultez les &lt;a href="https://learn.microsoft.com/en-us/agent-framework/hosting/foundry-hosted-agent"&gt;docs d&amp;rsquo;intégration MAF Hosted Agent&lt;/a&gt; et les &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/04-hosting/FoundryHostedAgents"&gt;exemples .NET&lt;/a&gt; pour démarrer.&lt;/p&gt;
&lt;p&gt;Article original : &lt;a href="https://devblogs.microsoft.com/agent-framework/from-local-to-production-deploy-your-microsoft-agent-framework-agent-with-foundry-hosted-agents/"&gt;From Local to Production: Deploy Your Microsoft Agent Framework Agent with Foundry Hosted Agents&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Foundry Local 1.1 : Transcription en Temps Réel, Embeddings et l'API de Réponses</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-local-11-transcription-embeddings-responses-api/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-local-11-transcription-embeddings-responses-api/</guid><description>Foundry Local 1.1 ajoute la transcription en direct depuis le microphone, les embeddings de texte et le support de l'API de Réponses — tout s'exécutant localement sans dépendance cloud, sans latence réseau, sans coût par token.</description><content:encoded>&lt;p&gt;Foundry Local 1.0 a prouvé le concept : exécuter des modèles d&amp;rsquo;IA localement sur Windows, macOS (Apple Silicon) et Linux x64 avec un SDK adapté aux développeurs. La version 1.1 ajoute trois capacités qui couvrent de nombreux cas d&amp;rsquo;usage réels en production.&lt;/p&gt;
&lt;h2 id="transcription-audio-en-direct"&gt;Transcription Audio en Direct&lt;/h2&gt;
&lt;p&gt;La nouvelle fonctionnalité la plus significative : le streaming de parole en texte en temps réel directement depuis le microphone. Sous-titres, interfaces vocales, transcription de réunions, outils d&amp;rsquo;accessibilité — tout s&amp;rsquo;exécutant localement sans aucune dépendance cloud.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;API est basée sur des sessions et transmet les résultats au fur et à mesure qu&amp;rsquo;ils arrivent, avec des marqueurs &lt;code&gt;is_final&lt;/code&gt; pour distinguer le texte intermédiaire du texte finalisé. Disponible pour toutes les liaisons de langages : JavaScript, C#, Python et Rust.&lt;/p&gt;
&lt;p&gt;Chargez un modèle de parole en streaming depuis le catalogue, créez une session avec les paramètres audio (fréquence d&amp;rsquo;échantillonnage, canaux, langue), lancez-la, poussez des blocs audio PCM bruts et consommez le flux asynchrone de résultats. Le post contient des exemples complets en Python et C#.&lt;/p&gt;
&lt;h2 id="embeddings-de-texte"&gt;Embeddings de Texte&lt;/h2&gt;
&lt;p&gt;Recherche sémantique, pipelines RAG, clustering, correspondance de similarité — tout cela nécessite des embeddings. Foundry Local 1.1 ajoute le support des modèles d&amp;rsquo;embedding pour générer des vecteurs localement depuis le même SDK, sans envoyer de données vers un endpoint cloud.&lt;/p&gt;
&lt;p&gt;Pour les applications où la résidence des données est importante ou où vous traitez du contenu sensible, la génération locale d&amp;rsquo;embeddings est une capacité significative.&lt;/p&gt;
&lt;h2 id="api-de-réponses"&gt;API de Réponses&lt;/h2&gt;
&lt;p&gt;Foundry Local prend maintenant en charge l&amp;rsquo;&lt;a href="https://platform.openai.com/docs/api-reference/responses"&gt;API de Réponses&lt;/a&gt; — l&amp;rsquo;interface structurée conçue pour les interactions agentiques. Cela ajoute :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Appel d&amp;rsquo;outils&lt;/strong&gt; — laissez les modèles s&amp;rsquo;exécutant localement invoquer des outils que vous définissez&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entrée multimodale vision-langage&lt;/strong&gt; — passez image + texte à des modèles capables de vision&lt;/li&gt;
&lt;li&gt;Compatible avec la forme d&amp;rsquo;API standard, donc les agents existants ciblant l&amp;rsquo;API de Réponses d&amp;rsquo;OpenAI fonctionnent contre des modèles locaux&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="améliorations-de-la-taille-du-paquet"&gt;Améliorations de la Taille du Paquet&lt;/h2&gt;
&lt;p&gt;Deux changements réduisent la taille du paquet JavaScript :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La couche FFI &lt;code&gt;koffi&lt;/code&gt; a été remplacée par un addon C Node-API personnalisé&lt;/li&gt;
&lt;li&gt;Le fournisseur d&amp;rsquo;exécution WebGPU est livré comme plugin séparé, donc les applications qui n&amp;rsquo;ont pas besoin d&amp;rsquo;accélération GPU ne paient pas le coût de taille&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le SDK C# cible maintenant des versions de framework inférieures pour une compatibilité .NET plus large.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important"&gt;Pourquoi C&amp;rsquo;est Important&lt;/h2&gt;
&lt;p&gt;Les trois capacités ensemble — transcription, embeddings, appel d&amp;rsquo;outils — couvrent les blocs de construction essentiels de nombreuses applications d&amp;rsquo;IA. Les exécuter localement signifie :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pas d&amp;rsquo;internet requis&lt;/li&gt;
&lt;li&gt;Pas de coûts par token&lt;/li&gt;
&lt;li&gt;Aucune donnée ne quitte la machine&lt;/li&gt;
&lt;li&gt;Latence constante quelles que soient les conditions réseau&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Foundry Local est le bon choix pour les scénarios en périphérie, les charges de travail sensibles à la vie privée, les applications hors ligne, ou tout ce où vous voulez éviter la dépendance cloud pendant le développement.&lt;/p&gt;
&lt;p&gt;Post original : &lt;a href="https://devblogs.microsoft.com/foundry/foundry-local-v1-1/"&gt;Foundry Local 1.1: Live Transcription, Embeddings, and Responses API&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Cosmos DB Shell Est en Préversion Publique — Et Il a un Serveur MCP Intégré</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/cosmosdb-shell-public-preview-mcp-server-cli/</link><pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/cosmosdb-shell-public-preview-mcp-server-cli/</guid><description>Azure Cosmos DB Shell est un nouveau CLI open source qui expose les commandes de base de données comme outils MCP. Vos agents IA peuvent naviguer dans les conteneurs, exécuter des requêtes et gérer des données en utilisant la même interface que vous.</description><content:encoded>&lt;p&gt;Si vous avez déjà dû naviguer entre un onglet de portail, un exemple de SDK et un script à moitié terminé juste pour répondre à une question Cosmos DB, vous connaissez déjà la friction que ce projet est conçu pour éliminer.&lt;/p&gt;
&lt;p&gt;Azure Cosmos DB Shell vient d&amp;rsquo;entrer en préversion publique. C&amp;rsquo;est un CLI open source avec une syntaxe de type bash et — la partie qui le rend intéressant — un serveur MCP intégré.&lt;/p&gt;
&lt;h2 id="ce-qui-le-différencie-des-autres-clis-de-base-de-données"&gt;Ce Qui le Différencie des Autres CLIs de Base de Données&lt;/h2&gt;
&lt;p&gt;Le CLI lui-même est utile : commandes familières, support de script, intégration CI/CD. Cette partie est le minimum attendu pour un outil de base de données orienté développeur.&lt;/p&gt;
&lt;p&gt;La partie intéressante est l&amp;rsquo;intégration du serveur MCP. Chaque commande que le CLI expose devient disponible comme outil MCP que vos agents IA peuvent appeler. Il n&amp;rsquo;y a pas de couche API personnalisée, pas de code d&amp;rsquo;intégration à écrire. Votre agent peut :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Naviguer dans les hiérarchies de bases de données avec &lt;code&gt;cd&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Exécuter des requêtes SQL avec &lt;code&gt;query&lt;/code&gt; et obtenir des résultats structurés&lt;/li&gt;
&lt;li&gt;Créer et modifier des éléments avec &lt;code&gt;create item&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;rm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Gérer des bases de données et des conteneurs avec &lt;code&gt;mkdb&lt;/code&gt;, &lt;code&gt;mkcon&lt;/code&gt;, &lt;code&gt;rmdb&lt;/code&gt;, &lt;code&gt;rmcon&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Inspecter le contexte actuel avec &lt;code&gt;endpoint&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le changement clé : votre agent ne parle pas à une API Cosmos DB — il parle à la même interface shell que vous utilisez. Les commandes sont déterministes, auditables et open source pour que vous puissiez inspecter exactement ce qui se passe.&lt;/p&gt;
&lt;h2 id="la-base-open-source-compte"&gt;La Base Open Source Compte&lt;/h2&gt;
&lt;p&gt;Ce n&amp;rsquo;est pas un service géré boîte noire. Le shell est open source, ce qui signifie :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les équipes de sécurité peuvent auditer l&amp;rsquo;implémentation&lt;/li&gt;
&lt;li&gt;Les équipes de plateforme peuvent le forker et l&amp;rsquo;étendre pour leurs standards spécifiques&lt;/li&gt;
&lt;li&gt;Les développeurs peuvent contribuer des améliorations qui bénéficient à tous&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour les équipes d&amp;rsquo;entreprise adoptant des outils IA, &amp;ldquo;peut-on voir exactement comment ça fonctionne&amp;rdquo; est de plus en plus une exigence non optionnelle. L&amp;rsquo;open source ici est un différenciateur significatif.&lt;/p&gt;
&lt;h2 id="trois-scénarios-qui-deviennent-plus-faciles"&gt;Trois Scénarios Qui Deviennent Plus Faciles&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Analyse intelligente des données&lt;/strong&gt; — connectez un agent au shell, posez des questions en langage naturel, obtenez des résultats de requêtes structurés. L&amp;rsquo;agent gère la construction de la requête ; le shell gère l&amp;rsquo;exécution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gestion autonome des données&lt;/strong&gt; — les workflows qui doivent créer, mettre à jour ou supprimer des données dans Cosmos DB peuvent le faire via les outils MCP sans avoir besoin d&amp;rsquo;une intégration personnalisée.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Surveillance et alertes en temps réel&lt;/strong&gt; — un agent peut interroger périodiquement des conteneurs, comparer les résultats et signaler des anomalies via le canal de notification approprié.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;interface MCP rend ces scénarios composables avec n&amp;rsquo;importe quelle plateforme IA qui parle MCP — pas seulement les outils Microsoft.&lt;/p&gt;
&lt;h2 id="pour-commencer"&gt;Pour Commencer&lt;/h2&gt;
&lt;p&gt;Le shell est en préversion publique. Installez-le, configurez votre connexion Cosmos DB et activez le serveur MCP. De là, tout hôte d&amp;rsquo;agent compatible MCP peut découvrir et utiliser les outils.&lt;/p&gt;
&lt;p&gt;Post original : &lt;a href="https://devblogs.microsoft.com/cosmosdb/azure-cosmos-db-shell-public-preview-ai-mcp-cli/"&gt;Announcing the Public Preview of Azure Cosmos DB Shell: Open-Source Power Meets AI-Driven Database Automation&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Votre Agent IA a un Problème d'Identité (Et Voici le Modèle qui le Résout)</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azd-least-privilege-ai-agents-oauth-token-pattern/</link><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azd-least-privilege-ai-agents-oauth-token-pattern/</guid><description>Un nouveau modèle azd de Curity et Microsoft montre comment créer des agents IA qui utilisent des tokens OAuth de courte durée avec des scopes à grain fin — pour que les agents ne puissent jamais voir des données qu'ils ne devraient pas voir.</description><content:encoded>&lt;p&gt;Il y a un moment dans chaque projet d&amp;rsquo;agent IA qui ressemble à ceci : la démo fonctionne parfaitement, l&amp;rsquo;agent interprète le langage naturel, appelle les bonnes API, retourne les bonnes données. Ensuite vous commencez à penser aux vrais utilisateurs.&lt;/p&gt;
&lt;p&gt;Qu&amp;rsquo;est-ce qui empêche la session d&amp;rsquo;agent d&amp;rsquo;un utilisateur de voir les données d&amp;rsquo;un autre utilisateur ? Et si l&amp;rsquo;agent est trompé par une injection de prompt ? Et s&amp;rsquo;il appelle un outil d&amp;rsquo;une manière inattendue ?&lt;/p&gt;
&lt;p&gt;Ce ne sont pas des cas limites. Ce sont des décisions de conception que vous devez prendre avant de livrer.&lt;/p&gt;
&lt;p&gt;Un nouveau modèle &lt;code&gt;azd&lt;/code&gt; de Curity et Microsoft vous donne une référence fonctionnelle pour exactement ce problème.&lt;/p&gt;
&lt;h2 id="le-problème-central--authentification--autorisation"&gt;Le Problème Central : Authentification ≠ Autorisation&lt;/h2&gt;
&lt;p&gt;La plupart des exemples d&amp;rsquo;agents gèrent bien l&amp;rsquo;authentification des utilisateurs. Ils gèrent mal l&amp;rsquo;autorisation. Savoir &lt;em&gt;qui&lt;/em&gt; est l&amp;rsquo;utilisateur ne vous dit pas &lt;em&gt;quelles données&lt;/em&gt; il devrait voir.&lt;/p&gt;
&lt;p&gt;Une application cliente traditionnelle fait des appels d&amp;rsquo;API prévisibles. Un agent IA est non déterministe — il interprète le langage naturel et décide quoi appeler. Il peut être créatif. Il peut aussi se tromper. Et s&amp;rsquo;il est manipulé par injection de prompt, vous avez besoin de règles qui ne dépendent pas du bon comportement de l&amp;rsquo;IA.&lt;/p&gt;
&lt;p&gt;La solution démontrée par ce modèle : &lt;strong&gt;des tokens de courte durée qui transportent exactement les bonnes informations pour chaque saut&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="comment-fonctionne-la-chaîne-de-tokens"&gt;Comment Fonctionne la Chaîne de Tokens&lt;/h2&gt;
&lt;p&gt;Le modèle utilise des tokens d&amp;rsquo;accès OAuth 2.0 avec échange de tokens pour réduire les permissions à chaque étape. Un token utilisateur est échangé deux fois avant d&amp;rsquo;atteindre le serveur MCP :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Premier échange&lt;/strong&gt; — réduit la portée et convertit le token opaque en JWT&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deuxième échange&lt;/strong&gt; — ajoute l&amp;rsquo;identité de l&amp;rsquo;agent et une nouvelle audience pour le saut du serveur MCP&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;À quoi ressemble le token du serveur MCP :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;scope&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;stocks/read&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;sub&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;62c839b8...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;aud&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://mcp.demo.example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;customer_id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;178&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;region&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;USA&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le &lt;code&gt;customer_id&lt;/code&gt; est intégré dans le token par le serveur d&amp;rsquo;autorisation, pas passé comme paramètre que l&amp;rsquo;agent contrôle. L&amp;rsquo;API vérifie le token, pas les instructions de l&amp;rsquo;agent.&lt;/p&gt;
&lt;p&gt;Cela signifie : même si quelqu&amp;rsquo;un trompe l&amp;rsquo;agent pour qu&amp;rsquo;il essaie d&amp;rsquo;obtenir les données d&amp;rsquo;un autre client, le token ne l&amp;rsquo;autorisera pas.&lt;/p&gt;
&lt;h2 id="ce-que-le-modèle-déploie"&gt;Ce que le Modèle Déploie&lt;/h2&gt;
&lt;p&gt;Avec quelques commandes &lt;code&gt;azd&lt;/code&gt; vous obtenez :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un agent backend sur Microsoft Foundry (C#, SDK Microsoft A2A et MCP)&lt;/li&gt;
&lt;li&gt;Un serveur MCP exposant un exemple d&amp;rsquo;API de portefeuille&lt;/li&gt;
&lt;li&gt;Curity Identity Server comme serveur d&amp;rsquo;autorisation, aux côtés d&amp;rsquo;Entra ID pour l&amp;rsquo;authentification&lt;/li&gt;
&lt;li&gt;Des passerelles API externes et internes gérant l&amp;rsquo;échange de tokens et la journalisation d&amp;rsquo;audit&lt;/li&gt;
&lt;li&gt;Bicep pour toute l&amp;rsquo;infrastructure Azure : Container Apps, VNet, ACR, Azure AI Foundry, Key Vault, Azure SQL Database, stockage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tout le modèle est inspecTable et personnalisable.&lt;/p&gt;
&lt;h2 id="le-principe-de-conception-qui-vaut-la-peine-dêtre-emprunté"&gt;Le Principe de Conception qui Vaut la Peine d&amp;rsquo;être Emprunté&lt;/h2&gt;
&lt;p&gt;Même si vous n&amp;rsquo;utilisez pas Curity, le modèle est transférable : &lt;strong&gt;les agents ne devraient jamais avoir un accès permanent à l&amp;rsquo;API&lt;/strong&gt;. Chaque action devrait utiliser un token de courte durée avec le scope minimum nécessaire pour cet appel spécifique, émis pour l&amp;rsquo;identité spécifique de l&amp;rsquo;agent, portant les claims dont l&amp;rsquo;API a besoin pour prendre des décisions d&amp;rsquo;autorisation.&lt;/p&gt;
&lt;p&gt;Cela résiste aux agents créatifs, aux erreurs et à l&amp;rsquo;injection de prompt d&amp;rsquo;une façon que &amp;ldquo;assurez-vous simplement que l&amp;rsquo;agent ne fait pas de mauvaises choses&amp;rdquo; ne fera jamais.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Les modèles de sécurité pour les agents IA sont encore en cours d&amp;rsquo;élaboration dans l&amp;rsquo;industrie. Ce modèle est l&amp;rsquo;une des implémentations de référence les plus complètes que j&amp;rsquo;ai vues — il couvre le flux d&amp;rsquo;autorisation réel, pas seulement l&amp;rsquo;authentification.&lt;/p&gt;
&lt;p&gt;Post original : &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-curity-least-privilege-ai-agents/"&gt;Least privilege AI agents: A new azd template from Curity and Microsoft&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Endpoints Privés, VNets, NSGs — Aspire Gère le Réseau Maintenant</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/aspire-azure-enterprise-networking-private-endpoints/</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/aspire-azure-enterprise-networking-private-endpoints/</guid><description>Le nouveau support réseau d'entreprise Azure pour Aspire vous permet de modéliser les VNets, les endpoints privés, les passerelles NAT, les NSG et les périmètres de sécurité réseau directement dans votre AppHost, sans dérive d'infrastructure.</description><content:encoded>&lt;p&gt;J&amp;rsquo;ai vu ce scénario trop de fois. L&amp;rsquo;application est terminée. La démo est excellente. Puis la liste de contrôle de sécurité arrive : sortir le stockage d&amp;rsquo;internet public, s&amp;rsquo;exécuter dans un VNet, fournir des IPs sortantes pour la liste d&amp;rsquo;autorisation du partenaire, prouver que seuls les bons sous-réseaux parlent aux bons services.&lt;/p&gt;
&lt;p&gt;À ce stade, le modèle d&amp;rsquo;application et le modèle d&amp;rsquo;infrastructure commencent à diverger de manières douloureuses à maintenir.&lt;/p&gt;
&lt;p&gt;Le nouveau support réseau d&amp;rsquo;entreprise Azure pour Aspire répond directement à cela. Vous décrivez la forme du réseau à côté des ressources qui l&amp;rsquo;utilisent, dans votre AppHost.&lt;/p&gt;
&lt;h2 id="les-blocs-de-construction"&gt;Les Blocs de Construction&lt;/h2&gt;
&lt;p&gt;Voici à quoi sert chaque concept réseau Azure, résumé :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fonctionnalité&lt;/th&gt;
&lt;th&gt;Utilisez-le quand&lt;/th&gt;
&lt;th&gt;Pourquoi c&amp;rsquo;est important&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Réseau virtuel&lt;/td&gt;
&lt;td&gt;Vous avez besoin d&amp;rsquo;un espace d&amp;rsquo;adressage privé&lt;/td&gt;
&lt;td&gt;La limite réseau pour les sous-réseaux, les endpoints privés et le routage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sous-réseau&lt;/td&gt;
&lt;td&gt;Vous devez séparer les charges de travail dans le VNet&lt;/td&gt;
&lt;td&gt;Chaque partie du système obtient sa propre plage d&amp;rsquo;adresses et surface de politique&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sous-réseau délégué&lt;/td&gt;
&lt;td&gt;Un service de plateforme (comme ACA) doit gérer un sous-réseau&lt;/td&gt;
&lt;td&gt;Permet au service de placer une infrastructure gérée dans votre VNet en toute sécurité&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Passerelle NAT&lt;/td&gt;
&lt;td&gt;Vous avez besoin d&amp;rsquo;IPs publiques sortantes prévisibles&lt;/td&gt;
&lt;td&gt;Adresse stable pour les listes d&amp;rsquo;autorisation et l&amp;rsquo;audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Endpoint privé&lt;/td&gt;
&lt;td&gt;Vous voulez une ressource PaaS accessible privément&lt;/td&gt;
&lt;td&gt;Place une IP privée pour ce service dans votre VNet, supprime l&amp;rsquo;exposition publique&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NSG&lt;/td&gt;
&lt;td&gt;Vous avez besoin de règles de trafic au niveau du sous-réseau&lt;/td&gt;
&lt;td&gt;Autoriser/refuser explicitement pour le trafic entrant et sortant par sous-réseau&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="le-décrire-dans-votre-apphost"&gt;Le Décrire dans votre AppHost&lt;/h2&gt;
&lt;p&gt;Le changement clé ici est que vous modélisez le réseau &lt;em&gt;aux côtés&lt;/em&gt; des ressources qui l&amp;rsquo;utilisent, pas dans un fichier Bicep séparé qui dérive du modèle d&amp;rsquo;application avec le temps.&lt;/p&gt;
&lt;p&gt;Depuis l&amp;rsquo;AppHost, vous pouvez :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Créer des VNets et des sous-réseaux avec &lt;code&gt;AddVirtualNetwork()&lt;/code&gt; et &lt;code&gt;AddSubnet()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Attacher une passerelle NAT aux sous-réseaux pour des IPs sortantes stables&lt;/li&gt;
&lt;li&gt;Créer des endpoints privés pour le stockage, Key Vault, SQL et d&amp;rsquo;autres services PaaS&lt;/li&gt;
&lt;li&gt;Définir des NSG avec des règles de sécurité entrantes et sortantes&lt;/li&gt;
&lt;li&gt;Configurer des Périmètres de Sécurité Réseau pour des politiques inter-ressources&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le résultat est que lorsque vous exécutez &lt;code&gt;azd up&lt;/code&gt;, l&amp;rsquo;infrastructure correspond à ce que le modèle d&amp;rsquo;application dit qu&amp;rsquo;il a besoin. Pas ce que dit un modèle maintenu manuellement.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important-pour-les-applications-réelles"&gt;Pourquoi C&amp;rsquo;est Important pour les Applications Réelles&lt;/h2&gt;
&lt;p&gt;Quelques choses qui deviennent significativement plus faciles une fois que le réseau est modélisé dans Aspire :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Endpoints privés pour Key Vault et stockage&lt;/strong&gt; — vous décrivez &lt;code&gt;WithPrivateEndpoint()&lt;/code&gt; sur ces ressources, et Aspire gère la configuration des zones DNS et l&amp;rsquo;attachement des endpoints. L&amp;rsquo;application ne change jamais.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IPs sortantes cohérentes&lt;/strong&gt; — ajoutez une passerelle NAT au sous-réseau concerné et chaque requête sortante de votre application passe par une IP connue et stable. Les partenaires peuvent l&amp;rsquo;autoriser. Les auditeurs peuvent la tracer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Règles NSG depuis le code&lt;/strong&gt; — au lieu de cliquer dans le portail ou de maintenir un extrait Bicep, vos règles de sécurité vivent dans l&amp;rsquo;AppHost aux côtés des ressources qu&amp;rsquo;elles protègent.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est le type d&amp;rsquo;intégration qui ne rend pas les démos excitantes mais rend les systèmes de production maintenables.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;La sécurité réseau apparaissant tard dans le cycle de vie du projet est un problème résolu si vous la modélisez aux côtés de l&amp;rsquo;application dès le début. Le support réseau d&amp;rsquo;entreprise d&amp;rsquo;Aspire rend cela possible sans nécessiter une piste d&amp;rsquo;infrastructure séparée.&lt;/p&gt;
&lt;p&gt;Détails complets dans l&amp;rsquo;article original : &lt;a href="https://devblogs.microsoft.com/aspire/aspire-azure-enterprise-networking/"&gt;Securing Azure apps with Aspire enterprise networking&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.3 : Support Kubernetes, Journaux du Navigateur et la Compétence Aspireify</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/aspire-133-kubernetes-browser-logs-aspireify/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/aspire-133-kubernetes-browser-logs-aspireify/</guid><description>Cinq semaines après 13.2, Aspire 13.3 arrive avec 45 nouvelles fonctionnalités, notamment le déploiement AKS de première classe, une compétence d'intégration assistée par IA, la capture des journaux du navigateur et des résultats de commandes structurés.</description><content:encoded>&lt;p&gt;Cinq semaines, ce n&amp;rsquo;est pas beaucoup pour une version, mais Aspire 13.3 ne le semble pas. Les éléments principaux sont significatifs : déploiement Kubernetes et AKS de première classe avec Helm, une compétence d&amp;rsquo;intégration assistée par agent appelée Aspireify, la capture des journaux du navigateur directement dans le dashboard et des résultats de commandes structurés. En plus, 45 nouvelles fonctionnalités, 134 améliorations et 93 corrections de bugs.&lt;/p&gt;
&lt;p&gt;Passons aux points saillants.&lt;/p&gt;
&lt;h2 id="aspireify--intégration-assistée-par-agent"&gt;Aspireify : Intégration Assistée par Agent&lt;/h2&gt;
&lt;p&gt;Ajouter Aspire à un projet existant semble simple — ajoutez un AppHost, c&amp;rsquo;est fait. En pratique, cela implique beaucoup d&amp;rsquo;archéologie : quels ports comptent, quelles variables d&amp;rsquo;environnement sont de vraies dépendances, quels services Docker Compose doivent correspondre aux intégrations Aspire.&lt;/p&gt;
&lt;p&gt;La nouvelle &lt;strong&gt;compétence Aspireify&lt;/strong&gt; donne à votre agent de code un flux de travail guidé précisément pour cela. Quand &lt;code&gt;aspire init&lt;/code&gt; crée un AppHost squelette, la compétence Aspireify aide l&amp;rsquo;agent à inspecter le dépôt, à comprendre comment il fonctionne déjà et à câbler l&amp;rsquo;AppHost pour s&amp;rsquo;adapter à l&amp;rsquo;application — pas l&amp;rsquo;inverse.&lt;/p&gt;
&lt;p&gt;La posture par défaut est &amp;ldquo;minimiser les modifications de votre code.&amp;rdquo; Si votre application lit déjà &lt;code&gt;DATABASE_URL&lt;/code&gt;, l&amp;rsquo;agent le mappe avec &lt;code&gt;WithEnvironment()&lt;/code&gt; au lieu de vous demander de réécrire votre configuration. Si un port est codé en dur, la compétence indique à l&amp;rsquo;agent quand le préserver.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est le type d&amp;rsquo;outillage IA qui fait réellement gagner du temps plutôt que de générer plus de travail à revoir.&lt;/p&gt;
&lt;h2 id="déploiement-kubernetes-et-aks-de-première-classe"&gt;Déploiement Kubernetes et AKS de Première Classe&lt;/h2&gt;
&lt;p&gt;Celui-là était sur la liste de souhaits depuis un moment. Aspire 13.3 inclut le &lt;strong&gt;support de déploiement Kubernetes et AKS de première classe avec Helm&lt;/strong&gt;. Vous pouvez maintenant cibler AKS comme destination de déploiement directement depuis les outils Aspire.&lt;/p&gt;
&lt;p&gt;Pour les équipes qui exécutent déjà des charges de travail de production sur AKS, cela comble un écart significatif. Votre modèle d&amp;rsquo;application Aspire a maintenant un chemin propre du développement local vers Kubernetes sans rédaction manuelle de charts Helm.&lt;/p&gt;
&lt;h2 id="journaux-du-navigateur-dans-le-dashboard"&gt;Journaux du Navigateur dans le Dashboard&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est une de ces fonctionnalités qui semblent mineures jusqu&amp;rsquo;à ce que vous déboguiez un problème frontend.&lt;/p&gt;
&lt;p&gt;La nouvelle API &lt;code&gt;WithBrowserLogs()&lt;/code&gt; attache une ressource de navigateur suivie à toute ressource capable d&amp;rsquo;endpoints. Aspire lance Chromium en utilisant un pipe CDP privé et diffuse les journaux de console, les requêtes réseau et les erreurs directement dans le flux de journaux de la ressource :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;frontend&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddViteApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;../frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithHttpEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithBrowserLogs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;L&amp;rsquo;AppHost TypeScript prend en charge la même chose :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;frontend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addViteApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;../frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withHttpEndpoint&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt;: &lt;span class="kt"&gt;3000&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withBrowserLogs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Erreurs de console, requêtes réseau échouées, exceptions côté client — tout visible dans le même dashboard où vous regardez déjà les traces et métriques. Plus besoin de changer d&amp;rsquo;onglet vers les DevTools du navigateur pour les bases.&lt;/p&gt;
&lt;h2 id="résultats-de-commandes-structurés"&gt;Résultats de Commandes Structurés&lt;/h2&gt;
&lt;p&gt;Les commandes de ressources ont reçu une mise à niveau significative. Jusqu&amp;rsquo;à présent, les commandes renvoyaient succès/échec. Maintenant elles retournent des résultats structurés : texte, JSON ou markdown qui circule à travers le modèle, l&amp;rsquo;interface du dashboard, la CLI et les outils MCP.&lt;/p&gt;
&lt;p&gt;Le dashboard relie tout cela avec un nouveau centre de notifications dans l&amp;rsquo;en-tête. Les résultats des commandes apparaissent sous forme de notifications horodatées avec rendu markdown et une action &amp;ldquo;Voir la réponse&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Cela rend les commandes de ressources véritablement composables. Une intégration peut maintenant exposer une commande qui renvoie une sortie significative — comme une URL de tunnel — plutôt que de simplement changer d&amp;rsquo;état quelque part.&lt;/p&gt;
&lt;h2 id="en-résumé"&gt;En Résumé&lt;/h2&gt;
&lt;p&gt;Aspire 13.3 vaut la mise à jour ne serait-ce que pour le support Kubernetes. Les journaux du navigateur et les résultats de commandes structurés ressemblent au type d&amp;rsquo;améliorations de qualité de vie qui s&amp;rsquo;accumulent rapidement dans un flux de travail de développement quotidien.&lt;/p&gt;
&lt;p&gt;Notes de version complètes : &lt;a href="https://devblogs.microsoft.com/aspire/whats-new-aspire-13-3/"&gt;What&amp;rsquo;s New in Aspire 13.3&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>SDD Conference 2026</title><link>https://thedotnetblog.com/fr/events/sdd-conference-2026/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://thedotnetblog.com/fr/events/sdd-conference-2026/</guid><description>Une conférence de 5 jours sur le développement logiciel au Barbican Centre à Londres avec 78 sessions et 14 workshops couvrant architecture, .NET, IA, Azure, DevOps et plus.</description><content:encoded>&lt;p&gt;&lt;strong&gt;SDD 2026&lt;/strong&gt; se déroule du &lt;strong&gt;11 au 15 mai 2026&lt;/strong&gt; au &lt;strong&gt;Barbican Centre à Londres&lt;/strong&gt;. La conférence principale de 3 jours va du mardi au jeudi, avec des workshops optionnels d&amp;rsquo;une journée le lundi et le vendredi.&lt;/p&gt;
&lt;p&gt;Avec &lt;strong&gt;78 sessions&lt;/strong&gt; et &lt;strong&gt;14 workshops&lt;/strong&gt;, c&amp;rsquo;est l&amp;rsquo;une des conférences développeurs les plus denses en Europe.&lt;/p&gt;
&lt;h2 id="sujets"&gt;Sujets&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pensée Architecturale&lt;/li&gt;
&lt;li&gt;Code Fonctionnel en C# 13&lt;/li&gt;
&lt;li&gt;Design Serverless&lt;/li&gt;
&lt;li&gt;IA Sémantique&lt;/li&gt;
&lt;li&gt;Azure Kubernetes Services&lt;/li&gt;
&lt;li&gt;Stratégies Lean DevOps&lt;/li&gt;
&lt;li&gt;The Model Context Protocol (MCP)&lt;/li&gt;
&lt;li&gt;IA Agentique en .NET&lt;/li&gt;
&lt;li&gt;Refactoring du Monolithe&lt;/li&gt;
&lt;li&gt;Coder Plus Vite avec les LLMs&lt;/li&gt;
&lt;li&gt;Cryptographie dans un Monde Post-Quantique&lt;/li&gt;
&lt;li&gt;Développement Local First&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="speakers"&gt;Speakers&lt;/h2&gt;
&lt;p&gt;Un plateau de classe mondiale avec &lt;strong&gt;Kevlin Henney&lt;/strong&gt;, &lt;strong&gt;Neal Ford&lt;/strong&gt;, &lt;strong&gt;Sander Hoogendoorn&lt;/strong&gt;, &lt;strong&gt;Andrew Clymer&lt;/strong&gt;, &lt;strong&gt;Jacqui Read&lt;/strong&gt;, &lt;strong&gt;Christian Weyer&lt;/strong&gt;, &lt;strong&gt;Jeff Prosise&lt;/strong&gt;, &lt;strong&gt;Jules May&lt;/strong&gt;, &lt;strong&gt;Oliver Sturm&lt;/strong&gt; et &lt;strong&gt;Raju Gandhi&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="billets-et-informations"&gt;Billets et informations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/"&gt;Site de l&amp;rsquo;événement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddvault.s3.amazonaws.com/assets/SDD_2026_schedule.pdf"&gt;PDF de l&amp;rsquo;agenda complet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/register"&gt;Options d&amp;rsquo;inscription&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;98 % des participants de SDD 2025 ont évalué l&amp;rsquo;expérience globale comme bonne, très bonne ou excellente.&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server sur Azure App Service — Sans Conteneurs</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</guid><description>Le SQL MCP Server peut désormais s'exécuter sur Azure App Service sans Docker ni Kubernetes. Voici ce que cela signifie pour les développeurs .NET qui construisent des agents IA communiquant avec des bases de données SQL.</description><content:encoded>&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Soyons honnêtes : chaque fois que je lis &amp;ldquo;nécessite un conteneur&amp;rdquo; dans un tutoriel, une petite partie de moi soupire. Les conteneurs sont formidables — jusqu&amp;rsquo;à ce que ton équipe n&amp;rsquo;ait pas de stratégie de conteneurs, et soudain une fonctionnalité qui semblait simple se retrouve bloquée par une complexité d&amp;rsquo;orchestration que personne n&amp;rsquo;avait anticipée.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est pourquoi celui-ci a retenu mon attention. Le SQL MCP Server peut désormais s&amp;rsquo;exécuter sur Azure App Service — sans Docker, sans Kubernetes, juste avec la même configuration Data API Builder (DAB) qui expose ta base de données SQL via MCP, REST et GraphQL.&lt;/p&gt;
&lt;h2 id="quest-ce-que-le-sql-mcp-server-"&gt;Qu&amp;rsquo;est-ce que le SQL MCP Server ?&lt;/h2&gt;
&lt;p&gt;Contexte rapide si tu ne le connais pas encore. Le SQL MCP Server se place entre ton agent IA et ta base de données SQL. Au lieu de donner à ton agent un accès direct à la base de données (une très mauvaise idée), il expose tes tables et vues comme une couche d&amp;rsquo;abstraction — des entités avec des permissions définies.&lt;/p&gt;
&lt;p&gt;Il est construit sur &lt;a href="https://learn.microsoft.com/fr-fr/azure/data-api-builder/"&gt;Data API Builder&lt;/a&gt;, ce qui signifie qu&amp;rsquo;un seul fichier de configuration gère MCP &lt;em&gt;et&lt;/em&gt; REST &lt;em&gt;et&lt;/em&gt; GraphQL simultanément. Ton agent parle à l&amp;rsquo;endpoint MCP. Ton application traditionnelle parle à REST ou GraphQL. Même config, même runtime, surfaces différentes.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est vraiment utile. Tu ne maintiens pas deux couches d&amp;rsquo;API séparées.&lt;/p&gt;
&lt;h2 id="le-problème-des-conteneurs-et-la-solution"&gt;Le Problème des Conteneurs (et la Solution)&lt;/h2&gt;
&lt;p&gt;Le modèle de déploiement original du SQL MCP Server utilisait des conteneurs. Cela fonctionne bien dans beaucoup d&amp;rsquo;équipes — mais pas toutes. De nombreuses équipes .NET standardisent sur Azure App Service ou des VMs. Exiger un runtime de conteneur juste pour exposer un endpoint SQL ajoute de la friction que personne n&amp;rsquo;a demandée.&lt;/p&gt;
&lt;p&gt;Le nouveau guide montre comment contourner entièrement le conteneur. Tout fonctionne avec une commande &lt;code&gt;dab start&lt;/code&gt;, hébergé sur App Service comme un processus web .NET 8 standard.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Installer Data API Builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet tool install microsoft.dataapibuilder --prerelease -g
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Initialiser la configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab init --database-type mssql --host-mode Development --connection-string &lt;span class="s2"&gt;&amp;#34;@env(&amp;#39;SQL_CONNECTION_STRING&amp;#39;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Ajouter une entité&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add products --source dbo.products --permissions &lt;span class="s2"&gt;&amp;#34;authenticated:*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Configurer le fournisseur d&amp;#39;auth App Service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab configure --runtime.host.authentication.provider AppService
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Démarrer le serveur&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;À ce stade, tu as MCP à &lt;code&gt;/mcp&lt;/code&gt;, REST et GraphQL depuis le même processus, et rien qui tourne dans un conteneur.&lt;/p&gt;
&lt;h2 id="authentification-sans-clés-dapi-partagées"&gt;Authentification Sans Clés d&amp;rsquo;API Partagées&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est la partie que j&amp;rsquo;apprécie le plus. Quand tu déploies sur App Service, tu configures Microsoft Entra ID comme fournisseur d&amp;rsquo;authentification. Pas de secrets partagés dans les fichiers de configuration, pas de clés d&amp;rsquo;API à faire tourner.&lt;/p&gt;
&lt;p&gt;La chaîne de connexion reste dans une variable d&amp;rsquo;environnement App Service (pas dans &lt;code&gt;dab-config.json&lt;/code&gt;), et l&amp;rsquo;endpoint MCP est protégé par l&amp;rsquo;authentification de la plateforme. Si tu es déjà aligné sur Entra ID pour tes charges de travail Azure, cela s&amp;rsquo;intègre naturellement.&lt;/p&gt;
&lt;p&gt;Pour le développement local, tu passes en mode &lt;code&gt;Simulator&lt;/code&gt; et transport STDIO. Tu reviens en mode &lt;code&gt;AppService&lt;/code&gt; avant le déploiement. Propre et explicite.&lt;/p&gt;
&lt;h2 id="déploiement-sur-app-service"&gt;Déploiement sur App Service&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az appservice plan create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --sku B1 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --is-linux
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az webapp create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --plan &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --runtime &lt;span class="s2"&gt;&amp;#34;DOTNETCORE:8.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az webapp config &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --startup-file &lt;span class="s2"&gt;&amp;#34;dab start&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ensuite tu déploies ton projet DAB en utilisant la méthode de déploiement de code que ton équipe utilise déjà. Le détail clé : c&amp;rsquo;est un déploiement de &lt;strong&gt;code&lt;/strong&gt;, pas de conteneur.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important-pour-les-développeurs-net"&gt;Pourquoi C&amp;rsquo;est Important pour les Développeurs .NET&lt;/h2&gt;
&lt;p&gt;Si tu construis des agents IA en .NET, ton agent devra tôt ou tard communiquer avec une base de données. Le SQL MCP Server te donne une façon structurée de le faire sans exposer des chaînes de connexion brutes.&lt;/p&gt;
&lt;p&gt;Consulte le guide complet dans le &lt;a href="https://devblogs.microsoft.com/azure-sql/sql-mcp-server-app-service/"&gt;billet original&lt;/a&gt; et le &lt;a href="https://github.com/Azure-Samples/SQL-MCP-NoContainer"&gt;dépôt d&amp;rsquo;exemple sur GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Le SQL MCP Server sur App Service est une option pragmatique solide pour les équipes .NET qui souhaitent donner à leurs agents un accès structuré aux données SQL sans stratégie de conteneurs. Essaie-le — tes agents apprécieront la surface d&amp;rsquo;API propre.&lt;/p&gt;</content:encoded></item><item><title>Supprimer le Travail Répétitif de la Migration avec l'Agentic Platform Engineering</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/agentic-platform-engineering-migration-automation/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/agentic-platform-engineering-migration-automation/</guid><description>Git-Ape présente la migration d'un déploiement Terraform AWS réel vers Azure Bicep — en extrayant l'intention de déploiement et en remappant l'architecture plutôt qu'en effectuant une conversion syntaxique 1:1.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ce post a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/agentic-platform-engineering-migration-automation/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/all-things-azure/removing-the-monkey-work-of-migration-using-agentic-platform-engineering/"&gt;Removing the Monkey Work of Migration with Agentic Platform Engineering&lt;/a&gt; — une présentation de Git-Ape (outil git d&amp;rsquo;ingénierie de plateforme agentique) qui migre un vrai dépôt Terraform AWS vers Azure, en se concentrant sur l&amp;rsquo;extraction d&amp;rsquo;intention plutôt que sur une conversion ligne par ligne.&lt;/p&gt;
&lt;h2 id="lentrée--contoso-migration"&gt;L&amp;rsquo;entrée : contoso-migration&lt;/h2&gt;
&lt;p&gt;La source est un vrai projet Terraform (&lt;code&gt;contoso-migration&lt;/code&gt;) qui déploie une application Next.js sur AWS — EC2 pour le calcul, ALB pour l&amp;rsquo;équilibrage de charge, S3 pour les artefacts, et des clés IAM pour l&amp;rsquo;identité. Coût : ~34 $/mois. L&amp;rsquo;objectif n&amp;rsquo;est pas de reproduire la même infrastructure sur Azure ; c&amp;rsquo;est de comprendre ce que le déploiement essaie réellement de faire et de le reconstruire avec des services natifs Azure.&lt;/p&gt;
&lt;h2 id="étape-1--validation-et-authentification"&gt;Étape 1 : Validation et authentification&lt;/h2&gt;
&lt;p&gt;Git-Ape commence par valider tous les outils CLI requis — &lt;code&gt;az&lt;/code&gt;, &lt;code&gt;aws&lt;/code&gt;, &lt;code&gt;gh&lt;/code&gt;, &lt;code&gt;jq&lt;/code&gt;, &lt;code&gt;git&lt;/code&gt; — et en confirmant les sessions d&amp;rsquo;authentification actives avant de toucher quoi que ce soit. Pas d&amp;rsquo;exécutions partielles.&lt;/p&gt;
&lt;h2 id="étape-2--extraction-dintention"&gt;Étape 2 : Extraction d&amp;rsquo;intention&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;agent lit l&amp;rsquo;intégralité du dépôt source via l&amp;rsquo;API GitHub et extrait l&amp;rsquo;intention de déploiement : runtime (Node.js), type de calcul, modèle d&amp;rsquo;ingress, gestion des artefacts, modèle d&amp;rsquo;identité, réseau et surveillance. C&amp;rsquo;est l&amp;rsquo;étape clé — elle construit un modèle sémantique de ce que fait le déploiement, pas quels mots-clés Terraform il utilise.&lt;/p&gt;
&lt;h2 id="étape-3--correspondance-de-services"&gt;Étape 3 : Correspondance de services&lt;/h2&gt;
&lt;p&gt;Les services AWS sont mappés vers leurs équivalents Azure :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EC2 → App Service (Linux, Node 20 LTS)&lt;/li&gt;
&lt;li&gt;ALB → Équilibrage de charge intégré d&amp;rsquo;App Service&lt;/li&gt;
&lt;li&gt;Rôles/clés IAM → Managed Identity&lt;/li&gt;
&lt;li&gt;Terraform → Bicep + GitHub Actions&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="étape-4--agent-de-critique"&gt;Étape 4 : Agent de critique&lt;/h2&gt;
&lt;p&gt;Avant de générer la sortie, un agent de critique s&amp;rsquo;exécute et détecte deux problèmes bloquants :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Anti-modèle de build au démarrage&lt;/strong&gt; — le Terraform original exécutait &lt;code&gt;npm install &amp;amp;&amp;amp; npm run build&lt;/code&gt; sur EC2 au démarrage. Correction : construire dans CI, déployer un artefact prêt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blob Storage inutile&lt;/strong&gt; — S3 était utilisé pour la mise en attente d&amp;rsquo;artefacts qui pouvait être éliminé avec un CI/CD approprié. L&amp;rsquo;agent de critique l&amp;rsquo;a supprimé entièrement.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="étape-5--sortie-générée"&gt;Étape 5 : Sortie générée&lt;/h2&gt;
&lt;p&gt;Le résultat est ~80 lignes de Bicep au lieu des 200+ lignes originales de Terraform. L&amp;rsquo;agent a créé un nouveau dépôt GitHub avec &lt;code&gt;infra/main.bicep&lt;/code&gt; et &lt;code&gt;.github/workflows/deploy.yml&lt;/code&gt; et supprimé tous les fichiers spécifiques à AWS.&lt;/p&gt;
&lt;h2 id="comparaison-de-la-posture-de-sécurité"&gt;Comparaison de la posture de sécurité&lt;/h2&gt;
&lt;p&gt;La migration a également produit une amélioration significative de la sécurité :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AWS original&lt;/th&gt;
&lt;th&gt;Sortie Azure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HTTP uniquement&lt;/td&gt;
&lt;td&gt;HTTPS uniquement, TLS 1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSH ouvert à 0.0.0.0/0&lt;/td&gt;
&lt;td&gt;Pas d&amp;rsquo;exposition SSH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clés d&amp;rsquo;accès IAM&lt;/td&gt;
&lt;td&gt;OIDC + Managed Identity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pas de surveillance&lt;/td&gt;
&lt;td&gt;Application Insights&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Coût : ~13 $/mois vs les 34 $/mois originaux.&lt;/p&gt;
&lt;h2 id="ce-qui-le-distingue-dun-convertisseur-de-syntaxe"&gt;Ce qui le distingue d&amp;rsquo;un convertisseur de syntaxe&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;étape de l&amp;rsquo;agent de critique est ce qui sépare ceci d&amp;rsquo;une traduction mécanique. Il a détecté des modèles qui auraient fonctionné sur AWS mais seraient incorrects sur Azure — et les a corrigés plutôt que de les répliquer. La sortie n&amp;rsquo;est pas &amp;ldquo;AWS en syntaxe Azure&amp;rdquo; ; c&amp;rsquo;est un déploiement natif Azure qui atteint le même objectif plus proprement.&lt;/p&gt;
&lt;p&gt;Consultez le &lt;a href="https://devblogs.microsoft.com/all-things-azure/removing-the-monkey-work-of-migration-using-agentic-platform-engineering/"&gt;guide complet&lt;/a&gt; pour la trace complète de l&amp;rsquo;agent et les fichiers générés.&lt;/p&gt;</content:encoded></item><item><title>SQL Server 2025 comme Base de Données Prête pour les Agents : Sécurité, Backup et MCP dans un Seul Moteur</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</guid><description>La partie finale de la série Polyglot Tax aborde les problèmes de production difficiles : sécurité Row-Level unifiée sur les données relationnelles, JSON, graphes et vecteurs, plus intégration MCP.</description><content:encoded>&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai suivi la série Polyglot Tax d&amp;rsquo;Aditya Badramraju avec beaucoup d&amp;rsquo;intérêt. La partie 4 clôt la série avec les parties qui déterminent vraiment si vous feriez confiance à cette architecture en production.&lt;/p&gt;
&lt;h2 id="un-modèle-de-sécurité-pour-tous-les-modèles-de-données"&gt;Un Modèle de Sécurité pour Tous les Modèles de Données&lt;/h2&gt;
&lt;p&gt;Une seule politique Row-Level Security couvre toutes les tables — relationnelles, JSON, graphes, vecteurs. Une politique, une preuve pour l&amp;rsquo;auditeur.&lt;/p&gt;
&lt;h2 id="backup-unifié--récupération-atomique"&gt;Backup Unifié = Récupération Atomique&lt;/h2&gt;
&lt;p&gt;Dans un stack polyglottes, la récupération point-in-time sur cinq bases de données est un cauchemar de cohérence. Avec une seule base de données, c&amp;rsquo;est atomique par définition.&lt;/p&gt;
&lt;h2 id="intégration-mcp--agents-sans-middleware"&gt;Intégration MCP : Agents Sans Middleware&lt;/h2&gt;
&lt;p&gt;SQL Server 2025 supporte directement le SQL MCP Server. Les agents appellent des outils, le moteur impose l&amp;rsquo;isolation tenant et le masquage des colonnes automatiquement.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Pour les développeurs .NET qui construisent des applications agent-first sur Azure SQL, cette architecture mérite une sérieuse considération. Post original d&amp;rsquo;Aditya Badramraju : &lt;a href="https://devblogs.microsoft.com/azure-sql/the-polyglot-tax-part-4/"&gt;The Polyglot Tax – Part 4&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server Est Maintenant un .mcpb — Installez-le sans Aucun Runtime</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</guid><description>Azure MCP Server est maintenant disponible en tant que MCP Bundle (.mcpb) — téléchargez-le, faites-le glisser dans Claude Desktop et c'est tout. Aucun Node.js, Python ou .NET requis.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ce post a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Vous savez ce qui était pénible dans la configuration des serveurs MCP ? Vous aviez besoin d&amp;rsquo;un runtime. Node.js pour la version npm, Python pour pip/uvx, .NET SDK pour la variante dotnet.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;Azure MCP Server vient de changer cela&lt;/a&gt;. Il est maintenant disponible en tant que &lt;code&gt;.mcpb&lt;/code&gt; — un MCP Bundle — et la configuration se fait par glisser-déposer.&lt;/p&gt;
&lt;h2 id="quest-ce-quun-mcp-bundle-"&gt;Qu&amp;rsquo;est-ce qu&amp;rsquo;un MCP Bundle ?&lt;/h2&gt;
&lt;p&gt;Pensez-y comme à une extension VS Code (&lt;code&gt;.vsix&lt;/code&gt;) ou une extension de navigateur (&lt;code&gt;.crx&lt;/code&gt;), mais pour les serveurs MCP. Un fichier &lt;code&gt;.mcpb&lt;/code&gt; est une archive ZIP autonome incluant le binaire du serveur et toutes ses dépendances.&lt;/p&gt;
&lt;h2 id="comment-linstaller"&gt;Comment l&amp;rsquo;installer&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Téléchargez le bundle pour votre plateforme&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Allez sur la &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server"&gt;page GitHub Releases&lt;/a&gt; et téléchargez le fichier &lt;code&gt;.mcpb&lt;/code&gt; pour votre OS et architecture.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Installez dans Claude Desktop&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le plus simple : faites glisser le fichier &lt;code&gt;.mcpb&lt;/code&gt; dans la fenêtre Claude Desktop sur la page des paramètres Extensions (&lt;code&gt;☰ → Fichier → Paramètres → Extensions&lt;/code&gt;). Vérifiez les détails du serveur, cliquez sur Installer, confirmez.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Authentifiez-vous auprès d&amp;rsquo;Azure&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az login
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;C&amp;rsquo;est tout. Azure MCP Server utilise vos identifiants Azure existants.&lt;/p&gt;
&lt;h2 id="ce-que-vous-pouvez-faire-avec"&gt;Ce que vous pouvez faire avec&lt;/h2&gt;
&lt;p&gt;Plus de 100 outils de services Azure directement depuis votre client IA :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interroger et gérer Cosmos DB, Storage, Key Vault, App Service, Foundry&lt;/li&gt;
&lt;li&gt;Générer des commandes &lt;code&gt;az&lt;/code&gt; CLI pour n&amp;rsquo;importe quelle tâche&lt;/li&gt;
&lt;li&gt;Créer des modèles Bicep et Terraform&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pour-commencer"&gt;Pour commencer&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Téléchargement&lt;/strong&gt; : &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server-"&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dépôt&lt;/strong&gt; : &lt;a href="https://aka.ms/azmcp"&gt;aka.ms/azmcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs&lt;/strong&gt; : &lt;a href="https://aka.ms/azmcp/docs"&gt;aka.ms/azmcp/docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Consultez le &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;post complet&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure SDK Avril 2026 : AI Foundry 2.0 et Ce Que les Développeurs .NET Doivent Savoir</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-sdk-april-2026-ai-foundry-2-stable/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-sdk-april-2026-ai-foundry-2-stable/</guid><description>La version Azure SDK d'avril 2026 livre Azure.AI.Projects 2.0.0 stable avec des changements cassants importants, des correctifs de sécurité critiques pour Cosmos DB et de nouvelles bibliothèques de Provisioning pour .NET.</description><content:encoded>&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/azure-sdk-april-2026-ai-foundry-2-stable/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Les versions mensuelles du SDK sont souvent faciles à ignorer. Celle-ci a quelques points à retenir — surtout si vous construisez avec AI Foundry, Cosmos DB en Java, ou faites du provisionnement d&amp;rsquo;infrastructure depuis du code .NET.&lt;/p&gt;
&lt;h2 id="azureaiprojects-200--changements-cassants-qui-font-sens"&gt;Azure.AI.Projects 2.0.0 — Changements Cassants Qui Font Sens&lt;/h2&gt;
&lt;p&gt;Le paquet NuGet &lt;code&gt;Azure.AI.Projects&lt;/code&gt; atteint la version stable 2.0.0: séparations de namespaces, types renommés, et convention &lt;code&gt;Is*&lt;/code&gt; cohérente pour les booléens.&lt;/p&gt;
&lt;h2 id="cosmos-db-java--correctif-de-sécurité-critique-rce"&gt;Cosmos DB Java : Correctif de Sécurité Critique (RCE)&lt;/h2&gt;
&lt;p&gt;La version 4.79.0 inclut un correctif critique pour une &lt;strong&gt;vulnérabilité d&amp;rsquo;exécution de code à distance (CWE-502)&lt;/strong&gt;. Mise à jour immédiate requise.&lt;/p&gt;
&lt;h2 id="nouvelles-bibliothèques-de-provisioning-pour-net"&gt;Nouvelles Bibliothèques de Provisioning pour .NET&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nuget.org/packages/Azure.Provisioning.Network/1.0.0"&gt;Azure.Provisioning.Network 1.0.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nuget.org/packages/Azure.Provisioning.PrivateDns/1.0.0"&gt;Azure.Provisioning.PrivateDns 1.0.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Le point fort pour les développeurs .NET ce mois-ci : &lt;code&gt;Azure.AI.Projects 2.0.0&lt;/code&gt; est stable. Post original : &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-sdk-release-april-2026/"&gt;Azure SDK Release (April 2026)&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>GPT-5.5 Est Là et Arrive dans Azure Foundry — Ce que les Développeurs .NET Doivent Savoir</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</guid><description>GPT-5.5 est généralement disponible dans Microsoft Foundry. La progression de GPT-5 à 5.5, ce qui s'est vraiment amélioré et comment commencer à l'utiliser dans vos agents aujourd'hui.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ce post a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Microsoft vient d&amp;rsquo;annoncer que &lt;a href="https://azure.microsoft.com/en-us/blog/openais-gpt-5-5-in-microsoft-foundry-frontier-intelligence-on-an-enterprise-ready-platform/"&gt;GPT-5.5 est généralement disponible dans Microsoft Foundry&lt;/a&gt;. Si vous avez été en train de créer des agents sur Azure, c&amp;rsquo;est la mise à jour que vous attendiez.&lt;/p&gt;
&lt;h2 id="la-progression-de-gpt-5"&gt;La progression de GPT-5&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-5&lt;/strong&gt; : a unifié le raisonnement et la vitesse en un seul système&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.4&lt;/strong&gt; : raisonnement multi-étapes plus solide, capacités agentiques pour l&amp;rsquo;entreprise&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.5&lt;/strong&gt; : raisonnement en contexte long plus profond, exécution agentique plus fiable, meilleure efficacité des tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ce-qui-a-vraiment-changé"&gt;Ce qui a vraiment changé&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Codage agentique amélioré&lt;/strong&gt; : GPT-5.5 maintient le contexte sur de grandes bases de code, diagnostique les défaillances architecturales et anticipe les exigences de tests. Le modèle raisonne sur &lt;em&gt;ce que d&amp;rsquo;autre&lt;/em&gt; une correction affecte avant d&amp;rsquo;agir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Efficacité des tokens&lt;/strong&gt; : Des sorties de meilleure qualité avec moins de tokens et moins de tentatives. Coût et latence directement réduits en production.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analyse en contexte long&lt;/strong&gt; : Gère de vastes documents et des historiques multi-sessions sans perdre le fil.&lt;/p&gt;
&lt;h2 id="tarification"&gt;Tarification&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Modèle&lt;/th&gt;
&lt;th&gt;Entrée ($/M tokens)&lt;/th&gt;
&lt;th&gt;Entrée en cache&lt;/th&gt;
&lt;th&gt;Sortie ($/M tokens)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;5,00 $&lt;/td&gt;
&lt;td&gt;0,50 $&lt;/td&gt;
&lt;td&gt;30,00 $&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5 Pro&lt;/td&gt;
&lt;td&gt;30,00 $&lt;/td&gt;
&lt;td&gt;3,00 $&lt;/td&gt;
&lt;td&gt;180,00 $&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="pourquoi-foundry-est-important"&gt;Pourquoi Foundry est important&lt;/h2&gt;
&lt;p&gt;Foundry Agent Service vous permet de définir des agents en YAML ou de les connecter avec Microsoft Agent Framework, GitHub Copilot SDK, LangGraph ou OpenAI Agents SDK — et de les exécuter comme agents hébergés isolés avec un système de fichiers persistant, une identité Microsoft Entra distincte et une tarification à l&amp;rsquo;échelle zéro.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;aiProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gpt-5.5&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Vous êtes un assistant utile.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;MonAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Consultez l&amp;rsquo;&lt;a href="https://azure.microsoft.com/en-us/blog/openais-gpt-5-5-in-microsoft-foundry-frontier-intelligence-on-an-enterprise-ready-platform/"&gt;annonce complète&lt;/a&gt; pour tous les détails.&lt;/p&gt;</content:encoded></item><item><title>Foundry Toolboxes : Un seul endpoint pour tous les outils de vos agents</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</guid><description>Microsoft Foundry vient de lancer Toolboxes en preview publique — un moyen de centraliser, gérer et exposer les outils d'agents IA via un unique endpoint compatible MCP.</description><content:encoded>&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Voici un problème qui semble banal jusqu&amp;rsquo;à ce qu&amp;rsquo;on le vive : l&amp;rsquo;organisation construit plusieurs agents IA, chacun nécessite des outils, et chaque équipe les reconfigure à partir de zéro. La même intégration de recherche web, la même config Azure AI Search, la même connexion au serveur MCP GitHub — mais dans un autre dépôt, par une autre équipe, avec d&amp;rsquo;autres credentials et sans gouvernance partagée.&lt;/p&gt;
&lt;p&gt;Microsoft Foundry vient de lancer &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;Toolboxes&lt;/a&gt; en preview publique, et c&amp;rsquo;est une réponse directe à ce problème.&lt;/p&gt;
&lt;h2 id="quest-ce-quune-toolbox-"&gt;Qu&amp;rsquo;est-ce qu&amp;rsquo;une Toolbox ?&lt;/h2&gt;
&lt;p&gt;Une Toolbox est un bundle d&amp;rsquo;outils nommé et réutilisable, défini une fois dans Foundry et exposé via un unique endpoint compatible MCP. N&amp;rsquo;importe quel runtime d&amp;rsquo;agent qui parle MCP peut le consommer — pas d&amp;rsquo;enfermement dans Foundry Agents.&lt;/p&gt;
&lt;p&gt;La promesse est simple : &lt;strong&gt;build once, consume anywhere&lt;/strong&gt;. Définir les outils, configurer l&amp;rsquo;authentification de façon centralisée (OAuth passthrough, identité managée Entra), publier l&amp;rsquo;endpoint. Chaque agent qui a besoin de ces outils se connecte à l&amp;rsquo;endpoint et les obtient tous.&lt;/p&gt;
&lt;h2 id="les-quatre-piliers-deux-disponibles-aujourdhui"&gt;Les quatre piliers (deux disponibles aujourd&amp;rsquo;hui)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pilier&lt;/th&gt;
&lt;th&gt;Statut&lt;/th&gt;
&lt;th&gt;Ce qu&amp;rsquo;il fait&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discover&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bientôt&lt;/td&gt;
&lt;td&gt;Trouver des outils approuvés sans recherche manuelle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Disponible&lt;/td&gt;
&lt;td&gt;Regrouper des outils en un bundle réutilisable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Consume&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Disponible&lt;/td&gt;
&lt;td&gt;Un endpoint MCP unique expose tous les outils&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Govern&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bientôt&lt;/td&gt;
&lt;td&gt;Auth centralisée + observabilité pour tous les appels&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="exemple-pratique"&gt;Exemple pratique&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.identity&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;FOUNDRY_PROJECT_ENDPOINT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;toolbox_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;toolboxes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_toolbox_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;toolbox_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;customer-feedback-triaging-toolbox&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Chercher dans la documentation et répondre aux issues GitHub.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;web_search&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Recherche dans la documentation publique&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;azure_ai_search&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;index_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;internal-docs&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mcp_server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;server_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://your-github-mcp-server.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois publié, Foundry fournit un endpoint unifié. Une connexion, tous les outils.&lt;/p&gt;
&lt;h2 id="pas-denfermement-dans-foundry-agents"&gt;Pas d&amp;rsquo;enfermement dans Foundry Agents&lt;/h2&gt;
&lt;p&gt;Les Toolboxes sont &lt;strong&gt;créées et gérées&lt;/strong&gt; dans Foundry, mais la surface de consommation est le protocole MCP ouvert. On peut les utiliser depuis des agents personnalisés (Microsoft Agent Framework, LangGraph), GitHub Copilot et autres IDEs compatibles MCP, et tout runtime parlant MCP.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important-maintenant"&gt;Pourquoi c&amp;rsquo;est important maintenant&lt;/h2&gt;
&lt;p&gt;La vague multi-agents arrive en production. Chaque nouvel agent est une nouvelle surface pour de la configuration dupliquée, des credentials obsolètes et des comportements incohérents. La base Build + Consume suffit pour commencer à centraliser. Quand le pilier Govern arrivera, on aura une couche d&amp;rsquo;outils entièrement observable et contrôlée centralement pour toute la flotte d&amp;rsquo;agents.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est encore tôt — preview publique, SDK Python en premier, Discover et Govern à venir. Mais le modèle est solide et le design natif MCP signifie qu&amp;rsquo;il fonctionne avec les outils qu&amp;rsquo;on construit déjà. Tous les détails dans l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;annonce officielle&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>azd + GitHub Copilot : Configuration de projet assistée par IA et résolution intelligente des erreurs</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</guid><description>L'Azure Developer CLI s'intègre maintenant avec GitHub Copilot pour scaffolder ton projet et résoudre les erreurs de déploiement — sans quitter le terminal.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale en anglais, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/"&gt;clique ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tu connais ce moment où tu veux déployer une app existante sur Azure et tu te retrouves à fixer un &lt;code&gt;azure.yaml&lt;/code&gt; vide, en essayant de te rappeler si ton API Express devrait utiliser Container Apps ou App Service ? Ce moment vient de devenir beaucoup plus court.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) s&amp;rsquo;intègre maintenant avec GitHub Copilot de deux façons concrètes : scaffolding assisté par IA pendant &lt;code&gt;azd init&lt;/code&gt;, et résolution intelligente des erreurs quand les déploiements échouent. Les deux fonctionnalités restent entièrement dans ton terminal — exactement là où je veux qu&amp;rsquo;elles soient.&lt;/p&gt;
&lt;h2 id="configuration-avec-copilot-pendant-azd-init"&gt;Configuration avec Copilot pendant azd init&lt;/h2&gt;
&lt;p&gt;Quand tu lances &lt;code&gt;azd init&lt;/code&gt;, il y a maintenant une option &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Sélectionne-la et Copilot analyse ta base de code pour générer l&amp;rsquo;&lt;code&gt;azure.yaml&lt;/code&gt;, les templates d&amp;rsquo;infrastructure et les modules Bicep — basés sur ton code réel.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd init
# Sélectionne : &amp;#34;Set up with GitHub Copilot (Preview)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Prérequis :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;azd 1.23.11 ou supérieur&lt;/strong&gt; — vérifie avec &lt;code&gt;azd version&lt;/code&gt; ou mets à jour avec &lt;code&gt;azd update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un abonnement GitHub Copilot actif&lt;/strong&gt; (Individual, Business ou Enterprise)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub CLI (&lt;code&gt;gh&lt;/code&gt;)&lt;/strong&gt; — &lt;code&gt;azd&lt;/code&gt; demandera la connexion si nécessaire&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce que je trouve vraiment utile : ça fonctionne dans les deux sens. Tu construis depuis zéro ? Copilot t&amp;rsquo;aide à configurer les bons services Azure dès le départ. Tu as une app existante que tu voulais déployer depuis longtemps ? Pointe Copilot dessus et il génère la configuration sans que tu aies à restructurer quoi que ce soit.&lt;/p&gt;
&lt;h3 id="ce-que-ça-fait-concrètement"&gt;Ce que ça fait concrètement&lt;/h3&gt;
&lt;p&gt;Imaginons une API Express Node.js avec une dépendance PostgreSQL. Au lieu de décider manuellement entre Container Apps et App Service, puis d&amp;rsquo;écrire du Bicep depuis zéro, Copilot détecte ton stack et génère :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un &lt;code&gt;azure.yaml&lt;/code&gt; avec les bons paramètres &lt;code&gt;language&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt; et &lt;code&gt;build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Un module Bicep pour Azure Container Apps&lt;/li&gt;
&lt;li&gt;Un module Bicep pour Azure Database for PostgreSQL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et il effectue des vérifications préalables avant de toucher quoi que ce soit — vérifie que ton répertoire git est propre, demande le consentement pour les outils du serveur MCP. Rien ne se passe sans que tu saches exactement ce qui va changer.&lt;/p&gt;
&lt;h2 id="résolution-derreurs-avec-copilot"&gt;Résolution d&amp;rsquo;erreurs avec Copilot&lt;/h2&gt;
&lt;p&gt;Les erreurs de déploiement, ça arrive. Paramètres manquants, problèmes de permissions, disponibilité des SKUs — et le message d&amp;rsquo;erreur ne te dit rarement la seule chose dont tu as vraiment besoin : &lt;em&gt;comment régler le problème&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Sans Copilot, la boucle ressemble à : copier l&amp;rsquo;erreur → chercher dans la doc → lire trois réponses Stack Overflow hors sujet → exécuter quelques commandes &lt;code&gt;az&lt;/code&gt; CLI → réessayer en espérant que ça marche. Avec Copilot intégré dans &lt;code&gt;azd&lt;/code&gt;, cette boucle s&amp;rsquo;effondre. Quand une commande &lt;code&gt;azd&lt;/code&gt; échoue, elle propose immédiatement quatre options :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt; — explication en langage naturel de ce qui s&amp;rsquo;est passé&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance&lt;/strong&gt; — instructions étape par étape pour corriger le problème&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose and Guide&lt;/strong&gt; — analyse complète + Copilot applique le correctif (avec ton approbation) + nouvelle tentative optionnelle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip&lt;/strong&gt; — gérer toi-même&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&amp;rsquo;essentiel : Copilot a déjà le contexte de ton projet, la commande qui a échoué et les détails de l&amp;rsquo;erreur. Ses suggestions sont spécifiques à &lt;em&gt;ta situation&lt;/em&gt;, pas de la documentation générique.&lt;/p&gt;
&lt;h3 id="configurer-un-comportement-par-défaut"&gt;Configurer un comportement par défaut&lt;/h3&gt;
&lt;p&gt;Si tu choisis toujours la même option, saute le prompt interactif :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.category troubleshoot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Valeurs : &lt;code&gt;explain&lt;/code&gt;, &lt;code&gt;guidance&lt;/code&gt;, &lt;code&gt;troubleshoot&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;skip&lt;/code&gt;. Tu peux aussi activer l&amp;rsquo;auto-fix et le retry :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.fix allow
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Retour au mode interactif à tout moment :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config unset copilot.errorHandling.category
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est exactement le type d&amp;rsquo;intégration Copilot qui apporte une vraie valeur. Essaie-le en lançant &lt;code&gt;azd update&lt;/code&gt; pour obtenir la dernière version, puis utilise &lt;code&gt;azd init&lt;/code&gt; sur ton prochain projet.&lt;/p&gt;
&lt;p&gt;Lis l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/"&gt;annonce originale ici&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Global Azure Spain 2026</title><link>https://thedotnetblog.com/fr/events/global-azure-spain-2026/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><guid>https://thedotnetblog.com/fr/events/global-azure-spain-2026/</guid><description>Le plus grand événement Azure communautaire en Espagne — une journée complète de sessions sur Azure, IA, données, sécurité et développement cloud-native avec 38 speakers sur 3 tracks.</description><content:encoded>&lt;p&gt;Global Azure Spain 2026 a lieu le &lt;strong&gt;18 avril 2026&lt;/strong&gt; au &lt;strong&gt;Kinépolis Diversia&lt;/strong&gt; à Alcobendas, Madrid. C&amp;rsquo;est le plus grand événement communautaire Azure en Espagne, réunissant 38 speakers sur 3 tracks parallèles couvrant les agents IA, le réseau Azure, Cosmos DB, Fabric, IoT, la sécurité et bien plus.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;événement se déroule de &lt;strong&gt;08h30 à 18h30&lt;/strong&gt; et comprend une keynote, des pauses café, un déjeuner et une session de clôture Q&amp;amp;A.&lt;/p&gt;
&lt;h2 id="points-forts-de-lagenda"&gt;Points forts de l&amp;rsquo;agenda&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Domando Agentes de IA&lt;/strong&gt; : gouvernance, outils et APIs avec Azure AI Foundry et Azure API Management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Construyendo agentes con LibreChat en Azure&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How Can I Steal Your Data with Azure Private Endpoints&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stop Building APIs. Forge Agents with Azure&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agentic DevOps Meets IoT: Real-Time Systems with Fabric and GitHub Copilot&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;El regreso de los tamagotchis!&lt;/strong&gt; : systèmes multi-agents en action&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Foundry Control Plane como plataforma de Agentes global&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rompiendo el perímetro: Zero Trust aplicado en Azure&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="billets"&gt;Billets&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;inscription est une donation symbolique — le prix du billet est entièrement reversé à &lt;strong&gt;Plan International&lt;/strong&gt;, soutenant les droits des enfants et l&amp;rsquo;égalité dans le monde. Capacité limitée, alors réservez votre place rapidement.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.eventbrite.es/e/entradas-global-azure-spain-2026-en-madrid-1981594189564"&gt;Billets sur Eventbrite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://globalazure.es/"&gt;Site de l&amp;rsquo;événement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="azure-tour-2026"&gt;Azure Tour 2026&lt;/h2&gt;
&lt;p&gt;Au-delà de Madrid, le Global Azure Tour 2026 comprend également des étapes à &lt;strong&gt;Saragosse&lt;/strong&gt;, &lt;strong&gt;Tenerife&lt;/strong&gt; et &lt;strong&gt;Séville&lt;/strong&gt;.&lt;/p&gt;</content:encoded></item><item><title>Le RFT de Foundry est désormais moins cher et plus intelligent — Voici ce qui a changé</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</guid><description>Microsoft Foundry a publié trois mises à jour RFT ce mois-ci : l'entraînement global pour o4-mini, de nouveaux évaluateurs de modèle GPT-4.1 et un guide de bonnes pratiques qui vous fera gagner des heures de débogage.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si vous développez des applications .NET qui reposent sur des modèles fine-tunés, les mises à jour Foundry de ce mois méritent votre attention. Le Reinforcement Fine-Tuning est devenu plus accessible et nettement moins cher.&lt;/p&gt;
&lt;p&gt;Les détails complets sont dans l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-foundry-finetune-april-2026/"&gt;annonce officielle&lt;/a&gt;, mais voici le résumé pratique.&lt;/p&gt;
&lt;h2 id="entraînement-global-pour-o4-mini"&gt;Entraînement Global pour o4-mini&lt;/h2&gt;
&lt;p&gt;o4-mini est le modèle de référence pour les charges de travail intensives en raisonnement et agentiques. La grande nouvelle : vous pouvez désormais lancer des jobs de fine-tuning depuis plus de 13 régions Azure avec des tarifs d&amp;rsquo;entraînement par token inférieurs par rapport à l&amp;rsquo;entraînement Standard. Même infrastructure, même qualité, plus grande portée.&lt;/p&gt;
&lt;p&gt;Si votre équipe est répartie géographiquement, c&amp;rsquo;est important. Vous n&amp;rsquo;êtes plus limité à une poignée de régions pour entraîner.&lt;/p&gt;
&lt;p&gt;Voici l&amp;rsquo;appel API REST pour lancer un job d&amp;rsquo;entraînement global :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X POST &lt;span class="s2"&gt;&amp;#34;https://&amp;lt;your-resource&amp;gt;.openai.azure.com/openai/fine_tuning/jobs?api-version=2025-04-01-preview&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;api-key: &lt;/span&gt;&lt;span class="nv"&gt;$AZURE_OPENAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;model&amp;#34;: &amp;#34;o4-mini&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;training_file&amp;#34;: &amp;#34;&amp;lt;your-training-file-id&amp;gt;&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;method&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;type&amp;#34;: &amp;#34;reinforcement&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;reinforcement&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;grader&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;type&amp;#34;: &amp;#34;string_check&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;name&amp;#34;: &amp;#34;answer-check&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;input&amp;#34;: &amp;#34;{{sample.output_text}}&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;reference&amp;#34;: &amp;#34;{{item.reference_answer}}&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;operation&amp;#34;: &amp;#34;eq&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;hyperparameters&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;n_epochs&amp;#34;: 2,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;compute_multiplier&amp;#34;: 1.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;trainingType&amp;#34;: &amp;#34;globalstandard&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ce flag &lt;code&gt;trainingType: globalstandard&lt;/code&gt; fait toute la différence.&lt;/p&gt;
&lt;h2 id="nouveaux-évaluateurs-de-modèle--famille-gpt-41"&gt;Nouveaux Évaluateurs de Modèle : Famille GPT-4.1&lt;/h2&gt;
&lt;p&gt;Les évaluateurs définissent le signal de récompense contre lequel votre modèle optimise. Jusqu&amp;rsquo;à présent, les évaluateurs basés sur des modèles étaient limités à un ensemble restreint de modèles. Vous avez maintenant trois nouvelles options : GPT-4.1, GPT-4.1-mini et GPT-4.1-nano.&lt;/p&gt;
&lt;p&gt;Quand faut-il utiliser des évaluateurs de modèle plutôt que des déterministes ? Quand la sortie de votre tâche est ouverte, quand vous avez besoin de notation partielle sur plusieurs dimensions, ou quand vous construisez des workflows agentiques où la justesse des appels d&amp;rsquo;outils dépend du contexte sémantique.&lt;/p&gt;
&lt;p&gt;Le truc, c&amp;rsquo;est que la stratégie de niveaux est pratique :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-nano&lt;/strong&gt; pour les premières itérations. Coût faible, boucles de feedback rapides.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-mini&lt;/strong&gt; une fois que votre grille d&amp;rsquo;évaluation est stable et que vous avez besoin de plus de fidélité.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1&lt;/strong&gt; pour l&amp;rsquo;évaluation en production ou les grilles complexes où chaque décision de notation compte.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vous pouvez même mixer les types d&amp;rsquo;évaluateurs dans un seul job RFT. Utilisez le string-match pour la dimension &amp;ldquo;bonne réponse&amp;rdquo; et un évaluateur de modèle pour évaluer la qualité du raisonnement. Cette flexibilité est honnêtement ce qui le rend utile pour des charges de travail réelles.&lt;/p&gt;
&lt;h2 id="le-piège-du-format-de-données-rft"&gt;Le Piège du Format de Données RFT&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est ce qui fait trébucher les gens. Le format de données RFT est différent du SFT. Le dernier message de chaque ligne doit avoir le rôle User ou Developer — pas Assistant. La réponse attendue va dans une clé de niveau supérieur comme &lt;code&gt;reference_answer&lt;/code&gt; que l&amp;rsquo;évaluateur référence directement.&lt;/p&gt;
&lt;p&gt;Si vous faisiez du supervised fine-tuning et que vous voulez passer au RFT, vous devez restructurer vos données d&amp;rsquo;entraînement. Ne sautez pas cette étape ou vos jobs échoueront silencieusement.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important-pour-les-développeurs-net"&gt;Pourquoi C&amp;rsquo;est Important pour les Développeurs .NET&lt;/h2&gt;
&lt;p&gt;Si vous appelez des modèles fine-tunés depuis vos applications .NET via le SDK Azure OpenAI, un entraînement moins cher signifie que vous pouvez itérer plus agressivement. Les options d&amp;rsquo;évaluateurs de modèle signifient que vous pouvez fine-tuner pour des tâches nuancées — pas seulement des scénarios de correspondance exacte. Et le guide de bonnes pratiques sur &lt;a href="https://github.com/microsoft-foundry/fine-tuning/blob/main/Demos/Agentic_RFT_PrivatePreview/RFT_Best_Practice.md"&gt;GitHub&lt;/a&gt; vous fera gagner un temps réel de débogage.&lt;/p&gt;
&lt;p&gt;Commencez petit. Dix à cent échantillons. Évaluateur simple. Validez la boucle. Puis montez en charge.&lt;/p&gt;</content:encoded></item><item><title>Vos expériences IA sur Azure brûlent de l'argent — Voici comment y remédier</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</guid><description>Les charges de travail IA sur Azure peuvent vite devenir coûteuses. Parlons de ce qui fonctionne vraiment pour garder les coûts sous contrôle sans ralentir votre développement.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si vous construisez des applications alimentées par l&amp;rsquo;IA sur Azure en ce moment, vous avez probablement remarqué quelque chose : votre facture cloud a changé. Pas juste plus élevée — plus bizarre. Avec des pics. Difficile à prévoir.&lt;/p&gt;
&lt;p&gt;Microsoft vient de publier un excellent article sur &lt;a href="https://azure.microsoft.com/en-us/blog/cloud-cost-optimization-principles-that-still-matter/"&gt;les principes d&amp;rsquo;optimisation des coûts cloud qui comptent toujours&lt;/a&gt;, et honnêtement, le timing ne pourrait pas être meilleur. Parce que les charges de travail IA ont changé la donne en matière de coûts.&lt;/p&gt;
&lt;h2 id="pourquoi-les-charges-de-travail-ia-frappent-différemment"&gt;Pourquoi les charges de travail IA frappent différemment&lt;/h2&gt;
&lt;p&gt;Voilà le truc. Les charges de travail .NET traditionnelles sont relativement prévisibles. Vous connaissez votre niveau App Service, vous connaissez vos DTUs SQL, vous pouvez estimer les dépenses mensuelles assez précisément. Les charges de travail IA ? Pas vraiment.&lt;/p&gt;
&lt;p&gt;Vous testez plusieurs modèles pour voir lequel convient. Vous démarrez de l&amp;rsquo;infrastructure GPU pour du fine-tuning. Vous faites des appels API à Azure OpenAI où la consommation de tokens varie énormément selon la longueur du prompt et le comportement des utilisateurs. Chaque expérience coûte de l&amp;rsquo;argent réel, et vous pourriez en mener des dizaines avant de trouver la bonne approche.&lt;/p&gt;
&lt;p&gt;Cette imprévisibilité est ce qui rend l&amp;rsquo;optimisation des coûts critique — pas comme une réflexion après coup, mais dès le premier jour.&lt;/p&gt;
&lt;h2 id="gestion-vs-optimisation--connaissez-la-différence"&gt;Gestion vs. optimisation — connaissez la différence&lt;/h2&gt;
&lt;p&gt;Une distinction de l&amp;rsquo;article que les développeurs négligent selon moi : il y a une différence entre la &lt;em&gt;gestion&lt;/em&gt; des coûts et l&amp;rsquo;&lt;em&gt;optimisation&lt;/em&gt; des coûts.&lt;/p&gt;
&lt;p&gt;La gestion, c&amp;rsquo;est le suivi et le reporting. Vous configurez des budgets dans Azure Cost Management, vous recevez des alertes, vous consultez des tableaux de bord. C&amp;rsquo;est le minimum.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;optimisation, c&amp;rsquo;est là que vous prenez réellement des décisions. Avez-vous vraiment besoin de ce tier S3, ou le S1 gérerait-il votre charge ? Cette instance de calcul toujours allumée est-elle inactive le week-end ? Pourriez-vous utiliser des instances spot pour vos jobs d&amp;rsquo;entraînement ?&lt;/p&gt;
&lt;p&gt;En tant que développeurs .NET, nous avons tendance à nous concentrer sur le code et à laisser les décisions d&amp;rsquo;infrastructure à « l&amp;rsquo;équipe ops ». Mais si vous déployez sur Azure, ces décisions sont aussi les vôtres.&lt;/p&gt;
&lt;h2 id="ce-qui-fonctionne-vraiment"&gt;Ce qui fonctionne vraiment&lt;/h2&gt;
&lt;p&gt;En me basant sur l&amp;rsquo;article et ma propre expérience, voici ce qui fait la différence :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sachez ce que vous dépensez et où.&lt;/strong&gt; Taguez vos ressources. Sérieusement. Si vous ne pouvez pas identifier quel projet ou expérience mange votre budget, vous ne pouvez rien optimiser. Azure Cost Management avec un tagging approprié est votre meilleur allié.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mettez des garde-fous avant d&amp;rsquo;expérimenter.&lt;/strong&gt; Utilisez Azure Policy pour restreindre les SKUs coûteux dans les environnements dev/test. Définissez des limites de dépenses sur vos déploiements Azure OpenAI. N&amp;rsquo;attendez pas que la facture arrive pour réaliser que quelqu&amp;rsquo;un a laissé un cluster GPU tourner tout le week-end.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dimensionnez en continu.&lt;/strong&gt; Cette VM que vous avez choisie pendant le prototypage ? Elle est probablement inadaptée pour la production. Azure Advisor vous donne des recommandations — regardez-les vraiment. Faites une revue mensuelle, pas annuelle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pensez au cycle de vie.&lt;/strong&gt; Les ressources de développement devraient s&amp;rsquo;éteindre. Les environnements de test n&amp;rsquo;ont pas besoin de tourner 24h/24. Utilisez des politiques d&amp;rsquo;arrêt automatique. Pour les charges de travail IA spécifiquement, envisagez des options serverless où vous payez par exécution au lieu de maintenir du calcul actif.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mesurez la valeur, pas seulement le coût.&lt;/strong&gt; Celle-ci est facile à oublier. Un modèle qui coûte plus cher mais fournit des résultats nettement meilleurs pourrait être le bon choix. L&amp;rsquo;objectif n&amp;rsquo;est pas de dépenser le moins possible — c&amp;rsquo;est de dépenser intelligemment.&lt;/p&gt;
&lt;h2 id="ce-quil-faut-retenir"&gt;Ce qu&amp;rsquo;il faut retenir&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;optimisation des coûts cloud n&amp;rsquo;est pas un nettoyage ponctuel. C&amp;rsquo;est une habitude. Et avec les charges de travail IA qui rendent les dépenses plus imprévisibles que jamais, prendre cette habitude tôt vous épargne des surprises douloureuses par la suite.&lt;/p&gt;
&lt;p&gt;Si vous êtes un développeur .NET qui construit sur Azure, commencez à traiter votre facture cloud comme vous traitez votre code — révisez-la régulièrement, refactorisez quand ça devient désordonné, et ne déployez jamais sans comprendre ce que ça va vous coûter.&lt;/p&gt;</content:encoded></item><item><title>Les outils Azure MCP sont désormais intégrés dans Visual Studio 2022 — Aucune extension nécessaire</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</guid><description>Les outils Azure MCP sont livrés avec la charge de travail développement Azure dans Visual Studio 2022. Plus de 230 outils, 45 services Azure, zéro extension à installer.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si vous avez utilisé les outils Azure MCP dans Visual Studio via l&amp;rsquo;extension séparée, vous connaissez la chanson — installer le VSIX, redémarrer, espérer que rien ne casse, gérer les incompatibilités de versions. Cette friction, c&amp;rsquo;est terminé.&lt;/p&gt;
&lt;p&gt;Yun Jung Choi a &lt;a href="https://devblogs.microsoft.com/visualstudio/azure-mcp-tools-now-ship-built-into-visual-studio-2022-no-extension-required/"&gt;annoncé&lt;/a&gt; que les outils Azure MCP sont désormais livrés directement avec la charge de travail développement Azure dans Visual Studio 2022. Pas d&amp;rsquo;extension. Pas de VSIX. Pas de danse du redémarrage.&lt;/p&gt;
&lt;h2 id="ce-que-ça-signifie-concrètement"&gt;Ce que ça signifie concrètement&lt;/h2&gt;
&lt;p&gt;À partir de Visual Studio 2022 version 17.14.30, le Azure MCP Server est inclus dans la charge de travail développement Azure. Si vous avez déjà cette charge de travail installée, il suffit de l&amp;rsquo;activer dans GitHub Copilot Chat et c&amp;rsquo;est parti.&lt;/p&gt;
&lt;p&gt;Plus de 230 outils couvrant 45 services Azure — accessibles directement depuis la fenêtre de chat. Listez vos comptes de stockage, déployez une app ASP.NET Core, diagnostiquez des problèmes App Service, interrogez Log Analytics — le tout sans ouvrir un onglet de navigateur.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-plus-important-quil-ny-paraît"&gt;Pourquoi c&amp;rsquo;est plus important qu&amp;rsquo;il n&amp;rsquo;y paraît&lt;/h2&gt;
&lt;p&gt;Voici le truc avec l&amp;rsquo;outillage développeur : chaque étape supplémentaire est de la friction, et la friction tue l&amp;rsquo;adoption. Avoir MCP en tant qu&amp;rsquo;extension séparée signifiait des incompatibilités de versions, des échecs d&amp;rsquo;installation, et une chose de plus à maintenir à jour. L&amp;rsquo;intégrer dans la charge de travail signifie :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Un seul chemin de mise à jour&lt;/strong&gt; via le Visual Studio Installer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pas de décalage de version&lt;/strong&gt; entre l&amp;rsquo;extension et l&amp;rsquo;IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Toujours à jour&lt;/strong&gt; — le MCP Server se met à jour avec les releases régulières de VS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour les équipes qui standardisent sur Azure, c&amp;rsquo;est un vrai gain. Vous installez la charge de travail une fois, activez les outils, et ils sont disponibles à chaque session.&lt;/p&gt;
&lt;h2 id="ce-que-vous-pouvez-faire-avec"&gt;Ce que vous pouvez faire avec&lt;/h2&gt;
&lt;p&gt;Les outils couvrent l&amp;rsquo;intégralité du cycle de développement via Copilot Chat :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Apprendre&lt;/strong&gt; — posez des questions sur les services Azure, les bonnes pratiques, les patterns d&amp;rsquo;architecture&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concevoir et développer&lt;/strong&gt; — obtenez des recommandations de services, configurez le code de votre application&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Déployer&lt;/strong&gt; — provisionnez des ressources et déployez directement depuis l&amp;rsquo;IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dépanner&lt;/strong&gt; — interrogez les logs, vérifiez l&amp;rsquo;état des ressources, diagnostiquez les problèmes en production&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un exemple rapide — tapez ceci dans Copilot Chat :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;List my storage accounts in my current subscription.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Copilot appelle les outils Azure MCP en coulisses, interroge vos abonnements, et renvoie une liste formatée avec les noms, emplacements et SKUs. Pas besoin du portail.&lt;/p&gt;
&lt;h2 id="comment-lactiver"&gt;Comment l&amp;rsquo;activer&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Mettez à jour vers Visual Studio 2022 &lt;strong&gt;17.14.30&lt;/strong&gt; ou supérieur&lt;/li&gt;
&lt;li&gt;Assurez-vous que la charge de travail &lt;strong&gt;Azure development&lt;/strong&gt; est installée&lt;/li&gt;
&lt;li&gt;Ouvrez GitHub Copilot Chat&lt;/li&gt;
&lt;li&gt;Cliquez sur le bouton &lt;strong&gt;Select tools&lt;/strong&gt; (l&amp;rsquo;icône des deux clés)&lt;/li&gt;
&lt;li&gt;Activez &lt;strong&gt;Azure MCP Server&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;C&amp;rsquo;est tout. Ça reste activé entre les sessions.&lt;/p&gt;
&lt;h2 id="un-bémol"&gt;Un bémol&lt;/h2&gt;
&lt;p&gt;Les outils sont désactivés par défaut — vous devez les activer manuellement. Et les outils spécifiques à VS 2026 ne sont pas disponibles dans VS 2022. La disponibilité des outils dépend également des permissions de votre abonnement Azure, comme sur le portail.&lt;/p&gt;
&lt;h2 id="la-vue-densemble"&gt;La vue d&amp;rsquo;ensemble&lt;/h2&gt;
&lt;p&gt;Cela fait partie d&amp;rsquo;une tendance claire : MCP est en train de devenir le standard pour exposer les outils cloud dans les IDEs de développement. Nous avons déjà vu la &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;release stable d&amp;rsquo;Azure MCP Server 2.0&lt;/a&gt; et des intégrations MCP dans VS Code et d&amp;rsquo;autres éditeurs. L&amp;rsquo;intégrer dans le système de charges de travail de Visual Studio est la progression naturelle.&lt;/p&gt;
&lt;p&gt;Pour nous développeurs .NET qui vivons dans Visual Studio, ça élimine encore une raison de basculer vers le portail Azure. Et honnêtement, moins on change d&amp;rsquo;onglet, mieux c&amp;rsquo;est.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 accueille MongoDB EF Core et Azure Data Lake — Deux intégrations à essayer</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</guid><description>Aspire 13.2 ajoute les intégrations MongoDB Entity Framework Core et Azure Data Lake Storage avec des health checks et du service discovery sans configuration. Voici à quoi elles ressemblent en pratique.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aspire 13.2 vient d&amp;rsquo;arriver avec &lt;a href="https://devblogs.microsoft.com/aspire/aspire-new-database-integrations/"&gt;deux nouvelles intégrations de bases de données&lt;/a&gt; qui méritent votre attention : MongoDB Entity Framework Core et Azure Data Lake Storage. Si vous vouliez utiliser EF Core avec MongoDB dans une app Aspire, ou si vous aviez besoin de connecter des workloads data lake avec du service discovery, cette version apporte les deux.&lt;/p&gt;
&lt;h2 id="mongodb-rencontre-ef-core-dans-aspire"&gt;MongoDB rencontre EF Core dans Aspire&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est celle qui m&amp;rsquo;enthousiasme le plus. Aspire supporte MongoDB depuis un moment, mais c&amp;rsquo;était toujours le driver brut — pas d&amp;rsquo;EF Core, pas de &lt;code&gt;DbContext&lt;/code&gt;, pas de requêtes LINQ sur vos documents. Maintenant vous avez l&amp;rsquo;expérience complète d&amp;rsquo;EF Core avec MongoDB, plus les health checks automatiques et le service discovery d&amp;rsquo;Aspire.&lt;/p&gt;
&lt;p&gt;La mise en place suit le pattern typique d&amp;rsquo;Aspire. Dans votre AppHost :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;mongodb&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithDataVolume&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithLifetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ContainerLifetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Persistent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;apiService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ApiService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mongodb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis dans votre projet consommateur, ajoutez l&amp;rsquo;intégration EF Core :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Aspire.MongoDB.EntityFrameworkCore
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et enregistrez votre &lt;code&gt;DbContext&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;mydb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;À partir de là, c&amp;rsquo;est de l&amp;rsquo;EF Core standard. Définissez vos entités, utilisez votre &lt;code&gt;DbContext&lt;/code&gt; comme vous le feriez avec n&amp;rsquo;importe quel autre provider. L&amp;rsquo;intégration gère le connection pooling, les traces OpenTelemetry et les health checks en arrière-plan.&lt;/p&gt;
&lt;p&gt;Pour les développeurs .NET qui utilisaient MongoDB avec le driver brut et configuraient les connection strings manuellement, c&amp;rsquo;est une belle amélioration. Vous obtenez l&amp;rsquo;abstraction complète d&amp;rsquo;EF Core sans perdre le service discovery d&amp;rsquo;Aspire.&lt;/p&gt;
&lt;h2 id="azure-data-lake-storage-entre-dans-la-danse"&gt;Azure Data Lake Storage entre dans la danse&lt;/h2&gt;
&lt;p&gt;Le deuxième ajout majeur est une &lt;a href="https://aspire.dev/integrations/cloud/azure/azure-storage-datalake/"&gt;intégration Azure Data Lake Storage (ADLS)&lt;/a&gt;. Si vous construisez des pipelines de données, des processus ETL ou des plateformes d&amp;rsquo;analytique, vous pouvez maintenant connecter des ressources Data Lake de la même façon que n&amp;rsquo;importe quelle autre dépendance Aspire.&lt;/p&gt;
&lt;p&gt;Dans l&amp;rsquo;AppHost :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureStorage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;azure-storage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;dataLake&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;fileSystem&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLakeFileSystem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;analyticsService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AnalyticsService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;analytics&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataLake&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileSystem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans le projet consommateur :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeServiceClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeFileSystemClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pas de gestion manuelle de connection strings, pas de recherche de credentials. Aspire provisionne les ressources et les injecte. Pour ceux d&amp;rsquo;entre nous qui construisent des apps .NET cloud-native touchant à la fois aux données opérationnelles et aux workloads analytiques, cela fait du data lake un citoyen de première classe dans le modèle Aspire.&lt;/p&gt;
&lt;h2 id="les-petits-correctifs-qui-comptent"&gt;Les petits correctifs qui comptent&lt;/h2&gt;
&lt;p&gt;Au-delà des fonctionnalités principales, il y a quelques améliorations à noter :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Correction du connection string MongoDB&lt;/strong&gt; — le slash avant le nom de la base de données est maintenant géré correctement. Si vous aviez un workaround, vous pouvez le supprimer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exports SQL Server&lt;/strong&gt; — &lt;code&gt;Aspire.Hosting.SqlServer&lt;/code&gt; exporte maintenant des options de configuration serveur supplémentaires pour un contrôle plus fin&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mises à jour des émulateurs&lt;/strong&gt; — émulateur ServiceBus 2.0.0, émulateur App Configuration 1.0.2, et l&amp;rsquo;émulateur preview de CosmosDB inclut maintenant une vérification de disponibilité&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Azure Managed Redis&lt;/strong&gt; — utilise maintenant &lt;code&gt;rediss://&lt;/code&gt; (Redis Secure) par défaut, donc les connexions sont chiffrées d&amp;rsquo;emblée&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce dernier point est subtil mais important — un Redis chiffré par défaut signifie une chose de moins à configurer en production.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 est une version incrémentale, mais les intégrations MongoDB EF Core et Data Lake comblent de vrais manques. Si vous attendiez un support EF Core correct avec MongoDB dans Aspire, ou si vous aviez besoin que Data Lake soit une dépendance de première classe, &lt;a href="https://get.aspire.dev"&gt;passez à la 13.2&lt;/a&gt; et essayez-les. La commande &lt;code&gt;aspire add&lt;/code&gt; génère tout ce dont vous avez besoin.&lt;/p&gt;
&lt;p&gt;Lisez les &lt;a href="https://aspire.dev/whats-new/aspire-13-2/#-integrations-updates"&gt;notes de version complètes&lt;/a&gt; pour plus de détails, et consultez la &lt;a href="https://aspire.dev/integrations/gallery/"&gt;galerie d&amp;rsquo;intégrations&lt;/a&gt; pour la liste complète.&lt;/p&gt;</content:encoded></item><item><title>azd update — Une seule commande pour tous vos gestionnaires de paquets</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>Azure Developer CLI dispose désormais d'une commande de mise à jour universelle qui fonctionne quelle que soit la méthode d'installation — winget, Homebrew, Chocolatey ou script d'installation.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vous connaissez ce message « Une nouvelle version de azd est disponible » qui apparaît toutes les quelques semaines ? Celui que vous ignorez parce que vous ne vous souvenez plus si vous avez installé &lt;code&gt;azd&lt;/code&gt; via winget, Homebrew ou ce script curl que vous avez exécuté il y a six mois ? Eh bien, c&amp;rsquo;est enfin réglé.&lt;/p&gt;
&lt;p&gt;Microsoft vient de publier &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt; — une seule commande qui met à jour Azure Developer CLI vers la dernière version, quelle que soit la méthode d&amp;rsquo;installation d&amp;rsquo;origine. Windows, macOS, Linux — peu importe. Une seule commande.&lt;/p&gt;
&lt;h2 id="comment-ça-marche"&gt;Comment ça marche&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;C&amp;rsquo;est tout. Si vous voulez un accès anticipé aux nouvelles fonctionnalités, vous pouvez passer au build insiders quotidien :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel daily
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel stable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La commande détecte votre méthode d&amp;rsquo;installation actuelle et utilise le mécanisme de mise à jour approprié en arrière-plan. Fini le « attends, j&amp;rsquo;ai utilisé winget ou choco sur cette machine ? »&lt;/p&gt;
&lt;h2 id="le-petit-bémol"&gt;Le petit bémol&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt; est disponible à partir de la version 1.23.x. Si vous êtes sur une version antérieure, vous devrez effectuer une dernière mise à jour manuelle en utilisant votre méthode d&amp;rsquo;installation d&amp;rsquo;origine. Après ça, &lt;code&gt;azd update&lt;/code&gt; gère tout automatiquement.&lt;/p&gt;
&lt;p&gt;Vérifiez votre version actuelle avec &lt;code&gt;azd version&lt;/code&gt;. Si vous avez besoin d&amp;rsquo;une nouvelle installation, la &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;documentation d&amp;rsquo;installation&lt;/a&gt; est là pour vous.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important"&gt;Pourquoi c&amp;rsquo;est important&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est une petite amélioration de confort, mais pour ceux d&amp;rsquo;entre nous qui utilisent &lt;code&gt;azd&lt;/code&gt; quotidiennement pour déployer des agents IA et des apps Aspire sur Azure, être à jour signifie moins de moments « ce bug était déjà corrigé dans la dernière version ». Une chose de moins à laquelle penser.&lt;/p&gt;
&lt;p&gt;Lisez l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;annonce complète&lt;/a&gt; et l&amp;rsquo;&lt;a href="https://blog.jongallant.com/2026/04/azd-update"&gt;analyse approfondie&lt;/a&gt; de Jon Gallant pour plus de contexte.&lt;/p&gt;</content:encoded></item><item><title>Azure Smart Tier est en GA — Optimisation automatique des coûts de Blob Storage sans règles de cycle de vie</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</guid><description>Le smart tier d'Azure Blob Storage est maintenant en disponibilité générale, déplaçant automatiquement les objets entre les niveaux hot, cool et cold en fonction des patterns d'accès réels — sans règles de cycle de vie.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si vous avez déjà passé du temps à peaufiner les politiques de cycle de vie d&amp;rsquo;Azure Blob Storage pour ensuite les voir s&amp;rsquo;effondrer quand les patterns d&amp;rsquo;accès ont changé, ceci est pour vous. Microsoft vient d&amp;rsquo;annoncer la &lt;a href="https://azure.microsoft.com/en-us/blog/optimize-object-storage-costs-automatically-with-smart-tier-now-generally-available/"&gt;disponibilité générale du smart tier&lt;/a&gt; pour Azure Blob et Data Lake Storage — une capacité de tiering entièrement gérée qui déplace automatiquement les objets entre les niveaux hot, cool et cold en fonction de l&amp;rsquo;utilisation réelle.&lt;/p&gt;
&lt;h2 id="ce-que-fait-réellement-le-smart-tier"&gt;Ce que fait réellement le smart tier&lt;/h2&gt;
&lt;p&gt;Le concept est simple : le smart tier évalue en continu la dernière heure d&amp;rsquo;accès de chaque objet dans votre compte de stockage. Les données fréquemment consultées restent en hot, les données inactives passent en cool après 30 jours, puis en cold après 60 jours supplémentaires. Quand les données sont à nouveau consultées, elles sont repromues en hot immédiatement. Le cycle recommence.&lt;/p&gt;
&lt;p&gt;Pas de règles de cycle de vie à configurer. Pas de prédictions de patterns d&amp;rsquo;accès. Pas de réglages manuels.&lt;/p&gt;
&lt;p&gt;Pendant la preview, Microsoft a rapporté que &lt;strong&gt;plus de 50% de la capacité gérée par smart tier s&amp;rsquo;est automatiquement déplacée vers des niveaux plus froids&lt;/strong&gt; en fonction des patterns d&amp;rsquo;accès réels. C&amp;rsquo;est une réduction de coûts significative pour les comptes de stockage volumineux.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important-pour-les-développeurs-net"&gt;Pourquoi c&amp;rsquo;est important pour les développeurs .NET&lt;/h2&gt;
&lt;p&gt;Si vous développez des applications qui génèrent des logs, de la télémétrie, des données analytiques, ou tout type de patrimoine de données en croissance — et soyons honnêtes, qui ne le fait pas ? — les coûts de stockage s&amp;rsquo;accumulent vite. L&amp;rsquo;approche traditionnelle consistait à écrire des politiques de gestion de cycle de vie, les tester, puis les réajuster quand les patterns d&amp;rsquo;accès de votre application changeaient. Smart tier supprime entièrement ce workflow.&lt;/p&gt;
&lt;p&gt;Quelques scénarios pratiques où cela aide :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Télémétrie et logs d&amp;rsquo;applications&lt;/strong&gt; — hot lors du débogage, rarement consultés après quelques semaines&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pipelines de données et sorties ETL&lt;/strong&gt; — sollicités intensément pendant le traitement, puis majoritairement cold&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contenu généré par les utilisateurs&lt;/strong&gt; — les uploads récents sont hot, le contenu ancien refroidit progressivement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Données de sauvegarde et d&amp;rsquo;archivage&lt;/strong&gt; — consultées occasionnellement pour la conformité, majoritairement inactives&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Activer le smart tier est une configuration unique :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nouveaux comptes&lt;/strong&gt; : Sélectionnez smart tier comme niveau d&amp;rsquo;accès par défaut lors de la création du compte de stockage (redondance zonale requise)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comptes existants&lt;/strong&gt; : Changez le niveau d&amp;rsquo;accès blob de votre valeur par défaut actuelle vers smart tier&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les objets de moins de 128 KiB restent en hot et n&amp;rsquo;engendrent pas de frais de surveillance. Pour tout le reste, vous payez les tarifs standard de capacité hot/cool/cold sans frais de transition de niveau, sans pénalités de suppression anticipée et sans coûts de récupération de données. Des frais de surveillance mensuels par objet couvrent l&amp;rsquo;orchestration.&lt;/p&gt;
&lt;h2 id="le-compromis-à-connaître"&gt;Le compromis à connaître&lt;/h2&gt;
&lt;p&gt;Les règles de tiering du smart tier sont statiques (30 jours → cool, 90 jours → cold). Si vous avez besoin de seuils personnalisés — par exemple, passer en cool après 7 jours pour un workload spécifique — les règles de cycle de vie restent la solution. Et ne mélangez pas les deux : évitez d&amp;rsquo;utiliser des règles de cycle de vie sur des objets gérés par smart tier, car elles peuvent entrer en conflit.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;Ce n&amp;rsquo;est pas révolutionnaire, mais ça résout un vrai casse-tête opérationnel. Si vous gérez des comptes blob storage en croissance et que vous en avez assez de maintenir des politiques de cycle de vie, &lt;a href="https://learn.microsoft.com/en-us/azure/storage/blobs/access-tiers-smart"&gt;activez smart tier&lt;/a&gt; et laissez Azure s&amp;rsquo;en charger. C&amp;rsquo;est disponible dès aujourd&amp;rsquo;hui dans la quasi-totalité des régions zonales du cloud public.&lt;/p&gt;</content:encoded></item><item><title>Où héberger vos agents IA sur Azure ? Un guide de décision pratique</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</guid><description>Azure propose six façons d'héberger des agents IA — des conteneurs bruts aux Foundry Hosted Agents entièrement gérés. Voici comment choisir la bonne option pour votre charge de travail .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si vous construisez des agents IA avec .NET en ce moment, vous avez probablement remarqué quelque chose : il y a &lt;em&gt;beaucoup&lt;/em&gt; de façons de les héberger sur Azure. Container Apps, AKS, Functions, App Service, Foundry Agents, Foundry Hosted Agents — et tous semblent raisonnables jusqu&amp;rsquo;à ce que vous ayez réellement besoin d&amp;rsquo;en choisir un. Microsoft vient de publier un &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;guide complet sur l&amp;rsquo;hébergement d&amp;rsquo;agents IA sur Azure&lt;/a&gt; qui clarifie tout ça, et je veux le décomposer du point de vue pratique d&amp;rsquo;un développeur .NET.&lt;/p&gt;
&lt;h2 id="les-six-options-en-un-coup-dœil"&gt;Les six options en un coup d&amp;rsquo;œil&lt;/h2&gt;
&lt;p&gt;Voici comment je résumerais le paysage :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Idéal pour&lt;/th&gt;
&lt;th&gt;Vous gérez&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Container Apps&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Contrôle total des conteneurs sans complexité K8s&lt;/td&gt;
&lt;td&gt;Observabilité, état, cycle de vie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AKS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Conformité entreprise, multi-cluster, réseau personnalisé&lt;/td&gt;
&lt;td&gt;Tout (c&amp;rsquo;est le but)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Azure Functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tâches d&amp;rsquo;agents événementielles et courtes&lt;/td&gt;
&lt;td&gt;Presque rien — vrai serverless&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;App Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents HTTP simples, trafic prévisible&lt;/td&gt;
&lt;td&gt;Déploiement, config de scaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents sans code via portail/SDK&lt;/td&gt;
&lt;td&gt;Presque rien&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Hosted Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents framework personnalisé avec infra gérée&lt;/td&gt;
&lt;td&gt;Uniquement votre code d&amp;rsquo;agent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Les quatre premières sont du compute généraliste — vous &lt;em&gt;pouvez&lt;/em&gt; y exécuter des agents, mais elles n&amp;rsquo;ont pas été conçues pour ça. Les deux dernières sont natives aux agents : elles comprennent les conversations, les appels d&amp;rsquo;outils et les cycles de vie des agents comme des concepts de première classe.&lt;/p&gt;
&lt;h2 id="foundry-hosted-agents--le-sweet-spot-pour-les-développeurs-net-dagents"&gt;Foundry Hosted Agents — le sweet spot pour les développeurs .NET d&amp;rsquo;agents&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est ce qui a attiré mon attention. Les Foundry Hosted Agents se situent pile au milieu : vous obtenez la flexibilité d&amp;rsquo;exécuter votre propre code (Semantic Kernel, Agent Framework, LangGraph — peu importe) mais la plateforme gère l&amp;rsquo;infrastructure, l&amp;rsquo;observabilité et la gestion des conversations.&lt;/p&gt;
&lt;p&gt;La pièce clé est le &lt;strong&gt;Hosting Adapter&lt;/strong&gt; — une fine couche d&amp;rsquo;abstraction qui connecte votre framework d&amp;rsquo;agents à la plateforme Foundry. Pour Microsoft Agent Framework, ça ressemble à ça :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.agentserver.agentframework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;from_agent_framework&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ChatAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;chat_client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;AzureAIAgentClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;get_local_time&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;from_agent_framework&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;C&amp;rsquo;est toute votre histoire d&amp;rsquo;hébergement. L&amp;rsquo;adapter gère la traduction de protocoles, le streaming via server-sent events, l&amp;rsquo;historique de conversation et le traçage OpenTelemetry — tout automatiquement. Pas de middleware personnalisé, pas de plomberie manuelle.&lt;/p&gt;
&lt;h2 id="le-déploiement-est-vraiment-simple"&gt;Le déploiement est vraiment simple&lt;/h2&gt;
&lt;p&gt;J&amp;rsquo;ai déployé des agents sur Container Apps avant et ça fonctionne, mais on finit par écrire beaucoup de code de colle pour la gestion d&amp;rsquo;état et l&amp;rsquo;observabilité. Avec Hosted Agents et &lt;code&gt;azd&lt;/code&gt;, le déploiement c&amp;rsquo;est :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Installer l&amp;#39;extension agent IA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ext install azure.ai.agents
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Initialiser depuis un template&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Construire, pousser, déployer — terminé&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ce seul &lt;code&gt;azd up&lt;/code&gt; construit votre conteneur, le pousse vers ACR, provisionne le projet Foundry, déploie les endpoints de modèle et démarre votre agent. Cinq étapes condensées en une seule commande.&lt;/p&gt;
&lt;h2 id="gestion-de-conversations-intégrée"&gt;Gestion de conversations intégrée&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est la partie qui fait gagner le plus de temps en production. Au lieu de construire votre propre store d&amp;rsquo;état de conversation, les Hosted Agents le gèrent nativement :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Créer une conversation persistante&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;conversation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conversations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Premier tour&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;response1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;MyAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Remember: my favorite number is 42.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Deuxième tour — le contexte est préservé&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;response2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;MyAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Multiply my favorite number by 10.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pas de Redis. Pas de store de sessions Cosmos DB. Pas de middleware personnalisé pour la sérialisation des messages. La plateforme gère tout simplement.&lt;/p&gt;
&lt;h2 id="mon-framework-de-décision"&gt;Mon framework de décision&lt;/h2&gt;
&lt;p&gt;Après avoir passé en revue les six options, voici mon modèle mental rapide :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Vous avez besoin de zéro infrastructure ?&lt;/strong&gt; → Foundry Agents (portail/SDK, pas de conteneurs)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vous avez du code d&amp;rsquo;agent personnalisé mais voulez un hébergement géré ?&lt;/strong&gt; → Foundry Hosted Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vous avez besoin de tâches d&amp;rsquo;agents événementielles et courtes ?&lt;/strong&gt; → Azure Functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vous avez besoin d&amp;rsquo;un contrôle maximum des conteneurs sans K8s ?&lt;/strong&gt; → Container Apps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vous avez besoin de conformité stricte et multi-cluster ?&lt;/strong&gt; → AKS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vous avez un agent HTTP simple avec un trafic prévisible ?&lt;/strong&gt; → App Service&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pour la plupart des développeurs .NET qui construisent avec Semantic Kernel ou Microsoft Agent Framework, Hosted Agents est probablement le bon point de départ. Vous obtenez le scale-to-zero, OpenTelemetry intégré, la gestion des conversations et la flexibilité de framework — sans gérer Kubernetes ni monter votre propre stack d&amp;rsquo;observabilité.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;Le paysage de l&amp;rsquo;hébergement d&amp;rsquo;agents sur Azure mûrit rapidement. Si vous démarrez un nouveau projet d&amp;rsquo;agent IA aujourd&amp;rsquo;hui, je considérerais sérieusement Foundry Hosted Agents avant de recourir à Container Apps ou AKS par habitude. L&amp;rsquo;infrastructure gérée fait gagner un temps réel, et le pattern hosting adapter vous permet de garder votre choix de framework.&lt;/p&gt;
&lt;p&gt;Consultez le &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;guide complet de Microsoft&lt;/a&gt; et le &lt;a href="https://github.com/microsoft-foundry/foundry-samples/tree/main/samples/python/hosted-agents"&gt;repo Foundry Samples&lt;/a&gt; pour des exemples fonctionnels.&lt;/p&gt;</content:encoded></item><item><title>Les Agent Skills en .NET deviennent vraiment flexibles</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</guid><description>Le Microsoft Agent Framework supporte désormais trois façons de créer des skills — fichiers, classes et code inline — toutes composées via un seul provider. Voici pourquoi c'est important et comment utiliser chacune.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si vous construisez des agents avec le Microsoft Agent Framework, vous connaissez le principe : vous définissez des skills, vous les connectez à un provider et vous laissez l&amp;rsquo;agent décider lequel invoquer. Ce qui est nouveau, c&amp;rsquo;est &lt;em&gt;comment&lt;/em&gt; vous créez ces skills — et le gain en flexibilité est significatif.&lt;/p&gt;
&lt;p&gt;La dernière mise à jour introduit trois patterns d&amp;rsquo;authoring pour les agent skills : &lt;strong&gt;basées sur des fichiers&lt;/strong&gt;, &lt;strong&gt;basées sur des classes&lt;/strong&gt; et &lt;strong&gt;définies en code inline&lt;/strong&gt;. Les trois se branchent sur un seul &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;, ce qui veut dire que vous pouvez les mixer sans logique de routage ni code spécial. Je vous présente chacune et quand l&amp;rsquo;utiliser.&lt;/p&gt;
&lt;h2 id="skills-basées-sur-des-fichiers--le-point-de-départ"&gt;Skills basées sur des fichiers : le point de départ&lt;/h2&gt;
&lt;p&gt;Les skills basées sur des fichiers sont exactement ce que leur nom suggère — un répertoire sur disque avec un fichier &lt;code&gt;SKILL.md&lt;/code&gt;, des scripts optionnels et des documents de référence. La façon la plus directe de donner de nouvelles capacités à votre agent :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;skills/
└── onboarding-guide/
├── SKILL.md
├── scripts/
│ └── check-provisioning.py
└── references/
└── onboarding-checklist.md
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le frontmatter du &lt;code&gt;SKILL.md&lt;/code&gt; déclare le nom et la description, et la section d&amp;rsquo;instructions dit à l&amp;rsquo;agent comment utiliser les scripts et les références :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;name: onboarding-guide
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: &amp;gt;-
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Walk new hires through their first-week setup checklist.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Instructions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; Ask for the employee&amp;#39;s name and start date.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Run &lt;span class="sb"&gt;`scripts/check-provisioning.py`&lt;/span&gt; to verify accounts.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; Walk through &lt;span class="sb"&gt;`references/onboarding-checklist.md`&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;4.&lt;/span&gt; Follow up on incomplete items.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ensuite vous le connectez avec &lt;code&gt;SubprocessScriptRunner.RunAsync&lt;/code&gt; pour l&amp;rsquo;exécution des scripts :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetResponsesClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChatClientAgentOptions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;HRAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ChatOptions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Instructions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;You are a helpful HR assistant.&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AIContextProviders&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;skillsProvider&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;deploymentName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;L&amp;rsquo;agent découvre la skill automatiquement et invoque le script de provisioning quand il doit vérifier le statut des comptes. Propre et simple.&lt;/p&gt;
&lt;h2 id="skills-basées-sur-des-classes--distribuer-via-nuget"&gt;Skills basées sur des classes : distribuer via NuGet&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est là que ça devient intéressant pour les équipes. Les skills basées sur des classes dérivent de &lt;code&gt;AgentClassSkill&amp;lt;T&amp;gt;&lt;/code&gt; et utilisent des attributs comme &lt;code&gt;[AgentSkillResource]&lt;/code&gt; et &lt;code&gt;[AgentSkillScript]&lt;/code&gt; pour que le framework découvre tout par réflexion :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;sealed&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BenefitsEnrollmentSkill&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AgentClassSkill&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;override&lt;/span&gt; &lt;span class="n"&gt;AgentSkillFrontmatter&lt;/span&gt; &lt;span class="n"&gt;Frontmatter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;benefits-enrollment&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Enroll an employee in health, dental, or vision plans.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;protected&lt;/span&gt; &lt;span class="kd"&gt;override&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Instructions&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;1.&lt;/span&gt; &lt;span class="n"&gt;Read&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;available&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;plans&lt;/span&gt; &lt;span class="n"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2.&lt;/span&gt; &lt;span class="n"&gt;Confirm&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;plan&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;employee&lt;/span&gt; &lt;span class="n"&gt;wants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;3.&lt;/span&gt; &lt;span class="n"&gt;Use&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;enroll&lt;/span&gt; &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;complete&lt;/span&gt; &lt;span class="n"&gt;enrollment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [AgentSkillResource(&amp;#34;available-plans&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [Description(&amp;#34;Plan options with monthly pricing.&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;AvailablePlans&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;##&lt;/span&gt; &lt;span class="n"&gt;Available&lt;/span&gt; &lt;span class="n"&gt;Plans&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Health&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Basic&lt;/span&gt; &lt;span class="n"&gt;HMO&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;Premium&lt;/span&gt; &lt;span class="n"&gt;PPO&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;45&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Dental&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Standard&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;Enhanced&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Vision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Basic&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [AgentSkillScript(&amp;#34;enroll&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [Description(&amp;#34;Enrolls employee in the specified benefit plan.&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Enroll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;planCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EnrollInPlan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;planCode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;JsonSerializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;planCode&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le beau ici, c&amp;rsquo;est qu&amp;rsquo;une équipe peut packager ça en paquet NuGet. Vous l&amp;rsquo;ajoutez à votre projet, vous le mettez dans le builder, et ça fonctionne à côté de vos skills fichier sans coordination :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProviderBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileScriptRunner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Les deux skills apparaissent dans le system prompt de l&amp;rsquo;agent. L&amp;rsquo;agent décide laquelle utiliser en fonction de la conversation — pas de code de routage nécessaire.&lt;/p&gt;
&lt;h2 id="skills-inline--le-pont-rapide"&gt;Skills inline : le pont rapide&lt;/h2&gt;
&lt;p&gt;Vous connaissez ce moment où une autre équipe construit exactement la skill dont vous avez besoin, mais elle ne sera pas prête avant le prochain sprint ? &lt;code&gt;AgentInlineSkill&lt;/code&gt; est votre pont :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;timeOffSkill&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentInlineSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;time-off-balance&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Calculate remaining vacation and sick days.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;1.&lt;/span&gt; &lt;span class="n"&gt;Ask&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;employee&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;provided&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2.&lt;/span&gt; &lt;span class="n"&gt;Use&lt;/span&gt; &lt;span class="n"&gt;calculate&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;3.&lt;/span&gt; &lt;span class="n"&gt;Present&lt;/span&gt; &lt;span class="n"&gt;used&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="n"&gt;clearly&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddScript&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;calculate-balance&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;totalDays&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrDatabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetAnnualAllowance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;daysUsed&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrDatabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetDaysUsed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;totalDays&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;daysUsed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;JsonSerializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;totalDays&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;daysUsed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ajoutez-la au builder comme les autres :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProviderBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeOffSkill&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileScriptRunner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Quand le paquet NuGet sort enfin, vous échangez la skill inline contre la version classe. L&amp;rsquo;agent ne voit pas la différence.&lt;/p&gt;
&lt;p&gt;Les skills inline ne sont pas que pour les ponts. Elles sont aussi le bon choix quand vous devez générer des skills dynamiquement à l&amp;rsquo;exécution — pensez à une skill par unité métier chargée depuis la config — ou quand un script doit capturer un état local qui n&amp;rsquo;a pas sa place dans un conteneur DI.&lt;/p&gt;
&lt;h2 id="approbation-de-scripts--lhumain-dans-la-boucle"&gt;Approbation de scripts : l&amp;rsquo;humain dans la boucle&lt;/h2&gt;
&lt;p&gt;Pour nous développeurs .NET qui construisons des agents de production, c&amp;rsquo;est la partie qui débloque vraiment les discussions de déploiement. Certains scripts ont des conséquences réelles — inscrire quelqu&amp;rsquo;un à des avantages, interroger l&amp;rsquo;infrastructure de production. Activez &lt;code&gt;UseScriptApproval&lt;/code&gt; et l&amp;rsquo;agent se met en pause avant d&amp;rsquo;exécuter tout script :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProviderBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeOffSkill&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileScriptRunner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseScriptApproval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Quand l&amp;rsquo;agent veut exécuter un script, il retourne une demande d&amp;rsquo;approbation à la place. Votre app collecte la décision — approuver ou rejeter — et l&amp;rsquo;agent continue en conséquence. Dans les environnements réglementés, c&amp;rsquo;est la différence entre &amp;ldquo;on peut déployer ça&amp;rdquo; et &amp;ldquo;le juridique dit non.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="pourquoi-cette-combinaison-compte"&gt;Pourquoi cette combinaison compte&lt;/h2&gt;
&lt;p&gt;Le vrai pouvoir n&amp;rsquo;est pas dans un pattern individuel — c&amp;rsquo;est dans la composition. Vous pouvez :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Commencer petit&lt;/strong&gt; avec une skill fichier, itérer sur les instructions et la publier sans écrire de C#&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distribuer des skills réutilisables&lt;/strong&gt; comme paquets NuGet que d&amp;rsquo;autres équipes ajoutent en une ligne&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Combler les lacunes&lt;/strong&gt; avec des skills inline quand vous avez besoin de quelque chose &lt;em&gt;maintenant&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filtrer les répertoires partagés&lt;/strong&gt; avec des prédicats pour que votre agent ne charge que ce qu&amp;rsquo;il doit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ajouter une supervision humaine&lt;/strong&gt; pour les scripts qui touchent les systèmes de production&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tout cela se compose via &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;. Pas de routage spécial, pas de logique conditionnelle, pas de vérifications de type de skill.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;Les agent skills en .NET ont maintenant un modèle d&amp;rsquo;authoring véritablement flexible. Que vous soyez un développeur solo qui prototype avec des skills fichier ou une équipe enterprise qui distribue des capacités packagées via NuGet, les patterns s&amp;rsquo;adaptent. Et le mécanisme d&amp;rsquo;approbation de scripts le rend prêt pour la production dans les environnements où vous avez besoin de ce checkpoint humain.&lt;/p&gt;
&lt;p&gt;Consultez l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/agent-framework/agent-skills-in-net-three-ways-to-author-one-provider-to-run-them/"&gt;annonce originale&lt;/a&gt;, la &lt;a href="https://learn.microsoft.com/en-us/agent-framework/agents/skills"&gt;documentation Agent Skills&lt;/a&gt; sur Microsoft Learn et les &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/02-agents/AgentSkills"&gt;exemples .NET sur GitHub&lt;/a&gt; pour vous lancer.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server 2.0 Est Arrivé — L'Automatisation Agentic Self-Hosted Est Ici</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>Azure MCP Server 2.0 devient stable avec des déploiements distants self-hosted, 276 outils sur 57 services Azure, et la sécurité de niveau entreprise — voici ce qui compte pour les développeurs .NET construisant des workflows agentiques.</description><content:encoded>&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Si vous avez construit quelque chose avec MCP et Azure récemment, vous savez probablement que l&amp;rsquo;expérience locale fonctionne bien. Branchez un serveur MCP, laissez votre agent IA parler aux ressources Azure, et passez à la suite. Mais dès que vous avez besoin de partager cette configuration dans une équipe ? C&amp;rsquo;est là que les choses se compliquaient.&lt;/p&gt;
&lt;p&gt;Plus maintenant. Azure MCP Server &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;vient d&amp;rsquo;atteindre la version 2.0 stable&lt;/a&gt;, et la fonctionnalité phare est exactement ce que les équipes d&amp;rsquo;entreprise demandaient : &lt;strong&gt;le support du serveur MCP distant self-hosted&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="quest-ce-quazure-mcp-server-"&gt;Qu&amp;rsquo;est-ce qu&amp;rsquo;Azure MCP Server ?&lt;/h2&gt;
&lt;p&gt;Petit rappel. Azure MCP Server implémente la spécification &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;Model Context Protocol&lt;/a&gt; et expose les capacités Azure en tant qu&amp;rsquo;outils structurés et découvrables que les agents IA peuvent invoquer. Pensez-y comme un pont standardisé entre votre agent et Azure — provisionnement, déploiement, monitoring, diagnostics, tout par une interface cohérente.&lt;/p&gt;
&lt;p&gt;Les chiffres parlent d&amp;rsquo;eux-mêmes : &lt;strong&gt;276 outils MCP sur 57 services Azure&lt;/strong&gt;. C&amp;rsquo;est une couverture sérieuse.&lt;/p&gt;
&lt;h2 id="le-grand-changement--les-déploiements-distants-self-hosted"&gt;Le grand changement : les déploiements distants self-hosted&lt;/h2&gt;
&lt;p&gt;Voici la chose. Exécuter MCP localement sur votre machine, c&amp;rsquo;est bien pour le développement et les expériences. Mais dans un scénario d&amp;rsquo;équipe réelle, vous avez besoin de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un accès partagé pour les développeurs et les systèmes d&amp;rsquo;agents internes&lt;/li&gt;
&lt;li&gt;Une configuration centralisée (contexte de tenant, valeurs par défaut des abonnements, télémétrie)&lt;/li&gt;
&lt;li&gt;Des limites de réseau et de politique d&amp;rsquo;entreprise&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;intégration dans les pipelines CI/CD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 s&amp;rsquo;adresse à tout cela. Vous pouvez le déployer comme un service interne géré de manière centralisée avec un transport basé sur HTTP, une authentification appropriée et une gouvernance cohérente.&lt;/p&gt;
&lt;p&gt;Pour l&amp;rsquo;authentification, vous avez deux excellentes options :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Managed Identity&lt;/strong&gt; — lors de l&amp;rsquo;exécution aux côtés de &lt;a href="https://aka.ms/azmcp/self-host/foundry"&gt;Microsoft Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le flux On-Behalf-Of (OBO)&lt;/strong&gt; — une délégation OpenID Connect qui appelle les API Azure en utilisant le contexte de l&amp;rsquo;utilisateur connecté&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ce flux OBO est particulièrement intéressant pour nous, développeurs .NET. Cela signifie que vos workflows agentiques peuvent fonctionner avec les permissions réelles de l&amp;rsquo;utilisateur, pas un compte de service surprivilégié. Le principe du moindre privilège, intégré nativement.&lt;/p&gt;
&lt;h2 id="renforcement-de-la-sécurité"&gt;Renforcement de la sécurité&lt;/h2&gt;
&lt;p&gt;Ce n&amp;rsquo;est pas seulement une sortie de fonctionnalité — c&amp;rsquo;est aussi une sortie de sécurité. La version 2.0 ajoute :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Une validation d&amp;rsquo;endpoint plus forte&lt;/li&gt;
&lt;li&gt;Des protections contre les modèles d&amp;rsquo;injection dans les outils orientés requête&lt;/li&gt;
&lt;li&gt;Des contrôles d&amp;rsquo;isolation plus serrés pour les environnements de développement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous allez exposer MCP comme un service partagé, ces protections sont importantes. Vraiment importantes.&lt;/p&gt;
&lt;h2 id="où-pouvez-vous-lutiliser-"&gt;Où pouvez-vous l&amp;rsquo;utiliser ?&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;histoire de compatibilité des clients est large. Azure MCP Server 2.0 fonctionne avec :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IDEs&lt;/strong&gt; : VS Code, Visual Studio, IntelliJ, Eclipse, Cursor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agents CLI&lt;/strong&gt; : GitHub Copilot CLI, Claude Code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standalone&lt;/strong&gt; : serveur local pour les configurations simples&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-hosted distant&lt;/strong&gt; : la nouvelle vedette de la version 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plus il y a le support du cloud souverain pour Azure US Government et Azure exploité par 21Vianet, ce qui est critique pour les déploiements réglementés.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important-pour-les-développeurs-net"&gt;Pourquoi c&amp;rsquo;est important pour les développeurs .NET&lt;/h2&gt;
&lt;p&gt;Si vous construisez des applications agentiques avec .NET — qu&amp;rsquo;il s&amp;rsquo;agisse de Semantic Kernel, Microsoft Agent Framework, ou votre propre orchestration — Azure MCP Server 2.0 vous donne un moyen prêt pour la production de laisser vos agents interagir avec l&amp;rsquo;infrastructure Azure. Pas de wrappers REST personnalisés. Pas de modèles d&amp;rsquo;intégration spécifiques aux services. Juste MCP.&lt;/p&gt;
&lt;p&gt;Combiné avec l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;API fluide pour les applications MCP&lt;/a&gt; qui est arrivée il y a quelques jours, l&amp;rsquo;écosystème .NET MCP mûrit rapidement.&lt;/p&gt;
&lt;h2 id="démarrage"&gt;Démarrage&lt;/h2&gt;
&lt;p&gt;Choisissez votre chemin :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp"&gt;GitHub Repo&lt;/a&gt;&lt;/strong&gt; — code source, documentation, tout&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/docker"&gt;Image Docker&lt;/a&gt;&lt;/strong&gt; — déploiement containerisé&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;Extension VS Code&lt;/a&gt;&lt;/strong&gt; — intégration IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;Guide de self-hosting&lt;/a&gt;&lt;/strong&gt; — la fonctionnalité phare de la version 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Azure MCP Server 2.0 est exactement le type de mise à niveau d&amp;rsquo;infrastructure qui ne brille pas dans une démo mais change tout en pratique. Un MCP distant self-hosted avec une authentification appropriée, un renforcement de la sécurité et un support du cloud souverain signifient que MCP est prêt pour les vraies équipes construisant de vrais workflows agentiques sur Azure. Si vous attendiez le signal « prêt pour l&amp;rsquo;entreprise » — c&amp;rsquo;est celui-ci.&lt;/p&gt;</content:encoded></item><item><title>Connectez vos serveurs MCP sur Azure Functions aux agents Foundry — Voici comment</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</guid><description>Construisez votre serveur MCP une fois, déployez-le sur Azure Functions et connectez-le aux agents Microsoft Foundry avec une authentification appropriée. Vos outils fonctionnent partout — VS Code, Cursor, et maintenant les agents IA d'entreprise.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Voici ce que j&amp;rsquo;adore dans l&amp;rsquo;écosystème MCP : vous construisez votre serveur une fois, et il fonctionne partout. VS Code, Visual Studio, Cursor, ChatGPT — chaque client MCP peut découvrir et utiliser vos outils. Maintenant, Microsoft ajoute un autre consommateur à cette liste : les agents Foundry.&lt;/p&gt;
&lt;p&gt;Lily Ma de l&amp;rsquo;équipe Azure SDK &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;a publié un guide pratique&lt;/a&gt; sur la connexion de serveurs MCP déployés sur Azure Functions avec les agents Microsoft Foundry. Si vous avez déjà un serveur MCP, c&amp;rsquo;est de la valeur ajoutée pure — aucune reconstruction nécessaire.&lt;/p&gt;
&lt;h2 id="pourquoi-cette-combinaison-a-du-sens"&gt;Pourquoi cette combinaison a du sens&lt;/h2&gt;
&lt;p&gt;Azure Functions vous offre une infrastructure évolutive, une authentification intégrée et une facturation serverless pour héberger des serveurs MCP. Microsoft Foundry vous offre des agents IA capables de raisonner, planifier et agir. Les connecter signifie que vos outils personnalisés — interroger une base de données, appeler une API métier, exécuter une logique de validation — deviennent des capacités que les agents IA d&amp;rsquo;entreprise peuvent découvrir et utiliser de manière autonome.&lt;/p&gt;
&lt;p&gt;Le point clé : votre serveur MCP reste le même. Vous ajoutez simplement Foundry comme un autre consommateur. Les mêmes outils qui fonctionnent dans votre configuration VS Code alimentent maintenant un agent IA avec lequel votre équipe ou vos clients interagissent.&lt;/p&gt;
&lt;h2 id="options-dauthentification"&gt;Options d&amp;rsquo;authentification&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est là que l&amp;rsquo;article apporte vraiment de la valeur. Quatre méthodes d&amp;rsquo;authentification selon votre scénario :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Méthode&lt;/th&gt;
&lt;th&gt;Cas d&amp;rsquo;usage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basée sur clé&lt;/strong&gt; (par défaut)&lt;/td&gt;
&lt;td&gt;Développement ou serveurs sans auth Entra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Microsoft Entra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Production avec identités managées&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Passthrough d&amp;rsquo;identité OAuth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Production où chaque utilisateur s&amp;rsquo;authentifie individuellement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sans authentification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dev/tests ou données publiques uniquement&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Pour la production, Microsoft Entra avec identité d&amp;rsquo;agent est le chemin recommandé. Le passthrough d&amp;rsquo;identité OAuth est pour les cas où le contexte utilisateur compte — l&amp;rsquo;agent demande aux utilisateurs de se connecter, et chaque requête porte le propre token de l&amp;rsquo;utilisateur.&lt;/p&gt;
&lt;h2 id="mise-en-place"&gt;Mise en place&lt;/h2&gt;
&lt;p&gt;Le flux général :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Déployez votre serveur MCP sur Azure Functions&lt;/strong&gt; — des exemples sont disponibles pour &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;.NET&lt;/a&gt;, Python, TypeScript et Java&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Activez l&amp;rsquo;authentification MCP intégrée&lt;/strong&gt; sur votre function app&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obtenez votre URL d&amp;rsquo;endpoint&lt;/strong&gt; — &lt;code&gt;https://&amp;lt;FUNCTION_APP_NAME&amp;gt;.azurewebsites.net/runtime/webhooks/mcp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ajoutez le serveur MCP comme outil dans Foundry&lt;/strong&gt; — naviguez vers votre agent dans le portail, ajoutez un nouvel outil MCP, fournissez l&amp;rsquo;endpoint et les credentials&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Testez ensuite dans le playground de l&amp;rsquo;Agent Builder en envoyant un prompt qui déclenchera l&amp;rsquo;un de vos outils.&lt;/p&gt;
&lt;h2 id="mon-avis"&gt;Mon avis&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;histoire de la composabilité devient vraiment solide ici. Construisez votre serveur MCP une fois en .NET (ou Python, TypeScript, Java), déployez-le sur Azure Functions, et chaque client compatible MCP peut l&amp;rsquo;utiliser — outils de programmation, apps de chat, et maintenant agents IA d&amp;rsquo;entreprise. C&amp;rsquo;est un pattern « écrire une fois, utiliser partout » qui fonctionne réellement.&lt;/p&gt;
&lt;p&gt;Pour les développeurs .NET spécifiquement, l&amp;rsquo;&lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;extension MCP Azure Functions&lt;/a&gt; rend les choses simples. Vous définissez vos outils comme des Azure Functions, vous déployez, et vous avez un serveur MCP prêt pour la production avec toute la sécurité et la scalabilité qu&amp;rsquo;Azure Functions fournit.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;Si vous avez des outils MCP qui tournent sur Azure Functions, les connecter aux agents Foundry est un gain rapide — vos outils personnalisés deviennent des capacités IA d&amp;rsquo;entreprise avec une authentification appropriée et sans modification de code côté serveur.&lt;/p&gt;
&lt;p&gt;Lisez le &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;guide complet&lt;/a&gt; pour des instructions pas à pas sur chaque méthode d&amp;rsquo;authentification, et consultez la &lt;a href="https://learn.microsoft.com/azure/azure-functions/functions-mcp-foundry-tools?tabs=entra%2Cmcp-extension%2Cfoundry"&gt;documentation détaillée&lt;/a&gt; pour les configurations de production.&lt;/p&gt;</content:encoded></item><item><title>Construire des UIs Multi-Agents en Temps Réel Qui Ne Ressemblent Pas à une Boîte Noire</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</guid><description>AG-UI et Microsoft Agent Framework s'associent pour offrir aux workflows multi-agents un vrai frontend — avec du streaming en temps réel, des approbations humaines et une visibilité totale sur ce que font vos agents.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Voilà le truc avec les systèmes multi-agents : ils sont incroyables en démo. Trois agents qui se passent le travail, résolvent des problèmes, prennent des décisions. Puis tu essaies de le mettre devant de vrais utilisateurs et&amp;hellip; silence. Un indicateur qui tourne. Aucune idée de quel agent fait quoi ni pourquoi le système est en pause. Ce n&amp;rsquo;est pas un produit — c&amp;rsquo;est un problème de confiance.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;équipe Microsoft Agent Framework vient de publier un &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;excellent tutoriel&lt;/a&gt; sur le couplage des workflows MAF avec &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;AG-UI&lt;/a&gt;, un protocole ouvert pour streamer les événements d&amp;rsquo;exécution des agents vers un frontend via les Server-Sent Events. Et franchement ? C&amp;rsquo;est exactement le pont qui nous manquait.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important-pour-les-développeurs-net"&gt;Pourquoi c&amp;rsquo;est important pour les développeurs .NET&lt;/h2&gt;
&lt;p&gt;Si tu construis des applications alimentées par l&amp;rsquo;IA, tu as probablement déjà heurté ce mur. Ton orchestration backend fonctionne parfaitement — les agents se passent le relais, les outils se déclenchent, les décisions sont prises. Mais le frontend n&amp;rsquo;a aucune idée de ce qui se passe en coulisses. AG-UI résout ça en définissant un protocole standard pour streamer les événements d&amp;rsquo;agents (pense à &lt;code&gt;RUN_STARTED&lt;/code&gt;, &lt;code&gt;STEP_STARTED&lt;/code&gt;, &lt;code&gt;TOOL_CALL_*&lt;/code&gt;, &lt;code&gt;TEXT_MESSAGE_*&lt;/code&gt;) directement vers ta couche UI via SSE.&lt;/p&gt;
&lt;p&gt;La démo est un workflow de support client avec trois agents : un agent de triage qui route les demandes, un agent de remboursement qui gère les questions d&amp;rsquo;argent, et un agent de commandes qui gère les remplacements. Chaque agent a ses propres outils, et la topologie de handoff est définie explicitement — pas de « devine à partir du prompt ».&lt;/p&gt;
&lt;h2 id="la-topologie-de-handoff-est-la-vraie-star"&gt;La topologie de handoff est la vraie star&lt;/h2&gt;
&lt;p&gt;Ce qui m&amp;rsquo;a marqué, c&amp;rsquo;est comment &lt;code&gt;HandoffBuilder&lt;/code&gt; te permet de déclarer un graphe de routage dirigé entre les agents :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HandoffBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ag_ui_handoff_workflow_demo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;participants&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;termination_condition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;termination_condition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Refunds, damaged-item claims...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Replacement, exchange...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Replacement logistics needed after refund.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;After replacement/shipping tasks complete.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Chaque &lt;code&gt;add_handoff&lt;/code&gt; crée une arête dirigée avec une description en langage naturel. Le framework génère des outils de handoff pour chaque agent en se basant sur cette topologie. Les décisions de routage reposent donc sur ta structure d&amp;rsquo;orchestration, pas juste sur ce que le LLM a envie de faire. C&amp;rsquo;est un gain énorme pour la fiabilité en production.&lt;/p&gt;
&lt;h2 id="le-human-in-the-loop-qui-fonctionne-vraiment"&gt;Le human-in-the-loop qui fonctionne vraiment&lt;/h2&gt;
&lt;p&gt;La démo présente deux patterns d&amp;rsquo;interruption dont toute app d&amp;rsquo;agents réelle a besoin :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interruptions d&amp;rsquo;approbation d&amp;rsquo;outils&lt;/strong&gt; — quand un agent appelle un outil marqué avec &lt;code&gt;approval_mode=&amp;quot;always_require&amp;quot;&lt;/code&gt;, le workflow se met en pause et émet un événement. Le frontend affiche un modal d&amp;rsquo;approbation avec le nom de l&amp;rsquo;outil et ses arguments. Pas de boucles de retry qui brûlent des tokens — juste un flux propre pause-approbation-reprise.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interruptions de demande d&amp;rsquo;information&lt;/strong&gt; — quand un agent a besoin de plus de contexte de la part de l&amp;rsquo;utilisateur (comme un ID de commande), il se met en pause et pose la question. Le frontend affiche la question, l&amp;rsquo;utilisateur répond, et l&amp;rsquo;exécution reprend exactement là où elle s&amp;rsquo;était arrêtée.&lt;/p&gt;
&lt;p&gt;Les deux patterns sont streamés en tant qu&amp;rsquo;événements AG-UI standard, donc ton frontend n&amp;rsquo;a pas besoin de logique personnalisée par agent — il affiche simplement chaque événement qui arrive via la connexion SSE.&lt;/p&gt;
&lt;h2 id="lintégration-est-étonnamment-simple"&gt;L&amp;rsquo;intégration est étonnamment simple&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;intégration entre MAF et AG-UI se résume à un seul appel de fonction :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework.ag_ui&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AgentFrameworkWorkflow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;add_agent_framework_fastapi_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;demo_workflow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AgentFrameworkWorkflow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;workflow_factory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;_thread_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;create_handoff_workflow&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ag_ui_handoff_workflow_demo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;add_agent_framework_fastapi_endpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;demo_workflow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/handoff_demo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La &lt;code&gt;workflow_factory&lt;/code&gt; crée un workflow frais par thread, pour que chaque conversation ait son propre état isolé. L&amp;rsquo;endpoint gère toute la plomberie SSE automatiquement. Si tu utilises déjà FastAPI (ou que tu peux l&amp;rsquo;ajouter comme couche légère), c&amp;rsquo;est quasiment zéro friction.&lt;/p&gt;
&lt;h2 id="mon-avis"&gt;Mon avis&lt;/h2&gt;
&lt;p&gt;Pour nous développeurs .NET, la question immédiate est : « Est-ce que je peux faire ça en C# ? » L&amp;rsquo;Agent Framework est disponible pour .NET et Python, et le protocole AG-UI est agnostique au langage (c&amp;rsquo;est juste du SSE). Donc même si cette démo spécifique utilise Python et FastAPI, le pattern se transpose directement. Tu pourrais câbler une API minimale ASP.NET Core avec des endpoints SSE suivant le même schéma d&amp;rsquo;événements AG-UI.&lt;/p&gt;
&lt;p&gt;Le point plus important est que les UIs multi-agents deviennent une préoccupation de premier plan, pas un ajout après coup. Si tu construis quoi que ce soit où des agents interagissent avec des humains — support client, workflows d&amp;rsquo;approbation, traitement de documents — cette combinaison d&amp;rsquo;orchestration MAF et de transparence AG-UI est le pattern à suivre.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;AG-UI + Microsoft Agent Framework te donne le meilleur des deux mondes : une orchestration multi-agents robuste côté backend et une visibilité en temps réel côté frontend. Fini les interactions d&amp;rsquo;agents en boîte noire.&lt;/p&gt;
&lt;p&gt;Consulte le &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;tutoriel complet&lt;/a&gt; et le &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;dépôt du protocole AG-UI&lt;/a&gt; pour aller plus loin.&lt;/p&gt;</content:encoded></item><item><title>L'évaluation de modernisation de GitHub Copilot est le meilleur outil de migration que vous n'utilisez pas encore</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</guid><description>L'extension de modernisation de GitHub Copilot ne se contente pas de suggérer des modifications de code — elle produit une évaluation complète de migration avec des issues actionnables, des comparaisons de cibles Azure et un workflow collaboratif. Voici pourquoi le document d'évaluation est la clé de tout.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Migrer une application legacy .NET Framework vers .NET moderne est l&amp;rsquo;une de ces tâches que tout le monde sait devoir faire mais que personne ne veut commencer. Ce n&amp;rsquo;est jamais juste « changer le framework cible ». Ce sont des API qui ont disparu, des packages qui n&amp;rsquo;existent plus, des modèles d&amp;rsquo;hébergement qui fonctionnent totalement différemment, et un million de petites décisions sur ce qu&amp;rsquo;il faut containeriser, réécrire ou laisser tel quel.&lt;/p&gt;
&lt;p&gt;Jeffrey Fritz vient de publier une &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;plongée approfondie dans l&amp;rsquo;évaluation de modernisation de GitHub Copilot&lt;/a&gt;, et honnêtement ? C&amp;rsquo;est le meilleur outillage de migration que j&amp;rsquo;ai vu pour .NET. Pas à cause de la génération de code — c&amp;rsquo;est devenu standard maintenant. À cause du document d&amp;rsquo;évaluation qu&amp;rsquo;il produit.&lt;/p&gt;
&lt;h2 id="ce-nest-pas-quun-moteur-de-suggestions-de-code"&gt;Ce n&amp;rsquo;est pas qu&amp;rsquo;un moteur de suggestions de code&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;extension VS Code suit un modèle &lt;strong&gt;Évaluer → Planifier → Exécuter&lt;/strong&gt;. La phase d&amp;rsquo;évaluation analyse l&amp;rsquo;intégralité de votre codebase et produit un document structuré qui capture tout : ce qui doit changer, quelles ressources Azure provisionner, quel modèle de déploiement utiliser. Tout en aval — infrastructure as code, containerisation, manifestes de déploiement — découle de ce que l&amp;rsquo;évaluation trouve.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;évaluation est stockée sous &lt;code&gt;.github/modernize/assessment/&lt;/code&gt; dans votre projet. Chaque exécution produit un rapport indépendant, vous construisez ainsi un historique et pouvez suivre l&amp;rsquo;évolution de votre posture de migration au fur et à mesure que vous corrigez les issues.&lt;/p&gt;
&lt;h2 id="deux-façons-de-commencer"&gt;Deux façons de commencer&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Évaluation Recommandée&lt;/strong&gt; — la voie rapide. Choisissez parmi des domaines curatés (Mise à jour Java/.NET, Cloud Readiness, Sécurité) et obtenez des résultats significatifs sans toucher à la configuration. Idéal pour un premier regard sur l&amp;rsquo;état de votre application.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Évaluation Personnalisée&lt;/strong&gt; — la voie ciblée. Configurez exactement ce qu&amp;rsquo;il faut analyser : compute cible (App Service, AKS, Container Apps), OS cible, analyse de containerisation. Choisissez plusieurs cibles Azure pour comparer les approches de migration côte à côte.&lt;/p&gt;
&lt;p&gt;Cette vue de comparaison est véritablement utile. Une app avec 3 issues obligatoires pour App Service pourrait en avoir 7 pour AKS. Voir les deux aide à prendre la décision d&amp;rsquo;hébergement avant de s&amp;rsquo;engager sur un chemin de migration.&lt;/p&gt;
&lt;h2 id="le-détail-des-issues-est-actionnable"&gt;Le détail des issues est actionnable&lt;/h2&gt;
&lt;p&gt;Chaque issue est accompagné d&amp;rsquo;un niveau de criticité :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Obligatoire&lt;/strong&gt; — doit être corrigé sinon la migration échoue&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Potentiel&lt;/strong&gt; — pourrait impacter la migration, nécessite un jugement humain&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optionnel&lt;/strong&gt; — améliorations recommandées, ne bloque pas la migration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et chaque issue renvoie aux fichiers affectés et numéros de lignes, fournit une description détaillée de ce qui ne va pas et pourquoi c&amp;rsquo;est important pour votre plateforme cible, donne des étapes concrètes de remédiation (pas juste « corrigez ceci ») et inclut des liens vers la documentation officielle.&lt;/p&gt;
&lt;p&gt;Vous pouvez confier des issues individuelles à des développeurs et ils ont tout ce dont ils ont besoin pour agir. C&amp;rsquo;est la différence entre un outil qui vous dit « il y a un problème » et un qui vous dit comment le résoudre.&lt;/p&gt;
&lt;h2 id="les-chemins-de-mise-à-jour-couverts"&gt;Les chemins de mise à jour couverts&lt;/h2&gt;
&lt;p&gt;Pour .NET spécifiquement :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.NET Framework → .NET 10&lt;/li&gt;
&lt;li&gt;ASP.NET → ASP.NET Core&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Chaque chemin de mise à jour a des règles de détection qui savent quelles API ont été supprimées, quels patterns n&amp;rsquo;ont pas d&amp;rsquo;équivalent direct et quels problèmes de sécurité nécessitent une attention particulière.&lt;/p&gt;
&lt;p&gt;Pour les équipes gérant plusieurs applications, il y a aussi un CLI qui supporte les évaluations batch multi-repo — clonez tous les repos, évaluez-les tous, obtenez des rapports par application plus une vue agrégée du portfolio.&lt;/p&gt;
&lt;h2 id="mon-avis"&gt;Mon avis&lt;/h2&gt;
&lt;p&gt;Si vous êtes assis sur des applications legacy .NET Framework (et soyons honnêtes, la plupart des équipes enterprise le sont), c&amp;rsquo;est &lt;em&gt;l&amp;rsquo;outil&lt;/em&gt; par lequel commencer. Le document d&amp;rsquo;évaluation seul vaut le temps — il transforme un vague « on devrait moderniser » en une liste concrète et priorisée d&amp;rsquo;éléments de travail avec des chemins clairs vers l&amp;rsquo;avant.&lt;/p&gt;
&lt;p&gt;Le workflow collaboratif est malin aussi : exportez les évaluations, partagez-les avec votre équipe, importez-les sans relancer. Revues d&amp;rsquo;architecture où les décideurs ne sont pas ceux qui exécutent les outils ? Couvert.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;évaluation de modernisation de GitHub Copilot transforme la migration .NET d&amp;rsquo;un projet effrayant et indéfini en un processus structuré et traçable. Commencez avec une évaluation recommandée pour voir où vous en êtes, puis utilisez des évaluations personnalisées pour comparer les cibles Azure et construire votre plan de migration.&lt;/p&gt;
&lt;p&gt;Lisez le &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;walkthrough complet&lt;/a&gt; et récupérez l&amp;rsquo;&lt;a href="https://aka.ms/ghcp-appmod/vscode-ext"&gt;extension VS Code&lt;/a&gt; pour l&amp;rsquo;essayer sur votre propre codebase.&lt;/p&gt;</content:encoded></item><item><title>L'Ingénierie de Plateformes Agentique Devient Réalité — Git-APE Montre Comment</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</guid><description>Le projet Git-APE de Microsoft concrétise l'ingénierie de plateformes agentique — en utilisant les agents GitHub Copilot et Azure MCP pour transformer des requêtes en langage naturel en infrastructure cloud validée.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/agentic-platform-engineering-git-ape/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;L&amp;rsquo;ingénierie de plateformes est un de ces termes qui sonne bien en conférence mais qui signifie généralement « on a construit un portail interne et un wrapper Terraform. » La vraie promesse — une infrastructure en self-service qui soit réellement sécurisée, gouvernée et rapide — a toujours été à quelques pas.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;équipe Azure vient de publier la &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;Partie 2 de leur série sur l&amp;rsquo;ingénierie de plateformes agentique&lt;/a&gt;, et celle-ci porte sur l&amp;rsquo;implémentation concrète. Ils l&amp;rsquo;appellent &lt;strong&gt;Git-APE&lt;/strong&gt; (oui, l&amp;rsquo;acronyme est intentionnel), et c&amp;rsquo;est un projet open source qui utilise les agents GitHub Copilot plus les serveurs Azure MCP pour transformer des requêtes en langage naturel en infrastructure validée et déployée.&lt;/p&gt;
&lt;h2 id="ce-que-git-ape-fait-concrètement"&gt;Ce que Git-APE fait concrètement&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;idée principale : au lieu que les développeurs apprennent des modules Terraform, naviguent dans des UIs de portails ou déposent des tickets à l&amp;rsquo;équipe plateforme, ils parlent à un agent Copilot. L&amp;rsquo;agent interprète l&amp;rsquo;intention, génère de l&amp;rsquo;Infrastructure-as-Code, la valide contre les politiques et déploie — le tout dans VS Code.&lt;/p&gt;
&lt;p&gt;Voici la mise en place :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/Azure/git-ape
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; git-ape
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ouvre le workspace dans VS Code, et les fichiers de configuration de l&amp;rsquo;agent sont automatiquement découverts par GitHub Copilot. Tu interagis directement avec l&amp;rsquo;agent :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@git-ape deploy a function app with storage in West Europe
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;L&amp;rsquo;agent utilise Azure MCP Server en interne pour interagir avec les services Azure. La configuration MCP dans les paramètres de VS Code active des capacités spécifiques :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;azureMcp.serverMode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;azureMcp.enabledServices&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;deploy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bestpractices&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;group&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;subscription&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;functionapp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;storage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;sql&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;monitor&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;azureMcp.readOnly&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="pourquoi-cest-important"&gt;Pourquoi c&amp;rsquo;est important&lt;/h2&gt;
&lt;p&gt;Pour ceux d&amp;rsquo;entre nous qui construisent sur Azure, cela déplace la conversation de l&amp;rsquo;ingénierie de plateformes de « comment construire un portail » à « comment décrire nos garde-fous comme des APIs. » Quand l&amp;rsquo;interface de ta plateforme est un agent IA, la qualité de tes contraintes et politiques devient le produit.&lt;/p&gt;
&lt;p&gt;Le blog de la Partie 1 posait la théorie : des APIs bien décrites, des schémas de contrôle et des garde-fous explicites rendent les plateformes agent-ready. La Partie 2 prouve que ça marche en livrant des outils concrets. L&amp;rsquo;agent ne génère pas aveuglément des ressources — il valide contre les bonnes pratiques, respecte les conventions de nommage et applique les politiques de ton organisation.&lt;/p&gt;
&lt;p&gt;Le nettoyage est tout aussi simple :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@git-ape destroy my-resource-group
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="mon-avis"&gt;Mon avis&lt;/h2&gt;
&lt;p&gt;Je serai honnête — ici c&amp;rsquo;est plus le pattern que l&amp;rsquo;outil spécifique qui compte. Git-APE lui-même est une démo/architecture de référence. Mais l&amp;rsquo;idée sous-jacente — les agents comme interface de ta plateforme, MCP comme protocole, GitHub Copilot comme hôte — c&amp;rsquo;est la direction que prend l&amp;rsquo;expérience développeur en entreprise.&lt;/p&gt;
&lt;p&gt;Si tu es une équipe plateforme qui cherche comment rendre son outillage interne agent-friendly, il n&amp;rsquo;y a pas de meilleur point de départ. Et si tu es un développeur .NET qui se demande comment ça se connecte à ton monde : Azure MCP Server et les agents GitHub Copilot fonctionnent avec n&amp;rsquo;importe quel workload Azure. Ton API ASP.NET Core, ton stack .NET Aspire, tes microservices containerisés — tout ça peut être la cible d&amp;rsquo;un flux de déploiement agentique.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;Git-APE est un aperçu précoce mais concret de l&amp;rsquo;ingénierie de plateformes agentique en pratique. Clone le &lt;a href="https://github.com/Azure/git-ape"&gt;repo&lt;/a&gt;, essaie la démo et commence à réfléchir à comment les APIs et politiques de ta plateforme devraient se présenter pour qu&amp;rsquo;un agent puisse les utiliser en toute sécurité.&lt;/p&gt;
&lt;p&gt;Lis le &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;post complet&lt;/a&gt; pour le walkthrough et les vidéos de démo.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Foundry Mars 2026 — GPT-5.4, Agent Service en GA et la Refonte du SDK Qui Change Tout</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</guid><description>La mise à jour de mars 2026 de Microsoft Foundry est massive : Agent Service passe en GA, GPT-5.4 apporte un raisonnement fiable, le SDK azure-ai-projects se stabilise dans tous les langages, et Fireworks AI amène les modèles ouverts sur Azure.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Les posts mensuels « Quoi de neuf dans Microsoft Foundry » sont généralement un mélange d&amp;rsquo;améliorations incrémentales et de fonctionnalités phares occasionnelles. L&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;édition de mars 2026&lt;/a&gt; ? C&amp;rsquo;est pratiquement que des fonctionnalités phares. Foundry Agent Service passe en GA, GPT-5.4 arrive en production, le SDK reçoit une version stable majeure, et Fireworks AI apporte l&amp;rsquo;inférence de modèles ouverts sur Azure. Voyons ce qui compte pour les développeurs .NET.&lt;/p&gt;
&lt;h2 id="foundry-agent-service-est-prêt-pour-la-production"&gt;Foundry Agent Service est prêt pour la production&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est la grande nouvelle. Le runtime d&amp;rsquo;agents de nouvelle génération est en disponibilité générale — construit sur l&amp;rsquo;API Responses d&amp;rsquo;OpenAI, compatible au niveau du protocole avec les agents OpenAI, et ouvert aux modèles de plusieurs fournisseurs. Si vous construisez avec l&amp;rsquo;API Responses aujourd&amp;rsquo;hui, migrer vers Foundry ajoute la sécurité entreprise, le réseau privé, le RBAC Entra, le traçage complet et l&amp;rsquo;évaluation par-dessus votre logique d&amp;rsquo;agent existante.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PromptAgentDefinition&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;project_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AZURE_AI_PROJECT_ENDPOINT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-enterprise-agent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;definition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PromptAgentDefinition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AZURE_AI_MODEL_DEPLOYMENT_NAME&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ajouts clés : réseau privé de bout en bout, extension de l&amp;rsquo;authentification MCP (y compris le passthrough OAuth), aperçu de Voice Live pour les agents voix-à-voix, et agents hébergés dans 6 nouvelles régions.&lt;/p&gt;
&lt;h2 id="gpt-54--la-fiabilité-plutôt-que-lintelligence-brute"&gt;GPT-5.4 — la fiabilité plutôt que l&amp;rsquo;intelligence brute&lt;/h2&gt;
&lt;p&gt;GPT-5.4 n&amp;rsquo;est pas question d&amp;rsquo;être plus intelligent. C&amp;rsquo;est une question de fiabilité. Un raisonnement plus solide sur de longues interactions, une meilleure adhérence aux instructions, moins d&amp;rsquo;échecs en cours de workflow, et des capacités intégrées d&amp;rsquo;utilisation d&amp;rsquo;ordinateur. Pour les agents en production, cette fiabilité compte bien plus que les scores de benchmarks.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Modèle&lt;/th&gt;
&lt;th&gt;Tarif (par M tokens)&lt;/th&gt;
&lt;th&gt;Idéal pour&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 (≤272K)&lt;/td&gt;
&lt;td&gt;$2.50 / $15 sortie&lt;/td&gt;
&lt;td&gt;Agents en production, code, workflows documentaires&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Pro&lt;/td&gt;
&lt;td&gt;$30 / $180 sortie&lt;/td&gt;
&lt;td&gt;Analyse approfondie, raisonnement scientifique&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Mini&lt;/td&gt;
&lt;td&gt;Économique&lt;/td&gt;
&lt;td&gt;Classification, extraction, appels d&amp;rsquo;outils légers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La stratégie intelligente est le routage : GPT-5.4 Mini gère le travail à haut volume et faible latence tandis que GPT-5.4 prend les requêtes nécessitant un raisonnement intensif.&lt;/p&gt;
&lt;h2 id="le-sdk-est-enfin-stable"&gt;Le SDK est enfin stable&lt;/h2&gt;
&lt;p&gt;Le SDK &lt;code&gt;azure-ai-projects&lt;/code&gt; a publié des versions stables dans tous les langages — Python 2.0.0, JS/TS 2.0.0, Java 2.0.0, et .NET 2.0.0 (1er avril). La dépendance &lt;code&gt;azure-ai-agents&lt;/code&gt; a disparu — tout vit sous &lt;code&gt;AIProjectClient&lt;/code&gt;. Installez avec &lt;code&gt;pip install azure-ai-projects&lt;/code&gt; et le paquet inclut &lt;code&gt;openai&lt;/code&gt; et &lt;code&gt;azure-identity&lt;/code&gt; comme dépendances directes.&lt;/p&gt;
&lt;p&gt;Pour les développeurs .NET, cela signifie un seul paquet NuGet pour toute la surface Foundry. Fini le jonglage entre des SDKs d&amp;rsquo;agents séparés.&lt;/p&gt;
&lt;h2 id="fireworks-ai-amène-les-modèles-ouverts-sur-azure"&gt;Fireworks AI amène les modèles ouverts sur Azure&lt;/h2&gt;
&lt;p&gt;Peut-être l&amp;rsquo;ajout le plus intéressant architecturalement : Fireworks AI traitant plus de 13 billions de tokens par jour à ~180K requêtes/seconde, maintenant disponible via Foundry. DeepSeek V3.2, gpt-oss-120b, Kimi K2.5, et MiniMax M2.5 au lancement.&lt;/p&gt;
&lt;p&gt;La vraie histoire est le &lt;strong&gt;bring-your-own-weights&lt;/strong&gt; — téléchargez des poids quantifiés ou fine-tunés depuis n&amp;rsquo;importe où sans changer la pile de service. Déployez en mode serverless pay-per-token ou en débit provisionné.&lt;/p&gt;
&lt;h2 id="autres-points-forts"&gt;Autres points forts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Phi-4 Reasoning Vision 15B&lt;/strong&gt; — raisonnement multimodal pour graphiques, diagrammes et mises en page de documents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluations GA&lt;/strong&gt; — évaluateurs prêts à l&amp;rsquo;emploi avec surveillance continue de production intégrée à Azure Monitor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Priority Processing&lt;/strong&gt; (Preview) — voie de calcul dédiée pour les charges de travail sensibles à la latence&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Voice Live&lt;/strong&gt; — runtime voix-à-voix connecté directement aux agents Foundry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tracing GA&lt;/strong&gt; — inspection de bout en bout des traces d&amp;rsquo;agents avec tri et filtrage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dépréciation de PromptFlow&lt;/strong&gt; — migration vers Microsoft Framework Workflows d&amp;rsquo;ici janvier 2027&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Mars 2026 est un tournant pour Foundry. Agent Service en GA, SDKs stables dans tous les langages, GPT-5.4 pour des agents de production fiables, et inférence de modèles ouverts via Fireworks AI — la plateforme est prête pour des charges de travail sérieuses.&lt;/p&gt;
&lt;p&gt;Lisez le &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;récapitulatif complet&lt;/a&gt; et &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;créez votre premier agent&lt;/a&gt; pour commencer.&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server — La bonne façon de donner accès aux bases de données aux agents IA</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</guid><description>SQL MCP Server de Data API builder donne aux agents IA un accès sécurisé et déterministe aux bases de données sans exposer les schémas ni dépendre de NL2SQL. RBAC, cache, support multi-bases — tout est intégré.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/sql-mcp-server-data-api-builder/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Soyons honnêtes : la plupart des serveurs MCP de bases de données disponibles aujourd&amp;rsquo;hui sont effrayants. Ils prennent une requête en langage naturel, génèrent du SQL à la volée et l&amp;rsquo;exécutent contre vos données de production. Qu&amp;rsquo;est-ce qui pourrait mal tourner ? (Tout. Absolument tout.)&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;équipe Azure SQL vient de &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;présenter SQL MCP Server&lt;/a&gt;, et il adopte une approche fondamentalement différente. Construit comme une fonctionnalité de Data API builder (DAB) 2.0, il donne aux agents IA un accès structuré et déterministe aux opérations de base de données — sans NL2SQL, sans exposer votre schéma, et avec un RBAC complet à chaque étape.&lt;/p&gt;
&lt;h2 id="pourquoi-pas-de-nl2sql-"&gt;Pourquoi pas de NL2SQL ?&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est la décision de conception la plus intéressante. Les modèles ne sont pas déterministes, et les requêtes complexes sont les plus susceptibles de produire des erreurs subtiles. Les requêtes exactes que les utilisateurs espèrent que l&amp;rsquo;IA peut générer sont aussi celles qui nécessitent le plus de vérification quand elles sont produites de manière non déterministe.&lt;/p&gt;
&lt;p&gt;À la place, SQL MCP Server utilise une approche &lt;strong&gt;NL2DAB&lt;/strong&gt;. L&amp;rsquo;agent travaille avec la couche d&amp;rsquo;abstraction d&amp;rsquo;entités de Data API builder et son constructeur de requêtes intégré pour produire du T-SQL précis et bien formé de manière déterministe. Même résultat pour l&amp;rsquo;utilisateur, mais sans le risque de JOINs hallucinés ou d&amp;rsquo;exposition accidentelle de données.&lt;/p&gt;
&lt;h2 id="sept-outils-pas-sept-cents"&gt;Sept outils, pas sept cents&lt;/h2&gt;
&lt;p&gt;SQL MCP Server expose exactement sept outils DML, quelle que soit la taille de la base de données :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;describe_entities&lt;/code&gt; — découvrir les entités et opérations disponibles&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create_record&lt;/code&gt; — insérer des lignes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;read_records&lt;/code&gt; — interroger des tables et vues&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update_record&lt;/code&gt; — modifier des lignes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete_record&lt;/code&gt; — supprimer des lignes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;execute_entity&lt;/code&gt; — exécuter des procédures stockées&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggregate_records&lt;/code&gt; — requêtes d&amp;rsquo;agrégation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C&amp;rsquo;est malin, car les fenêtres de contexte sont l&amp;rsquo;espace de réflexion de l&amp;rsquo;agent. Les inonder de centaines de définitions d&amp;rsquo;outils laisse moins de place au raisonnement. Sept outils fixes gardent l&amp;rsquo;agent concentré sur la &lt;em&gt;réflexion&lt;/em&gt; plutôt que la &lt;em&gt;navigation&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Chaque outil peut être activé ou désactivé individuellement :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;runtime&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;dml-tools&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;describe-entities&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;create-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;read-records&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;update-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;delete-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;execute-entity&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;aggregate-records&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="démarrage-en-trois-commandes"&gt;Démarrage en trois commandes&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab init &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --database-type mssql &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --connection-string &lt;span class="s2"&gt;&amp;#34;@env(&amp;#39;sql_connection_string&amp;#39;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add Customers &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --source dbo.Customers &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --permissions &lt;span class="s2"&gt;&amp;#34;anonymous:*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Voilà un SQL MCP Server en fonctionnement qui expose votre table Customers. La couche d&amp;rsquo;abstraction d&amp;rsquo;entités vous permet de créer des alias pour les noms et colonnes, de limiter les champs par rôle et de contrôler exactement ce que les agents voient — sans exposer les détails internes du schéma.&lt;/p&gt;
&lt;h2 id="laspect-sécurité-est-solide"&gt;L&amp;rsquo;aspect sécurité est solide&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est là que la maturité de Data API builder porte ses fruits :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RBAC à chaque couche&lt;/strong&gt; — chaque entité définit quels rôles peuvent lire, créer, mettre à jour ou supprimer, et quels champs sont visibles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intégration Azure Key Vault&lt;/strong&gt; — chaînes de connexion et secrets gérés de manière sécurisée&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microsoft Entra + OAuth personnalisé&lt;/strong&gt; — authentification de niveau production&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Security Policy&lt;/strong&gt; — les agents interagissent via un contrat contrôlé, pas du SQL brut&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&amp;rsquo;abstraction du schéma est particulièrement importante. Vos noms internes de tables et colonnes ne sont jamais exposés à l&amp;rsquo;agent. Vous définissez des entités, des alias et des descriptions qui ont du sens pour l&amp;rsquo;interaction IA — pas votre diagramme ERD de base de données.&lt;/p&gt;
&lt;h2 id="multi-bases-et-multi-protocoles"&gt;Multi-bases et multi-protocoles&lt;/h2&gt;
&lt;p&gt;SQL MCP Server supporte Microsoft SQL, PostgreSQL, Azure Cosmos DB et MySQL. Et comme c&amp;rsquo;est une fonctionnalité de DAB, vous obtenez des endpoints REST, GraphQL et MCP simultanément depuis la même configuration. Mêmes définitions d&amp;rsquo;entités, mêmes règles RBAC, même sécurité — sur les trois protocoles.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;auto-configuration dans DAB 2.0 peut même inspecter votre base de données et construire la configuration dynamiquement, si vous êtes à l&amp;rsquo;aise avec moins d&amp;rsquo;abstraction pour du prototypage rapide.&lt;/p&gt;
&lt;h2 id="mon-avis"&gt;Mon avis&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est ainsi que l&amp;rsquo;accès base de données d&amp;rsquo;entreprise pour les agents IA devrait fonctionner. Pas « hey LLM, écris-moi du SQL et YOLO sur la prod ». À la place : une couche d&amp;rsquo;entités bien définie, une génération de requêtes déterministe, RBAC à chaque étape, cache, monitoring et télémétrie. C&amp;rsquo;est ennuyeux de la meilleure façon possible.&lt;/p&gt;
&lt;p&gt;Pour les développeurs .NET, l&amp;rsquo;histoire d&amp;rsquo;intégration est propre — DAB est un outil .NET, le MCP Server tourne en conteneur, et il fonctionne avec Azure SQL, que la plupart d&amp;rsquo;entre nous utilisent déjà. Si vous construisez des agents IA qui ont besoin d&amp;rsquo;accéder aux données, commencez ici.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;SQL MCP Server est gratuit, open-source et tourne partout. C&amp;rsquo;est l&amp;rsquo;approche prescriptive de Microsoft pour donner aux agents IA un accès sécurisé aux bases de données. Consultez le &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;post complet&lt;/a&gt; et la &lt;a href="https://aka.ms/sql/mcp"&gt;documentation&lt;/a&gt; pour commencer.&lt;/p&gt;</content:encoded></item><item><title>azd permet maintenant d'exécuter et déboguer des agents IA localement — Ce qui a changé en mars 2026</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>L'Azure Developer CLI a publié sept versions en mars 2026. Les points forts : une boucle locale d'exécution et débogage pour les agents IA, l'intégration GitHub Copilot pour la configuration de projets, et le support des Container App Jobs.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sept versions en un mois. C&amp;rsquo;est ce que l&amp;rsquo;équipe Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) a livré en mars 2026, et la fonctionnalité phare est celle que j&amp;rsquo;attendais : &lt;strong&gt;une boucle locale d&amp;rsquo;exécution et débogage pour les agents IA&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;PC Chan &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;a publié le récapitulatif complet&lt;/a&gt;, et bien qu&amp;rsquo;il y ait beaucoup de contenu, laissez-moi filtrer ce qui compte vraiment pour les développeurs .NET qui construisent des apps alimentées par l&amp;rsquo;IA.&lt;/p&gt;
&lt;h2 id="exécuter-et-déboguer-des-agents-ia-sans-déployer"&gt;Exécuter et déboguer des agents IA sans déployer&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est le gros morceau. La nouvelle extension &lt;code&gt;azure.ai.agents&lt;/code&gt; ajoute des commandes qui offrent une vraie boucle interne pour les agents IA :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt; — démarre votre agent localement&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt; — lui envoie des messages (local ou déployé)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt; — affiche le statut du conteneur et sa santé&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt; — diffuse les logs du conteneur en temps réel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avant, tester un agent IA signifiait déployer sur Microsoft Foundry à chaque modification. Maintenant, vous pouvez itérer localement, tester le comportement de votre agent, et ne déployer que quand vous êtes prêt.&lt;/p&gt;
&lt;h2 id="github-copilot-configure-votre-projet-azd"&gt;GitHub Copilot configure votre projet azd&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt; offre maintenant une option &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Au lieu de répondre manuellement aux prompts, un agent Copilot génère la configuration pour vous. Quand une commande échoue, &lt;code&gt;azd&lt;/code&gt; propose un dépannage assisté par IA — tout sans quitter le terminal.&lt;/p&gt;
&lt;h2 id="container-app-jobs-et-améliorations-de-déploiement"&gt;Container App Jobs et améliorations de déploiement&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container App Jobs&lt;/strong&gt; : &lt;code&gt;azd&lt;/code&gt; déploie maintenant &lt;code&gt;Microsoft.App/jobs&lt;/code&gt; via la config existante &lt;code&gt;host: containerapp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timeouts configurables&lt;/strong&gt; : Nouveau flag &lt;code&gt;--timeout&lt;/code&gt; sur &lt;code&gt;azd deploy&lt;/code&gt; et champ &lt;code&gt;deployTimeout&lt;/code&gt; dans &lt;code&gt;azure.yaml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fallback de build distant&lt;/strong&gt; : En cas d&amp;rsquo;échec du build ACR, &lt;code&gt;azd&lt;/code&gt; retombe automatiquement sur Docker/Podman local.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validation preflight locale&lt;/strong&gt; : Les paramètres Bicep sont validés localement avant le déploiement.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="améliorations-dx"&gt;Améliorations DX&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Détection automatique pnpm/yarn&lt;/strong&gt; pour les projets JS/TS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Support pyproject.toml&lt;/strong&gt; pour le packaging Python&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Répertoires de templates locaux&lt;/strong&gt; — &lt;code&gt;azd init --template&lt;/code&gt; accepte les chemins du système de fichiers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Meilleurs messages d&amp;rsquo;erreur&lt;/strong&gt; en mode &lt;code&gt;--no-prompt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Variables d&amp;rsquo;environnement de build&lt;/strong&gt; injectées dans tous les sous-processus de build (.NET, Node.js, Java, Python)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;La boucle locale de débogage d&amp;rsquo;agents IA est la star de cette version, mais l&amp;rsquo;accumulation d&amp;rsquo;améliorations de déploiement et de polish DX rend &lt;code&gt;azd&lt;/code&gt; plus mature que jamais. Si vous déployez des apps .NET sur Azure — surtout des agents IA — cette mise à jour vaut le détour.&lt;/p&gt;
&lt;p&gt;Consultez les &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;notes de version complètes&lt;/a&gt; pour tous les détails.&lt;/p&gt;</content:encoded></item><item><title>KubeCon Europe 2026 : Ce que les développeurs .NET devraient vraiment retenir</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</guid><description>Microsoft a publié une avalanche d'annonces Kubernetes à KubeCon Europe 2026. Voici la version filtrée — uniquement les mises à jour AKS et cloud-native qui comptent si vous livrez des apps .NET.</description><content:encoded>&lt;p&gt;&lt;em&gt;Cet article a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Vous connaissez cette sensation quand un énorme post d&amp;rsquo;annonces tombe et que vous scrollez en pensant « cool, mais concrètement ça change quoi pour moi » ? C&amp;rsquo;est moi à chaque saison KubeCon.&lt;/p&gt;
&lt;p&gt;Microsoft vient de publier son &lt;a href="https://opensource.microsoft.com/blog/2026/03/24/whats-new-with-microsoft-in-open-source-and-kubernetes-at-kubecon-cloudnativecon-europe-2026/"&gt;récapitulatif complet de KubeCon Europe 2026&lt;/a&gt; — écrit par Brendan Burns en personne — et honnêtement ? Il y a du vrai contenu ici. Pas juste des cases à cocher, mais des améliorations opérationnelles qui changent votre façon de gérer les choses en production.&lt;/p&gt;
&lt;p&gt;Laissez-moi décortiquer ce qui compte vraiment pour nous développeurs .NET.&lt;/p&gt;
&lt;h2 id="mtls-sans-la-taxe-du-service-mesh"&gt;mTLS sans la taxe du service mesh&lt;/h2&gt;
&lt;p&gt;Voici le truc avec les service meshes : tout le monde veut les garanties de sécurité, personne ne veut la charge opérationnelle. AKS comble enfin cet écart.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/application-network"&gt;Azure Kubernetes Application Network&lt;/a&gt; vous donne le TLS mutuel, l&amp;rsquo;autorisation consciente de l&amp;rsquo;application et la télémétrie du trafic — sans déployer un mesh complet avec sidecars. Combiné avec &lt;a href="https://aka.ms/acns/cilium-mtls"&gt;Cilium mTLS dans Advanced Container Networking Services&lt;/a&gt;, vous obtenez une communication chiffrée pod-à-pod utilisant des certificats X.509 et SPIRE pour la gestion des identités.&lt;/p&gt;
&lt;p&gt;Ce que ça signifie en pratique : vos APIs ASP.NET Core qui communiquent avec des workers en arrière-plan, vos services gRPC qui s&amp;rsquo;appellent mutuellement — tout chiffré et vérifié au niveau réseau, sans aucune modification de code. C&amp;rsquo;est énorme.&lt;/p&gt;
&lt;p&gt;Pour les équipes qui migrent depuis &lt;code&gt;ingress-nginx&lt;/code&gt;, il y a aussi &lt;a href="https://aka.ms/aks/app-routing/gateway-api"&gt;Application Routing avec Meshless Istio&lt;/a&gt; avec support complet de Kubernetes Gateway API. Pas de sidecars. Basé sur les standards. Et ils ont livré des outils &lt;code&gt;ingress2gateway&lt;/code&gt; pour une migration incrémentale.&lt;/p&gt;
&lt;h2 id="observabilité-gpu-qui-nest-pas-une-pensée-après-coup"&gt;Observabilité GPU qui n&amp;rsquo;est pas une pensée après coup&lt;/h2&gt;
&lt;p&gt;Si vous exécutez de l&amp;rsquo;inférence IA aux côtés de vos services .NET (et soyons honnêtes, qui ne commence pas ?), vous avez probablement rencontré l&amp;rsquo;angle mort du monitoring GPU. Vous aviez de super dashboards CPU/mémoire et ensuite&amp;hellip; rien pour les GPU sans configuration manuelle d&amp;rsquo;exporteurs.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/managed-gpu-metrics"&gt;AKS expose maintenant les métriques GPU nativement&lt;/a&gt; dans Prometheus et Grafana managés. Même stack, mêmes dashboards, même pipeline d&amp;rsquo;alertes. Pas d&amp;rsquo;exporteurs custom, pas d&amp;rsquo;agents tiers.&lt;/p&gt;
&lt;p&gt;Côté réseau, ils ont ajouté de la visibilité par flux pour le trafic HTTP, gRPC et Kafka avec une &lt;a href="https://learn.microsoft.com/en-us/azure/aks/container-network-observability-logs"&gt;expérience Azure Monitor en un clic&lt;/a&gt;. IPs, ports, workloads, direction des flux, décisions de policies — tout dans des dashboards intégrés.&lt;/p&gt;
&lt;p&gt;Et voici celle qui m&amp;rsquo;a fait regarder deux fois : &lt;a href="https://learn.microsoft.com/en-us/azure/aks/advanced-container-networking-services-overview"&gt;agentic container networking&lt;/a&gt; ajoute une interface web où vous pouvez poser des questions en langage naturel sur l&amp;rsquo;état réseau de votre cluster. « Pourquoi le pod X n&amp;rsquo;atteint-il pas le service Y ? » → diagnostics en lecture seule depuis la télémétrie en direct. C&amp;rsquo;est vraiment utile à 2h du matin.&lt;/p&gt;
&lt;h2 id="networking-cross-cluster-sans-avoir-besoin-dun-doctorat"&gt;Networking cross-cluster sans avoir besoin d&amp;rsquo;un doctorat&lt;/h2&gt;
&lt;p&gt;Le multi-cluster Kubernetes a toujours été une expérience « apportez votre propre colle réseau ». Azure Kubernetes Fleet Manager propose maintenant du &lt;a href="https://aka.ms/kubernetes-fleet/networking/cross-cluster"&gt;networking cross-cluster&lt;/a&gt; via un cluster mesh Cilium managé :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connectivité unifiée entre clusters AKS&lt;/li&gt;
&lt;li&gt;Registre global de services pour la découverte cross-cluster&lt;/li&gt;
&lt;li&gt;Configuration gérée centralement, pas répétée par cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous exécutez des microservices .NET sur plusieurs régions pour la résilience ou la conformité, ça remplace beaucoup de colle custom fragile. Le Service A en West Europe peut découvrir et appeler le Service B en East US à travers le mesh, avec des politiques de routage et de sécurité cohérentes.&lt;/p&gt;
&lt;h2 id="des-mises-à-jour-qui-ne-demandent-pas-du-courage"&gt;Des mises à jour qui ne demandent pas du courage&lt;/h2&gt;
&lt;p&gt;Soyons honnêtes — les mises à jour Kubernetes en production sont stressantes. « Mettre à jour et espérer » a été la stratégie de fait pour trop d&amp;rsquo;équipes, et c&amp;rsquo;est la raison principale pour laquelle les clusters restent en retard sur les versions.&lt;/p&gt;
&lt;p&gt;Deux nouvelles capacités changent la donne :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les blue-green agent pool upgrades&lt;/strong&gt; créent un pool de nœuds parallèle avec la nouvelle configuration. Validez le comportement, déplacez le trafic progressivement et gardez un chemin de rollback propre. Plus de mutations in-place sur les nœuds de production.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le rollback d&amp;rsquo;agent pool&lt;/strong&gt; permet de revenir à la version Kubernetes et l&amp;rsquo;image de nœud précédentes d&amp;rsquo;un pool après qu&amp;rsquo;une mise à jour se passe mal — sans reconstruire le cluster.&lt;/p&gt;
&lt;p&gt;Ensemble, ils donnent enfin aux opérateurs un vrai contrôle sur le cycle de vie des mises à jour. Pour les équipes .NET, c&amp;rsquo;est important car la vélocité de la plateforme contrôle directement la vitesse à laquelle vous pouvez adopter de nouveaux runtimes, patchs de sécurité et capacités réseau.&lt;/p&gt;
&lt;h2 id="les-workloads-ia-deviennent-des-citoyens-de-première-classe-kubernetes"&gt;Les workloads IA deviennent des citoyens de première classe Kubernetes&lt;/h2&gt;
&lt;p&gt;Le travail upstream en open-source est tout aussi important. Dynamic Resource Allocation (DRA) vient de passer en GA dans Kubernetes 1.36, faisant du scheduling GPU une vraie fonctionnalité de première classe plutôt qu&amp;rsquo;un contournement.&lt;/p&gt;
&lt;p&gt;Quelques projets à surveiller :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Projet&lt;/th&gt;
&lt;th&gt;Ce qu&amp;rsquo;il fait&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/kaito-project/kubeairunway"&gt;AI Runway&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;API Kubernetes commune pour l&amp;rsquo;inférence — déployez des modèles sans connaître K8s, avec découverte HuggingFace et estimations de coûts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cncf.io/blog/2026/01/07/holmesgpt-agentic-troubleshooting-built-for-the-cloud-native-era/"&gt;HolmesGPT&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Dépannage agentique pour le cloud-native — maintenant un projet CNCF Sandbox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/project-dalec/dalec"&gt;Dalec&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Builds déclaratifs d&amp;rsquo;images de conteneur avec génération de SBOM — moins de CVE à l&amp;rsquo;étape de build&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La direction est claire : votre API .NET, votre couche d&amp;rsquo;orchestration Semantic Kernel et vos workloads d&amp;rsquo;inférence devraient tous tourner sur un modèle de plateforme cohérent. On y arrive.&lt;/p&gt;
&lt;h2 id="par-où-commencer-cette-semaine"&gt;Par où commencer cette semaine&lt;/h2&gt;
&lt;p&gt;Si vous évaluez ces changements pour votre équipe, voici ma liste de priorités honnête :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;L&amp;rsquo;observabilité d&amp;rsquo;abord&lt;/strong&gt; — activez les métriques GPU et les logs de flux réseau dans un cluster non-prod. Voyez ce que vous avez manqué.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testez les blue-green upgrades&lt;/strong&gt; — essayez le workflow de rollback avant votre prochaine mise à jour de cluster en production. Construisez la confiance dans le processus.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pilotez le networking identity-aware&lt;/strong&gt; — choisissez un chemin de service interne et activez mTLS avec Cilium. Mesurez l&amp;rsquo;overhead (spoiler : c&amp;rsquo;est minimal).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Évaluez Fleet Manager&lt;/strong&gt; — si vous gérez plus de deux clusters, le networking cross-cluster se rentabilise tout seul en réduisant la colle custom.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Petites expériences, feedback rapide. C&amp;rsquo;est toujours le bon choix.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;Les annonces KubeCon peuvent être accablantes, mais cette fournée fait vraiment bouger les choses pour les équipes .NET sur AKS. Meilleure sécurité réseau sans overhead de mesh, vraie observabilité GPU, mises à jour plus sûres et des fondations d&amp;rsquo;infrastructure IA plus solides.&lt;/p&gt;
&lt;p&gt;Si vous êtes déjà sur AKS, c&amp;rsquo;est un excellent moment pour renforcer votre baseline opérationnel. Et si vous prévoyez de migrer des workloads .NET vers Kubernetes — la plateforme vient de devenir nettement plus prête pour la production.&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server, Copilot dans SSMS et un Database Hub avec des agents IA : Ce qui compte vraiment de SQLCon 2026</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</guid><description>Microsoft a dévoilé une pile d'annonces sur les bases de données à SQLCon 2026. Voici ce qui compte vraiment si vous construisez des apps alimentées par l'IA sur Azure SQL.</description><content:encoded>&lt;p&gt;Microsoft vient de lancer &lt;a href="https://www.microsoft.com/en-us/sql-server/blog/2026/03/18/advancing-agentic-ai-with-microsoft-databases-across-a-unified-data-estate/"&gt;SQLCon 2026 en parallèle de FabCon à Atlanta&lt;/a&gt;, et il y a beaucoup à décortiquer. L&amp;rsquo;annonce originale couvre tout, des plans d&amp;rsquo;économies aux fonctionnalités de conformité enterprise. Je vais passer les slides sur les tarifs enterprise et me concentrer sur les éléments qui comptent si vous êtes un développeur qui construit des choses avec Azure SQL et l&amp;rsquo;IA.&lt;/p&gt;
&lt;h2 id="sql-mcp-server-est-en-public-preview"&gt;SQL MCP Server est en public preview&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est le titre principal pour moi. Azure SQL Database Hyperscale dispose maintenant d&amp;rsquo;un &lt;strong&gt;SQL MCP Server&lt;/strong&gt; en public preview qui vous permet de connecter vos données SQL de manière sécurisée à des agents IA et des Copilots en utilisant le &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si vous avez suivi la vague MCP — et honnêtement, c&amp;rsquo;est difficile de la rater en ce moment — c&amp;rsquo;est une grosse nouvelle. Au lieu de construire des pipelines de données personnalisés pour alimenter vos agents IA en contexte depuis votre base de données, vous obtenez un protocole standardisé pour exposer les données SQL directement. Vos agents peuvent interroger, raisonner et agir sur des informations de base de données en temps réel.&lt;/p&gt;
&lt;p&gt;Pour ceux d&amp;rsquo;entre nous qui construisent des agents IA avec Semantic Kernel ou le Microsoft Agent Framework, ça ouvre un chemin d&amp;rsquo;intégration propre. Votre agent a besoin de vérifier l&amp;rsquo;inventaire ? Chercher un enregistrement client ? Valider une commande ? MCP lui donne une façon structurée de le faire sans que vous écriviez du code de récupération de données sur mesure pour chaque scénario.&lt;/p&gt;
&lt;h2 id="github-copilot-dans-ssms-22-est-maintenant-ga"&gt;GitHub Copilot dans SSMS 22 est maintenant GA&lt;/h2&gt;
&lt;p&gt;Si vous passez du temps dans SQL Server Management Studio — et soyons honnêtes, la plupart d&amp;rsquo;entre nous le font encore — GitHub Copilot est maintenant disponible de manière générale dans SSMS 22. La même expérience Copilot que vous utilisez déjà dans VS Code et Visual Studio, mais pour T-SQL.&lt;/p&gt;
&lt;p&gt;La valeur pratique est simple : une assistance par chat pour écrire des requêtes, refactoriser des procédures stockées, résoudre des problèmes de performance et gérer des tâches d&amp;rsquo;administration. Rien de révolutionnaire dans le concept, mais l&amp;rsquo;avoir directement dans SSMS signifie que vous n&amp;rsquo;avez pas besoin de changer de contexte vers un autre éditeur juste pour obtenir de l&amp;rsquo;aide IA sur votre travail de base de données.&lt;/p&gt;
&lt;h2 id="les-index-vectoriels-ont-reçu-une-sérieuse-mise-à-jour"&gt;Les index vectoriels ont reçu une sérieuse mise à jour&lt;/h2&gt;
&lt;p&gt;Azure SQL Database dispose maintenant d&amp;rsquo;index vectoriels plus rapides et plus performants avec un support complet pour l&amp;rsquo;insertion, la mise à jour et la suppression. Ça veut dire que vos données vectorielles restent à jour en temps réel — pas besoin de réindexation par lots.&lt;/p&gt;
&lt;p&gt;Voici les nouveautés :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quantification&lt;/strong&gt; pour des tailles d&amp;rsquo;index plus petites sans trop perdre en précision&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filtrage itératif&lt;/strong&gt; pour des résultats plus précis&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intégration plus étroite avec l&amp;rsquo;optimiseur de requêtes&lt;/strong&gt; pour des performances prévisibles&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous faites du Retrieval-Augmented Generation (RAG) avec Azure SQL comme vector store, ces améliorations sont directement utiles. Vous pouvez garder vos vecteurs à côté de vos données relationnelles dans la même base de données, ce qui simplifie considérablement votre architecture par rapport à l&amp;rsquo;exécution d&amp;rsquo;une base de données vectorielle séparée.&lt;/p&gt;
&lt;p&gt;Les mêmes améliorations vectorielles sont également disponibles dans SQL Database in Fabric, puisque les deux tournent sur le même moteur SQL en dessous.&lt;/p&gt;
&lt;h2 id="database-hub-dans-fabric--gestion-agentique"&gt;Database Hub dans Fabric : gestion agentique&lt;/h2&gt;
&lt;p&gt;Celui-ci est plus tourné vers l&amp;rsquo;avenir, mais il est intéressant. Microsoft a annoncé le &lt;strong&gt;Database Hub dans Microsoft Fabric&lt;/strong&gt; (accès anticipé), qui vous donne une vue unifiée sur Azure SQL, Cosmos DB, PostgreSQL, MySQL et SQL Server via Arc.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;angle intéressant n&amp;rsquo;est pas juste la vue unifiée — c&amp;rsquo;est l&amp;rsquo;approche agentique de la gestion. Des agents IA surveillent en continu votre parc de bases de données, font remonter ce qui a changé, expliquent pourquoi c&amp;rsquo;est important et suggèrent quoi faire ensuite. C&amp;rsquo;est un modèle human-in-the-loop où l&amp;rsquo;agent fait le gros du travail et vous prenez les décisions.&lt;/p&gt;
&lt;p&gt;Pour les équipes qui gèrent plus qu&amp;rsquo;une poignée de bases de données, ça pourrait vraiment réduire le bruit opérationnel. Au lieu de sauter entre les portails et de vérifier manuellement les métriques, l&amp;rsquo;agent vous apporte le signal.&lt;/p&gt;
&lt;h2 id="ce-que-ça-signifie-pour-les-développeurs-net"&gt;Ce que ça signifie pour les développeurs .NET&lt;/h2&gt;
&lt;p&gt;Le fil conducteur de toutes ces annonces est clair : Microsoft intègre des agents IA à chaque couche de la pile de bases de données. Pas comme un gadget, mais comme une couche d&amp;rsquo;outillage pratique.&lt;/p&gt;
&lt;p&gt;Si vous construisez des apps .NET adossées à Azure SQL, voici ce que je ferais concrètement :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Essayez le SQL MCP Server&lt;/strong&gt; si vous construisez des agents IA. C&amp;rsquo;est la façon la plus propre de donner à vos agents un accès à la base de données sans plomberie personnalisée.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Activez Copilot dans SSMS&lt;/strong&gt; si ce n&amp;rsquo;est pas déjà fait — un gain de productivité gratuit pour le travail SQL quotidien.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Regardez les index vectoriels&lt;/strong&gt; si vous faites du RAG et que vous utilisez actuellement un vector store séparé. Consolider sur Azure SQL signifie un service de moins à gérer.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;annonce complète contient plus — plans d&amp;rsquo;économies, assistants de migration, fonctionnalités de conformité — mais l&amp;rsquo;histoire pour les développeurs se trouve dans le MCP Server, les améliorations vectorielles et la couche de gestion agentique. Ce sont les éléments qui changent la façon dont vous construisez, pas juste la façon dont vous budgétisez.&lt;/p&gt;
&lt;p&gt;Consultez &lt;a href="https://www.microsoft.com/en-us/sql-server/blog/2026/03/18/advancing-agentic-ai-with-microsoft-databases-across-a-unified-data-estate/"&gt;l&amp;rsquo;annonce complète de Shireesh Thota&lt;/a&gt; pour avoir le tableau complet, et &lt;a href="https://aka.ms/database-hub"&gt;inscrivez-vous pour l&amp;rsquo;accès anticipé au Database Hub&lt;/a&gt; si vous voulez essayer la nouvelle expérience de gestion.&lt;/p&gt;</content:encoded></item><item><title>Du laptop à la production : déployer des agents IA sur Microsoft Foundry en deux commandes</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</guid><description>L'Azure Developer CLI dispose maintenant de commandes 'azd ai agent' qui amènent votre agent IA du développement local à un endpoint Foundry en production en quelques minutes. Voici le workflow complet.</description><content:encoded>&lt;p&gt;Vous connaissez ce fossé entre &amp;ldquo;ça marche sur ma machine&amp;rdquo; et &amp;ldquo;c&amp;rsquo;est déployé et sert du trafic&amp;rdquo; ? Pour les agents IA, ce fossé a été douloureusement large. Il faut provisionner des ressources, déployer des modèles, configurer l&amp;rsquo;identité, mettre en place le monitoring — et tout ça avant que quiconque puisse réellement appeler votre agent.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;Azure Developer CLI vient d&amp;rsquo;en faire une &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;affaire de deux commandes&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="le-nouveau-workflow-azd-ai-agent"&gt;Le nouveau workflow &lt;code&gt;azd ai agent&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Laissez-moi vous montrer ce que ça donne concrètement. Vous avez un projet d&amp;rsquo;agent IA — disons un agent concierge d&amp;rsquo;hôtel. Il fonctionne en local. Vous voulez qu&amp;rsquo;il tourne sur Microsoft Foundry.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;C&amp;rsquo;est tout. Deux commandes. &lt;code&gt;azd ai agent init&lt;/code&gt; génère l&amp;rsquo;infrastructure-as-code dans votre repo, et &lt;code&gt;azd up&lt;/code&gt; provisionne tout sur Azure et publie votre agent. Vous obtenez un lien direct vers votre agent dans le portail Foundry.&lt;/p&gt;
&lt;h2 id="ce-qui-se-passe-sous-le-capot"&gt;Ce qui se passe sous le capot&lt;/h2&gt;
&lt;p&gt;La commande &lt;code&gt;init&lt;/code&gt; génère de vrais templates Bicep inspectables dans votre repo :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Une &lt;strong&gt;Foundry Resource&lt;/strong&gt; (conteneur de niveau supérieur)&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;Foundry Project&lt;/strong&gt; (où vit votre agent)&lt;/li&gt;
&lt;li&gt;Configuration du &lt;strong&gt;déploiement de modèle&lt;/strong&gt; (GPT-4o, etc.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identité managée&lt;/strong&gt; avec les attributions de rôles RBAC appropriées&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azure.yaml&lt;/code&gt; pour la carte des services&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent.yaml&lt;/code&gt; avec les métadonnées de l&amp;rsquo;agent et les variables d&amp;rsquo;environnement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le point clé : tout cela vous appartient. C&amp;rsquo;est du Bicep versionné dans votre repo. Vous pouvez l&amp;rsquo;inspecter, le personnaliser et le commiter aux côtés du code de votre agent. Pas de boîtes noires magiques.&lt;/p&gt;
&lt;h2 id="la-boucle-interne-de-développement"&gt;La boucle interne de développement&lt;/h2&gt;
&lt;p&gt;Ce que j&amp;rsquo;aime vraiment, c&amp;rsquo;est l&amp;rsquo;expérience de développement local. Quand vous itérez sur la logique de l&amp;rsquo;agent, vous ne voulez pas redéployer à chaque modification d&amp;rsquo;un prompt :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cela démarre votre agent localement. Combinez-le avec &lt;code&gt;azd ai agent invoke&lt;/code&gt; pour envoyer des prompts de test, et vous avez une boucle de feedback rapide. Modifier le code, redémarrer, invoquer, répéter.&lt;/p&gt;
&lt;p&gt;La commande &lt;code&gt;invoke&lt;/code&gt; est intelligente pour le routage aussi — quand un agent local tourne, elle le cible automatiquement. Sinon, elle va vers l&amp;rsquo;endpoint distant.&lt;/p&gt;
&lt;h2 id="monitoring-en-temps-réel"&gt;Monitoring en temps réel&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est la fonctionnalité qui m&amp;rsquo;a convaincu. Une fois votre agent déployé :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent monitor --follow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Chaque requête et réponse transitant par votre agent est streamée vers votre terminal en temps réel. Pour déboguer des problèmes en production, c&amp;rsquo;est inestimable. Plus besoin de fouiller dans les Log Analytics, plus d&amp;rsquo;attente pour l&amp;rsquo;agrégation des métriques — vous voyez ce qui se passe maintenant.&lt;/p&gt;
&lt;h2 id="lensemble-complet-des-commandes"&gt;L&amp;rsquo;ensemble complet des commandes&lt;/h2&gt;
&lt;p&gt;Voici la référence rapide :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Commande&lt;/th&gt;
&lt;th&gt;Ce qu&amp;rsquo;elle fait&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scaffold d&amp;rsquo;un projet agent Foundry avec IaC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd up&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Provisionne les ressources Azure et déploie l&amp;rsquo;agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Envoie des prompts à l&amp;rsquo;agent distant ou local&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exécute l&amp;rsquo;agent localement pour le développement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Streame les logs en temps réel de l&amp;rsquo;agent publié&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vérifie la santé et le statut de l&amp;rsquo;agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd down&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Nettoie toutes les ressources Azure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="pourquoi-cest-important-pour-les-développeurs-net"&gt;Pourquoi c&amp;rsquo;est important pour les développeurs .NET&lt;/h2&gt;
&lt;p&gt;Même si l&amp;rsquo;exemple de l&amp;rsquo;annonce est basé sur Python, l&amp;rsquo;histoire de l&amp;rsquo;infrastructure est agnostique au langage. Votre agent .NET bénéficie du même scaffolding Bicep, de la même configuration d&amp;rsquo;identité managée, du même pipeline de monitoring. Et si vous utilisez déjà &lt;code&gt;azd&lt;/code&gt; pour vos apps .NET Aspire ou vos déploiements Azure, ça s&amp;rsquo;intègre directement dans votre workflow existant.&lt;/p&gt;
&lt;p&gt;Le fossé de déploiement pour les agents IA a été l&amp;rsquo;un des plus grands points de friction dans l&amp;rsquo;écosystème. Passer d&amp;rsquo;un prototype fonctionnel à un endpoint de production avec identité, réseau et monitoring appropriés ne devrait pas nécessiter une semaine de travail DevOps. Maintenant il faut deux commandes et quelques minutes.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd ai agent&lt;/code&gt; est disponible maintenant. Si vous avez repoussé le déploiement de vos agents IA parce que la mise en place de l&amp;rsquo;infrastructure semblait trop de travail, essayez. Consultez le &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;walkthrough complet&lt;/a&gt; pour le guide étape par étape incluant l&amp;rsquo;intégration d&amp;rsquo;une app de chat frontend.&lt;/p&gt;</content:encoded></item><item><title>Foundry Agent Service est GA : Ce qui compte vraiment pour les développeurs d'agents .NET</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</guid><description>Le Foundry Agent Service de Microsoft vient de passer en GA avec le réseau privé, Voice Live, les évaluations de production et un runtime multi-modèle ouvert. Voici ce que vous devez savoir.</description><content:encoded>&lt;p&gt;Soyons honnêtes — construire un prototype d&amp;rsquo;agent IA est la partie facile. La partie difficile, c&amp;rsquo;est tout ce qui suit : le mettre en production avec un isolement réseau approprié, exécuter des évaluations qui signifient réellement quelque chose, gérer les exigences de conformité, et ne rien casser à 2h du matin.&lt;/p&gt;
&lt;p&gt;Le &lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;Foundry Agent Service vient de passer en GA&lt;/a&gt;, et cette version est focalisée comme un laser sur ce fossé du &amp;ldquo;tout ce qui suit&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="construit-sur-la-responses-api"&gt;Construit sur la Responses API&lt;/h2&gt;
&lt;p&gt;Le titre principal : le Foundry Agent Service de nouvelle génération est construit sur l&amp;rsquo;OpenAI Responses API. Si vous construisez déjà avec ce protocole, migrer vers Foundry nécessite des changements de code minimaux. Ce que vous gagnez : sécurité entreprise, réseau privé, RBAC Entra, traçabilité complète et évaluation — par-dessus votre logique d&amp;rsquo;agent existante.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;architecture est intentionnellement ouverte. Vous n&amp;rsquo;êtes pas verrouillé à un fournisseur de modèle ou un framework d&amp;rsquo;orchestration. Utilisez DeepSeek pour la planification, OpenAI pour la génération, LangGraph pour l&amp;rsquo;orchestration — le runtime gère la couche de cohérence.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PromptAgentDefinition&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AZURE_AI_PROJECT_ENDPOINT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_openai_client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-enterprise-agent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;definition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PromptAgentDefinition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AZURE_AI_MODEL_DEPLOYMENT_NAME&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;conversation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conversations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;What are best practices for building AI agents?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Si vous venez du package &lt;code&gt;azure-ai-agents&lt;/code&gt;, les agents sont maintenant des opérations de première classe sur &lt;code&gt;AIProjectClient&lt;/code&gt; dans &lt;code&gt;azure-ai-projects&lt;/code&gt;. Supprimez la dépendance standalone et utilisez &lt;code&gt;get_openai_client()&lt;/code&gt; pour piloter les réponses.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="réseau-privé--le-bloqueur-entreprise-supprimé"&gt;Réseau privé : le bloqueur entreprise supprimé&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est la fonctionnalité qui débloque l&amp;rsquo;adoption enterprise. Foundry supporte maintenant le réseau privé complet de bout en bout avec BYO VNet :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aucun egress public&lt;/strong&gt; — le trafic de l&amp;rsquo;agent ne touche jamais l&amp;rsquo;internet public&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Injection de conteneurs/sous-réseaux&lt;/strong&gt; dans votre réseau pour la communication locale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connectivité des outils incluse&lt;/strong&gt; — serveurs MCP, Azure AI Search, agents de données Fabric fonctionnent tous sur des chemins privés&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce dernier point est critique. Ce ne sont pas seulement les appels d&amp;rsquo;inférence qui restent privés — chaque invocation d&amp;rsquo;outil et appel de récupération reste aussi à l&amp;rsquo;intérieur de votre périmètre réseau. Pour les équipes opérant sous des politiques de classification de données qui interdisent le routage externe, c&amp;rsquo;est ce qui manquait.&lt;/p&gt;
&lt;h2 id="authentification-mcp-bien-faite"&gt;Authentification MCP bien faite&lt;/h2&gt;
&lt;p&gt;Les connexions aux serveurs MCP supportent maintenant le spectre complet des patterns d&amp;rsquo;authentification :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Méthode d&amp;rsquo;auth&lt;/th&gt;
&lt;th&gt;Quand l&amp;rsquo;utiliser&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Basée sur clé&lt;/td&gt;
&lt;td&gt;Accès partagé simple pour les outils internes à l&amp;rsquo;organisation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Agent Identity&lt;/td&gt;
&lt;td&gt;Service à service ; l&amp;rsquo;agent s&amp;rsquo;authentifie comme lui-même&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Managed Identity&lt;/td&gt;
&lt;td&gt;Isolation par projet ; pas de gestion de credentials&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAuth Identity Passthrough&lt;/td&gt;
&lt;td&gt;Accès délégué par utilisateur ; l&amp;rsquo;agent agit au nom des utilisateurs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;OAuth Identity Passthrough est le plus intéressant. Quand les utilisateurs doivent donner à un agent l&amp;rsquo;accès à leurs données personnelles — leur OneDrive, leur organisation Salesforce, une API SaaS scopée par utilisateur — l&amp;rsquo;agent agit en leur nom avec des flux OAuth standard. Pas d&amp;rsquo;identité système partagée prétendant être tout le monde.&lt;/p&gt;
&lt;h2 id="voice-live--voix-à-voix-sans-la-plomberie"&gt;Voice Live : voix à voix sans la plomberie&lt;/h2&gt;
&lt;p&gt;Ajouter la voix à un agent signifiait auparavant assembler STT, LLM et TTS — trois services, trois sauts de latence, trois surfaces de facturation, le tout synchronisé à la main. &lt;strong&gt;Voice Live&lt;/strong&gt; condense tout ça en une seule API managée avec :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Détection sémantique de l&amp;rsquo;activité vocale et de fin de tour (comprend le sens, pas juste le silence)&lt;/li&gt;
&lt;li&gt;Suppression du bruit et annulation d&amp;rsquo;écho côté serveur&lt;/li&gt;
&lt;li&gt;Support du barge-in (les utilisateurs peuvent interrompre en pleine réponse)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les interactions vocales passent par le même runtime d&amp;rsquo;agent que le texte. Mêmes évaluateurs, mêmes traces, même visibilité des coûts. Pour le support client, le service terrain ou les scénarios d&amp;rsquo;accessibilité, ça remplace ce qui nécessitait auparavant un pipeline audio personnalisé.&lt;/p&gt;
&lt;h2 id="évaluations--de-la-case-à-cocher-au-monitoring-continu"&gt;Évaluations : de la case à cocher au monitoring continu&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est là que Foundry devient sérieux sur la qualité en production. Le système d&amp;rsquo;évaluation a maintenant trois couches :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Évaluateurs prêts à l&amp;rsquo;emploi&lt;/strong&gt; — cohérence, pertinence, fondement, qualité de récupération, sécurité. Connectez à un dataset ou au trafic en direct et obtenez des scores.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Évaluateurs personnalisés&lt;/strong&gt; — encodez votre propre logique métier, standards de ton et règles de conformité spécifiques au domaine.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Évaluation continue&lt;/strong&gt; — Foundry échantillonne le trafic de production en direct, exécute votre suite d&amp;rsquo;évaluateurs et affiche les résultats dans des tableaux de bord. Configurez des alertes Azure Monitor pour quand le fondement baisse ou que les seuils de sécurité sont dépassés.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tout est publié dans Azure Monitor Application Insights. Qualité de l&amp;rsquo;agent, santé de l&amp;rsquo;infrastructure, coûts et télémétrie applicative — tout au même endroit.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;eval_object&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;evals&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Agent Quality Evaluation&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;data_source_config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DataSourceConfigCustom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;custom&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;item_schema&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;object&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;properties&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;required&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;include_sample_schema&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testing_criteria&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;azure_ai_evaluator&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fluency&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;evaluator_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;builtin.fluency&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;initialization_parameters&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;deployment_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AZURE_AI_MODEL_DEPLOYMENT_NAME&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;data_mapping&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{item.query}}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;response&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{sample.output_text}}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="six-nouvelles-régions-pour-les-agents-hébergés"&gt;Six nouvelles régions pour les agents hébergés&lt;/h2&gt;
&lt;p&gt;Les agents hébergés sont maintenant disponibles dans East US, North Central US, Sweden Central, Southeast Asia, Japan East et plus. C&amp;rsquo;est important pour les exigences de résidence des données et pour comprimer la latence quand votre agent tourne près de ses sources de données.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important-pour-les-développeurs-net"&gt;Pourquoi c&amp;rsquo;est important pour les développeurs .NET&lt;/h2&gt;
&lt;p&gt;Même si les exemples de code dans l&amp;rsquo;annonce GA sont Python-first, l&amp;rsquo;infrastructure sous-jacente est agnostique au langage — et le SDK .NET pour &lt;code&gt;azure-ai-projects&lt;/code&gt; suit les mêmes patterns. La Responses API, le framework d&amp;rsquo;évaluation, le réseau privé, l&amp;rsquo;auth MCP — tout cela est disponible depuis .NET.&lt;/p&gt;
&lt;p&gt;Si vous attendiez que les agents IA passent de &amp;ldquo;démo cool&amp;rdquo; à &amp;ldquo;je peux réellement livrer ça au travail&amp;rdquo;, cette version GA est le signal. Réseau privé, authentification appropriée, évaluation continue et monitoring de production sont les pièces qui manquaient.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;Foundry Agent Service est disponible maintenant. Installez le SDK, ouvrez &lt;a href="https://ai.azure.com"&gt;le portail&lt;/a&gt; et commencez à construire. Le &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;guide de démarrage rapide&lt;/a&gt; vous amène de zéro à un agent en fonctionnement en quelques minutes.&lt;/p&gt;
&lt;p&gt;Pour le deep-dive technique complet avec tous les exemples de code, consultez l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;annonce GA&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Le serveur MCP Azure DevOps débarque dans Microsoft Foundry : ce que ça signifie pour vos agents IA</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</guid><description>Le serveur MCP Azure DevOps est maintenant disponible dans Microsoft Foundry. Connectez vos agents IA directement aux workflows DevOps — work items, repos, pipelines — en quelques clics.</description><content:encoded>&lt;p&gt;MCP (Model Context Protocol) a le vent en poupe. Si vous suivez l&amp;rsquo;écosystème des agents IA, vous avez probablement remarqué que les serveurs MCP apparaissent partout — donnant aux agents la capacité d&amp;rsquo;interagir avec des outils et services externes via un protocole standardisé.&lt;/p&gt;
&lt;p&gt;Maintenant le &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;serveur MCP Azure DevOps est disponible dans Microsoft Foundry&lt;/a&gt;, et c&amp;rsquo;est une de ces intégrations qui fait réfléchir aux possibilités pratiques.&lt;/p&gt;
&lt;h2 id="ce-qui-se-passe-réellement-ici"&gt;Ce qui se passe réellement ici&lt;/h2&gt;
&lt;p&gt;Microsoft a déjà publié le serveur MCP Azure DevOps en &lt;a href="https://devblogs.microsoft.com/devops/azure-devops-remote-mcp-server-public-preview"&gt;public preview&lt;/a&gt; — c&amp;rsquo;est le serveur MCP lui-même. La nouveauté, c&amp;rsquo;est l&amp;rsquo;intégration Foundry. Vous pouvez maintenant ajouter le serveur MCP Azure DevOps à vos agents Foundry directement depuis le catalogue d&amp;rsquo;outils.&lt;/p&gt;
&lt;p&gt;Pour ceux qui ne connaissent pas encore Foundry : c&amp;rsquo;est la plateforme unifiée de Microsoft pour construire et gérer des applications et agents alimentés par l&amp;rsquo;IA à grande échelle. Accès aux modèles, orchestration, évaluation, déploiement — tout au même endroit.&lt;/p&gt;
&lt;h2 id="la-mise-en-place"&gt;La mise en place&lt;/h2&gt;
&lt;p&gt;La configuration est étonnamment simple :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Dans votre agent Foundry, allez dans &lt;strong&gt;Add Tools&lt;/strong&gt; &amp;gt; &lt;strong&gt;Catalog&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Cherchez &amp;ldquo;Azure DevOps&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Sélectionnez le Azure DevOps MCP Server (preview) et cliquez sur &lt;strong&gt;Create&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Entrez le nom de votre organisation et connectez&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;C&amp;rsquo;est tout. Votre agent a maintenant accès aux outils Azure DevOps.&lt;/p&gt;
&lt;h2 id="contrôler-ce-à-quoi-votre-agent-peut-accéder"&gt;Contrôler ce à quoi votre agent peut accéder&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est la partie que j&amp;rsquo;apprécie : vous n&amp;rsquo;êtes pas coincé avec une approche tout-ou-rien. Vous pouvez spécifier quels outils sont disponibles pour votre agent. Si vous voulez qu&amp;rsquo;il ne lise que les work items sans toucher aux pipelines, vous pouvez configurer ça. Principe du moindre privilège, appliqué à vos agents IA.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est important pour les scénarios enterprise où vous ne voulez pas qu&amp;rsquo;un agent déclenche accidentellement un pipeline de déploiement parce que quelqu&amp;rsquo;un lui a demandé d&amp;rsquo;&amp;ldquo;aider avec la release.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="pourquoi-cest-intéressant-pour-les-équipes-net"&gt;Pourquoi c&amp;rsquo;est intéressant pour les équipes .NET&lt;/h2&gt;
&lt;p&gt;Pensez à ce que ça permet en pratique :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Assistants de planification de sprint&lt;/strong&gt; — des agents qui peuvent récupérer les work items, analyser les données de vélocité et suggérer la capacité du sprint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bots de code review&lt;/strong&gt; — des agents qui comprennent le contexte de votre PR parce qu&amp;rsquo;ils peuvent réellement lire vos repos et work items liés&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Réponse aux incidents&lt;/strong&gt; — des agents qui peuvent créer des work items, interroger les déploiements récents et corréler les bugs avec les changements récents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Onboarding des développeurs&lt;/strong&gt; — &amp;ldquo;Sur quoi devrais-je travailler ?&amp;rdquo; obtient une vraie réponse basée sur les données réelles du projet&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour les équipes .NET qui utilisent déjà Azure DevOps pour leurs pipelines CI/CD et la gestion de projet, avoir un agent IA qui peut interagir directement avec ces systèmes est un pas significatif vers une automatisation utile.&lt;/p&gt;
&lt;h2 id="la-vision-plus-large-de-mcp"&gt;La vision plus large de MCP&lt;/h2&gt;
&lt;p&gt;Cela fait partie d&amp;rsquo;une tendance plus large : les serveurs MCP deviennent le moyen standard par lequel les agents IA interagissent avec le monde extérieur. On les voit pour GitHub, Azure DevOps, les bases de données, les APIs SaaS — et Foundry devient le hub où toutes ces connexions convergent.&lt;/p&gt;
&lt;p&gt;Si vous construisez des agents dans l&amp;rsquo;écosystème .NET, MCP mérite votre attention. Le protocole est standardisé, l&amp;rsquo;outillage mûrit, et l&amp;rsquo;intégration Foundry le rend accessible sans avoir à câbler manuellement les connexions serveur.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;Le serveur MCP Azure DevOps dans Foundry est en preview, alors attendez-vous à ce qu&amp;rsquo;il évolue. Mais le workflow de base est solide : connecter, configurer l&amp;rsquo;accès aux outils, et laisser vos agents travailler avec vos données DevOps. Si vous êtes déjà dans l&amp;rsquo;écosystème Foundry, c&amp;rsquo;est à quelques clics. Essayez et voyez quels workflows vous pouvez construire.&lt;/p&gt;
&lt;p&gt;Consultez l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;annonce complète&lt;/a&gt; pour la configuration étape par étape et plus de détails.&lt;/p&gt;</content:encoded></item><item><title>Les réponses en arrière-plan dans Microsoft Agent Framework : fini l'angoisse des timeouts</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</guid><description>Microsoft Agent Framework permet maintenant de décharger les tâches IA longues avec des tokens de continuation. Voici comment fonctionnent les réponses en arrière-plan et pourquoi elles comptent pour vos agents .NET.</description><content:encoded>&lt;p&gt;Si vous avez construit quoi que ce soit avec des modèles de raisonnement comme o3 ou GPT-5.2, vous connaissez la douleur. Votre agent commence à réfléchir à une tâche complexe, le client attend, et quelque part entre &amp;ldquo;ça va&amp;rdquo; et &amp;ldquo;est-ce que ça a planté ?&amp;rdquo; votre connexion expire. Tout ce travail ? Perdu.&lt;/p&gt;
&lt;p&gt;Microsoft Agent Framework vient de livrer les &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;réponses en arrière-plan&lt;/a&gt; — et honnêtement, c&amp;rsquo;est une de ces fonctionnalités qui auraient dû exister depuis le premier jour.&lt;/p&gt;
&lt;h2 id="le-problème-avec-les-appels-bloquants"&gt;Le problème avec les appels bloquants&lt;/h2&gt;
&lt;p&gt;Dans un schéma requête-réponse traditionnel, votre client bloque jusqu&amp;rsquo;à ce que l&amp;rsquo;agent termine. Ça marche bien pour les tâches rapides. Mais quand vous demandez à un modèle de raisonnement de faire une recherche approfondie, une analyse en plusieurs étapes, ou de générer un rapport de 20 pages ? Vous regardez des minutes de temps réel. Pendant cette fenêtre :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les connexions HTTP peuvent expirer&lt;/li&gt;
&lt;li&gt;Les coupures réseau tuent toute l&amp;rsquo;opération&lt;/li&gt;
&lt;li&gt;Votre utilisateur fixe un spinner en se demandant s&amp;rsquo;il se passe quelque chose&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les réponses en arrière-plan inversent la donne.&lt;/p&gt;
&lt;h2 id="comment-fonctionnent-les-tokens-de-continuation"&gt;Comment fonctionnent les tokens de continuation&lt;/h2&gt;
&lt;p&gt;Au lieu de bloquer, vous lancez la tâche de l&amp;rsquo;agent et récupérez un &lt;strong&gt;token de continuation&lt;/strong&gt;. Pensez-y comme un ticket de retrait dans un atelier de réparation — vous ne restez pas debout au comptoir à attendre, vous revenez quand c&amp;rsquo;est prêt.&lt;/p&gt;
&lt;p&gt;Le flux est direct :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Envoyez votre requête avec &lt;code&gt;AllowBackgroundResponses = true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Si l&amp;rsquo;agent supporte le traitement en arrière-plan, vous recevez un token de continuation&lt;/li&gt;
&lt;li&gt;Interrogez à votre rythme jusqu&amp;rsquo;à ce que le token retourne &lt;code&gt;null&lt;/code&gt; — ça signifie que le résultat est prêt&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Voici la version .NET :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://&amp;lt;myresource&amp;gt;.openai.azure.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetResponsesClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;deployment-name&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentRunOptions&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AllowBackgroundResponses&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentResponse&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Write a detailed market analysis for the Q4 product launch.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Interroger jusqu&amp;#39;à complétion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromSeconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si l&amp;rsquo;agent finit immédiatement (tâches simples, modèles qui n&amp;rsquo;ont pas besoin de traitement en arrière-plan), aucun token de continuation n&amp;rsquo;est renvoyé. Votre code fonctionne simplement — aucun traitement spécial nécessaire.&lt;/p&gt;
&lt;h2 id="streaming-avec-reprise--la-vraie-magie"&gt;Streaming avec reprise : la vraie magie&lt;/h2&gt;
&lt;p&gt;Le polling convient pour les scénarios fire-and-forget, mais que faire quand vous voulez un progrès en temps réel ? Les réponses en arrière-plan supportent aussi le streaming avec reprise intégrée.&lt;/p&gt;
&lt;p&gt;Chaque mise à jour streamée porte son propre token de continuation. Si votre connexion tombe en plein stream, vous reprenez exactement là où vous en étiez :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentRunOptions&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AllowBackgroundResponses&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentResponseUpdate&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunStreamingAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Write a detailed market analysis for the Q4 product launch.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Simuler une interruption réseau&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Reprendre exactement là où nous en étions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunStreamingAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;L&amp;rsquo;agent continue le traitement côté serveur indépendamment de ce qui se passe avec votre client. C&amp;rsquo;est de la tolérance aux pannes intégrée sans que vous écriviez de la logique de retry ou des circuit breakers.&lt;/p&gt;
&lt;h2 id="quand-utiliser-ça-concrètement"&gt;Quand utiliser ça concrètement&lt;/h2&gt;
&lt;p&gt;Tous les appels d&amp;rsquo;agent n&amp;rsquo;ont pas besoin de réponses en arrière-plan. Pour les completions rapides, vous ajoutez de la complexité pour rien. Mais voici où elles brillent :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tâches de raisonnement complexe&lt;/strong&gt; — analyse en plusieurs étapes, recherche approfondie, tout ce qui fait vraiment réfléchir un modèle de raisonnement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Génération de contenu long&lt;/strong&gt; — rapports détaillés, documents en plusieurs parties, analyses approfondies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Réseaux peu fiables&lt;/strong&gt; — clients mobiles, déploiements edge, VPN d&amp;rsquo;entreprise instables&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patterns UX asynchrones&lt;/strong&gt; — soumettez une tâche, allez faire autre chose, revenez pour les résultats&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour nous développeurs .NET qui construisons des apps enterprise, ce dernier point est particulièrement intéressant. Pensez à une app Blazor où un utilisateur demande un rapport complexe — vous lancez la tâche de l&amp;rsquo;agent, affichez un indicateur de progression, et le laissez continuer à travailler. Pas d&amp;rsquo;acrobaties WebSocket, pas d&amp;rsquo;infrastructure de file d&amp;rsquo;attente personnalisée, juste un token et une boucle de polling.&lt;/p&gt;
&lt;h2 id="pour-conclure"&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;Les réponses en arrière-plan sont disponibles maintenant en .NET et Python via Microsoft Agent Framework. Si vous construisez des agents qui font plus que du simple Q&amp;amp;A, ça vaut le coup de l&amp;rsquo;ajouter à votre boîte à outils. Le pattern du token de continuation garde les choses simples tout en résolvant un vrai problème de production.&lt;/p&gt;
&lt;p&gt;Consultez la &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;documentation complète&lt;/a&gt; pour la référence API complète et plus d&amp;rsquo;exemples.&lt;/p&gt;</content:encoded></item></channel></rss>