<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>AI Agents | The .NET Blog</title><link>https://thedotnetblog.com/ca/tags/ai-agents/</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>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ca/tags/ai-agents/index.xml" rel="self" type="application/rss+xml"/><item><title>Microsoft Agent Framework Part 3: De les Eines als Workflows — Les Peces Encaixen</title><link>https://thedotnetblog.com/ca/news/emiliano-montesdeoca/maf-building-blocks-part-3-agents-tools-workflows/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/news/emiliano-montesdeoca/maf-building-blocks-part-3-agents-tools-workflows/</guid><description>La tercera part de la sèrie de blocs de construcció d'IA en .NET cobreix el Microsoft Agent Framework — des d'agents únics amb eines fins a workflows multi-agent amb memòria. Això és el que realment importa.</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/news/emiliano-montesdeoca/maf-building-blocks-part-3-agents-tools-workflows/"&gt;fes clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Si has seguit la sèrie Building Blocks for AI en .NET, saps que la Part 1 ens va donar &lt;code&gt;IChatClient&lt;/code&gt; (la interfície universal de models) i la Part 2 ens va donar &lt;code&gt;Microsoft.Extensions.VectorData&lt;/code&gt; (cerca semàntica i RAG). Ambdues són fonamentals i útils per si soles. Però aquí és on tot comença a connectar-se.&lt;/p&gt;
&lt;p&gt;La Part 3 tracta del &lt;a href="https://github.com/microsoft/agent-framework"&gt;Microsoft Agent Framework&lt;/a&gt; — i sincerament, és la peça que estava esperant veure arribar a .NET. La versió 1.0 es va publicar a l&amp;rsquo;abril. L&amp;rsquo;API és estable. És hora de construir agents de veritat.&lt;/p&gt;
&lt;h2 id="què-és-un-agent-vs-un-chatbot"&gt;Què és un Agent (vs. un Chatbot)&lt;/h2&gt;
&lt;p&gt;Abans d&amp;rsquo;entrar al codi, aclarim aquesta distinció. Un chatbot rep input, crida un model, retorna output. Bucle simple.&lt;/p&gt;
&lt;p&gt;Un agent té &lt;em&gt;autonomia&lt;/em&gt;. Pot raonar sobre una tasca, decidir quines eines usar, cridar-les, avaluar resultats i decidir què fer a continuació — tot sense que tu escriguis lògica pas a pas per a cada escenari. Li dónes eines i instruccions, i s&amp;rsquo;encarrega de l&amp;rsquo;orquestració.&lt;/p&gt;
&lt;p&gt;Pensa-hi així: &lt;code&gt;IChatClient&lt;/code&gt; és com tenir una conversa. Un agent és com delegar una llista de tasques a algú.&lt;/p&gt;
&lt;h2 id="el-teu-primer-agent-en-10-línies"&gt;El Teu Primer Agent en 10 Línies&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;dotnet add package Microsoft.Agents.AI
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-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="n"&gt;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="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;GetChatClient&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;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;You are good at telling jokes.&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;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Joker&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Tell me a joke about a pirate.&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;El mètode d&amp;rsquo;extensió &lt;code&gt;.AsAIAgent()&lt;/code&gt; és el pont. Mateix patró que &lt;code&gt;.AsIChatClient()&lt;/code&gt; de MEAI — embolica el SDK del proveïdor en una abstracció estable. Funciona amb Azure OpenAI, OpenAI, GitHub Models, Microsoft Foundry o models locals.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;streaming també funciona:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;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="s"&gt;&amp;#34;Tell me a joke about a pirate.&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;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&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="donant-eines-a-lagent"&gt;Donant Eines a l&amp;rsquo;Agent&lt;/h2&gt;
&lt;p&gt;Aquí és on els agents deixen de ser chatbots sofisticats. Les eines són funcions que el model pot decidir cridar segons el que l&amp;rsquo;usuari demani. No necessites lògica d&amp;rsquo;enrutament — el model ho descobreix sol.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;[Description(&amp;#34;Get the weather for a given location.&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;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;GetWeather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [Description(&amp;#34;The location to get the weather for.&amp;#34;)]&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="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;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;$&amp;#34;The weather in {location} is cloudy with a high of 15°C.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;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;chatClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&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="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;AIFunctionFactory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetWeather&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;Dues coses a tenir en compte. Primer, &lt;code&gt;AIFunctionFactory&lt;/code&gt; és de MEAI — la mateixa fàbrica d&amp;rsquo;eines que usaries amb un &lt;code&gt;IChatClient&lt;/code&gt; normal. Si ja tens eines definides per a escenaris de xat, funcionen aquí també.&lt;/p&gt;
&lt;p&gt;Segon, els atributs &lt;code&gt;Description&lt;/code&gt; importen molt. Són com el model entén què fa una eina i quan usar-la. Tracta&amp;rsquo;ls com a documentació per a la teva IA, no per a humans.&lt;/p&gt;
&lt;h2 id="sessions-converses-amb-memòria-real"&gt;Sessions: Converses amb Memòria Real&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="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;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Tell me a joke about a pirate.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Now add some emojis and tell it in the voice of a pirate&amp;#39;s parrot.&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;session&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sense sessió, cada crida a &lt;code&gt;RunAsync&lt;/code&gt; és sense estat. Amb sessió, l&amp;rsquo;agent sap a quin acudit et refereixes. &lt;code&gt;AgentSession&lt;/code&gt; preserva l&amp;rsquo;historial de conversa entre torns.&lt;/p&gt;
&lt;p&gt;Per a serveis sense estat en producció, les sessions es serialitzen de forma neta:&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;JsonElement&lt;/span&gt; &lt;span class="n"&gt;sessionState&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;SerializeSessionAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// ... guarda-ho en algun lloc ...&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;restoredSession&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;DeserializeSessionAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sessionState&lt;/span&gt;&lt;span class="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;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;What were we just talking about?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;restoredSession&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Això és crític si el teu agent s&amp;rsquo;executa en entorns serverless o amb escalat horitzontal.&lt;/p&gt;
&lt;h2 id="aicontextprovider-memòria-persistent-entre-sessions"&gt;AIContextProvider: Memòria Persistent Entre Sessions&lt;/h2&gt;
&lt;p&gt;Les sessions preserven l&amp;rsquo;historial &lt;em&gt;dins&lt;/em&gt; d&amp;rsquo;una sessió. Però què passa amb conèixer coses d&amp;rsquo;un usuari entre sessions? &lt;code&gt;AIContextProvider&lt;/code&gt; s&amp;rsquo;encarrega d&amp;rsquo;això.&lt;/p&gt;
&lt;p&gt;Té dos ganxos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ProvideAIContextAsync&lt;/code&gt;&lt;/strong&gt; — s&amp;rsquo;executa &lt;em&gt;abans&lt;/em&gt; de cada interacció, injecta context a l&amp;rsquo;agent&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;StoreAIContextAsync&lt;/code&gt;&lt;/strong&gt; — s&amp;rsquo;executa &lt;em&gt;després&lt;/em&gt; de cada interacció, permet aprendre i persistir&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El patró és elegant: pots apillar múltiples proveïdors — un per a preferències d&amp;rsquo;usuari, un per a interaccions recents, un que consulta el teu magatzem de VectorData per a documents rellevants. Aquest últim és exactament el patró RAG de la Part 2, ara executant-se automàticament a cada crida de l&amp;rsquo;agent.&lt;/p&gt;
&lt;h2 id="workflows-multi-agent"&gt;Workflows Multi-Agent&lt;/h2&gt;
&lt;p&gt;Aquí és on el framework es guanya el seu nom. Inclou un sistema de workflows basat en grafs on els executors (agents, funcions, el que sigui) es connecten mitjançant arestes.&lt;/p&gt;
&lt;p&gt;Alguns patrons suportats nativament:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Seqüencial&lt;/strong&gt;: La sortida de l&amp;rsquo;Agent A alimenta l&amp;rsquo;Agent B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent (fan-out/fan-in)&lt;/strong&gt;: Despacha a múltiples agents en paral·lel, recull resultats&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enrutament condicional&lt;/strong&gt;: Enruta feina a agents diferents segons la sortida&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bucles escriptor-crític&lt;/strong&gt;: Un agent escriu, un altre avalua, bucle fins a aprovació&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sub-workflows&lt;/strong&gt;: Compon workflows jeràrquicament&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un exemple escriptor-crític:&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;WorkflowBuilder&lt;/span&gt; &lt;span class="n"&gt;builder&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;writerAgent&lt;/span&gt;&lt;span class="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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddEdge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;writerAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;criticAgent&lt;/span&gt;&lt;span class="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;AddEdge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;criticAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writerAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsApproved&lt;/span&gt;&lt;span class="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;WithOutputFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;criticAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsApproved&lt;/span&gt;&lt;span class="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;workflow&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Net, llegible, i l&amp;rsquo;enrutament basat en condicions significa que no escrius la lògica del bucle tu mateix.&lt;/p&gt;
&lt;h2 id="human-in-the-loop"&gt;Human-in-the-Loop&lt;/h2&gt;
&lt;p&gt;No tot hauria d&amp;rsquo;executar-se de forma completament autònoma. Per a operacions sensibles — escriptures a bases de dades, transaccions financeres, enviament de comunicacions — vols que un humà aprovi abans que l&amp;rsquo;agent executi.&lt;/p&gt;
&lt;p&gt;El framework té suport integrat per a això mitjançant &lt;code&gt;FunctionApprovalRequestContent&lt;/code&gt; i &lt;code&gt;FunctionApprovalResponseContent&lt;/code&gt;. L&amp;rsquo;agent proposa la crida a l&amp;rsquo;eina, el teu codi la presenta a l&amp;rsquo;usuari, i la resposta determina si l&amp;rsquo;execució continua.&lt;/p&gt;
&lt;p&gt;Aquesta és la forma correcta de pensar en agents en entorns empresarials: no completament autònoms, sinó &lt;em&gt;autonomia amb barreres&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="el-quadre-complet"&gt;El Quadre Complet&lt;/h2&gt;
&lt;p&gt;Si fas un pas enrere:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MEAI&lt;/strong&gt; et dóna una interfície universal per a qualsevol model&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VectorData&lt;/strong&gt; dóna als teus agents accés al coneixement de la teva organització mitjançant cerca semàntica&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Framework&lt;/strong&gt; orquestra tot — usa &lt;code&gt;IChatClient&lt;/code&gt; internament, es compon amb proveïdors de context i coordina mitjançant workflows&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada peça va ser dissenyada per compondre&amp;rsquo;s amb les altres. Consulta el &lt;a href="https://devblogs.microsoft.com/dotnet/microsoft-agent-framework-building-blocks-for-ai-part-3/"&gt;post original de Jeremy Likness&lt;/a&gt; i el &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet"&gt;repositori de GitHub del Agent Framework&lt;/a&gt; per als exemples complets.&lt;/p&gt;
&lt;h2 id="conclusió"&gt;Conclusió&lt;/h2&gt;
&lt;p&gt;El post de la Part 3 del Microsoft Agent Framework tanca el bucle de la sèrie de blocs de construcció. Per als desenvolupadors .NET que volen construir agents AI — no sols chatbots, sinó agents reals que usen eines, recorden coses i coordinen — aquest és el camí.&lt;/p&gt;
&lt;p&gt;La versió estable 1.0 significa que pots construir amb això en producció. Si has estat esperant per saltar al desenvolupament d&amp;rsquo;agents en .NET, el moment és ara.&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server a Azure App Service — Sense Contenidors</title><link>https://thedotnetblog.com/ca/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</guid><description>El SQL MCP Server ara pot executar-se a Azure App Service sense Docker ni Kubernetes. Això és el que significa per als desenvolupadors .NET que construeixen agents d'IA que parlen amb bases de dades SQL.</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/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/"&gt;fes clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Seré honest amb tu: cada cop que veig &amp;ldquo;requereix un contenidor&amp;rdquo; en un tutorial, una petita part de mi sospira. Els contenidors són fantàstics, fins que el teu equip no té una estratègia de contenidors, i de cop allò que semblava simple queda bloquejat per una sobrecàrrega d&amp;rsquo;orquestació que no havies planificat.&lt;/p&gt;
&lt;p&gt;Per això aquest em va cridar l&amp;rsquo;atenció. El SQL MCP Server ara pot executar-se a Azure App Service — sense Docker, sense Kubernetes, únicament amb la mateixa configuració de Data API Builder (DAB) que exposa la teva base de dades SQL a través de MCP, REST i GraphQL.&lt;/p&gt;
&lt;h2 id="què-és-el-sql-mcp-server"&gt;Què és el SQL MCP Server?&lt;/h2&gt;
&lt;p&gt;Context ràpid si encara no el coneixes. El SQL MCP Server se situa entre el teu agent d&amp;rsquo;IA i la teva base de dades SQL. En lloc de donar a l&amp;rsquo;agent accés directe a la base de dades (una idea terrible), exposa les teves taules i vistes com una capa d&amp;rsquo;abstracció — entitats amb permisos definits.&lt;/p&gt;
&lt;p&gt;Està construït sobre &lt;a href="https://learn.microsoft.com/es-es/azure/data-api-builder/"&gt;Data API Builder&lt;/a&gt;, la qual cosa significa que un únic fitxer de configuració gestiona MCP &lt;em&gt;i&lt;/em&gt; REST &lt;em&gt;i&lt;/em&gt; GraphQL simultàniament. El teu agent parla amb l&amp;rsquo;endpoint MCP. La teva aplicació tradicional parla amb REST o GraphQL. Mateixa config, mateix runtime, superfícies diferents.&lt;/p&gt;
&lt;p&gt;Això és genuïnament útil. No estàs mantenint dues capes d&amp;rsquo;API separades.&lt;/p&gt;
&lt;h2 id="el-problema-del-contenidor-i-la-solució"&gt;El Problema del Contenidor (i la Solució)&lt;/h2&gt;
&lt;p&gt;El model de desplegament original del SQL MCP Server era amb contenidors. Funciona bé en molts equips, però no en tots. Molts equips .NET estandaritzen en Azure App Service o VMs. Requerir un runtime de contenidor únicament per exposar un endpoint SQL afegeix fricció que ningú va demanar.&lt;/p&gt;
&lt;p&gt;El nou tutorial mostra com ometre el contenidor per complet. Tot funciona amb una ordre &lt;code&gt;dab start&lt;/code&gt;, allotjat a App Service com un procés web .NET 8 estàndard.&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;# Instal·lar Data API Builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet tool install microsoft.dataapibuilder --prerelease -g
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Inicialitzar la configuració&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab init --database-type mssql --host-mode Development --connection-string &lt;span class="s2"&gt;&amp;#34;@env(&amp;#39;SQL_CONNECTION_STRING&amp;#39;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Afegir una entitat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add products --source dbo.products --permissions &lt;span class="s2"&gt;&amp;#34;authenticated:*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Configurar el proveïdor d&amp;#39;autenticació d&amp;#39;App Service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab configure --runtime.host.authentication.provider AppService
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Iniciar el servidor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En aquest punt tens MCP a &lt;code&gt;/mcp&lt;/code&gt;, REST i GraphQL des del mateix procés, i res executant-se en un contenidor.&lt;/p&gt;
&lt;h2 id="autenticació-sense-claus-dapi-compartides"&gt;Autenticació Sense Claus d&amp;rsquo;API Compartides&lt;/h2&gt;
&lt;p&gt;Aquesta és la part que més aprecio. Quan despliegues a App Service, configures Microsoft Entra ID com a proveïdor d&amp;rsquo;autenticació. Sense secrets compartits als fitxers de configuració, sense claus d&amp;rsquo;API que rotar.&lt;/p&gt;
&lt;p&gt;La cadena de connexió es manté en una variable d&amp;rsquo;entorn d&amp;rsquo;App Service (no a &lt;code&gt;dab-config.json&lt;/code&gt;), i l&amp;rsquo;endpoint MCP està protegit per l&amp;rsquo;autenticació de la plataforma. Si ja estàs alineat amb Entra ID a les teves càrregues de treball d&amp;rsquo;Azure, això encaixa de manera natural.&lt;/p&gt;
&lt;p&gt;Per al desenvolupament local, canvies al mode &lt;code&gt;Simulator&lt;/code&gt; i transport STDIO. Tornes al mode &lt;code&gt;AppService&lt;/code&gt; quan despliegues. Net i explícit.&lt;/p&gt;
&lt;h2 id="desplegament-a-app-service"&gt;Desplegament a App Service&lt;/h2&gt;
&lt;p&gt;El desplegament real és feina estàndard amb l&amp;rsquo;Azure CLI:&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 appservice plan create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --sku B1 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --is-linux
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az webapp create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --plan &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --runtime &lt;span class="s2"&gt;&amp;#34;DOTNETCORE:8.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az webapp config &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --startup-file &lt;span class="s2"&gt;&amp;#34;dab start&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Llavors desplegues el teu projecte DAB usant el mètode de desplegament que el teu equip ja utilitza. El detall clau: és un desplegament de &lt;strong&gt;codi&lt;/strong&gt;, no de contenidor.&lt;/p&gt;
&lt;h2 id="per-què-importa-per-als-desenvolupadors-net"&gt;Per Què Importa per als Desenvolupadors .NET&lt;/h2&gt;
&lt;p&gt;Si construeixes agents d&amp;rsquo;IA en .NET, eventualment el teu agent necessitarà parlar amb una base de dades. El SQL MCP Server t&amp;rsquo;ofereix una manera estructurada de fer-ho sense exposar cadenes de connexió en brut ni escriure una capa d&amp;rsquo;API personalitzada.&lt;/p&gt;
&lt;p&gt;Consulta el tutorial complet al &lt;a href="https://devblogs.microsoft.com/azure-sql/sql-mcp-server-app-service/"&gt;post original&lt;/a&gt; i el &lt;a href="https://github.com/Azure-Samples/SQL-MCP-NoContainer"&gt;repositori de mostra a GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="conclusió"&gt;Conclusió&lt;/h2&gt;
&lt;p&gt;El SQL MCP Server a App Service és una opció pragmàtica sòlida per a equips .NET que volen donar als seus agents accés estructurat a dades SQL sense una estratègia de contenidors. La combinació del model d&amp;rsquo;entitats de DAB, l&amp;rsquo;autenticació integrada d&amp;rsquo;Entra a App Service i la comanda d&amp;rsquo;inici &lt;code&gt;dab start&lt;/code&gt; resulta en un desplegament senzill d&amp;rsquo;explicar i fàcil d&amp;rsquo;operar.&lt;/p&gt;
&lt;p&gt;Prova-ho. Els teus agents agrairan la superfície d&amp;rsquo;API neta.&lt;/p&gt;</content:encoded></item><item><title>Actualitzacio d'abril de Visual Studio: integracio de Cloud Agent per a fluxos .NET</title><link>https://thedotnetblog.com/ca/news/emiliano-montesdeoca/visual-studio-april-update-cloud-agent-integration/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/news/emiliano-montesdeoca/visual-studio-april-update-cloud-agent-integration/</guid><description>Resum practic per a equips .NET sobre "Actualitzacio d'abril de Visual Studio: integracio de Cloud Agent per a fluxos .NET", amb passos clars per avaluar-ho en produccio.</description><content:encoded>&lt;p&gt;&lt;em&gt;Aquest article s&amp;rsquo;ha traduit automaticament. Per a la versio original, &lt;a href="https://thedotnetblog.com/ca/news/emiliano-montesdeoca/visual-studio-april-update-cloud-agent-integration/"&gt;fes clic aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/"&gt;Actualitzacio d&amp;rsquo;abril de Visual Studio: integracio de Cloud Agent per a fluxos .NET&lt;/a&gt; es rellevant per a equips que construeixen i operen sistemes .NET en produccio.&lt;/p&gt;
&lt;p&gt;Des del meu punt de vista, el mes important no es nomes la novetat, sino com convertir-la rapidament en una practica d&amp;rsquo;enginyeria repetible.&lt;/p&gt;
&lt;h2 id="per-que-importa-per-als-equips-net"&gt;Per que importa per als equips .NET&lt;/h2&gt;
&lt;p&gt;Aquest canvi ajuda a equilibrar velocitat d&amp;rsquo;entrega, consistencia de plataforma i governanca.&lt;/p&gt;
&lt;h2 id="seguents-passos-practics"&gt;Seguents passos practics&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Valida la funcionalitat en un pilot .NET petit amb dades realistes.&lt;/li&gt;
&lt;li&gt;Defineix observabilitat i un pla de rollback abans d&amp;rsquo;escalar.&lt;/li&gt;
&lt;li&gt;Documenta el patro per reutilitzar-lo en altres equips.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="font"&gt;Font&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Article original: &lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/"&gt;https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Governar les crides d'eines MCP a .NET amb l'Agent Governance Toolkit</title><link>https://thedotnetblog.com/ca/news/emiliano-montesdeoca/governing-mcp-tool-calls-dotnet/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ca/news/emiliano-montesdeoca/governing-mcp-tool-calls-dotnet/</guid><description>Resum practic per a equips .NET sobre "Governar les crides d'eines MCP a .NET amb l'Agent Governance Toolkit", amb passos clars per avaluar-ho en produccio.</description><content:encoded>&lt;p&gt;&lt;em&gt;Aquest article s&amp;rsquo;ha traduit automaticament. Per a la versio original, &lt;a href="https://thedotnetblog.com/ca/news/emiliano-montesdeoca/governing-mcp-tool-calls-dotnet/"&gt;fes clic aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/"&gt;Governar les crides d&amp;rsquo;eines MCP a .NET amb l&amp;rsquo;Agent Governance Toolkit&lt;/a&gt; es rellevant per a equips que construeixen i operen sistemes .NET en produccio.&lt;/p&gt;
&lt;p&gt;Des del meu punt de vista, el mes important no es nomes la novetat, sino com convertir-la rapidament en una practica d&amp;rsquo;enginyeria repetible.&lt;/p&gt;
&lt;h2 id="per-que-importa-per-als-equips-net"&gt;Per que importa per als equips .NET&lt;/h2&gt;
&lt;p&gt;Aquest canvi ajuda a equilibrar velocitat d&amp;rsquo;entrega, consistencia de plataforma i governanca.&lt;/p&gt;
&lt;h2 id="seguents-passos-practics"&gt;Seguents passos practics&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Valida la funcionalitat en un pilot .NET petit amb dades realistes.&lt;/li&gt;
&lt;li&gt;Defineix observabilitat i un pla de rollback abans d&amp;rsquo;escalar.&lt;/li&gt;
&lt;li&gt;Documenta el patro per reutilitzar-lo en altres equips.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="font"&gt;Font&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Article original: &lt;a href="https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/"&gt;https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>