<?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>Ai | The .NET Blog</title><link>https://thedotnetblog.com/ca/tags/ai/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ca</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sat, 25 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ca/tags/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>CodeAct al Agent Framework: Com Reduir la Latència del teu Agent a la Meitat</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</guid><description>CodeAct col·lapsa cadenes d'eines de múltiples passos en un únic bloc de codi sandboxed — reduint la latència un 52% i l'ús de tokens un 64%. Aquí tens el que significa pels teus agents i quan fer-lo servir.</description><content:encoded>&lt;p&gt;&lt;em&gt;Aquest post ha estat traduït automàticament. Per a la versió original, &lt;a href="https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/"&gt;fes clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Hi ha un moment en tot projecte d&amp;rsquo;agents en què mires el trace i penses: &amp;ldquo;per què tarda tant això?&amp;rdquo; El model està bé. Les eines funcionen. Però hi ha set round trips per obtenir un resultat que es podria calcular d&amp;rsquo;una sola vegada.&lt;/p&gt;
&lt;p&gt;Exactament aquest és el problema que resol CodeAct — i l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;equip d&amp;rsquo;Agent Framework acaba de publicar suport alpha&lt;/a&gt; a través del nou paquet &lt;code&gt;agent-framework-hyperlight&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="què-és-codeact"&gt;Què és CodeAct?&lt;/h2&gt;
&lt;p&gt;El &lt;a href="https://arxiv.org/abs/2402.01030"&gt;patró CodeAct&lt;/a&gt; és elegantment simple: en lloc de donar al model una llista d&amp;rsquo;eines i deixar-lo cridar-les una per una, li dones una única eina &lt;code&gt;execute_code&lt;/code&gt; i li permets expressar el &lt;em&gt;pla complet&lt;/em&gt; com un programa Python curt. L&amp;rsquo;agent escriu el codi una vegada, el sandbox l&amp;rsquo;executa, i tornes a rebre un únic resultat consolidat.&lt;/p&gt;
&lt;p&gt;Un pla de cinc passos que abans requeria cinc torns del model ara es converteix en un torn &lt;code&gt;execute_code&lt;/code&gt; que conté un script Python que crida les teves eines via &lt;code&gt;call_tool(...)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;El benchmark del repositori ho fa concret. Vuit usuaris, dotzenes de comandes, cinc eines. Mateix model, mateixes eines, mateix prompt — només cablejat diferent:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cablejat&lt;/th&gt;
&lt;th&gt;Temps&lt;/th&gt;
&lt;th&gt;Tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tradicional&lt;/td&gt;
&lt;td&gt;27.81s&lt;/td&gt;
&lt;td&gt;6.890&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeAct&lt;/td&gt;
&lt;td&gt;13.23s&lt;/td&gt;
&lt;td&gt;2.489&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Millora&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;52,4%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;63,9%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="la-peça-de-seguretat-micro-vms-de-hyperlight"&gt;La peça de seguretat: micro-VMs de Hyperlight&lt;/h2&gt;
&lt;p&gt;El paquet &lt;code&gt;agent-framework-hyperlight&lt;/code&gt; utilitza micro-VMs de &lt;a href="https://github.com/hyperlight-dev/hyperlight"&gt;Hyperlight&lt;/a&gt;. Cada crida &lt;code&gt;execute_code&lt;/code&gt; obté la seva pròpia micro-VM recentment creada — amb la seva pròpia memòria, sense accés al sistema de fitxers del host més enllà del que muntes explícitament. L&amp;rsquo;arrencada es mesura en mil·lisegons.&lt;/p&gt;
&lt;p&gt;Les teves eines segueixen executant-se al host. El &lt;em&gt;codi de pegament&lt;/em&gt; generat pel model s&amp;rsquo;executa en el sandbox. Aquesta és la divisió correcta.&lt;/p&gt;
&lt;h2 id="com-connectar-ho"&gt;Com connectar-ho&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;agent_framework&lt;/span&gt; &lt;span class="kn"&gt;import&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;tool&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;agent_framework_hyperlight&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HyperlightCodeActProvider&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="nd"&gt;@tool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_weather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;str&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;&amp;#34;&amp;#34;Return the current weather for a city.&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="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;city&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;temperature_c&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;21.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;conditions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;partly cloudy&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="n"&gt;codeact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HyperlightCodeActProvider&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_weather&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;approval_mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;never_require&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;agent&lt;/span&gt; &lt;span class="o"&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;client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;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;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;CodeActAgent&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="n"&gt;context_providers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;codeact&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;h2 id="quan-fer-servir-codeact-i-quan-no"&gt;Quan fer servir CodeAct (i quan no)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Fes servir CodeAct quan:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La tasca encadena moltes crides petites a eines (consultes, joins, càlculs, formatació)&lt;/li&gt;
&lt;li&gt;Et preocupa la latència i el cost de tokens&lt;/li&gt;
&lt;li&gt;Vols aïllament fort per crida en codi generat pel model&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Queda&amp;rsquo;t amb el tool-calling tradicional quan:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L&amp;rsquo;agent només fa una o dues crides a eines per torn&lt;/li&gt;
&lt;li&gt;Cada crida té efectes secundaris que vols aprovar individualment&lt;/li&gt;
&lt;li&gt;Les descripcions d&amp;rsquo;eines són escasses o ambigües&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prova-ho-ara"&gt;Prova-ho ara&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;pip install agent-framework-hyperlight --pre
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Consulta el &lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;post complet al blog d&amp;rsquo;Agent Framework&lt;/a&gt; per a cobertura més profunda.&lt;/p&gt;</content:encoded></item><item><title>El Azure MCP Server Ara és un .mcpb — Instal·la'l sense Cap Runtime</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</guid><description>L'Azure MCP Server ja està disponible com a MCP Bundle (.mcpb) — descarrega'l, arrossega'l a Claude Desktop i ja està. Sense Node.js, Python ni .NET requerits.</description><content:encoded>&lt;p&gt;&lt;em&gt;Aquest post ha estat traduït automàticament. Per a la versió original, &lt;a href="https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/"&gt;fes clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Saps el que era molest de configurar servidors MCP? Necessitaves un runtime. Node.js per a la versió npm, Python per a pip/uvx, .NET SDK per a la variant 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 acaba de canviar això&lt;/a&gt;. Ara està disponible com a &lt;code&gt;.mcpb&lt;/code&gt; — un MCP Bundle — i la configuració és arrossegar i deixar anar.&lt;/p&gt;
&lt;h2 id="què-és-un-mcp-bundle"&gt;Què és un MCP Bundle?&lt;/h2&gt;
&lt;p&gt;Pensa-hi com una extensió de VS Code (&lt;code&gt;.vsix&lt;/code&gt;) o una extensió de navegador (&lt;code&gt;.crx&lt;/code&gt;), però per a servidors MCP. Un fitxer &lt;code&gt;.mcpb&lt;/code&gt; és un arxiu ZIP autònom que inclou el binari del servidor i totes les seves dependències.&lt;/p&gt;
&lt;h2 id="com-installar-lo"&gt;Com instal·lar-lo&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Descarrega el bundle per a la teva plataforma&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ves a la &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server"&gt;pàgina de GitHub Releases&lt;/a&gt; i descarrega el fitxer &lt;code&gt;.mcpb&lt;/code&gt; per al teu OS i arquitectura.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Instal·la a Claude Desktop&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La manera més fàcil: arrossega i deixa anar el fitxer &lt;code&gt;.mcpb&lt;/code&gt; a la finestra de Claude Desktop mentre estàs a la pàgina de configuració d&amp;rsquo;Extensions. Revisa els detalls del servidor, fes clic a Instal·la i confirma.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Autentifica&amp;rsquo;t a 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;h2 id="per-a-començar"&gt;Per a començar&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Descarrega&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;Repositori&lt;/strong&gt;: &lt;a href="https://aka.ms/azmcp"&gt;aka.ms/azmcp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Consulta el &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;post complet&lt;/a&gt; per a més detalls.&lt;/p&gt;</content:encoded></item><item><title>GPT-5.5 Ja És Aquí a Azure Foundry — El que els Desenvolupadors .NET Han de Saber</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</guid><description>GPT-5.5 ja és disponible a Microsoft Foundry. La progressió des de GPT-5 fins a 5.5, què ha millorat realment i com començar a usar-lo en els teus agents avui.</description><content:encoded>&lt;p&gt;&lt;em&gt;Aquest post ha estat traduït automàticament. Per a la versió original, &lt;a href="https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/"&gt;fes clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Microsoft acaba d&amp;rsquo;anunciar 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 ja és disponible a Microsoft Foundry&lt;/a&gt;. Si has estat construint agents a Azure, aquesta és l&amp;rsquo;actualització que esperaves.&lt;/p&gt;
&lt;h2 id="la-progressió-de-gpt-5"&gt;La progressió de GPT-5&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-5&lt;/strong&gt;: va unificar raonament i velocitat en un sol sistema&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.4&lt;/strong&gt;: raonament multi-pas més robust, capacitats agèntiques per a empreses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.5&lt;/strong&gt;: raonament de llarg context més profund, execució agèntica més fiable, millor eficiència de tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="què-ha-canviat-realment"&gt;Què ha canviat realment&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Millor codificació agèntica&lt;/strong&gt;: GPT-5.5 manté el context a través de grans bases de codi, diagnostica fallades arquitectòniques i anticipa requisits de proves.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eficiència de tokens&lt;/strong&gt;: Sortides de major qualitat amb menys tokens i menys reintents. Menys cost i latència en producció.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anàlisi de llarg context&lt;/strong&gt;: Gestiona documents extensos i historials multi-sessió sense perdre el fil.&lt;/p&gt;
&lt;h2 id="preus"&gt;Preus&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Entrada ($/M tokens)&lt;/th&gt;
&lt;th&gt;Entrada en memòria cau&lt;/th&gt;
&lt;th&gt;Sortida ($/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="foundry-agent-service"&gt;Foundry Agent Service&lt;/h2&gt;
&lt;p&gt;Defineix agents en YAML o connecta&amp;rsquo;ls amb Microsoft Agent Framework, GitHub Copilot SDK, LangGraph o l&amp;rsquo;SDK d&amp;rsquo;OpenAI Agents — i executa&amp;rsquo;ls com a agents allotjats aïllats amb sistema de fitxers persistent, identitat de Microsoft Entra i preus d&amp;rsquo;escala a zero.&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;Ets un assistent útil.&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;ElMeuAgent&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;Consulta 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;anunci complet&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>On Recorda les Coses el teu Agent? Guia Pràctica sobre l'Emmagatzematge de l'Historial de Xat</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>Gestionat pel servei o pel client? Lineal o amb bifurcacions? La decisió arquitectònica que defineix el que el teu agent IA pot fer realment.</description><content:encoded>&lt;p&gt;&lt;em&gt;Aquest post ha estat traduït automàticament. Per a la versió original, &lt;a href="https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/"&gt;fes clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Quan construeixes un agent IA, dediques la major part de la teva energia al model, les eines i els prompts. La pregunta de &lt;em&gt;on viu l&amp;rsquo;historial de conversa&lt;/em&gt; sembla un detall d&amp;rsquo;implementació — però és una de les decisions arquitectòniques més importants que prendràs.&lt;/p&gt;
&lt;p&gt;Determina si els usuaris poden bifurcar converses, desfer respostes, reprendre sessions després d&amp;rsquo;un reinici, i si les teves dades surten mai de la teva infraestructura. L&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;equip d&amp;rsquo;Agent Framework ha publicat una anàlisi en profunditat&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="dos-patrons-fonamentals"&gt;Dos patrons fonamentals&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Gestionat pel servei&lt;/strong&gt;: el servei d&amp;rsquo;IA emmagatzema l&amp;rsquo;estat de la conversa. La teva app manté una referència i el servei inclou automàticament l&amp;rsquo;historial rellevant en cada sol·licitud.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gestionat pel client&lt;/strong&gt;: la teva app manté l&amp;rsquo;historial complet i envia missatges rellevants amb cada sol·licitud. El servei no té estat. Controles tot.&lt;/p&gt;
&lt;h2 id="com-agent-framework-abstreu-això"&gt;Com Agent Framework abstreu això&lt;/h2&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="c1"&gt;// C# — funciona igual independentment del proveïdor&lt;/span&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;first&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="s"&gt;&amp;#34;Em dic Alice.&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&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;second&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="s"&gt;&amp;#34;Quin és el meu nom?&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;# Python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&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;create_session&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;first&lt;/span&gt; &lt;span class="o"&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="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Em dic Alice.&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="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&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;second&lt;/span&gt; &lt;span class="o"&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="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Quin és el meu nom?&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="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&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;h2 id="referència-ràpida-de-proveïdors"&gt;Referència ràpida de proveïdors&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Proveïdor&lt;/th&gt;
&lt;th&gt;Emmagatzematge&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Compactació&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI/Azure Chat Completions&lt;/td&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Tu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;Servei&lt;/td&gt;
&lt;td&gt;Lineal&lt;/td&gt;
&lt;td&gt;Servei&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (per defecte)&lt;/td&gt;
&lt;td&gt;Servei&lt;/td&gt;
&lt;td&gt;Bifurcació&lt;/td&gt;
&lt;td&gt;Servei&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic Claude, Ollama&lt;/td&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Tu&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Llegeix el &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;post complet&lt;/a&gt; per a l&amp;rsquo;arbre de decisions complet.&lt;/p&gt;</content:encoded></item><item><title>Foundry Toolboxes: Un únic endpoint per a totes les eines dels teus agents</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</guid><description>Microsoft Foundry acaba de llançar Toolboxes en preview pública — una manera de curar, gestionar i exposar eines d'agents IA a través d'un únic endpoint compatible amb MCP.</description><content:encoded>&lt;p&gt;&lt;em&gt;Aquesta publicació ha estat traduïda automàticament. Per a la versió original, &lt;a href="https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/"&gt;feu clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Hi ha un problema que sembla avorrit fins que el pateixes de primera mà: la teva organització està construint múltiples agents d&amp;rsquo;IA, cadascun necessita eines, i cada equip les connecta des de zero. La mateixa integració de cerca web, la mateixa config d&amp;rsquo;Azure AI Search, la mateixa connexió al servidor MCP de GitHub — però en un altre repositori, per un altre equip, amb altres credencials i sense cap governança compartida.&lt;/p&gt;
&lt;p&gt;Microsoft Foundry acaba de llançar &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;Toolboxes&lt;/a&gt; en preview pública, i és una resposta directa a aquest problema.&lt;/p&gt;
&lt;h2 id="què-és-un-toolbox"&gt;Què és un Toolbox?&lt;/h2&gt;
&lt;p&gt;Un Toolbox és un bundle d&amp;rsquo;eines amb nom, reutilitzable, que defineixes una vegada a Foundry i exposes a través d&amp;rsquo;un únic endpoint compatible amb MCP. Qualsevol runtime d&amp;rsquo;agent que parli MCP pot consumir-lo — no estàs bloquejat a Foundry Agents.&lt;/p&gt;
&lt;p&gt;La proposta és simple: &lt;strong&gt;build once, consume anywhere&lt;/strong&gt;. Defineix les eines, configura l&amp;rsquo;autenticació de forma centralitzada, publica l&amp;rsquo;endpoint. Cada agent que necessiti les eines es connecta a l&amp;rsquo;endpoint i les obté totes.&lt;/p&gt;
&lt;h2 id="els-quatre-pilars-dos-disponibles-avui"&gt;Els quatre pilars (dos disponibles avui)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pilar&lt;/th&gt;
&lt;th&gt;Estat&lt;/th&gt;
&lt;th&gt;Què fa&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;Pròximament&lt;/td&gt;
&lt;td&gt;Troba eines aprovades sense buscar manualment&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 avui&lt;/td&gt;
&lt;td&gt;Agrupa eines en un bundle reutilitzable&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 avui&lt;/td&gt;
&lt;td&gt;Un únic endpoint MCP exposa totes les eines&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;Pròximament&lt;/td&gt;
&lt;td&gt;Auth centralitzada + observabilitat en totes les crides&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="exemple-pràctic"&gt;Exemple pràctic&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;Cerca documentació i respon a issues de 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;Cerca documentació pública&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;Un cop publicat, Foundry et dona un endpoint unificat. Un punt de connexió, totes les eines.&lt;/p&gt;
&lt;h2 id="no-estàs-bloquejat-a-foundry-agents"&gt;No estàs bloquejat a Foundry Agents&lt;/h2&gt;
&lt;p&gt;Els Toolboxes es &lt;strong&gt;creen i gestionen&lt;/strong&gt; a Foundry, però la superfície de consum és el protocol MCP obert. Pots usar-los des d&amp;rsquo;agents personalitzats amb Microsoft Agent Framework o LangGraph, GitHub Copilot i qualsevol runtime que parli MCP.&lt;/p&gt;
&lt;h2 id="per-què-importa-ara"&gt;Per què importa ara&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;onada multi-agent està arribant a producció. Cada nou agent és una nova superfície per a configuració duplicada, credencials desfasades i comportament inconsistent. La base de Build + Consume és suficient per començar a centralitzar. Quan arribi el pilar Govern, tindràs una capa d&amp;rsquo;eines observable i controlada centralment per a tota la teva flota d&amp;rsquo;agents.&lt;/p&gt;
&lt;h2 id="conclusió"&gt;Conclusió&lt;/h2&gt;
&lt;p&gt;Això és aviat — preview pública, SDK Python primer. Però el model és sòlid i el disseny natiu MCP significa que funciona amb les eines que ja estàs construint. Fes una ullada a l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;anunci oficial&lt;/a&gt; per començar.&lt;/p&gt;</content:encoded></item><item><title>Windows App Dev CLI v0.3: F5 des del terminal i automatització de UI per a agents</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</guid><description>Windows App Development CLI v0.3 arriba amb winapp run per llançar i depurar des del terminal, winapp ui per a l'automatització de la interfície, i un paquet NuGet que fa funcionar dotnet run amb apps empaquetades.</description><content:encoded>&lt;p&gt;&lt;em&gt;Aquesta publicació ha estat traduïda automàticament. Per a la versió original, &lt;a href="https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/"&gt;feu clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;experiència F5 de Visual Studio és fantàstica. Però haver d&amp;rsquo;obrir VS només per llançar i depurar una app Windows empaquetada és excessiu quan estàs en un pipeline de CI, executant un workflow automatitzat, o quan un agent d&amp;rsquo;IA fa les proves.&lt;/p&gt;
&lt;p&gt;Windows App Development CLI v0.3 acaba de &lt;a href="https://devblogs.microsoft.com/ifdef-windows/windows-app-development-cli-v0-3-new-run-and-ui-commands-plus-dotnet-run-support-for-packaged-apps/"&gt;sortir&lt;/a&gt; i ho aborda directament amb dues funcions destacades: &lt;code&gt;winapp run&lt;/code&gt; i &lt;code&gt;winapp ui&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="winapp-run-f5-des-de-qualsevol-lloc"&gt;winapp run: F5 des de qualsevol lloc&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;winapp run&lt;/code&gt; pren una carpeta d&amp;rsquo;app sense empaquetar i un manifest, i fa tot el que VS fa en un debug launch: registra un paquet loose, llança l&amp;rsquo;app i preserva el &lt;code&gt;LocalState&lt;/code&gt; entre re-deploys.&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;winapp run ./bin/Debug
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Funciona per a WinUI, WPF, WinForms, Console, Avalonia i més. Els modes estan pensats per a developers i workflows automatitzats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--detach&lt;/code&gt;&lt;/strong&gt;: Llança i retorna el control al terminal immediatament.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--unregister-on-exit&lt;/code&gt;&lt;/strong&gt;: Neteja el paquet registrat en tancar l&amp;rsquo;app.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--debug-output&lt;/code&gt;&lt;/strong&gt;: Captura missatges &lt;code&gt;OutputDebugString&lt;/code&gt; i excepcions en temps real.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="nou-paquet-nuget-dotnet-run-per-a-apps-empaquetades"&gt;Nou paquet NuGet: dotnet run per a apps empaquetades&lt;/h2&gt;
&lt;p&gt;Per a developers .NET hi ha un nou paquet NuGet: &lt;code&gt;Microsoft.Windows.SDK.BuildTools.WinApp&lt;/code&gt;. Afegeix-lo al projecte i &lt;code&gt;dotnet run&lt;/code&gt; gestiona tot l&amp;rsquo;inner loop: build, preparar un paquet loose-layout, registrar a Windows i llançar — tot en un pas.&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;winapp init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# o&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Microsoft.Windows.SDK.BuildTools.WinApp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="winapp-ui-ui-automation-des-de-la-línia-de-comandes"&gt;winapp ui: UI Automation des de la línia de comandes&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;winapp ui&lt;/code&gt; et dóna accés complet d&amp;rsquo;UI Automation a qualsevol app Windows en execució — WPF, WinForms, Win32, Electron, WinUI3. Pots llistar finestres, navegar l&amp;rsquo;arbre de UI Automation, trobar elements, fer clics, prendre captures de pantalla i esperar l&amp;rsquo;aparició d&amp;rsquo;elements.&lt;/p&gt;
&lt;p&gt;Combina &lt;code&gt;winapp ui&lt;/code&gt; amb &lt;code&gt;winapp run&lt;/code&gt; i tens un workflow complet build → llançar → verificar des del terminal. Un agent pot executar la teva app, inspeccionar l&amp;rsquo;estat de la UI i validar el resultat.&lt;/p&gt;
&lt;h2 id="altres-novetats"&gt;Altres novetats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp unregister&lt;/code&gt;&lt;/strong&gt;: Elimina un paquet sideloaded quan acabes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp manifest add-alias&lt;/code&gt;&lt;/strong&gt;: Afegeix un àlies per llançar l&amp;rsquo;app per nom des del terminal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tab completion&lt;/strong&gt;: Configura completat amb una sola comanda per a PowerShell.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="com-obtenir-ho"&gt;Com obtenir-ho&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;winget install Microsoft.WinAppCli
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# o&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g @microsoft/winappcli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Consulta el &lt;a href="https://github.com/microsoft/WinAppCli"&gt;repositori a GitHub&lt;/a&gt; per a documentació completa i l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/ifdef-windows/windows-app-development-cli-v0-3-new-run-and-ui-commands-plus-dotnet-run-support-for-packaged-apps/"&gt;anunci original&lt;/a&gt; per a tots els detalls.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.117: Els agents s'estan guanyant les seves pròpies branques Git i això m'encanta</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/</guid><description>VS Code 1.117 incorpora aïllament de worktrees per a sessions d'agents, mode Autopilot persistent i suport per a subagents. El flux de treball de codificació agentica acaba de fer un salt seriós.</description><content:encoded>&lt;p&gt;La línia entre &amp;ldquo;assistència IA&amp;rdquo; i &amp;ldquo;company de feina IA&amp;rdquo; cada cop és més fina. VS Code 1.117 acaba d&amp;rsquo;arribar i les &lt;a href="https://code.visualstudio.com/updates/v1_117"&gt;notes completes de la versió&lt;/a&gt; venen carregades, però el missatge és clar: els agents s&amp;rsquo;estan convertint en ciutadans de primera classe del teu flux de treball de desenvolupament.&lt;/p&gt;
&lt;p&gt;Això és el que realment importa.&lt;/p&gt;
&lt;h2 id="el-mode-autopilot-finalment-recorda-la-teva-preferència"&gt;El mode Autopilot finalment recorda la teva preferència&lt;/h2&gt;
&lt;p&gt;Abans, havies de reactivar Autopilot cada vegada que començaves una sessió nova. Molest. Ara el teu mode de permisos es manté entre sessions i pots configurar el valor per defecte.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;Agent Host admet tres configuracions de sessió:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Per defecte&lt;/strong&gt; — les eines demanen confirmació abans d&amp;rsquo;executar-se&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass&lt;/strong&gt; — aprova automàticament tot&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autopilot&lt;/strong&gt; — totalment autònom, respon les seves pròpies preguntes i continua fins que la tasca s&amp;rsquo;acaba&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si estàs preparant un projecte .NET nou amb migracions, Docker i CI, configura-ho una vegada en mode Autopilot i oblida-t&amp;rsquo;en. Aquesta preferència es manté.&lt;/p&gt;
&lt;h2 id="aïllament-de-worktree-i-git-per-a-sessions-dagents"&gt;Aïllament de worktree i Git per a sessions d&amp;rsquo;agents&lt;/h2&gt;
&lt;p&gt;Aquesta és la gran novetat. Les sessions d&amp;rsquo;agents ara admeten un aïllament complet de worktree i Git. Això vol dir que, quan un agent treballa en una tasca, obté la seva pròpia branca i el seu propi directori de treball. La teva branca principal queda intacta.&lt;/p&gt;
&lt;p&gt;I encara millor: Copilot CLI genera noms de branca significatius per a aquestes sessions de worktree. Res de &lt;code&gt;agent-session-abc123&lt;/code&gt;. Obtens alguna cosa que realment descriu el que l&amp;rsquo;agent està fent.&lt;/p&gt;
&lt;p&gt;Per als desenvolupadors .NET que treballen amb diverses branques de funcionalitat o arreglen errors mentre corre una tasca llarga d&amp;rsquo;esqueletatge de projecte, això canvia les regles del joc. Pots tenir un agent construint els controladors de l&amp;rsquo;API en un worktree mentre tu depures un problema a la capa de serveis en un altre. Sense conflictes. Sense &lt;code&gt;stash&lt;/code&gt;. Sense embolics.&lt;/p&gt;
&lt;h2 id="subagents-i-equips-dagents"&gt;Subagents i equips d&amp;rsquo;agents&lt;/h2&gt;
&lt;p&gt;El protocol Agent Host ara admet subagents. Un agent pot engegar altres agents per encarregar-los parts d&amp;rsquo;una tasca. Pensa-ho com delegar: el teu agent principal coordina i els agents especialitzats fan les peces concretes.&lt;/p&gt;
&lt;p&gt;Això encara és una funcionalitat inicial, però el potencial per als fluxos de treball .NET és evident. Imagina un agent gestionant les teves migracions d&amp;rsquo;EF Core mentre un altre prepara els tests d&amp;rsquo;integració. Encara no hi som del tot, però el suport al protocol que arriba ara farà que les eines segueixin ràpidament.&lt;/p&gt;
&lt;h2 id="la-sortida-del-terminal-sinclou-automàticament-quan-els-agents-envien-entrada"&gt;La sortida del terminal s&amp;rsquo;inclou automàticament quan els agents envien entrada&lt;/h2&gt;
&lt;p&gt;Petita, però important. Quan un agent envia entrada al terminal, la sortida del terminal s&amp;rsquo;inclou automàticament al context. Abans, l&amp;rsquo;agent havia de fer un torn extra només per llegir què havia passat.&lt;/p&gt;
&lt;p&gt;Si mai has vist un agent executar &lt;code&gt;dotnet build&lt;/code&gt;, fallar i després fer una altra ronda només per llegir l&amp;rsquo;error, aquesta fricció desapareix. Ho veu de seguida i reacciona.&lt;/p&gt;
&lt;h2 id="lapp-dagents-sactualitza-sola-a-macos"&gt;L&amp;rsquo;app d&amp;rsquo;Agents s&amp;rsquo;actualitza sola a macOS&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;aplicació d&amp;rsquo;Agents independent per a macOS ara s&amp;rsquo;actualitza sola. Ja no cal descarregar noves versions manualment. Simplement es manté al dia.&lt;/p&gt;
&lt;h2 id="el-que-val-la-pena-saber-de-la-resta"&gt;El que val la pena saber de la resta&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Els hovers de package.json&lt;/strong&gt; ara mostren tant la versió instal·lada com la més recent. Útil si gestiones eines npm al costat dels teus projectes .NET.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les imatges als comentaris JSDoc&lt;/strong&gt; es renderitzen correctament als hovers i a les completes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Les sessions de Copilot CLI&lt;/strong&gt; ara indiquen si s&amp;rsquo;han creat des de VS Code o externament, cosa útil quan saltes entre terminals.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copilot CLI, Claude Code i Gemini CLI&lt;/strong&gt; es reconeixen com a tipus de shell. L&amp;rsquo;editor sap què estàs executant.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="la-conclusió"&gt;La conclusió&lt;/h2&gt;
&lt;p&gt;VS Code 1.117 no és un llançament ple de funcions espectaculars. És infraestructura. L&amp;rsquo;aïllament de worktrees, els permisos persistents i els protocols de subagents són els blocs de construcció d&amp;rsquo;un flux de treball on els agents gestionen tasques reals en paral·lel sense trepitjar-se el codi.&lt;/p&gt;
&lt;p&gt;Si estàs construint amb .NET i encara no t&amp;rsquo;has llançat al flux de treball agentic, sincerament, ara és el moment de començar.&lt;/p&gt;</content:encoded></item><item><title>Els vostres experiments d'IA a Azure estan cremant diners: aquí teniu com solucionar-ho</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</guid><description>Les càrregues de treball d'IA a Azure poden ser cares ràpidament. Parlem del que realment funciona per mantenir els costos sota control sense frenar el vostre desenvolupament.</description><content:encoded>&lt;p&gt;Si esteu creant aplicacions amb intel·ligència artificial a Azure en aquest moment, probablement heu notat alguna cosa: la vostra factura al núvol sembla diferent del que abans. No només més alt, sinó més estrany. Espinós. Difícil de predir.&lt;/p&gt;
&lt;p&gt;Microsoft acaba de publicar un article fantàstic sobre &lt;a href="https://azure.microsoft.com/en-us/blog/cloud-cost-optimization-principles-that-still-matter/"&gt;principis d&amp;rsquo;optimització de costos del núvol que encara importen&lt;/a&gt;, i sincerament, el moment no podria ser millor. Perquè les càrregues de treball d&amp;rsquo;IA han canviat el joc pel que fa als costos.&lt;/p&gt;
&lt;h2 id="per-què-les-càrregues-de-treball-dia-són-diferents"&gt;Per què les càrregues de treball d&amp;rsquo;IA són diferents&lt;/h2&gt;
&lt;p&gt;Aquí està la cosa. Les càrregues de treball.NET tradicionals són relativament previsibles. Coneixeu el vostre nivell de servei d&amp;rsquo;aplicacions, coneixeu les vostres DTU SQL, podeu estimar la despesa mensual amb força precisió. Càrregues de treball d&amp;rsquo;IA? No tant.&lt;/p&gt;
&lt;p&gt;Esteu provant diversos models per veure quin s&amp;rsquo;adapta. Esteu creant una infraestructura recolzada per la GPU per ajustar-la. Esteu fent trucades a l&amp;rsquo;API a Azure OpenAI, on el consum de testimoni varia enormement depenent de la durada del missatge i del comportament de l&amp;rsquo;usuari. Cada experiment costa diners reals i podeu executar-ne desenes abans d&amp;rsquo;aconseguir l&amp;rsquo;enfocament correcte.&lt;/p&gt;
&lt;p&gt;Aquesta impredictibilitat és el que fa que l&amp;rsquo;optimització de costos sigui crítica, no com una idea posterior, sinó des del primer dia.&lt;/p&gt;
&lt;h2 id="gestió-vs-optimització-coneixeu-la-diferència"&gt;Gestió vs. optimització: coneixeu la diferència&lt;/h2&gt;
&lt;p&gt;Una distinció de l&amp;rsquo;article que crec que els desenvolupadors passen per alt: hi ha una diferència entre &lt;em&gt;gestió&lt;/em&gt; de costos i &lt;em&gt;optimització&lt;/em&gt; de costos.&lt;/p&gt;
&lt;p&gt;La gestió és el seguiment i la presentació d&amp;rsquo;informes. Configureu pressupostos a Azure Cost Management, rebeu alertes i veureu taulers de control. Això són apostes de taula.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;optimització és on realment es prenen decisions. Realment necessiteu aquest nivell S3 o S1 gestionaria la vostra càrrega? Aquesta instància informàtica sempre activa està inactiva els caps de setmana? Podríeu utilitzar instàncies puntuals per als vostres treballs de formació?&lt;/p&gt;
&lt;p&gt;Com a desenvolupadors de.NET, tendim a centrar-nos en el codi i deixar les decisions sobre la infraestructura a &amp;ldquo;l&amp;rsquo;equip d&amp;rsquo;operacions&amp;rdquo;. Però si esteu implementant a Azure, aquestes decisions també són les vostres.&lt;/p&gt;
&lt;h2 id="el-que-realment-funciona"&gt;El que realment funciona&lt;/h2&gt;
&lt;p&gt;A partir de l&amp;rsquo;article i de la meva pròpia experiència, aquí teniu el que mou l&amp;rsquo;agulla:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Coneix el que gastes i on.&lt;/strong&gt; Etiqueta els teus recursos. De debò. Si no sabeu quin projecte o experiment s&amp;rsquo;està consumint el vostre pressupost, no podeu optimitzar res. Azure Cost Management amb l&amp;rsquo;etiquetatge adequat és el vostre millor amic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configureu baranes abans d&amp;rsquo;experimentar.&lt;/strong&gt; Utilitzeu la política d&amp;rsquo;Azure per restringir les SKU cares en entorns de desenvolupament/prova. Establiu límits de despesa als vostres desplegaments d&amp;rsquo;Azure OpenAI. No espereu fins que arribi la factura per adonar-vos que algú va deixar un clúster de GPU en funcionament durant el cap de setmana.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mida correctament contínuament.&lt;/strong&gt; Aquesta màquina virtual que vau triar durant la creació de prototips? Probablement és incorrecte per a la producció. Azure Advisor us ofereix recomanacions; mireu-les. Revisió mensual, no anual.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Penseu en el cicle de vida.&lt;/strong&gt; Els recursos per a desenvolupadors haurien de baixar. Els entorns de prova no cal que funcionin les 24 hores del dia. Utilitzeu polítiques d&amp;rsquo;apagada automàtica. Específicament, per a les càrregues de treball d&amp;rsquo;IA, tingueu en compte les opcions sense servidor on pagueu per execució en lloc de mantenir el càlcul calent.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mesura el valor, no només el cost.&lt;/strong&gt; Aquest és fàcil d&amp;rsquo;oblidar. Un model que costa més però que ofereix resultats significativament millors podria ser la trucada adequada. L&amp;rsquo;objectiu no és gastar el mínim, sinó gastar intel·ligentment.&lt;/p&gt;
&lt;h2 id="el-menjar-per-emportar"&gt;El menjar per emportar&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;optimització de costos del núvol no és una neteja puntual. És un hàbit. I amb les càrregues de treball d&amp;rsquo;IA que fan que la despesa sigui menys predictible que mai, construir aquest hàbit aviat us estalvia de sorpreses doloroses més tard.&lt;/p&gt;
&lt;p&gt;Si sou un desenvolupador de.NET que es basa en Azure, comenceu a tractar la vostra factura al núvol com si tracteu el codi: reviseu-lo regularment, refactoritzeu-lo quan estigui desordenat i mai no ho feu sense entendre el que us costarà.&lt;/p&gt;</content:encoded></item><item><title>L'RFT de Foundry s'ha tornat més barat i intel·ligent: això és el que ha canviat</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</guid><description>Microsoft Foundry va enviar tres actualitzacions de RFT aquest mes: formació global per a o4-mini, nous gradadors de models GPT-4.1 i una guia de bones pràctiques que us estalviarà hores de depuració.</description><content:encoded>&lt;p&gt;Si esteu creant aplicacions.NET que es basen en models afinats, val la pena prestar atenció a les actualitzacions de Foundry d&amp;rsquo;aquest mes. L&amp;rsquo;afinació del reforç acaba de ser més accessible i molt més barata.&lt;/p&gt;
&lt;p&gt;Els detalls complets es troben a l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-foundry-finetune-april-2026/"&gt;anunci oficial&lt;/a&gt;, però aquí teniu el desglossament pràctic.&lt;/p&gt;
&lt;h2 id="formació-global-per-a-o4-mini"&gt;Formació global per a o4-mini&lt;/h2&gt;
&lt;p&gt;o4-mini és el model de referència per a càrregues de treball pesades i de raonament. La gran notícia: ara podeu llançar treballs d&amp;rsquo;ajustament de més de 13 regions Azure amb taxes d&amp;rsquo;entrenament per testimoni més baixes en comparació amb la formació estàndard. Mateixa infraestructura, mateixa qualitat, abast més ampli.&lt;/p&gt;
&lt;p&gt;Si el vostre equip està repartit per geografies, això és important. Ja no estàs fixat a un grapat de regions per entrenar.&lt;/p&gt;
&lt;p&gt;Aquí teniu la crida a l&amp;rsquo;API REST per iniciar una feina de formació 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;Aquesta bandera &lt;code&gt;trainingType: globalstandard&lt;/code&gt; és la diferència clau.&lt;/p&gt;
&lt;h2 id="nou-model-de-classificadors-família-gpt-41"&gt;Nou model de classificadors: família GPT-4.1&lt;/h2&gt;
&lt;p&gt;Els qualificadors defineixen el senyal de recompensa amb el qual optimitza el vostre model. Fins ara, els qualificadors basats en models es limitaven a un conjunt més petit de models. Ara teniu tres opcions noves: GPT-4.1, GPT-4.1-mini i GPT-4.1-nano.&lt;/p&gt;
&lt;p&gt;Quan hauríeu d&amp;rsquo;aconseguir els qualificadors model en lloc dels deterministes? Quan la sortida de la vostra tasca és oberta, quan necessiteu una puntuació de crèdit parcial en diverses dimensions o quan esteu creant fluxos de treball agents on la correcció de la trucada d&amp;rsquo;eines depèn del context semàntic.&lt;/p&gt;
&lt;p&gt;Aquesta és la qüestió: l&amp;rsquo;estratègia de classificació és pràctica:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-nano&lt;/strong&gt; per a les iteracions inicials. Bucles de retroalimentació ràpids i de baix cost.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-mini&lt;/strong&gt; un cop la rúbrica de qualificació sigui estable i necessiteu una fidelitat més alta.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1&lt;/strong&gt; per a la qualificació de la producció o rúbriques complexes on cada decisió de puntuació compta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fins i tot podeu barrejar tipus de classificador en un sol treball RFT. Utilitzeu string-match per a la dimensió &amp;ldquo;resposta correcta&amp;rdquo; i un model de qualificació per avaluar la qualitat del raonament. Aquesta flexibilitat és sincerament el que fa que sigui útil per a càrregues de treball reals.&lt;/p&gt;
&lt;h2 id="el-format-de-dades-de-rft-es-troba"&gt;El format de dades de RFT es troba&lt;/h2&gt;
&lt;p&gt;Això fa ensorrar la gent. El format de dades RFT és diferent de SFT. L&amp;rsquo;últim missatge de cada fila ha de ser una funció d&amp;rsquo;usuari o de desenvolupador, no d&amp;rsquo;assistent. La resposta esperada va en una clau de nivell superior com &lt;code&gt;reference_answer&lt;/code&gt; que el qualificador fa referència directament.&lt;/p&gt;
&lt;p&gt;Si heu estat fent un ajustament supervisat i voleu canviar a RFT, heu de reestructurar les vostres dades d&amp;rsquo;entrenament. No us salteu aquest pas o els vostres treballs fallaran en silenci.&lt;/p&gt;
&lt;h2 id="per-què-això-és-important-per-als-desenvolupadors-denet"&gt;Per què això és important per als desenvolupadors de.NET&lt;/h2&gt;
&lt;p&gt;Si truqueu a models ajustats des de les vostres aplicacions.NET mitjançant l&amp;rsquo;SDK d&amp;rsquo;Azure OpenAI, una formació més barata significa que podeu repetir de manera més agressiva. Les opcions de classificació del model us permeten ajustar amb precisió les tasques matisades, no només escenaris de concordança exacta. I la guia de bones pràctiques a &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; us estalviarà temps real de depuració.&lt;/p&gt;
&lt;p&gt;Comença petit. De deu a cent mostres. Avaluador simple. Valida el bucle. Després escala.&lt;/p&gt;</content:encoded></item><item><title>Docker Sandbox permet als agents Copilot refactoritzar el vostre codi sense posar en risc la vostra màquina</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/copilot-docker-sandbox-agentic-refactoring/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/copilot-docker-sandbox-agentic-refactoring/</guid><description>Docker Sandbox ofereix als agents de GitHub Copilot una microVM segura per funcionar amb refactorització: sense sol·licituds de permís, sense risc per al vostre amfitrió. Heus aquí per què això ho canvia tot per a la modernització de.NET a gran escala.</description><content:encoded>&lt;p&gt;Si heu utilitzat el mode d&amp;rsquo;agent de Copilot per a qualsevol cosa més enllà de petites edicions, coneixeu el dolor. Cada escriptura de fitxers, cada ordre del terminal: un altre indicador de permís. Ara imagineu-ho fent servir 50 projectes. No és divertit.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;equip d&amp;rsquo;Azure acaba de publicar una publicació sobre &lt;a href="https://devblogs.microsoft.com/all-things-azure/best-of-both-worlds-for-agentic-refactoring-github-copilot-microvms-via-docker-sandbox/"&gt;Docker Sandbox for GitHub Copilot agents&lt;/a&gt;, i sincerament, aquesta és una de les millores d&amp;rsquo;eines d&amp;rsquo;agents més pràctiques que he vist. Utilitza microVMs per oferir a Copilot un entorn totalment aïllat on es pot desenredar: instal·lar paquets, executar compilacions, executar proves, sense tocar el vostre sistema amfitrió.&lt;/p&gt;
&lt;h2 id="què-us-ofereix-realment-docker-sandbox"&gt;Què us ofereix realment Docker Sandbox&lt;/h2&gt;
&lt;p&gt;La idea bàsica és senzilla: engegueu una microVM lleugera amb un entorn Linux complet, sincronitzeu-hi el vostre espai de treball i deixeu que l&amp;rsquo;agent Copilot operi lliurement a l&amp;rsquo;interior. Quan s&amp;rsquo;hagi acabat, torna a canviar la sincronització.&lt;/p&gt;
&lt;p&gt;Això és el que fa que sigui més que &amp;ldquo;executar coses en un contenidor&amp;rdquo;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sincronització bidireccional de l&amp;rsquo;espai de treball&lt;/strong&gt; que conserva camins absoluts. L&amp;rsquo;estructura del vostre projecte sembla idèntica dins del sandbox. No hi ha errors de compilació relacionats amb el camí.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dimoni Docker privat&lt;/strong&gt; que s&amp;rsquo;executa dins de la microVM. L&amp;rsquo;agent pot construir i executar contenidors sense muntar mai el sòcol Docker del vostre host. Això és un gran problema per a la seguretat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proxis de filtratge HTTP/HTTPS&lt;/strong&gt; que controlen a què pot arribar l&amp;rsquo;agent a la xarxa. Tu decideixes quins registres i punts finals es permeten. Atacs a la cadena de subministrament d&amp;rsquo;un canalla &lt;code&gt;npm install&lt;/code&gt; dins del sandbox? Bloquejat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mode YOLO&lt;/strong&gt; — sí, així l&amp;rsquo;anomenen. L&amp;rsquo;agent s&amp;rsquo;executa sense sol·licituds de permís perquè literalment no pot danyar el vostre amfitrió. Tota acció destructiva està continguda.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="per-què-els-desenvolupadorsnet-haurien-de-preocupar-se"&gt;Per què els desenvolupadors.NET haurien de preocupar-se&lt;/h2&gt;
&lt;p&gt;Penseu en el treball de modernització que tants equips s&amp;rsquo;enfronten ara mateix. Teniu una solució.NET Framework amb 30 projectes i l&amp;rsquo;heu de traslladar a.NET 9. Això són centenars de canvis de fitxers: fitxers de projecte, actualitzacions d&amp;rsquo;espais de noms, substitucions d&amp;rsquo;API, migracions NuGet.&lt;/p&gt;
&lt;p&gt;Amb Docker Sandbox, podeu apuntar un agent Copilot a un projecte, deixar-lo refactoritzar lliurement dins de la microVM, executar &lt;code&gt;dotnet build&lt;/code&gt; i &lt;code&gt;dotnet test&lt;/code&gt; per validar i acceptar només els canvis que funcionen realment. No hi ha cap risc que accidentalment destrueixi el vostre entorn de desenvolupament local mentre experimenteu.&lt;/p&gt;
&lt;p&gt;La publicació també descriu l&amp;rsquo;execució d&amp;rsquo;una &lt;strong&gt;flota d&amp;rsquo;agents paral·lels&lt;/strong&gt;, cadascun en el seu propi sandbox, abordant diferents projectes simultàniament. Per a grans solucions.NET o arquitectures de microserveis, això suposa un estalvi de temps enorme. Un agent per servei, tots en funcionament aïllat, tots validats de manera independent.&lt;/p&gt;
&lt;h2 id="langle-de-seguretat-és-important"&gt;L&amp;rsquo;angle de seguretat és important&lt;/h2&gt;
&lt;p&gt;Això és el que la majoria de la gent passa per alt: quan deixeu que un agent d&amp;rsquo;IA executi ordres arbitràries, hi confieu amb tota la vostra màquina. Docker Sandbox canvia aquest model. L&amp;rsquo;agent obté total autonomia dins d&amp;rsquo;un entorn d&amp;rsquo;ús. El servidor intermediari de xarxa garanteix que només es pot extreure de fonts aprovades. El vostre sistema de fitxers amfitrió, el dimoni Docker i les credencials no es toquen.&lt;/p&gt;
&lt;p&gt;Per als equips amb requisits de compliment, i això és la majoria de les botigues.NET empresarials, aquesta és la diferència entre &amp;ldquo;no podem utilitzar IA agència&amp;rdquo; i &amp;ldquo;podem adoptar-la de manera segura&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="per-emportar"&gt;Per emportar&lt;/h2&gt;
&lt;p&gt;Docker Sandbox resol la tensió fonamental de la codificació agentica: els agents necessiten llibertat per ser útils, però la llibertat a la vostra màquina amfitriona és perillosa. Les microVM us ofereixen tots dos. Si esteu planejant qualsevol refactorització o modernització de.NET a gran escala, val la pena configurar-la ara. La combinació de la intel·ligència de codi de Copilot amb un entorn d&amp;rsquo;execució segur és exactament el que els equips de producció estaven esperant.&lt;/p&gt;</content:encoded></item><item><title>On hauríeu d'allotjar els vostres agents d'IA a Azure? Una guia pràctica de decisions</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</guid><description>Azure ofereix sis maneres d'allotjar agents d'IA: des de contenidors en brut fins a agents allotjats de Foundry totalment gestionats. A continuació s'explica com triar l'adequat per a la vostra càrrega de treball.NET.</description><content:encoded>&lt;p&gt;Si esteu creant agents d&amp;rsquo;IA amb.NET ara mateix, probablement heu notat alguna cosa: hi ha * moltes * maneres d&amp;rsquo;allotjar-los a Azure. Container Apps, AKS, Functions, App Service, Foundry Agents, Foundry Hosted Agents, i tots semblen raonables fins que realment n&amp;rsquo;has de triar un. Microsoft acaba de publicar una &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;guia completa per a l&amp;rsquo;allotjament d&amp;rsquo;agents d&amp;rsquo;Azure AI&lt;/a&gt; que ho aclareix, i vull desglossar-ho des d&amp;rsquo;una perspectiva pràctica del desenvolupador.NET.&lt;/p&gt;
&lt;h2 id="les-sis-opcions-dun-cop-dull"&gt;Les sis opcions d&amp;rsquo;un cop d&amp;rsquo;ull&lt;/h2&gt;
&lt;p&gt;Així és com resumiria el paisatge:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opció&lt;/th&gt;
&lt;th&gt;El millor per&lt;/th&gt;
&lt;th&gt;Tu gestiones&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aplicacions de contenidors&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Control total del contenidor sense complexitat K8s&lt;/td&gt;
&lt;td&gt;Observabilitat, estat, cicle de vida&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;Compliment empresarial, multi-clúster, xarxes personalitzades&lt;/td&gt;
&lt;td&gt;Tot (aquest és el punt)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Funcions d&amp;rsquo;Azure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tasques d&amp;rsquo;agent de curta durada i impulsades per esdeveniments&lt;/td&gt;
&lt;td&gt;No gaire, veritat sense servidor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Servei d&amp;rsquo;aplicacions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents HTTP simples, trànsit previsible&lt;/td&gt;
&lt;td&gt;Desplegament, configuració d&amp;rsquo;escalat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agents de Foundry&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents opcionals de codi a través del portal/SDK&lt;/td&gt;
&lt;td&gt;Gairebé res&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agents allotjats de Foundry&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents de marc personalitzats amb infraestructures gestionades&lt;/td&gt;
&lt;td&gt;Només el vostre codi d&amp;rsquo;agent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Els quatre primers són càlculs de propòsit general: &lt;em&gt;podeu&lt;/em&gt; executar-hi agents, però no estaven dissenyats per a això. Els dos últims són nadius dels agents: entenen les converses, les trucades d&amp;rsquo;eines i els cicles de vida dels agents com a conceptes de primera classe.&lt;/p&gt;
&lt;h2 id="foundry-hosted-agents-el-lloc-ideal-per-als-desenvolupadors-dagentsnet"&gt;Foundry Hosted Agents: el lloc ideal per als desenvolupadors d&amp;rsquo;agents.NET&lt;/h2&gt;
&lt;p&gt;Aquí és el que em va cridar l&amp;rsquo;atenció. Els agents allotjats de Foundry se situen al centre: teniu la flexibilitat d&amp;rsquo;executar el vostre propi codi (nucli semàntic, marc d&amp;rsquo;agents, LangGraph, el que sigui), però la plataforma gestiona la infraestructura, l&amp;rsquo;observabilitat i la gestió de converses.&lt;/p&gt;
&lt;p&gt;La peça clau és l&amp;rsquo;&lt;strong&gt;Adaptador d&amp;rsquo;allotjament&lt;/strong&gt;: una capa d&amp;rsquo;abstracció fina que connecta el vostre marc d&amp;rsquo;agent amb la plataforma Foundry. Per a Microsoft Agent Framework, té aquest aspecte:&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;Aquesta és tota la vostra història d&amp;rsquo;allotjament. L&amp;rsquo;adaptador gestiona la traducció del protocol, la transmissió mitjançant esdeveniments enviats pel servidor, l&amp;rsquo;historial de converses i el seguiment d&amp;rsquo;OpenTelemetry, tot automàticament. Sense programari intermedi personalitzat, sense fontaneria manual.&lt;/p&gt;
&lt;h2 id="el-desplegament-és-realment-senzill"&gt;El desplegament és realment senzill&lt;/h2&gt;
&lt;p&gt;Abans he desplegat agents a Container Apps i funciona, però acabeu escrivint molt codi de cola per a la gestió de l&amp;rsquo;estat i l&amp;rsquo;observabilitat. Amb Hosted Agents i &lt;code&gt;azd&lt;/code&gt;, el desplegament és:&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;# Install the AI agent extension&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;# Init from a 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;# Build, push, deploy — done&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;Aquest únic &lt;code&gt;azd up&lt;/code&gt; crea el vostre contenidor, l&amp;rsquo;envia a ACR, subministra el projecte Foundry, desplega els punts finals del model i inicia el vostre agent. Cinc passos es van col·lapsar en una ordre.&lt;/p&gt;
&lt;h2 id="gestió-de-converses-integrada"&gt;Gestió de converses integrada&lt;/h2&gt;
&lt;p&gt;Aquesta és la peça que estalvia més temps en la producció. En lloc de crear el vostre propi magatzem d&amp;rsquo;estat de conversa, els agents allotjats ho gestionen de manera nativa:&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;# Create a persistent conversation&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;# First turn&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;# Second turn — context is preserved&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;No Redis. No hi ha botiga de sessions de Cosmos DB. No hi ha programari intermediari personalitzat per a la serialització de missatges. La plataforma només ho gestiona.&lt;/p&gt;
&lt;h2 id="el-meu-marc-de-decisió"&gt;El meu marc de decisió&lt;/h2&gt;
&lt;p&gt;Després de revisar les sis opcions, aquí teniu el meu model mental ràpid:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Necessites zero infraestructura?&lt;/strong&gt; → Agents de Foundry (portal/SDK, sense contenidors)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tens un codi d&amp;rsquo;agent personalitzat però vols un allotjament gestionat?&lt;/strong&gt; → Agents allotjats de Foundry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Necessiteu tasques d&amp;rsquo;agent de curta durada i basades en esdeveniments?&lt;/strong&gt; → Azure Functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Necessites el màxim control dels contenidors sense K8?&lt;/strong&gt; → Aplicacions de contenidors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Necessites un compliment estricte i múltiples clústers?&lt;/strong&gt; → AKS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Teniu un agent HTTP senzill amb trànsit previsible?&lt;/strong&gt; → Servei d&amp;rsquo;aplicacions&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Per a la majoria de desenvolupadors de.NET que creen amb Semantic Kernel o Microsoft Agent Framework, Hosted Agents és probablement el punt de partida adequat. Obteniu una escala a zero, OpenTelemetry integrada, gestió de converses i flexibilitat de marc, sense gestionar Kubernetes ni connectar la vostra pròpia pila d&amp;rsquo;observabilitat.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;El paisatge d&amp;rsquo;allotjament d&amp;rsquo;agents a Azure està madurant ràpidament. Si inicieu un nou projecte d&amp;rsquo;agent d&amp;rsquo;IA avui, m&amp;rsquo;agradaria considerar seriosament els agents allotjats de Foundry abans d&amp;rsquo;arribar a Container Apps o AKS per costum. La infraestructura gestionada estalvia temps real i el patró de l&amp;rsquo;adaptador d&amp;rsquo;allotjament us permet mantenir la vostra elecció de marc.&lt;/p&gt;
&lt;p&gt;Consulteu la &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;guia completa de Microsoft&lt;/a&gt; i el &lt;a href="https://github.com/microsoft-foundry/foundry-samples/tree/main/samples/python/hosted-agents"&gt;repositori de mostres de Foundry&lt;/a&gt; per obtenir exemples de treball.&lt;/p&gt;</content:encoded></item><item><title>Les habilitats d'agent a.NET s'acaben de ser molt flexibles</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</guid><description>El Microsoft Agent Framework ara admet tres maneres de crear habilitats: fitxers, classes i codi en línia, totes compostes a través d'un sol proveïdor. Heus aquí per què és important i com utilitzar-los.</description><content:encoded>&lt;p&gt;Si heu estat creant agents amb Microsoft Agent Framework, coneixeu l&amp;rsquo;exercici: definiu les habilitats, les connecteu a un proveïdor i deixeu que l&amp;rsquo;agent esbringui quina invocar. El que és nou és &lt;em&gt;com&lt;/em&gt; autors d&amp;rsquo;aquestes habilitats, i el salt de flexibilitat és important.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;última actualització introdueix tres patrons de creació personalitzats per a les habilitats d&amp;rsquo;agent: &lt;strong&gt;basat en fitxers&lt;/strong&gt;, &lt;strong&gt;basat en classes&lt;/strong&gt; i &lt;strong&gt;definit en codi en línia&lt;/strong&gt;. Els tres es connecten a un únic &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;, el que significa que podeu barrejar i combinar sense cap lògica d&amp;rsquo;encaminament ni codi de cola especial. Permeteu-me que us acompanyi a través de cadascuna i quan ho aconseguiu.&lt;/p&gt;
&lt;h2 id="habilitats-basades-en-fitxers-el-punt-de-partida"&gt;Habilitats basades en fitxers: el punt de partida&lt;/h2&gt;
&lt;p&gt;Les habilitats basades en fitxers són exactament el que sonen: un directori al disc amb un fitxer &lt;code&gt;SKILL.md&lt;/code&gt;, scripts opcionals i documents de referència. Penseu en això com la manera més senzilla de donar noves capacitats al vostre 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;El frontmatter &lt;code&gt;SKILL.md&lt;/code&gt; declara el nom i la descripció de l&amp;rsquo;habilitat, i la secció d&amp;rsquo;instruccions indica a l&amp;rsquo;agent com utilitzar els scripts i les referències:&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;A continuació, connecteu-lo amb &lt;code&gt;SubprocessScriptRunner.RunAsync&lt;/code&gt; per a l&amp;rsquo;execució de l&amp;rsquo;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;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 descobreix l&amp;rsquo;habilitat automàticament i invoca l&amp;rsquo;script de subministrament quan necessita comprovar l&amp;rsquo;estat del compte. Net i senzill.&lt;/p&gt;
&lt;h2 id="habilitats-basades-en-classe-enviament-mitjançant-nuget"&gt;Habilitats basades en classe: enviament mitjançant NuGet&lt;/h2&gt;
&lt;p&gt;Aquí és on es posa interessant per als equips. Les habilitats basades en classe es deriven de &lt;code&gt;AgentClassSkill&amp;lt;T&amp;gt;&lt;/code&gt; i utilitzen atributs com &lt;code&gt;[AgentSkillResource]&lt;/code&gt; i &lt;code&gt;[AgentSkillScript]&lt;/code&gt; perquè el marc ho descobreixi tot mitjançant la reflexió:&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;La bellesa aquí és que un equip pot empaquetar-ho com a paquet NuGet. L&amp;rsquo;afegiu al vostre projecte, el deixeu anar al constructor i funciona juntament amb les vostres habilitats basades en fitxers amb una coordinació zero:&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 dues habilitats es mostren a l&amp;rsquo;indicador del sistema de l&amp;rsquo;agent. L&amp;rsquo;agent decideix quin utilitzar en funció de la conversa, no cal cap codi d&amp;rsquo;encaminament.&lt;/p&gt;
&lt;h2 id="habilitats-en-línia-el-pont-ràpid"&gt;Habilitats en línia: el pont ràpid&lt;/h2&gt;
&lt;p&gt;Coneixeu aquell moment en què un altre equip està construint exactament l&amp;rsquo;habilitat que necessiteu, però no s&amp;rsquo;enviarà per a un sprint? &lt;code&gt;AgentInlineSkill&lt;/code&gt; és el teu 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;Afegiu-lo al constructor igual que els altres:&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;Quan finalment s&amp;rsquo;envia el paquet NuGet, canvieu l&amp;rsquo;habilitat en línia per la basada en classe. L&amp;rsquo;agent no sap la diferència.&lt;/p&gt;
&lt;p&gt;Però les habilitats en línia no són només per als ponts. També són l&amp;rsquo;opció correcta quan necessiteu generar habilitats de manera dinàmica en temps d&amp;rsquo;execució (penseu en una habilitat per unitat de negoci carregada des de la configuració) o quan un script s&amp;rsquo;ha de tancar a l&amp;rsquo;estat local que no pertany a un contenidor DI.&lt;/p&gt;
&lt;h2 id="aprovació-de-lscript-human-in-the-loop"&gt;Aprovació de l&amp;rsquo;script: human-in-the-loop&lt;/h2&gt;
&lt;p&gt;Per als desenvolupadors de.NET que creem agents de producció, aquesta és la part que realment desbloqueja les converses de desplegament. Alguns scripts tenen conseqüències reals: inscriure algú als beneficis, consultar la producció infra. Gireu &lt;code&gt;UseScriptApproval&lt;/code&gt; i l&amp;rsquo;agent s&amp;rsquo;aturarà abans d&amp;rsquo;executar qualsevol 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;Quan l&amp;rsquo;agent vol executar un script, torna una sol·licitud d&amp;rsquo;aprovació. La vostra aplicació recull la decisió (aprovar o rebutjar) i l&amp;rsquo;agent continua en conseqüència. En entorns regulats, aquesta és la diferència entre &amp;ldquo;podem desplegar això&amp;rdquo; i &amp;ldquo;legal diu que no&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="per-què-és-important-aquesta-combinació"&gt;Per què és important aquesta combinació&lt;/h2&gt;
&lt;p&gt;El poder real no és cap patró d&amp;rsquo;autor, sinó la composició. Pots:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Comença petit&lt;/strong&gt; amb una habilitat basada en fitxers, itera les instruccions i envia&amp;rsquo;l sense escriure C#&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Envia habilitats reutilitzables&lt;/strong&gt; com a paquets NuGet que altres equips poden afegir amb una línia&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rebre els buits&lt;/strong&gt; amb habilitats en línia quan necessiteu alguna cosa &lt;em&gt;ara&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filtreu els directoris d&amp;rsquo;habilitats compartits&lt;/strong&gt; amb predicats perquè el vostre agent només carregui el que hauria de fer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Afegiu supervisió humana&lt;/strong&gt; per als scripts que toquen els sistemes de producció&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tots ells es componen mitjançant &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;. Sense encaminament especial, sense lògica condicional, sense comprovacions de tipus d&amp;rsquo;habilitat.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Les habilitats d&amp;rsquo;agent a.NET ara tenen un model d&amp;rsquo;autoria realment flexible. Tant si sou un desenvolupador en solitari que dibuixa un prototip amb habilitats basades en fitxers com si un equip empresarial envia capacitats empaquetades mitjançant NuGet, els patrons s&amp;rsquo;ajusten. I el mecanisme d&amp;rsquo;aprovació de l&amp;rsquo;script fa que estigui llest per a la producció per a entorns on necessiteu aquest punt de control humà.&lt;/p&gt;
&lt;p&gt;Consulteu 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;anunci original&lt;/a&gt; per a la guia completa, la &lt;a href="https://learn.microsoft.com/en-us/agent-framework/agents/skills"&gt;documentació d&amp;rsquo;habilitats de l&amp;rsquo;agent&lt;/a&gt; a Microsoft Learn i les &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/02-agents/AgentSkills"&gt;mostres.NET a GitHub&lt;/a&gt; per fer-ho pràctica.&lt;/p&gt;</content:encoded></item><item><title>L'Azure MCP Server 2.0 s'acaba de caure: l'automatització del núvol agent autoallotjada és aquí</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>Azure MCP Server 2.0 es manté estable amb desplegaments remots autoallotjats, 276 eines en 57 serveis Azure i seguretat de nivell empresarial: això és el que importa per als desenvolupadors de.NET que creen fluxos de treball agents.</description><content:encoded>&lt;p&gt;Si darrerament heu estat creant alguna cosa amb MCP i Azure, probablement ja sabeu que l&amp;rsquo;experiència local funciona bé. Connecteu un servidor MCP, deixeu que el vostre agent d&amp;rsquo;IA parli amb els recursos d&amp;rsquo;Azure, seguiu endavant. Però, en el moment que necessiteu compartir aquesta configuració amb un equip? Allà va ser on les coses es van complicar.&lt;/p&gt;
&lt;p&gt;Ja no. Servidor MCP d&amp;rsquo;Azure &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;acaba d&amp;rsquo;aconseguir 2.0 estable&lt;/a&gt;, i la funció de titular és exactament el que els equips empresarials han demanat: &lt;strong&gt;suport del servidor MCP remot autoallotjat&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="què-és-azure-mcp-server"&gt;Què és Azure MCP Server?&lt;/h2&gt;
&lt;p&gt;Actualització ràpida. Azure MCP Server implementa l&amp;rsquo;especificació &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;Model Context Protocol&lt;/a&gt; i exposa les capacitats d&amp;rsquo;Azure com a eines estructurades i detectables que els agents d&amp;rsquo;IA poden invocar. Penseu en això com un pont estandarditzat entre el vostre agent i Azure: subministrament, desplegament, supervisió, diagnòstic, tot mitjançant una interfície coherent.&lt;/p&gt;
&lt;p&gt;Les xifres parlen per si soles: &lt;strong&gt;276 eines MCP en 57 serveis Azure&lt;/strong&gt;. Això és una cobertura seriosa.&lt;/p&gt;
&lt;h2 id="el-gran-problema-desplegaments-remots-autoallotjats"&gt;El gran problema: desplegaments remots autoallotjats&lt;/h2&gt;
&lt;p&gt;Aquí està la cosa. Executar MCP localment a la vostra màquina està bé per a desenvolupament i experiments. Però en un escenari d&amp;rsquo;equip real, necessiteu:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Accés compartit per a desenvolupadors i sistemes d&amp;rsquo;agents interns&lt;/li&gt;
&lt;li&gt;Configuració centralitzada (context de l&amp;rsquo;arrendatari, valors predeterminats de subscripció, telemetria)&lt;/li&gt;
&lt;li&gt;Xarxa empresarial i límits polítics&lt;/li&gt;
&lt;li&gt;Integració en pipelines CI/CD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 aborda tot això. Podeu implementar-lo com a servei intern gestionat de manera centralitzada amb transport basat en HTTP, autenticació adequada i govern coherent.&lt;/p&gt;
&lt;p&gt;Per a l&amp;rsquo;autenticació, obteniu dues opcions sòlides:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Identitat gestionada&lt;/strong&gt;: quan s&amp;rsquo;executa al costat 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;Flux en nom de (OBO)&lt;/strong&gt;: delegació d&amp;rsquo;OpenID Connect que crida a les API d&amp;rsquo;Azure mitjançant el context de l&amp;rsquo;usuari iniciat&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Aquest flux OBO és especialment interessant per als desenvolupadors de.NET. Vol dir que els vostres fluxos de treball d&amp;rsquo;agent poden funcionar amb els permisos reals de l&amp;rsquo;usuari, no amb un compte de servei amb privilegis excessius. Principi del mínim privilegi, integrat.&lt;/p&gt;
&lt;h2 id="enduriment-de-la-seguretat"&gt;Enduriment de la seguretat&lt;/h2&gt;
&lt;p&gt;Això no és només una versió de funcions, també és una de seguretat. La versió 2.0 afegeix:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validació de punt final més forta&lt;/li&gt;
&lt;li&gt;Proteccions contra patrons d&amp;rsquo;injecció en eines orientades a la consulta&lt;/li&gt;
&lt;li&gt;Controls d&amp;rsquo;aïllament més estrictes per a entorns de desenvolupament&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si voleu exposar MCP com a servei compartit, aquestes garanties són importants. Molts.&lt;/p&gt;
&lt;h2 id="on-el-pots-utilitzar"&gt;On el pots utilitzar?&lt;/h2&gt;
&lt;p&gt;La història de la compatibilitat del client és àmplia. Azure MCP Server 2.0 funciona amb:&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;Autònom&lt;/strong&gt;: servidor local per a configuracions senzilles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control remot autoallotjat&lt;/strong&gt;: la nova estrella de la 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A més, hi ha suport sobirà al núvol per al govern d&amp;rsquo;Azure dels Estats Units i Azure operat per 21Vianet, que és fonamental per als desplegaments regulats.&lt;/p&gt;
&lt;h2 id="per-què-això-és-important-per-als-desenvolupadors-denet"&gt;Per què això és important per als desenvolupadors de.NET&lt;/h2&gt;
&lt;p&gt;Si esteu creant aplicacions agents amb.NET, ja sigui el nucli semàntic, el Microsoft Agent Framework o la vostra pròpia orquestració, Azure MCP Server 2.0 us ofereix una manera preparada per a la producció de permetre que els vostres agents interactuïn amb la infraestructura Azure. No hi ha embolcalls REST personalitzats. No hi ha patrons d&amp;rsquo;integració específics del servei. Només MCP.&lt;/p&gt;
&lt;p&gt;Combinat amb 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 fluida per a aplicacions MCP&lt;/a&gt; que va caure fa uns dies, l&amp;rsquo;ecosistema.NET MCP està madurant ràpidament.&lt;/p&gt;
&lt;h2 id="primers-passos"&gt;Primers passos&lt;/h2&gt;
&lt;p&gt;Tria el teu camí:&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; — codi font, documents, tot&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/docker"&gt;Imatge Docker&lt;/a&gt;&lt;/strong&gt; — desplegament en contenidors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;Extensió de codi VS&lt;/a&gt;&lt;/strong&gt; — Integració IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;Guia d&amp;rsquo;allotjament personal&lt;/a&gt;&lt;/strong&gt;: la funció insígnia 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Azure MCP Server 2.0 és exactament el tipus d&amp;rsquo;actualització d&amp;rsquo;infraestructura que no sembla cridaner en una demostració, però que ho canvia tot a la pràctica. MCP remot autoallotjat amb autenticació adequada, reforç de la seguretat i suport sobirà del núvol significa que MCP està preparat per a equips reals que creen fluxos de treball reals a l&amp;rsquo;Azure. Si heu estat esperant el senyal &amp;ldquo;preparat per a l&amp;rsquo;empresa&amp;rdquo;, això és tot.&lt;/p&gt;</content:encoded></item><item><title>.NET Aspire 13.2 vol ser el millor amic del vostre agent d'IA</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</guid><description>Aspire 13.2 s'inclou tot en el desenvolupament agent: sortida CLI estructurada, execucions aïllades, entorns de curació automàtica i dades completes d'OpenTelemetry perquè els vostres agents d'IA puguin crear, executar i observar les vostres aplicacions.</description><content:encoded>&lt;p&gt;Coneixeu aquell moment en què el vostre agent de codificació d&amp;rsquo;IA escriu un codi sòlid, us emocioneu i després es desfà completament intentant &lt;em&gt;executar&lt;/em&gt; la cosa? Conflictes de ports, processos fantasma, variables d&amp;rsquo;entorn incorrectes: de sobte, el vostre agent està cremant fitxes per resoldre problemes d&amp;rsquo;inici en lloc de crear funcions.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;equip d&amp;rsquo;Aspire acaba de publicar una &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;publicació molt atenta&lt;/a&gt; sobre exactament aquest problema, i la seva resposta és convincent: Aspire 13.2 està dissenyat no només per a humans, sinó per a agents d&amp;rsquo;IA.&lt;/p&gt;
&lt;h2 id="el-problema-és-real"&gt;El problema és real&lt;/h2&gt;
&lt;p&gt;Els agents d&amp;rsquo;IA són increïbles per escriure codi. Però enviar una aplicació de pila completa que funcioni implica molt més que generar fitxers. Heu d&amp;rsquo;iniciar els serveis en l&amp;rsquo;ordre correcte, gestionar ports, establir variables d&amp;rsquo;entorn, connectar bases de dades i obtenir comentaris quan les coses es trenquin. Ara mateix, la majoria d&amp;rsquo;agents gestionen tot això mitjançant prova i error: executant ordres, llegint la sortida d&amp;rsquo;error, tornant-ho a provar.&lt;/p&gt;
&lt;p&gt;Superposem instruccions de Markdown, habilitats personalitzades i indicacions per intentar guiar-les, però són imprevisibles, no es poden compilar i costen fitxes només per analitzar-les. L&amp;rsquo;equip d&amp;rsquo;Aspire va clavar la visió bàsica: els agents necessiten &lt;strong&gt;compiladors i API estructurades&lt;/strong&gt;, no més Markdown.&lt;/p&gt;
&lt;h2 id="aspira-com-a-infraestructura-dagents"&gt;Aspira com a infraestructura d&amp;rsquo;agents&lt;/h2&gt;
&lt;p&gt;Això és el que aporta Aspire 13.2 a la taula de desenvolupament agent:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La vostra pila sencera en codi escrit.&lt;/strong&gt; L&amp;rsquo;AppHost defineix la vostra topologia completa: API, frontend, base de dades, memòria cau, en TypeScript o C# compilable:&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;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;./.modules/aspire.js&amp;#39;&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="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;builder&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;createBuilder&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="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;postgres&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;addPostgres&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;addDatabase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;catalog&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="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cache&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;addRedis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cache&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="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&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&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;addNodeApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;src/index.ts&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;env&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;PORT&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;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;postgres&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;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cache&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="nx"&gt;builder&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;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;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&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;waitFor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&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="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&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;Un agent pot llegir-ho per entendre la topologia de l&amp;rsquo;aplicació, afegir recursos, connectar connexions i &lt;em&gt;crear per verificar&lt;/em&gt;. El compilador li indica immediatament si alguna cosa no funciona. Sense endevinar, sense prova i error amb fitxers de configuració.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Una comanda per governar-los tots.&lt;/strong&gt; En lloc d&amp;rsquo;agents que fan malabars amb &lt;code&gt;docker compose up&lt;/code&gt;, &lt;code&gt;npm run dev&lt;/code&gt; i scripts d&amp;rsquo;inici de bases de dades, tot és només &lt;code&gt;aspire start&lt;/code&gt;. Tots els recursos s&amp;rsquo;inicien en l&amp;rsquo;ordre correcte, als ports adequats, amb la configuració correcta. Els processos de llarga durada tampoc pengen l&amp;rsquo;agent: Aspire els gestiona.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mode aïllat per a agents paral·lels.&lt;/strong&gt; Amb &lt;code&gt;--isolated&lt;/code&gt;, cada execució d&amp;rsquo;Aspire té els seus propis ports aleatoris i secrets d&amp;rsquo;usuari separats. Hi ha diversos agents treballant en els arbres de treball de git? No xocaran. Això és enorme per a eines com els agents de fons de VS Code que fan girar entorns paral·lels.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ulls d&amp;rsquo;agent a través de la telemetria.&lt;/strong&gt; Aquí és on es fa realment potent. L&amp;rsquo;Aspire CLI exposa dades completes d&amp;rsquo;OpenTelemetry durant el desenvolupament: traces, mètriques, registres estructurats. El vostre agent no només llegeix la sortida de la consola i espera el millor. Pot rastrejar una sol·licitud fallida entre serveis, perfilar punts finals lents i identificar exactament on es trenquen les coses. Això és observabilitat de grau de producció en el bucle de desenvolupament.&lt;/p&gt;
&lt;h2 id="lanalogia-del-para-xocs-de-bitlles"&gt;L&amp;rsquo;analogia del para-xocs de bitlles&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;equip d&amp;rsquo;Aspire utilitza una gran analogia: penseu en Aspire com a para-xocs de la pista de bitlles per als agents d&amp;rsquo;IA. Si l&amp;rsquo;agent no és perfecte (i no ho serà), els para-xocs eviten que llanci boles de canaló. La definició de pila evita la configuració incorrecta, el compilador detecta errors, la CLI gestiona la gestió del procés i la telemetria proporciona el bucle de retroalimentació.&lt;/p&gt;
&lt;p&gt;Combineu-ho amb alguna cosa com Playwright CLI i el vostre agent pot &lt;em&gt;utilitzar&lt;/em&gt; la vostra aplicació: fent clic a través dels fluxos, comprovant el DOM, veient coses trencades a la telemetria, arreglant el codi, reiniciant i provant de nou. Construir, executar, observar, arreglar. Aquest és el bucle de desenvolupament autònom que hem estat perseguint.&lt;/p&gt;
&lt;h2 id="primers-passos"&gt;Primers passos&lt;/h2&gt;
&lt;p&gt;Nou a Aspire? Instal·leu la CLI des de &lt;a href="https://get.aspire.dev"&gt;get.aspire.dev&lt;/a&gt; i seguiu la &lt;a href="https://aspire.dev/get-started/first-app"&gt;guia d&amp;rsquo;inici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ja fas servir Aspire? Executeu &lt;code&gt;aspire update --self&lt;/code&gt; per obtenir 13.2 i, a continuació, indiqueu el vostre agent de codificació preferit al vostre repositori. Potser us sorprendrà quant s&amp;rsquo;avança amb les baranes d&amp;rsquo;Aspire al seu lloc.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 ja no és només un marc d&amp;rsquo;aplicacions distribuïdes, sinó que s&amp;rsquo;està convertint en una infraestructura d&amp;rsquo;agent essencial. Les definicions de pila estructurades, l&amp;rsquo;inici d&amp;rsquo;un sol comandament, les execucions paral·leles aïllades i la telemetria en temps real ofereixen als agents d&amp;rsquo;IA exactament el que necessiten per passar d&amp;rsquo;escriure codi a enviar aplicacions.&lt;/p&gt;
&lt;p&gt;Llegiu la &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;publicació completa&lt;/a&gt; de l&amp;rsquo;equip d&amp;rsquo;Aspire per veure tots els detalls i vídeos de demostració.&lt;/p&gt;</content:encoded></item><item><title>Connecteu els vostres servidors MCP a les funcions d'Azure amb els agents de Foundry: aquí teniu com</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</guid><description>Creeu el vostre servidor MCP una vegada, implementeu-lo a Azure Functions i connecteu-lo als agents de Microsoft Foundry amb l'autenticació adequada. Les vostres eines funcionen a tot arreu: VS Code, Cursor i ara agents d'IA empresarials.</description><content:encoded>&lt;p&gt;Aquí hi ha una cosa que m&amp;rsquo;encanta de l&amp;rsquo;ecosistema MCP: creeu el vostre servidor una vegada i funciona a tot arreu. VS Code, Visual Studio, Cursor, ChatGPT: cada client MCP pot descobrir i utilitzar les vostres eines. Ara, Microsoft afegeix un altre consumidor a aquesta llista: agents de Foundry.&lt;/p&gt;
&lt;p&gt;Lily Ma de l&amp;rsquo;equip d&amp;rsquo;Azure SDK &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;va publicar una guia pràctica&lt;/a&gt; sobre la connexió de servidors MCP desplegats a Azure Functions amb agents de Microsoft Foundry. Si ja teniu un servidor MCP, això és pur valor afegit, no cal reconstruir-lo.&lt;/p&gt;
&lt;h2 id="per-què-aquesta-combinació-té-sentit"&gt;Per què aquesta combinació té sentit&lt;/h2&gt;
&lt;p&gt;Azure Functions us ofereix una infraestructura escalable, una autenticació integrada i una facturació sense servidor per allotjar servidors MCP. Microsoft Foundry us ofereix agents d&amp;rsquo;IA que poden raonar, planificar i prendre accions. Connectar les dues significa que les vostres eines personalitzades (consultar una base de dades, trucar a una API empresarial, executar una lògica de validació) esdevenen capacitats que els agents d&amp;rsquo;IA empresarials poden descobrir i utilitzar de manera autònoma.&lt;/p&gt;
&lt;p&gt;El punt clau: el vostre servidor MCP es manté igual. Només esteu afegint Foundry com un altre consumidor. Les mateixes eines que funcionen a la configuració de VS Code ara alimenten un agent d&amp;rsquo;IA amb el qual interactuen el vostre equip o clients.&lt;/p&gt;
&lt;h2 id="opcions-dautenticació"&gt;Opcions d&amp;rsquo;autenticació&lt;/h2&gt;
&lt;p&gt;Aquí és on la publicació realment afegeix valor. Quatre mètodes d&amp;rsquo;autenticació segons el vostre escenari:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mètode&lt;/th&gt;
&lt;th&gt;Cas d&amp;rsquo;ús&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Basat en clau&lt;/strong&gt; (per defecte)&lt;/td&gt;
&lt;td&gt;Desenvolupament o servidors sense autenticació Entra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Entrada de Microsoft&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Producció amb identitats gestionades&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transmissió d&amp;rsquo;identitat OAuth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Producció on cada usuari s&amp;rsquo;autentica individualment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;No autenticat&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Desenvolupament/proves o dades públiques només&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Per a la producció, el camí recomanat és Microsoft Entra amb la identitat de l&amp;rsquo;agent. El pas d&amp;rsquo;identitat d&amp;rsquo;OAuth és per quan el context de l&amp;rsquo;usuari importa: l&amp;rsquo;agent demana als usuaris que iniciïn sessió i cada sol·licitud porta el testimoni propi de l&amp;rsquo;usuari.&lt;/p&gt;
&lt;h2 id="configurant-lo"&gt;Configurant-lo&lt;/h2&gt;
&lt;p&gt;El flux d&amp;rsquo;alt nivell:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Implementeu el vostre servidor MCP a Azure Functions&lt;/strong&gt;: mostres disponibles per a &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;.NET&lt;/a&gt;, Python, TypeScript i Java&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Activa l&amp;rsquo;autenticació MCP integrada&lt;/strong&gt; a l&amp;rsquo;aplicació de funcions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obteniu l&amp;rsquo;URL del vostre punt final&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;Afegiu el servidor MCP com a eina a Foundry&lt;/strong&gt;: aneu al vostre agent al portal, afegiu una eina MCP nova, proporcioneu el punt final i les credencials.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A continuació, proveu-ho al parc infantil de l&amp;rsquo;Agent Builder enviant un missatge que activaria una de les vostres eines.&lt;/p&gt;
&lt;h2 id="la-meva-opinió"&gt;La meva opinió&lt;/h2&gt;
&lt;p&gt;La història de la composició aquí s&amp;rsquo;està fent molt forta. Creeu el vostre servidor MCP una vegada a.NET (o Python, TypeScript, Java), implementeu-lo a Azure Functions i tots els clients compatibles amb MCP el podran utilitzar: eines de codificació, aplicacions de xat i ara agents d&amp;rsquo;IA empresarials. Aquest és un patró &amp;ldquo;Escriu una vegada, utilitza a tot arreu&amp;rdquo; que realment funciona.&lt;/p&gt;
&lt;p&gt;Per als desenvolupadors de.NET específicament, l&amp;rsquo;&lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;extensió MCP d&amp;rsquo;Azure Functions&lt;/a&gt; ho fa senzill. Definiu les vostres eines com a Azure Functions, les implementeu i disposeu d&amp;rsquo;un servidor MCP de nivell de producció amb tota la seguretat i escala que ofereix Azure Functions.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Si teniu eines MCP que s&amp;rsquo;executen a Azure Functions, connectar-les als agents de Foundry és una victòria ràpida: les vostres eines personalitzades es converteixen en capacitats d&amp;rsquo;IA empresarial amb una autenticació adequada i sense canvis de codi al propi servidor.&lt;/p&gt;
&lt;p&gt;Llegiu la &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;guia completa&lt;/a&gt; per obtenir instruccions pas a pas sobre cada mètode d&amp;rsquo;autenticació i consulteu la &lt;a href="https://learn.microsoft.com/azure/azure-functions/functions-mcp-foundry-tools?tabs=entra%2Cmcp-extension%2Cfoundry"&gt;documentació detallada&lt;/a&gt; per a les configuracions de producció.&lt;/p&gt;</content:encoded></item><item><title>Creació d'interfícies d'usuari multiagent en temps real que no semblin com una caixa negra</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</guid><description>AG-UI i Microsoft Agent Framework s'uneixen per oferir als fluxos de treball multiagent una interfície adequada, amb transmissió en temps real, aprovacions humanes i visibilitat total del que estan fent els vostres agents.</description><content:encoded>&lt;p&gt;Això és el que passa amb els sistemes multiagent: tenen un aspecte increïble a les demostracions. Tres agents que passen treballant, resolent problemes, prenent decisions. Aleshores intentes posar-ho davant dels usuaris reals i&amp;hellip; silenci. Un indicador de gir. No hi ha idea de quin agent està fent què o per què el sistema està en pausa. Això no és un producte, és un problema de confiança.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;equip de Microsoft Agent Framework acaba de publicar una &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;revisió fantàstica&lt;/a&gt; sobre la combinació de fluxos de treball MAF amb &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;AG-UI&lt;/a&gt;, un protocol obert per a esdeveniments d&amp;rsquo;execució d&amp;rsquo;agents de transmissió a una interfície sobre esdeveniments enviats pel servidor. I sincerament? Aquest és el tipus de pont que hem trobat a faltar.&lt;/p&gt;
&lt;h2 id="per-què-això-és-important-per-als-desenvolupadors-denet"&gt;Per què això és important per als desenvolupadors de.NET&lt;/h2&gt;
&lt;p&gt;Si esteu creant aplicacions basades en intel·ligència artificial, probablement heu tocat aquest mur. La vostra orquestració de fons funciona molt bé: els agents s&amp;rsquo;entreguen, les eines es disparen i es prenen decisions. Però la interfície no té ni idea del que passa darrere de les escenes. AG-UI ho soluciona mitjançant la definició d&amp;rsquo;un protocol estàndard per als esdeveniments de l&amp;rsquo;agent de transmissió (penseu a &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;) directament a la vostra capa d&amp;rsquo;IU a través de SSE.&lt;/p&gt;
&lt;p&gt;La demostració que van crear és un flux de treball d&amp;rsquo;atenció al client amb tres agents: un agent de triatge que encamina les sol·licituds, un agent de reemborsament que gestiona els diners i un agent de comandes que gestiona les substitucions. Cada agent té les seves pròpies eines i la topologia de traspàs es defineix explícitament: no hi ha vibracions de &amp;ldquo;esbrinar-ho a partir del missatge&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="la-topologia-de-traspàs-és-la-veritable-estrella"&gt;La topologia de traspàs és la veritable estrella&lt;/h2&gt;
&lt;p&gt;El que em va cridar l&amp;rsquo;atenció és com &lt;code&gt;HandoffBuilder&lt;/code&gt; us permet declarar un gràfic d&amp;rsquo;encaminament dirigit entre 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;Cada &lt;code&gt;add_handoff&lt;/code&gt; crea una vora dirigida amb una descripció en llenguatge natural. El marc genera eines de transferència per a cada agent basant-se en aquesta topologia. Per tant, les decisions d&amp;rsquo;encaminament es basen en la vostra estructura d&amp;rsquo;orquestració, no només en el que el LLM vulgui fer. Això és un gran negoci per a la fiabilitat de la producció.&lt;/p&gt;
&lt;h2 id="human-in-the-loop-que-realment-funciona"&gt;Human-in-the-loop que realment funciona&lt;/h2&gt;
&lt;p&gt;La demostració mostra dos patrons d&amp;rsquo;interrupció que necessita qualsevol aplicació d&amp;rsquo;agent del món real:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L&amp;rsquo;aprovació de l&amp;rsquo;eina s&amp;rsquo;interromp&lt;/strong&gt;: quan un agent truca a una eina marcada amb &lt;code&gt;approval_mode=&amp;quot;always_require&amp;quot;&lt;/code&gt;, el flux de treball s&amp;rsquo;atura i emet un esdeveniment. La interfície representa un modal d&amp;rsquo;aprovació amb el nom de l&amp;rsquo;eina i els arguments. No hi ha bucles de reintent de gravació de testimonis, només un flux net de pausa, aprovació i reinici.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La sol·licitud d&amp;rsquo;informació s&amp;rsquo;interromp&lt;/strong&gt;: quan un agent necessita més context de l&amp;rsquo;usuari (com ara un identificador de comanda), s&amp;rsquo;atura i pregunta. La interfície mostra la pregunta, l&amp;rsquo;usuari respon i l&amp;rsquo;execució es reprèn exactament des d&amp;rsquo;on es va aturar.&lt;/p&gt;
&lt;p&gt;Tots dos patrons es transmeten com a esdeveniments AG-UI estàndard, de manera que la vostra interfície no necessita lògica personalitzada per agent; només representa qualsevol esdeveniment que passi a través de la connexió SSE.&lt;/p&gt;
&lt;h2 id="el-cablejat-és-sorprenentment-senzill"&gt;El cablejat és sorprenentment senzill&lt;/h2&gt;
&lt;p&gt;La integració entre MAF i AG-UI és una única trucada de funció:&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;El &lt;code&gt;workflow_factory&lt;/code&gt; crea un flux de treball nou per fil, de manera que cada conversa té un estat aïllat. El punt final gestiona tota la fontaneria SSE automàticament. Si ja esteu utilitzant FastAPI (o podeu afegir-lo com a capa lleugera), això és gairebé zero fricció.&lt;/p&gt;
&lt;h2 id="la-meva-opinió"&gt;La meva opinió&lt;/h2&gt;
&lt;p&gt;Per als desenvolupadors de.NET, la pregunta immediata és: &amp;ldquo;Puc fer això en C#?&amp;rdquo; L&amp;rsquo;Agent Framework està disponible tant per a.NET com per a Python, i el protocol AG-UI és independent de l&amp;rsquo;idioma (només és SSE). Així, mentre que aquesta demostració específica utilitza Python i FastAPI, el patró es tradueix directament. Podeu connectar una API mínima ASP.NET Core amb punts finals SSE seguint el mateix esquema d&amp;rsquo;esdeveniments AG-UI.&lt;/p&gt;
&lt;p&gt;El més important és que les interfícies d&amp;rsquo;usuari multiagent s&amp;rsquo;estan convertint en una preocupació de primera classe, no en una idea posterior. Si esteu creant qualsevol cosa on els agents interactuen amb humans (atenció al client, fluxos de treball d&amp;rsquo;aprovació, processament de documents), aquesta combinació d&amp;rsquo;orquestració MAF i transparència AG-UI és el patró a seguir.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;AG-UI + Microsoft Agent Framework us ofereix el millor dels dos mons: una robusta orquestració multiagent al backend i visibilitat en temps real al frontend. No més interaccions d&amp;rsquo;agent de caixa negra.&lt;/p&gt;
&lt;p&gt;Fes una ullada a la &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;revisió completa&lt;/a&gt; i al &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;repositori del protocol AG-UI&lt;/a&gt; per aprofundir.&lt;/p&gt;</content:encoded></item><item><title>Les aplicacions MCP obtenen una API fluida: creeu interfícies d'usuari d'eines d'IA rica a.NET amb tres passos</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/</guid><description>La nova API de configuració fluida per a aplicacions MCP a Azure Functions us permet convertir qualsevol eina.NET MCP en una aplicació completa amb vistes, permisos i polítiques de CSP en poques línies de codi.</description><content:encoded>&lt;p&gt;Les eines MCP són excel·lents per oferir capacitats als agents d&amp;rsquo;IA. Però, què passa si la vostra eina ha de mostrar alguna cosa a l&amp;rsquo;usuari: un tauler, un formulari, una visualització interactiva? Aquí és on entren les aplicacions MCP i són molt més fàcils de crear.&lt;/p&gt;
&lt;p&gt;Lilian Kasem de l&amp;rsquo;equip de l&amp;rsquo;SDK d&amp;rsquo;Azure &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;va presentar la nova API de configuració fluida&lt;/a&gt; per a les aplicacions MCP a.NET Azure Functions, i és el tipus de millora de l&amp;rsquo;experiència dels desenvolupadors que us fa preguntar-vos per què no sempre va ser tan senzill.&lt;/p&gt;
&lt;h2 id="què-són-les-aplicacions-mcp"&gt;Què són les aplicacions MCP?&lt;/h2&gt;
&lt;p&gt;Les aplicacions MCP amplien el protocol de context del model deixant que les eines portin les seves pròpies vistes d&amp;rsquo;interfície d&amp;rsquo;usuari, actius estàtics i controls de seguretat. En lloc de només retornar text, la vostra eina MCP pot representar experiències HTML completes (taulers interactius, visualitzacions de dades, formularis de configuració), tot això invocable pels agents d&amp;rsquo;IA i presentat als usuaris pels clients MCP.&lt;/p&gt;
&lt;p&gt;El problema va ser que el cablejat de tot això manualment requeria conèixer íntimament les especificacions MCP: &lt;code&gt;ui://&lt;/code&gt; URI, tipus de mime especials, coordinació de metadades entre eines i recursos. No és difícil, però complicat.&lt;/p&gt;
&lt;h2 id="lapi-fluida-en-tres-passos"&gt;L&amp;rsquo;API fluida en tres passos&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Pas 1: defineix la teva funció.&lt;/strong&gt; Només una eina MCP estàndard d&amp;rsquo;Azure Functions:&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="na"&gt;[Function(nameof(HelloApp))]&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;HelloApp&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="na"&gt; [McpToolTrigger(&amp;#34;HelloApp&amp;#34;, &amp;#34;A simple MCP App that says hello.&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ToolInvocationContext&lt;/span&gt; &lt;span class="n"&gt;context&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;return&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Hello from app&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;&lt;strong&gt;Pas 2: promocioneu-lo a una aplicació MCP.&lt;/strong&gt; A l&amp;rsquo;inici del vostre programa:&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;ConfigureMcpTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;HelloApp&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;AsMcpApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;app&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;WithView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;assets/hello-app.html&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;WithTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello App&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;WithPermissions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpAppPermissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClipboardWrite&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="n"&gt;McpAppPermissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClipboardRead&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;WithCsp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csp&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="n"&gt;csp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AllowBaseUri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://www.microsoft.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 class="n"&gt;ConnectTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://www.microsoft.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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Pas 3: afegiu la vostra vista HTML.&lt;/strong&gt; Creeu &lt;code&gt;assets/hello-app.html&lt;/code&gt; amb la interfície d&amp;rsquo;usuari que necessiteu.&lt;/p&gt;
&lt;p&gt;Això és tot. L&amp;rsquo;API fluida gestiona tota la fontaneria d&amp;rsquo;especificacions MCP: genera la funció de recursos sintètics, estableix el tipus de mime correcte, injecta les metadades que connecten l&amp;rsquo;eina a la seva vista.&lt;/p&gt;
&lt;h2 id="la-superfície-de-lapi-està-ben-dissenyada"&gt;La superfície de l&amp;rsquo;API està ben dissenyada&lt;/h2&gt;
&lt;p&gt;Algunes coses que m&amp;rsquo;agraden molt:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les fonts de visualització són flexibles.&lt;/strong&gt; Podeu publicar HTML des de fitxers al disc o inserir recursos directament al vostre conjunt per a desplegaments autònoms:&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;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpViewSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;assets/my-view.html&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;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpViewSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromEmbeddedResource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;MyApp.Resources.view.html&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;&lt;strong&gt;CSP es pot redactar.&lt;/strong&gt; Llista de permisos explícita que els orígens de la teva aplicació necessita, seguint els principis de privilegis mínims. Truqueu a &lt;code&gt;WithCsp&lt;/code&gt; diverses vegades i els orígens s&amp;rsquo;acumulen:&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithCsp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csp&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="n"&gt;csp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConnectTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://api.example.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 class="n"&gt;LoadResourcesFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://cdn.example.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 class="n"&gt;AllowFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://youtube.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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Control de visibilitat.&lt;/strong&gt; Podeu fer que una eina només sigui visible per al LLM, només per a la interfície d&amp;rsquo;usuari de l&amp;rsquo;amfitrió o ambdues. Voleu una eina que només representi la interfície d&amp;rsquo;usuari i que el model no l&amp;rsquo;hagi de cridar? Fàcil:&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithVisibility&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpVisibility&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// UI-only, hidden from the model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="primers-passos"&gt;Primers passos&lt;/h2&gt;
&lt;p&gt;Afegeix el paquet de previsualització:&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 Microsoft.Azure.Functions.Worker.Extensions.Mcp --version 1.5.0-preview.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si ja esteu creant eines MCP amb Azure Functions, això és només una actualització del paquet. El &lt;a href="https://learn.microsoft.com/azure/azure-functions/scenario-mcp-apps?tabs=bash%2Clinux&amp;amp;pivots=programming-language-csharp"&gt;inici ràpid de les aplicacions MCP&lt;/a&gt; és el millor lloc per començar si sou nou al concepte.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Les aplicacions MCP són un dels desenvolupaments més interessants de l&amp;rsquo;espai d&amp;rsquo;eines d&amp;rsquo;IA: eines que no només * fan coses * sinó que poden * mostrar coses * als usuaris. L&amp;rsquo;API fluida elimina la complexitat del protocol i us permet centrar-vos en allò que importa: la lògica de l&amp;rsquo;eina i la seva interfície d&amp;rsquo;usuari.&lt;/p&gt;
&lt;p&gt;Llegiu la &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;publicació completa&lt;/a&gt; per obtenir la referència completa de l&amp;rsquo;API i els exemples.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Foundry Març de 2026: GPT-5.4, Agent Service GA i l'SDK Refresh que ho canvia tot</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</guid><description>L'actualització de març de 2026 de Microsoft Foundry és massiva: Agent Service arriba a GA, GPT-5.4 aporta un raonament fiable, l'SDK azure-ai-projects es manté estable en tots els idiomes i Fireworks AI porta models oberts a Azure.</description><content:encoded>&lt;p&gt;Les publicacions mensuals &amp;ldquo;Què hi ha de nou a Microsoft Foundry&amp;rdquo; solen ser una barreja de millores incrementals i la funció de titular ocasional. La &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;edició de març de 2026&lt;/a&gt;? Es tracta bàsicament de totes les funcions dels titulars. El servei d&amp;rsquo;agent de Foundry passa a GA, el GPT-5.4 s&amp;rsquo;envia per a la producció, l&amp;rsquo;SDK obté una versió estable important i Fireworks AI aporta la inferència de model obert a Azure. Permeteu-me desglossar el que importa per als desenvolupadors de.NET.&lt;/p&gt;
&lt;h2 id="el-servei-dagent-de-foundry-està-llest-per-a-la-producció"&gt;El servei d&amp;rsquo;agent de Foundry està llest per a la producció&lt;/h2&gt;
&lt;p&gt;Aquest és el gran. El temps d&amp;rsquo;execució de l&amp;rsquo;agent de nova generació està disponible generalment: construït a partir de l&amp;rsquo;API OpenAI Responses, compatible amb cables amb els agents OpenAI i obert a models de diversos proveïdors. Si esteu creant amb l&amp;rsquo;API Responses avui, la migració a Foundry afegeix seguretat empresarial, xarxes privades, Entra RBAC, seguiment complet i avaluació a més de la vostra lògica d&amp;rsquo;agent existent.&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;Addicions clau: xarxes privades d&amp;rsquo;extrem a extrem, expansió d&amp;rsquo;autenticació MCP (inclòs OAuth passthrough), previsualització de Voice Live per a agents de veu a veu i agents allotjats en 6 regions noves.&lt;/p&gt;
&lt;h2 id="gpt-54-fiabilitat-sobre-la-intelligència-bruta"&gt;GPT-5.4: fiabilitat sobre la intel·ligència bruta&lt;/h2&gt;
&lt;p&gt;GPT-5.4 no es tracta de ser més intel·ligent. Es tracta de ser més fiable. Raonament més sòlid sobre interaccions llargues, millor adherència a les instruccions, menys errors en el flux de treball mitjà i capacitats integrades d&amp;rsquo;ús de l&amp;rsquo;ordinador. Per als agents de producció, aquesta fiabilitat és molt més important que les puntuacions de referència.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Preu (per M fitxes)&lt;/th&gt;
&lt;th&gt;Millor per&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 $ de sortida&lt;/td&gt;
&lt;td&gt;Agents de producció, codificació, fluxos de treball de documents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Pro&lt;/td&gt;
&lt;td&gt;30 $ / 180 $ de sortida&lt;/td&gt;
&lt;td&gt;Anàlisi profunda, raonament científic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Mini&lt;/td&gt;
&lt;td&gt;Rentable&lt;/td&gt;
&lt;td&gt;Classificació, extracció, trucades d&amp;rsquo;eines lleugeres&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;El joc intel·ligent és una estratègia d&amp;rsquo;encaminament: GPT-5.4 Mini gestiona el treball de gran volum i de baixa latència, mentre que GPT-5.4 accepta les sol·licituds de gran raonament.&lt;/p&gt;
&lt;h2 id="lsdk-és-finalment-estable"&gt;L&amp;rsquo;SDK és finalment estable&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azure-ai-projects&lt;/code&gt; SDK va enviar versions estables a tots els idiomes: Python 2.0.0, JS/TS 2.0.0, Java 2.0.0 i.NET 2.0.0 (1 d&amp;rsquo;abril). La dependència &lt;code&gt;azure-ai-agents&lt;/code&gt; ha desaparegut: tot viu sota &lt;code&gt;AIProjectClient&lt;/code&gt;. Instal·leu amb &lt;code&gt;pip install azure-ai-projects&lt;/code&gt; i els paquets de paquets &lt;code&gt;openai&lt;/code&gt; i &lt;code&gt;azure-identity&lt;/code&gt; com a dependències directes.&lt;/p&gt;
&lt;p&gt;Per als desenvolupadors de.NET, això significa un únic paquet NuGet per a tota la superfície de Foundry. No més fer malabars amb els SDK d&amp;rsquo;agents separats.&lt;/p&gt;
&lt;h2 id="fireworks-ai-porta-models-oberts-a-azure"&gt;Fireworks AI porta models oberts a Azure&lt;/h2&gt;
&lt;p&gt;Potser l&amp;rsquo;addició més interessant des del punt de vista arquitectònic: Fireworks AI processa més de 13 bilions de fitxes diaris a ~180.000 sol·licituds per segon, ara disponible a través de Foundry. DeepSeek V3.2, gpt-oss-120b, Kimi K2.5 i MiniMax M2.5 al llançament.&lt;/p&gt;
&lt;p&gt;La història real és &lt;strong&gt;porta els teus propis pesos&lt;/strong&gt;: penja pesos quantificats o ajustats des de qualsevol lloc sense canviar la pila de porcions. Desplegueu mitjançant pagament per testimoni sense servidor o rendiment subministrat.&lt;/p&gt;
&lt;h2 id="altres-aspectes-destacats"&gt;Altres aspectes destacats&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Phi-4 Reasoning Vision 15B&lt;/strong&gt;: raonament multimodal per a gràfics, diagrames i dissenys de documents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avaluacions GA&lt;/strong&gt;: avaluadors predefinits amb un seguiment continu de la producció canalitzat a Azure Monitor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Processament prioritari&lt;/strong&gt; (visualització prèvia): carril informàtic dedicat per a càrregues de treball sensibles a la latència&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Voice Live&lt;/strong&gt;: temps d&amp;rsquo;execució de veu a veu que es connecta directament als agents de Foundry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tracing GA&lt;/strong&gt;: inspecció de traça d&amp;rsquo;agents d&amp;rsquo;extrem a extrem amb classificació i filtre&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PromptFlow obsolet&lt;/strong&gt;: migració a Microsoft Framework Workflows abans de gener de 2027&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;El març de 2026 és un punt d&amp;rsquo;inflexió per a Foundry. Agent Service GA, SDK estables en tots els idiomes, GPT-5.4 per a agents de producció fiables i inferència de model obert mitjançant Fireworks AI: la plataforma està preparada per a càrregues de treball serioses.&lt;/p&gt;
&lt;p&gt;Llegiu el &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;resum complet&lt;/a&gt; i &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;creeu el vostre primer agent&lt;/a&gt; per començar.&lt;/p&gt;</content:encoded></item><item><title>Servidor SQL MCP: la manera correcta de donar accés a la base de dades d'AI Agents</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</guid><description>El servidor SQL MCP del creador d'API de dades ofereix als agents d'IA un accés segur i determinista a la base de dades sense exposar esquemes ni confiar en NL2SQL. RBAC, emmagatzematge en memòria cau, suport multibase de dades, tot integrat.</description><content:encoded>&lt;p&gt;Siguem sincers: la majoria dels servidors MCP de bases de dades disponibles avui dia són aterridors. Prenen una consulta en llenguatge natural, generen SQL sobre la marxa i l&amp;rsquo;executen amb les dades de producció. Què podria sortir malament? (Tot. Tot podria sortir malament.)&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;equip d&amp;rsquo;Azure SQL acaba de &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;introduir SQL MCP Server&lt;/a&gt;, i té un enfocament fonamentalment diferent. Creat com a característica del Data API Builder (DAB) 2.0, ofereix als agents d&amp;rsquo;IA un accés estructurat i determinista a les operacions de la base de dades, sense NL2SQL, sense exposar el vostre esquema i amb RBAC complet a cada pas.&lt;/p&gt;
&lt;h2 id="per-què-no-nl2sql"&gt;Per què no NL2SQL?&lt;/h2&gt;
&lt;p&gt;Aquesta és la decisió de disseny més interessant. Els models no són deterministes i les consultes complexes tenen més probabilitats de produir errors subtils. Les consultes exactes que els usuaris esperen que l&amp;rsquo;IA pugui generar són també les que necessiten més escrutini quan es produeixen de manera no determinista.&lt;/p&gt;
&lt;p&gt;En lloc d&amp;rsquo;això, SQL MCP Server utilitza un enfocament &lt;strong&gt;NL2DAB&lt;/strong&gt;. L&amp;rsquo;agent treballa amb la capa d&amp;rsquo;abstracció d&amp;rsquo;entitats del creador de l&amp;rsquo;API de dades i el creador de consultes integrat per produir un T-SQL precís i ben format de manera determinista. Mateix resultat per a l&amp;rsquo;usuari, però sense risc de JOIN al·lucinats o exposició accidental de dades.&lt;/p&gt;
&lt;h2 id="set-eines-no-set-centes"&gt;Set eines, no set-centes&lt;/h2&gt;
&lt;p&gt;SQL MCP Server exposa exactament set eines DML, independentment de la mida de la base de dades:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;describe_entities&lt;/code&gt; — descobreix entitats i operacions disponibles&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create_record&lt;/code&gt; — inserir files&lt;/li&gt;
&lt;li&gt;&lt;code&gt;read_records&lt;/code&gt; — consulteu taules i vistes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update_record&lt;/code&gt; — modifica les files&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete_record&lt;/code&gt; — elimina les files&lt;/li&gt;
&lt;li&gt;&lt;code&gt;execute_entity&lt;/code&gt; — executa procediments emmagatzemats&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggregate_records&lt;/code&gt; — consultes d&amp;rsquo;agregació&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Això és intel·ligent perquè les finestres de context són l&amp;rsquo;espai de pensament de l&amp;rsquo;agent. Inundar-los amb centenars de definicions d&amp;rsquo;eines deixa menys espai per al raonament. Set eines fixes mantenen l&amp;rsquo;agent centrat a &lt;em&gt;pensar&lt;/em&gt; en lloc de &lt;em&gt;navegar&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Cada eina es pot activar o desactivar individualment:&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="com-començar-en-tres-ordres"&gt;Com començar en tres ordres&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;Això és un servidor SQL MCP en execució que exposa la vostra taula de clients. La capa d&amp;rsquo;abstracció d&amp;rsquo;entitats significa que podeu aliar noms i columnes, limitar camps per rol i controlar exactament el que veuen els agents, sense exposar els detalls de l&amp;rsquo;esquema intern.&lt;/p&gt;
&lt;h2 id="la-història-de-seguretat-és-sòlida"&gt;La història de seguretat és sòlida&lt;/h2&gt;
&lt;p&gt;Aquí és on la maduresa del creador de l&amp;rsquo;API de dades té els seus fruits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RBAC a cada capa&lt;/strong&gt;: cada entitat defineix quins rols poden llegir, crear, actualitzar o suprimir i quins camps són visibles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integració d&amp;rsquo;Azure Key Vault&lt;/strong&gt;: cadenes de connexió i secrets gestionats de manera segura&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microsoft Entra + OAuth personalitzat&lt;/strong&gt;: autenticació de grau de producció&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Política de seguretat de contingut&lt;/strong&gt;: els agents interactuen mitjançant un contracte controlat, no SQL brut&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&amp;rsquo;abstracció de l&amp;rsquo;esquema és especialment important. Els noms de les vostres taules i columnes internes mai s&amp;rsquo;exposen a l&amp;rsquo;agent. Definiu entitats, àlies i descripcions que tinguin sentit per a la interacció de l&amp;rsquo;IA, no la vostra base de dades ERD.&lt;/p&gt;
&lt;h2 id="multibase-de-dades-i-multiprotocol"&gt;Multibase de dades i multiprotocol&lt;/h2&gt;
&lt;p&gt;SQL MCP Server és compatible amb Microsoft SQL, PostgreSQL, Azure Cosmos DB i MySQL. I com que és una funció DAB, obteniu punts finals REST, GraphQL i MCP simultàniament des de la mateixa configuració. Les mateixes definicions d&amp;rsquo;entitat, les mateixes regles RBAC, la mateixa seguretat, als tres protocols.&lt;/p&gt;
&lt;p&gt;La configuració automàtica a DAB 2.0 pot fins i tot inspeccionar la vostra base de dades i crear la configuració de manera dinàmica, si us sentiu còmode amb menys abstracció per a la creació de prototips ràpids.&lt;/p&gt;
&lt;h2 id="la-meva-opinió"&gt;La meva opinió&lt;/h2&gt;
&lt;p&gt;Així és com hauria de funcionar l&amp;rsquo;accés a la base de dades empresarial per als agents d&amp;rsquo;IA. No &amp;ldquo;hey LLM, escriu-me una mica d&amp;rsquo;SQL i YOLO contra la producció&amp;rdquo;. En lloc d&amp;rsquo;això: una capa d&amp;rsquo;entitat ben definida, generació de consultes deterministes, RBAC a cada pas, memòria cau, monitorització i telemetria. És avorrit de la millor manera possible.&lt;/p&gt;
&lt;p&gt;Per als desenvolupadors de.NET, la història d&amp;rsquo;integració és neta: DAB és una eina.NET, el servidor MCP s&amp;rsquo;executa com a contenidor i funciona amb Azure SQL, que la majoria de nosaltres ja estem utilitzant. Si esteu creant agents d&amp;rsquo;IA que necessiten accés a dades, comenceu aquí.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;SQL MCP Server és gratuït, de codi obert i s&amp;rsquo;executa a qualsevol lloc. És l&amp;rsquo;enfocament prescriptiu de Microsoft per oferir als agents d&amp;rsquo;IA un accés segur a la base de dades. Consulteu la &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;publicació completa&lt;/a&gt; i la &lt;a href="https://aka.ms/sql/mcp"&gt;documentació&lt;/a&gt; per començar.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.115: notificacions de terminal en segon pla, mode d'agent SSH i més</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/vscode-1-115-agent-improvements/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/vscode-1-115-agent-improvements/</guid><description>VS Code 1.115 ofereix notificacions de terminal en segon pla per als agents, allotjament d'agents remots SSH, enganxament de fitxers als terminals i seguiment d'edició conscient de la sessió. Això és el que importa per als desenvolupadors de.NET.</description><content:encoded>&lt;p&gt;VS Code 1.115 acaba de &lt;a href="https://code.visualstudio.com/updates/v1_115"&gt;sortir&lt;/a&gt; i, tot i que és una versió més lleugera pel que fa a les funcions de titular, les millores relacionades amb l&amp;rsquo;agent són realment útils si treballeu amb assistents de codificació d&amp;rsquo;IA diàriament.&lt;/p&gt;
&lt;p&gt;Permeteu-me destacar el que realment val la pena saber.&lt;/p&gt;
&lt;h2 id="els-terminals-de-fons-parlen-amb-els-agents"&gt;Els terminals de fons parlen amb els agents&lt;/h2&gt;
&lt;p&gt;Aquesta és la característica destacada. Els terminals de fons ara notifiquen automàticament als agents quan es completen les ordres, inclòs el codi de sortida i la sortida del terminal. Les sol·licituds d&amp;rsquo;entrada als terminals de fons també es detecten i s&amp;rsquo;envien a l&amp;rsquo;usuari.&lt;/p&gt;
&lt;p&gt;Per què importa això? Si heu utilitzat el mode d&amp;rsquo;agent de Copilot per executar ordres de compilació o suites de proves en segon pla, coneixeu el dolor de &amp;ldquo;Ja s&amp;rsquo;ha acabat?&amp;rdquo; — Els terminals de fons eren essencialment de foc i oblidar. Ara l&amp;rsquo;agent rep una notificació quan el vostre &lt;code&gt;dotnet build&lt;/code&gt; o &lt;code&gt;dotnet test&lt;/code&gt; s&amp;rsquo;acabi, veu la sortida i pot reaccionar en conseqüència. És un petit canvi que fa que els fluxos de treball impulsats per agents siguin significativament més fiables.&lt;/p&gt;
&lt;p&gt;També hi ha una nova eina &lt;code&gt;send_to_terminal&lt;/code&gt; que permet als agents enviar ordres a terminals en segon pla amb la confirmació de l&amp;rsquo;usuari, solucionant el problema en què &lt;code&gt;run_in_terminal&lt;/code&gt; amb un temps d&amp;rsquo;espera traslladaria els terminals a segon pla i els faria només de lectura.&lt;/p&gt;
&lt;h2 id="allotjament-dagent-remot-ssh"&gt;Allotjament d&amp;rsquo;agent remot SSH&lt;/h2&gt;
&lt;p&gt;VS Code ara admet la connexió a màquines remotes mitjançant SSH, instal·lant automàticament la CLI i iniciant-la en mode d&amp;rsquo;amfitrió de l&amp;rsquo;agent. Això significa que les vostres sessions d&amp;rsquo;agent d&amp;rsquo;IA poden orientar-se directament a entorns remots, cosa que és útil per als desenvolupadors de.NET que creen i proveu en servidors Linux o màquines virtuals en núvol.&lt;/p&gt;
&lt;h2 id="edita-el-seguiment-a-les-sessions-dagent"&gt;Edita el seguiment a les sessions d&amp;rsquo;agent&lt;/h2&gt;
&lt;p&gt;Les edicions de fitxers fetes durant les sessions de l&amp;rsquo;agent ara es fan un seguiment i es restauren, amb diferències, desfer/refer i restauració de l&amp;rsquo;estat. Si un agent fa canvis al vostre codi i alguna cosa va malament, podeu veure exactament què ha canviat i revertir-lo. Tranquil·litat per deixar que els agents modifiquin la vostra base de codi.&lt;/p&gt;
&lt;h2 id="coneixement-de-la-pestanya-del-navegador-i-altres-millores"&gt;Coneixement de la pestanya del navegador i altres millores&lt;/h2&gt;
&lt;p&gt;Algunes addicions més de qualitat de vida:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Seguiment de pestanyes del navegador&lt;/strong&gt;: ara el xat pot fer un seguiment i enllaçar amb les pestanyes del navegador obertes durant una sessió, de manera que els agents poden fer referència a les pàgines web que esteu mirant&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fitxer enganxat al terminal&lt;/strong&gt;: enganxeu fitxers (incloses les imatges) al terminal amb Ctrl+V, arrossegueu i deixeu anar o feu clic amb el botó dret.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cobertura de prova al minimapa&lt;/strong&gt;: ara els indicadors de cobertura de prova es mostren al minimapa per obtenir una visió visual ràpida&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pinch-to-zoom a Mac&lt;/strong&gt;: el navegador integrat admet gestos de pessigar-to-zoom&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drets de Copilot a Sessions&lt;/strong&gt;: la barra d&amp;rsquo;estat mostra la informació d&amp;rsquo;ús a la vista Sessions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Favicon a Anar al fitxer&lt;/strong&gt;: les pàgines web obertes mostren favicons a la llista de selecció ràpida&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;VS Code 1.115 és una versió incremental, però les millores de l&amp;rsquo;agent (notificacions de terminal en segon pla, allotjament d&amp;rsquo;agents SSH i seguiment d&amp;rsquo;edició) afegeixen una experiència notablement més fluida per al desenvolupament assistit per IA. Si utilitzeu el mode d&amp;rsquo;agent de Copilot per a projectes.NET, aquests són els tipus de correccions de qualitat de vida que redueixen la fricció diàriament.&lt;/p&gt;
&lt;p&gt;Consulteu les &lt;a href="https://code.visualstudio.com/updates/v1_115"&gt;notes completes de la versió&lt;/a&gt; per a cada detall.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 envia una CLI de Docs, i el vostre agent d'IA també la pot utilitzar</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</guid><description>.NET Aspire 13.2 afegeix aspire docs: una CLI per cercar, navegar i llegir documentació oficial sense sortir del terminal. També funciona com una eina per als agents d'IA. Heus aquí per què això importa.</description><content:encoded>&lt;p&gt;Coneixeu aquell moment en què esteu endinsat en un Aspire AppHost, connectant integracions i heu de comprovar exactament quins paràmetres espera la integració de Redis? Feu una pestanya alternativa al vostre navegador, busqueu aspire.dev, mireu els documents de l&amp;rsquo;API i torneu al vostre editor. Context perdut. Flux trencat.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 només &lt;a href="https://devblogs.microsoft.com/aspire/aspire-docs-in-your-terminal/"&gt;ha enviat una solució per això&lt;/a&gt;. La CLI &lt;code&gt;aspire docs&lt;/code&gt; us permet cercar, navegar i llegir la documentació oficial d&amp;rsquo;Aspire directament des del vostre terminal. I com que està recolzat per serveis reutilitzables, els agents i les habilitats d&amp;rsquo;IA poden utilitzar les mateixes ordres per buscar documents en lloc d&amp;rsquo;al·lucinar API que no existeixen.&lt;/p&gt;
&lt;h2 id="el-problema-que-això-resol-realment"&gt;El problema que això resol realment&lt;/h2&gt;
&lt;p&gt;David Pine ho clava a la publicació original: els agents d&amp;rsquo;IA van ser &lt;em&gt;terribles&lt;/em&gt; per ajudar els desenvolupadors a crear aplicacions Aspire. Recomanarien &lt;code&gt;dotnet run&lt;/code&gt; en lloc de &lt;code&gt;aspire run&lt;/code&gt;, fer referència a learn.microsoft.com per als documents que viuen a aspire.dev, suggerir paquets NuGet obsolets i, el meu favorit personal, al·lucinar API que no existeixen.&lt;/p&gt;
&lt;p&gt;Per què? Com que Aspire era específic de.NET molt més temps del que ha estat políglot, i els LLM treballen amb dades de formació anteriors a les últimes funcions. Quan doneu a un agent d&amp;rsquo;IA la possibilitat de buscar realment els documents actuals, deixa d&amp;rsquo;endevinar i comença a ser útil.&lt;/p&gt;
&lt;h2 id="tres-ordres-zero-pestanyes-del-navegador"&gt;Tres ordres, zero pestanyes del navegador&lt;/h2&gt;
&lt;p&gt;La CLI és molt senzilla:&lt;/p&gt;
&lt;h3 id="llista-tots-els-documents"&gt;Llista tots els documents&lt;/h3&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;aspire docs list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Retorna totes les pàgines de documentació disponibles a aspire.dev. Necessites una sortida llegible per màquina? Afegeix &lt;code&gt;--format Json&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="cerca-un-tema"&gt;Cerca un tema&lt;/h3&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;aspire docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cerca tant títols com contingut amb una puntuació de rellevància ponderada. El mateix motor de cerca que impulsa l&amp;rsquo;eina de documentació internament. Obteniu resultats classificats amb títols, slugs i puntuacions de rellevància.&lt;/p&gt;
&lt;h3 id="llegeix-una-pàgina-sencera-o-només-una-secció"&gt;Llegeix una pàgina sencera (o només una secció)&lt;/h3&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;aspire docs get redis-integration
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Transmet la pàgina completa com a reducció al terminal. Necessites només una secció?&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;aspire docs get redis-integration --section &lt;span class="s2"&gt;&amp;#34;Add Redis resource&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Precisió quirúrgica. Sense desplaçament per 500 línies. Només la part que necessiteu.&lt;/p&gt;
&lt;h2 id="langle-de-lagent-dia"&gt;L&amp;rsquo;angle de l&amp;rsquo;agent d&amp;rsquo;IA&lt;/h2&gt;
&lt;p&gt;Aquí és on és interessant per als desenvolupadors que construïm amb eines d&amp;rsquo;IA. Les mateixes ordres &lt;code&gt;aspire docs&lt;/code&gt; funcionen com a eines per als agents d&amp;rsquo;IA, mitjançant habilitats, servidors MCP o embolcalls CLI senzills.&lt;/p&gt;
&lt;p&gt;En comptes que el vostre assistent d&amp;rsquo;IA creï les API d&amp;rsquo;Aspire basades en dades d&amp;rsquo;entrenament obsoletes, pot trucar a &lt;code&gt;aspire docs search &amp;quot;postgres&amp;quot;&lt;/code&gt;, trobar els documents oficials d&amp;rsquo;integració, llegir la pàgina adequada i oferir-vos l&amp;rsquo;enfocament documentat. Documentació actual en temps real, no la que el model va memoritzar fa sis mesos.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;arquitectura darrere d&amp;rsquo;això és intencionada. L&amp;rsquo;equip d&amp;rsquo;Aspire va crear serveis reutilitzables (&lt;code&gt;IDocsIndexService&lt;/code&gt;, &lt;code&gt;IDocsSearchService&lt;/code&gt;, &lt;code&gt;IDocsFetcher&lt;/code&gt;, &lt;code&gt;IDocsCache&lt;/code&gt;) en lloc d&amp;rsquo;una integració única. Això vol dir que el mateix motor de cerca funciona per a humans al terminal, agents d&amp;rsquo;IA al vostre editor i automatització al vostre pipeline CI.&lt;/p&gt;
&lt;h2 id="escenaris-del-món-real"&gt;Escenaris del món real&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Cerques ràpides del terminal:&lt;/strong&gt; Teniu tres fitxers de profunditat i necessiteu paràmetres de configuració de Redis. Dues ordres, noranta segons, tornen a treballar:&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;aspire docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt; --limit &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration --section &lt;span class="s2"&gt;&amp;#34;Configuration&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Desenvolupament assistit per IA:&lt;/strong&gt; la vostra habilitat VS Code inclou les ordres CLI. Demaneu &amp;ldquo;Afegeix una base de dades PostgreSQL al meu AppHost&amp;rdquo; i l&amp;rsquo;agent cerca els documents reals abans de respondre. Sense al·lucinacions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Validació CI/CD:&lt;/strong&gt; el vostre pipeline valida les configuracions d&amp;rsquo;AppHost amb la documentació oficial mitjançant programació. &lt;code&gt;--format Json&lt;/code&gt; emet les canonades netament a &lt;code&gt;jq&lt;/code&gt; i altres eines.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bases de coneixement personalitzades:&lt;/strong&gt; crear la teva pròpia eina d&amp;rsquo;IA? Introduïu la sortida JSON estructurada directament a la vostra base de coneixement:&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;aspire docs search &lt;span class="s2"&gt;&amp;#34;monitoring&amp;#34;&lt;/span&gt; --format Json &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;[.[] | {slug, title, summary}]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sense raspat web. No hi ha claus API. Les mateixes dades estructurades que les eines de documents utilitza internament.&lt;/p&gt;
&lt;h2 id="la-documentació-sempre-està-en-directe"&gt;La documentació sempre està en directe&lt;/h2&gt;
&lt;p&gt;Aquesta és la part que més agraeixo. La CLI no baixa cap instantània: consulta aspire.dev amb la memòria cau basada en ETag. En el moment en què s&amp;rsquo;actualitzen els documents, la vostra CLI i qualsevol habilitat incorporada al damunt ho reflecteixen. No hi ha còpies obsoletes, no &amp;ldquo;però el wiki va dir&amp;hellip;&amp;rdquo; moments.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;aspire docs&lt;/code&gt; és una d&amp;rsquo;aquestes petites característiques que resol un problema real de manera neta. Els humans tenen accés a la documentació nativa del terminal. Els agents d&amp;rsquo;IA tenen una manera de deixar d&amp;rsquo;endevinar i començar a fer referència a documents reals. I tot està recolzat per la mateixa font de veritat.&lt;/p&gt;
&lt;p&gt;Si esteu creant amb.NET Aspire i encara no heu provat la CLI, executeu &lt;code&gt;aspire docs search &amp;quot;your-topic-here&amp;quot;&lt;/code&gt; i mireu com us sembla. A continuació, considereu incloure aquestes ordres en qualsevol habilitat d&amp;rsquo;IA o configuració d&amp;rsquo;automatització que feu servir; els vostres agents us ho agrairan.&lt;/p&gt;
&lt;p&gt;Fes una ullada a &lt;a href="https://davidpine.dev/posts/aspire-docs-mcp-tools/"&gt;La immersió profunda de David Pine&lt;/a&gt; sobre com es van reunir les eines de documents i la &lt;a href="https://aspire.dev/reference/cli/commands/aspire-docs/"&gt;referència oficial de la CLI&lt;/a&gt; per a tots els detalls.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Agent Framework Hits 1.0: això és el que realment importa per als desenvolupadors de.NET</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/</guid><description>Microsoft Agent Framework 1.0 està preparat per a la producció amb API estables, orquestració multiagent i connectors per a tots els principals proveïdors d'IA. Això és el que necessiteu saber com a desenvolupador.NET.</description><content:encoded>&lt;p&gt;Si heu estat seguint el viatge de l&amp;rsquo;Agent Framework des dels primers dies del nucli semàntic i de l&amp;rsquo;AutoGen, aquest és significatiu. Microsoft Agent Framework només &lt;a href="https://devblogs.microsoft.com/agent-framework/microsoft-agent-framework-version-1-0/"&gt;accedir a la versió 1.0&lt;/a&gt;: API estables, preparades per a la producció, compromís de suport a llarg termini. Està disponible tant per a.NET com per a Python, i està realment preparat per a càrregues de treball reals.&lt;/p&gt;
&lt;p&gt;Permeteu-me reduir el soroll de l&amp;rsquo;anunci i centrar-me en allò que importa si esteu creant aplicacions basades en IA amb.NET.&lt;/p&gt;
&lt;h2 id="la-versió-curta"&gt;La versió curta&lt;/h2&gt;
&lt;p&gt;Agent Framework 1.0 unifica el que abans era Semantic Kernel i AutoGen en un únic SDK de codi obert. Abstracció d&amp;rsquo;un agent. Un motor d&amp;rsquo;orquestració. Diversos proveïdors d&amp;rsquo;IA. Si heu estat rebotant entre el nucli semàntic per a patrons empresarials i AutoGen per a fluxos de treball multiagent de grau de recerca, podeu aturar-vos. Aquest és l&amp;rsquo;SDK ara.&lt;/p&gt;
&lt;h2 id="començar-és-gairebé-injustament-senzill"&gt;Començar és gairebé injustament senzill&lt;/h2&gt;
&lt;p&gt;Aquí hi ha un agent que treballa a.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="c1"&gt;// dotnet add package Microsoft.Agents.AI.OpenAI --prerelease&lt;/span&gt;
&lt;/span&gt;&lt;/span&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&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;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI.Foundry&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;using&lt;/span&gt; &lt;span class="nn"&gt;Azure.Identity&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;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;AIProjectClient&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="s"&gt;&amp;#34;https://your-project.services.ai.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="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;gpt-5.3&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 class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;HaikuBot&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;You are an upbeat assistant that writes beautifully.&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&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="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="s"&gt;&amp;#34;Write a haiku about shipping 1.0.&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;Això és tot. Un grapat de línies i teniu un agent d&amp;rsquo;IA que s&amp;rsquo;executa contra Azure Foundry. L&amp;rsquo;equivalent de Python és igualment concís. Afegiu eines de funció, converses de diversos torns i transmissió a mesura que avanceu: la superfície de l&amp;rsquo;API augmenta sense ser estrany.&lt;/p&gt;
&lt;h2 id="orquestració-multiagent-aquest-és-el-veritable-negoci"&gt;Orquestració multiagent: aquest és el veritable negoci&lt;/h2&gt;
&lt;p&gt;Els agents únics estan bé per a les demostracions, però els escenaris de producció solen necessitar coordinació. Agent Framework 1.0 s&amp;rsquo;envia amb patrons d&amp;rsquo;orquestració provats en batalla directament de Microsoft Research i AutoGen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Seqüencial&lt;/strong&gt;: els agents processen per ordre (escriptor → revisor → editor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simultània&lt;/strong&gt;: es distribueix a diversos agents en paral·lel, convergeix els resultats&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Handoff&lt;/strong&gt;: un agent delega a un altre segons la intenció&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xat de grup&lt;/strong&gt;: diversos agents discuteixen i convergeixen en una solució&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magentic-One&lt;/strong&gt;: el patró multiagent de grau de recerca de MSR&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tots admeten la transmissió en temps real, els punts de control, les aprovacions humanes en el bucle i la pausa/reprèn. La part del punt de control és crucial: els fluxos de treball de llarga durada sobreviuen als reinicis del procés. Per als desenvolupadors de.NET que hem creat fluxos de treball duradors amb Azure Functions, això ens sembla familiar.&lt;/p&gt;
&lt;h2 id="les-característiques-que-més-importen"&gt;Les característiques que més importen&lt;/h2&gt;
&lt;p&gt;Aquí teniu la meva llista del que val la pena saber:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enganxs de middleware.&lt;/strong&gt; Saps com ASP.NET Core té canalitzacions de middleware? Mateix concepte, però per a l&amp;rsquo;execució de l&amp;rsquo;agent. Intercepteu totes les etapes (afegiu seguretat de contingut, registre, polítiques de compliment) sense tocar les indicacions de l&amp;rsquo;agent. Així és com podeu preparar els agents per a l&amp;rsquo;empresa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memòria connectable.&lt;/strong&gt; Historial de conversa, estat clau-valor persistent, recuperació basada en vectors. Trieu el vostre backend: Foundry Agent Service, Mem0, Redis, Neo4j o enrotlleu el vostre. La memòria és el que converteix una trucada LLM sense estat en un agent que realment recorda el context.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agents YAML declaratius.&lt;/strong&gt; Definiu les instruccions, les eines, la memòria i la topologia d&amp;rsquo;orquestració del vostre agent en fitxers YAML controlats per versions. Carregueu i executeu amb una única trucada a l&amp;rsquo;API. Això és un canvi de joc per als equips que volen repetir el comportament de l&amp;rsquo;agent sense tornar a desplegar el codi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compatibilitat amb A2A i MCP.&lt;/strong&gt; MCP (Model Context Protocol) permet als agents descobrir i invocar eines externes de manera dinàmica. A2A (protocol d&amp;rsquo;agent a agent) permet la col·laboració entre temps d&amp;rsquo;execució: els vostres agents.NET poden coordinar-se amb els agents que s&amp;rsquo;executen en altres marcs. El suport A2A 1.0 arribarà aviat.&lt;/p&gt;
&lt;h2 id="les-funcions-de-previsualització-val-la-pena-veure-les"&gt;Les funcions de previsualització val la pena veure-les&lt;/h2&gt;
&lt;p&gt;Algunes funcions s&amp;rsquo;envien com a previsualització a la versió 1.0: funcionals, però les API poden evolucionar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DevUI&lt;/strong&gt;: un depurador local basat en navegador per visualitzar l&amp;rsquo;execució de l&amp;rsquo;agent, els fluxos de missatges i les trucades d&amp;rsquo;eines en temps real. Penseu en Application Insights, però per al raonament dels agents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Copilot SDK i Claude Code SDK&lt;/strong&gt;: utilitzeu Copilot o Claude com a arnès d&amp;rsquo;agent directament des del vostre codi d&amp;rsquo;orquestració. Escriu un agent capaç de codificar juntament amb els altres agents en el mateix flux de treball.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Harness&lt;/strong&gt;: un temps d&amp;rsquo;execució local personalitzable que ofereix als agents accés a l&amp;rsquo;intèrpret d&amp;rsquo;ordres, al sistema de fitxers i als bucles de missatgeria. Penseu en agents de codificació i patrons d&amp;rsquo;automatització.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Habilitats&lt;/strong&gt;: paquets de capacitats de domini reutilitzables que ofereixen als agents capacitats estructurades de manera immediata.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="migració-des-del-nucli-semàntic-o-autogen"&gt;Migració des del nucli semàntic o AutoGen&lt;/h2&gt;
&lt;p&gt;Si teniu codi Semàntic Kernel o AutoGen, hi ha assistents de migració dedicats que analitzen el vostre codi i generen plans de migració pas a pas. La &lt;a href="https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-semantic-kernel"&gt;guia de migració del nucli semàntic&lt;/a&gt; i la &lt;a href="https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-autogen"&gt;guia de migració d&amp;rsquo;AutoGen&lt;/a&gt; us acompanyen tot.&lt;/p&gt;
&lt;p&gt;Si heu estat als paquets RC, l&amp;rsquo;actualització a la 1.0 és només un augment de la versió.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Agent Framework 1.0 és la fita de producció que els equips empresarials estaven esperant. API estables, suport per a diversos proveïdors, patrons d&amp;rsquo;orquestració que funcionen realment a escala i rutes de migració tant del nucli semàntic com d&amp;rsquo;AutoGen.&lt;/p&gt;
&lt;p&gt;El marc és &lt;a href="https://github.com/microsoft/agent-framework"&gt;totalment de codi obert a GitHub&lt;/a&gt;, i podeu començar avui mateix amb &lt;code&gt;dotnet add package Microsoft.Agents.AI&lt;/code&gt;. Consulteu la &lt;a href="https://learn.microsoft.com/en-us/agent-framework/get-started/"&gt;guia d&amp;rsquo;inici ràpid&lt;/a&gt; i les &lt;a href="https://github.com/microsoft/agent-framework"&gt;mostres&lt;/a&gt; per embrutar-vos les mans.&lt;/p&gt;
&lt;p&gt;Si heu estat esperant el senyal &amp;ldquo;Segur per utilitzar en producció&amp;rdquo;, això és tot.&lt;/p&gt;</content:encoded></item><item><title>azd ara us permet executar i depurar agents d'IA localment: aquí teniu el que va canviar el març de 2026</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>L'Azure Developer CLI va enviar set versions el març de 2026. Els aspectes més destacats: un bucle local d'execució i depuració per a agents d'IA, integració de GitHub Copilot a la configuració del projecte i suport de Container App Jobs.</description><content:encoded>&lt;p&gt;Set llançaments en un mes. Això és el que va impulsar l&amp;rsquo;equip de l&amp;rsquo;Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) el març de 2026, i la funció de titular és la que estava esperant: &lt;strong&gt;un bucle local d&amp;rsquo;execució i depuració per als agents d&amp;rsquo;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;va publicar el resum complet&lt;/a&gt; i, tot i que hi ha moltes coses, permeteu-me filtrar-ho fins al que realment importa per als desenvolupadors de.NET que creen aplicacions basades en IA.&lt;/p&gt;
&lt;h2 id="executeu-i-depureu-agents-dia-sense-desplegar-los"&gt;Executeu i depureu agents d&amp;rsquo;IA sense desplegar-los&lt;/h2&gt;
&lt;p&gt;Aquest és el gran. La nova extensió &lt;code&gt;azure.ai.agents&lt;/code&gt; afegeix un conjunt d&amp;rsquo;ordres que us ofereixen una experiència de bucle interior adequada per als agents d&amp;rsquo;IA:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt;: inicia el vostre agent localment&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt;: li envia missatges (locals o desplegats)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt;: mostra l&amp;rsquo;estat i la salut del contenidor&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt;: transmet els registres dels contenidors en temps real&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Abans d&amp;rsquo;això, provar un agent d&amp;rsquo;IA significava desplegar-lo a Microsoft Foundry cada vegada que feies un canvi. Ara podeu iterar localment, provar el comportament del vostre agent i només implementar-lo quan estigueu preparat. Si heu estat creant agents amb Microsoft Agent Framework o Semantic Kernel, això canvia el vostre flux de treball diari.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;ordre d&amp;rsquo;invocació funciona amb agents locals i desplegats, la qual cosa significa que podeu utilitzar el mateix flux de treball de prova independentment d&amp;rsquo;on s&amp;rsquo;executi l&amp;rsquo;agent. Aquest és el tipus de detall que us estalvia mantenir dos conjunts de scripts de prova.&lt;/p&gt;
&lt;h2 id="github-copilot-arma-el-vostre-projecte-azd"&gt;GitHub Copilot arma el vostre projecte azd&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt; ara ofereix una opció &amp;ldquo;Configura amb GitHub Copilot (vista prèvia)&amp;rdquo;. En lloc de respondre manualment les sol·licituds sobre l&amp;rsquo;estructura del vostre projecte, un agent de Copilot us encarrega la configuració. Comprova si hi ha un directori de treball brut abans de modificar res i demana el consentiment de l&amp;rsquo;eina del servidor MCP per endavant.&lt;/p&gt;
&lt;p&gt;Quan una ordre falla, &lt;code&gt;azd&lt;/code&gt; ara ofereix una resolució de problemes assistida per IA: trieu una categoria (explica, orienta, soluciona problemes o salta), deixeu que l&amp;rsquo;agent suggereixi una solució i torneu-ho a provar, tot sense sortir del terminal. Per a configuracions d&amp;rsquo;infraestructures complexes, això suposa un estalvi de temps real.&lt;/p&gt;
&lt;h2 id="feines-de-laplicació-de-contenidors-i-millores-en-el-desplegament"&gt;Feines de l&amp;rsquo;aplicació de contenidors i millores en el desplegament&lt;/h2&gt;
&lt;p&gt;Algunes funcions de desplegament que cal destacar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fines d&amp;rsquo;aplicacions de contenidors&lt;/strong&gt;: &lt;code&gt;azd&lt;/code&gt; ara desplega &lt;code&gt;Microsoft.App/jobs&lt;/code&gt; mitjançant la configuració existent &lt;code&gt;host: containerapp&lt;/code&gt;. La vostra plantilla de bíceps determina si l&amp;rsquo;objectiu és una aplicació de contenidor o una feina, sense cap configuració addicional.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Temps d&amp;rsquo;espera de desplegament configurables&lt;/strong&gt;: nova marca &lt;code&gt;--timeout&lt;/code&gt; a &lt;code&gt;azd deploy&lt;/code&gt; i un camp &lt;code&gt;deployTimeout&lt;/code&gt; a &lt;code&gt;azure.yaml&lt;/code&gt;. Ja no cal endevinar el límit predeterminat de 1200 segons.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recurs de compilació remota&lt;/strong&gt;: quan la compilació remota d&amp;rsquo;ACR falla, &lt;code&gt;azd&lt;/code&gt; torna automàticament a la compilació local de Docker/Podman.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validació local de preflight&lt;/strong&gt;: els paràmetres de bíceps es validen localment abans de desplegar-se, capturant els paràmetres que falten sense un viatge d&amp;rsquo;anada i tornada a Azure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="polit-de-lexperiència-del-desenvolupador"&gt;Polit de l&amp;rsquo;experiència del desenvolupador&lt;/h2&gt;
&lt;p&gt;Algunes millores més petites que sumen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Detecció automàtica de pnpm/fils&lt;/strong&gt; per a projectes JS/TS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compatibilitat amb pyproject.toml&lt;/strong&gt; per a l&amp;rsquo;embalatge de Python&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Directoris de plantilles locals&lt;/strong&gt; — &lt;code&gt;azd init --template&lt;/code&gt; ara accepta camins del sistema de fitxers per a la iteració fora de línia&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Millors missatges d&amp;rsquo;error&lt;/strong&gt; en mode &lt;code&gt;--no-prompt&lt;/code&gt;: tots els valors que falten es reporten alhora amb ordres de resolució&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Variables d&amp;rsquo;entorn de compilació&lt;/strong&gt; injectades a tots els subprocessos de creació de marcs (.NET, Node.js, Java, Python)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aquesta última és subtil però important: la vostra compilació.NET ara té accés a les variables d&amp;rsquo;entorn &lt;code&gt;azd&lt;/code&gt;, la qual cosa significa que podeu fer una injecció de configuració en temps de compilació sense scripts addicionals.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;El bucle de depuració de l&amp;rsquo;agent d&amp;rsquo;IA local és l&amp;rsquo;estrella d&amp;rsquo;aquesta versió, però l&amp;rsquo;acumulació de millores en el desplegament i la poliment DX fa que &lt;code&gt;azd&lt;/code&gt; se senti més madur que mai. Si esteu desplegant aplicacions.NET a Azure, especialment agents d&amp;rsquo;IA, aquesta actualització val la pena instal·lar-la.&lt;/p&gt;
&lt;p&gt;Comproveu les &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;notes completes de la versió&lt;/a&gt; per a cada detall o comenceu amb &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;instal·lació d&amp;rsquo;azd&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>El tauler de control de l'Aspire 13.2 acaba de tenir una API de telemetria i ho canvia tot</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/</guid><description>.NET Aspire 13.2 ofereix una exportació de telemetria més intel·ligent, una API programable per a traces i registres i millores de visualització de GenAI. Heus aquí per què això és important per al vostre flux de treball de depuració.</description><content:encoded>&lt;p&gt;Si heu estat creant aplicacions distribuïdes amb.NET Aspire, ja sabeu que el tauler és el millor de tota l&amp;rsquo;experiència. Tots els vostres rastres, registres i mètriques en un sol lloc: sense Jaeger extern, sense configuració de Seq, sense moments &amp;ldquo;deixa&amp;rsquo;m comprovar l&amp;rsquo;altre terminal&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 l&amp;rsquo;acaba de millorar significativament. James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-dashboard-improvements-export-and-telemetry/"&gt;va anunciar l&amp;rsquo;actualització&lt;/a&gt;, i sincerament? Només l&amp;rsquo;exportació de telemetria i les funcions de l&amp;rsquo;API mereixen l&amp;rsquo;actualització.&lt;/p&gt;
&lt;h2 id="exporta-la-telemetria-com-una-persona-sensata"&gt;Exporta la telemetria com una persona sensata&lt;/h2&gt;
&lt;p&gt;Aquest és l&amp;rsquo;escenari que tots hem viscut: esteu depurant un problema distribuït, finalment el reproduïu després de vint minuts de configuració i ara heu de compartir el que va passar amb el vostre equip. Abans? Captures de pantalla. Copia i enganxa ID de traça. L&amp;rsquo;embolic habitual.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 afegeix un diàleg adequat &lt;strong&gt;Gestiona els registres i la telemetria&lt;/strong&gt; on podeu:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Esborra tota la telemetria (útil abans d&amp;rsquo;un intent de reproducció)&lt;/li&gt;
&lt;li&gt;Exporteu la telemetria seleccionada a un fitxer ZIP en format estàndard OTLP/JSON&lt;/li&gt;
&lt;li&gt;Torneu a importar aquest ZIP a qualsevol tauler de control d&amp;rsquo;Aspire més tard&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aquesta última part és la característica assassina. Reproduïu un error, exporteu la telemetria, l&amp;rsquo;adjunteu al vostre element de treball i el vostre company d&amp;rsquo;equip pot importar-lo al seu propi tauler per veure exactament el que heu vist. No més &amp;ldquo;pots reproduir-lo a la teva màquina?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Les traces, els intervals i els registres individuals també reben una opció &amp;ldquo;Exporta JSON&amp;rdquo; als seus menús contextuals. Necessites compartir un rastre específic? Feu clic amb el botó dret, copieu JSON i enganxeu-lo a la vostra descripció de PR. Fet.&lt;/p&gt;
&lt;h2 id="lapi-de-telemetria-és-el-veritable-canvi-de-joc"&gt;L&amp;rsquo;API de telemetria és el veritable canvi de joc&lt;/h2&gt;
&lt;p&gt;Això és el que m&amp;rsquo;emociona més. El tauler ara exposa una API HTTP a &lt;code&gt;/api/telemetry&lt;/code&gt; per consultar dades de telemetria amb programació. Punts finals disponibles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/resources&lt;/code&gt;: llista els recursos amb telemetria&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/spans&lt;/code&gt;: la consulta s&amp;rsquo;estén amb filtres&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/logs&lt;/code&gt;: registres de consultes amb filtres&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/traces&lt;/code&gt; — llista traces&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/traces/{traceId}&lt;/code&gt;: obteniu tots els intervals d&amp;rsquo;un rastre específic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tot torna en format OTLP JSON. Això impulsa les noves ordres CLI &lt;code&gt;aspire agent mcp&lt;/code&gt; i &lt;code&gt;aspire otel&lt;/code&gt;, però la implicació real és més gran: ara podeu crear eines, scripts i integracions d&amp;rsquo;agents d&amp;rsquo;IA que consulten directament la telemetria de la vostra aplicació.&lt;/p&gt;
&lt;p&gt;Imagineu un agent de codificació d&amp;rsquo;IA que pugui mirar les vostres traces distribuïdes reals mentre es depura. Això ja no és hipotètic: això és el que permet aquesta API.&lt;/p&gt;
&lt;h2 id="la-telemetria-genai-es-fa-pràctica"&gt;La telemetria GenAI es fa pràctica&lt;/h2&gt;
&lt;p&gt;Si esteu creant aplicacions basades en IA amb Semantic Kernel o Microsoft.Extensions.AI, apreciareu el visualitzador de telemetria GenAI millorat. Aspire 13.2 afegeix:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Descripcions d&amp;rsquo;eines d&amp;rsquo;IA representades com a Markdown&lt;/li&gt;
&lt;li&gt;Un botó dedicat GenAI a la pàgina de traces per accedir ràpidament a traces d&amp;rsquo;IA&lt;/li&gt;
&lt;li&gt;Millor gestió d&amp;rsquo;errors per a JSON GenAI truncat o no estàndard&lt;/li&gt;
&lt;li&gt;Navegació fent clic per ressaltar entre definicions d&amp;rsquo;eines&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La publicació del bloc esmenta que el xat de VS Code Copilot, la CLI de Copilot i l&amp;rsquo;OpenCode admeten la configuració d&amp;rsquo;un &lt;code&gt;OTEL_EXPORTER_OTLP_ENDPOINT&lt;/code&gt;. Apunteu-los al tauler de control d&amp;rsquo;Aspire i podreu veure literalment els vostres agents d&amp;rsquo;IA pensar en temps real mitjançant la telemetria. Aquesta és una experiència de depuració que no trobareu enlloc més.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 fa que el tauler de control sigui &amp;ldquo;una bona interfície d&amp;rsquo;usuari de depuració&amp;rdquo; a una &amp;ldquo;plataforma d&amp;rsquo;observabilitat programable&amp;rdquo;. Només el flux de treball d&amp;rsquo;exportació/importació estalvia temps real en la depuració distribuïda i l&amp;rsquo;API de telemetria obre la porta als diagnòstics assistits per IA.&lt;/p&gt;
&lt;p&gt;Si ja esteu a Aspire, actualitzeu-lo. Si no ho feu, aquesta és una bona raó per consultar &lt;a href="https://aspire.dev"&gt;aspire.dev&lt;/a&gt; i veure de què es tracta.&lt;/p&gt;</content:encoded></item><item><title>L'actualització de març de Visual Studio us permet crear agents de pilot personalitzats, i l'eina find_symbol és una gran cosa</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/</guid><description>L'actualització de març de 2026 de Visual Studio inclou agents Copilot personalitzats, habilitats d'agent reutilitzables, una eina find_symbol conscient de l'idioma i perfils basats en Copilot des de Test Explorer. Aquí teniu el que importa.</description><content:encoded>&lt;p&gt;Visual Studio acaba de rebre la seva actualització Copilot més important fins ara. Mark Downie &lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-march-update-build-your-own-custom-agents/"&gt;va anunciar el llançament de març&lt;/a&gt;, i el títol és agents personalitzats, però sincerament, l&amp;rsquo;eina &lt;code&gt;find_symbol&lt;/code&gt; soterrada més avall podria ser la característica que canviï més el vostre flux de treball.&lt;/p&gt;
&lt;p&gt;Permeteu-me desglossar el que hi ha realment aquí.&lt;/p&gt;
&lt;h2 id="agents-de-copilot-personalitzats-al-vostre-dipòsit"&gt;Agents de Copilot personalitzats al vostre dipòsit&lt;/h2&gt;
&lt;p&gt;Voleu que Copilot segueixi els estàndards de codificació del vostre equip, executi el vostre pipeline de compilació o consulti els vostres documents interns? Ara pots construir exactament això.&lt;/p&gt;
&lt;p&gt;Els agents personalitzats es defineixen com a fitxers &lt;code&gt;.agent.md&lt;/code&gt; que deixeu anar a &lt;code&gt;.github/agents/&lt;/code&gt; al vostre repositori. Cada agent té accés complet a la consciència de l&amp;rsquo;espai de treball, la comprensió del codi, les eines, el model preferit i les connexions MCP a serveis externs. Apareixen al selector d&amp;rsquo;agents al costat dels agents integrats.&lt;/p&gt;
&lt;p&gt;Aquest és el mateix patró que VS Code ha donat suport, i és fantàstic veure que Visual Studio es posa al dia. Per als equips que ja han creat agents per a VS Code, els vostres fitxers &lt;code&gt;.agent.md&lt;/code&gt; haurien de funcionar en ambdós IDE (tot i que els noms d&amp;rsquo;eines poden variar, així que proveu-los).&lt;/p&gt;
&lt;p&gt;El repositori &lt;a href="https://github.com/github/awesome-copilot"&gt;awesome-copilot&lt;/a&gt; té configuracions d&amp;rsquo;agents contribuïts per la comunitat que podeu utilitzar com a punts de partida.&lt;/p&gt;
&lt;h2 id="habilitats-dagent-paquets-dinstruccions-reutilitzables"&gt;Habilitats d&amp;rsquo;agent: paquets d&amp;rsquo;instruccions reutilitzables&lt;/h2&gt;
&lt;p&gt;Les habilitats es recullen automàticament de &lt;code&gt;.github/skills/&lt;/code&gt; al vostre repositori o &lt;code&gt;~/.copilot/skills/&lt;/code&gt; al vostre perfil. Cada habilitat és un fitxer &lt;code&gt;SKILL.md&lt;/code&gt; seguint l&amp;rsquo;&lt;a href="https://agentskills.io/specification"&gt;especificació d&amp;rsquo;habilitats de l&amp;rsquo;agent&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Penseu en les habilitats com a experiència modular que podeu combinar i combinar. És possible que tingueu una habilitat per a les convencions de l&amp;rsquo;API, una altra per als vostres patrons de prova i una altra per al vostre flux de treball de desplegament. Quan s&amp;rsquo;activa una habilitat, apareix al xat perquè sàpigues que s&amp;rsquo;està aplicant.&lt;/p&gt;
&lt;p&gt;Si heu estat utilitzant habilitats a VS Code, ara funcionen de la mateixa manera a Visual Studio.&lt;/p&gt;
&lt;h2 id="find_symbol-navegació-conscient-de-lidioma-per-als-agents"&gt;find_symbol: navegació conscient de l&amp;rsquo;idioma per als agents&lt;/h2&gt;
&lt;p&gt;Aquí és on les coses es posen realment interessants. La nova eina &lt;code&gt;find_symbol&lt;/code&gt; ofereix al mode d&amp;rsquo;agent de Copilot una navegació real de símbols basada en el servei d&amp;rsquo;idiomes. En lloc de cercar el vostre codi com a text, l&amp;rsquo;agent pot:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trobeu totes les referències a un símbol al vostre projecte&lt;/li&gt;
&lt;li&gt;Informació de tipus d&amp;rsquo;accés, declaracions i metadades d&amp;rsquo;abast&lt;/li&gt;
&lt;li&gt;Navegueu pels llocs de trucades amb coneixement complet de l&amp;rsquo;idioma&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Què significa això a la pràctica: quan demaneu a Copilot que refactori un mètode o actualitzeu una signatura de paràmetres en llocs de trucada, realment pot veure l&amp;rsquo;estructura del vostre codi. No més situacions &amp;ldquo;l&amp;rsquo;agent va canviar el mètode però va perdre tres llocs de trucades&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Els llenguatges admesos inclouen C#, C++, Razor, TypeScript i qualsevol cosa amb una extensió LSP compatible. Per als desenvolupadors de.NET, aquesta és una millora massiva: les bases de codi C# amb jerarquies i interfícies de tipus profundes es beneficien enormement de la navegació conscient dels símbols.&lt;/p&gt;
&lt;h2 id="proves-de-perfil-amb-copilot"&gt;Proves de perfil amb Copilot&lt;/h2&gt;
&lt;p&gt;Ara hi ha una ordre &lt;strong&gt;Perfil amb Copilot&lt;/strong&gt; al menú contextual de l&amp;rsquo;Explorador de proves. Seleccioneu una prova, feu clic al perfil i l&amp;rsquo;agent de perfils l&amp;rsquo;executa automàticament i analitza el rendiment, combinant l&amp;rsquo;ús de la CPU i les dades d&amp;rsquo;instrumentació per oferir informació útil.&lt;/p&gt;
&lt;p&gt;No més configurar manualment sessions de perfilador, executar la prova, exportar resultats i intentar llegir un gràfic de flama. L&amp;rsquo;agent fa l&amp;rsquo;anàlisi i us diu què és lent i per què. Actualment només.NET, cosa que té sentit donada la profunda integració de diagnòstic.NET de Visual Studio.&lt;/p&gt;
&lt;h2 id="consells-de-rendiment-durant-la-depuració-en-directe"&gt;Consells de rendiment durant la depuració en directe&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;optimització del rendiment ara es produeix mentre depureu, no després. A mesura que passeu pel codi, Visual Studio mostra el temps d&amp;rsquo;execució i els senyals de rendiment en línia. Veus una línia lenta? Feu clic al Consell de rendiment i demaneu a Copilot suggeriments d&amp;rsquo;optimització allà mateix.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;agent de perfils captura automàticament les dades del temps d&amp;rsquo;execució (temps transcorregut, ús de la CPU, comportament de la memòria) i Copilot les utilitza per identificar els punts calents. Això manté el treball de rendiment com a part del vostre flux de depuració en lloc d&amp;rsquo;una tasca separada que continueu posposant.&lt;/p&gt;
&lt;h2 id="corregiu-les-vulnerabilitats-de-nuget-des-de-lexplorador-de-solucions"&gt;Corregiu les vulnerabilitats de NuGet des de l&amp;rsquo;Explorador de solucions&lt;/h2&gt;
&lt;p&gt;Quan es detecta una vulnerabilitat en un paquet NuGet, ara veuràs una notificació amb un enllaç &lt;strong&gt;Corregir amb GitHub Copilot&lt;/strong&gt; directament a l&amp;rsquo;Explorador de solucions. Feu clic i Copilot analitza la vulnerabilitat, recomana les actualitzacions de paquets adequades i les implementa.&lt;/p&gt;
&lt;p&gt;Per als equips que lluiten per mantenir les dependències actualitzades (que és bàsicament per a tothom), això elimina la fricció de &amp;ldquo;Sé que hi ha una vulnerabilitat, però esbrinar la ruta d&amp;rsquo;actualització correcta és un projecte en si mateix&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Els agents personalitzats i les habilitats són el titular, però &lt;code&gt;find_symbol&lt;/code&gt; és l&amp;rsquo;èxit dormint: canvia fonamentalment la precisió que pot ser Copilot quan es refactoritza el codi.NET. Combinada amb la integració de perfils en directe i les correccions de vulnerabilitats, aquesta actualització fa que les funcions d&amp;rsquo;IA de Visual Studio se sentin realment pràctiques en lloc de preparar-se per a la demostració.&lt;/p&gt;
&lt;p&gt;Baixeu &lt;a href="https://visualstudio.microsoft.com/downloads/"&gt;Visual Studio 2026 Insiders&lt;/a&gt; per provar-ho tot.&lt;/p&gt;</content:encoded></item><item><title>KubeCon Europe 2026: què haurien de preocupar-se realment als desenvolupadors.NET</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</guid><description>Microsoft va deixar caure un mur d'anuncis de Kubernetes a KubeCon Europe 2026. Aquí teniu la versió filtrada: només les actualitzacions AKS i natives del núvol que importen si envieu aplicacions.NET.</description><content:encoded>&lt;p&gt;Coneixes aquesta sensació quan cau una publicació d&amp;rsquo;anunci massiva i t&amp;rsquo;estàs desplaçant per ella pensant &amp;ldquo;genial, però què canvia això realment per a mi&amp;rdquo;? Soc jo cada temporada de la KubeCon.&lt;/p&gt;
&lt;p&gt;Microsoft acaba de publicar &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;el seu resum complet de KubeCon Europe 2026&lt;/a&gt;, escrit pel mateix Brendan Burns, i sincerament? Aquí hi ha substància real. No només inclouen les caselles de selecció, sinó també el tipus de millores operatives que canvien la manera d&amp;rsquo;executar les coses en producció.&lt;/p&gt;
&lt;p&gt;Permeteu-me desglossar el que realment importa per als desenvolupadors de.NET.&lt;/p&gt;
&lt;h2 id="mtls-sense-limpost-de-malla-de-servei"&gt;mTLS sense l&amp;rsquo;impost de malla de servei&lt;/h2&gt;
&lt;p&gt;Això és el que passa amb les malles de servei: tothom vol les garanties de seguretat, ningú vol la sobrecàrrega operativa. AKS finalment està tancant aquesta bretxa.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/application-network"&gt;Azure Kubernetes Application Network&lt;/a&gt; us ofereix TLS mutu, autorització conscient de l&amp;rsquo;aplicació i telemetria de trànsit, sense desplegar una malla plena de sidecars. Combinat amb &lt;a href="https://aka.ms/acns/cilium-mtls"&gt;Cilium mTLS a Advanced Container Networking Services&lt;/a&gt;, obteniu una comunicació xifrada de pod a pod mitjançant certificats X.509 i SPIRE per a la gestió d&amp;rsquo;identitats.&lt;/p&gt;
&lt;p&gt;Què significa això a la pràctica: les vostres API ASP.NET Core parlen amb treballadors en segon pla, els vostres serveis gRPC es trucen entre ells, tot xifrat i verificat per la identitat a nivell de xarxa, sense canvis en el codi de l&amp;rsquo;aplicació. Això és enorme.&lt;/p&gt;
&lt;p&gt;Per als equips que migren des de &lt;code&gt;ingress-nginx&lt;/code&gt;, també hi ha &lt;a href="https://aka.ms/aks/app-routing/gateway-api"&gt;Application Routing with Meshless Istio&lt;/a&gt; amb suport complet de l&amp;rsquo;API de Kubernetes Gateway. Sense sidecars. Basat en estàndards. I van enviar eines &lt;code&gt;ingress2gateway&lt;/code&gt; per a la migració incremental.&lt;/p&gt;
&lt;h2 id="observabilitat-de-la-gpu-que-no-és-una-idea-posterior"&gt;Observabilitat de la GPU que no és una idea posterior&lt;/h2&gt;
&lt;p&gt;Si utilitzeu una inferència d&amp;rsquo;IA juntament amb els vostres serveis.NET (i siguem sincers, qui no comença a fer-ho?), probablement heu arribat al punt cec de supervisió de la GPU. Obtindreu grans taulers de CPU/memòria i després&amp;hellip; res per a les GPU sense una fontaneria d&amp;rsquo;exportació manual.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/managed-gpu-metrics"&gt;AKS ara mostra les mètriques de la GPU de manera nativa&lt;/a&gt; a Prometheus i Grafana gestionats. Mateixa pila, mateixos taulers de comandament, mateix canal d&amp;rsquo;alertes. Sense exportadors personalitzats, ni agents de tercers.&lt;/p&gt;
&lt;p&gt;Al costat de la xarxa, van afegir visibilitat per flux per al trànsit HTTP, gRPC i Kafka amb una &lt;a href="https://learn.microsoft.com/en-us/azure/aks/container-network-observability-logs"&gt;experiència d&amp;rsquo;Azure Monitor amb un sol clic&lt;/a&gt;. IP, ports, càrregues de treball, direcció del flux, decisions polítiques, tot en taulers integrats.&lt;/p&gt;
&lt;p&gt;I aquesta és la que m&amp;rsquo;ha fet fer una doble presa: &lt;a href="https://learn.microsoft.com/en-us/azure/aks/advanced-container-networking-services-overview"&gt;xarxa de contenidors agent&lt;/a&gt; afegeix una interfície d&amp;rsquo;usuari web on podeu fer preguntes en llenguatge natural sobre l&amp;rsquo;estat de la xarxa del vostre clúster. &amp;ldquo;Per què el pod X no arriba al servei Y?&amp;rdquo; → diagnòstics de només lectura de la telemetria en directe. Això és realment útil a les 2 del matí.&lt;/p&gt;
&lt;h2 id="xarxes-entre-clústers-que-no-requereixen-un-doctorat"&gt;Xarxes entre clústers que no requereixen un doctorat&lt;/h2&gt;
&lt;p&gt;Històricament, Kubernetes multiclúster ha estat una experiència de &amp;ldquo;porta la teva pròpia cola de xarxa&amp;rdquo;. Azure Kubernetes Fleet Manager ara s&amp;rsquo;envia &lt;a href="https://aka.ms/kubernetes-fleet/networking/cross-cluster"&gt;xarxes entre clústers&lt;/a&gt; mitjançant la malla de clúster de Cilium gestionada:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connectivitat unificada entre clústers AKS&lt;/li&gt;
&lt;li&gt;Registre global de serveis per a la descoberta entre clústers&lt;/li&gt;
&lt;li&gt;Configuració gestionada de manera centralitzada, no repetida per clúster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si utilitzeu microserveis.NET en diferents regions per a la seva resiliència o compliment, això substitueix una gran quantitat de fontaneria personalitzada fràgil. El servei A a l&amp;rsquo;oest d&amp;rsquo;Europa pot descobrir i trucar al servei B a l&amp;rsquo;est dels EUA a través de la malla, amb polítiques d&amp;rsquo;encaminament i seguretat coherents.&lt;/p&gt;
&lt;h2 id="actualitzacions-que-no-requereixen-valentia"&gt;Actualitzacions que no requereixen valentia&lt;/h2&gt;
&lt;p&gt;Siguem sincers: les actualitzacions de Kubernetes en producció són estressants. &amp;ldquo;Actualitzar i esperar&amp;rdquo; ha estat l&amp;rsquo;estratègia de facto per a massa equips, i és el principal motiu pel qual els clústers es queden endarrerits en les versions.&lt;/p&gt;
&lt;p&gt;Dues noves capacitats canvien això:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les actualitzacions del grup d&amp;rsquo;agents blau-verd&lt;/strong&gt; creen un grup de nodes paral·lels amb la nova configuració. Valideu el comportament, canvieu el trànsit gradualment i manteniu un camí de retrocés net. No més mutacions in situ als nodes de producció.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La recuperació de l&amp;rsquo;agrupació d&amp;rsquo;agents&lt;/strong&gt; us permet revertir una agrupació de nodes a la seva versió anterior de Kubernetes i a la imatge de node després d&amp;rsquo;una actualització de costat, sense haver de reconstruir el clúster.&lt;/p&gt;
&lt;p&gt;En conjunt, finalment donen als operadors un control real sobre el cicle de vida de l&amp;rsquo;actualització. Per als equips.NET, això és important perquè la velocitat de la plataforma controla directament la rapidesa amb què podeu adoptar nous temps d&amp;rsquo;execució, pedaços de seguretat i capacitats de xarxa.&lt;/p&gt;
&lt;h2 id="les-càrregues-de-treball-dia-sestan-convertint-en-ciutadans-de-primer-nivell-de-kubernetes"&gt;Les càrregues de treball d&amp;rsquo;IA s&amp;rsquo;estan convertint en ciutadans de primer nivell de Kubernetes&lt;/h2&gt;
&lt;p&gt;El treball de codi obert amunt és igual d&amp;rsquo;important. L&amp;rsquo;assignació dinàmica de recursos (DRA) acaba de passar a GA a Kubernetes 1.36, fent que la programació de la GPU sigui una funció adequada de primera classe en lloc d&amp;rsquo;una solució alternativa.&lt;/p&gt;
&lt;p&gt;Alguns projectes que val la pena veure:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Projecte&lt;/th&gt;
&lt;th&gt;Què fa&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 comuna de Kubernetes per a la inferència: implementeu models sense conèixer els K8, amb el descobriment d&amp;rsquo;HuggingFace i les estimacions de costos&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;Resolució de problemes d&amp;rsquo;agent per als nadius del núvol: ara un projecte Sandbox CNCF&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;La imatge de contenidor declarativa es construeix amb la generació SBOM: menys CVE en l&amp;rsquo;etapa de creació&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La direcció és clara: la vostra API.NET, la vostra capa d&amp;rsquo;orquestració del nucli semàntic i les vostres càrregues de treball d&amp;rsquo;inferència s&amp;rsquo;han d&amp;rsquo;executar en un model de plataforma coherent. Hi arribem.&lt;/p&gt;
&lt;h2 id="per-on-començaria-aquesta-setmana"&gt;Per on començaria aquesta setmana&lt;/h2&gt;
&lt;p&gt;Si esteu avaluant aquests canvis per al vostre equip, aquí teniu la meva llista de prioritats honesta:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Observabilitat primer&lt;/strong&gt;: activeu les mètriques de la GPU i els registres de flux de xarxa en un clúster que no sigui de producte. Mira què t&amp;rsquo;has perdut.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proveu les actualitzacions blau-verd&lt;/strong&gt;: proveu el flux de treball de retrocés abans de la propera actualització del clúster de producció. Generar confiança en el procés.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pilota de xarxes conscients de la identitat&lt;/strong&gt;: trieu una ruta de servei interna i activeu mTLS amb Cilium. Mesureu la sobrecàrrega (spoiler: és mínim).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avalueu el gestor de flotes&lt;/strong&gt;: si executeu més de dos clústers, la xarxa entre clústers es compensa amb una cola personalitzada reduïda.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Petits experiments, feedback ràpid. Aquest és sempre el moviment.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Els anuncis de KubeCon poden ser aclaparadors, però aquest lot realment mou l&amp;rsquo;agulla dels equips.NET a AKS. Millor seguretat de xarxes sense sobrecàrrega de malla, observabilitat real de la GPU, actualitzacions més segures i bases d&amp;rsquo;infraestructura d&amp;rsquo;IA més sòlides.&lt;/p&gt;
&lt;p&gt;Si ja esteu a AKS, aquest és un bon moment per endurir la vostra línia de base operativa. I si teniu previst traslladar les càrregues de treball.NET a Kubernetes, la plataforma s&amp;rsquo;acaba de preparar molt més per a la producció.&lt;/p&gt;</content:encoded></item><item><title>Servidor SQL MCP, Copilot a SSMS i un concentrador de bases de dades amb agents d'IA: el que realment importa de SQLCon 2026</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</guid><description>Microsoft va deixar caure una pila d'anuncis de bases de dades a SQLCon 2026. Aquí teniu les coses que realment importen si esteu creant aplicacions basades en IA a Azure SQL.</description><content:encoded>&lt;p&gt;Microsoft acaba de començar &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 juntament amb FabCon a Atlanta&lt;/a&gt;, i hi ha molt per desempaquetar. L&amp;rsquo;anunci original cobreix des de plans d&amp;rsquo;estalvi fins a funcions de compliment empresarial. Vaig a ometre les diapositives de preus empresarials i em centraré en les peces que importen si sou un desenvolupador que construeix coses amb Azure SQL i AI.&lt;/p&gt;
&lt;h2 id="el-servidor-sql-mcp-està-en-previsualització-pública"&gt;El servidor SQL MCP està en previsualització pública&lt;/h2&gt;
&lt;p&gt;Aquest és el titular per a mi. L&amp;rsquo;Azure SQL Database Hyperscale ara té un &lt;strong&gt;SQL MCP Server&lt;/strong&gt; en previsualització pública que us permet connectar de manera segura les vostres dades SQL a agents d&amp;rsquo;IA i Copilots mitjançant el &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si heu estat seguint l&amp;rsquo;onada MCP, i sincerament, és difícil perdre&amp;rsquo;s ara mateix, això és un gran problema. En lloc de crear canalitzacions de dades personalitzades per alimentar el context dels vostres agents d&amp;rsquo;IA des de la vostra base de dades, obteniu un protocol estandarditzat per exposar les dades SQL directament. Els vostres agents poden consultar, raonar i actuar sobre la informació de la base de dades en directe.&lt;/p&gt;
&lt;p&gt;Per a aquells de nosaltres que creem agents d&amp;rsquo;IA amb Semantic Kernel o Microsoft Agent Framework, això obre un camí d&amp;rsquo;integració net. El vostre agent necessita comprovar l&amp;rsquo;inventari? Busqueu un registre de client? Validar una comanda? MCP li ofereix una manera estructurada de fer-ho sense que escriviu codi d&amp;rsquo;obtenció de dades a mida per a cada escenari.&lt;/p&gt;
&lt;h2 id="github-copilot-a-ssms-22-ara-és-ga"&gt;GitHub Copilot a SSMS 22 ara és GA&lt;/h2&gt;
&lt;p&gt;Si passeu algun temps a SQL Server Management Studio (i siguem sincers, la majoria de nosaltres encara ho fem), GitHub Copilot ara està disponible generalment a SSMS 22. La mateixa experiència Copilot que ja feu servir a VS Code i Visual Studio, però per a T-SQL.&lt;/p&gt;
&lt;p&gt;El valor pràctic aquí és senzill: assistència basada en xat per escriure consultes, refactoritzar procediments emmagatzemats, resoldre problemes de rendiment i gestionar tasques d&amp;rsquo;administració. No hi ha res revolucionari en concepte, però tenir-lo allà mateix a SSMS significa que no cal que canvieu de context a un altre editor només per obtenir ajuda d&amp;rsquo;IA amb el treball de la vostra base de dades.&lt;/p&gt;
&lt;h2 id="els-índexs-vectorials-han-rebut-una-actualització-seriosa"&gt;Els índexs vectorials han rebut una actualització seriosa&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;Azure SQL Database ara té índexs vectorials més ràpids i capaços amb suport complet per a la inserció, l&amp;rsquo;actualització i la supressió. Això vol dir que les vostres dades vectorials es mantenen actuals en temps real, sense necessitat de reindexació per lots.&lt;/p&gt;
&lt;p&gt;Aquí teniu les novetats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quantització&lt;/strong&gt; per a mides d&amp;rsquo;índex més petites sense perdre massa precisió&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filtratge iteratiu&lt;/strong&gt; per obtenir resultats més precisos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integració més estreta de l&amp;rsquo;optimitzador de consultes&lt;/strong&gt; per a un rendiment previsible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si esteu fent la generació augmentada per la recuperació (RAG) amb Azure SQL com a magatzem de vectors, aquestes millores són directament útils. Podeu mantenir els vostres vectors al costat de les vostres dades relacionals a la mateixa base de dades, cosa que simplifica significativament la vostra arquitectura en comparació amb l&amp;rsquo;execució d&amp;rsquo;una base de dades vectorial separada.&lt;/p&gt;
&lt;p&gt;Les mateixes millores vectorials també estan disponibles a la base de dades SQL a Fabric, ja que totes dues s&amp;rsquo;executen amb el mateix motor SQL a sota.&lt;/p&gt;
&lt;h2 id="database-hub-in-fabric-gestió-agentica"&gt;Database Hub in Fabric: gestió agentica&lt;/h2&gt;
&lt;p&gt;Aquest és més avançat, però és interessant. Microsoft va anunciar el &lt;strong&gt;Database Hub a Microsoft Fabric&lt;/strong&gt; (accés anticipat), que us ofereix un únic panell de vidre a Azure SQL, Cosmos DB, PostgreSQL, MySQL i SQL Server mitjançant Arc.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;angle interessant no és només la visió unificada, sinó l&amp;rsquo;enfocament agent de la gestió. Els agents d&amp;rsquo;IA controlen contínuament el patrimoni de la vostra base de dades, evidencien què ha canviat, expliquen per què és important i suggereixen què fer a continuació. És un model human-in-the-loop on l&amp;rsquo;agent fa el treball i tu fas les trucades.&lt;/p&gt;
&lt;p&gt;Per als equips que gestionen més d&amp;rsquo;un grapat de bases de dades, això podria reduir realment el soroll operatiu. En lloc de saltar entre portals i comprovar manualment les mètriques, l&amp;rsquo;agent us porta el senyal.&lt;/p&gt;
&lt;h2 id="què-significa-això-per-als-desenvolupadors-denet"&gt;Què significa això per als desenvolupadors de.NET&lt;/h2&gt;
&lt;p&gt;El fil que connecta tots aquests anuncis és clar: Microsoft està incorporant agents d&amp;rsquo;IA a cada capa de la pila de bases de dades. No com un truc, sinó com una capa d&amp;rsquo;eines pràctica.&lt;/p&gt;
&lt;p&gt;Si esteu creant aplicacions.NET amb el suport d&amp;rsquo;Azure SQL, això és el que faria realment:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Proveu el servidor SQL MCP&lt;/strong&gt; si esteu creant agents d&amp;rsquo;IA. És la manera més neta de donar accés a la base de dades dels vostres agents sense fontaneria personalitzada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Activa Copilot a SSMS&lt;/strong&gt; si encara no ho has fet: guanys de productivitat gratuïts per al treball SQL diari.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mira els índexs vectorials&lt;/strong&gt; si estàs fent RAG i actualment tens una botiga de vectors independent. La consolidació a Azure SQL significa un servei menys per gestionar.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;anunci complet té més: plans d&amp;rsquo;estalvi, assistents de migració, funcions de compliment, però la història del desenvolupador es troba al servidor MCP, les millores vectorials i la capa de gestió agent. Aquestes són les peces que canvien la manera de construir, no només el pressupost.&lt;/p&gt;
&lt;p&gt;Fes una ullada a l&amp;rsquo;&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;anunci complet de Shireesh Thota&lt;/a&gt; per obtenir la imatge completa i &lt;a href="https://aka.ms/database-hub"&gt;inscriu-te a l&amp;rsquo;accés anticipat al centre de bases de dades&lt;/a&gt; si vols provar la nova experiència de gestió.&lt;/p&gt;</content:encoded></item><item><title>De l'ordinador portàtil a la producció: desplegament d'agents d'IA a Microsoft Foundry amb dues ordres</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</guid><description>L'Azure Developer CLI ara té ordres "azd ai agent" que porten el vostre agent d'IA des del desenvolupador local a un punt final de Foundry en directe en qüestió de minuts. Aquí teniu el flux de treball complet.</description><content:encoded>&lt;p&gt;Coneixeu aquesta bretxa entre &amp;ldquo;funciona a la meva màquina&amp;rdquo; i &amp;ldquo;està desplegat i atén el trànsit&amp;rdquo;? Per als agents d&amp;rsquo;IA, aquesta bretxa ha estat dolorosament àmplia. Heu de subministrar recursos, desplegar models, connectar la identitat, configurar la supervisió, i això és abans que ningú pugui trucar al vostre agent.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;Azure Developer CLI acaba de convertir-ho en un &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;assumpte de dos comandaments&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="el-nou-flux-de-treball-azd-ai-agent"&gt;El nou flux de treball &lt;code&gt;azd ai agent&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Permeteu-me explicar com és realment això. Teniu un projecte d&amp;rsquo;agent d&amp;rsquo;IA, diguem-ne un agent de consergeria d&amp;rsquo;hotel. Funciona localment. Voleu que funcioni a 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;Això és tot. Dues ordres. &lt;code&gt;azd ai agent init&lt;/code&gt; arma la infraestructura com a codi al vostre dipòsit i &lt;code&gt;azd up&lt;/code&gt; proveeix tot a Azure i publica el vostre agent. Obteniu un enllaç directe al vostre agent al portal de Foundry.&lt;/p&gt;
&lt;h2 id="què-passa-sota-el-capó"&gt;Què passa sota el capó&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;ordre &lt;code&gt;init&lt;/code&gt; genera plantilles de bíceps reals i inspeccionables al vostre repositori:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un &lt;strong&gt;Recurs de Foundry&lt;/strong&gt; (contenidor de primer nivell)&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;Projecte de Foundry&lt;/strong&gt; (on viu el vostre agent)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuració del model de desplegament&lt;/strong&gt; (GPT-4o, etc.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identitat gestionada&lt;/strong&gt; amb assignacions de rol RBAC adequades&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azure.yaml&lt;/code&gt; per al mapa de serveis&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent.yaml&lt;/code&gt; amb metadades de l&amp;rsquo;agent i variables d&amp;rsquo;entorn&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aquí teniu la part clau: sou el propietari de tot això. Està versionat Bicep al teu repositori. Podeu inspeccionar-lo, personalitzar-lo i confirmar-lo juntament amb el vostre codi d&amp;rsquo;agent. Sense capses negres màgiques.&lt;/p&gt;
&lt;h2 id="el-bucle-intern-del-desenvolupament"&gt;El bucle intern del desenvolupament&lt;/h2&gt;
&lt;p&gt;El que m&amp;rsquo;agrada molt és la història del desenvolupament local. Quan esteu iterant la lògica de l&amp;rsquo;agent, no voleu tornar a desplegar cada vegada que canvieu una sol·licitud:&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;Això inicia el vostre agent localment. Vinculeu-lo amb &lt;code&gt;azd ai agent invoke&lt;/code&gt; per enviar sol·licituds de prova i teniu un bucle de comentaris ajustat. Edita el codi, reinicia, invoca, repeteix.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;ordre &lt;code&gt;invoke&lt;/code&gt; també és intel·ligent pel que fa a l&amp;rsquo;encaminament: quan s&amp;rsquo;executa un agent local, l&amp;rsquo;orienta automàticament. Quan no ho és, arriba al punt final remot.&lt;/p&gt;
&lt;h2 id="monitorització-en-temps-real"&gt;Monitorització en temps real&lt;/h2&gt;
&lt;p&gt;Aquesta és la característica que em va vendre. Un cop desplegat el vostre agent:&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;Cada sol·licitud i resposta que flueix pel vostre agent es transmet al vostre terminal en temps real. Per depurar problemes de producció, això és inestimable. Sense investigar l&amp;rsquo;analítica de registres, sense esperar que les mètriques s&amp;rsquo;agreguin; veuràs què està passant ara mateix.&lt;/p&gt;
&lt;h2 id="el-conjunt-dordres-complet"&gt;El conjunt d&amp;rsquo;ordres complet&lt;/h2&gt;
&lt;p&gt;Aquí teniu la referència ràpida:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Comandament&lt;/th&gt;
&lt;th&gt;Què fa&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;Armar un projecte d&amp;rsquo;agent de Foundry amb 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;Proveïu els recursos d&amp;rsquo;Azure i implementeu 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;Envieu sol·licituds a l&amp;rsquo;agent local o remot&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;Executeu l&amp;rsquo;agent localment per al desenvolupament&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;Transmet els registres en temps real de l&amp;rsquo;agent publicat&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;Comproveu l&amp;rsquo;estat i l&amp;rsquo;estat 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;Netegeu tots els recursos d&amp;rsquo;Azure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="per-què-això-és-important-per-als-desenvolupadors-denet"&gt;Per què això és important per als desenvolupadors de.NET&lt;/h2&gt;
&lt;p&gt;Tot i que la mostra de l&amp;rsquo;anunci està basada en Python, la història de la infraestructura és independent del llenguatge. El vostre agent.NET obté la mateixa bastida Bíceps, la mateixa configuració d&amp;rsquo;identitat gestionada, la mateixa canalització de monitorització. I si ja esteu utilitzant &lt;code&gt;azd&lt;/code&gt; per a les vostres aplicacions.NET Aspire o implementacions d&amp;rsquo;Azure, això s&amp;rsquo;adapta perfectament al vostre flux de treball existent.&lt;/p&gt;
&lt;p&gt;La bretxa de desplegament dels agents d&amp;rsquo;IA ha estat un dels punts de fricció més grans de l&amp;rsquo;ecosistema. Passar d&amp;rsquo;un prototip de treball a un punt final de producció amb una identitat, una xarxa i un seguiment adequats no hauria de requerir una setmana de treball DevOps. Ara requereix dues ordres i uns minuts.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd ai agent&lt;/code&gt; ja està disponible. Si heu postergat la implementació dels vostres agents d&amp;rsquo;IA perquè la configuració de la infraestructura us semblava massa feina, proveu-ho. Fes una ullada a la &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;tutorial completa&lt;/a&gt; per veure el pas a pas complet, inclosa la integració de l&amp;rsquo;aplicació de xat frontal.&lt;/p&gt;</content:encoded></item><item><title>El servei d'agents de Foundry és GA: el que realment importa per als constructors d'agents.NET</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</guid><description>El servei d'agents de Foundry de Microsoft acaba d'arribar a GA amb xarxes privades, Voice Live, avaluacions de producció i un temps d'execució obert multimodel. Aquí teniu el que heu de saber.</description><content:encoded>&lt;p&gt;Siguem sincers: construir un prototip d&amp;rsquo;agent d&amp;rsquo;IA és la part fàcil. La part difícil és que tot sigui després: posar-lo en producció amb un aïllament adequat de la xarxa, fer avaluacions que realment signifiquen alguna cosa, gestionar els requisits de compliment i no trencar les coses a les 2 del matí.&lt;/p&gt;
&lt;p&gt;El &lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;Foundry Agent Service acaba de passar a GA&lt;/a&gt;, i aquest llançament està centrat en aquest buit de &amp;ldquo;tot després&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="creat-a-partir-de-lapi-responses"&gt;Creat a partir de l&amp;rsquo;API Responses&lt;/h2&gt;
&lt;p&gt;Aquí teniu el titular: el servei d&amp;rsquo;agent de Foundry de nova generació es basa en l&amp;rsquo;API de respostes d&amp;rsquo;OpenAI. Si ja esteu creant amb aquest protocol de cable, migrar a Foundry és un canvi de codi mínim. Què obteniu: seguretat empresarial, xarxes privades, Entra RBAC, seguiment complet i avaluació, a més de la vostra lògica d&amp;rsquo;agent existent.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;arquitectura és oberta intencionadament. No esteu bloquejat a un proveïdor de models ni a un marc d&amp;rsquo;orquestració. Utilitzeu DeepSeek per a la planificació, OpenAI per a la generació, LangGraph per a l&amp;rsquo;orquestració: el temps d&amp;rsquo;execució gestiona la capa de coherència.&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 veniu del paquet &lt;code&gt;azure-ai-agents&lt;/code&gt;, ara els agents són operacions de primera classe a &lt;code&gt;AIProjectClient&lt;/code&gt; a &lt;code&gt;azure-ai-projects&lt;/code&gt;. Deixeu anar el pin autònom i utilitzeu &lt;code&gt;get_openai_client()&lt;/code&gt; per generar respostes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="xarxes-privades-sha-eliminat-el-bloquejador-empresarial"&gt;Xarxes privades: s&amp;rsquo;ha eliminat el bloquejador empresarial&lt;/h2&gt;
&lt;p&gt;Aquesta és la característica que desbloqueja l&amp;rsquo;adopció empresarial. Foundry ara admet xarxes privades d&amp;rsquo;extrem a extrem amb BYO VNet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sense sortida pública&lt;/strong&gt;: el trànsit d&amp;rsquo;agents no toca mai l&amp;rsquo;Internet pública&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Injecció de contenidor/subxarxa&lt;/strong&gt; a la vostra xarxa per a la comunicació local&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connectivitat d&amp;rsquo;eines inclosa&lt;/strong&gt;: els servidors MCP, Azure AI Search i els agents de dades de Fabric operen per camins privats&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aquest darrer punt és crític. No només les trucades d&amp;rsquo;inferència es mantenen privades: totes les trucades d&amp;rsquo;invocació i recuperació d&amp;rsquo;eines també es mantenen dins dels límits de la vostra xarxa. Per als equips que operen sota polítiques de classificació de dades que prohibeixen l&amp;rsquo;encaminament extern, això és el que faltava.&lt;/p&gt;
&lt;h2 id="autenticació-mcp-feta-correctament"&gt;Autenticació MCP feta correctament&lt;/h2&gt;
&lt;p&gt;Les connexions del servidor MCP ara admeten l&amp;rsquo;espectre complet de patrons d&amp;rsquo;autenticació:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mètode d&amp;rsquo;autenticació&lt;/th&gt;
&lt;th&gt;Quan s&amp;rsquo;ha d&amp;rsquo;utilitzar&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Basat en claus&lt;/td&gt;
&lt;td&gt;Accés compartit senzill per a eines internes de tota l&amp;rsquo;organització&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra la identitat de l&amp;rsquo;agent&lt;/td&gt;
&lt;td&gt;servei a servei; l&amp;rsquo;agent s&amp;rsquo;autentica com ell mateix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra a la identitat gestionada&lt;/td&gt;
&lt;td&gt;Aïllament per projecte; cap gestió de credencials&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Passthrough d&amp;rsquo;identitat OAuth&lt;/td&gt;
&lt;td&gt;Accés delegat per l&amp;rsquo;usuari; agent actua en nom dels usuaris&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;OAuth Identity Passthrough és l&amp;rsquo;interessant. Quan els usuaris han de concedir a un agent accés a les seves dades personals (el seu OneDrive, la seva organització de Salesforce, una API de SaaS definida per l&amp;rsquo;usuari), l&amp;rsquo;agent actua en nom seu amb els fluxos d&amp;rsquo;OAuth estàndard. No hi ha cap identitat de sistema compartida que pretengui ser tothom.&lt;/p&gt;
&lt;h2 id="voice-live-veu-a-veu-sense-la-fontaneria"&gt;Voice Live: veu a veu sense la fontaneria&lt;/h2&gt;
&lt;p&gt;Afegir veu a un agent solia significar unir STT, LLM i TTS: tres serveis, tres salts de latència, tres superfícies de facturació, tot sincronitzat a mà. &lt;strong&gt;Voice Live&lt;/strong&gt; ho col·lapsa en una única API gestionada amb:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Activitat de veu semàntica i detecció de final de torn (comprèn el significat, no només el silenci)&lt;/li&gt;
&lt;li&gt;Supressió de soroll del costat del servidor i cancel·lació d&amp;rsquo;eco&lt;/li&gt;
&lt;li&gt;Suport d&amp;rsquo;intrusió (els usuaris poden interrompre la resposta mitjana)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les interaccions de veu passen pel mateix temps d&amp;rsquo;execució de l&amp;rsquo;agent que el text. Els mateixos avaluadors, els mateixos rastres, la mateixa visibilitat de costos. Per a escenaris d&amp;rsquo;assistència al client, servei de camp o accessibilitat, això substitueix el que abans requeria una canalització d&amp;rsquo;àudio personalitzada.&lt;/p&gt;
&lt;h2 id="avaluacions-des-de-la-casella-de-selecció-fins-al-seguiment-continu"&gt;Avaluacions: des de la casella de selecció fins al seguiment continu&lt;/h2&gt;
&lt;p&gt;Aquí és on Foundry es pren seriosament sobre la qualitat de la producció. El sistema d&amp;rsquo;avaluació té ara tres capes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Avaluadors fora de la caixa&lt;/strong&gt;: coherència, rellevància, fonamentació, qualitat de recuperació, seguretat. Connecta&amp;rsquo;t a un conjunt de dades o trànsit en directe i recupera les puntuacions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Avaluadors personalitzats&lt;/strong&gt;: codifiqueu la vostra pròpia lògica empresarial, estàndards de to i regles de compliment específiques del domini.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Avaluació contínua&lt;/strong&gt;: Foundry mostra el trànsit de producció en directe, executa la vostra suite d&amp;rsquo;avaluadors i mostra els resultats mitjançant taulers de control. Establiu alertes d&amp;rsquo;Azure Monitor per quan cau la connexió a terra o incompliment dels llindars de seguretat.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tot es publica a Azure Monitor Application Insights. Qualitat de l&amp;rsquo;agent, salut de la infraestructura, cost i telemetria d&amp;rsquo;aplicacions, tot en un sol lloc.&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="sis-noves-regions-per-als-agents-allotjats"&gt;Sis noves regions per als agents allotjats&lt;/h2&gt;
&lt;p&gt;Els agents allotjats ara estan disponibles a l&amp;rsquo;est dels EUA, al nord del centre dels EUA, a Suècia al centre, al sud-est asiàtic, al Japó oriental i més. Això és important per als requisits de residència de les dades i per comprimir la latència quan el vostre agent s&amp;rsquo;executa a prop de les seves fonts de dades.&lt;/p&gt;
&lt;h2 id="per-què-això-és-important-per-als-desenvolupadors-denet"&gt;Per què això és important per als desenvolupadors de.NET&lt;/h2&gt;
&lt;p&gt;Tot i que les mostres de codi de l&amp;rsquo;anunci de GA són Python primer, la infraestructura subjacent és independent del llenguatge, i l&amp;rsquo;SDK.NET per a &lt;code&gt;azure-ai-projects&lt;/code&gt; segueix els mateixos patrons. L&amp;rsquo;API Responses, el marc d&amp;rsquo;avaluació, la xarxa privada, l&amp;rsquo;autenticació MCP, tot això està disponible a.NET.&lt;/p&gt;
&lt;p&gt;Si heu estat esperant que els agents d&amp;rsquo;IA passin de &amp;ldquo;demo fantàstica&amp;rdquo; a &amp;ldquo;Puc enviar-ho a la feina&amp;rdquo;, aquest llançament de GA és el senyal. Les xarxes privades, l&amp;rsquo;autenticació adequada, l&amp;rsquo;avaluació contínua i el seguiment de la producció són les peces que faltaven.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;El servei d&amp;rsquo;agent de Foundry ja està disponible. Instal·leu l&amp;rsquo;SDK, obriu &lt;a href="https://ai.azure.com"&gt;el portal&lt;/a&gt; i comenceu a crear. La &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;guia d&amp;rsquo;inici ràpid&lt;/a&gt; us porta de zero a un agent en execució en qüestió de minuts.&lt;/p&gt;
&lt;p&gt;Per obtenir la informació tècnica completa amb totes les mostres de codi, consulteu l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;anunci de GA&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>El servidor Azure DevOps MCP arriba a Microsoft Foundry: què significa això per als vostres agents d'IA</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</guid><description>El servidor Azure DevOps MCP ja està disponible a Microsoft Foundry. Connecteu els vostres agents d'IA directament als fluxos de treball de DevOps (elements de treball, repositoris, canalitzacions) amb uns quants clics.</description><content:encoded>&lt;p&gt;MCP (Model Context Protocol) ha tingut un moment. Si heu estat seguint l&amp;rsquo;ecosistema d&amp;rsquo;agents d&amp;rsquo;IA, probablement heu notat que els servidors MCP apareixen a tot arreu, donant als agents la possibilitat d&amp;rsquo;interaccionar amb eines i serveis externs mitjançant un protocol estandarditzat.&lt;/p&gt;
&lt;p&gt;Ara el &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;Servidor MCP d&amp;rsquo;Azure DevOps està disponible a Microsoft Foundry&lt;/a&gt;, i aquesta és una d&amp;rsquo;aquestes integracions que et fa pensar en les possibilitats pràctiques.&lt;/p&gt;
&lt;h2 id="què-està-passant-realment-aquí"&gt;Què està passant realment aquí&lt;/h2&gt;
&lt;p&gt;Microsoft ja va llançar l&amp;rsquo;Azure DevOps MCP Server com a &lt;a href="https://devblogs.microsoft.com/devops/azure-devops-remote-mcp-server-public-preview"&gt;vista prèvia pública&lt;/a&gt;, això és el propi servidor MCP. La novetat és la integració de Foundry. Ara podeu afegir l&amp;rsquo;Azure DevOps MCP Server als vostres agents de Foundry directament des del catàleg d&amp;rsquo;eines.&lt;/p&gt;
&lt;p&gt;Per a aquells que encara no estiguin familiaritzats amb Foundry: és la plataforma unificada de Microsoft per crear i gestionar aplicacions i agents basats en IA a escala. Accés al model, orquestració, avaluació, desplegament, tot en un sol lloc.&lt;/p&gt;
&lt;h2 id="configurant-lo"&gt;Configurant-lo&lt;/h2&gt;
&lt;p&gt;La configuració és sorprenentment senzilla:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Al vostre agent de Foundry, aneu a &lt;strong&gt;Afegeix eines&lt;/strong&gt; &amp;gt; &lt;strong&gt;Catàleg&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Cerqueu &amp;ldquo;Azure DevOps&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Seleccioneu el servidor Azure DevOps MCP (visualització prèvia) i feu clic a &lt;strong&gt;Crea&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Introduïu el nom de la vostra organització i connecteu-vos&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Això és tot. El vostre agent ara té accés a les eines d&amp;rsquo;Azure DevOps.&lt;/p&gt;
&lt;h2 id="controlar-a-què-pot-accedir-el-vostre-agent"&gt;Controlar a què pot accedir el vostre agent&lt;/h2&gt;
&lt;p&gt;Aquesta és la part que agraeixo: no us enganxeu amb un enfocament de tot o res. Podeu especificar quines eines estan disponibles per al vostre agent. Per tant, si només voleu que llegeixi elements de treball però no toqui les canalitzacions, podeu configurar-ho. Principi de privilegis mínims, aplicat als vostres agents d&amp;rsquo;IA.&lt;/p&gt;
&lt;p&gt;Això és important per als escenaris empresarials en què no voleu que un agent activi accidentalment una canalització de desplegament perquè algú li va demanar que &amp;ldquo;ajudés amb el llançament&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="per-què-això-és-interessant-per-als-equipsnet"&gt;Per què això és interessant per als equips.NET&lt;/h2&gt;
&lt;p&gt;Penseu en què permet això a la pràctica:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ajudants de planificació de sprint&lt;/strong&gt;: agents que poden extreure elements de treball, analitzar dades de velocitat i suggerir capacitat de sprint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bots de revisió de codi&lt;/strong&gt;: agents que entenen el vostre context de relacions públiques perquè poden llegir els vostres repositoris i els elements de treball enllaçats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resposta a incidents&lt;/strong&gt;: agents que poden crear elements de treball, consultar implementacions recents i correlacionar errors amb canvis recents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incorporació de desenvolupadors&lt;/strong&gt; — &amp;ldquo;En què he de treballar?&amp;rdquo; obté una resposta real recolzada per dades reals del projecte&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per als equips.NET que ja utilitzen Azure DevOps per als seus pipelines CI/CD i la gestió de projectes, tenir un agent d&amp;rsquo;IA que pugui interactuar directament amb aquests sistemes és un pas important cap a una automatització útil (no només chatbot com a servei).&lt;/p&gt;
&lt;h2 id="la-imatge-mcp-més-gran"&gt;La imatge MCP més gran&lt;/h2&gt;
&lt;p&gt;Això forma part d&amp;rsquo;una tendència més àmplia: els servidors MCP s&amp;rsquo;estan convertint en la manera estàndard en què els agents d&amp;rsquo;IA interactuen amb el món exterior. Els veiem per a GitHub, Azure DevOps, bases de dades, API SaaS, i Foundry s&amp;rsquo;està convertint en el centre on s&amp;rsquo;uneixen totes aquestes connexions.&lt;/p&gt;
&lt;p&gt;Si esteu creant agents a l&amp;rsquo;ecosistema.NET, val la pena prestar atenció a MCP. El protocol està estandarditzat, les eines estan madurant i la integració de Foundry el fa accessible sense haver de connectar manualment les connexions del servidor.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;El servidor Azure DevOps MCP a Foundry està en vista prèvia, així que espereu que evolucioni. Però el flux de treball bàsic és sòlid: connecteu-vos, configureu l&amp;rsquo;accés a les eines i deixeu que els vostres agents treballin amb les vostres dades de DevOps. Si ja sou a l&amp;rsquo;ecosistema de Foundry, això és a uns quants clics. Prova-ho i mira quins fluxos de treball pots crear.&lt;/p&gt;
&lt;p&gt;Consulteu l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;anunci complet&lt;/a&gt; per a la configuració pas a pas i més detalls.&lt;/p&gt;</content:encoded></item><item><title>Respostes de fons a Microsoft Agent Framework: no hi ha més ansietat de temps d'espera</title><link>https://thedotnetblog.com/ca/posts/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/ca/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</guid><description>Microsoft Agent Framework ara us permet descarregar tasques d'IA de llarga durada amb fitxes de continuació. A continuació s'explica com funcionen les respostes de fons i per què són importants per als vostres agents.NET.</description><content:encoded>&lt;p&gt;Si heu creat alguna cosa amb models de raonament com l&amp;rsquo;o3 o el GPT-5.2, coneixeu el dolor. El vostre agent comença a pensar en una tasca complexa, el client s&amp;rsquo;asseu allà esperant i en algun lloc entre &amp;ldquo;això està bé&amp;rdquo; i &amp;ldquo;s&amp;rsquo;ha estavellat?&amp;rdquo; la vostra connexió s&amp;rsquo;esgota. Tota aquesta feina? Desaparegut.&lt;/p&gt;
&lt;p&gt;Microsoft Agent Framework acaba d&amp;rsquo;enviar &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;respostes de fons&lt;/a&gt; i, sincerament, aquesta és una d&amp;rsquo;aquestes característiques que haurien d&amp;rsquo;haver existit des del primer dia.&lt;/p&gt;
&lt;h2 id="el-problema-amb-el-bloqueig-de-trucades"&gt;El problema amb el bloqueig de trucades&lt;/h2&gt;
&lt;p&gt;En un patró de sol·licitud-resposta tradicional, el vostre client es bloqueja fins que l&amp;rsquo;agent acabi. Això funciona bé per a tasques ràpides. Però quan demaneu a un model de raonament que faci una investigació profunda, una anàlisi en diversos passos o que generi un informe de 20 pàgines? Esteu mirant els minuts del rellotge de paret. Durant aquesta finestra:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les connexions HTTP es poden esgotar&lt;/li&gt;
&lt;li&gt;Els blips de xarxa maten tota l&amp;rsquo;operació&lt;/li&gt;
&lt;li&gt;El vostre usuari mira un spinner preguntant-se si està passant alguna cosa&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les respostes de fons donen la volta a això.&lt;/p&gt;
&lt;h2 id="com-funcionen-les-fitxes-de-continuació"&gt;Com funcionen les fitxes de continuació&lt;/h2&gt;
&lt;p&gt;En lloc de bloquejar, inicieu la tasca de l&amp;rsquo;agent i recupereu un &lt;strong&gt;token de continuació&lt;/strong&gt;. Penseu-ho com un bitllet de reclamació en un taller de reparacions: no us quedeu al taulell esperant, torneu quan estigui llest.&lt;/p&gt;
&lt;p&gt;El flux és senzill:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Envieu la vostra sol·licitud amb &lt;code&gt;AllowBackgroundResponses = true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Si l&amp;rsquo;agent admet el processament en segon pla, obtindreu un testimoni de continuació&lt;/li&gt;
&lt;li&gt;Enquesta sobre el teu horari fins que el testimoni torni &lt;code&gt;null&lt;/code&gt;; això vol dir que el resultat està preparat&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Aquí teniu la versió de.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;// Poll until complete&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 completa immediatament (tasques senzilles, models que no necessiten processament en segon pla), no es retorna cap testimoni de continuació. El vostre codi només funciona, no cal cap manipulació especial.&lt;/p&gt;
&lt;h2 id="transmissió-amb-currículum-la-veritable-màgia"&gt;Transmissió amb currículum: la veritable màgia&lt;/h2&gt;
&lt;p&gt;Les enquestes estan bé per als escenaris de foc i oblit, però què passa quan voleu progrés en temps real? Les respostes en segon pla també admeten la transmissió amb la represa integrada.&lt;/p&gt;
&lt;p&gt;Cada actualització en streaming porta el seu propi testimoni de continuació. Si la vostra connexió cau a la meitat del flux, repreneu exactament on ho vau deixar:&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;// Simulate a network interruption&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;// Resume from exactly where we left off&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 continua processant el costat del servidor independentment del que passi amb el vostre client. Això és una tolerància a fallades integrada sense que escriviu la lògica de reintent o els interruptors.&lt;/p&gt;
&lt;h2 id="quan-sha-dutilitzar-realment"&gt;Quan s&amp;rsquo;ha d&amp;rsquo;utilitzar realment&lt;/h2&gt;
&lt;p&gt;No totes les trucades d&amp;rsquo;agent necessiten respostes en segon pla. Per completar-les ràpidament, esteu afegint complexitat sense cap motiu. Però aquí és on brillen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tasques de raonament complexes&lt;/strong&gt;: anàlisi en diversos passos, investigació profunda, qualsevol cosa que faci pensar realment a un model de raonament&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generació llarga de contingut&lt;/strong&gt;: informes detallats, documents de diverses parts, anàlisis exhaustives&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xarxes poc fiables&lt;/strong&gt;: clients mòbils, desplegaments perifèrics, VPN corporatives descabellades&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patrons UX asíncrons&lt;/strong&gt;: envieu una tasca, aneu a fer una altra cosa, torneu per obtenir resultats&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per als desenvolupadors de.NET que creem aplicacions empresarials, aquesta última és especialment interessant. Penseu en una aplicació Blazor en què un usuari sol·licita un informe complex: desactiveu la tasca de l&amp;rsquo;agent, els mostreu un indicador de progrés i deixeu que continuï treballant. Sense gimnàstica WebSocket, sense infraestructura de cua personalitzada, només un testimoni i un bucle d&amp;rsquo;enquesta.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Les respostes de fons estan disponibles ara tant a.NET com a Python mitjançant Microsoft Agent Framework. Si esteu creant agents que fan alguna cosa més complexa que les simples preguntes i respostes, val la pena afegir-ho al vostre conjunt d&amp;rsquo;eines. El patró de testimoni de continuació manté les coses senzilles alhora que resol un problema de producció molt real.&lt;/p&gt;
&lt;p&gt;Consulteu la &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;documentació completa&lt;/a&gt; per obtenir la referència completa de l&amp;rsquo;API i més exemples.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.112: Què haurien de preocupar-se realment als desenvolupadors de.NET</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/</guid><description>VS Code 1.112 acaba de caure i està ple d'actualitzacions d'agents, un depurador de navegador integrat, MCP sandboxing i suport monorepo. Això és el que realment importa si esteu creant amb.NET.</description><content:encoded>&lt;p&gt;VS Code 1.112 acaba d&amp;rsquo;aterrar, i sincerament? Aquest és diferent si passeu els vostres dies a la terra.NET. Hi ha moltes coses a les &lt;a href="https://code.visualstudio.com/updates/v1_112"&gt;notes oficials de la versió&lt;/a&gt;, però permeteu-me que us estalviï una mica de desplaçament i que em concentri en allò que realment ens importa.&lt;/p&gt;
&lt;h2 id="copilot-cli-acaba-de-ser-molt-més-útil"&gt;Copilot CLI acaba de ser molt més útil&lt;/h2&gt;
&lt;p&gt;El gran tema d&amp;rsquo;aquest llançament és &lt;strong&gt;autonomia de l&amp;rsquo;agent&lt;/strong&gt;, donant més espai a Copilot per fer les seves coses sense que facis de cangur a cada pas.&lt;/p&gt;
&lt;h3 id="direcció-i-cua-de-missatges"&gt;Direcció i cua de missatges&lt;/h3&gt;
&lt;p&gt;Coneixes aquell moment en què Copilot CLI està a mig camí d&amp;rsquo;una tasca i t&amp;rsquo;adones que t&amp;rsquo;has oblidat d&amp;rsquo;esmentar alguna cosa? Abans, calia esperar. Ara només podeu enviar missatges mentre una sol·licitud encara s&amp;rsquo;està executant, ja sigui per dirigir la resposta actual o posar en cua les instruccions de seguiment.&lt;/p&gt;
&lt;p&gt;Això és enorme per a aquelles tasques més llargues de bastida &lt;code&gt;dotnet&lt;/code&gt; en què esteu veient Copilot configura un projecte i penseu &amp;ldquo;oh, espera, també necessito MassTransit&amp;rdquo;.&lt;/p&gt;
&lt;h3 id="nivells-de-permís"&gt;Nivells de permís&lt;/h3&gt;
&lt;p&gt;Aquest és el que m&amp;rsquo;emociona més. Les sessions de Copilot CLI ara admeten tres nivells de permís:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Permisos predeterminats&lt;/strong&gt;: el flux habitual on les eines demanen confirmació abans d&amp;rsquo;executar-se&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evita les aprovacions&lt;/strong&gt;: s&amp;rsquo;aprova tot automàticament i torna a provar els errors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pilot automàtic&lt;/strong&gt;: és totalment autònom: aprova les eines, respon a les seves pròpies preguntes i continua fins que es fa la tasca&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si esteu fent alguna cosa com la bastida d&amp;rsquo;una nova API ASP.NET Core amb Entity Framework, migracions i una configuració de Docker, el mode Autopilot significa que descriu el que voleu i aneu a prendre un cafè. Ho descobrirà.&lt;/p&gt;
&lt;p&gt;Podeu habilitar el pilot automàtic amb la configuració &lt;code&gt;chat.autopilot.enabled&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="previsualitza-els-canvis-abans-de-la-delegació"&gt;Previsualitza els canvis abans de la delegació&lt;/h3&gt;
&lt;p&gt;Quan delegueu una tasca a Copilot CLI, es crea un arbre de treball. Abans, si teníeu canvis no compromesos, havíeu de comprovar el control de fonts per veure què es veuria afectat. Ara, la vista de xat mostra els canvis pendents abans de decidir si els voleu copiar, moure o ignorar-los.&lt;/p&gt;
&lt;p&gt;Poca cosa, però us salva d&amp;rsquo;aquell &amp;ldquo;espera, què he posat en escena?&amp;rdquo; moment.&lt;/p&gt;
&lt;h2 id="depura-les-aplicacions-web-sense-sortir-de-vs-code"&gt;Depura les aplicacions web sense sortir de VS Code&lt;/h2&gt;
&lt;p&gt;El navegador integrat ara admet &lt;strong&gt;depuració completa&lt;/strong&gt;. Podeu establir punts d&amp;rsquo;interrupció, passar pel codi i inspeccionar variables, tot dins de VS Code. No més canviar a Edge DevTools.&lt;/p&gt;
&lt;p&gt;Hi ha un nou tipus de depuració &lt;code&gt;editor-browser&lt;/code&gt; i si ja teniu configuracions de llançament de &lt;code&gt;msedge&lt;/code&gt; o &lt;code&gt;chrome&lt;/code&gt;, la migració és tan senzilla com canviar el camp &lt;code&gt;type&lt;/code&gt; al vostre &lt;code&gt;launch.json&lt;/code&gt;:&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;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;editor-browser&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;request&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;launch&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;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Debug Blazor App&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;url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://localhost:5001&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;Per als desenvolupadors de Blazor, això és un canvi de joc. Ja esteu executant &lt;code&gt;dotnet watch&lt;/code&gt; al terminal; ara la vostra depuració també es manté a la mateixa finestra.&lt;/p&gt;
&lt;p&gt;El navegador també va obtenir nivells de zoom independents (finalment), menús contextuals adequats del clic dret i el zoom es recorda per lloc web.&lt;/p&gt;
&lt;h2 id="sandboxing-del-servidor-mcp"&gt;Sandboxing del servidor MCP&lt;/h2&gt;
&lt;p&gt;Aquest és més important del que podríeu pensar. Si utilitzeu servidors MCP (potser n&amp;rsquo;heu configurat un de personalitzat per als vostres recursos d&amp;rsquo;Azure o consultes de base de dades), s&amp;rsquo;han executat amb els mateixos permisos que el vostre procés de VS Code. Això significa un accés complet al vostre sistema de fitxers, xarxa, tot.&lt;/p&gt;
&lt;p&gt;Ara els podeu sorrar. Al teu &lt;code&gt;mcp.json&lt;/code&gt;:&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;servers&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;my-azure-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;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;node&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;args&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;./mcp-server.js&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;sandboxEnabled&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;p&gt;Quan un servidor amb caixa de sorra necessita accés a alguna cosa que no té, VS Code us demana que atorgueu permís. Molt millor que l&amp;rsquo;enfocament &amp;ldquo;Espero que ningú faci res estrany&amp;rdquo;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Sandboxing està disponible per ara a macOS i Linux. Arriba el suport de Windows, però escenaris remots com WSL funcionen.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="descobriment-de-personalitzacions-de-monorepo"&gt;Descobriment de personalitzacions de Monorepo&lt;/h2&gt;
&lt;p&gt;Si esteu treballant en un monorepo (i siguem sincers, moltes solucions empresarials.NET acaben com una), això resol un veritable problema.&lt;/p&gt;
&lt;p&gt;Anteriorment, si obríeu una subcarpeta del vostre repositori, VS Code no trobaria les vostres habilitats &lt;code&gt;copilot-instructions.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt; o personalitzades a l&amp;rsquo;arrel del dipòsit. Ara, amb la configuració &lt;code&gt;chat.useCustomizationsInParentRepositories&lt;/code&gt;, puja a l&amp;rsquo;arrel &lt;code&gt;.git&lt;/code&gt; i ho descobreix tot.&lt;/p&gt;
&lt;p&gt;Això significa que el vostre equip pot compartir instruccions de l&amp;rsquo;agent, fitxers de sol·licitud i eines personalitzades en tots els projectes en un monorepo sense que tothom hagi d&amp;rsquo;obrir la carpeta arrel.&lt;/p&gt;
&lt;h2 id="resolució-de-problemes-per-a-la-depuració-de-lagent"&gt;/resolució de problemes per a la depuració de l&amp;rsquo;agent&lt;/h2&gt;
&lt;p&gt;Alguna vegada has configurat instruccions o habilitats personalitzades i t&amp;rsquo;has preguntat per què no les recullen? La nova habilitat &lt;code&gt;/troubleshoot&lt;/code&gt; llegeix els registres de depuració de l&amp;rsquo;agent i us diu què va passar: quines eines s&amp;rsquo;han utilitzat o s&amp;rsquo;han omès, per què les instruccions no s&amp;rsquo;han carregat i què està causant respostes lentes.&lt;/p&gt;
&lt;p&gt;Activa-ho amb:&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;github.copilot.chat.agentDebugLog.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;github.copilot.chat.agentDebugLog.fileLogging.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&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;A continuació, només cal escriure &lt;code&gt;/troubleshoot why is my custom skill not loading?&lt;/code&gt; al xat.&lt;/p&gt;
&lt;p&gt;També podeu exportar i importar aquests registres de depuració ara, la qual cosa és ideal per compartir amb el vostre equip quan alguna cosa no funciona com s&amp;rsquo;esperava.&lt;/p&gt;
&lt;h2 id="compatibilitat-amb-imatges-i-fitxers-binaris"&gt;Compatibilitat amb imatges i fitxers binaris&lt;/h2&gt;
&lt;p&gt;Els agents ara poden llegir fitxers d&amp;rsquo;imatge del disc i fitxers binaris de manera nativa. Els fitxers binaris es presenten en format hexdump i les sortides d&amp;rsquo;imatge (com les captures de pantalla del navegador integrat) es mostren en una vista de carrusel.&lt;/p&gt;
&lt;p&gt;Per als desenvolupadors de.NET, penseu: enganxeu una captura de pantalla d&amp;rsquo;un error de la interfície d&amp;rsquo;usuari al xat i feu que l&amp;rsquo;agent entengui què passa, o feu que analitzi la sortida d&amp;rsquo;una representació de component Blazor.&lt;/p&gt;
&lt;h2 id="referències-de-símbols-automàtiques"&gt;Referències de símbols automàtiques&lt;/h2&gt;
&lt;p&gt;Petita millora de la qualitat de vida: quan copieu un nom de símbol (una classe, un mètode, etc.) i l&amp;rsquo;enganxeu al xat, ara VS Code el converteix automàticament en una referència &lt;code&gt;#sym:Name&lt;/code&gt;. Això proporciona a l&amp;rsquo;agent un context complet sobre aquest símbol sense que hàgiu d&amp;rsquo;afegir-lo manualment.&lt;/p&gt;
&lt;p&gt;Si voleu text sense format, feu servir &lt;code&gt;Ctrl+Shift+V&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="els-connectors-ara-es-poden-activardesactivar"&gt;Els connectors ara es poden activar/desactivar&lt;/h2&gt;
&lt;p&gt;Abans, desactivar un servidor o connector MCP significava desinstal·lar-lo. Ara podeu activar-los i desactivar-los, tant a nivell global com per espai de treball. Feu clic amb el botó dret a la vista Extensions o a la vista Personalitzacions i ja heu acabat.&lt;/p&gt;
&lt;p&gt;Els connectors de npm i pypi també es poden actualitzar automàticament ara, tot i que primer demanaran l&amp;rsquo;aprovació, ja que les actualitzacions signifiquen executar codi nou a la vostra màquina.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;VS Code 1.112 està clarament empenyent l&amp;rsquo;experiència de l&amp;rsquo;agent: més autonomia, millor depuració, seguretat més estricta. Per als desenvolupadors de.NET, la depuració integrada del navegador i les millores de Copilot CLI són les característiques més destacades.&lt;/p&gt;
&lt;p&gt;Si encara no heu provat d&amp;rsquo;executar una sessió CLI Copilot completa en mode Autopilot per a un projecte.NET, aquesta versió és un bon moment per començar. Només recordeu establir els vostres permisos i deixar-ho cuinar.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/updates/v1_112"&gt;Descarregueu VS Code 1.112&lt;/a&gt; o actualitzeu-ho des de VS Code mitjançant &lt;strong&gt;Ajuda &amp;gt; Comproveu actualitzacions&lt;/strong&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>