<?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>Agents | The .NET Blog</title><link>https://thedotnetblog.com/it/tags/agents/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>it</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Wed, 03 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/it/tags/agents/index.xml" rel="self" type="application/rss+xml"/><item><title>NL2SQL è la SQL Injection dell'Era Agentiva</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/nl2sql-agentic-sql-injection-mcp-server/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/nl2sql-agentic-sql-injection-mcp-server/</guid><description>Prima di lasciare che un agente interroghi il tuo database con il linguaggio naturale, leggi questo. NL2SQL sembra semplice finché non rifletti sulla completezza dello schema, l'indeterminismo e cosa risolve realmente SQL MCP Server.</description><content:encoded>&lt;p&gt;C&amp;rsquo;è una versione del discorso su NL2SQL che suona perfetta: gli utenti fanno domande in linguaggio naturale, gli agenti generano SQL, i dati tornano. Meno schermate, meno query, meno codice. Semplice.&lt;/p&gt;
&lt;p&gt;Poi ci pensi per altri cinque minuti.&lt;/p&gt;
&lt;h2 id="i-problemi-di-cui-nessuno-parla-nella-demo"&gt;I Problemi di cui Nessuno Parla nella Demo&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Gli schemi non sono stati progettati per spiegare le cose.&lt;/strong&gt; Nomi di tabelle criptici, nomi di colonne incoerenti, relazioni tecnicamente valide ma semanticamente invalide senza predicati aggiuntivi — questo è normale per i database aziendali. Non sono bug, sono semplicemente la storia accumulata dei cambiamenti di business. Ma quando chiedi a un modello di inferire l&amp;rsquo;intento da uno schema che non è stato progettato per comunicare l&amp;rsquo;intento, il modello ci proverà comunque. Non si arrenderà. Genererà la sua migliore query possibile e restituirà risultati con sicurezza.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I modelli non sono deterministici.&lt;/strong&gt; Fai la stessa domanda sullo stesso database due volte e potresti ottenere SQL diverso. Il modello sta calcolando probabilità, e lievi variazioni nel contesto producono output diversi. Non puoi testare fino ad ottenere la garanzia che l&amp;rsquo;agente generi sempre la query corretta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La revisione dell&amp;rsquo;utente non scala.&lt;/strong&gt; &amp;ldquo;Basta rivedere ogni query prima dell&amp;rsquo;esecuzione&amp;rdquo; sembra sicuro. Ma presuppone che gli utenti siano esperti sia nel modello di dati che in SQL — esattamente le persone che non avevano bisogno dell&amp;rsquo;interfaccia in linguaggio naturale. Introduce anche sovraccarico cognitivo e una nuova classe di bias di conferma, dove gli utenti sopraffatti dalla complessità della query approvano query non valide invece di investigarle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E poi c&amp;rsquo;è l&amp;rsquo;injection.&lt;/strong&gt; Nello sviluppo SQL tradizionale, la parametrizzazione ha risolto l&amp;rsquo;injection perché l&amp;rsquo;input dell&amp;rsquo;utente riempiva i parametri, non la struttura SQL. Con NL2SQL, il modello genera il SQL stesso. Il prompt, il contesto dello schema, la cronologia della conversazione e i dati recuperati influenzano tutti ciò che viene eseguito. Se qualcuno elabora un prompt che cambia ciò che il modello genera, questa è injection — non a livello di parametro, ma a livello di generazione di query. E a differenza dell&amp;rsquo;eliminazione di una tabella (ovvio, recuperabile), l&amp;rsquo;injection NL2SQL produce query che restituiscono risultati errati senza errori visibili. Le decisioni aziendali vengono prese su dati sbagliati.&lt;/p&gt;
&lt;h2 id="cosa-risolve-realmente-sql-mcp-server"&gt;Cosa Risolve Realmente SQL MCP Server&lt;/h2&gt;
&lt;p&gt;È qui che l&amp;rsquo;articolo fa il suo punto pratico più utile. Invece di dare a un agente accesso arbitrario allo schema e sperare nel meglio, SQL MCP Server espone una &lt;strong&gt;superficie API curata&lt;/strong&gt; costruita su &lt;a href="https://learn.microsoft.com/en-us/azure/data-api-builder/overview"&gt;Data API builder&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La differenza è importante: l&amp;rsquo;agente non genera SQL. Chiama endpoint denominati che restituiscono forme di risultato predefinite. Il SQL viene scritto una volta, da uno sviluppatore, ed è deterministico. Il non-determinismo dell&amp;rsquo;agente è limitato alla scelta di &lt;em&gt;quale&lt;/em&gt; endpoint chiamare, non alla costruzione di query arbitrarie.&lt;/p&gt;
&lt;p&gt;Questo è analogo a ciò che la parametrizzazione ha fatto per l&amp;rsquo;injection SQL nel modello di app tradizionale — rimuovi la capacità di costruire query arbitrarie dall&amp;rsquo;input non attendibile.&lt;/p&gt;
&lt;h2 id="la-domanda-giusta"&gt;La Domanda Giusta&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;articolo non dice &amp;ldquo;non usare mai NL2SQL.&amp;rdquo; Dice: sii deliberato su &lt;em&gt;dove&lt;/em&gt; lo applichi e &lt;em&gt;cosa&lt;/em&gt; esponi. Per l&amp;rsquo;analisi esplorativa in un ambiente controllato, con uno schema limitato e accesso in sola lettura, NL2SQL potrebbe andare bene. Per i sistemi di produzione dove le decisioni aziendali dipendono dai risultati, un livello API curato è significativamente più sicuro.&lt;/p&gt;
&lt;p&gt;Onestà: alcuni problemi si risolvono genuinamente meglio con query strutturate dietro endpoint denominati che con il linguaggio naturale verso SQL. SQL MCP Server ti dà questa opzione senza abbandonare completamente l&amp;rsquo;interfaccia agentiva.&lt;/p&gt;
&lt;p&gt;Post originale: &lt;a href="https://devblogs.microsoft.com/azure-sql/sql-mcp-server-nl2sql/"&gt;Considering NL2SQL? Should your database really be the prompt? How can SQL MCP Server help?&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Il Tuo Agente IA Ha un Problema di Identità (Ed Ecco il Template che lo Risolve)</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/azd-least-privilege-ai-agents-oauth-token-pattern/</link><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/azd-least-privilege-ai-agents-oauth-token-pattern/</guid><description>Un nuovo template azd di Curity e Microsoft mostra come costruire agenti IA che usano token OAuth di breve durata con scope a grana fine — in modo che gli agenti non possano mai vedere dati che non dovrebbero vedere.</description><content:encoded>&lt;p&gt;C&amp;rsquo;è un momento in ogni progetto di agente IA che va più o meno così: la demo funziona perfettamente, l&amp;rsquo;agente interpreta il linguaggio naturale, chiama le API giuste, restituisce i dati giusti. Poi inizi a pensare agli utenti reali.&lt;/p&gt;
&lt;p&gt;Cosa impedisce alla sessione dell&amp;rsquo;agente di un utente di vedere i dati di un altro utente? E se l&amp;rsquo;agente viene ingannato tramite prompt injection? E se chiama uno strumento in modo inaspettato?&lt;/p&gt;
&lt;p&gt;Questi non sono casi limite. Sono decisioni di design che devi prendere prima di rilasciare.&lt;/p&gt;
&lt;p&gt;Un nuovo template &lt;code&gt;azd&lt;/code&gt; di Curity e Microsoft ti fornisce un riferimento funzionante per esattamente questo problema.&lt;/p&gt;
&lt;h2 id="il-problema-principale-autenticazione--autorizzazione"&gt;Il Problema Principale: Autenticazione ≠ Autorizzazione&lt;/h2&gt;
&lt;p&gt;La maggior parte dei campioni di agenti gestisce bene l&amp;rsquo;autenticazione degli utenti. Gestisce male l&amp;rsquo;autorizzazione. Sapere &lt;em&gt;chi&lt;/em&gt; è l&amp;rsquo;utente non ti dice &lt;em&gt;quali dati&lt;/em&gt; dovrebbe vedere.&lt;/p&gt;
&lt;p&gt;Un&amp;rsquo;applicazione client tradizionale fa chiamate API prevedibili. Un agente IA è non deterministico — interpreta il linguaggio naturale e decide cosa chiamare. Può essere creativo. Può anche sbagliare. E se viene manipolato tramite prompt injection, hai bisogno di regole che non dipendano dal buon comportamento dell&amp;rsquo;IA.&lt;/p&gt;
&lt;p&gt;La soluzione dimostrata da questo template: &lt;strong&gt;token di breve durata che trasportano esattamente le informazioni giuste per ogni salto&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="come-funziona-la-catena-di-token"&gt;Come Funziona la Catena di Token&lt;/h2&gt;
&lt;p&gt;Il template usa token di accesso OAuth 2.0 con scambio di token per restringere i permessi a ogni passo. Un token utente viene scambiato due volte prima di raggiungere il server MCP:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Primo scambio&lt;/strong&gt; — restringe lo scope e converte il token opaco in un JWT&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secondo scambio&lt;/strong&gt; — aggiunge l&amp;rsquo;identità dell&amp;rsquo;agente e un nuovo audience per il salto del server MCP&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Come appare il token del server MCP:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;scope&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;stocks/read&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;sub&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;62c839b8...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;aud&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://mcp.demo.example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;customer_id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;178&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;region&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;USA&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il &lt;code&gt;customer_id&lt;/code&gt; è incorporato nel token dal server di autorizzazione, non passato come parametro che l&amp;rsquo;agente controlla. L&amp;rsquo;API controlla il token, non le istruzioni dell&amp;rsquo;agente.&lt;/p&gt;
&lt;p&gt;Questo significa: anche se qualcuno inganna l&amp;rsquo;agente facendogli tentare di recuperare i dati di un altro cliente, il token non lo autorizzerà.&lt;/p&gt;
&lt;h2 id="cosa-distribuisce-il-template"&gt;Cosa Distribuisce il Template&lt;/h2&gt;
&lt;p&gt;Con pochi comandi &lt;code&gt;azd&lt;/code&gt; ottieni:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un agente backend su Microsoft Foundry (C#, SDK Microsoft A2A e MCP)&lt;/li&gt;
&lt;li&gt;Un server MCP che espone un&amp;rsquo;API di portafoglio di esempio&lt;/li&gt;
&lt;li&gt;Curity Identity Server come server di autorizzazione, insieme a Entra ID per l&amp;rsquo;autenticazione&lt;/li&gt;
&lt;li&gt;Gateway API esterni e interni che gestiscono lo scambio di token e il logging degli audit&lt;/li&gt;
&lt;li&gt;Bicep per tutta l&amp;rsquo;infrastruttura Azure: Container Apps, VNet, ACR, Azure AI Foundry, Key Vault, Azure SQL Database, storage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&amp;rsquo;intero pattern è ispezionabile e personalizzabile.&lt;/p&gt;
&lt;h2 id="il-principio-di-design-che-vale-la-pena-adottare"&gt;Il Principio di Design che Vale la Pena Adottare&lt;/h2&gt;
&lt;p&gt;Anche se non usi Curity, il pattern è trasferibile: &lt;strong&gt;gli agenti non dovrebbero mai avere accesso permanente all&amp;rsquo;API&lt;/strong&gt;. Ogni azione dovrebbe usare un token di breve durata con il minimo scope necessario per quella specifica chiamata, emesso per la specifica identità dell&amp;rsquo;agente, con i claim di cui l&amp;rsquo;API ha bisogno per prendere decisioni di autorizzazione.&lt;/p&gt;
&lt;p&gt;Questo regge contro agenti creativi, errori e prompt injection in modi che &amp;ldquo;assicurati solo che l&amp;rsquo;agente non faccia cose cattive&amp;rdquo; non farà mai.&lt;/p&gt;
&lt;h2 id="conclusione"&gt;Conclusione&lt;/h2&gt;
&lt;p&gt;I pattern di sicurezza per gli agenti IA sono ancora in fase di definizione in tutto il settore. Questo template è una delle implementazioni di riferimento più complete che ho visto — copre il flusso di autorizzazione reale, non solo l&amp;rsquo;autenticazione.&lt;/p&gt;
&lt;p&gt;Post originale: &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-curity-least-privilege-ai-agents/"&gt;Least privilege AI agents: A new azd template from Curity and Microsoft&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>CodeAct in Agent Framework: Come Dimezzare la Latenza del tuo Agente</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</guid><description>CodeAct comprime catene di strumenti in più fasi in un unico blocco di codice sandboxed — riducendo la latenza del 52% e l'utilizzo dei token del 64%. Cosa significa per i tuoi agenti e quando usarlo.</description><content:encoded>&lt;p&gt;&lt;em&gt;Questo post è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/it/news/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;è quel momento in ogni progetto di agenti in cui guardi il trace e pensi: &amp;ldquo;perché ci vuole così tanto?&amp;rdquo; Il modello funziona bene. Gli strumenti funzionano. Ma ci sono sette round trip per ottenere un risultato che potresti calcolare in una sola volta.&lt;/p&gt;
&lt;p&gt;Questo è esattamente il problema che CodeAct risolve — e il &lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;team di Agent Framework ha appena pubblicato il supporto alpha&lt;/a&gt; tramite il nuovo pacchetto &lt;code&gt;agent-framework-hyperlight&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="cosè-codeact"&gt;Cos&amp;rsquo;è CodeAct?&lt;/h2&gt;
&lt;p&gt;Il &lt;a href="https://arxiv.org/abs/2402.01030"&gt;pattern CodeAct&lt;/a&gt; è elegantemente semplice: invece di dare al modello una lista di strumenti da chiamare uno alla volta, gli dai un unico strumento &lt;code&gt;execute_code&lt;/code&gt; e lo lasci esprimere l&amp;rsquo;&lt;em&gt;intero piano&lt;/em&gt; come un breve programma Python. L&amp;rsquo;agente scrive il codice una volta, la sandbox lo esegue, e ottieni un singolo risultato consolidato.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approccio&lt;/th&gt;
&lt;th&gt;Tempo&lt;/th&gt;
&lt;th&gt;Token&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tradizionale&lt;/td&gt;
&lt;td&gt;27,81s&lt;/td&gt;
&lt;td&gt;6.890&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeAct&lt;/td&gt;
&lt;td&gt;13,23s&lt;/td&gt;
&lt;td&gt;2.489&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Miglioramento&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;52,4%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;63,9%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="la-componente-di-sicurezza-micro-vm-hyperlight"&gt;La componente di sicurezza: Micro-VM Hyperlight&lt;/h2&gt;
&lt;p&gt;Il pacchetto &lt;code&gt;agent-framework-hyperlight&lt;/code&gt; utilizza micro-VM di &lt;a href="https://github.com/hyperlight-dev/hyperlight"&gt;Hyperlight&lt;/a&gt;. Ogni chiamata &lt;code&gt;execute_code&lt;/code&gt; ottiene la propria micro-VM appena creata. L&amp;rsquo;avvio si misura in millisecondi. L&amp;rsquo;isolamento è praticamente gratuito.&lt;/p&gt;
&lt;p&gt;I tuoi strumenti continuano a girare sull&amp;rsquo;host. Il &lt;em&gt;codice collante&lt;/em&gt; generato dal modello gira nella sandbox. Questa è la divisione giusta.&lt;/p&gt;
&lt;h2 id="configurazione-minima"&gt;Configurazione minima&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework_hyperlight&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HyperlightCodeActProvider&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@tool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_weather&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;Return the current weather for a city.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;city&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;temperature_c&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;21.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;conditions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;partly cloudy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;codeact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HyperlightCodeActProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;get_weather&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;approval_mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;never_require&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;CodeActAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;context_providers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;codeact&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="quando-usare-codeact-e-quando-no"&gt;Quando usare CodeAct (e quando no)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Usa CodeAct quando:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il task concatena molte piccole chiamate a strumenti (lookup, join, calcoli)&lt;/li&gt;
&lt;li&gt;La latenza e il costo dei token contano&lt;/li&gt;
&lt;li&gt;Vuoi un isolamento forte per chiamata sul codice generato dal modello&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Resta con il tool-calling tradizionale quando:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L&amp;rsquo;agente fa solo una o due chiamate a strumenti per turno&lt;/li&gt;
&lt;li&gt;Ogni chiamata ha effetti collaterali da approvare individualmente&lt;/li&gt;
&lt;li&gt;Le descrizioni degli strumenti sono scarse o ambigue&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="provalo-ora"&gt;Provalo ora&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install agent-framework-hyperlight --pre
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Leggi il &lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;post completo sul blog di Agent Framework&lt;/a&gt; per una copertura più approfondita.&lt;/p&gt;</content:encoded></item><item><title>Dove il tuo Agente Ricorda le Cose? Guida Pratica all'Archiviazione della Cronologia Chat</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>Gestito dal servizio o dal client? Lineare o ramificabile? La decisione architetturale che definisce cosa può fare davvero il tuo agente IA — con esempi di codice in C# e Python.</description><content:encoded>&lt;p&gt;&lt;em&gt;Questo post è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/it/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Quando costruisci un agente IA, dedichi la maggior parte dell&amp;rsquo;energia al modello, agli strumenti e ai prompt. La domanda su &lt;em&gt;dove vive la cronologia della conversazione&lt;/em&gt; sembra un dettaglio di implementazione — ma è una delle decisioni architetturali più importanti che prenderai.&lt;/p&gt;
&lt;p&gt;Determina se gli utenti possono ramificare le conversazioni, annullare le risposte, riprendere le sessioni dopo un riavvio e se i tuoi dati escono mai dalla tua infrastruttura. Il &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;team di Agent Framework ha pubblicato un&amp;rsquo;analisi approfondita&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="due-pattern-fondamentali"&gt;Due pattern fondamentali&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Gestito dal servizio&lt;/strong&gt;: il servizio IA archivia lo stato della conversazione. La tua app mantiene un riferimento e il servizio include automaticamente la cronologia rilevante in ogni richiesta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gestito dal client&lt;/strong&gt;: la tua app mantiene la cronologia completa e invia messaggi rilevanti con ogni richiesta. Il servizio è stateless. Tu controlli tutto.&lt;/p&gt;
&lt;h2 id="come-agent-framework-astrae-questo"&gt;Come Agent Framework astrae questo&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 class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Mi chiamo Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Come mi chiamo?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Mi chiamo Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Come mi chiamo?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="riferimento-rapido-ai-provider"&gt;Riferimento rapido ai provider&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Archiviazione&lt;/th&gt;
&lt;th&gt;Modello&lt;/th&gt;
&lt;th&gt;Compattazione&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI/Azure Chat Completions&lt;/td&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Tu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;Servizio&lt;/td&gt;
&lt;td&gt;Lineare&lt;/td&gt;
&lt;td&gt;Servizio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (default)&lt;/td&gt;
&lt;td&gt;Servizio&lt;/td&gt;
&lt;td&gt;Ramificabile&lt;/td&gt;
&lt;td&gt;Servizio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic Claude, Ollama&lt;/td&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Tu&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="come-scegliere"&gt;Come scegliere&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Hai bisogno di ramificazione o &amp;ldquo;annulla&amp;rdquo;?&lt;/strong&gt; → Responses API gestito dal servizio&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hai bisogno di sovranità dei dati?&lt;/strong&gt; → Gestito dal client con provider di database&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;È un semplice chatbot?&lt;/strong&gt; → Gestito dal servizio lineare va benissimo&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Leggi il &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;post completo&lt;/a&gt; per l&amp;rsquo;albero decisionale completo.&lt;/p&gt;</content:encoded></item><item><title>Foundry Toolboxes: Un unico endpoint per tutti i tool degli agenti</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</guid><description>Microsoft Foundry ha lanciato Toolboxes in public preview — un modo per curare, gestire ed esporre i tool degli agenti IA tramite un unico endpoint compatibile MCP.</description><content:encoded>&lt;p&gt;&lt;em&gt;Questo articolo è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/it/news/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;è un problema che sembra noioso finché non lo si vive in prima persona: l&amp;rsquo;organizzazione sta costruendo più agenti IA, ognuno ha bisogno di tool, e ogni team li riconfigura da zero. La stessa integrazione di ricerca web, la stessa config di Azure AI Search, la stessa connessione al server MCP di GitHub — ma in un altro repository, da un altro team, con altre credenziali e senza governance condivisa.&lt;/p&gt;
&lt;p&gt;Microsoft Foundry ha appena lanciato &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;Toolboxes&lt;/a&gt; in public preview, ed è una risposta diretta a questo problema.&lt;/p&gt;
&lt;h2 id="cosè-una-toolbox"&gt;Cos&amp;rsquo;è una Toolbox?&lt;/h2&gt;
&lt;p&gt;Una Toolbox è un bundle di tool con nome, riutilizzabile, che si definisce una volta in Foundry e si espone tramite un unico endpoint compatibile MCP. Qualsiasi runtime di agente che parla MCP può consumarlo — nessun lock-in con Foundry Agents.&lt;/p&gt;
&lt;p&gt;La promessa è semplice: &lt;strong&gt;build once, consume anywhere&lt;/strong&gt;. Definisci i tool, configura l&amp;rsquo;autenticazione centralmente (OAuth passthrough, identità gestita di Entra), pubblica l&amp;rsquo;endpoint. Ogni agente che ha bisogno di quei tool si connette all&amp;rsquo;endpoint e li ottiene tutti.&lt;/p&gt;
&lt;h2 id="i-quattro-pilastri-due-disponibili-oggi"&gt;I quattro pilastri (due disponibili oggi)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pilastro&lt;/th&gt;
&lt;th&gt;Stato&lt;/th&gt;
&lt;th&gt;Cosa 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;In arrivo&lt;/td&gt;
&lt;td&gt;Trova tool approvati senza ricerca manuale&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;Disponibile&lt;/td&gt;
&lt;td&gt;Raggruppa tool in un bundle riutilizzabile&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;Disponibile&lt;/td&gt;
&lt;td&gt;Un endpoint MCP unico espone tutti i tool&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;In arrivo&lt;/td&gt;
&lt;td&gt;Auth centralizzata + observability per tutte le chiamate&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="esempio-pratico"&gt;Esempio pratico&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 documentazione e rispondi alle issue di 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 documentazione pubblica&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;Una volta pubblicato, Foundry fornisce un endpoint unificato. Una connessione, tutti i tool.&lt;/p&gt;
&lt;h2 id="nessun-lock-in-con-foundry-agents"&gt;Nessun lock-in con Foundry Agents&lt;/h2&gt;
&lt;p&gt;Le Toolbox vengono &lt;strong&gt;create e gestite&lt;/strong&gt; in Foundry, ma la superficie di consumo è il protocollo MCP aperto. Si possono usare da agenti personalizzati (Microsoft Agent Framework, LangGraph), GitHub Copilot e altri IDE compatibili MCP.&lt;/p&gt;
&lt;h2 id="perché-è-importante-adesso"&gt;Perché è importante adesso&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;ondata multi-agente sta arrivando in produzione. Ogni nuovo agente è una nuova superficie per configurazione duplicata, credenziali scadute e comportamento inconsistente. La base Build + Consume è sufficiente per iniziare a centralizzare. Quando arriverà il pilastro Govern, si avrà uno strato di tool completamente osservabile e controllato centralmente per tutta la flotta di agenti.&lt;/p&gt;
&lt;h2 id="conclusione"&gt;Conclusione&lt;/h2&gt;
&lt;p&gt;È ancora presto — public preview, SDK Python prima, con Discover e Govern ancora in arrivo. Ma il modello è solido e il design nativo MCP significa che funziona con i tool che si stanno già costruendo. Dai un&amp;rsquo;occhiata all&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;annuncio ufficiale&lt;/a&gt; per iniziare.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.117: Gli Agent Stanno Ottenendo i Propri Branch Git e Io Sono Tutto a Favore</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/</guid><description>VS Code 1.117 porta l'isolamento con worktree per le sessioni degli agent, la modalità Autopilot persistente e il supporto per i subagent. Il workflow di coding agentico è diventato molto più reale.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Questo post è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/it/news/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La linea tra &amp;ldquo;assistente IA&amp;rdquo; e &amp;ldquo;compagno di squadra IA&amp;rdquo; continua ad assottigliarsi. VS Code 1.117 è appena uscito e le &lt;a href="https://code.visualstudio.com/updates/v1_117"&gt;note di rilascio complete&lt;/a&gt; sono piene, ma la storia è chiara: gli agent stanno diventando cittadini di prima classe nel tuo workflow di sviluppo.&lt;/p&gt;
&lt;p&gt;Ecco cosa conta davvero.&lt;/p&gt;
&lt;h2 id="la-modalità-autopilot-finalmente-ricorda-la-tua-preferenza"&gt;La modalità Autopilot finalmente ricorda la tua preferenza&lt;/h2&gt;
&lt;p&gt;Prima, dovevi riattivare Autopilot ogni volta che iniziavi una nuova sessione. Fastidioso. Ora la tua modalità di permessi persiste tra le sessioni, e puoi configurare il valore predefinito.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;Agent Host supporta tre configurazioni di sessione:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt; — gli strumenti chiedono conferma prima di eseguire&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass&lt;/strong&gt; — approva tutto automaticamente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autopilot&lt;/strong&gt; — completamente autonomo, risponde alle proprie domande e va avanti&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se stai creando un nuovo progetto .NET con migrazioni, Docker e CI — impostalo su Autopilot una volta e dimenticatene. Quella preferenza resta.&lt;/p&gt;
&lt;h2 id="worktree-e-isolamento-git-per-le-sessioni-degli-agent"&gt;Worktree e isolamento git per le sessioni degli agent&lt;/h2&gt;
&lt;p&gt;Questa è la grande novità. Le sessioni degli agent ora supportano l&amp;rsquo;isolamento completo con worktree e git. Questo significa che quando un agent lavora su un task, ottiene il proprio branch e la propria directory di lavoro. Il tuo branch principale resta intatto.&lt;/p&gt;
&lt;p&gt;Ancora meglio — Copilot CLI genera nomi di branch significativi per queste sessioni worktree. Basta con &lt;code&gt;agent-session-abc123&lt;/code&gt;. Ottieni qualcosa che descrive davvero cosa sta facendo l&amp;rsquo;agent.&lt;/p&gt;
&lt;p&gt;Per gli sviluppatori .NET che gestiscono più feature branch o correggono bug mentre un lungo task di scaffolding è in esecuzione, questo è un punto di svolta. Puoi avere un agent che costruisce i tuoi controller API in un worktree mentre tu fai debug di un problema nel service layer in un altro. Nessun conflitto. Nessun stashing. Nessun casino.&lt;/p&gt;
&lt;h2 id="subagent-e-team-di-agent"&gt;Subagent e team di agent&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;Agent Host Protocol ora supporta i subagent. Un agent può avviare altri agent per gestire parti di un task. Pensalo come delegare — il tuo agent principale coordina, e agent specializzati si occupano dei pezzi.&lt;/p&gt;
&lt;p&gt;Siamo ancora all&amp;rsquo;inizio, ma il potenziale per i workflow .NET è ovvio. Immagina un agent che gestisce le tue migrazioni EF Core mentre un altro configura i tuoi test di integrazione. Non siamo ancora completamente lì, ma il fatto che il supporto al protocollo arrivi ora significa che gli strumenti seguiranno velocemente.&lt;/p&gt;
&lt;h2 id="loutput-del-terminale-incluso-automaticamente-quando-gli-agent-inviano-input"&gt;L&amp;rsquo;output del terminale incluso automaticamente quando gli agent inviano input&lt;/h2&gt;
&lt;p&gt;Piccolo ma significativo. Quando un agent invia input al terminale, l&amp;rsquo;output del terminale viene ora automaticamente incluso nel contesto. Prima, l&amp;rsquo;agent doveva fare un turno extra solo per leggere cosa era successo.&lt;/p&gt;
&lt;p&gt;Se hai mai visto un agent eseguire &lt;code&gt;dotnet build&lt;/code&gt;, fallire, e poi fare un altro giro solo per vedere l&amp;rsquo;errore — quella frizione è sparita. Vede l&amp;rsquo;output immediatamente e reagisce.&lt;/p&gt;
&lt;h2 id="lapp-agents-su-macos-si-aggiorna-automaticamente"&gt;L&amp;rsquo;app Agents su macOS si aggiorna automaticamente&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;app standalone Agents su macOS ora si aggiorna automaticamente. Basta scaricare manualmente nuove versioni. Resta semplicemente aggiornata.&lt;/p&gt;
&lt;h2 id="le-cose-più-piccole-che-vale-la-pena-sapere"&gt;Le cose più piccole che vale la pena sapere&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Gli &lt;strong&gt;hover su package.json&lt;/strong&gt; ora mostrano sia la versione installata che l&amp;rsquo;ultima disponibile. Utile se gestisci strumenti npm insieme ai tuoi progetti .NET.&lt;/li&gt;
&lt;li&gt;Le &lt;strong&gt;immagini nei commenti JSDoc&lt;/strong&gt; vengono renderizzate correttamente negli hover e nei completamenti.&lt;/li&gt;
&lt;li&gt;Le &lt;strong&gt;sessioni Copilot CLI&lt;/strong&gt; ora indicano se sono state create da VS Code o esternamente — comodo quando salti tra i terminali.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copilot CLI, Claude Code e Gemini CLI&lt;/strong&gt; sono riconosciuti come tipi di shell. L&amp;rsquo;editor sa cosa stai eseguendo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="il-punto-chiave"&gt;Il punto chiave&lt;/h2&gt;
&lt;p&gt;VS Code 1.117 non è un dump di feature appariscenti. È infrastruttura. Isolamento con worktree, permessi persistenti, protocolli per subagent — questi sono i mattoni per un workflow dove gli agent gestiscono task reali e paralleli senza pestare il tuo codice.&lt;/p&gt;
&lt;p&gt;Se stai sviluppando con .NET e non ti sei ancora buttato nel workflow agentico, onestamente, ora è il momento di iniziare.&lt;/p&gt;</content:encoded></item><item><title>Dove dovresti ospitare i tuoi agenti IA su Azure? Una guida decisionale pratica</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</guid><description>Azure offre sei modi per ospitare agenti IA — dai container grezzi ai Foundry Hosted Agents completamente gestiti. Ecco come scegliere quello giusto per il tuo workload .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Questo post è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/it/news/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Se stai costruendo agenti IA con .NET in questo momento, probabilmente hai notato qualcosa: ci sono &lt;em&gt;molti&lt;/em&gt; modi per ospitarli su Azure. Container Apps, AKS, Functions, App Service, Foundry Agents, Foundry Hosted Agents — e tutti sembrano ragionevoli finché non devi effettivamente sceglierne uno. Microsoft ha appena pubblicato una &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;guida completa all&amp;rsquo;hosting di agenti IA su Azure&lt;/a&gt; che chiarisce tutto, e voglio analizzarla dalla prospettiva pratica di uno sviluppatore .NET.&lt;/p&gt;
&lt;h2 id="le-sei-opzioni-a-colpo-docchio"&gt;Le sei opzioni a colpo d&amp;rsquo;occhio&lt;/h2&gt;
&lt;p&gt;Ecco come riassumerei il panorama:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opzione&lt;/th&gt;
&lt;th&gt;Ideale per&lt;/th&gt;
&lt;th&gt;Gestisci tu&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Container Apps&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Controllo totale dei container senza complessità K8s&lt;/td&gt;
&lt;td&gt;Osservabilità, stato, ciclo di vita&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;Compliance aziendale, multi-cluster, networking personalizzato&lt;/td&gt;
&lt;td&gt;Tutto (è quello il punto)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Azure Functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Task di agenti event-driven e di breve durata&lt;/td&gt;
&lt;td&gt;Quasi niente — serverless vero&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;App Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agenti HTTP semplici, traffico prevedibile&lt;/td&gt;
&lt;td&gt;Deploy, config di scaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agenti senza codice via portale/SDK&lt;/td&gt;
&lt;td&gt;Quasi niente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Hosted Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agenti con framework personalizzato e infra gestita&lt;/td&gt;
&lt;td&gt;Solo il tuo codice agente&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Le prime quattro sono compute general-purpose — &lt;em&gt;puoi&lt;/em&gt; eseguire agenti su di esse, ma non sono state progettate per quello. Le ultime due sono native per agenti: comprendono conversazioni, chiamate a strumenti e cicli di vita degli agenti come concetti di prima classe.&lt;/p&gt;
&lt;h2 id="foundry-hosted-agents--il-punto-ideale-per-sviluppatori-net-di-agenti"&gt;Foundry Hosted Agents — il punto ideale per sviluppatori .NET di agenti&lt;/h2&gt;
&lt;p&gt;Questo è ciò che ha catturato la mia attenzione. I Foundry Hosted Agents si posizionano proprio nel mezzo: ottieni la flessibilità di eseguire il tuo codice (Semantic Kernel, Agent Framework, LangGraph — qualsiasi cosa) ma la piattaforma gestisce infrastruttura, osservabilità e gestione delle conversazioni.&lt;/p&gt;
&lt;p&gt;Il pezzo chiave è l&amp;rsquo;&lt;strong&gt;Hosting Adapter&lt;/strong&gt; — un sottile livello di astrazione che collega il tuo framework di agenti alla piattaforma Foundry. Per Microsoft Agent Framework, appare così:&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;Questa è tutta la tua storia di hosting. L&amp;rsquo;adapter gestisce traduzione di protocolli, streaming via server-sent events, cronologia delle conversazioni e tracing OpenTelemetry — tutto automaticamente. Nessun middleware personalizzato, nessun plumbing manuale.&lt;/p&gt;
&lt;h2 id="il-deploy-è-genuinamente-semplice"&gt;Il deploy è genuinamente semplice&lt;/h2&gt;
&lt;p&gt;Ho fatto deploy di agenti su Container Apps prima e funziona, ma finisci per scrivere molto codice di collegamento per gestione dello stato e osservabilità. Con Hosted Agents e &lt;code&gt;azd&lt;/code&gt;, il deploy è:&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;# Installare l&amp;#39;estensione agente IA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ext install azure.ai.agents
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Inizializzare da un template&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Costruire, pushare, fare deploy — fatto&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;Quel singolo &lt;code&gt;azd up&lt;/code&gt; costruisce il tuo container, lo pusha su ACR, provisiona il progetto Foundry, fa deploy degli endpoint del modello e avvia il tuo agente. Cinque passaggi condensati in un solo comando.&lt;/p&gt;
&lt;h2 id="gestione-conversazioni-integrata"&gt;Gestione conversazioni integrata&lt;/h2&gt;
&lt;p&gt;Questa è la parte che fa risparmiare più tempo in produzione. Invece di costruire il tuo store di stato delle conversazioni, gli Hosted Agents lo gestiscono nativamente:&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;# Creare una conversazione persistente&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;# Primo turno&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;# Secondo turno — il contesto è preservato&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;Niente Redis. Niente session store Cosmos DB. Niente middleware personalizzato per la serializzazione dei messaggi. La piattaforma semplicemente se ne occupa.&lt;/p&gt;
&lt;h2 id="il-mio-framework-decisionale"&gt;Il mio framework decisionale&lt;/h2&gt;
&lt;p&gt;Dopo aver esaminato tutte e sei le opzioni, ecco il mio modello mentale rapido:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Hai bisogno di zero infrastruttura?&lt;/strong&gt; → Foundry Agents (portale/SDK, niente container)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hai codice agente personalizzato ma vuoi hosting gestito?&lt;/strong&gt; → Foundry Hosted Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hai bisogno di task agente event-driven e di breve durata?&lt;/strong&gt; → Azure Functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hai bisogno di massimo controllo dei container senza K8s?&lt;/strong&gt; → Container Apps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hai bisogno di compliance rigorosa e multi-cluster?&lt;/strong&gt; → AKS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hai un agente HTTP semplice con traffico prevedibile?&lt;/strong&gt; → App Service&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Per la maggior parte degli sviluppatori .NET che costruiscono con Semantic Kernel o Microsoft Agent Framework, Hosted Agents è probabilmente il punto di partenza giusto. Ottieni scale-to-zero, OpenTelemetry integrato, gestione conversazioni e flessibilità di framework — senza gestire Kubernetes o montare il tuo stack di osservabilità.&lt;/p&gt;
&lt;h2 id="per-concludere"&gt;Per concludere&lt;/h2&gt;
&lt;p&gt;Il panorama dell&amp;rsquo;hosting di agenti su Azure sta maturando velocemente. Se stai iniziando un nuovo progetto di agente IA oggi, considererei seriamente Foundry Hosted Agents prima di ricorrere a Container Apps o AKS per abitudine. L&amp;rsquo;infrastruttura gestita fa risparmiare tempo reale, e il pattern hosting adapter ti permette di mantenere la tua scelta di framework.&lt;/p&gt;
&lt;p&gt;Dai un&amp;rsquo;occhiata alla &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;guida completa di Microsoft&lt;/a&gt; e al &lt;a href="https://github.com/microsoft-foundry/foundry-samples/tree/main/samples/python/hosted-agents"&gt;repo Foundry Samples&lt;/a&gt; per esempi funzionanti.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server 2.0 è Arrivato — L'Automazione Agentica Self-Hosted nel Cloud È Qui</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>Azure MCP Server 2.0 è stabile con deployment remoti self-hosted, 276 tool su 57 servizi Azure, e sicurezza di livello enterprise — ecco cosa conta per gli sviluppatori .NET che costruiscono workflow agentici.</description><content:encoded>&lt;p&gt;&lt;em&gt;Questo articolo è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/it/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Se hai costruito qualcosa con MCP e Azure di recente, probabilmente sai già che l&amp;rsquo;esperienza locale funziona bene. Connetti un server MCP, lascia che il tuo agente AI parli alle risorse Azure, e vai avanti. Ma nel momento in cui hai bisogno di condividere questa configurazione con un team? Ecco dove le cose si complicavano.&lt;/p&gt;
&lt;p&gt;Non più. Azure MCP Server &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;ha appena raggiunto la versione 2.0 stabile&lt;/a&gt;, e la feature principale è esattamente quello che i team enterprise chiedevano: &lt;strong&gt;supporto per server MCP remoti self-hosted&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="che-cosè-azure-mcp-server"&gt;Che cos&amp;rsquo;è Azure MCP Server?&lt;/h2&gt;
&lt;p&gt;Un rapido ripasso. Azure MCP Server implementa la specifica &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;Model Context Protocol&lt;/a&gt; ed espone le capacità di Azure come tool strutturati e scopribili che gli agenti AI possono invocare. Pensalo come un ponte standardizzato tra il tuo agente e Azure — provisioning, deployment, monitoring, diagnostica, tutto attraverso un&amp;rsquo;interfaccia coerente.&lt;/p&gt;
&lt;p&gt;I numeri parlano da soli: &lt;strong&gt;276 tool MCP su 57 servizi Azure&lt;/strong&gt;. È una copertura seria.&lt;/p&gt;
&lt;h2 id="il-grande-affare-deployment-remoti-self-hosted"&gt;Il grande affare: deployment remoti self-hosted&lt;/h2&gt;
&lt;p&gt;Ecco il punto. Eseguire MCP localmente sulla tua macchina va bene per lo sviluppo e gli esperimenti. Ma in uno scenario di team reale, hai bisogno di:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Accesso condiviso per sviluppatori e sistemi agentici interni&lt;/li&gt;
&lt;li&gt;Configurazione centralizzata (contesto tenant, impostazioni di sottoscrizione predefinite, telemetria)&lt;/li&gt;
&lt;li&gt;Limiti di rete e policy aziendali&lt;/li&gt;
&lt;li&gt;Integrazione nelle pipeline CI/CD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 affronta tutto questo. Puoi deployarlo come servizio interno gestito centralmente con trasporto basato su HTTP, autenticazione adeguata e governance coerente.&lt;/p&gt;
&lt;p&gt;Per l&amp;rsquo;autenticazione, hai due solide opzioni:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Managed Identity&lt;/strong&gt; — quando eseguito insieme a &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;On-Behalf-Of (OBO) flow&lt;/strong&gt; — delegazione OpenID Connect che chiama le API Azure usando il contesto dell&amp;rsquo;utente autenticato&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Quel flusso OBO è particolarmente interessante per noi sviluppatori .NET. Significa che i tuoi workflow agentici possono operare con i permessi effettivi dell&amp;rsquo;utente, non con un account di servizio sovra-privilegiato. Principio del minimo privilegio, integrato fin dall&amp;rsquo;inizio.&lt;/p&gt;
&lt;h2 id="hardening-della-sicurezza"&gt;Hardening della sicurezza&lt;/h2&gt;
&lt;p&gt;Non è solo un rilascio di feature — è anche uno di sicurezza. Il rilascio 2.0 aggiunge:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validazione endpoint più forte&lt;/li&gt;
&lt;li&gt;Protezioni contro i pattern di injection negli strumenti orientati alle query&lt;/li&gt;
&lt;li&gt;Controlli di isolamento più rigidi per gli ambienti di sviluppo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se stai per esporre MCP come servizio condiviso, questi salvaguardi contano. Molto.&lt;/p&gt;
&lt;h2 id="dove-puoi-usarlo"&gt;Dove puoi usarlo?&lt;/h2&gt;
&lt;p&gt;La storia della compatibilità client è ampia. Azure MCP Server 2.0 funziona con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IDE&lt;/strong&gt;: VS Code, Visual Studio, IntelliJ, Eclipse, Cursor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agenti CLI&lt;/strong&gt;: GitHub Copilot CLI, Claude Code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: server locale per configurazioni semplici&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-hosted remote&lt;/strong&gt;: la nuova stella del 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Inoltre c&amp;rsquo;è il supporto per sovereign cloud per Azure US Government e Azure gestito da 21Vianet, che è critico per i deployment regolamentati.&lt;/p&gt;
&lt;h2 id="perché-questo-conta-per-gli-sviluppatori-net"&gt;Perché questo conta per gli sviluppatori .NET&lt;/h2&gt;
&lt;p&gt;Se stai costruendo applicazioni agentiche con .NET — che sia Semantic Kernel, Microsoft Agent Framework, o la tua orchestrazione personalizzata — Azure MCP Server 2.0 ti dà un modo production-ready per lasciare che i tuoi agenti interagiscano con l&amp;rsquo;infrastruttura Azure. Nessun wrapper REST personalizzato. Nessun pattern di integrazione specifico per il servizio. Solo MCP.&lt;/p&gt;
&lt;p&gt;Combinato con 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 fluent per MCP Apps&lt;/a&gt; uscito pochi giorni fa, l&amp;rsquo;ecosistema .NET MCP sta maturando velocemente.&lt;/p&gt;
&lt;h2 id="per-iniziare"&gt;Per iniziare&lt;/h2&gt;
&lt;p&gt;Scegli il tuo percorso:&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; — codice sorgente, documentazione, tutto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/docker"&gt;Docker Image&lt;/a&gt;&lt;/strong&gt; — deployment containerizzato&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;VS Code Extension&lt;/a&gt;&lt;/strong&gt; — integrazione IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;Self-hosting guide&lt;/a&gt;&lt;/strong&gt; — la feature principale del 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="per-concludere"&gt;Per concludere&lt;/h2&gt;
&lt;p&gt;Azure MCP Server 2.0 è esattamente il tipo di upgrade infrastrutturale che non sembra vistoso in una demo ma cambia tutto nella pratica. MCP remoto self-hosted con autenticazione appropriata, hardening della sicurezza e supporto per sovereign cloud significa che MCP è pronto per team reali che costruiscono workflow agentici reali su Azure. Se stavi aspettando il segnale &amp;ldquo;enterprise-ready&amp;rdquo; — questo è.&lt;/p&gt;</content:encoded></item><item><title>L'Ingegneria delle Piattaforme Agentiche Sta Diventando Realtà — Git-APE Mostra Come</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</guid><description>Il progetto Git-APE di Microsoft mette in pratica l'ingegneria delle piattaforme agentiche — usando agenti GitHub Copilot e Azure MCP per trasformare richieste in linguaggio naturale in infrastruttura cloud validata.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Questo post è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/it/news/emiliano-montesdeoca/agentic-platform-engineering-git-ape/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;L&amp;rsquo;ingegneria delle piattaforme è stato uno di quei termini che suona bene alle conferenze ma che di solito significa &amp;ldquo;abbiamo costruito un portale interno e un wrapper Terraform.&amp;rdquo; La vera promessa — infrastruttura self-service che sia realmente sicura, governata e veloce — è sempre stata a qualche passo di distanza.&lt;/p&gt;
&lt;p&gt;Il team Azure ha appena pubblicato la &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;Parte 2 della serie sull&amp;rsquo;ingegneria delle piattaforme agentiche&lt;/a&gt;, e questa è tutta sull&amp;rsquo;implementazione pratica. Lo chiamano &lt;strong&gt;Git-APE&lt;/strong&gt; (sì, l&amp;rsquo;acronimo è intenzionale), ed è un progetto open source che utilizza agenti GitHub Copilot più server Azure MCP per trasformare richieste in linguaggio naturale in infrastruttura validata e deployata.&lt;/p&gt;
&lt;h2 id="cosa-fa-git-ape-concretamente"&gt;Cosa fa Git-APE concretamente&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;idea centrale: invece di far imparare ai developer moduli Terraform, navigare nelle UI dei portali o aprire ticket al team piattaforma, parlano con un agente Copilot. L&amp;rsquo;agente interpreta l&amp;rsquo;intento, genera Infrastructure-as-Code, la valida contro le policy e deploya — tutto all&amp;rsquo;interno di VS Code.&lt;/p&gt;
&lt;p&gt;Ecco il setup:&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;Apri il workspace in VS Code, e i file di configurazione dell&amp;rsquo;agente vengono scoperti automaticamente da GitHub Copilot. Interagisci direttamente con l&amp;rsquo;agente:&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;agente utilizza Azure MCP Server internamente per interagire con i servizi Azure. La configurazione MCP nelle impostazioni di VS Code abilita capacità specifiche:&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="perché-è-importante"&gt;Perché è importante&lt;/h2&gt;
&lt;p&gt;Per chi di noi costruisce su Azure, questo sposta la conversazione sull&amp;rsquo;ingegneria delle piattaforme da &amp;ldquo;come costruiamo un portale&amp;rdquo; a &amp;ldquo;come descriviamo i nostri guardrail come API.&amp;rdquo; Quando l&amp;rsquo;interfaccia della tua piattaforma è un agente IA, la qualità dei tuoi vincoli e delle tue policy diventa il prodotto.&lt;/p&gt;
&lt;p&gt;Il blog della Parte 1 esponeva la teoria: API ben descritte, schemi di controllo e guardrail espliciti rendono le piattaforme agent-ready. La Parte 2 dimostra che funziona rilasciando strumenti concreti. L&amp;rsquo;agente non genera risorse alla cieca — valida contro le best practice, rispetta le convenzioni di naming e applica le policy della tua organizzazione.&lt;/p&gt;
&lt;p&gt;La pulizia è altrettanto semplice:&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-mia-opinione"&gt;La mia opinione&lt;/h2&gt;
&lt;p&gt;Sarò onesto — qui si tratta più del pattern che dello strumento specifico. Git-APE in sé è una demo/architettura di riferimento. Ma l&amp;rsquo;idea sottostante — agenti come interfaccia alla tua piattaforma, MCP come protocollo, GitHub Copilot come host — è la direzione in cui sta andando l&amp;rsquo;esperienza developer enterprise.&lt;/p&gt;
&lt;p&gt;Se sei un team piattaforma che cerca come rendere il proprio tooling interno agent-friendly, non c&amp;rsquo;è punto di partenza migliore. E se sei uno sviluppatore .NET che si chiede come questo si collega al suo mondo: Azure MCP Server e gli agenti GitHub Copilot funzionano con qualsiasi workload Azure. La tua API ASP.NET Core, il tuo stack .NET Aspire, i tuoi microservizi containerizzati — tutto può essere il target di un flusso di deployment agentico.&lt;/p&gt;
&lt;h2 id="per-concludere"&gt;Per concludere&lt;/h2&gt;
&lt;p&gt;Git-APE è uno sguardo precoce ma concreto sull&amp;rsquo;ingegneria delle piattaforme agentiche nella pratica. Clona il &lt;a href="https://github.com/Azure/git-ape"&gt;repo&lt;/a&gt;, prova la demo e inizia a pensare a come le API e le policy della tua piattaforma dovrebbero apparire per permettere a un agente di usarle in sicurezza.&lt;/p&gt;
&lt;p&gt;Leggi il &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;post completo&lt;/a&gt; per il walkthrough e i video dimostrativi.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Foundry Marzo 2026 — GPT-5.4, Agent Service GA e il Refresh dell'SDK Che Cambia Tutto</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</guid><description>L'aggiornamento di marzo 2026 di Microsoft Foundry è enorme: Agent Service raggiunge la GA, GPT-5.4 porta un ragionamento affidabile, l'SDK azure-ai-projects diventa stabile in tutti i linguaggi, e Fireworks AI porta i modelli aperti su Azure.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Questo post è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/it/news/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I post mensili &amp;ldquo;Novità in Microsoft Foundry&amp;rdquo; sono solitamente un mix di miglioramenti incrementali e occasionali funzionalità di rilievo. L&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;edizione di marzo 2026&lt;/a&gt;? Praticamente tutte funzionalità di rilievo. Foundry Agent Service raggiunge la GA, GPT-5.4 arriva in produzione, l&amp;rsquo;SDK riceve un importante rilascio stabile, e Fireworks AI porta l&amp;rsquo;inferenza di modelli aperti su Azure. Vediamo cosa conta per gli sviluppatori .NET.&lt;/p&gt;
&lt;h2 id="foundry-agent-service-è-pronto-per-la-produzione"&gt;Foundry Agent Service è pronto per la produzione&lt;/h2&gt;
&lt;p&gt;Questa è la grande notizia. Il runtime di agenti di nuova generazione è generalmente disponibile — costruito sull&amp;rsquo;API Responses di OpenAI, compatibile a livello di protocollo con gli agenti OpenAI, e aperto a modelli di diversi provider. Se state costruendo con l&amp;rsquo;API Responses oggi, migrare a Foundry aggiunge sicurezza enterprise, networking privato, RBAC di Entra, tracing completo e valutazione sulla vostra logica di agenti esistente.&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;Aggiunte chiave: networking privato end-to-end, espansione dell&amp;rsquo;autenticazione MCP (incluso il passthrough OAuth), anteprima di Voice Live per agenti voce-a-voce, e agenti ospitati in 6 nuove regioni.&lt;/p&gt;
&lt;h2 id="gpt-54--affidabilità-oltre-lintelligenza-pura"&gt;GPT-5.4 — affidabilità oltre l&amp;rsquo;intelligenza pura&lt;/h2&gt;
&lt;p&gt;GPT-5.4 non riguarda l&amp;rsquo;essere più intelligente. Riguarda l&amp;rsquo;essere più affidabile. Ragionamento più solido nelle interazioni lunghe, migliore aderenza alle istruzioni, meno fallimenti a metà workflow, e capacità integrate di computer use. Per gli agenti in produzione, quell&amp;rsquo;affidabilità conta molto più dei punteggi nei benchmark.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Modello&lt;/th&gt;
&lt;th&gt;Prezzo (per M token)&lt;/th&gt;
&lt;th&gt;Ideale 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 output&lt;/td&gt;
&lt;td&gt;Agenti in produzione, coding, workflow documentali&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Pro&lt;/td&gt;
&lt;td&gt;$30 / $180 output&lt;/td&gt;
&lt;td&gt;Analisi approfondita, ragionamento scientifico&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Mini&lt;/td&gt;
&lt;td&gt;Economico&lt;/td&gt;
&lt;td&gt;Classificazione, estrazione, chiamate leggere a strumenti&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La mossa intelligente è una strategia di routing: GPT-5.4 Mini gestisce il lavoro ad alto volume e bassa latenza mentre GPT-5.4 si occupa delle richieste con ragionamento pesante.&lt;/p&gt;
&lt;h2 id="lsdk-è-finalmente-stabile"&gt;L&amp;rsquo;SDK è finalmente stabile&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;SDK &lt;code&gt;azure-ai-projects&lt;/code&gt; ha rilasciato versioni stabili in tutti i linguaggi — Python 2.0.0, JS/TS 2.0.0, Java 2.0.0, e .NET 2.0.0 (1 aprile). La dipendenza da &lt;code&gt;azure-ai-agents&lt;/code&gt; è sparita — tutto vive sotto &lt;code&gt;AIProjectClient&lt;/code&gt;. Installate con &lt;code&gt;pip install azure-ai-projects&lt;/code&gt; e il pacchetto include &lt;code&gt;openai&lt;/code&gt; e &lt;code&gt;azure-identity&lt;/code&gt; come dipendenze dirette.&lt;/p&gt;
&lt;p&gt;Per gli sviluppatori .NET, questo significa un singolo pacchetto NuGet per l&amp;rsquo;intera superficie di Foundry. Basta destreggiarsi tra SDK di agenti separati.&lt;/p&gt;
&lt;h2 id="fireworks-ai-porta-i-modelli-aperti-su-azure"&gt;Fireworks AI porta i modelli aperti su Azure&lt;/h2&gt;
&lt;p&gt;Forse l&amp;rsquo;aggiunta più interessante dal punto di vista architetturale: Fireworks AI elabora oltre 13 trilioni di token al giorno a ~180K richieste/secondo, ora disponibile tramite Foundry. DeepSeek V3.2, gpt-oss-120b, Kimi K2.5, e MiniMax M2.5 al lancio.&lt;/p&gt;
&lt;p&gt;La vera storia è il &lt;strong&gt;bring-your-own-weights&lt;/strong&gt; — caricate pesi quantizzati o fine-tunati da qualsiasi luogo senza cambiare lo stack di serving. Deploy tramite serverless pay-per-token o throughput provisionato.&lt;/p&gt;
&lt;h2 id="altri-punti-salienti"&gt;Altri punti salienti&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Phi-4 Reasoning Vision 15B&lt;/strong&gt; — ragionamento multimodale per grafici, diagrammi e layout di documenti&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluations GA&lt;/strong&gt; — valutatori pronti all&amp;rsquo;uso con monitoraggio continuo della produzione integrato in Azure Monitor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Priority Processing&lt;/strong&gt; (Preview) — corsia di calcolo dedicata per carichi di lavoro sensibili alla latenza&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Voice Live&lt;/strong&gt; — runtime voce-a-voce che si connette direttamente agli agenti Foundry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tracing GA&lt;/strong&gt; — ispezione end-to-end delle tracce degli agenti con ordinamento e filtraggio&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deprecazione di PromptFlow&lt;/strong&gt; — migrazione a Microsoft Framework Workflows entro gennaio 2027&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="conclusione"&gt;Conclusione&lt;/h2&gt;
&lt;p&gt;Marzo 2026 è un punto di svolta per Foundry. Agent Service GA, SDK stabili in tutti i linguaggi, GPT-5.4 per agenti di produzione affidabili, e inferenza di modelli aperti via Fireworks AI — la piattaforma è pronta per carichi di lavoro seri.&lt;/p&gt;
&lt;p&gt;Leggete il &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;riepilogo completo&lt;/a&gt; e &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;create il vostro primo agente&lt;/a&gt; per iniziare.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.116 — L'App Agents Ottiene Navigazione da Tastiera e Completamenti per il Contesto dei File</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/vscode-1-116-agents-app-updates/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/vscode-1-116-agents-app-updates/</guid><description>VS Code 1.116 si concentra sulla rifinitura dell'app Agents — scorciatoie da tastiera dedicate, miglioramenti dell'accessibilità, completamenti per il contesto dei file e risoluzione dei link CSS @import.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Questo post è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/it/news/emiliano-montesdeoca/vscode-1-116-agents-app-updates/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VS Code 1.116 è il rilascio di aprile 2026, e sebbene sia più leggero di alcuni aggiornamenti recenti, i cambiamenti sono mirati e significativi — specialmente se usate l&amp;rsquo;app Agents quotidianamente.&lt;/p&gt;
&lt;p&gt;Ecco cosa è arrivato, in base alle &lt;a href="https://code.visualstudio.com/updates/v1_116"&gt;note di rilascio ufficiali&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="miglioramenti-dellapp-agents"&gt;Miglioramenti dell&amp;rsquo;app Agents&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;app Agents continua a maturare con un polishing dell&amp;rsquo;usabilità che fa una vera differenza nei flussi di lavoro quotidiani:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scorciatoie da tastiera dedicate&lt;/strong&gt; — ora potete mettere a fuoco la vista Changes, l&amp;rsquo;albero dei file all&amp;rsquo;interno di Changes e la vista delle Personalizzazioni della Chat con comandi e scorciatoie da tastiera dedicati. Se cliccavate ovunque nell&amp;rsquo;app Agents per navigare, questo porta flussi di lavoro completamente controllabili da tastiera.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dialogo di aiuto per l&amp;rsquo;accessibilità&lt;/strong&gt; — premere &lt;code&gt;Alt+F1&lt;/code&gt; nella casella di input della chat ora apre un dialogo di aiuto per l&amp;rsquo;accessibilità che mostra i comandi e le scorciatoie disponibili. Gli utenti di screen reader possono anche controllare la verbosità degli annunci. Una buona accessibilità beneficia tutti.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Completamenti per il contesto dei file&lt;/strong&gt; — digitate &lt;code&gt;#&lt;/code&gt; nella chat dell&amp;rsquo;app Agents per attivare i completamenti per il contesto dei file limitati al vostro workspace corrente. Questa è una di quelle piccole migliorie della qualità della vita che velocizzano ogni interazione — niente più percorsi completi dei file quando si referenzia il codice.&lt;/p&gt;
&lt;h2 id="risoluzione-dei-link-css-import"&gt;Risoluzione dei link CSS &lt;code&gt;@import&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Ottimo per gli sviluppatori frontend: VS Code ora risolve i riferimenti CSS &lt;code&gt;@import&lt;/code&gt; che usano percorsi di node_modules. Potete fare &lt;code&gt;Ctrl+clic&lt;/code&gt; attraverso import come &lt;code&gt;@import &amp;quot;some-module/style.css&amp;quot;&lt;/code&gt; quando usate bundler. Piccolo ma elimina un punto di attrito nei workflow CSS.&lt;/p&gt;
&lt;h2 id="conclusione"&gt;Conclusione&lt;/h2&gt;
&lt;p&gt;VS Code 1.116 riguarda il raffinamento — rendere l&amp;rsquo;app Agents più navigabile, più accessibile e più amichevole con la tastiera. Se passate molto tempo nell&amp;rsquo;app Agents (e sospetto che molti di noi lo facciano), questi cambiamenti si sommano.&lt;/p&gt;
&lt;p&gt;Consultate le &lt;a href="https://code.visualstudio.com/updates/v1_116"&gt;note di rilascio complete&lt;/a&gt; per l&amp;rsquo;elenco completo.&lt;/p&gt;</content:encoded></item><item><title>azd ora permette di eseguire e debuggare agenti IA localmente — Ecco cosa è cambiato a marzo 2026</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>L'Azure Developer CLI ha rilasciato sette versioni a marzo 2026. I punti salienti: un loop locale di esecuzione e debug per agenti IA, integrazione con GitHub Copilot nella configurazione dei progetti, e supporto per Container App Jobs.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Questo post è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/it/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sette rilasci in un mese. È quello che il team dell&amp;rsquo;Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) ha pubblicato a marzo 2026, e la funzionalità principale è quella che stavo aspettando: &lt;strong&gt;un loop locale di esecuzione e debug per agenti 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;ha pubblicato il riepilogo completo&lt;/a&gt;, e anche se c&amp;rsquo;è molto contenuto, lasciatemi filtrare ciò che conta davvero per gli sviluppatori .NET che costruiscono app con IA.&lt;/p&gt;
&lt;h2 id="eseguire-e-debuggare-agenti-ia-senza-deploy"&gt;Eseguire e debuggare agenti IA senza deploy&lt;/h2&gt;
&lt;p&gt;Questa è la novità principale. La nuova estensione &lt;code&gt;azure.ai.agents&lt;/code&gt; aggiunge comandi che danno un&amp;rsquo;esperienza di inner-loop adeguata per gli agenti IA:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt; — avvia il tuo agente localmente&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt; — gli invia messaggi (locale o in produzione)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt; — mostra lo stato del container e la sua salute&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt; — trasmette i log del container in tempo reale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Prima, testare un agente IA significava fare deploy su Microsoft Foundry ogni volta che facevi un cambiamento. Ora puoi iterare localmente, testare il comportamento del tuo agente, e fare deploy solo quando sei pronto.&lt;/p&gt;
&lt;h2 id="github-copilot-configura-il-tuo-progetto-azd"&gt;GitHub Copilot configura il tuo progetto azd&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt; ora offre un&amp;rsquo;opzione &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Invece di rispondere manualmente ai prompt, un agente Copilot genera la configurazione per te. Quando un comando fallisce, &lt;code&gt;azd&lt;/code&gt; offre troubleshooting assistito dall&amp;rsquo;IA — tutto senza lasciare il terminale.&lt;/p&gt;
&lt;h2 id="container-app-jobs-e-miglioramenti-del-deployment"&gt;Container App Jobs e miglioramenti del deployment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container App Jobs&lt;/strong&gt;: &lt;code&gt;azd&lt;/code&gt; ora fa deploy di &lt;code&gt;Microsoft.App/jobs&lt;/code&gt; tramite la config esistente &lt;code&gt;host: containerapp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timeout configurabili&lt;/strong&gt;: Nuovo flag &lt;code&gt;--timeout&lt;/code&gt; su &lt;code&gt;azd deploy&lt;/code&gt; e campo &lt;code&gt;deployTimeout&lt;/code&gt; in &lt;code&gt;azure.yaml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fallback di build remoto&lt;/strong&gt;: Quando il build ACR fallisce, &lt;code&gt;azd&lt;/code&gt; passa automaticamente a Docker/Podman locale.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validazione preflight locale&lt;/strong&gt;: I parametri Bicep vengono validati localmente prima del deploy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="miglioramenti-dx"&gt;Miglioramenti DX&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rilevamento automatico pnpm/yarn&lt;/strong&gt; per progetti JS/TS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Supporto pyproject.toml&lt;/strong&gt; per Python&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Directory template locali&lt;/strong&gt; — &lt;code&gt;azd init --template&lt;/code&gt; accetta percorsi del filesystem&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Messaggi di errore migliori&lt;/strong&gt; in modalità &lt;code&gt;--no-prompt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Variabili d&amp;rsquo;ambiente di build&lt;/strong&gt; iniettate in tutti i sottoprocessi di build (.NET, Node.js, Java, Python)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="per-concludere"&gt;Per concludere&lt;/h2&gt;
&lt;p&gt;Il loop locale di debug per agenti IA è la star di questa release, ma l&amp;rsquo;accumulo di miglioramenti al deployment e alla DX rende &lt;code&gt;azd&lt;/code&gt; più maturo che mai. Se fai deploy di app .NET su Azure — specialmente agenti IA — questo aggiornamento vale la pena.&lt;/p&gt;
&lt;p&gt;Consulta le &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;note di rilascio complete&lt;/a&gt; per tutti i dettagli.&lt;/p&gt;</content:encoded></item><item><title>Foundry Agent Service è GA: Cosa conta davvero per chi costruisce agenti .NET</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</guid><description>Il Foundry Agent Service di Microsoft è appena andato in GA con networking privato, Voice Live, valutazioni di produzione e un runtime multi-modello aperto. Ecco cosa devi sapere.</description><content:encoded>&lt;p&gt;Siamo onesti — costruire un prototipo di agente IA è la parte facile. La parte difficile è tutto quello che viene dopo: metterlo in produzione con un adeguato isolamento di rete, eseguire valutazioni che significhino davvero qualcosa, gestire i requisiti di conformità e non rompere nulla alle 2 di notte.&lt;/p&gt;
&lt;p&gt;Il &lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;Foundry Agent Service è appena andato in GA&lt;/a&gt;, e questo rilascio è focalizzato come un laser su quel gap del &amp;ldquo;tutto quello che viene dopo&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="costruito-sulla-responses-api"&gt;Costruito sulla Responses API&lt;/h2&gt;
&lt;p&gt;Il titolo: il Foundry Agent Service di nuova generazione è costruito sulla OpenAI Responses API. Se stai già costruendo con quel wire protocol, migrare a Foundry richiede modifiche minime al codice. Cosa guadagni: sicurezza enterprise, networking privato, RBAC Entra, tracing completo e valutazione — sopra la tua logica di agente esistente.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;architettura è intenzionalmente aperta. Non sei vincolato a un provider di modelli o a un framework di orchestrazione. Usa DeepSeek per la pianificazione, OpenAI per la generazione, LangGraph per l&amp;rsquo;orchestrazione — il runtime gestisce il livello di consistenza.&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;Se vieni dal pacchetto &lt;code&gt;azure-ai-agents&lt;/code&gt;, gli agenti sono ora operazioni di prima classe su &lt;code&gt;AIProjectClient&lt;/code&gt; in &lt;code&gt;azure-ai-projects&lt;/code&gt;. Rimuovi la dipendenza standalone e usa &lt;code&gt;get_openai_client()&lt;/code&gt; per gestire le risposte.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="networking-privato-il-bloccante-enterprise-rimosso"&gt;Networking privato: il bloccante enterprise rimosso&lt;/h2&gt;
&lt;p&gt;Questa è la funzionalità che sblocca l&amp;rsquo;adozione enterprise. Foundry ora supporta networking privato completo end-to-end con BYO VNet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nessun egress pubblico&lt;/strong&gt; — il traffico dell&amp;rsquo;agente non tocca mai internet pubblico&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iniezione di container/subnet&lt;/strong&gt; nella tua rete per comunicazione locale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connettività degli strumenti inclusa&lt;/strong&gt; — server MCP, Azure AI Search, agenti dati Fabric operano tutti su percorsi privati&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&amp;rsquo;ultimo punto è critico. Non sono solo le chiamate di inferenza a restare private — ogni invocazione di strumento e chiamata di retrieval resta anch&amp;rsquo;essa all&amp;rsquo;interno del perimetro della tua rete. Per i team che operano sotto policy di classificazione dei dati che vietano il routing esterno, questo era ciò che mancava.&lt;/p&gt;
&lt;h2 id="autenticazione-mcp-fatta-bene"&gt;Autenticazione MCP fatta bene&lt;/h2&gt;
&lt;p&gt;Le connessioni ai server MCP ora supportano l&amp;rsquo;intero spettro di pattern di autenticazione:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metodo di auth&lt;/th&gt;
&lt;th&gt;Quando usarlo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Basato su chiave&lt;/td&gt;
&lt;td&gt;Accesso condiviso semplice per strumenti interni all&amp;rsquo;organizzazione&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Agent Identity&lt;/td&gt;
&lt;td&gt;Servizio a servizio; l&amp;rsquo;agente si autentica come se stesso&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Managed Identity&lt;/td&gt;
&lt;td&gt;Isolamento per progetto; nessuna gestione delle credenziali&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAuth Identity Passthrough&lt;/td&gt;
&lt;td&gt;Accesso delegato dall&amp;rsquo;utente; l&amp;rsquo;agente agisce per conto degli utenti&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;OAuth Identity Passthrough è quello interessante. Quando gli utenti devono concedere a un agente l&amp;rsquo;accesso ai propri dati personali — il loro OneDrive, la loro organizzazione Salesforce, un&amp;rsquo;API SaaS con scope per utente — l&amp;rsquo;agente agisce per loro conto con flussi OAuth standard. Nessuna identità di sistema condivisa che finge di essere tutti.&lt;/p&gt;
&lt;h2 id="voice-live-voce-a-voce-senza-lidraulica"&gt;Voice Live: voce a voce senza l&amp;rsquo;idraulica&lt;/h2&gt;
&lt;p&gt;Aggiungere la voce a un agente significava unire STT, LLM e TTS — tre servizi, tre hop di latenza, tre superfici di fatturazione, tutto sincronizzato a mano. &lt;strong&gt;Voice Live&lt;/strong&gt; collassa tutto in una singola API gestita con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rilevamento semantico dell&amp;rsquo;attività vocale e del fine turno (capisce il significato, non solo il silenzio)&lt;/li&gt;
&lt;li&gt;Soppressione del rumore e cancellazione dell&amp;rsquo;eco lato server&lt;/li&gt;
&lt;li&gt;Supporto barge-in (gli utenti possono interrompere a metà risposta)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le interazioni vocali passano attraverso lo stesso runtime dell&amp;rsquo;agente del testo. Stessi valutatori, stesse tracce, stessa visibilità dei costi. Per supporto clienti, servizio sul campo o scenari di accessibilità, questo sostituisce ciò che prima richiedeva una pipeline audio personalizzata.&lt;/p&gt;
&lt;h2 id="valutazioni-da-checkbox-a-monitoraggio-continuo"&gt;Valutazioni: da checkbox a monitoraggio continuo&lt;/h2&gt;
&lt;p&gt;Qui è dove Foundry diventa serio sulla qualità in produzione. Il sistema di valutazione ora ha tre livelli:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Valutatori pronti all&amp;rsquo;uso&lt;/strong&gt; — coerenza, rilevanza, fondatezza, qualità del retrieval, sicurezza. Connetti a un dataset o al traffico live e ottieni punteggi.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Valutatori personalizzati&lt;/strong&gt; — codifica la tua logica di business, standard di tono e regole di conformità specifiche del dominio.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Valutazione continua&lt;/strong&gt; — Foundry campiona il traffico di produzione live, esegue la tua suite di valutatori e mostra i risultati nei dashboard. Imposta alert di Azure Monitor per quando la fondatezza cala o le soglie di sicurezza vengono superate.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tutto viene pubblicato in Azure Monitor Application Insights. Qualità dell&amp;rsquo;agente, salute dell&amp;rsquo;infrastruttura, costi e telemetria dell&amp;rsquo;applicazione — tutto in un unico posto.&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="sei-nuove-regioni-per-agenti-ospitati"&gt;Sei nuove regioni per agenti ospitati&lt;/h2&gt;
&lt;p&gt;Gli agenti ospitati sono ora disponibili in East US, North Central US, Sweden Central, Southeast Asia, Japan East e altre. Questo conta per i requisiti di residenza dei dati e per comprimere la latenza quando il tuo agente gira vicino alle sue fonti dati.&lt;/p&gt;
&lt;h2 id="perché-è-importante-per-gli-sviluppatori-net"&gt;Perché è importante per gli sviluppatori .NET&lt;/h2&gt;
&lt;p&gt;Anche se gli esempi di codice nell&amp;rsquo;annuncio GA sono Python-first, l&amp;rsquo;infrastruttura sottostante è language-agnostic — e l&amp;rsquo;SDK .NET per &lt;code&gt;azure-ai-projects&lt;/code&gt; segue gli stessi pattern. La Responses API, il framework di valutazione, il networking privato, l&amp;rsquo;auth MCP — tutto questo è disponibile da .NET.&lt;/p&gt;
&lt;p&gt;Se stavi aspettando che gli agenti IA passassero da &amp;ldquo;demo cool&amp;rdquo; a &amp;ldquo;posso davvero consegnare questo al lavoro&amp;rdquo;, questo rilascio GA è il segnale. Networking privato, autenticazione adeguata, valutazione continua e monitoraggio di produzione sono i pezzi che mancavano.&lt;/p&gt;
&lt;h2 id="per-concludere"&gt;Per concludere&lt;/h2&gt;
&lt;p&gt;Foundry Agent Service è disponibile ora. Installa l&amp;rsquo;SDK, apri &lt;a href="https://ai.azure.com"&gt;il portale&lt;/a&gt; e inizia a costruire. La &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;guida quickstart&lt;/a&gt; ti porta da zero a un agente funzionante in pochi minuti.&lt;/p&gt;
&lt;p&gt;Per il deep-dive tecnico completo con tutti gli esempi di codice, consulta l&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;annuncio GA&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>