<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Azure | The .NET Blog</title><link>https://thedotnetblog.com/ca/tags/azure/</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/azure/index.xml" rel="self" type="application/rss+xml"/><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>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>azd + GitHub Copilot: Configuració de projecte amb IA i resolució intel·ligent d'errors</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</guid><description>L'Azure Developer CLI ara s'integra amb GitHub Copilot per generar la infraestructura del teu projecte i resoldre errors de desplegament — sense sortir del terminal.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Aquest article ha estat traduït automàticament. Per veure la versió original en anglès, &lt;a href="https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/"&gt;fes clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Coneixes aquell moment en què vols desplegar una aplicació existent a Azure i et quedes mirant un &lt;code&gt;azure.yaml&lt;/code&gt; en blanc, intentant recordar si la teva API Express hauria d&amp;rsquo;usar Container Apps o App Service? Aquell moment acaba de ser molt més curt.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) ara s&amp;rsquo;integra amb GitHub Copilot de dues maneres concretes: scaffolding assistit per IA durant &lt;code&gt;azd init&lt;/code&gt;, i resolució intel·ligent d&amp;rsquo;errors quan els desplegaments fallen. Les dues funcions es queden completament al terminal — exactament on vull que siguin.&lt;/p&gt;
&lt;h2 id="configuració-amb-copilot-durant-azd-init"&gt;Configuració amb Copilot durant azd init&lt;/h2&gt;
&lt;p&gt;Quan executes &lt;code&gt;azd init&lt;/code&gt;, ara apareix l&amp;rsquo;opció &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Selecciona-la i Copilot analitza el teu codebase per generar l&amp;rsquo;&lt;code&gt;azure.yaml&lt;/code&gt;, les plantilles d&amp;rsquo;infraestructura i els mòduls Bicep — basant-se en el teu codi real.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd init
# Selecciona: &amp;#34;Set up with GitHub Copilot (Preview)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Requisits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;azd 1.23.11 o superior&lt;/strong&gt; — comprova amb &lt;code&gt;azd version&lt;/code&gt; o actualitza amb &lt;code&gt;azd update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Una subscripció activa de GitHub Copilot&lt;/strong&gt; (Individual, Business o Enterprise)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub CLI (&lt;code&gt;gh&lt;/code&gt;)&lt;/strong&gt; — &lt;code&gt;azd&lt;/code&gt; demanarà login si cal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El que trobo genuïnament útil és que funciona en els dos sentits. Construint des de zero? Copilot t&amp;rsquo;ajuda a configurar els serveis Azure correctes des del principi. Tens una app existent que vols desplegar? Apunta Copilot cap a ella i genera la configuració sense haver de reestructurar res.&lt;/p&gt;
&lt;h3 id="el-que-fa-realment"&gt;El que fa realment&lt;/h3&gt;
&lt;p&gt;Imagina que tens una API Express en Node.js amb dependència de PostgreSQL. En lloc de decidir manualment entre Container Apps i App Service, i després escriure Bicep des de zero, Copilot detecta el teu stack i genera:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un &lt;code&gt;azure.yaml&lt;/code&gt; amb els ajustaments correctes de &lt;code&gt;language&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt; i &lt;code&gt;build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Un mòdul Bicep per a Azure Container Apps&lt;/li&gt;
&lt;li&gt;Un mòdul Bicep per a Azure Database for PostgreSQL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I fa comprovacions prèvies abans de tocar res — verifica que el teu directori git estigui net, demana consentiment per a les eines del servidor MCP. Res no passa sense que sàpigues exactament què canviarà.&lt;/p&gt;
&lt;h2 id="resolució-derrors-amb-copilot"&gt;Resolució d&amp;rsquo;errors amb Copilot&lt;/h2&gt;
&lt;p&gt;Els errors de desplegament són inevitables. Paràmetres que falten, problemes de permisos, disponibilitat de SKUs — i el missatge d&amp;rsquo;error rarament et diu l&amp;rsquo;única cosa que realment necessites saber: &lt;em&gt;com solucionar-ho&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Sense Copilot, el cicle és: copiar l&amp;rsquo;error → buscar als docs → llegir tres respostes irrellevants de Stack Overflow → executar alguns comandos &lt;code&gt;az&lt;/code&gt; CLI → tornar-ho a intentar i rezar. Amb Copilot integrat a &lt;code&gt;azd&lt;/code&gt;, aquest cicle s&amp;rsquo;esfondra. Quan qualsevol comandament &lt;code&gt;azd&lt;/code&gt; falla, ofereix immediatament quatre opcions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt; — descripció en llenguatge natural del que ha anat malament&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance&lt;/strong&gt; — instruccions pas a pas per solucionar-ho&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose and Guide&lt;/strong&gt; — anàlisi completa + Copilot aplica la solució (amb la teva aprovació) + reintent opcional&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip&lt;/strong&gt; — gestionar-ho tu mateix&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El punt clau: Copilot ja té context sobre el teu projecte, el comandament que ha fallat i la sortida de l&amp;rsquo;error. Les seves suggerències són específiques per a &lt;em&gt;la teva situació&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id="configurar-un-comportament-predeterminat"&gt;Configurar un comportament predeterminat&lt;/h3&gt;
&lt;p&gt;Si sempre tries la mateixa opció, salta el prompt interactiu:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.category troubleshoot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Valors: &lt;code&gt;explain&lt;/code&gt;, &lt;code&gt;guidance&lt;/code&gt;, &lt;code&gt;troubleshoot&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;skip&lt;/code&gt;. També pots habilitar auto-fix i reintent:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.fix allow
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Torna al mode interactiu en qualsevol moment:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config unset copilot.errorHandling.category
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="conclusió"&gt;Conclusió&lt;/h2&gt;
&lt;p&gt;Executa &lt;code&gt;azd update&lt;/code&gt; per obtenir la versió més recent i usa &lt;code&gt;azd init&lt;/code&gt; en el teu proper projecte. És exactament el tipus d&amp;rsquo;integració de Copilot que aporta valor real.&lt;/p&gt;
&lt;p&gt;Llegeix l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/"&gt;anunci original aquí&lt;/a&gt;.&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>Les eines MCP d'Azure s'incorporen ara a Visual Studio 2022: no es requereix cap extensió</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</guid><description>Les eines d'Azure MCP s'envien com a part de la càrrega de treball de desenvolupament d'Azure a Visual Studio 2022. Més de 230 eines, 45 serveis d'Azure, sense extensions per instal·lar.</description><content:encoded>&lt;p&gt;Si heu estat utilitzant les eines de l&amp;rsquo;Azure MCP a Visual Studio mitjançant l&amp;rsquo;extensió separada, ja coneixeu l&amp;rsquo;exercici: instal·leu el VSIX, reinicieu, espereu que no es trenqui, gestioneu els desajustos de versions. Aquesta fricció ha desaparegut.&lt;/p&gt;
&lt;p&gt;Yun Jung Choi &lt;a href="https://devblogs.microsoft.com/visualstudio/azure-mcp-tools-now-ship-built-into-visual-studio-2022-no-extension-required/"&gt;va anunciar&lt;/a&gt; que les eines d&amp;rsquo;Azure MCP ara s&amp;rsquo;envien directament com a part de la càrrega de treball de desenvolupament d&amp;rsquo;Azure a Visual Studio 2022. Sense extensió. No VSIX. No reinicia el ball.&lt;/p&gt;
&lt;h2 id="què-significa-realment-això"&gt;Què significa realment això&lt;/h2&gt;
&lt;p&gt;A partir de la versió 17.14.30 de Visual Studio 2022, l&amp;rsquo;Azure MCP Server s&amp;rsquo;inclou amb la càrrega de treball de desenvolupament d&amp;rsquo;Azure. Si ja teniu aquesta càrrega de treball instal·lada, només cal que l&amp;rsquo;activeu a GitHub Copilot Chat i ja heu acabat.&lt;/p&gt;
&lt;p&gt;Més de 230 eines en 45 serveis Azure, accessibles directament des de la finestra de xat. Enumereu els vostres comptes d&amp;rsquo;emmagatzematge, implementeu una aplicació ASP.NET Core, diagnostiqueu problemes del servei d&amp;rsquo;aplicacions, consulteu Log Analytics, tot sense obrir una pestanya del navegador.&lt;/p&gt;
&lt;h2 id="per-què-això-importa-més-del-que-sembla"&gt;Per què això importa més del que sembla&lt;/h2&gt;
&lt;p&gt;Això és el que passa amb les eines per a desenvolupadors: cada pas addicional és fricció i la fricció mata l&amp;rsquo;adopció. Tenir MCP com a extensió independent significava desajustos de versions, errors d&amp;rsquo;instal·lació i una cosa més a mantenir actualitzada. Incorporar-lo a la càrrega de treball significa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Camí d&amp;rsquo;actualització únic&lt;/strong&gt; mitjançant l&amp;rsquo;instal·lador de Visual Studio&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sense deriva de versió&lt;/strong&gt; entre l&amp;rsquo;extensió i l&amp;rsquo;IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sempre actual&lt;/strong&gt;: el servidor MCP s&amp;rsquo;actualitza amb versions regulars de VS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per als equips que s&amp;rsquo;estandarditzen a Azure, això és un gran problema. Instal·leu la càrrega de treball una vegada, activeu les eines i hi són per a cada sessió.&lt;/p&gt;
&lt;h2 id="què-pots-fer-amb-ell"&gt;Què pots fer amb ell&lt;/h2&gt;
&lt;p&gt;Les eines cobreixen tot el cicle de vida del desenvolupament mitjançant Copilot Chat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aprendre&lt;/strong&gt;: pregunteu sobre els serveis d&amp;rsquo;Azure, les pràctiques recomanades i els patrons d&amp;rsquo;arquitectura&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Disseny i desenvolupament&lt;/strong&gt;: obteniu recomanacions de servei, configureu el codi de l&amp;rsquo;aplicació&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Desplega&lt;/strong&gt;: proveïu recursos i implementeu-los directament des de l&amp;rsquo;IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resolució de problemes&lt;/strong&gt;: consulteu registres, comproveu l&amp;rsquo;estat dels recursos, diagnosticeu problemes de producció&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un exemple ràpid: escriviu això a Copilot Chat:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;List my storage accounts in my current subscription.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Copilot truca a les eines d&amp;rsquo;Azure MCP darrere de les escenes, consulta les vostres subscripcions i retorna una llista amb format amb noms, ubicacions i SKU. No cal cap portal.&lt;/p&gt;
&lt;h2 id="com-activar-lo"&gt;Com activar-lo&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Actualització a Visual Studio 2022 &lt;strong&gt;17.14.30&lt;/strong&gt; o superior&lt;/li&gt;
&lt;li&gt;Assegureu-vos que la càrrega de treball &lt;strong&gt;Desenvolupament d&amp;rsquo;Azure&lt;/strong&gt; estigui instal·lada&lt;/li&gt;
&lt;li&gt;Obriu GitHub Copilot Chat&lt;/li&gt;
&lt;li&gt;Feu clic al botó &lt;strong&gt;Selecciona eines&lt;/strong&gt; (la icona de dues claus)&lt;/li&gt;
&lt;li&gt;Activa &lt;strong&gt;Servidor MCP d&amp;rsquo;Azure&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Això és tot. Es manté activat durant les sessions.&lt;/p&gt;
&lt;h2 id="una-advertència"&gt;Una advertència&lt;/h2&gt;
&lt;p&gt;Les eines estan desactivades de manera predeterminada: heu d&amp;rsquo;activar-les. I les eines específiques de VS 2026 no estan disponibles a VS 2022. La disponibilitat de les eines també depèn dels vostres permisos de subscripció a Azure, igual que el portal.&lt;/p&gt;
&lt;h2 id="la-imatge-més-gran"&gt;La imatge més gran&lt;/h2&gt;
&lt;p&gt;Això forma part d&amp;rsquo;una tendència clara: MCP s&amp;rsquo;està convertint en la forma estàndard d&amp;rsquo;aprofitar les eines de núvol en els IDE de desenvolupadors. Ja hem vist la &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;versión estable d&amp;rsquo;Azure MCP Server 2.0&lt;/a&gt; i les integracions MCP a VS Code i altres editors. Tenir-lo integrat al sistema de càrrega de treball de Visual Studio és la progressió natural.&lt;/p&gt;
&lt;p&gt;Per als desenvolupadors de.NET que vivim a Visual Studio, això elimina un altre motiu per canviar de context al portal Azure. I sincerament, com menys canvis de pestanya, millor.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 obté MongoDB EF Core i Azure Data Lake: dues integracions que val la pena provar</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</guid><description>Aspire 13.2 afegeix integracions MongoDB Entity Framework Core i Azure Data Lake Storage amb comprovacions de salut i descobriment de serveis sense configuració. Aquí teniu el que semblen a la pràctica.</description><content:encoded>&lt;p&gt;Aspire 13.2 acaba d&amp;rsquo;aterrar amb &lt;a href="https://devblogs.microsoft.com/aspire/aspire-new-database-integrations/"&gt;dues noves integracions de bases de dades&lt;/a&gt; que mereixen la vostra atenció: MongoDB Entity Framework Core i Azure Data Lake Storage. Si heu volgut utilitzar EF Core amb MongoDB en una aplicació Aspire o necessiteu connectar les càrregues de treball del llac de dades amb un descobriment de serveis adequat, aquesta versió ofereix tots dos.&lt;/p&gt;
&lt;h2 id="mongodb-compleix-ef-core-a-aspire"&gt;MongoDB compleix EF Core a Aspire&lt;/h2&gt;
&lt;p&gt;Aquest és el que m&amp;rsquo;emociona més. Aspire ha donat suport a MongoDB durant un temps, però sempre va ser el controlador en brut: sense EF Core, sense &lt;code&gt;DbContext&lt;/code&gt;, sense consultes LINQ als vostres documents. Ara teniu l&amp;rsquo;experiència completa d&amp;rsquo;EF Core amb MongoDB, a més de les comprovacions automàtiques de l&amp;rsquo;estat i el descobriment de serveis d&amp;rsquo;Aspire.&lt;/p&gt;
&lt;p&gt;Configurar-lo és el patró típic d&amp;rsquo;Aspire. Al vostre AppHost:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;mongodb&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithDataVolume&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithLifetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ContainerLifetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Persistent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;apiService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ApiService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mongodb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A continuació, al vostre projecte de consum, afegiu la integració d&amp;rsquo;EF Core:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Aspire.MongoDB.EntityFrameworkCore
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I registre el teu &lt;code&gt;DbContext&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;mydb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A partir d&amp;rsquo;aquí, és EF Core estàndard. Defineix les teves entitats, utilitza el teu &lt;code&gt;DbContext&lt;/code&gt; com ho faries amb qualsevol altre proveïdor. La integració gestiona l&amp;rsquo;agrupació de connexions, les traces d&amp;rsquo;OpenTelemetry i les comprovacions de salut darrere de les escenes.&lt;/p&gt;
&lt;p&gt;Per als desenvolupadors de.NET que han estat utilitzant MongoDB amb el controlador en brut i cablejat manualment les cadenes de connexió, aquesta és una bona actualització de qualitat de vida. Obteniu l&amp;rsquo;abstracció completa d&amp;rsquo;EF Core sense perdre el descobriment del servei d&amp;rsquo;Aspire.&lt;/p&gt;
&lt;h2 id="azure-data-lake-storage-suneix-a-la-festa"&gt;Azure Data Lake Storage s&amp;rsquo;uneix a la festa&lt;/h2&gt;
&lt;p&gt;La segona gran incorporació és una &lt;a href="https://aspire.dev/integrations/cloud/azure/azure-storage-datalake/"&gt;integració d&amp;rsquo;Azure Data Lake Storage (ADLS)&lt;/a&gt;. Si esteu creant canalitzacions de dades, processos ETL o plataformes d&amp;rsquo;anàlisi, ara podeu connectar els recursos de Data Lake de la mateixa manera que connectaríeu qualsevol altra dependència d&amp;rsquo;Aspire.&lt;/p&gt;
&lt;p&gt;A l&amp;rsquo;AppHost:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureStorage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;azure-storage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;dataLake&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;fileSystem&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLakeFileSystem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;analyticsService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AnalyticsService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;analytics&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataLake&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileSystem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En el projecte de consum:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeServiceClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeFileSystemClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sense gestió manual de cadenes de connexió, sense recerca de credencials. Aspire proporciona recursos i els injecta. Per a aquells de nosaltres que creem aplicacions.NET natives del núvol que toquen tant dades operatives com càrregues de treball d&amp;rsquo;anàlisi, això fa que el llac de dades se senti com un ciutadà de primera classe en el model Aspire.&lt;/p&gt;
&lt;h2 id="les-petites-solucions-que-importen"&gt;Les petites solucions que importen&lt;/h2&gt;
&lt;p&gt;Més enllà de les funcions dels titulars, hi ha algunes millores en la qualitat de vida que cal destacar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Correcció de cadena de connexió MongoDB&lt;/strong&gt;: la barra inclinada abans del nom de la base de dades ara es gestiona correctament. Si heu treballat amb això, podeu eliminar aquesta solució&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exporta SQL Server&lt;/strong&gt; — &lt;code&gt;Aspire.Hosting.SqlServer&lt;/code&gt; ara exporta opcions addicionals de configuració del servidor per a un control més detallat&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Actualitzacions de l&amp;rsquo;emulador&lt;/strong&gt;: l&amp;rsquo;emulador ServiceBus 2.0.0, l&amp;rsquo;emulador de configuració d&amp;rsquo;aplicacions 1.0.2 i l&amp;rsquo;emulador de vista prèvia de CosmosDB ara inclou una comprovació de la preparació&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Azure Managed Redis&lt;/strong&gt;: ara el valor predeterminat és &lt;code&gt;rediss://&lt;/code&gt; (Redis Secure), de manera que les connexions es xifren de manera immediata&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aquest últim és subtil però important: Redis xifrat per defecte significa una cosa menys per configurar en producció.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 és una versió incremental, però les integracions MongoDB EF Core i Data Lake omplen buits reals. Si estàveu esperant el suport adequat d&amp;rsquo;EF Core amb MongoDB a Aspire, o necessiteu que Data Lake sigui una dependència de primera classe, &lt;a href="https://get.aspire.dev"&gt;actualitzeu a 13.2&lt;/a&gt; i feu-los una volta. L&amp;rsquo;ordre &lt;code&gt;aspire add&lt;/code&gt; inclou tot el que necessiteu.&lt;/p&gt;
&lt;p&gt;Llegiu les &lt;a href="https://aspire.dev/whats-new/aspire-13-2/#-integrations-updates"&gt;notes completes de la versió&lt;/a&gt; per obtenir més detalls i consulteu la &lt;a href="https://aspire.dev/integrations/gallery/"&gt;galeria d&amp;rsquo;integració&lt;/a&gt; per obtenir la llista completa.&lt;/p&gt;</content:encoded></item><item><title>azd update: una comanda per controlar tots els vostres gestors de paquets</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>L'Azure Developer CLI ara té una ordre d'actualització universal que funciona independentment de com l'hagueu instal·lat: winget, Homebrew, Chocolatey o script d'instal·lació.</description><content:encoded>&lt;p&gt;Sabeu que el missatge &amp;ldquo;Hi ha una versió nova d&amp;rsquo;azd disponible&amp;rdquo; que apareix cada poques setmanes? El que descarteu perquè no recordeu si vau instal·lar &lt;code&gt;azd&lt;/code&gt; mitjançant winget, Homebrew o aquell script curl que vau executar fa sis mesos? Sí, finalment s&amp;rsquo;ha arreglat.&lt;/p&gt;
&lt;p&gt;Microsoft acaba d&amp;rsquo;enviar &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt;: una ordre única que actualitza l&amp;rsquo;Azure Developer CLI a la darrera versió, independentment de com l&amp;rsquo;haveu instal·lat originalment. Windows, macOS, Linux, no importa. Una ordre.&lt;/p&gt;
&lt;h2 id="com-funciona"&gt;Com funciona&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Això és tot. Si voleu un accés anticipat a noves funcions, podeu canviar a la creació diària d&amp;rsquo;insiders:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel daily
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel stable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;L&amp;rsquo;ordre detecta el vostre mètode d&amp;rsquo;instal·lació actual i utilitza el mecanisme d&amp;rsquo;actualització adequat sota el capó. No més &amp;ldquo;espera, he fet servir winget o choco en aquesta màquina?&amp;rdquo;&lt;/p&gt;
&lt;h2 id="la-petita-captura"&gt;La petita captura&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt; s&amp;rsquo;envia a partir de la versió 1.23.x. Si teniu una versió anterior, haureu de fer una darrera actualització manual mitjançant el vostre mètode d&amp;rsquo;instal·lació original. Després d&amp;rsquo;això, &lt;code&gt;azd update&lt;/code&gt; s&amp;rsquo;encarrega de tot el futur.&lt;/p&gt;
&lt;p&gt;Comproveu la vostra versió actual amb &lt;code&gt;azd version&lt;/code&gt;. Si necessiteu una instal·lació nova, els &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;documents d&amp;rsquo;instal·lació&lt;/a&gt; us cobreixen.&lt;/p&gt;
&lt;h2 id="per-què-és-important"&gt;Per què és important&lt;/h2&gt;
&lt;p&gt;Aquesta és una petita millora de la qualitat de vida, però per a aquells de nosaltres que utilitzem &lt;code&gt;azd&lt;/code&gt; diàriament per desplegar agents d&amp;rsquo;IA i aplicacions Aspire a Azure, mantenir-se al dia significa menys moments &amp;ldquo;aquest error ja s&amp;rsquo;ha solucionat a la darrera versió&amp;rdquo;. Una cosa menys per pensar.&lt;/p&gt;
&lt;p&gt;Llegiu l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;anunci complet&lt;/a&gt; i la &lt;a href="https://blog.jongallant.com/2026/04/azd-update"&gt;immersió més profunda&lt;/a&gt; de Jon Gallant per a més context.&lt;/p&gt;</content:encoded></item><item><title>Azure Smart Tier és GA: optimització automàtica de costos d'emmagatzematge de blob sense regles de cicle de vida</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</guid><description>El nivell intel·ligent d'Azure Blob Storage ara està disponible en general, movent els objectes automàticament entre els nivells calents, freds i freds en funció dels patrons d'accés reals; no calen regles de cicle de vida.</description><content:encoded>&lt;p&gt;Si alguna vegada heu passat temps ajustant les polítiques de cicle de vida d&amp;rsquo;Azure Blob Storage i després heu vist com es van trencar quan els patrons d&amp;rsquo;accés canviaven, aquesta és la vostra. Microsoft acaba d&amp;rsquo;anunciar la &lt;a href="https://azure.microsoft.com/en-us/blog/optimize-object-storage-costs-automatically-with-smart-tier-now-generally-available/"&gt;disponibilitat general del nivell intel·ligent&lt;/a&gt; per a Azure Blob i Data Lake Storage: una capacitat de nivells totalment gestionada que mou automàticament objectes entre nivells calents, freds i freds en funció de l&amp;rsquo;ús real.&lt;/p&gt;
&lt;h2 id="què-fa-realment-el-nivell-intelligent"&gt;Què fa realment el nivell intel·ligent&lt;/h2&gt;
&lt;p&gt;El concepte és senzill: el nivell intel·ligent avalua contínuament el darrer temps d&amp;rsquo;accés de cada objecte al vostre compte d&amp;rsquo;emmagatzematge. Les dades a les quals s&amp;rsquo;accedeix amb freqüència es mantenen en calent, les dades inactives es mouen per refredar-se després de 30 dies i després a fred després de 60 dies més. Quan s&amp;rsquo;accedeix de nou a les dades, es torna a activar immediatament. El cicle es reinicia.&lt;/p&gt;
&lt;p&gt;No hi ha regles de cicle de vida per configurar. No hi ha prediccions de patrons d&amp;rsquo;accés. Sense sintonització manual.&lt;/p&gt;
&lt;p&gt;Durant la previsualització, Microsoft va informar que &lt;strong&gt;més del 50% de la capacitat gestionada per nivells intel·ligents es va canviar automàticament a nivells més freds&lt;/strong&gt; en funció dels patrons d&amp;rsquo;accés reals. Això suposa una reducció de costos significativa per als comptes d&amp;rsquo;emmagatzematge grans.&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 que generen registres, telemetria, dades analítiques o qualsevol tipus de fons de dades en creixement, i sincerament, qui no, els costos d&amp;rsquo;emmagatzematge s&amp;rsquo;acumulen ràpidament. L&amp;rsquo;enfocament tradicional era escriure polítiques de gestió del cicle de vida, provar-les i tornar-les a ajustar quan canviaven els patrons d&amp;rsquo;accés de la vostra aplicació. El nivell intel·ligent elimina tot aquest flux de treball.&lt;/p&gt;
&lt;p&gt;Alguns escenaris pràctics on això ajuda:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Telemetria i registres d&amp;rsquo;aplicacions&lt;/strong&gt;: calent durant la depuració, rarament s&amp;rsquo;hi accedeix després d&amp;rsquo;unes setmanes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conductes de dades i sortides d&amp;rsquo;ETL&lt;/strong&gt;: s&amp;rsquo;hi accedeix molt durant el processament, després principalment en fred&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contingut generat per l&amp;rsquo;usuari&lt;/strong&gt;: les càrregues recents són interessants, el contingut més antic es refreda gradualment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Còpia de seguretat i dades d&amp;rsquo;arxiu&lt;/strong&gt;: s&amp;rsquo;accedeix de tant en tant per complir-ho, principalment inactiu&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="configurant-lo"&gt;Configurant-lo&lt;/h2&gt;
&lt;p&gt;Habilitar el nivell intel·ligent és una configuració única:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Comptes nous&lt;/strong&gt;: seleccioneu el nivell intel·ligent com a nivell d&amp;rsquo;accés predeterminat durant la creació del compte d&amp;rsquo;emmagatzematge (es requereix redundància zonal)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comptes existents&lt;/strong&gt;: canvieu el nivell d&amp;rsquo;accés a blob del nivell predeterminat actual al nivell intel·ligent&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Els objectes de menys de 128 KiB es mantenen en calent i no incorren en la taxa de supervisió. Per a la resta, pagueu tarifes estàndard de capacitat calenta/fresca/fred sense càrrecs de transició de nivell, sense despeses d&amp;rsquo;eliminació anticipada i sense costos de recuperació de dades. Una quota de seguiment mensual per objecte cobreix l&amp;rsquo;orquestració.&lt;/p&gt;
&lt;h2 id="la-compensació-a-conèixer"&gt;La compensació a conèixer&lt;/h2&gt;
&lt;p&gt;Les regles de classificació del nivell intel·ligent són estàtiques (30 dies → fred, 90 dies → fred). Si necessiteu llindars personalitzats (per exemple, passar a la refrigeració després de 7 dies per a una càrrega de treball específica), les regles del cicle de vida encara són el camí a seguir. I no barregeu les dues coses: eviteu utilitzar regles de cicle de vida en objectes gestionats per nivell intel·ligent, ja que poden entrar en conflicte.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Això no és revolucionari, però soluciona un autèntic mal de cap operatiu. Si gestioneu comptes d&amp;rsquo;emmagatzematge de blobs en creixement i esteu cansat de mantenir polítiques de cicle de vida, &lt;a href="https://learn.microsoft.com/en-us/azure/storage/blobs/access-tiers-smart"&gt;habilita el nivell intel·ligent&lt;/a&gt; i deixeu que Azure s&amp;rsquo;encarregui. Actualment està disponible a gairebé totes les regions de núvol públic de zona.&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>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>L'avaluació de la modernització de GitHub Copilot és la millor eina de migració que encara no feu servir</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</guid><description>L'extensió de modernització de GitHub Copilot no només suggereix canvis de codi, sinó que produeix una avaluació completa de la migració amb problemes accionables, comparacions d'objectius d'Azure i un flux de treball col·laboratiu. Heus aquí per què el document d'avaluació és la clau de tot.</description><content:encoded>&lt;p&gt;Migrar una aplicació.NET Framework heretada a.NET moderna és una d&amp;rsquo;aquestes tasques que tothom sap que hauria de fer, però ningú vol començar. Mai és només &amp;ldquo;canviar el marc objectiu&amp;rdquo;. Són les API que van desaparèixer, paquets que ja no existeixen, models d&amp;rsquo;allotjament que funcionen d&amp;rsquo;una manera completament diferent i un milió de petites decisions sobre què contener, què reescriure i què deixar en pau.&lt;/p&gt;
&lt;p&gt;Jeffrey Fritz acaba de publicar una &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;immersió profunda en l&amp;rsquo;avaluació de la modernització de GitHub Copilot&lt;/a&gt;, i sincerament? Aquesta és la millor eina de migració que he vist per a.NET. No a causa de la generació de codi, això és ara l&amp;rsquo;aposta de la taula. Pel document d&amp;rsquo;avaluació que elabora.&lt;/p&gt;
&lt;h2 id="no-és-només-un-motor-de-suggeriments-de-codi"&gt;No és només un motor de suggeriments de codi&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;extensió VS Code segueix un model &lt;strong&gt;Avaluar → Planificar → Executar&lt;/strong&gt;. La fase d&amp;rsquo;avaluació analitza tota la vostra base de codi i produeix un document estructurat que ho recull tot: què cal canviar, quins recursos d&amp;rsquo;Azure proveir, quin model de desplegament utilitzar. Tot el que hi ha a baix (infraestructura com a codi, contenidors, manifestos de desplegament) depèn del que troba l&amp;rsquo;avaluació.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;avaluació s&amp;rsquo;emmagatzema a &lt;code&gt;.github/modernize/assessment/&lt;/code&gt; del vostre projecte. Cada execució produeix un informe independent, de manera que creeu un historial i podeu fer un seguiment de com evoluciona la vostra postura de migració a mesura que solucioneu els problemes.&lt;/p&gt;
&lt;h2 id="dues-maneres-de-començar"&gt;Dues maneres de començar&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Avaluació recomanada&lt;/strong&gt;: el camí ràpid. Trieu entre dominis seleccionats (actualització de Java/.NET, preparació al núvol, seguretat) i obteniu resultats significatius sense tocar la configuració. Ideal per a una primera mirada a on es troba la teva aplicació.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Avaluació personalitzada&lt;/strong&gt;: el camí objectiu. Configureu exactament què voleu analitzar: càlcul objectiu (App Service, AKS, Container Apps), sistema operatiu objectiu, anàlisi de contenidors. Trieu diversos objectius d&amp;rsquo;Azure per comparar els enfocaments de migració de manera conjunta.&lt;/p&gt;
&lt;p&gt;Aquesta visió de comparació és realment útil. Una aplicació amb 3 problemes obligatoris per a App Service pot tenir 7 per a AKS. Veure tots dos ajuda a impulsar la decisió d&amp;rsquo;allotjament abans de comprometre&amp;rsquo;s amb una ruta de migració.&lt;/p&gt;
&lt;h2 id="el-desglossament-del-problema-és-accionable"&gt;El desglossament del problema és accionable&lt;/h2&gt;
&lt;p&gt;Cada problema ve amb un nivell de criticitat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Obligatori&lt;/strong&gt;: s&amp;rsquo;ha de solucionar o la migració falla&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Potencial&lt;/strong&gt;: pot afectar la migració, necessita el judici humà&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opcional&lt;/strong&gt;: millores recomanades, no bloquejaran la migració&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I cada problema enllaça amb fitxers i números de línia afectats, proporciona una descripció detallada del que està malament i per què és important per a la vostra plataforma objectiu, ofereix passos concrets de correcció (no només &amp;ldquo;arreglar-ho&amp;rdquo;) i inclou enllaços a documentació oficial.&lt;/p&gt;
&lt;p&gt;Podeu lliurar problemes individuals als desenvolupadors i aquests tenen tot el que necessiten per actuar. Aquesta és la diferència entre una eina que us diu &amp;ldquo;hi ha un problema&amp;rdquo; i una que us indica com resoldre&amp;rsquo;l.&lt;/p&gt;
&lt;h2 id="els-camins-dactualització-coberts"&gt;Els camins d&amp;rsquo;actualització coberts&lt;/h2&gt;
&lt;p&gt;Específicament per a.NET:
-.NET Framework →.NET 10&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ASP.NET → ASP.NET Core&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada camí d&amp;rsquo;actualització té regles de detecció que coneixen quines API s&amp;rsquo;han eliminat, quins patrons no tenen cap equivalent directe i quins problemes de seguretat necessiten atenció.&lt;/p&gt;
&lt;p&gt;Per als equips que gestionen diverses aplicacions, també hi ha una CLI que admet avaluacions per lots multirepositori: cloneu tots els repositoris, avalueu-los tots, obteniu informes per aplicació i una visualització de cartera agregada.&lt;/p&gt;
&lt;h2 id="la-meva-opinió"&gt;La meva opinió&lt;/h2&gt;
&lt;p&gt;Si esteu asseguts en aplicacions heretades de.NET Framework (i siguem reals, la majoria dels equips empresarials ho són), aquesta és &lt;em&gt;l&amp;rsquo;eina&lt;/em&gt; per començar. Només el document d&amp;rsquo;avaluació val la pena el temps: converteix un vague &amp;ldquo;hauríem de modernitzar&amp;rdquo; en una llista concreta i prioritzada d&amp;rsquo;elements de treball amb camins clars.&lt;/p&gt;
&lt;p&gt;El flux de treball col·laboratiu també és intel·ligent: exporteu avaluacions, compartiu amb el vostre equip, importeu-les sense tornar-les a executar. Revisions d&amp;rsquo;arquitectura on els que prenen les decisions no són els que executen les eines? Coberta.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;avaluació de la modernització de GitHub Copilot transforma la migració.NET d&amp;rsquo;un projecte aterridor i indefinit a un procés estructurat i rastrejable. Comenceu amb una avaluació recomanada per veure on us trobeu i, a continuació, utilitzeu avaluacions personalitzades per comparar els objectius d&amp;rsquo;Azure i crear el vostre pla de migració.&lt;/p&gt;
&lt;p&gt;Llegiu el &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;tutorial complet&lt;/a&gt; i agafeu l&amp;rsquo;&lt;a href="https://aka.ms/ghcp-appmod/vscode-ext"&gt;extensió del codi VS&lt;/a&gt; per provar-ho a la vostra pròpia base de codi.&lt;/p&gt;</content:encoded></item><item><title>L'enginyeria de la plataforma agentica s'està tornant real: Git-APE mostra com</title><link>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</guid><description>El projecte Git-APE de Microsoft posa en pràctica l'enginyeria de plataformes agents, utilitzant agents GitHub Copilot i Azure MCP per convertir les sol·licituds de llenguatge natural en una infraestructura de núvol validada.</description><content:encoded>&lt;p&gt;L&amp;rsquo;enginyeria de plataformes ha estat un d&amp;rsquo;aquells termes que sona molt bé a les conferències, però normalment significa &amp;ldquo;vam construir un portal intern i un embolcall de Terraform&amp;rdquo;. La veritable promesa: una infraestructura d&amp;rsquo;autoservei que és realment segura, governada i ràpida, sempre ha estat a pocs passos.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;equip d&amp;rsquo;Azure acaba de publicar la &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;Part 2 de la seva sèrie d&amp;rsquo;enginyeria de plataformes agents&lt;/a&gt;, i aquesta tracta sobre la implementació pràctica. L&amp;rsquo;anomenen &lt;strong&gt;Git-APE&lt;/strong&gt; (sí, l&amp;rsquo;acrònim és intencionat) i és un projecte de codi obert que utilitza agents GitHub Copilot més servidors Azure MCP per convertir les sol·licituds de llenguatge natural en una infraestructura validada i desplegada.&lt;/p&gt;
&lt;h2 id="què-fa-realment-git-ape"&gt;Què fa realment Git-APE&lt;/h2&gt;
&lt;p&gt;La idea bàsica: en lloc que els desenvolupadors aprenguin mòduls de Terraform, naveguin per les interfícies d&amp;rsquo;usuari del portal o presenten entrades a un equip de plataforma, parlen amb un agent Copilot. L&amp;rsquo;agent interpreta la intenció, genera Infrastructure-as-Code, la valida amb polítiques i desplega, tot dins de VS Code.&lt;/p&gt;
&lt;p&gt;Aquí teniu la configuració:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/Azure/git-ape
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; git-ape
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Obriu l&amp;rsquo;espai de treball a VS Code i GitHub Copilot descobreix automàticament els fitxers de configuració de l&amp;rsquo;agent. Interacciones directament amb l&amp;rsquo;agent:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@git-ape deploy a function app with storage in West Europe
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;L&amp;rsquo;agent utilitza Azure MCP Server sota el capó per interactuar amb els serveis d&amp;rsquo;Azure. La configuració de MCP a la configuració del codi VS permet capacitats específiques:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;azureMcp.serverMode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;azureMcp.enabledServices&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;deploy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bestpractices&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;group&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;subscription&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;functionapp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;storage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;sql&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;monitor&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;azureMcp.readOnly&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="per-què-això-és-important"&gt;Per què això és important&lt;/h2&gt;
&lt;p&gt;Per a aquells que estem construint a Azure, això canvia la conversa sobre l&amp;rsquo;enginyeria de la plataforma de &amp;ldquo;com construïm un portal&amp;rdquo; a &amp;ldquo;com descriurem les nostres baranes com a API&amp;rdquo;. Quan la interfície de la vostra plataforma és un agent d&amp;rsquo;IA, la qualitat de les vostres limitacions i polítiques es converteix en el producte.&lt;/p&gt;
&lt;p&gt;El bloc de la Part 1 va exposar la teoria: les API ben descrites, els esquemes de control i les baranes explícites fan que les plataformes estiguin preparades per a agents. La part 2 demostra que funciona enviant eines reals. L&amp;rsquo;agent no només genera recursos a cegues, sinó que valida les millors pràctiques, respecta les convencions de denominació i aplica les polítiques de la vostra organització.&lt;/p&gt;
&lt;p&gt;La neteja és igual de fàcil:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@git-ape destroy my-resource-group
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="la-meva-opinió"&gt;La meva opinió&lt;/h2&gt;
&lt;p&gt;Seré sincer: aquest tracta més del patró que de l&amp;rsquo;eina específica. El mateix Git-APE és una arquitectura de demostració/referència. Però la idea subjacent (agents com a interfície de la vostra plataforma, MCP com a protocol, GitHub Copilot com a amfitrió) és cap a on es dirigeix ​​l&amp;rsquo;experiència dels desenvolupadors empresarials.&lt;/p&gt;
&lt;p&gt;Si sou un equip de plataformes que mira com fer que els vostres agents d&amp;rsquo;eines internes siguin amigables, no hi ha millor punt de partida. I si sou un desenvolupador de.NET i us pregunteu com es connecta això amb el vostre món: els agents Azure MCP Server i GitHub Copilot funcionen amb qualsevol càrrega de treball d&amp;rsquo;Azure. La vostra API ASP.NET Core, la vostra pila.NET Aspire, els vostres microserveis en contenidors: tot això pot ser l&amp;rsquo;objectiu d&amp;rsquo;un flux de desplegament agent.&lt;/p&gt;
&lt;h2 id="tancant"&gt;Tancant&lt;/h2&gt;
&lt;p&gt;Git-APE és una visió primerenca però concreta de l&amp;rsquo;enginyeria de plataformes agències a la pràctica. Cloneu el &lt;a href="https://github.com/Azure/git-ape"&gt;repo&lt;/a&gt;, proveu la demostració i comenceu a pensar com haurien de buscar un agent per utilitzar-los de manera segura les API i les polítiques de la vostra plataforma.&lt;/p&gt;
&lt;p&gt;Llegiu la &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;publicació completa&lt;/a&gt; per a la guia i les demostracions de vídeo.&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>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>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></channel></rss>