<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Azure | The .NET Blog</title><link>https://thedotnetblog.com/pt/tags/azure/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>pt</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Tue, 02 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/pt/tags/azure/index.xml" rel="self" type="application/rss+xml"/><item><title>Microsoft Foundry Abril 2026: Foundry Local GA, GPT-5.5, CodeAct com Hyperlight</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/microsoft-foundry-april-2026-whats-new/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/microsoft-foundry-april-2026-whats-new/</guid><description>O resumo de abril do Foundry é denso: Foundry Local atinge GA, GPT-5.5 chega, Agent Framework recebe rastreamento OpenTelemetry, CodeAct executa Python em micro-VMs Hyperlight, e o Painel de Monitoramento de Agentes está disponível.</description><content:encoded>&lt;p&gt;Um mês movimentado para o Microsoft Foundry. Estes são os anúncios mais importantes.&lt;/p&gt;
&lt;h2 id="foundry-local-está-geralmente-disponível"&gt;Foundry Local está Geralmente Disponível&lt;/h2&gt;
&lt;p&gt;Foundry Local — o runtime de IA local multiplataforma da Microsoft — passa de preview para GA no Windows, macOS (Apple Silicon) e Linux x64. Inferência de modelos locais pronta para produção com um SDK amigável para desenvolvedores. A versão 1.1 adiciona suporte a transcrição, embeddings e API Responses.&lt;/p&gt;
&lt;h2 id="gpt-55"&gt;GPT-5.5&lt;/h2&gt;
&lt;p&gt;O mais recente modelo da família GPT-5 está agora disponível no Foundry. Cota padrão para assinaturas Tier 5 e Tier 6. Se você trabalhou com variantes anteriores do GPT-5, vale a pena avaliar para seus casos de uso.&lt;/p&gt;
&lt;h2 id="rastreamento-do-agent-framework-no-foundry"&gt;Rastreamento do Agent Framework no Foundry&lt;/h2&gt;
&lt;p&gt;Dois recursos de rastreamento são lançados em preview este mês:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rastreamento do Microsoft Agent Framework&lt;/strong&gt; — Os agentes MAF agora podem emitir rastreamentos OpenTelemetry no Foundry. Depure o comportamento dos agentes, rastreie a execução em múltiplas etapas, exponha latência e erros nas chamadas de ferramentas. Isso preenche uma lacuna real: saber &lt;em&gt;o que seu agente realmente fez&lt;/em&gt; na produção, não apenas o que retornou.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rastreamento de agentes hospedados&lt;/strong&gt; — Sessões, chamadas de ferramentas e etapas de execução de agentes hospedados também aparecem nos rastreamentos do Foundry. A mesma história de observabilidade estendida ao nível hospedado.&lt;/p&gt;
&lt;h2 id="codeact-com-hyperlight-alpha"&gt;CodeAct com Hyperlight (Alpha)&lt;/h2&gt;
&lt;p&gt;Esta é a adição tecnicamente mais interessante: Agent Framework agora pode executar código Python dentro de micro-máquinas virtuais &lt;a href="https://github.com/hyperlight-dev/hyperlight"&gt;Hyperlight&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;CodeAct é o padrão onde um agente gera e executa código Python como ferramenta. A preocupação óbvia é a segurança — você está executando código gerado pelo modelo. As micro-VMs do Hyperlight fornecem isolamento em nível de processo com tempo de inicialização próximo ao nativo, tornando a execução de código em sandbox prática sem a sobrecarga de contêineres ou VMs completos.&lt;/p&gt;
&lt;p&gt;Para fluxos de trabalho agênticos onde a execução de código é necessária, isso é uma melhoria significativa de segurança em relação à execução de código no processo host.&lt;/p&gt;
&lt;h2 id="painel-de-monitoramento-de-agentes-preview"&gt;Painel de Monitoramento de Agentes (Preview)&lt;/h2&gt;
&lt;p&gt;Um painel de operações unificado combinando uso de tokens, latência, taxa de sucesso de execução e pontuações de avaliadores em uma única visualização. A distinção dos painéis de observabilidade regulares: inclui resultados de avaliação junto com métricas operacionais, para que você possa correlacionar &amp;ldquo;o agente está mais lento&amp;rdquo; com &amp;ldquo;as pontuações do avaliador caíram&amp;rdquo; — ou confirmar que não estão relacionados.&lt;/p&gt;
&lt;h2 id="avaliadores-personalizados-de-avaliação-contínua-preview"&gt;Avaliadores Personalizados de Avaliação Contínua (Preview)&lt;/h2&gt;
&lt;p&gt;Agora você pode trazer seus próprios avaliadores baseados em código ou prompt para pipelines de avaliação contínua. Anteriormente, a avaliação contínua estava limitada a avaliadores integrados. Os avaliadores personalizados permitem que você aplique critérios de qualidade específicos da equipe em seu loop de monitoramento de produção.&lt;/p&gt;
&lt;h2 id="inventário-de-agentes-no-plano-de-controle"&gt;Inventário de Agentes no Plano de Controle&lt;/h2&gt;
&lt;p&gt;A visualização Operate do Plano de Controle do Foundry agora mostra todos os agentes suportados em uma assinatura: agentes Foundry, Azure SRE Agent, loops de agentes do Logic Apps e agentes personalizados registrados. Uma visualização para entender o que está implantado e onde.&lt;/p&gt;
&lt;p&gt;Postagem original: &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-apr-2026/"&gt;What&amp;rsquo;s new in Microsoft Foundry | April 2026&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Seu Agente MAF Local Acabou de Ganhar um Lar em Produção</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/maf-agent-local-to-production-foundry-hosted-agents/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/maf-agent-local-to-production-foundry-hosted-agents/</guid><description>Foundry Hosted Agents dá ao seu agente Microsoft Agent Framework identidade, escalamento, persistência de sessão e observabilidade sem configuração adicional. Veja como isso parece na prática.</description><content:encoded>&lt;p&gt;Fazer um agente funcionar localmente é a parte divertida. A parte complicada é tudo que vem depois: implantá-lo sem enlouquecer, gerenciar sessões, configurar identidade, conectar observabilidade. Normalmente isso significa muita infraestrutura personalizada.&lt;/p&gt;
&lt;p&gt;O Foundry Hosted Agents acabou de remover a maior parte dessa infraestrutura para usuários do Microsoft Agent Framework (MAF).&lt;/p&gt;
&lt;h2 id="o-que-o-foundry-hosted-agents-realmente-faz"&gt;O Que o Foundry Hosted Agents Realmente Faz&lt;/h2&gt;
&lt;p&gt;Quando você implanta um agente MAF no Foundry Hosted Agents, a plataforma lida com uma lista surpreendentemente longa de coisas que você teria que construir por conta própria:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Escalar para zero&lt;/strong&gt; — seu agente não custa nada quando ocioso e volta automaticamente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sandboxes isolados por VM por sessão&lt;/strong&gt; — cada sessão de usuário tem seu próprio sandbox com persistência do sistema de arquivos que sobrevive a eventos de redução de escala&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entra ID integrado&lt;/strong&gt; — cada agente tem sua própria identidade para chamar modelos Foundry, Toolbox e serviços Azure sem segredos na imagem&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implantações versionadas&lt;/strong&gt; — cada implantação é um snapshot imutável, com suporte a blue/green e canary rollout&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observabilidade sem configuração&lt;/strong&gt; — &lt;code&gt;APPLICATIONINSIGHTS_CONNECTION_STRING&lt;/code&gt; é injetado em tempo de execução para que os traces OpenTelemetry do MAF fluam automaticamente para o App Insights&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esse último é genuinamente agradável. Sem fiação extra, sem configuração adicional. Os traces simplesmente aparecem.&lt;/p&gt;
&lt;h2 id="a-diferença-no-código-é-mínima"&gt;A Diferença no Código É Mínima&lt;/h2&gt;
&lt;p&gt;Isso é o que mais aprecio nessa integração. Você não reescreve seu agente. Você simplesmente o envolve:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Em .NET:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI.Foundry.Hosting&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WebApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddFoundryResponses&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MapFoundryResponses&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Em Python:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ResponsesHostServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;É isso. A mesma lógica que você testou localmente é o que roda em produção. A plataforma a envolve na infraestrutura de gerenciamento de sessões, identidade e escalamento.&lt;/p&gt;
&lt;h2 id="dois-protocolos-um-agente"&gt;Dois Protocolos, Um Agente&lt;/h2&gt;
&lt;p&gt;Os Hosted Agents suportam dois estilos de endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Responses&lt;/strong&gt; (&lt;code&gt;/responses&lt;/code&gt;) — compatível com OpenAI, gerencia histórico de conversas e streaming. Bom padrão para agentes em forma de chat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invocations&lt;/strong&gt; (&lt;code&gt;/invocations&lt;/code&gt;) — você define o esquema de requisição/resposta. Bom para workflows não conversacionais.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se você está construindo algo que parece uma conversa, comece com Responses. Se está construindo um agente em forma de API que recebe entrada estruturada e retorna saída estruturada, Invocations te dá a flexibilidade.&lt;/p&gt;
&lt;h2 id="o-fluxo-de-implantação-com-azd"&gt;O Fluxo de Implantação com &lt;code&gt;azd&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Quando você executa &lt;code&gt;azd up&lt;/code&gt; com um agente MAF:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Opcionalmente cria um projeto Foundry e implanta um modelo&lt;/li&gt;
&lt;li&gt;Empacota seu código e envia uma imagem para o Azure Container Registry&lt;/li&gt;
&lt;li&gt;Provisiona compute a partir da imagem ACR&lt;/li&gt;
&lt;li&gt;Atribui um Entra ID dedicado ao agente&lt;/li&gt;
&lt;li&gt;Expõe um endpoint estável (&lt;code&gt;https://{project_endpoint}/agents/{agent_name}&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Lida com tudo mais a partir desse ponto&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As sessões persistem por até 30 dias. O compute ocioso é desprovisionado após 15 minutos e restaurado transparentemente na próxima requisição. Da perspectiva do agente, nada mudou.&lt;/p&gt;
&lt;h2 id="conclusão"&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;A distância entre &amp;ldquo;funcionando localmente&amp;rdquo; e &amp;ldquo;rodando em produção&amp;rdquo; tem sido historicamente longa e dolorosa para agentes de IA. Foundry Hosted Agents + MAF fecha essa lacuna significativamente. Se você já tem um agente local construído com Agent Framework, vale a pena tentar hoje.&lt;/p&gt;
&lt;p&gt;A equipe diz que o GA está chegando em breve — atualmente está em preview. Confira os &lt;a href="https://learn.microsoft.com/en-us/agent-framework/hosting/foundry-hosted-agent"&gt;docs de integração MAF Hosted Agent&lt;/a&gt; e os &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/04-hosting/FoundryHostedAgents"&gt;exemplos .NET&lt;/a&gt; para começar.&lt;/p&gt;
&lt;p&gt;Artigo original: &lt;a href="https://devblogs.microsoft.com/agent-framework/from-local-to-production-deploy-your-microsoft-agent-framework-agent-with-foundry-hosted-agents/"&gt;From Local to Production: Deploy Your Microsoft Agent Framework Agent with Foundry Hosted Agents&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Foundry Local 1.1: Transcrição em Tempo Real, Embeddings e a API de Respostas</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/foundry-local-11-transcription-embeddings-responses-api/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/foundry-local-11-transcription-embeddings-responses-api/</guid><description>Foundry Local 1.1 adiciona transcrição ao vivo do microfone, embeddings de texto e suporte à API de Respostas — tudo a correr localmente sem dependência da cloud, sem latência de rede, sem custo por token.</description><content:encoded>&lt;p&gt;Foundry Local 1.0 provou o conceito: executar modelos de IA localmente no Windows, macOS (Apple Silicon) e Linux x64 com um SDK amigável para desenvolvedores. A versão 1.1 adiciona três capacidades que cobrem muitos casos de uso reais em produção.&lt;/p&gt;
&lt;h2 id="transcrição-de-áudio-em-directo"&gt;Transcrição de Áudio em Directo&lt;/h2&gt;
&lt;p&gt;A nova funcionalidade mais significativa: streaming de voz para texto em tempo real diretamente do microfone. Legendas, interfaces de voz, transcrição de reuniões, ferramentas de acessibilidade — tudo a correr localmente sem qualquer dependência da cloud.&lt;/p&gt;
&lt;p&gt;A API é baseada em sessões e transmite resultados à medida que chegam, com marcadores &lt;code&gt;is_final&lt;/code&gt; para distinguir texto intermédio do finalizado. Disponível para todos os bindings de linguagem: JavaScript, C#, Python e Rust.&lt;/p&gt;
&lt;p&gt;Carrega um modelo de voz em streaming do catálogo, cria uma sessão com definições de áudio (frequência de amostragem, canais, idioma), inicia-a, envia blocos de áudio PCM em bruto e consome o stream assíncrono de resultados. O post tem exemplos completos em Python e C#.&lt;/p&gt;
&lt;h2 id="embeddings-de-texto"&gt;Embeddings de Texto&lt;/h2&gt;
&lt;p&gt;Pesquisa semântica, pipelines RAG, clustering, correspondência de similaridade — tudo isto requer embeddings. Foundry Local 1.1 adiciona suporte para modelos de embedding para que possas gerar vetores localmente a partir do mesmo SDK, sem enviar dados para um endpoint na cloud.&lt;/p&gt;
&lt;p&gt;Para aplicações onde a residência de dados é importante ou onde processas conteúdo sensível, a geração local de embeddings é uma capacidade significativa.&lt;/p&gt;
&lt;h2 id="api-de-respostas"&gt;API de Respostas&lt;/h2&gt;
&lt;p&gt;O Foundry Local suporta agora a &lt;a href="https://platform.openai.com/docs/api-reference/responses"&gt;API de Respostas&lt;/a&gt; — a interface estruturada concebida para interações agênticas. Isto adiciona:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chamada de ferramentas&lt;/strong&gt; — permite que modelos a correr localmente invoquem ferramentas que defines&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entrada multimodal visão-linguagem&lt;/strong&gt; — passa imagem + texto a modelos com capacidade de visão&lt;/li&gt;
&lt;li&gt;Compatível com a forma padrão de API, pelo que agentes existentes que apontam para a API de Respostas da OpenAI funcionam contra modelos locais&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="melhorias-no-tamanho-do-pacote"&gt;Melhorias no Tamanho do Pacote&lt;/h2&gt;
&lt;p&gt;Duas alterações reduzem o tamanho do pacote JavaScript:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A camada FFI &lt;code&gt;koffi&lt;/code&gt; foi substituída por um addon C Node-API personalizado&lt;/li&gt;
&lt;li&gt;O fornecedor de execução WebGPU é distribuído como plugin separado, pelo que as aplicações que não precisam de aceleração GPU não pagam o custo de tamanho&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O SDK C# agora aponta para versões de framework inferiores para compatibilidade .NET mais ampla.&lt;/p&gt;
&lt;h2 id="por-que-importa"&gt;Por Que Importa&lt;/h2&gt;
&lt;p&gt;As três capacidades juntas — transcrição, embeddings, chamada de ferramentas — cobrem os blocos de construção fundamentais de muitas aplicações de IA. Executá-los localmente significa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sem internet necessária&lt;/li&gt;
&lt;li&gt;Sem custos por token&lt;/li&gt;
&lt;li&gt;Sem dados a sair da máquina&lt;/li&gt;
&lt;li&gt;Latência consistente independentemente das condições de rede&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Foundry Local é a escolha certa para cenários de edge, cargas de trabalho sensíveis à privacidade, aplicações offline, ou qualquer coisa onde se queira evitar a dependência da cloud durante o desenvolvimento.&lt;/p&gt;
&lt;p&gt;Post original: &lt;a href="https://devblogs.microsoft.com/foundry/foundry-local-v1-1/"&gt;Foundry Local 1.1: Live Transcription, Embeddings, and Responses API&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Cosmos DB Shell Está em Pré-visualização Pública — E Tem um Servidor MCP Integrado</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/cosmosdb-shell-public-preview-mcp-server-cli/</link><pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/cosmosdb-shell-public-preview-mcp-server-cli/</guid><description>Azure Cosmos DB Shell é uma nova CLI de código aberto que expõe comandos do banco de dados como ferramentas MCP. Seus agentes de IA podem navegar por containers, executar consultas e gerenciar dados usando a mesma interface que você usa.</description><content:encoded>&lt;p&gt;Se você já teve que alternar entre uma guia do portal, um exemplo de SDK e um script pela metade apenas para responder uma pergunta sobre Cosmos DB, já conhece a fricção que este projeto foi projetado para eliminar.&lt;/p&gt;
&lt;p&gt;Azure Cosmos DB Shell acabou de entrar em pré-visualização pública. É uma CLI de código aberto com sintaxe semelhante ao bash e — a parte que o torna interessante — um servidor MCP integrado.&lt;/p&gt;
&lt;h2 id="o-que-o-torna-diferente-de-outras-clis-de-banco-de-dados"&gt;O Que o Torna Diferente de Outras CLIs de Banco de Dados&lt;/h2&gt;
&lt;p&gt;A CLI em si é útil: comandos familiares, suporte a scripts, integração CI/CD. Essa parte é o mínimo esperado para uma ferramenta de banco de dados voltada para desenvolvedores.&lt;/p&gt;
&lt;p&gt;A parte interessante é a integração do servidor MCP. Cada comando que a CLI expõe fica disponível como uma ferramenta MCP que seus agentes de IA podem chamar. Não há camada de API personalizada, nenhum código de integração para escrever. Seu agente pode:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Navegar por hierarquias de banco de dados com &lt;code&gt;cd&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Executar consultas SQL com &lt;code&gt;query&lt;/code&gt; e obter resultados estruturados&lt;/li&gt;
&lt;li&gt;Criar e modificar itens com &lt;code&gt;create item&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;rm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Gerenciar bancos de dados e containers com &lt;code&gt;mkdb&lt;/code&gt;, &lt;code&gt;mkcon&lt;/code&gt;, &lt;code&gt;rmdb&lt;/code&gt;, &lt;code&gt;rmcon&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Inspecionar o contexto atual com &lt;code&gt;endpoint&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A mudança chave: seu agente não está falando com uma API do Cosmos DB — está falando com a mesma interface de shell que você usa. Os comandos são determinísticos, auditáveis e de código aberto para que você possa inspecionar exatamente o que está acontecendo.&lt;/p&gt;
&lt;h2 id="a-base-de-código-aberto-importa"&gt;A Base de Código Aberto Importa&lt;/h2&gt;
&lt;p&gt;Isso não é um serviço gerenciado de caixa preta. O shell é de código aberto, o que significa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Equipes de segurança podem auditar a implementação&lt;/li&gt;
&lt;li&gt;Equipes de plataforma podem fazer fork e estendê-lo para seus padrões específicos&lt;/li&gt;
&lt;li&gt;Desenvolvedores podem contribuir com melhorias que beneficiam todos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para equipes empresariais adotando ferramentas de IA, &amp;ldquo;podemos ver exatamente como funciona&amp;rdquo; é cada vez menos um requisito opcional. O código aberto aqui é um diferencial significativo.&lt;/p&gt;
&lt;h2 id="três-cenários-que-se-tornam-mais-fáceis"&gt;Três Cenários Que se Tornam Mais Fáceis&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Análise inteligente de dados&lt;/strong&gt; — conecte um agente ao shell, faça perguntas em linguagem natural, obtenha resultados de consultas estruturados. O agente cuida da construção da consulta; o shell cuida da execução.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gerenciamento autônomo de dados&lt;/strong&gt; — fluxos de trabalho que precisam criar, atualizar ou remover dados no Cosmos DB podem fazer isso através das ferramentas MCP sem precisar de uma integração personalizada.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Monitoramento e alertas em tempo real&lt;/strong&gt; — um agente pode consultar containers periodicamente, comparar resultados e apresentar anomalias através do canal de notificação que fizer sentido.&lt;/p&gt;
&lt;p&gt;A interface MCP torna esses cenários combináveis com qualquer plataforma de IA que fale MCP — não apenas as ferramentas da Microsoft.&lt;/p&gt;
&lt;h2 id="para-começar"&gt;Para Começar&lt;/h2&gt;
&lt;p&gt;O shell está em pré-visualização pública. Instale-o, configure sua conexão com o Cosmos DB e habilite o servidor MCP. A partir daí, qualquer host de agente compatível com MCP pode descobrir e usar as ferramentas.&lt;/p&gt;
&lt;p&gt;Post original: &lt;a href="https://devblogs.microsoft.com/cosmosdb/azure-cosmos-db-shell-public-preview-ai-mcp-cli/"&gt;Announcing the Public Preview of Azure Cosmos DB Shell: Open-Source Power Meets AI-Driven Database Automation&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>O Seu Agente de IA Tem um Problema de Identidade (E Aqui Está o Template que o Resolve)</title><link>https://thedotnetblog.com/pt/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/pt/news/emiliano-montesdeoca/azd-least-privilege-ai-agents-oauth-token-pattern/</guid><description>Um novo template azd da Curity e Microsoft mostra como construir agentes de IA que usam tokens OAuth de curta duração com escopos de granularidade fina — para que os agentes nunca possam ver dados que não deveriam ver.</description><content:encoded>&lt;p&gt;Há um momento em cada projeto de agente de IA que vai mais ou menos assim: a demo funciona perfeitamente, o agente interpreta a linguagem natural, chama as APIs certas, retorna os dados certos. Então você começa a pensar nos usuários reais.&lt;/p&gt;
&lt;p&gt;O que impede a sessão do agente de um usuário de ver os dados de outro usuário? E se o agente for enganado por injeção de prompt? E se ele chamar uma ferramenta de uma forma inesperada?&lt;/p&gt;
&lt;p&gt;Estes não são casos extremos. São decisões de design que você precisa tomar antes de lançar.&lt;/p&gt;
&lt;p&gt;Um novo template &lt;code&gt;azd&lt;/code&gt; da Curity e Microsoft fornece uma referência funcional para exatamente este problema.&lt;/p&gt;
&lt;h2 id="o-problema-central-autenticação--autorização"&gt;O Problema Central: Autenticação ≠ Autorização&lt;/h2&gt;
&lt;p&gt;A maioria dos exemplos de agentes trata bem a autenticação de usuários. Trata mal a autorização. Saber &lt;em&gt;quem&lt;/em&gt; é o usuário não te diz &lt;em&gt;quais dados&lt;/em&gt; ele deveria ver.&lt;/p&gt;
&lt;p&gt;Uma aplicação cliente tradicional faz chamadas de API previsíveis. Um agente de IA é não-determinístico — interpreta a linguagem natural e decide o que chamar. Pode ser criativo. Também pode estar errado. E se for manipulado por injeção de prompt, você precisa de regras que não dependam do bom comportamento da IA.&lt;/p&gt;
&lt;p&gt;A solução que este template demonstra: &lt;strong&gt;tokens de curta duração que carregam exatamente as informações certas para cada salto&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="como-funciona-a-cadeia-de-tokens"&gt;Como Funciona a Cadeia de Tokens&lt;/h2&gt;
&lt;p&gt;O template usa tokens de acesso OAuth 2.0 com troca de tokens para restringir permissões a cada passo. Um token de usuário é trocado duas vezes antes de chegar ao servidor MCP:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Primeira troca&lt;/strong&gt; — restringe o escopo e converte o token opaco em JWT&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Segunda troca&lt;/strong&gt; — adiciona a identidade do agente e um novo audience para o salto do servidor MCP&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Como é o token do servidor 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;O &lt;code&gt;customer_id&lt;/code&gt; está incorporado no token pelo servidor de autorização, não passado como um parâmetro que o agente controla. A API verifica o token, não as instruções do agente.&lt;/p&gt;
&lt;p&gt;Isso significa: mesmo que alguém engane o agente para tentar buscar os dados de outro cliente, o token não autorizará.&lt;/p&gt;
&lt;h2 id="o-que-o-template-implanta"&gt;O que o Template Implanta&lt;/h2&gt;
&lt;p&gt;Com alguns comandos &lt;code&gt;azd&lt;/code&gt; você obtém:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Um agente backend no Microsoft Foundry (C#, SDKs Microsoft A2A e MCP)&lt;/li&gt;
&lt;li&gt;Um servidor MCP que expõe uma API de portfólio de exemplo&lt;/li&gt;
&lt;li&gt;Curity Identity Server como servidor de autorização, junto com Entra ID para autenticação&lt;/li&gt;
&lt;li&gt;Gateways de API externos e internos que gerenciam a troca de tokens e o registro de auditoria&lt;/li&gt;
&lt;li&gt;Bicep para toda a infraestrutura Azure: Container Apps, VNet, ACR, Azure AI Foundry, Key Vault, Azure SQL Database, armazenamento&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Todo o padrão é inspecionável e personalizável.&lt;/p&gt;
&lt;h2 id="o-princípio-de-design-que-vale-a-pena-adotar"&gt;O Princípio de Design que Vale a Pena Adotar&lt;/h2&gt;
&lt;p&gt;Mesmo se você não usar Curity, o padrão é transferível: &lt;strong&gt;agentes nunca deveriam ter acesso permanente à API&lt;/strong&gt;. Cada ação deveria usar um token de curta duração com o escopo mínimo necessário para aquela chamada específica, emitido para a identidade específica do agente, carregando as claims de que a API precisa para tomar decisões de autorização.&lt;/p&gt;
&lt;p&gt;Isso resiste a agentes criativos, erros e injeção de prompt de maneiras que &amp;ldquo;apenas certifique-se de que o agente não faça coisas ruins&amp;rdquo; nunca resistirá.&lt;/p&gt;
&lt;h2 id="conclusão"&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Os padrões de segurança para agentes de IA ainda estão sendo desenvolvidos em toda a indústria. Este template é uma das implementações de referência mais completas que vi — cobre o fluxo de autorização real, não apenas a autenticação.&lt;/p&gt;
&lt;p&gt;Post original: &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-curity-least-privilege-ai-agents/"&gt;Least privilege AI agents: A new azd template from Curity and Microsoft&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Endpoints Privados, VNets, NSGs — Aspire Gerencia a Rede Agora</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/aspire-azure-enterprise-networking-private-endpoints/</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/aspire-azure-enterprise-networking-private-endpoints/</guid><description>O novo suporte de rede empresarial do Azure para Aspire permite modelar VNets, endpoints privados, gateways NAT, NSGs e perímetros de segurança de rede diretamente no seu AppHost, sem deriva de infraestrutura.</description><content:encoded>&lt;p&gt;Já vi esse cenário muitas vezes. A aplicação está pronta. A demonstração é ótima. Então aparece a lista de verificação de segurança: tire o armazenamento da internet pública, execute dentro de uma VNet, forneça IPs de saída para a lista de permissões do parceiro, prove que apenas as sub-redes corretas falam com os serviços corretos.&lt;/p&gt;
&lt;p&gt;Nesse ponto o modelo de aplicação e o modelo de infraestrutura começam a divergir de maneiras que são dolorosas de manter.&lt;/p&gt;
&lt;p&gt;O novo suporte de rede empresarial do Azure para Aspire aborda isso diretamente. Você descreve a forma da rede ao lado dos recursos que a usam, no seu AppHost.&lt;/p&gt;
&lt;h2 id="os-blocos-de-construção"&gt;Os Blocos de Construção&lt;/h2&gt;
&lt;p&gt;Aqui está para que serve cada conceito de rede do Azure, destilado:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Recurso&lt;/th&gt;
&lt;th&gt;Use quando&lt;/th&gt;
&lt;th&gt;Por que é importante&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rede virtual&lt;/td&gt;
&lt;td&gt;Você precisa de um espaço de endereçamento privado&lt;/td&gt;
&lt;td&gt;O limite de rede para sub-redes, endpoints privados e roteamento&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sub-rede&lt;/td&gt;
&lt;td&gt;Você precisa separar cargas de trabalho dentro da VNet&lt;/td&gt;
&lt;td&gt;Cada parte do sistema obtém seu próprio intervalo de endereços e superfície de política&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sub-rede delegada&lt;/td&gt;
&lt;td&gt;Um serviço de plataforma (como ACA) precisa gerenciar uma sub-rede&lt;/td&gt;
&lt;td&gt;Permite que o serviço coloque infraestrutura gerenciada em sua VNet com segurança&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gateway NAT&lt;/td&gt;
&lt;td&gt;Você precisa de IPs públicos de saída previsíveis&lt;/td&gt;
&lt;td&gt;Endereço estável para listas de permissões e auditoria&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Endpoint privado&lt;/td&gt;
&lt;td&gt;Você quer um recurso PaaS acessível privatamente&lt;/td&gt;
&lt;td&gt;Coloca um IP privado para esse serviço dentro da sua VNet, remove a exposição pública&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NSG&lt;/td&gt;
&lt;td&gt;Você precisa de regras de tráfego no nível da sub-rede&lt;/td&gt;
&lt;td&gt;Permitir/negar explícito para tráfego de entrada e saída por sub-rede&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="descrevendo-no-seu-apphost"&gt;Descrevendo no seu AppHost&lt;/h2&gt;
&lt;p&gt;A mudança chave aqui é que você está modelando a rede &lt;em&gt;junto&lt;/em&gt; com os recursos que a usam, não em um arquivo Bicep separado que se afasta do modelo de aplicação com o tempo.&lt;/p&gt;
&lt;p&gt;Do AppHost, você pode:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Criar VNets e sub-redes com &lt;code&gt;AddVirtualNetwork()&lt;/code&gt; e &lt;code&gt;AddSubnet()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Anexar um gateway NAT às sub-redes para IPs de saída estáveis&lt;/li&gt;
&lt;li&gt;Criar endpoints privados para armazenamento, Key Vault, SQL e outros serviços PaaS&lt;/li&gt;
&lt;li&gt;Definir NSGs com regras de segurança de entrada e saída&lt;/li&gt;
&lt;li&gt;Configurar Perímetros de Segurança de Rede para políticas entre recursos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O resultado é que quando você executa &lt;code&gt;azd up&lt;/code&gt;, a infraestrutura corresponde ao que o modelo de aplicação diz que precisa. Não o que diz um template mantido manualmente.&lt;/p&gt;
&lt;h2 id="por-que-isso-importa-para-aplicações-reais"&gt;Por Que Isso Importa para Aplicações Reais&lt;/h2&gt;
&lt;p&gt;Algumas coisas que se tornam significativamente mais fáceis quando a rede é modelada no Aspire:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Endpoints privados para Key Vault e armazenamento&lt;/strong&gt; — você descreve &lt;code&gt;WithPrivateEndpoint()&lt;/code&gt; nesses recursos, e o Aspire lida com a configuração da zona DNS e o anexo de endpoints. A aplicação nunca muda.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IPs de saída consistentes&lt;/strong&gt; — adicione um gateway NAT à sub-rede relevante e cada solicitação de saída da sua aplicação passa por um IP conhecido e estável. Os parceiros podem incluí-lo na lista de permissões. Os auditores podem rastreá-lo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Regras NSG do código&lt;/strong&gt; — em vez de clicar no portal ou manter um trecho Bicep, suas regras de segurança vivem no AppHost ao lado dos recursos que protegem.&lt;/p&gt;
&lt;p&gt;Este é o tipo de integração que não torna as demonstrações emocionantes, mas torna os sistemas de produção manuteníveis.&lt;/p&gt;
&lt;h2 id="conclusão"&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;A segurança de rede aparecendo tarde no ciclo de vida do projeto é um problema resolvido se você a modelar junto com a aplicação desde o início. O suporte de rede empresarial do Aspire torna isso possível sem exigir um rastreamento de infraestrutura separado.&lt;/p&gt;
&lt;p&gt;Detalhes completos na publicação original: &lt;a href="https://devblogs.microsoft.com/aspire/aspire-azure-enterprise-networking/"&gt;Securing Azure apps with Aspire enterprise networking&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.3: Suporte ao Kubernetes, Logs do Navegador e a Skill Aspireify</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/aspire-133-kubernetes-browser-logs-aspireify/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/aspire-133-kubernetes-browser-logs-aspireify/</guid><description>Cinco semanas após o 13.2, o Aspire 13.3 chega com 45 novos recursos, incluindo implantação AKS de primeira classe, uma skill de integração assistida por IA, captura de logs do navegador e resultados de comandos estruturados.</description><content:encoded>&lt;p&gt;Cinco semanas não é muito tempo para um lançamento, mas o Aspire 13.3 não parece assim. Os itens principais são significativos: implantação de Kubernetes e AKS de primeira classe com Helm, uma skill de integração assistida por agente chamada Aspireify, captura de logs do navegador diretamente no dashboard e resultados de comandos estruturados. Além disso, 45 novos recursos, 134 melhorias e 93 correções de bugs.&lt;/p&gt;
&lt;p&gt;Vamos aos destaques.&lt;/p&gt;
&lt;h2 id="aspireify-integração-assistida-por-agente"&gt;Aspireify: Integração Assistida por Agente&lt;/h2&gt;
&lt;p&gt;Adicionar o Aspire a um projeto existente parece simples — coloque um AppHost, pronto. Na prática, envolve muita arqueologia: quais portas importam, quais variáveis de ambiente são dependências reais, quais serviços do Docker Compose devem ser mapeados para integrações do Aspire.&lt;/p&gt;
&lt;p&gt;A nova &lt;strong&gt;skill Aspireify&lt;/strong&gt; fornece ao seu agente de código um fluxo de trabalho guiado exatamente para isso. Quando &lt;code&gt;aspire init&lt;/code&gt; cria um AppHost esqueleto, a skill Aspireify ajuda o agente a inspecionar o repositório, entender como já funciona e conectar o AppHost para se adaptar ao aplicativo — não o contrário.&lt;/p&gt;
&lt;p&gt;A postura padrão é &amp;ldquo;minimizar alterações no seu código.&amp;rdquo; Se o seu aplicativo já lê &lt;code&gt;DATABASE_URL&lt;/code&gt;, o agente mapeia isso com &lt;code&gt;WithEnvironment()&lt;/code&gt; em vez de pedir que você reescreva sua configuração. Se uma porta está codificada de forma fixa, a skill indica ao agente quando preservá-la.&lt;/p&gt;
&lt;p&gt;Este é o tipo de tooling de IA que realmente economiza tempo em vez de gerar mais trabalho para revisar.&lt;/p&gt;
&lt;h2 id="implantação-de-kubernetes-e-aks-de-primeira-classe"&gt;Implantação de Kubernetes e AKS de Primeira Classe&lt;/h2&gt;
&lt;p&gt;Esta estava na lista de desejos há algum tempo. O Aspire 13.3 inclui &lt;strong&gt;suporte de implantação de Kubernetes e AKS de primeira classe com Helm&lt;/strong&gt;. Agora você pode direcionar o AKS como destino de implantação diretamente das ferramentas do Aspire.&lt;/p&gt;
&lt;p&gt;Para equipes que já executam cargas de trabalho de produção no AKS, isso fecha uma lacuna significativa. Seu modelo de aplicativo Aspire agora tem um caminho limpo do desenvolvimento local ao Kubernetes sem a necessidade de escrever manualmente charts Helm.&lt;/p&gt;
&lt;h2 id="logs-do-navegador-no-dashboard"&gt;Logs do Navegador no Dashboard&lt;/h2&gt;
&lt;p&gt;Esta é uma daquelas funcionalidades que parecem pequenas até você estar depurando um problema de frontend.&lt;/p&gt;
&lt;p&gt;A nova API &lt;code&gt;WithBrowserLogs()&lt;/code&gt; anexa um recurso de navegador rastreado a qualquer recurso capaz de endpoints. O Aspire lança o Chromium usando um pipe CDP privado e transmite logs do console, solicitações de rede e erros diretamente no fluxo de logs do recurso:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;frontend&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddViteApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;../frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithHttpEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithBrowserLogs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;O AppHost TypeScript suporta o mesmo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;frontend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addViteApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;../frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withHttpEndpoint&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt;: &lt;span class="kt"&gt;3000&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withBrowserLogs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Erros de console, solicitações de rede com falha, exceções do lado do cliente — tudo visível no mesmo dashboard onde você já está observando traces e métricas. Sem necessidade de trocar de aba para o DevTools do navegador para as coisas básicas.&lt;/p&gt;
&lt;h2 id="resultados-de-comandos-estruturados"&gt;Resultados de Comandos Estruturados&lt;/h2&gt;
&lt;p&gt;Os comandos de recursos receberam uma atualização significativa. Até agora, os comandos retornavam sucesso/falha. Agora eles retornam resultados estruturados: texto, JSON ou markdown que flui pelo modelo, pela interface do dashboard, pela CLI e pelas ferramentas MCP.&lt;/p&gt;
&lt;p&gt;O dashboard une tudo isso com um novo centro de notificações no cabeçalho. Os resultados dos comandos aparecem como notificações com carimbo de data/hora com renderização de markdown e uma ação &amp;ldquo;Ver resposta&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Isso torna os comandos de recursos verdadeiramente combináveis. Uma integração agora pode expor um comando que retorna uma saída significativa — como uma URL de túnel — em vez de simplesmente alterar o estado em algum lugar.&lt;/p&gt;
&lt;h2 id="conclusão"&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;O Aspire 13.3 vale a atualização mesmo que seja apenas pelo suporte ao Kubernetes. Os logs do navegador e os resultados de comandos estruturados parecem o tipo de melhorias de qualidade de vida que se acumulam rapidamente em um fluxo de trabalho de desenvolvimento diário.&lt;/p&gt;
&lt;p&gt;Notas de versão completas: &lt;a href="https://devblogs.microsoft.com/aspire/whats-new-aspire-13-3/"&gt;What&amp;rsquo;s New in Aspire 13.3&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>SDD Conference 2026</title><link>https://thedotnetblog.com/pt/events/sdd-conference-2026/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://thedotnetblog.com/pt/events/sdd-conference-2026/</guid><description>Uma conferência de 5 dias sobre desenvolvimento de software no Barbican Centre em Londres com 78 sessões e 14 workshops sobre arquitetura, .NET, IA, Azure, DevOps e mais.</description><content:encoded>&lt;p&gt;&lt;strong&gt;SDD 2026&lt;/strong&gt; acontece de &lt;strong&gt;11 a 15 de maio de 2026&lt;/strong&gt; no &lt;strong&gt;Barbican Centre em Londres&lt;/strong&gt;. A conferência principal de 3 dias vai de terça a quinta, com workshops opcionais de dia inteiro na segunda e na sexta.&lt;/p&gt;
&lt;p&gt;Com &lt;strong&gt;78 sessões&lt;/strong&gt; e &lt;strong&gt;14 workshops&lt;/strong&gt;, é uma das conferências mais completas para desenvolvedores na Europa.&lt;/p&gt;
&lt;h2 id="tópicos"&gt;Tópicos&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pensamento Arquitetural&lt;/li&gt;
&lt;li&gt;Código Funcional em C# 13&lt;/li&gt;
&lt;li&gt;Design Serverless&lt;/li&gt;
&lt;li&gt;IA Semântica&lt;/li&gt;
&lt;li&gt;Azure Kubernetes Services&lt;/li&gt;
&lt;li&gt;Estratégias Lean DevOps&lt;/li&gt;
&lt;li&gt;The Model Context Protocol (MCP)&lt;/li&gt;
&lt;li&gt;IA Agêntica em .NET&lt;/li&gt;
&lt;li&gt;Refatorando o Monolito&lt;/li&gt;
&lt;li&gt;Programar Mais Rápido com LLMs&lt;/li&gt;
&lt;li&gt;Criptografia em um Mundo Pós-Quântico&lt;/li&gt;
&lt;li&gt;Desenvolvimento Local First&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="palestrantes"&gt;Palestrantes&lt;/h2&gt;
&lt;p&gt;Elenco de classe mundial incluindo &lt;strong&gt;Kevlin Henney&lt;/strong&gt;, &lt;strong&gt;Neal Ford&lt;/strong&gt;, &lt;strong&gt;Sander Hoogendoorn&lt;/strong&gt;, &lt;strong&gt;Andrew Clymer&lt;/strong&gt;, &lt;strong&gt;Jacqui Read&lt;/strong&gt;, &lt;strong&gt;Christian Weyer&lt;/strong&gt;, &lt;strong&gt;Jeff Prosise&lt;/strong&gt;, &lt;strong&gt;Jules May&lt;/strong&gt;, &lt;strong&gt;Oliver Sturm&lt;/strong&gt; e &lt;strong&gt;Raju Gandhi&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="ingressos-e-informações"&gt;Ingressos e informações&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/"&gt;Site do evento&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddvault.s3.amazonaws.com/assets/SDD_2026_schedule.pdf"&gt;PDF da agenda completa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/register"&gt;Opções de registro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;98% dos participantes do SDD 2025 avaliaram a experiência geral como boa, muito boa ou excelente.&lt;/p&gt;</content:encoded></item><item><title>Removendo o Trabalho Repetitivo de Migração com Agentic Platform Engineering</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/agentic-platform-engineering-migration-automation/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/agentic-platform-engineering-migration-automation/</guid><description>Git-Ape conduz a migração de um deployment real do AWS Terraform para Azure Bicep — extraindo a intenção do deployment e remapeando a arquitetura em vez de fazer uma conversão sintática 1:1.</description><content:encoded>&lt;p&gt;&lt;em&gt;Esta publicação foi traduzida automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/agentic-platform-engineering-migration-automation/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/all-things-azure/removing-the-monkey-work-of-migration-using-agentic-platform-engineering/"&gt;Removing the Monkey Work of Migration with Agentic Platform Engineering&lt;/a&gt; — um passo a passo do Git-Ape (ferramenta git de engenharia de plataformas agêntica) migrando um repositório Terraform real da AWS para o Azure, com foco na extração de intenção em vez de conversão linha por linha.&lt;/p&gt;
&lt;h2 id="a-entrada-contoso-migration"&gt;A entrada: contoso-migration&lt;/h2&gt;
&lt;p&gt;A fonte é um projeto Terraform real (&lt;code&gt;contoso-migration&lt;/code&gt;) que implanta um aplicativo Next.js na AWS — EC2 para computação, ALB para balanceamento de carga, S3 para artefatos e chaves IAM para identidade. Custo: ~$34/mês. O objetivo não é reproduzir a mesma infraestrutura no Azure; é descobrir o que o deployment está realmente tentando fazer e reconstruí-lo com serviços nativos do Azure.&lt;/p&gt;
&lt;h2 id="passo-1-validação-e-autenticação"&gt;Passo 1: Validação e autenticação&lt;/h2&gt;
&lt;p&gt;O Git-Ape começa validando todas as ferramentas CLI necessárias — &lt;code&gt;az&lt;/code&gt;, &lt;code&gt;aws&lt;/code&gt;, &lt;code&gt;gh&lt;/code&gt;, &lt;code&gt;jq&lt;/code&gt;, &lt;code&gt;git&lt;/code&gt; — e confirmando as sessões de autenticação ativas antes de tocar em qualquer coisa. Sem execuções parciais.&lt;/p&gt;
&lt;h2 id="passo-2-extração-de-intenção"&gt;Passo 2: Extração de intenção&lt;/h2&gt;
&lt;p&gt;O agente lê todo o repositório fonte pela API do GitHub e extrai a intenção do deployment: runtime (Node.js), tipo de computação, padrão de ingress, tratamento de artefatos, modelo de identidade, rede e monitoramento. Este é o passo-chave — está construindo um modelo semântico do que o deployment faz, não quais palavras-chave do Terraform ele usa.&lt;/p&gt;
&lt;h2 id="passo-3-mapeamento-de-serviços"&gt;Passo 3: Mapeamento de serviços&lt;/h2&gt;
&lt;p&gt;Os serviços AWS são mapeados para equivalentes do Azure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EC2 → App Service (Linux, Node 20 LTS)&lt;/li&gt;
&lt;li&gt;ALB → Balanceamento de carga integrado do App Service&lt;/li&gt;
&lt;li&gt;Funções/chaves IAM → Managed Identity&lt;/li&gt;
&lt;li&gt;Terraform → Bicep + GitHub Actions&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="passo-4-agente-crítico"&gt;Passo 4: Agente crítico&lt;/h2&gt;
&lt;p&gt;Antes de gerar a saída, um agente crítico é executado e detecta dois problemas bloqueantes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Anti-padrão de build no startup&lt;/strong&gt; — o Terraform original estava executando &lt;code&gt;npm install &amp;amp;&amp;amp; npm run build&lt;/code&gt; no EC2 na inicialização. Solução: construir no CI, implantar um artefato pronto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blob Storage desnecessário&lt;/strong&gt; — o S3 era usado para staging de artefatos que poderia ser eliminado com CI/CD adequado. O agente crítico o removeu completamente.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="passo-5-saída-gerada"&gt;Passo 5: Saída gerada&lt;/h2&gt;
&lt;p&gt;O resultado são ~80 linhas de Bicep em vez das 200+ linhas originais de Terraform. O agente criou um novo repositório GitHub com &lt;code&gt;infra/main.bicep&lt;/code&gt; e &lt;code&gt;.github/workflows/deploy.yml&lt;/code&gt; e removeu todos os arquivos específicos da AWS.&lt;/p&gt;
&lt;h2 id="comparação-de-postura-de-segurança"&gt;Comparação de postura de segurança&lt;/h2&gt;
&lt;p&gt;A migração também produziu uma melhoria significativa de segurança:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AWS original&lt;/th&gt;
&lt;th&gt;Saída Azure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Somente HTTP&lt;/td&gt;
&lt;td&gt;Somente HTTPS, TLS 1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSH aberto para 0.0.0.0/0&lt;/td&gt;
&lt;td&gt;Sem exposição SSH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chaves de acesso IAM&lt;/td&gt;
&lt;td&gt;OIDC + Managed Identity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sem monitoramento&lt;/td&gt;
&lt;td&gt;Application Insights&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Custo: ~$13/mês vs os $34/mês originais.&lt;/p&gt;
&lt;h2 id="o-que-o-diferencia-de-um-conversor-de-sintaxe"&gt;O que o diferencia de um conversor de sintaxe&lt;/h2&gt;
&lt;p&gt;O passo do agente crítico é o que separa isso de uma tradução mecânica. Ele detectou padrões que teriam funcionado na AWS mas seriam incorretos no Azure — e os corrigiu em vez de replicá-los. A saída não é &amp;ldquo;AWS em sintaxe Azure&amp;rdquo;; é um deployment nativo do Azure que atinge o mesmo objetivo de forma mais limpa.&lt;/p&gt;
&lt;p&gt;Veja o &lt;a href="https://devblogs.microsoft.com/all-things-azure/removing-the-monkey-work-of-migration-using-agentic-platform-engineering/"&gt;guia completo&lt;/a&gt; para o rastreamento completo do agente e arquivos gerados.&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server no Azure App Service — Sem Contêineres</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</guid><description>O SQL MCP Server agora pode rodar no Azure App Service sem Docker ou Kubernetes. O que isso significa para desenvolvedores .NET construindo agentes de IA que falam com bancos de dados SQL.</description><content:encoded>&lt;p&gt;&lt;em&gt;Esta publicação foi traduzida automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Vou ser honesto contigo: toda vez que vejo &amp;ldquo;requer um contêiner&amp;rdquo; em um tutorial, uma pequena parte de mim suspira. Contêineres são ótimos — até que a sua equipe não tem uma estratégia de contêineres, e de repente uma funcionalidade que parecia simples fica bloqueada por sobrecarga de orquestração que ninguém planejou.&lt;/p&gt;
&lt;p&gt;Por isso esse aqui chamou minha atenção. O SQL MCP Server agora pode rodar no Azure App Service — sem Docker, sem Kubernetes, apenas com a mesma configuração do Data API Builder (DAB) que expõe seu banco de dados SQL via MCP, REST e GraphQL.&lt;/p&gt;
&lt;h2 id="o-que-é-o-sql-mcp-server"&gt;O que é o SQL MCP Server?&lt;/h2&gt;
&lt;p&gt;Contexto rápido se você ainda não o conhece. O SQL MCP Server fica entre o seu agente de IA e o seu banco de dados SQL. Em vez de dar ao agente acesso direto ao banco (o que seria uma péssima ideia), ele expõe suas tabelas e views como uma camada de abstração — entidades com permissões definidas.&lt;/p&gt;
&lt;p&gt;É construído sobre o &lt;a href="https://learn.microsoft.com/pt-br/azure/data-api-builder/"&gt;Data API Builder&lt;/a&gt;, o que significa que um único arquivo de configuração gerencia MCP &lt;em&gt;e&lt;/em&gt; REST &lt;em&gt;e&lt;/em&gt; GraphQL simultaneamente. Seu agente fala com o endpoint MCP. Sua aplicação tradicional fala com REST ou GraphQL. Mesma config, mesmo runtime, superfícies diferentes.&lt;/p&gt;
&lt;p&gt;Isso é genuinamente útil. Você não mantém duas camadas de API separadas.&lt;/p&gt;
&lt;h2 id="o-problema-do-contêiner-e-a-solução"&gt;O Problema do Contêiner (e a Solução)&lt;/h2&gt;
&lt;p&gt;O modelo de deployment original do SQL MCP Server usava contêineres. Funciona bem em muitas equipes — mas não em todas. Muitas equipes .NET padronizam no Azure App Service ou VMs. Exigir um runtime de contêiner apenas para expor um endpoint SQL adiciona fricção que ninguém pediu.&lt;/p&gt;
&lt;p&gt;O novo tutorial mostra como pular o contêiner completamente. Tudo funciona com um comando &lt;code&gt;dab start&lt;/code&gt;, hospedado no App Service como um processo web .NET 8 padrão.&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;# Instalar Data API Builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet tool install microsoft.dataapibuilder --prerelease -g
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Inicializar a configuração&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab init --database-type mssql --host-mode Development --connection-string &lt;span class="s2"&gt;&amp;#34;@env(&amp;#39;SQL_CONNECTION_STRING&amp;#39;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Adicionar uma entidade&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add products --source dbo.products --permissions &lt;span class="s2"&gt;&amp;#34;authenticated:*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Configurar o provedor de auth do App Service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab configure --runtime.host.authentication.provider AppService
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Iniciar o servidor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Neste ponto você tem MCP em &lt;code&gt;/mcp&lt;/code&gt;, REST e GraphQL do mesmo processo, e nada rodando em contêiner.&lt;/p&gt;
&lt;h2 id="autenticação-sem-chaves-de-api-compartilhadas"&gt;Autenticação Sem Chaves de API Compartilhadas&lt;/h2&gt;
&lt;p&gt;Essa é a parte que mais aprecio. Ao fazer o deploy no App Service, você configura o Microsoft Entra ID como provedor de autenticação. Sem segredos compartilhados em arquivos de configuração, sem chaves de API para rotacionar.&lt;/p&gt;
&lt;p&gt;A string de conexão fica em uma variável de ambiente do App Service (não no &lt;code&gt;dab-config.json&lt;/code&gt;), e o endpoint MCP é protegido pela autenticação da plataforma. Se você já está alinhado com o Entra ID em suas cargas de trabalho Azure, isso se encaixa naturalmente.&lt;/p&gt;
&lt;p&gt;Para desenvolvimento local, você muda para o modo &lt;code&gt;Simulator&lt;/code&gt; e transporte STDIO. Volta para o modo &lt;code&gt;AppService&lt;/code&gt; antes do deploy. Limpo e explícito.&lt;/p&gt;
&lt;h2 id="deploy-no-app-service"&gt;Deploy no App Service&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az appservice plan create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --sku B1 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --is-linux
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az webapp create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --plan &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --runtime &lt;span class="s2"&gt;&amp;#34;DOTNETCORE:8.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az webapp config &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --startup-file &lt;span class="s2"&gt;&amp;#34;dab start&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Depois você faz o deploy do seu projeto DAB usando o método de deployment de código que sua equipe já usa. O detalhe importante: é um deployment de &lt;strong&gt;código&lt;/strong&gt;, não de contêiner.&lt;/p&gt;
&lt;h2 id="por-que-isso-importa-para-desenvolvedores-net"&gt;Por que Isso Importa para Desenvolvedores .NET&lt;/h2&gt;
&lt;p&gt;Se você está construindo agentes de IA em .NET, eventualmente seu agente precisará falar com um banco de dados. O SQL MCP Server te dá uma maneira estruturada de fazer isso sem expor strings de conexão brutas.&lt;/p&gt;
&lt;p&gt;Confira o tutorial completo no &lt;a href="https://devblogs.microsoft.com/azure-sql/sql-mcp-server-app-service/"&gt;post original&lt;/a&gt; e o &lt;a href="https://github.com/Azure-Samples/SQL-MCP-NoContainer"&gt;repositório de exemplo no GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="conclusão"&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;O SQL MCP Server no App Service é uma opção pragmática sólida para equipes .NET que querem dar aos seus agentes acesso estruturado a dados SQL sem uma estratégia de contêineres. Experimente — seus agentes vão apreciar a superfície de API limpa.&lt;/p&gt;</content:encoded></item><item><title>SQL Server 2025 como Banco de Dados Pronto para Agentes: Segurança, Backup e MCP em Um Motor</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</guid><description>A parte final da série Polyglot Tax aborda os problemas difíceis de produção: Row-Level Security unificada sobre dados relacionais, JSON, grafos e vetores, mais integração MCP.</description><content:encoded>&lt;p&gt;&lt;em&gt;Esta postagem foi traduzida automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Acompanhei a série Polyglot Tax de Aditya Badramraju com muito interesse. A parte 4 fecha a série com as partes que realmente determinam se você confiaria nessa arquitetura em produção.&lt;/p&gt;
&lt;h2 id="um-modelo-de-segurança-para-todos-os-modelos-de-dados"&gt;Um Modelo de Segurança para Todos os Modelos de Dados&lt;/h2&gt;
&lt;p&gt;Uma única política de Row-Level Security que cobre todos os modelos de dados. Uma política, uma prova para o auditor.&lt;/p&gt;
&lt;h2 id="backup-unificado--recuperação-atômica"&gt;Backup Unificado = Recuperação Atômica&lt;/h2&gt;
&lt;p&gt;Em um stack poliglota, recuperação point-in-time em cinco bancos de dados é um pesadelo de consistência. Com um banco, é atômica por definição.&lt;/p&gt;
&lt;h2 id="integração-mcp-agentes-sem-middleware"&gt;Integração MCP: Agentes Sem Middleware&lt;/h2&gt;
&lt;p&gt;SQL Server 2025 suporta o SQL MCP Server diretamente. Agentes chamam ferramentas, o motor impõe isolamento de tenant e mascaramento de colunas automaticamente.&lt;/p&gt;
&lt;p&gt;Post original de Aditya Badramraju: &lt;a href="https://devblogs.microsoft.com/azure-sql/the-polyglot-tax-part-4/"&gt;The Polyglot Tax – Part 4&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure SDK Abril 2026: AI Foundry 2.0 e o Que Desenvolvedores .NET Devem Saber</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-sdk-april-2026-ai-foundry-2-stable/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-sdk-april-2026-ai-foundry-2-stable/</guid><description>A versão Azure SDK de abril 2026 traz Azure.AI.Projects 2.0.0 estável com breaking changes significativos, correções críticas de segurança no Cosmos DB e novas bibliotecas de Provisioning para .NET.</description><content:encoded>&lt;p&gt;&lt;em&gt;Esta postagem foi traduzida automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/azure-sdk-april-2026-ai-foundry-2-stable/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Lançamentos mensais do SDK são fáceis de ignorar. Este tem algumas coisas que merecem atenção — especialmente se você constrói com AI Foundry, Cosmos DB em Java, ou faz provisionamento de infraestrutura a partir de código .NET.&lt;/p&gt;
&lt;h2 id="azureaiprojects-200--breaking-changes-que-fazem-sentido"&gt;Azure.AI.Projects 2.0.0 — Breaking Changes que Fazem Sentido&lt;/h2&gt;
&lt;p&gt;Splits de namespace, tipos renomeados, e convenção &lt;code&gt;Is*&lt;/code&gt; consistente para booleanos.&lt;/p&gt;
&lt;h2 id="cosmos-db-java-correção-crítica-de-segurança-rce"&gt;Cosmos DB Java: Correção Crítica de Segurança (RCE)&lt;/h2&gt;
&lt;p&gt;Versão 4.79.0 corrige &lt;strong&gt;vulnerabilidade de Execução Remota de Código (CWE-502)&lt;/strong&gt;. Atualize imediatamente.&lt;/p&gt;
&lt;h2 id="novas-bibliotecas-de-provisioning-para-net"&gt;Novas Bibliotecas de Provisioning para .NET&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nuget.org/packages/Azure.Provisioning.Network/1.0.0"&gt;Azure.Provisioning.Network 1.0.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nuget.org/packages/Azure.Provisioning.PrivateDns/1.0.0"&gt;Azure.Provisioning.PrivateDns 1.0.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Post original: &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-sdk-release-april-2026/"&gt;Azure SDK Release (April 2026)&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>GPT-5.5 Chegou ao Azure Foundry — O que Desenvolvedores .NET Precisam Saber</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</guid><description>GPT-5.5 está disponível para todos no Microsoft Foundry. A progressão do GPT-5 ao 5.5, o que realmente melhorou e como começar a usá-lo nos seus agentes hoje.</description><content:encoded>&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A Microsoft acaba de anunciar que &lt;a href="https://azure.microsoft.com/en-us/blog/openais-gpt-5-5-in-microsoft-foundry-frontier-intelligence-on-an-enterprise-ready-platform/"&gt;GPT-5.5 está geralmente disponível no Microsoft Foundry&lt;/a&gt;. Se você tem construído agentes no Azure, esta é a atualização que você estava esperando.&lt;/p&gt;
&lt;h2 id="a-progressão-do-gpt-5"&gt;A progressão do GPT-5&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-5&lt;/strong&gt;: unificou raciocínio e velocidade em um único sistema&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.4&lt;/strong&gt;: raciocínio multi-etapas mais sólido, capacidades agênticas para empresas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.5&lt;/strong&gt;: raciocínio de contexto longo mais profundo, execução agêntica mais confiável, maior eficiência de tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="o-que-realmente-mudou"&gt;O que realmente mudou&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Codificação agêntica aprimorada&lt;/strong&gt;: GPT-5.5 mantém contexto em grandes bases de código, diagnostica falhas arquiteturais e antecipa requisitos de testes. O modelo raciocina sobre &lt;em&gt;o que mais&lt;/em&gt; uma correção afeta antes de agir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eficiência de tokens&lt;/strong&gt;: Saídas de maior qualidade com menos tokens e menos tentativas. Custo e latência diretamente menores em produção.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Análise de contexto longo&lt;/strong&gt;: Lida com documentos extensos e históricos multi-sessão sem perder o fio.&lt;/p&gt;
&lt;h2 id="preços"&gt;Preços&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Modelo&lt;/th&gt;
&lt;th&gt;Entrada ($/M tokens)&lt;/th&gt;
&lt;th&gt;Entrada em cache&lt;/th&gt;
&lt;th&gt;Saída ($/M tokens)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;$5,00&lt;/td&gt;
&lt;td&gt;$0,50&lt;/td&gt;
&lt;td&gt;$30,00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5 Pro&lt;/td&gt;
&lt;td&gt;$30,00&lt;/td&gt;
&lt;td&gt;$3,00&lt;/td&gt;
&lt;td&gt;$180,00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="por-que-o-foundry-importa"&gt;Por que o Foundry importa&lt;/h2&gt;
&lt;p&gt;O Foundry Agent Service permite definir agentes em YAML ou conectá-los com Microsoft Agent Framework, GitHub Copilot SDK, LangGraph ou OpenAI Agents SDK — e executá-los como agentes hospedados isolados com sistema de arquivos persistente, identidade Microsoft Entra e preços de escala a zero.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;aiProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gpt-5.5&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Você é um assistente útil.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;MeuAgente&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Veja o &lt;a href="https://azure.microsoft.com/en-us/blog/openais-gpt-5-5-in-microsoft-foundry-frontier-intelligence-on-an-enterprise-ready-platform/"&gt;anúncio completo&lt;/a&gt; para todos os detalhes.&lt;/p&gt;</content:encoded></item><item><title>O Azure MCP Server Agora é um .mcpb — Instale-o sem Nenhum Runtime</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</guid><description>O Azure MCP Server está disponível como MCP Bundle (.mcpb) — baixe, arraste para o Claude Desktop e pronto. Sem Node.js, Python ou .NET necessários.</description><content:encoded>&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Sabe o que era chato na configuração de servidores MCP? Você precisava de um runtime. Node.js para a versão npm, Python para pip/uvx, .NET SDK para a variante dotnet.&lt;/p&gt;
&lt;p&gt;O &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;Azure MCP Server acabou de mudar isso&lt;/a&gt;. Agora está disponível como &lt;code&gt;.mcpb&lt;/code&gt; — um MCP Bundle — e a configuração é arrastar e soltar.&lt;/p&gt;
&lt;h2 id="o-que-é-um-mcp-bundle"&gt;O que é um MCP Bundle?&lt;/h2&gt;
&lt;p&gt;Pense como uma extensão do VS Code (&lt;code&gt;.vsix&lt;/code&gt;) ou extensão de navegador (&lt;code&gt;.crx&lt;/code&gt;), mas para servidores MCP. Um arquivo &lt;code&gt;.mcpb&lt;/code&gt; é um arquivo ZIP independente que inclui o binário do servidor e todas as suas dependências.&lt;/p&gt;
&lt;h2 id="como-instalar"&gt;Como instalar&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Baixe o bundle para sua plataforma&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vá para a &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server"&gt;página de GitHub Releases&lt;/a&gt; e baixe o arquivo &lt;code&gt;.mcpb&lt;/code&gt; para seu OS e arquitetura.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Instale no Claude Desktop&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O mais fácil: arraste e solte o arquivo &lt;code&gt;.mcpb&lt;/code&gt; na janela do Claude Desktop na página de configurações de Extensões (&lt;code&gt;☰ → Arquivo → Configurações → Extensões&lt;/code&gt;). Revise os detalhes, clique em Instalar, confirme.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Autentique no Azure&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az login
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Só isso. O Azure MCP Server usa suas credenciais Azure existentes.&lt;/p&gt;
&lt;h2 id="o-que-você-pode-fazer"&gt;O que você pode fazer&lt;/h2&gt;
&lt;p&gt;Mais de 100 ferramentas de serviços Azure diretamente do seu cliente IA:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Consultar e gerenciar Cosmos DB, Storage, Key Vault, App Service, Foundry&lt;/li&gt;
&lt;li&gt;Gerar comandos &lt;code&gt;az&lt;/code&gt; CLI para qualquer tarefa&lt;/li&gt;
&lt;li&gt;Criar templates Bicep e Terraform&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="para-começar"&gt;Para começar&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Download&lt;/strong&gt;: &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server-"&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repositório&lt;/strong&gt;: &lt;a href="https://aka.ms/azmcp"&gt;aka.ms/azmcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://aka.ms/azmcp/docs"&gt;aka.ms/azmcp/docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Veja o &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;post completo&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Foundry Toolboxes: Um único endpoint para todas as ferramentas dos seus agentes</title><link>https://thedotnetblog.com/pt/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/pt/news/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</guid><description>A Microsoft Foundry lançou Toolboxes em preview pública — uma forma de curar, gerenciar e expor ferramentas de agentes IA por meio de um único endpoint compatível com MCP.</description><content:encoded>&lt;p&gt;&lt;em&gt;Esta publicação foi traduzida automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Aqui está um problema que parece chato até você vivenciá-lo: sua organização está construindo múltiplos agentes IA, cada um precisa de ferramentas, e cada time as configura do zero. A mesma integração de busca web, a mesma config do Azure AI Search, a mesma conexão com o servidor MCP do GitHub — mas em outro repositório, por outro time, com outras credenciais e sem governança compartilhada.&lt;/p&gt;
&lt;p&gt;A Microsoft Foundry acabou de lançar &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;Toolboxes&lt;/a&gt; em preview pública, e é uma resposta direta a esse problema.&lt;/p&gt;
&lt;h2 id="o-que-é-um-toolbox"&gt;O que é um Toolbox?&lt;/h2&gt;
&lt;p&gt;Um Toolbox é um bundle de ferramentas nomeado e reutilizável, definido uma vez no Foundry e exposto por meio de um único endpoint compatível com MCP. Qualquer runtime de agente que fale MCP pode consumi-lo — sem lock-in no Foundry Agents.&lt;/p&gt;
&lt;p&gt;A proposta é simples: &lt;strong&gt;build once, consume anywhere&lt;/strong&gt;. Defina as ferramentas, configure a autenticação de forma centralizada (OAuth passthrough, identidade gerenciada do Entra), publique o endpoint. Cada agente que precisar dessas ferramentas se conecta ao endpoint e as obtém todas.&lt;/p&gt;
&lt;h2 id="os-quatro-pilares-dois-disponíveis-hoje"&gt;Os quatro pilares (dois disponíveis hoje)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pilar&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;O que faz&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;Em breve&lt;/td&gt;
&lt;td&gt;Encontra ferramentas aprovadas sem busca manual&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;Disponível&lt;/td&gt;
&lt;td&gt;Agrupa ferramentas em um bundle reutilizável&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;Disponível&lt;/td&gt;
&lt;td&gt;Um endpoint MCP único expõe todas as ferramentas&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;Em breve&lt;/td&gt;
&lt;td&gt;Auth centralizada + observabilidade em todas as chamadas&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="exemplo-prático"&gt;Exemplo prático&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;Buscar documentação e responder a issues do 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;Buscar documentação pública&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;azure_ai_search&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;index_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;internal-docs&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mcp_server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;server_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://your-github-mcp-server.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Após a publicação, o Foundry fornece um endpoint unificado. Uma conexão, todas as ferramentas.&lt;/p&gt;
&lt;h2 id="sem-lock-in-no-foundry-agents"&gt;Sem lock-in no Foundry Agents&lt;/h2&gt;
&lt;p&gt;Os Toolboxes são &lt;strong&gt;criados e gerenciados&lt;/strong&gt; no Foundry, mas a superfície de consumo é o protocolo MCP aberto. Você pode usá-los de agentes personalizados com Microsoft Agent Framework ou LangGraph, GitHub Copilot e outros IDEs compatíveis com MCP.&lt;/p&gt;
&lt;h2 id="por-que-importa-agora"&gt;Por que importa agora&lt;/h2&gt;
&lt;p&gt;A onda multi-agentes está chegando à produção. Cada novo agente é uma nova superfície para configuração duplicada, credenciais desatualizadas e comportamento inconsistente. A base Build + Consume é suficiente para começar a centralizar. Quando o pilar Govern chegar, você terá uma camada de ferramentas observável e controlada centralmente para toda a sua frota de agentes.&lt;/p&gt;
&lt;h2 id="conclusão"&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Ainda é cedo — preview pública, SDK Python primeiro, com Discover e Govern ainda por vir. Mas o modelo é sólido e o design nativo de MCP significa que funciona com as ferramentas que você já está construindo. Confira o &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;anúncio oficial&lt;/a&gt; para começar.&lt;/p&gt;</content:encoded></item><item><title>azd + GitHub Copilot: Configuração de projeto com IA e resolução inteligente de erros</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</guid><description>O Azure Developer CLI agora se integra com o GitHub Copilot para gerar a infraestrutura do seu projeto e resolver erros de deploy — sem sair do terminal.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este artigo foi traduzido automaticamente. Para ver a versão original em inglês, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Você conhece aquele momento em que quer fazer o deploy de uma app existente no Azure e se vê olhando para um &lt;code&gt;azure.yaml&lt;/code&gt; em branco, tentando lembrar se sua API Express deveria usar Container Apps ou App Service? Esse momento acabou de ficar muito mais curto.&lt;/p&gt;
&lt;p&gt;O Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) agora se integra com o GitHub Copilot de duas formas concretas: scaffolding assistido por IA durante o &lt;code&gt;azd init&lt;/code&gt;, e resolução inteligente de erros quando os deploys falham. Ambas as funcionalidades ficam completamente no terminal — exatamente onde eu quero que estejam.&lt;/p&gt;
&lt;h2 id="configuração-com-copilot-durante-azd-init"&gt;Configuração com Copilot durante azd init&lt;/h2&gt;
&lt;p&gt;Quando você executa &lt;code&gt;azd init&lt;/code&gt;, agora aparece a opção &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Selecione-a e o Copilot analisa sua base de código para gerar o &lt;code&gt;azure.yaml&lt;/code&gt;, os templates de infraestrutura e os módulos Bicep — com base no seu código real.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd init
# Selecione: &amp;#34;Set up with GitHub Copilot (Preview)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pré-requisitos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;azd 1.23.11 ou superior&lt;/strong&gt; — verifique com &lt;code&gt;azd version&lt;/code&gt; ou atualize com &lt;code&gt;azd update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assinatura ativa do GitHub Copilot&lt;/strong&gt; (Individual, Business ou Enterprise)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub CLI (&lt;code&gt;gh&lt;/code&gt;)&lt;/strong&gt; — o &lt;code&gt;azd&lt;/code&gt; pedirá login se necessário&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O que acho genuinamente útil: funciona nos dois sentidos. Construindo do zero? O Copilot ajuda a configurar os serviços Azure certos desde o início. Tem uma app existente que você queria fazer deploy faz tempo? Aponte o Copilot para ela e ele gera a configuração sem você precisar reestruturar nada.&lt;/p&gt;
&lt;h3 id="o-que-ele-faz-de-verdade"&gt;O que ele faz de verdade&lt;/h3&gt;
&lt;p&gt;Digamos que você tem uma API Express em Node.js com dependência do PostgreSQL. Em vez de decidir manualmente entre Container Apps e App Service, e depois escrever Bicep do zero, o Copilot detecta sua stack e gera:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Um &lt;code&gt;azure.yaml&lt;/code&gt; com as configurações corretas de &lt;code&gt;language&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt; e &lt;code&gt;build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Um módulo Bicep para Azure Container Apps&lt;/li&gt;
&lt;li&gt;Um módulo Bicep para Azure Database for PostgreSQL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E ele faz verificações prévias antes de tocar em qualquer coisa — verifica se seu diretório git está limpo, pede consentimento para as ferramentas do servidor MCP. Nada acontece sem que você saiba exatamente o que vai mudar.&lt;/p&gt;
&lt;h2 id="resolução-de-erros-com-copilot"&gt;Resolução de erros com Copilot&lt;/h2&gt;
&lt;p&gt;Erros de deploy são inevitáveis. Parâmetros faltando, problemas de permissão, disponibilidade de SKUs — e a mensagem de erro raramente diz a única coisa que você realmente precisa saber: &lt;em&gt;como resolver&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Sem Copilot, o ciclo é: copiar o erro → pesquisar na documentação → ler três respostas irrelevantes do Stack Overflow → executar alguns comandos &lt;code&gt;az&lt;/code&gt; CLI → tentar de novo e torcer. Com o Copilot integrado ao &lt;code&gt;azd&lt;/code&gt;, esse ciclo colapsa. Quando qualquer comando &lt;code&gt;azd&lt;/code&gt; falha, ele imediatamente oferece quatro opções:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt; — descrição em linguagem natural do que deu errado&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance&lt;/strong&gt; — instruções passo a passo para corrigir&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose and Guide&lt;/strong&gt; — análise completa + Copilot aplica a correção (com sua aprovação) + nova tentativa opcional&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip&lt;/strong&gt; — resolver você mesmo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O ponto crucial: o Copilot já tem contexto sobre seu projeto, o comando que falhou e a saída do erro. Suas sugestões são específicas para &lt;em&gt;sua situação&lt;/em&gt;, não documentação genérica.&lt;/p&gt;
&lt;h3 id="configurar-comportamento-padrão"&gt;Configurar comportamento padrão&lt;/h3&gt;
&lt;p&gt;Se você sempre escolhe a mesma opção, pule o prompt interativo:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.category troubleshoot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Valores: &lt;code&gt;explain&lt;/code&gt;, &lt;code&gt;guidance&lt;/code&gt;, &lt;code&gt;troubleshoot&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;skip&lt;/code&gt;. Você também pode habilitar auto-fix e retry:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.fix allow
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Voltar ao modo interativo a qualquer momento:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config unset copilot.errorHandling.category
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="conclusão"&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Esta é exatamente o tipo de integração do Copilot que agrega valor real. Experimente executando &lt;code&gt;azd update&lt;/code&gt; para obter a versão mais recente e use &lt;code&gt;azd init&lt;/code&gt; no seu próximo projeto.&lt;/p&gt;
&lt;p&gt;Leia o &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/"&gt;anúncio original aqui&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Global Azure Spain 2026</title><link>https://thedotnetblog.com/pt/events/global-azure-spain-2026/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><guid>https://thedotnetblog.com/pt/events/global-azure-spain-2026/</guid><description>O maior evento comunitário de Azure na Espanha — um dia inteiro de sessões sobre Azure, IA, dados, segurança e desenvolvimento cloud-native com 38 palestrantes em 3 trilhas.</description><content:encoded>&lt;p&gt;Global Azure Spain 2026 acontece em &lt;strong&gt;18 de abril de 2026&lt;/strong&gt; no &lt;strong&gt;Kinépolis Diversia&lt;/strong&gt; em Alcobendas, Madri. É o maior evento comunitário Azure da Espanha, reunindo 38 palestrantes em 3 trilhas paralelas cobrindo agentes de IA, redes Azure, Cosmos DB, Fabric, IoT, segurança e muito mais.&lt;/p&gt;
&lt;p&gt;O evento vai das &lt;strong&gt;08:30 às 18:30&lt;/strong&gt; e inclui keynote, intervalos para café, almoço e uma sessão de encerramento com perguntas.&lt;/p&gt;
&lt;h2 id="destaques-da-agenda"&gt;Destaques da agenda&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Domando Agentes de IA&lt;/strong&gt;: governança, ferramentas e APIs com Azure AI Foundry e Azure API Management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Construyendo agentes con LibreChat en Azure&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How Can I Steal Your Data with Azure Private Endpoints&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stop Building APIs. Forge Agents with Azure&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agentic DevOps Meets IoT: Real-Time Systems with Fabric and GitHub Copilot&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;El regreso de los tamagotchis!&lt;/strong&gt;: sistemas multi-agente em ação&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Foundry Control Plane como plataforma de Agentes global&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rompiendo el perímetro: Zero Trust aplicado en Azure&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ingressos"&gt;Ingressos&lt;/h2&gt;
&lt;p&gt;A inscrição é uma doação simbólica — o valor total do ingresso vai diretamente para a &lt;strong&gt;Plan International&lt;/strong&gt;, apoiando os direitos das crianças e a igualdade no mundo. Capacidade limitada, então garanta seu lugar cedo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.eventbrite.es/e/entradas-global-azure-spain-2026-en-madrid-1981594189564"&gt;Ingressos no Eventbrite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://globalazure.es/"&gt;Site do evento&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="azure-tour-2026"&gt;Azure Tour 2026&lt;/h2&gt;
&lt;p&gt;Além de Madri, o Global Azure Tour 2026 também inclui paradas em &lt;strong&gt;Zaragoza&lt;/strong&gt;, &lt;strong&gt;Tenerife&lt;/strong&gt; e &lt;strong&gt;Sevilha&lt;/strong&gt;.&lt;/p&gt;</content:encoded></item><item><title>O RFT do Foundry ficou mais barato e inteligente — Veja o que mudou</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</guid><description>A Microsoft Foundry lançou três atualizações de RFT este mês: treinamento global para o4-mini, novos avaliadores de modelo GPT-4.1 e um guia de boas práticas que vai te poupar horas de debugging.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Se você está desenvolvendo aplicações .NET que dependem de modelos fine-tunados, as atualizações do Foundry deste mês merecem sua atenção. O Reinforcement Fine-Tuning ficou mais acessível e significativamente mais barato.&lt;/p&gt;
&lt;p&gt;Os detalhes completos estão no &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-foundry-finetune-april-2026/"&gt;anúncio oficial&lt;/a&gt;, mas aqui vai o resumo prático.&lt;/p&gt;
&lt;h2 id="treinamento-global-para-o4-mini"&gt;Treinamento Global para o4-mini&lt;/h2&gt;
&lt;p&gt;o4-mini é o modelo preferido para cargas de trabalho pesadas em raciocínio e agentes. A grande novidade: agora você pode iniciar jobs de fine-tuning a partir de mais de 13 regiões Azure com taxas de treinamento por token mais baixas em comparação com o treinamento Standard. Mesma infraestrutura, mesma qualidade, maior alcance.&lt;/p&gt;
&lt;p&gt;Se sua equipe está distribuída geograficamente, isso importa. Você não está mais preso a um punhado de regiões para treinar.&lt;/p&gt;
&lt;p&gt;Aqui está a chamada da API REST para iniciar um job de treinamento global:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X POST &lt;span class="s2"&gt;&amp;#34;https://&amp;lt;your-resource&amp;gt;.openai.azure.com/openai/fine_tuning/jobs?api-version=2025-04-01-preview&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;api-key: &lt;/span&gt;&lt;span class="nv"&gt;$AZURE_OPENAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;model&amp;#34;: &amp;#34;o4-mini&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;training_file&amp;#34;: &amp;#34;&amp;lt;your-training-file-id&amp;gt;&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;method&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;type&amp;#34;: &amp;#34;reinforcement&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;reinforcement&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;grader&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;type&amp;#34;: &amp;#34;string_check&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;name&amp;#34;: &amp;#34;answer-check&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;input&amp;#34;: &amp;#34;{{sample.output_text}}&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;reference&amp;#34;: &amp;#34;{{item.reference_answer}}&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;operation&amp;#34;: &amp;#34;eq&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;hyperparameters&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;n_epochs&amp;#34;: 2,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;compute_multiplier&amp;#34;: 1.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;trainingType&amp;#34;: &amp;#34;globalstandard&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Essa flag &lt;code&gt;trainingType: globalstandard&lt;/code&gt; é a diferença chave.&lt;/p&gt;
&lt;h2 id="novos-avaliadores-de-modelo-família-gpt-41"&gt;Novos Avaliadores de Modelo: Família GPT-4.1&lt;/h2&gt;
&lt;p&gt;Avaliadores definem o sinal de recompensa contra o qual seu modelo otimiza. Até agora, avaliadores baseados em modelo eram limitados a um conjunto menor de modelos. Agora você tem três novas opções: GPT-4.1, GPT-4.1-mini e GPT-4.1-nano.&lt;/p&gt;
&lt;p&gt;Quando você deve usar avaliadores de modelo em vez de determinísticos? Quando a saída da sua tarefa é aberta, quando você precisa de pontuação parcial em múltiplas dimensões, ou quando está construindo workflows com agentes onde a correção das chamadas de ferramentas depende do contexto semântico.&lt;/p&gt;
&lt;p&gt;A questão é que a estratégia de níveis é prática:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-nano&lt;/strong&gt; para iterações iniciais. Baixo custo, ciclos de feedback rápidos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-mini&lt;/strong&gt; quando sua rubrica de avaliação estiver estável e você precisar de maior fidelidade.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1&lt;/strong&gt; para avaliação em produção ou rubricas complexas onde cada decisão de pontuação conta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Você pode até misturar tipos de avaliadores em um único job de RFT. Use string-match para a dimensão de &amp;ldquo;resposta correta&amp;rdquo; e um avaliador de modelo para avaliar a qualidade do raciocínio. Essa flexibilidade é honestamente o que torna isso útil para cargas de trabalho reais.&lt;/p&gt;
&lt;h2 id="a-pegadinha-do-formato-de-dados-do-rft"&gt;A Pegadinha do Formato de Dados do RFT&lt;/h2&gt;
&lt;p&gt;Isso confunde muita gente. O formato de dados do RFT é diferente do SFT. A última mensagem em cada linha deve ter o papel User ou Developer — não Assistant. A resposta esperada vai em uma chave de nível superior como &lt;code&gt;reference_answer&lt;/code&gt; que o avaliador referencia diretamente.&lt;/p&gt;
&lt;p&gt;Se você estava fazendo supervised fine-tuning e quer mudar para RFT, precisa reestruturar seus dados de treinamento. Não pule essa etapa ou seus jobs vão falhar silenciosamente.&lt;/p&gt;
&lt;h2 id="por-que-isso-importa-para-desenvolvedores-net"&gt;Por Que Isso Importa para Desenvolvedores .NET&lt;/h2&gt;
&lt;p&gt;Se você está chamando modelos fine-tunados nas suas aplicações .NET através do SDK Azure OpenAI, treinamento mais barato significa que você pode iterar de forma mais agressiva. As opções de avaliadores de modelo significam que você pode fazer fine-tuning para tarefas com nuances — não apenas cenários de correspondência exata. E o guia de boas práticas no &lt;a href="https://github.com/microsoft-foundry/fine-tuning/blob/main/Demos/Agentic_RFT_PrivatePreview/RFT_Best_Practice.md"&gt;GitHub&lt;/a&gt; vai te poupar tempo real de debugging.&lt;/p&gt;
&lt;p&gt;Comece pequeno. Dez a cem amostras. Avaliador simples. Valide o ciclo. Depois escale.&lt;/p&gt;</content:encoded></item><item><title>Seus experimentos de IA no Azure estão queimando dinheiro — Veja como resolver isso</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</guid><description>Cargas de trabalho de IA no Azure podem ficar caras rapidamente. Vamos falar sobre o que realmente funciona para manter os custos sob controle sem desacelerar seu desenvolvimento.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Se você está construindo apps com IA no Azure agora, provavelmente já notou algo: sua fatura da nuvem está diferente do que costumava ser. Não apenas mais alta — mais estranha. Com picos. Difícil de prever.&lt;/p&gt;
&lt;p&gt;A Microsoft acabou de publicar um ótimo artigo sobre &lt;a href="https://azure.microsoft.com/en-us/blog/cloud-cost-optimization-principles-that-still-matter/"&gt;princípios de otimização de custos na nuvem que ainda importam&lt;/a&gt;, e honestamente, o timing não poderia ser melhor. Porque as cargas de trabalho de IA mudaram o jogo quando se trata de custos.&lt;/p&gt;
&lt;h2 id="por-que-cargas-de-trabalho-de-ia-são-diferentes"&gt;Por que cargas de trabalho de IA são diferentes&lt;/h2&gt;
&lt;p&gt;A questão é a seguinte. Cargas de trabalho tradicionais de .NET são relativamente previsíveis. Você conhece seu tier de App Service, conhece seus DTUs de SQL, consegue estimar o gasto mensal com bastante precisão. Cargas de trabalho de IA? Nem tanto.&lt;/p&gt;
&lt;p&gt;Você está testando múltiplos modelos para ver qual se encaixa. Está subindo infraestrutura com GPU para fine-tuning. Está fazendo chamadas de API para o Azure OpenAI onde o consumo de tokens varia enormemente dependendo do tamanho do prompt e do comportamento do usuário. Cada experimento custa dinheiro real, e você pode executar dezenas antes de encontrar a abordagem certa.&lt;/p&gt;
&lt;p&gt;Essa imprevisibilidade é o que torna a otimização de custos crítica — não como algo secundário, mas desde o primeiro dia.&lt;/p&gt;
&lt;h2 id="gerenciamento-vs-otimização--saiba-a-diferença"&gt;Gerenciamento vs. otimização — saiba a diferença&lt;/h2&gt;
&lt;p&gt;Uma distinção do artigo que acho que os desenvolvedores ignoram: há uma diferença entre &lt;em&gt;gerenciamento&lt;/em&gt; de custos e &lt;em&gt;otimização&lt;/em&gt; de custos.&lt;/p&gt;
&lt;p&gt;Gerenciamento é rastreamento e relatórios. Você configura orçamentos no Azure Cost Management, recebe alertas, vê dashboards. Isso é o básico.&lt;/p&gt;
&lt;p&gt;Otimização é onde você realmente toma decisões. Você realmente precisa daquele tier S3, ou o S1 daria conta da sua carga? Aquela instância de compute sempre ligada está ociosa nos finais de semana? Você poderia usar instâncias spot para seus jobs de treinamento?&lt;/p&gt;
&lt;p&gt;Como desenvolvedores .NET, tendemos a focar no código e deixar as decisões de infraestrutura para &amp;ldquo;o time de operações&amp;rdquo;. Mas se você está fazendo deploy no Azure, essas decisões também são suas.&lt;/p&gt;
&lt;h2 id="o-que-realmente-funciona"&gt;O que realmente funciona&lt;/h2&gt;
&lt;p&gt;Com base no artigo e na minha própria experiência, é isso que faz a diferença:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Saiba o que está gastando e onde.&lt;/strong&gt; Tagueie seus recursos. Sério. Se você não consegue identificar qual projeto ou experimento está consumindo seu orçamento, não consegue otimizar nada. Azure Cost Management com tagging adequado é seu melhor amigo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estabeleça limites antes de experimentar.&lt;/strong&gt; Use Azure Policy para restringir SKUs caros em ambientes de dev/test. Defina limites de gasto nos seus deployments do Azure OpenAI. Não espere a fatura chegar para perceber que alguém deixou um cluster de GPU rodando no final de semana.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Redimensione continuamente.&lt;/strong&gt; Aquela VM que você escolheu durante a prototipação? Provavelmente está errada para produção. O Azure Advisor dá recomendações — realmente olhe para elas. Revise mensalmente, não anualmente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pense no ciclo de vida.&lt;/strong&gt; Recursos de desenvolvimento devem ser desligados. Ambientes de teste não precisam rodar 24/7. Use políticas de desligamento automático. Para cargas de trabalho de IA especificamente, considere opções serverless onde você paga por execução em vez de manter o compute ligado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Meça o valor, não apenas o custo.&lt;/strong&gt; Essa é fácil de esquecer. Um modelo que custa mais mas entrega resultados significativamente melhores pode ser a decisão certa. O objetivo não é gastar o mínimo — é gastar de forma inteligente.&lt;/p&gt;
&lt;h2 id="a-conclusão"&gt;A conclusão&lt;/h2&gt;
&lt;p&gt;Otimização de custos na nuvem não é uma limpeza pontual. É um hábito. E com cargas de trabalho de IA tornando os gastos menos previsíveis do que nunca, construir esse hábito cedo te poupa de surpresas dolorosas depois.&lt;/p&gt;
&lt;p&gt;Se você é um desenvolvedor .NET construindo no Azure, comece a tratar sua fatura da nuvem como trata seu código — revise regularmente, refatore quando ficar bagunçado, e nunca faça deploy sem entender quanto vai custar.&lt;/p&gt;</content:encoded></item><item><title>As ferramentas Azure MCP agora vêm integradas no Visual Studio 2022 — Sem extensão necessária</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</guid><description>As ferramentas Azure MCP são distribuídas como parte da carga de trabalho de desenvolvimento Azure no Visual Studio 2022. Mais de 230 ferramentas, 45 serviços Azure, zero extensões para instalar.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este artigo foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Se você tem usado as ferramentas Azure MCP no Visual Studio através da extensão separada, já conhece o processo — instalar o VSIX, reiniciar, torcer para não quebrar, gerenciar incompatibilidades de versão. Essa fricção acabou.&lt;/p&gt;
&lt;p&gt;Yun Jung Choi &lt;a href="https://devblogs.microsoft.com/visualstudio/azure-mcp-tools-now-ship-built-into-visual-studio-2022-no-extension-required/"&gt;anunciou&lt;/a&gt; que as ferramentas Azure MCP agora são distribuídas diretamente como parte da carga de trabalho de desenvolvimento Azure no Visual Studio 2022. Sem extensão. Sem VSIX. Sem a dança do reiniciar.&lt;/p&gt;
&lt;h2 id="o-que-isso-realmente-significa"&gt;O que isso realmente significa&lt;/h2&gt;
&lt;p&gt;A partir do Visual Studio 2022 versão 17.14.30, o Azure MCP Server vem incluído na carga de trabalho de desenvolvimento Azure. Se você já tem essa carga de trabalho instalada, basta ativá-lo no GitHub Copilot Chat e pronto.&lt;/p&gt;
&lt;p&gt;Mais de 230 ferramentas em 45 serviços Azure — acessíveis diretamente pela janela de chat. Liste suas contas de armazenamento, faça deploy de uma app ASP.NET Core, diagnostique problemas no App Service, consulte o Log Analytics — tudo sem abrir uma aba do navegador.&lt;/p&gt;
&lt;h2 id="por-que-isso-importa-mais-do-que-parece"&gt;Por que isso importa mais do que parece&lt;/h2&gt;
&lt;p&gt;A questão com ferramentas de desenvolvimento é a seguinte: cada passo extra é fricção, e fricção mata a adoção. Ter o MCP como extensão separada significava incompatibilidades de versão, falhas na instalação e mais uma coisa para manter atualizada. Integrá-lo na carga de trabalho significa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Um único caminho de atualização&lt;/strong&gt; pelo Visual Studio Installer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sem divergência de versões&lt;/strong&gt; entre a extensão e a IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sempre atualizado&lt;/strong&gt; — o MCP Server é atualizado com os releases regulares do VS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para equipes que padronizam no Azure, isso é muito relevante. Você instala a carga de trabalho uma vez, ativa as ferramentas, e elas estão lá para cada sessão.&lt;/p&gt;
&lt;h2 id="o-que-você-pode-fazer-com-isso"&gt;O que você pode fazer com isso&lt;/h2&gt;
&lt;p&gt;As ferramentas cobrem todo o ciclo de vida do desenvolvimento através do Copilot Chat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aprender&lt;/strong&gt; — pergunte sobre serviços Azure, boas práticas, padrões de arquitetura&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Projetar e desenvolver&lt;/strong&gt; — obtenha recomendações de serviços, configure o código da sua aplicação&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fazer deploy&lt;/strong&gt; — provisione recursos e faça deploy diretamente pela IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Solucionar problemas&lt;/strong&gt; — consulte logs, verifique a saúde dos recursos, diagnostique problemas em produção&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Um exemplo rápido — digite isso no Copilot Chat:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;List my storage accounts in my current subscription.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;O Copilot chama as ferramentas Azure MCP por trás dos panos, consulta suas assinaturas e retorna uma lista formatada com nomes, localizações e SKUs. Sem precisar do portal.&lt;/p&gt;
&lt;h2 id="como-ativar"&gt;Como ativar&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Atualize para o Visual Studio 2022 &lt;strong&gt;17.14.30&lt;/strong&gt; ou superior&lt;/li&gt;
&lt;li&gt;Certifique-se de que a carga de trabalho &lt;strong&gt;Azure development&lt;/strong&gt; está instalada&lt;/li&gt;
&lt;li&gt;Abra o GitHub Copilot Chat&lt;/li&gt;
&lt;li&gt;Clique no botão &lt;strong&gt;Select tools&lt;/strong&gt; (o ícone das duas chaves)&lt;/li&gt;
&lt;li&gt;Ative o &lt;strong&gt;Azure MCP Server&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;É isso. Fica ativado entre sessões.&lt;/p&gt;
&lt;h2 id="um-detalhe"&gt;Um detalhe&lt;/h2&gt;
&lt;p&gt;As ferramentas vêm desativadas por padrão — você precisa ativá-las manualmente. E as ferramentas específicas do VS 2026 não estão disponíveis no VS 2022. A disponibilidade das ferramentas também depende das permissões da sua assinatura Azure, assim como no portal.&lt;/p&gt;
&lt;h2 id="o-cenário-geral"&gt;O cenário geral&lt;/h2&gt;
&lt;p&gt;Isso faz parte de uma tendência clara: o MCP está se tornando o padrão para expor ferramentas de nuvem nas IDEs de desenvolvimento. Já vimos o &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;lançamento estável do Azure MCP Server 2.0&lt;/a&gt; e integrações MCP no VS Code e em outros editores. Tê-lo integrado no sistema de cargas de trabalho do Visual Studio é a evolução natural.&lt;/p&gt;
&lt;p&gt;Para nós desenvolvedores .NET que vivemos no Visual Studio, isso elimina mais um motivo para trocar de contexto para o portal Azure. E sinceramente, quanto menos troca de abas, melhor.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 ganha MongoDB EF Core e Azure Data Lake — Duas integrações que vale a pena experimentar</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</guid><description>Aspire 13.2 adiciona integrações de MongoDB Entity Framework Core e Azure Data Lake Storage com health checks e service discovery sem configuração. Veja como ficam na prática.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aspire 13.2 acabou de chegar com &lt;a href="https://devblogs.microsoft.com/aspire/aspire-new-database-integrations/"&gt;duas novas integrações de banco de dados&lt;/a&gt; que merecem sua atenção: MongoDB Entity Framework Core e Azure Data Lake Storage. Se você queria usar EF Core com MongoDB em uma app Aspire, ou precisava conectar workloads de data lake com service discovery, esta versão entrega as duas coisas.&lt;/p&gt;
&lt;h2 id="mongodb-encontra-ef-core-no-aspire"&gt;MongoDB encontra EF Core no Aspire&lt;/h2&gt;
&lt;p&gt;Essa é a que mais me empolga. O Aspire já suportava MongoDB há um tempo, mas sempre foi com o driver direto — sem EF Core, sem &lt;code&gt;DbContext&lt;/code&gt;, sem consultas LINQ nos seus documentos. Agora você tem a experiência completa do EF Core com MongoDB, mais os health checks automáticos e o service discovery do Aspire.&lt;/p&gt;
&lt;p&gt;A configuração segue o padrão típico do Aspire. No seu AppHost:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;mongodb&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithDataVolume&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithLifetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ContainerLifetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Persistent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;apiService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ApiService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mongodb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Depois no seu projeto consumidor, adicione a integração EF Core:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Aspire.MongoDB.EntityFrameworkCore
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;E registre seu &lt;code&gt;DbContext&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;mydb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A partir daí, é EF Core padrão. Defina suas entidades, use seu &lt;code&gt;DbContext&lt;/code&gt; como faria com qualquer outro provider. A integração cuida do connection pooling, traces OpenTelemetry e health checks nos bastidores.&lt;/p&gt;
&lt;p&gt;Para desenvolvedores .NET que estavam usando MongoDB com o driver direto e configurando connection strings manualmente, essa é uma ótima melhoria. Você ganha a abstração completa do EF Core sem perder o service discovery do Aspire.&lt;/p&gt;
&lt;h2 id="azure-data-lake-storage-entra-na-jogada"&gt;Azure Data Lake Storage entra na jogada&lt;/h2&gt;
&lt;p&gt;A segunda grande adição é uma &lt;a href="https://aspire.dev/integrations/cloud/azure/azure-storage-datalake/"&gt;integração Azure Data Lake Storage (ADLS)&lt;/a&gt;. Se você está construindo pipelines de dados, processos ETL ou plataformas de analytics, agora pode conectar recursos de Data Lake da mesma forma que conectaria qualquer outra dependência do Aspire.&lt;/p&gt;
&lt;p&gt;No AppHost:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureStorage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;azure-storage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;dataLake&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;fileSystem&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLakeFileSystem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;analyticsService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AnalyticsService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;analytics&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataLake&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileSystem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;No projeto consumidor:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeServiceClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeFileSystemClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sem gerenciamento manual de connection strings, sem caçar credenciais. O Aspire provisiona os recursos e os injeta. Para quem constrói apps .NET cloud-native que lidam tanto com dados operacionais quanto com workloads analíticos, isso faz o data lake parecer um cidadão de primeira classe no modelo do Aspire.&lt;/p&gt;
&lt;h2 id="as-pequenas-correções-que-importam"&gt;As pequenas correções que importam&lt;/h2&gt;
&lt;p&gt;Além das funcionalidades principais, há algumas melhorias que valem a menção:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Correção do connection string do MongoDB&lt;/strong&gt; — a barra antes do nome do banco de dados agora é tratada corretamente. Se você tinha um workaround, pode removê-lo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exports do SQL Server&lt;/strong&gt; — &lt;code&gt;Aspire.Hosting.SqlServer&lt;/code&gt; agora exporta opções adicionais de configuração do servidor para um controle mais granular&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Atualizações de emuladores&lt;/strong&gt; — emulador do ServiceBus 2.0.0, emulador do App Configuration 1.0.2, e o emulador preview do CosmosDB agora inclui uma verificação de disponibilidade&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Azure Managed Redis&lt;/strong&gt; — agora usa &lt;code&gt;rediss://&lt;/code&gt; (Redis Secure) por padrão, então as conexões são criptografadas desde o início&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essa última é sutil mas importante — Redis criptografado por padrão significa uma coisa a menos para configurar em produção.&lt;/p&gt;
&lt;h2 id="concluindo"&gt;Concluindo&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 é uma versão incremental, mas as integrações de MongoDB EF Core e Data Lake preenchem lacunas reais. Se você estava esperando suporte adequado de EF Core com MongoDB no Aspire, ou precisava do Data Lake como dependência de primeira classe, &lt;a href="https://get.aspire.dev"&gt;atualize para a 13.2&lt;/a&gt; e teste. O comando &lt;code&gt;aspire add&lt;/code&gt; gera tudo o que você precisa.&lt;/p&gt;
&lt;p&gt;Leia as &lt;a href="https://aspire.dev/whats-new/aspire-13-2/#-integrations-updates"&gt;notas de versão completas&lt;/a&gt; para mais detalhes, e confira a &lt;a href="https://aspire.dev/integrations/gallery/"&gt;galeria de integrações&lt;/a&gt; para a lista completa.&lt;/p&gt;</content:encoded></item><item><title>azd update — Um único comando para todos os seus gerenciadores de pacotes</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>O Azure Developer CLI agora tem um comando de atualização universal que funciona independentemente de como você o instalou — winget, Homebrew, Chocolatey ou script de instalação.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sabe aquela mensagem &amp;ldquo;Uma nova versão do azd está disponível&amp;rdquo; que aparece a cada poucas semanas? Aquela que você ignora porque não lembra se instalou o &lt;code&gt;azd&lt;/code&gt; via winget, Homebrew ou aquele script curl que rodou há seis meses? Pois é, isso finalmente foi resolvido.&lt;/p&gt;
&lt;p&gt;A Microsoft acabou de lançar o &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt; — um único comando que atualiza o Azure Developer CLI para a versão mais recente, independentemente de como você o instalou originalmente. Windows, macOS, Linux — não importa. Um comando só.&lt;/p&gt;
&lt;h2 id="como-funciona"&gt;Como funciona&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;É isso. Se você quer acesso antecipado a novas funcionalidades, pode mudar para o build diário de insiders:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel daily
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel stable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;O comando detecta seu método de instalação atual e usa o mecanismo de atualização apropriado por baixo dos panos. Chega de &amp;ldquo;espera, eu usei winget ou choco nessa máquina?&amp;rdquo;&lt;/p&gt;
&lt;h2 id="o-pequeno-detalhe"&gt;O pequeno detalhe&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt; está disponível a partir da versão 1.23.x. Se você está em uma versão anterior, vai precisar fazer uma última atualização manual usando seu método de instalação original. Depois disso, o &lt;code&gt;azd update&lt;/code&gt; cuida de tudo dali em diante.&lt;/p&gt;
&lt;p&gt;Verifique sua versão atual com &lt;code&gt;azd version&lt;/code&gt;. Se precisar de uma instalação do zero, a &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;documentação de instalação&lt;/a&gt; te ajuda.&lt;/p&gt;
&lt;h2 id="por-que-isso-importa"&gt;Por que isso importa&lt;/h2&gt;
&lt;p&gt;É uma pequena melhoria de qualidade de vida, mas para quem usa &lt;code&gt;azd&lt;/code&gt; diariamente para fazer deploy de agentes de IA e apps Aspire no Azure, estar atualizado significa menos momentos de &amp;ldquo;esse bug já tinha sido corrigido na última versão&amp;rdquo;. Uma coisa a menos para se preocupar.&lt;/p&gt;
&lt;p&gt;Leia o &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;anúncio completo&lt;/a&gt; e a &lt;a href="https://blog.jongallant.com/2026/04/azd-update"&gt;análise mais detalhada&lt;/a&gt; do Jon Gallant para mais contexto.&lt;/p&gt;</content:encoded></item><item><title>Azure Smart Tier em GA — Otimização automática de custos no Blob Storage sem regras de ciclo de vida</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</guid><description>O smart tier do Azure Blob Storage agora está em disponibilidade geral, movendo objetos automaticamente entre os níveis hot, cool e cold com base nos padrões reais de acesso — sem necessidade de regras de ciclo de vida.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Se você já passou tempo ajustando as políticas de ciclo de vida do Azure Blob Storage e depois viu tudo desmoronar quando os padrões de acesso mudaram, isso aqui é para você. A Microsoft acabou de anunciar a &lt;a href="https://azure.microsoft.com/en-us/blog/optimize-object-storage-costs-automatically-with-smart-tier-now-generally-available/"&gt;disponibilidade geral do smart tier&lt;/a&gt; para Azure Blob e Data Lake Storage — uma capacidade de tiering totalmente gerenciada que move objetos automaticamente entre os níveis hot, cool e cold com base no uso real.&lt;/p&gt;
&lt;h2 id="o-que-o-smart-tier-realmente-faz"&gt;O que o smart tier realmente faz&lt;/h2&gt;
&lt;p&gt;O conceito é direto: o smart tier avalia continuamente o último horário de acesso de cada objeto na sua conta de armazenamento. Dados acessados frequentemente ficam em hot, dados inativos passam para cool após 30 dias, e depois para cold após mais 60 dias. Quando os dados são acessados novamente, são promovidos de volta para hot imediatamente. O ciclo recomeça.&lt;/p&gt;
&lt;p&gt;Sem regras de ciclo de vida para configurar. Sem previsões de padrões de acesso. Sem ajustes manuais.&lt;/p&gt;
&lt;p&gt;Durante a preview, a Microsoft reportou que &lt;strong&gt;mais de 50% da capacidade gerenciada pelo smart tier foi automaticamente movida para níveis mais frios&lt;/strong&gt; com base nos padrões reais de acesso. É uma redução de custos significativa para contas de armazenamento grandes.&lt;/p&gt;
&lt;h2 id="por-que-isso-importa-para-desenvolvedores-net"&gt;Por que isso importa para desenvolvedores .NET&lt;/h2&gt;
&lt;p&gt;Se você está construindo aplicações que geram logs, telemetria, dados analíticos, ou qualquer tipo de patrimônio de dados em crescimento — e sejamos honestos, quem não está? — os custos de armazenamento se acumulam rápido. A abordagem tradicional era escrever políticas de gerenciamento de ciclo de vida, testá-las e depois reajustá-las quando os padrões de acesso da sua aplicação mudavam. O smart tier elimina todo esse fluxo de trabalho.&lt;/p&gt;
&lt;p&gt;Alguns cenários práticos onde isso ajuda:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Telemetria e logs de aplicações&lt;/strong&gt; — hot durante a depuração, raramente acessados depois de algumas semanas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pipelines de dados e saídas de ETL&lt;/strong&gt; — acessados intensamente durante o processamento, depois majoritariamente cold&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conteúdo gerado por usuários&lt;/strong&gt; — uploads recentes ficam em hot, conteúdo mais antigo esfria gradualmente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dados de backup e arquivamento&lt;/strong&gt; — acessados ocasionalmente para conformidade, na maioria das vezes inativos&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="como-configurar"&gt;Como configurar&lt;/h2&gt;
&lt;p&gt;Habilitar o smart tier é uma configuração única:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Contas novas&lt;/strong&gt;: Selecione smart tier como o nível de acesso padrão durante a criação da conta de armazenamento (redundância zonal necessária)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contas existentes&lt;/strong&gt;: Mude o nível de acesso de blob da sua configuração padrão atual para smart tier&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Objetos menores que 128 KiB ficam em hot e não geram a taxa de monitoramento. Para todo o resto, você paga as taxas padrão de capacidade hot/cool/cold sem cobranças de transição de nível, sem penalidades de exclusão antecipada e sem custos de recuperação de dados. Uma taxa mensal de monitoramento por objeto cobre a orquestração.&lt;/p&gt;
&lt;h2 id="o-trade-off-que-você-precisa-conhecer"&gt;O trade-off que você precisa conhecer&lt;/h2&gt;
&lt;p&gt;As regras de tiering do smart tier são estáticas (30 dias → cool, 90 dias → cold). Se você precisa de limites personalizados — digamos, mover para cool após 7 dias para uma carga de trabalho específica — as regras de ciclo de vida continuam sendo o caminho. E não misture os dois: evite usar regras de ciclo de vida em objetos gerenciados pelo smart tier, pois eles podem entrar em conflito.&lt;/p&gt;
&lt;h2 id="conclusão"&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Isso não é revolucionário, mas resolve uma dor de cabeça operacional real. Se você gerencia contas de blob storage em crescimento e está cansado de manter políticas de ciclo de vida, &lt;a href="https://learn.microsoft.com/en-us/azure/storage/blobs/access-tiers-smart"&gt;habilite o smart tier&lt;/a&gt; e deixe o Azure cuidar disso. Está disponível hoje em quase todas as regiões zonais da nuvem pública.&lt;/p&gt;</content:encoded></item><item><title>Onde hospedar seus agentes de IA no Azure? Um guia prático de decisão</title><link>https://thedotnetblog.com/pt/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/pt/news/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</guid><description>O Azure oferece seis formas de hospedar agentes de IA — de containers brutos a Foundry Hosted Agents totalmente gerenciados. Veja como escolher a opção certa para sua carga de trabalho .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Se você está construindo agentes de IA com .NET agora, provavelmente notou algo: existem &lt;em&gt;muitas&lt;/em&gt; formas de hospedá-los no Azure. Container Apps, AKS, Functions, App Service, Foundry Agents, Foundry Hosted Agents — e todos parecem razoáveis até você precisar escolher um. A Microsoft acabou de publicar um &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;guia completo sobre hospedagem de agentes IA no Azure&lt;/a&gt; que esclarece isso, e eu quero detalhar tudo pela perspectiva prática de um desenvolvedor .NET.&lt;/p&gt;
&lt;h2 id="as-seis-opções-de-relance"&gt;As seis opções de relance&lt;/h2&gt;
&lt;p&gt;Aqui está como eu resumiria o cenário:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opção&lt;/th&gt;
&lt;th&gt;Melhor para&lt;/th&gt;
&lt;th&gt;Você gerencia&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;Controle total de containers sem complexidade K8s&lt;/td&gt;
&lt;td&gt;Observabilidade, estado, ciclo de vida&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AKS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Compliance empresarial, multi-cluster, rede customizada&lt;/td&gt;
&lt;td&gt;Tudo (esse é o ponto)&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;Tarefas de agentes curtas e orientadas a eventos&lt;/td&gt;
&lt;td&gt;Quase nada — serverless real&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;Agentes HTTP simples, tráfego previsível&lt;/td&gt;
&lt;td&gt;Deploy, config de scaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agentes sem código via portal/SDK&lt;/td&gt;
&lt;td&gt;Quase nada&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;Agentes com framework customizado e infra gerenciada&lt;/td&gt;
&lt;td&gt;Apenas seu código de agente&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;As quatro primeiras são computação de propósito geral — você &lt;em&gt;pode&lt;/em&gt; rodar agentes nelas, mas não foram projetadas para isso. As duas últimas são nativas de agentes: entendem conversas, chamadas de ferramentas e ciclos de vida de agentes como conceitos de primeira classe.&lt;/p&gt;
&lt;h2 id="foundry-hosted-agents--o-ponto-ideal-para-desenvolvedores-net-de-agentes"&gt;Foundry Hosted Agents — o ponto ideal para desenvolvedores .NET de agentes&lt;/h2&gt;
&lt;p&gt;Isso foi o que chamou minha atenção. Foundry Hosted Agents ficam bem no meio: você tem a flexibilidade de rodar seu próprio código (Semantic Kernel, Agent Framework, LangGraph — o que for) mas a plataforma cuida da infraestrutura, observabilidade e gerenciamento de conversas.&lt;/p&gt;
&lt;p&gt;A peça-chave é o &lt;strong&gt;Hosting Adapter&lt;/strong&gt; — uma camada de abstração fina que conecta seu framework de agentes à plataforma Foundry. Para o Microsoft Agent Framework, fica assim:&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;Essa é toda a sua história de hosting. O adapter cuida da tradução de protocolos, streaming via server-sent events, histórico de conversa e rastreamento OpenTelemetry — tudo automaticamente. Sem middleware customizado, sem encanamento manual.&lt;/p&gt;
&lt;h2 id="deploy-é-genuinamente-simples"&gt;Deploy é genuinamente simples&lt;/h2&gt;
&lt;p&gt;Já fiz deploy de agentes no Container Apps antes e funciona, mas você acaba escrevendo muito código de cola para gerenciamento de estado e observabilidade. Com Hosted Agents e &lt;code&gt;azd&lt;/code&gt;, o 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;# Instalar a extensão de 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;# Inicializar a partir de um 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;# Construir, enviar, fazer deploy — pronto&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;Esse único &lt;code&gt;azd up&lt;/code&gt; constrói seu container, envia para o ACR, provisiona o projeto Foundry, faz deploy dos endpoints de modelo e inicia seu agente. Cinco etapas condensadas em um único comando.&lt;/p&gt;
&lt;h2 id="gerenciamento-de-conversas-integrado"&gt;Gerenciamento de conversas integrado&lt;/h2&gt;
&lt;p&gt;Essa é a parte que economiza mais tempo em produção. Em vez de construir seu próprio store de estado de conversa, Hosted Agents lidam com isso 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;# Criar uma conversa 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;# Primeira rodada&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;# Segunda rodada — contexto é preservado&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;Sem Redis. Sem store de sessões Cosmos DB. Sem middleware customizado para serialização de mensagens. A plataforma simplesmente cuida disso.&lt;/p&gt;
&lt;h2 id="meu-framework-de-decisão"&gt;Meu framework de decisão&lt;/h2&gt;
&lt;p&gt;Depois de passar pelas seis opções, aqui está meu modelo mental rápido:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Precisa de zero infraestrutura?&lt;/strong&gt; → Foundry Agents (portal/SDK, sem containers)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tem código de agente customizado mas quer hosting gerenciado?&lt;/strong&gt; → Foundry Hosted Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Precisa de tarefas de agentes curtas orientadas a eventos?&lt;/strong&gt; → Azure Functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Precisa de máximo controle de containers sem K8s?&lt;/strong&gt; → Container Apps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Precisa de compliance rigorosa e multi-cluster?&lt;/strong&gt; → AKS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tem um agente HTTP simples com tráfego previsível?&lt;/strong&gt; → App Service&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Para a maioria dos desenvolvedores .NET construindo com Semantic Kernel ou Microsoft Agent Framework, Hosted Agents é provavelmente o ponto de partida certo. Você obtém scale-to-zero, OpenTelemetry integrado, gerenciamento de conversas e flexibilidade de framework — sem gerenciar Kubernetes ou montar sua própria stack de observabilidade.&lt;/p&gt;
&lt;h2 id="para-finalizar"&gt;Para finalizar&lt;/h2&gt;
&lt;p&gt;O cenário de hospedagem de agentes no Azure está amadurecendo rápido. Se você está começando um novo projeto de agente IA hoje, eu consideraria seriamente Foundry Hosted Agents antes de recorrer a Container Apps ou AKS por hábito. A infraestrutura gerenciada economiza tempo real, e o padrão hosting adapter permite manter sua escolha de framework.&lt;/p&gt;
&lt;p&gt;Confira o &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;guia completo da Microsoft&lt;/a&gt; e o &lt;a href="https://github.com/microsoft-foundry/foundry-samples/tree/main/samples/python/hosted-agents"&gt;repo Foundry Samples&lt;/a&gt; para exemplos funcionais.&lt;/p&gt;</content:encoded></item><item><title>As Agent Skills no .NET ficaram realmente flexíveis</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</guid><description>O Microsoft Agent Framework agora suporta três formas de criar skills — arquivos, classes e código inline — todas compostas através de um único provider. Aqui explico por que isso importa e como usar cada uma.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este artigo foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Se você tem construído agentes com o Microsoft Agent Framework, já conhece o processo: define skills, conecta a um provider e deixa o agente decidir qual invocar. O que há de novo é &lt;em&gt;como&lt;/em&gt; você cria essas skills — e o salto em flexibilidade é significativo.&lt;/p&gt;
&lt;p&gt;A última atualização introduz três padrões de autoria para agent skills: &lt;strong&gt;baseadas em arquivos&lt;/strong&gt;, &lt;strong&gt;baseadas em classes&lt;/strong&gt; e &lt;strong&gt;definidas em código inline&lt;/strong&gt;. As três se conectam a um único &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;, o que significa que você pode misturar e combinar sem lógica de roteamento nem código especial. Vou te mostrar cada uma e quando usar.&lt;/p&gt;
&lt;h2 id="skills-baseadas-em-arquivos-o-ponto-de-partida"&gt;Skills baseadas em arquivos: o ponto de partida&lt;/h2&gt;
&lt;p&gt;Skills baseadas em arquivos são exatamente o que parecem — um diretório no disco com um arquivo &lt;code&gt;SKILL.md&lt;/code&gt;, scripts opcionais e documentos de referência. A forma mais direta de dar novas capacidades ao seu agente:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;skills/
└── onboarding-guide/
├── SKILL.md
├── scripts/
│ └── check-provisioning.py
└── references/
└── onboarding-checklist.md
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;O frontmatter do &lt;code&gt;SKILL.md&lt;/code&gt; declara o nome e descrição, e a seção de instruções diz ao agente como usar os scripts e referências:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;name: onboarding-guide
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: &amp;gt;-
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Walk new hires through their first-week setup checklist.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Instructions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;1.&lt;/span&gt; Ask for the employee&amp;#39;s name and start date.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Run &lt;span class="sb"&gt;`scripts/check-provisioning.py`&lt;/span&gt; to verify accounts.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; Walk through &lt;span class="sb"&gt;`references/onboarding-checklist.md`&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;4.&lt;/span&gt; Follow up on incomplete items.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Depois você conecta com &lt;code&gt;SubprocessScriptRunner.RunAsync&lt;/code&gt; para execução de scripts:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetResponsesClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChatClientAgentOptions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;HRAgent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ChatOptions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Instructions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;You are a helpful HR assistant.&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AIContextProviders&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;skillsProvider&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;deploymentName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;O agente descobre a skill automaticamente e invoca o script de provisioning quando precisa verificar o status das contas. Limpo e simples.&lt;/p&gt;
&lt;h2 id="skills-baseadas-em-classes-distribuir-via-nuget"&gt;Skills baseadas em classes: distribuir via NuGet&lt;/h2&gt;
&lt;p&gt;Aqui é onde fica interessante para times. Skills baseadas em classes derivam de &lt;code&gt;AgentClassSkill&amp;lt;T&amp;gt;&lt;/code&gt; e usam atributos como &lt;code&gt;[AgentSkillResource]&lt;/code&gt; e &lt;code&gt;[AgentSkillScript]&lt;/code&gt; para que o framework descubra tudo por reflexão:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;sealed&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BenefitsEnrollmentSkill&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AgentClassSkill&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;override&lt;/span&gt; &lt;span class="n"&gt;AgentSkillFrontmatter&lt;/span&gt; &lt;span class="n"&gt;Frontmatter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;benefits-enrollment&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Enroll an employee in health, dental, or vision plans.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;protected&lt;/span&gt; &lt;span class="kd"&gt;override&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Instructions&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;1.&lt;/span&gt; &lt;span class="n"&gt;Read&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;available&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;plans&lt;/span&gt; &lt;span class="n"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2.&lt;/span&gt; &lt;span class="n"&gt;Confirm&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;plan&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;employee&lt;/span&gt; &lt;span class="n"&gt;wants&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;3.&lt;/span&gt; &lt;span class="n"&gt;Use&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;enroll&lt;/span&gt; &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;complete&lt;/span&gt; &lt;span class="n"&gt;enrollment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [AgentSkillResource(&amp;#34;available-plans&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [Description(&amp;#34;Plan options with monthly pricing.&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;AvailablePlans&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;##&lt;/span&gt; &lt;span class="n"&gt;Available&lt;/span&gt; &lt;span class="n"&gt;Plans&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Health&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Basic&lt;/span&gt; &lt;span class="n"&gt;HMO&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;Premium&lt;/span&gt; &lt;span class="n"&gt;PPO&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;45&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Dental&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Standard&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;Enhanced&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Vision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Basic&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [AgentSkillScript(&amp;#34;enroll&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [Description(&amp;#34;Enrolls employee in the specified benefit plan.&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Enroll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;planCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EnrollInPlan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;planCode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;JsonSerializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;planCode&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;O legal é que um time pode empacotar isso como pacote NuGet. Você adiciona ao projeto, coloca no builder e funciona junto com suas skills de arquivo sem coordenação:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProviderBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileScriptRunner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ambas as skills aparecem no system prompt do agente. O agente decide qual usar baseado na conversa — sem código de roteamento.&lt;/p&gt;
&lt;h2 id="skills-inline-a-ponte-rápida"&gt;Skills inline: a ponte rápida&lt;/h2&gt;
&lt;p&gt;Sabe aquele momento quando outro time está construindo exatamente a skill que você precisa, mas só vai ficar pronta no próximo sprint? &lt;code&gt;AgentInlineSkill&lt;/code&gt; é sua ponte:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;timeOffSkill&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentInlineSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;time-off-balance&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Calculate remaining vacation and sick days.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;1.&lt;/span&gt; &lt;span class="n"&gt;Ask&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;employee&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;provided&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2.&lt;/span&gt; &lt;span class="n"&gt;Use&lt;/span&gt; &lt;span class="n"&gt;calculate&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;3.&lt;/span&gt; &lt;span class="n"&gt;Present&lt;/span&gt; &lt;span class="n"&gt;used&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="n"&gt;clearly&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddScript&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;calculate-balance&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;totalDays&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrDatabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetAnnualAllowance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;daysUsed&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrDatabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetDaysUsed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;totalDays&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;daysUsed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;JsonSerializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;totalDays&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;daysUsed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Adicione ao builder assim como as outras:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProviderBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeOffSkill&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileScriptRunner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Quando o pacote NuGet finalmente sair, você troca a skill inline pela versão baseada em classe. O agente não percebe a diferença.&lt;/p&gt;
&lt;p&gt;Mas skills inline não são só para pontes. Também são a escolha certa quando você precisa gerar skills dinamicamente em runtime — pense em uma skill por unidade de negócio carregada de configuração — ou quando um script precisa capturar estado local que não pertence a um contêiner DI.&lt;/p&gt;
&lt;h2 id="aprovação-de-scripts-humano-no-loop"&gt;Aprovação de scripts: humano no loop&lt;/h2&gt;
&lt;p&gt;Para nós desenvolvedores .NET construindo agentes de produção, essa é a parte que realmente desbloqueia conversas de deploy. Alguns scripts têm consequências reais — inscrever alguém em benefícios, consultar infraestrutura de produção. Ative &lt;code&gt;UseScriptApproval&lt;/code&gt; e o agente pausa antes de executar qualquer script:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProviderBuilder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeOffSkill&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFileScriptRunner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseScriptApproval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Quando o agente quer executar um script, retorna um pedido de aprovação. Seu app coleta a decisão — aprovar ou rejeitar — e o agente continua. Em ambientes regulados, essa é a diferença entre &amp;ldquo;podemos fazer deploy disso&amp;rdquo; e &amp;ldquo;o jurídico disse não.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="por-que-essa-combinação-importa"&gt;Por que essa combinação importa&lt;/h2&gt;
&lt;p&gt;O verdadeiro poder não está em nenhum padrão individual — está na composição. Você pode:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Começar pequeno&lt;/strong&gt; com uma skill de arquivo, iterar nas instruções e publicar sem escrever C#&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distribuir skills reutilizáveis&lt;/strong&gt; como pacotes NuGet que outros times adicionam com uma linha&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cobrir lacunas&lt;/strong&gt; com skills inline quando precisa de algo &lt;em&gt;agora&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filtrar diretórios compartilhados&lt;/strong&gt; com predicados para que seu agente só carregue o que deve&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adicionar supervisão humana&lt;/strong&gt; para scripts que tocam sistemas de produção&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tudo isso se compõe via &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;. Sem roteamento especial, sem lógica condicional, sem verificações de tipo de skill.&lt;/p&gt;
&lt;h2 id="para-encerrar"&gt;Para encerrar&lt;/h2&gt;
&lt;p&gt;As agent skills no .NET agora têm um modelo de autoria genuinamente flexível. Seja você um desenvolvedor solo prototipando com skills de arquivo ou um time enterprise distribuindo capacidades empacotadas via NuGet, os padrões se encaixam. E o mecanismo de aprovação de scripts o torna pronto para produção em ambientes onde você precisa daquele checkpoint humano.&lt;/p&gt;
&lt;p&gt;Confira o &lt;a href="https://devblogs.microsoft.com/agent-framework/agent-skills-in-net-three-ways-to-author-one-provider-to-run-them/"&gt;anúncio original&lt;/a&gt;, a &lt;a href="https://learn.microsoft.com/en-us/agent-framework/agents/skills"&gt;documentação de Agent Skills&lt;/a&gt; no Microsoft Learn e os &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/02-agents/AgentSkills"&gt;exemplos .NET no GitHub&lt;/a&gt; para começar.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server 2.0 Chegou — Automação Agnóstica em Nuvem Self-Hosted Está Aqui</title><link>https://thedotnetblog.com/pt/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/pt/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>Azure MCP Server 2.0 fica estável com implantações remotas self-hosted, 276 ferramentas em 57 serviços do Azure e segurança nível empresarial — aqui está o que importa para desenvolvedores .NET construindo fluxos de trabalho agnósticos.</description><content:encoded>&lt;p&gt;&lt;em&gt;Este artigo foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Se você vem construindo algo com MCP e Azure ultimamente, provavelmente já sabe que a experiência local funciona bem. Coloque um servidor MCP, deixe seu agente IA falar com recursos do Azure, siga em frente. Mas no momento em que você precisa compartilhar essa configuração com um time? É aí que as coisas ficavam complicadas.&lt;/p&gt;
&lt;p&gt;Não mais. Azure MCP Server &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;acabou de atingir a versão 2.0 estável&lt;/a&gt;, e a feature principal é exatamente o que times empresariais estão pedindo: &lt;strong&gt;suporte para servidor MCP remoto self-hosted&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="o-que-é-azure-mcp-server"&gt;O que é Azure MCP Server?&lt;/h2&gt;
&lt;p&gt;Um rápido refresco. Azure MCP Server implementa a especificação do &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;Model Context Protocol&lt;/a&gt; e expõe capacidades do Azure como ferramentas estruturadas e descobríveis que agentes IA podem invocar. Pense nisto como uma ponte padronizada entre seu agente e o Azure — provisionamento, implantação, monitoramento, diagnósticos, tudo através de uma interface consistente.&lt;/p&gt;
&lt;p&gt;Os números falam por si: &lt;strong&gt;276 ferramentas MCP em 57 serviços do Azure&lt;/strong&gt;. Isso é cobertura séria.&lt;/p&gt;
&lt;h2 id="o-grande-destaque-implantações-remotas-self-hosted"&gt;O grande destaque: implantações remotas self-hosted&lt;/h2&gt;
&lt;p&gt;Aqui está a questão. Executar MCP localmente na sua máquina é bom para dev e experimentos. Mas em um cenário real de time, você precisa de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Acesso compartilhado para desenvolvedores e sistemas de agentes internos&lt;/li&gt;
&lt;li&gt;Configuração centralizada (contexto de tenant, padrões de assinatura, telemetria)&lt;/li&gt;
&lt;li&gt;Limites de rede e política empresariais&lt;/li&gt;
&lt;li&gt;Integração em pipelines CI/CD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 aborda tudo isso. Você pode implantá-lo como um serviço interno gerenciado centralmente com transporte baseado em HTTP, autenticação apropriada e governança consistente.&lt;/p&gt;
&lt;p&gt;Para autenticação, você tem duas opções sólidas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Managed Identity&lt;/strong&gt; — quando em execução junto com &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;Fluxo On-Behalf-Of (OBO)&lt;/strong&gt; — delegação OpenID Connect que chama APIs do Azure usando o contexto do usuário autenticado&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Esse fluxo OBO é particularmente interessante para nós desenvolvedores .NET. Significa que seus fluxos de trabalho agnósticos podem operar com as permissões reais do usuário, não alguma conta de serviço com privilégios excessivos. Princípio do menor privilégio, embutido certo.&lt;/p&gt;
&lt;h2 id="endurecimento-de-segurança"&gt;Endurecimento de segurança&lt;/h2&gt;
&lt;p&gt;Isso não é apenas um lançamento de feature — é um de segurança também. O lançamento 2.0 adiciona:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validação de endpoint mais forte&lt;/li&gt;
&lt;li&gt;Proteções contra padrões de injeção em ferramentas orientadas a query&lt;/li&gt;
&lt;li&gt;Controles de isolamento mais rigorosos para ambientes de dev&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se você vai expor MCP como um serviço compartilhado, essas salvaguardas importam. Muito.&lt;/p&gt;
&lt;h2 id="onde-você-pode-usá-lo"&gt;Onde você pode usá-lo?&lt;/h2&gt;
&lt;p&gt;A história de compatibilidade do cliente é ampla. Azure MCP Server 2.0 funciona com:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IDEs&lt;/strong&gt;: VS Code, Visual Studio, IntelliJ, Eclipse, Cursor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agentes CLI&lt;/strong&gt;: GitHub Copilot CLI, Claude Code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: servidor local para configurações simples&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-hosted remoto&lt;/strong&gt;: a nova estrela do 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Além disso há suporte a nuvem soberana para Azure US Government e Azure operado pela 21Vianet, que é crítico para implantações reguladas.&lt;/p&gt;
&lt;h2 id="por-que-isso-importa-para-desenvolvedores-net"&gt;Por que isso importa para desenvolvedores .NET&lt;/h2&gt;
&lt;p&gt;Se você está construindo aplicações agnósticas com .NET — seja com Semantic Kernel, Microsoft Agent Framework, ou sua própria orquestração — Azure MCP Server 2.0 lhe dá uma maneira pronta para produção de deixar seus agentes interagirem com infraestrutura do Azure. Sem wrappers REST customizados. Sem padrões de integração específicos do serviço. Apenas MCP.&lt;/p&gt;
&lt;p&gt;Combinado com a &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 fluente para MCP Apps&lt;/a&gt; que saiu alguns dias atrás, o ecossistema MCP .NET está amadurecendo rapidamente.&lt;/p&gt;
&lt;h2 id="começando"&gt;Começando&lt;/h2&gt;
&lt;p&gt;Escolha seu caminho:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp"&gt;Repositório GitHub&lt;/a&gt;&lt;/strong&gt; — código fonte, documentação, tudo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/docker"&gt;Imagem Docker&lt;/a&gt;&lt;/strong&gt; — implantação containerizada&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;Extensão VS Code&lt;/a&gt;&lt;/strong&gt; — integração de IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;Guia de self-hosting&lt;/a&gt;&lt;/strong&gt; — a feature principal do 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="resumindo"&gt;Resumindo&lt;/h2&gt;
&lt;p&gt;Azure MCP Server 2.0 é exatamente o tipo de upgrade de infraestrutura que não parece vistoso em uma demo mas muda tudo na prática. MCP remoto self-hosted com autenticação apropriada, endurecimento de segurança e suporte a nuvem soberana significa que MCP está pronto para times reais construindo fluxos de trabalho agnósticos reais no Azure. Se você estava esperando o sinal &amp;ldquo;pronto para empresas&amp;rdquo; — esse é ele.&lt;/p&gt;</content:encoded></item><item><title>A avaliação de modernização do GitHub Copilot é a melhor ferramenta de migração que você ainda não está usando</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</guid><description>A extensão de modernização do GitHub Copilot não sugere apenas mudanças de código — ela produz uma avaliação completa de migração com issues acionáveis, comparações de alvos Azure e um fluxo de trabalho colaborativo. Aqui explico por que o documento de avaliação é a chave de tudo.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Migrar uma aplicação legada do .NET Framework para .NET moderno é uma daquelas tarefas que todo mundo sabe que deveria fazer, mas ninguém quer começar. Nunca é apenas &amp;ldquo;mudar o target framework.&amp;rdquo; São APIs que desapareceram, pacotes que não existem mais, modelos de hosting que funcionam de forma completamente diferente, e um milhão de pequenas decisões sobre o que containerizar, o que reescrever e o que deixar como está.&lt;/p&gt;
&lt;p&gt;Jeffrey Fritz acabou de publicar um &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;mergulho profundo na avaliação de modernização do GitHub Copilot&lt;/a&gt;, e honestamente? Este é o melhor tooling de migração que eu vi para .NET. Não pela geração de código — isso já é padrão agora. Pelo documento de avaliação que ele produz.&lt;/p&gt;
&lt;h2 id="não-é-apenas-um-motor-de-sugestões-de-código"&gt;Não é apenas um motor de sugestões de código&lt;/h2&gt;
&lt;p&gt;A extensão do VS Code segue um modelo de &lt;strong&gt;Avaliar → Planejar → Executar&lt;/strong&gt;. A fase de avaliação analisa todo o seu codebase e produz um documento estruturado que captura tudo: o que precisa mudar, quais recursos Azure provisionar, qual modelo de deploy usar. Tudo que vem depois — infraestrutura como código, containerização, manifestos de deploy — flui do que a avaliação encontra.&lt;/p&gt;
&lt;p&gt;A avaliação é armazenada em &lt;code&gt;.github/modernize/assessment/&lt;/code&gt; no seu projeto. Cada execução produz um relatório independente, então você vai construindo um histórico e pode acompanhar como sua postura de migração evolui conforme corrige issues.&lt;/p&gt;
&lt;h2 id="duas-formas-de-começar"&gt;Duas formas de começar&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Avaliação Recomendada&lt;/strong&gt; — o caminho rápido. Escolha entre domínios curados (Upgrade Java/.NET, Cloud Readiness, Segurança) e obtenha resultados significativos sem mexer em configuração. Ótimo para um primeiro olhar de onde sua aplicação está.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Avaliação Personalizada&lt;/strong&gt; — o caminho direcionado. Configure exatamente o que analisar: compute alvo (App Service, AKS, Container Apps), SO alvo, análise de containerização. Escolha múltiplos alvos Azure para comparar abordagens de migração lado a lado.&lt;/p&gt;
&lt;p&gt;Essa visão de comparação é genuinamente útil. Uma app com 3 issues obrigatórios para App Service pode ter 7 para AKS. Ver ambos ajuda a tomar a decisão de hosting antes de se comprometer com um caminho de migração.&lt;/p&gt;
&lt;h2 id="o-detalhamento-de-issues-é-acionável"&gt;O detalhamento de issues é acionável&lt;/h2&gt;
&lt;p&gt;Cada issue vem com um nível de criticidade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Obrigatório&lt;/strong&gt; — deve ser corrigido ou a migração falha&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Potencial&lt;/strong&gt; — pode impactar a migração, precisa de julgamento humano&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opcional&lt;/strong&gt; — melhorias recomendadas, não bloqueiam a migração&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E cada issue linka para arquivos afetados e números de linha, fornece uma descrição detalhada do que está errado e por que importa para sua plataforma alvo, dá passos concretos de remediação (não apenas &amp;ldquo;corrija isso&amp;rdquo;), e inclui links para documentação oficial.&lt;/p&gt;
&lt;p&gt;Você pode atribuir issues individuais a desenvolvedores e eles têm tudo que precisam para agir. Essa é a diferença entre uma ferramenta que diz &amp;ldquo;tem um problema&amp;rdquo; e uma que diz como resolver.&lt;/p&gt;
&lt;h2 id="os-caminhos-de-upgrade-cobertos"&gt;Os caminhos de upgrade cobertos&lt;/h2&gt;
&lt;p&gt;Para .NET especificamente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.NET Framework → .NET 10&lt;/li&gt;
&lt;li&gt;ASP.NET → ASP.NET Core&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada caminho de upgrade tem regras de detecção que sabem quais APIs foram removidas, quais padrões não têm equivalente direto, e quais issues de segurança precisam de atenção.&lt;/p&gt;
&lt;p&gt;Para times que gerenciam múltiplas aplicações, também há um CLI que suporta avaliações batch multi-repo — clone todos os repos, avalie todos, obtenha relatórios por app mais uma visão agregada do portfólio.&lt;/p&gt;
&lt;h2 id="minha-opinião"&gt;Minha opinião&lt;/h2&gt;
&lt;p&gt;Se você está sentado em cima de aplicações legadas em .NET Framework (e vamos ser honestos, a maioria dos times enterprise está), esta é &lt;em&gt;a&lt;/em&gt; ferramenta para começar. Só o documento de avaliação já vale o tempo — transforma um vago &amp;ldquo;deveríamos modernizar&amp;rdquo; em uma lista concreta e priorizada de itens de trabalho com caminhos claros adiante.&lt;/p&gt;
&lt;p&gt;O fluxo de trabalho colaborativo também é inteligente: exporte avaliações, compartilhe com seu time, importe-as sem re-executar. Revisões de arquitetura onde quem toma decisões não é quem roda as ferramentas? Coberto.&lt;/p&gt;
&lt;h2 id="finalizando"&gt;Finalizando&lt;/h2&gt;
&lt;p&gt;A avaliação de modernização do GitHub Copilot transforma a migração .NET de um projeto assustador e indefinido em um processo estruturado e rastreável. Comece com uma avaliação recomendada para ver onde você está, depois use avaliações personalizadas para comparar alvos Azure e construir seu plano de migração.&lt;/p&gt;
&lt;p&gt;Leia o &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;walkthrough completo&lt;/a&gt; e baixe a &lt;a href="https://aka.ms/ghcp-appmod/vscode-ext"&gt;extensão do VS Code&lt;/a&gt; para testar no seu próprio codebase.&lt;/p&gt;</content:encoded></item><item><title>A Engenharia de Plataformas Agêntica Está se Tornando Real — Git-APE Mostra Como</title><link>https://thedotnetblog.com/pt/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/pt/news/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</guid><description>O projeto Git-APE da Microsoft coloca a engenharia de plataformas agêntica em prática — usando agentes do GitHub Copilot e Azure MCP para transformar solicitações em linguagem natural em infraestrutura cloud validada.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/agentic-platform-engineering-git-ape/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Engenharia de plataformas tem sido um daqueles termos que soam ótimos em conferências, mas que normalmente significam &amp;ldquo;construímos um portal interno e um wrapper de Terraform.&amp;rdquo; A verdadeira promessa — infraestrutura self-service que seja realmente segura, governada e rápida — sempre esteve a alguns passos de distância.&lt;/p&gt;
&lt;p&gt;O time Azure acaba de publicar a &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;Parte 2 da série sobre engenharia de plataformas agêntica&lt;/a&gt;, e esta é toda sobre a implementação prática. Eles chamam de &lt;strong&gt;Git-APE&lt;/strong&gt; (sim, a sigla é intencional), e é um projeto open source que usa agentes do GitHub Copilot mais servidores Azure MCP para transformar solicitações em linguagem natural em infraestrutura validada e implantada.&lt;/p&gt;
&lt;h2 id="o-que-o-git-ape-realmente-faz"&gt;O que o Git-APE realmente faz&lt;/h2&gt;
&lt;p&gt;A ideia central: em vez de desenvolvedores aprenderem módulos Terraform, navegarem por UIs de portais ou abrirem tickets para o time de plataforma, eles conversam com um agente Copilot. O agente interpreta a intenção, gera Infrastructure-as-Code, valida contra políticas e implanta — tudo dentro do VS Code.&lt;/p&gt;
&lt;p&gt;Aqui está a configuração:&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;Abra o workspace no VS Code, e os arquivos de configuração do agente são descobertos automaticamente pelo GitHub Copilot. Você interage diretamente com o 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;O agente usa o Azure MCP Server por baixo dos panos para interagir com os serviços Azure. A configuração MCP nas opções do VS Code habilita capacidades específicas:&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="por-que-isso-importa"&gt;Por que isso importa&lt;/h2&gt;
&lt;p&gt;Para nós que construímos no Azure, isso muda a conversa de engenharia de plataformas de &amp;ldquo;como construímos um portal&amp;rdquo; para &amp;ldquo;como descrevemos nossas guardrails como APIs.&amp;rdquo; Quando a interface da sua plataforma é um agente de IA, a qualidade das suas restrições e políticas se torna o produto.&lt;/p&gt;
&lt;p&gt;O blog da Parte 1 apresentou a teoria: APIs bem descritas, schemas de controle e guardrails explícitas tornam as plataformas agent-ready. A Parte 2 prova que funciona entregando ferramentas reais. O agente não gera recursos cegamente — valida contra melhores práticas, respeita convenções de nomenclatura e aplica as políticas da sua organização.&lt;/p&gt;
&lt;p&gt;A limpeza é igualmente simples:&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="minha-opinião"&gt;Minha opinião&lt;/h2&gt;
&lt;p&gt;Vou ser honesto — aqui é mais sobre o padrão do que sobre a ferramenta específica. O Git-APE em si é uma demo/arquitetura de referência. Mas a ideia subjacente — agentes como a interface da sua plataforma, MCP como protocolo, GitHub Copilot como host — é para onde a experiência do desenvolvedor enterprise está caminhando.&lt;/p&gt;
&lt;p&gt;Se você é um time de plataforma procurando como tornar seu ferramental interno amigável para agentes, não há melhor ponto de partida. E se você é um desenvolvedor .NET se perguntando como isso se conecta ao seu mundo: o Azure MCP Server e os agentes do GitHub Copilot funcionam com qualquer workload Azure. Sua API ASP.NET Core, seu stack .NET Aspire, seus microsserviços em containers — tudo pode ser alvo de um fluxo de deploy agêntico.&lt;/p&gt;
&lt;h2 id="concluindo"&gt;Concluindo&lt;/h2&gt;
&lt;p&gt;Git-APE é um olhar inicial mas concreto sobre engenharia de plataformas agêntica na prática. Clone o &lt;a href="https://github.com/Azure/git-ape"&gt;repo&lt;/a&gt;, experimente a demo e comece a pensar em como as APIs e políticas da sua plataforma precisariam ser para que um agente as use com segurança.&lt;/p&gt;
&lt;p&gt;Leia o &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;post completo&lt;/a&gt; para o walkthrough e vídeos de demonstração.&lt;/p&gt;</content:encoded></item><item><title>Conecte seus servidores MCP no Azure Functions aos Foundry Agents — Veja como</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</guid><description>Construa seu servidor MCP uma vez, faça deploy no Azure Functions e conecte-o aos agentes Microsoft Foundry com autenticação adequada. Suas ferramentas funcionam em qualquer lugar — VS Code, Cursor e agora agentes de IA empresariais.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Isso é algo que eu amo no ecossistema MCP: você constrói seu servidor uma vez e ele funciona em qualquer lugar. VS Code, Visual Studio, Cursor, ChatGPT — cada cliente MCP pode descobrir e usar suas ferramentas. Agora, a Microsoft está adicionando mais um consumidor a essa lista: os agentes Foundry.&lt;/p&gt;
&lt;p&gt;Lily Ma da equipe do Azure SDK &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;publicou um guia prático&lt;/a&gt; sobre como conectar servidores MCP implantados no Azure Functions com agentes Microsoft Foundry. Se você já tem um servidor MCP, isso é puro valor agregado — sem necessidade de reconstruir nada.&lt;/p&gt;
&lt;h2 id="por-que-essa-combinação-faz-sentido"&gt;Por que essa combinação faz sentido&lt;/h2&gt;
&lt;p&gt;Azure Functions te dá infraestrutura escalável, autenticação integrada e cobrança serverless para hospedar servidores MCP. Microsoft Foundry te dá agentes de IA que podem raciocinar, planejar e agir. Conectar os dois significa que suas ferramentas personalizadas — consultar um banco de dados, chamar uma API de negócio, executar lógica de validação — se tornam capacidades que agentes de IA empresariais podem descobrir e usar autonomamente.&lt;/p&gt;
&lt;p&gt;O ponto-chave: seu servidor MCP continua o mesmo. Você está apenas adicionando o Foundry como mais um consumidor. As mesmas ferramentas que funcionam no seu setup do VS Code agora alimentam um agente de IA com o qual sua equipe ou clientes interagem.&lt;/p&gt;
&lt;h2 id="opções-de-autenticação"&gt;Opções de autenticação&lt;/h2&gt;
&lt;p&gt;É aqui que o post realmente agrega valor. Quatro métodos de autenticação dependendo do seu cenário:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Método&lt;/th&gt;
&lt;th&gt;Caso de uso&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Baseado em chave&lt;/strong&gt; (padrão)&lt;/td&gt;
&lt;td&gt;Desenvolvimento ou servidores sem autenticação Entra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Microsoft Entra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Produção com identidades gerenciadas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Passthrough de identidade OAuth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Produção onde cada usuário se autentica individualmente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sem autenticação&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dev/testes ou apenas dados públicos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Para produção, Microsoft Entra com identidade do agente é o caminho recomendado. O passthrough de identidade OAuth é para quando o contexto do usuário importa — o agente solicita que os usuários façam login, e cada requisição carrega o token próprio do usuário.&lt;/p&gt;
&lt;h2 id="configurando"&gt;Configurando&lt;/h2&gt;
&lt;p&gt;O fluxo geral:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Faça deploy do seu servidor MCP no Azure Functions&lt;/strong&gt; — exemplos disponíveis para &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;.NET&lt;/a&gt;, Python, TypeScript e Java&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Habilite a autenticação MCP integrada&lt;/strong&gt; na sua function app&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obtenha sua URL de endpoint&lt;/strong&gt; — &lt;code&gt;https://&amp;lt;FUNCTION_APP_NAME&amp;gt;.azurewebsites.net/runtime/webhooks/mcp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adicione o servidor MCP como ferramenta no Foundry&lt;/strong&gt; — navegue até seu agente no portal, adicione uma nova ferramenta MCP, forneça o endpoint e as credenciais&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Depois teste no playground do Agent Builder enviando um prompt que acionaria uma das suas ferramentas.&lt;/p&gt;
&lt;h2 id="minha-opinião"&gt;Minha opinião&lt;/h2&gt;
&lt;p&gt;A história de composabilidade aqui está ficando realmente forte. Construa seu servidor MCP uma vez em .NET (ou Python, TypeScript, Java), faça deploy no Azure Functions, e cada cliente compatível com MCP pode usá-lo — ferramentas de programação, apps de chat, e agora agentes de IA empresariais. É um padrão &amp;ldquo;escreva uma vez, use em qualquer lugar&amp;rdquo; que realmente funciona.&lt;/p&gt;
&lt;p&gt;Para desenvolvedores .NET especificamente, a &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;extensão MCP do Azure Functions&lt;/a&gt; torna isso simples. Você define suas ferramentas como Azure Functions, faz deploy, e tem um servidor MCP de nível de produção com toda a segurança e escalabilidade que o Azure Functions proporciona.&lt;/p&gt;
&lt;h2 id="finalizando"&gt;Finalizando&lt;/h2&gt;
&lt;p&gt;Se você tem ferramentas MCP rodando no Azure Functions, conectá-las aos agentes Foundry é uma vitória rápida — suas ferramentas personalizadas se tornam capacidades de IA empresarial com autenticação adequada e sem alterações de código no servidor.&lt;/p&gt;
&lt;p&gt;Leia o &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;guia completo&lt;/a&gt; para instruções passo a passo sobre cada método de autenticação, e confira a &lt;a href="https://learn.microsoft.com/azure/azure-functions/functions-mcp-foundry-tools?tabs=entra%2Cmcp-extension%2Cfoundry"&gt;documentação detalhada&lt;/a&gt; para configurações de produção.&lt;/p&gt;</content:encoded></item><item><title>Construindo UIs Multi-Agente em Tempo Real Que Não Parecem uma Caixa Preta</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</guid><description>AG-UI e Microsoft Agent Framework se unem para dar aos fluxos multi-agente um frontend de verdade — com streaming em tempo real, aprovações humanas e visibilidade total do que seus agentes estão fazendo.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A questão com sistemas multi-agente é a seguinte: eles ficam incríveis nas demos. Três agentes passando trabalho entre si, resolvendo problemas, tomando decisões. Aí você tenta colocar na frente de usuários reais e&amp;hellip; silêncio. Um indicador girando. Nenhuma ideia de qual agente está fazendo o quê ou por que o sistema pausou. Isso não é um produto — é um problema de confiança.&lt;/p&gt;
&lt;p&gt;O time do Microsoft Agent Framework acabou de publicar um &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;tutorial fantástico&lt;/a&gt; sobre como combinar fluxos MAF com &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;AG-UI&lt;/a&gt;, um protocolo aberto para transmitir eventos de execução de agentes para um frontend via Server-Sent Events. E sinceramente? Essa é a ponte que estava faltando.&lt;/p&gt;
&lt;h2 id="por-que-isso-importa-para-desenvolvedores-net"&gt;Por que isso importa para desenvolvedores .NET&lt;/h2&gt;
&lt;p&gt;Se você está construindo apps com IA, provavelmente já bateu nesse muro. Sua orquestração backend funciona perfeitamente — agentes passam tarefas entre si, ferramentas disparam, decisões são tomadas. Mas o frontend não faz ideia do que está acontecendo nos bastidores. AG-UI resolve isso definindo um protocolo padrão para transmitir eventos de agentes (pense em &lt;code&gt;RUN_STARTED&lt;/code&gt;, &lt;code&gt;STEP_STARTED&lt;/code&gt;, &lt;code&gt;TOOL_CALL_*&lt;/code&gt;, &lt;code&gt;TEXT_MESSAGE_*&lt;/code&gt;) diretamente para sua camada de UI via SSE.&lt;/p&gt;
&lt;p&gt;A demo que construíram é um fluxo de suporte ao cliente com três agentes: um agente de triagem que roteia solicitações, um agente de reembolso que cuida de questões financeiras, e um agente de pedidos que gerencia substituições. Cada agente tem suas próprias ferramentas, e a topologia de handoff é definida explicitamente — nada de &amp;ldquo;descubra a partir do prompt&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="a-topologia-de-handoff-é-a-verdadeira-estrela"&gt;A topologia de handoff é a verdadeira estrela&lt;/h2&gt;
&lt;p&gt;O que me chamou a atenção é como o &lt;code&gt;HandoffBuilder&lt;/code&gt; permite declarar um grafo dirigido de roteamento entre agentes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HandoffBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ag_ui_handoff_workflow_demo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;participants&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;termination_condition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;termination_condition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Refunds, damaged-item claims...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Replacement, exchange...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Replacement logistics needed after refund.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;After replacement/shipping tasks complete.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cada &lt;code&gt;add_handoff&lt;/code&gt; cria uma aresta dirigida com uma descrição em linguagem natural. O framework gera ferramentas de handoff para cada agente baseado nessa topologia. Então as decisões de roteamento são fundamentadas na sua estrutura de orquestração, não apenas no que o LLM resolve fazer. Isso é enorme para confiabilidade em produção.&lt;/p&gt;
&lt;h2 id="human-in-the-loop-que-realmente-funciona"&gt;Human-in-the-loop que realmente funciona&lt;/h2&gt;
&lt;p&gt;A demo mostra dois padrões de interrupção que qualquer app de agentes do mundo real precisa:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interrupções de aprovação de ferramentas&lt;/strong&gt; — quando um agente chama uma ferramenta marcada com &lt;code&gt;approval_mode=&amp;quot;always_require&amp;quot;&lt;/code&gt;, o fluxo pausa e emite um evento. O frontend renderiza um modal de aprovação com o nome da ferramenta e seus argumentos. Sem loops de retry queimando tokens — apenas um fluxo limpo de pausa-aprovação-retomada.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interrupções de solicitação de informação&lt;/strong&gt; — quando um agente precisa de mais contexto do usuário (como um ID de pedido), ele pausa e pergunta. O frontend mostra a pergunta, o usuário responde, e a execução retoma exatamente de onde parou.&lt;/p&gt;
&lt;p&gt;Ambos os padrões são transmitidos como eventos AG-UI padrão, então seu frontend não precisa de lógica personalizada por agente — simplesmente renderiza qualquer evento que chegue pela conexão SSE.&lt;/p&gt;
&lt;h2 id="conectar-tudo-é-surpreendentemente-simples"&gt;Conectar tudo é surpreendentemente simples&lt;/h2&gt;
&lt;p&gt;A integração entre MAF e AG-UI é uma única chamada de função:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework.ag_ui&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AgentFrameworkWorkflow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;add_agent_framework_fastapi_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;demo_workflow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AgentFrameworkWorkflow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;workflow_factory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;_thread_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;create_handoff_workflow&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ag_ui_handoff_workflow_demo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;add_agent_framework_fastapi_endpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;demo_workflow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/handoff_demo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;O &lt;code&gt;workflow_factory&lt;/code&gt; cria um fluxo novo por thread, então cada conversa tem estado isolado. O endpoint cuida de toda a tubulação SSE automaticamente. Se você já usa FastAPI (ou pode adicioná-lo como uma camada leve), isso tem praticamente zero fricção.&lt;/p&gt;
&lt;h2 id="minha-opinião"&gt;Minha opinião&lt;/h2&gt;
&lt;p&gt;Para nós desenvolvedores .NET, a pergunta imediata é: &amp;ldquo;Posso fazer isso em C#?&amp;rdquo; O Agent Framework está disponível para .NET e Python, e o protocolo AG-UI é agnóstico de linguagem (é apenas SSE). Então embora essa demo específica use Python e FastAPI, o padrão se traduz diretamente. Você poderia montar uma API mínima ASP.NET Core com endpoints SSE seguindo o mesmo schema de eventos AG-UI.&lt;/p&gt;
&lt;p&gt;A conclusão mais importante é que UIs multi-agente estão se tornando uma preocupação de primeira classe, não algo deixado para depois. Se você está construindo qualquer coisa onde agentes interagem com humanos — suporte ao cliente, fluxos de aprovação, processamento de documentos — essa combinação de orquestração MAF e transparência AG-UI é o padrão a seguir.&lt;/p&gt;
&lt;h2 id="concluindo"&gt;Concluindo&lt;/h2&gt;
&lt;p&gt;AG-UI + Microsoft Agent Framework te dá o melhor dos dois mundos: orquestração multi-agente robusta no backend e visibilidade em tempo real no frontend. Sem mais interações de agentes como caixas pretas.&lt;/p&gt;
&lt;p&gt;Confira o &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;tutorial completo&lt;/a&gt; e o &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;repositório do protocolo AG-UI&lt;/a&gt; para se aprofundar.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Foundry Março 2026 — GPT-5.4, Agent Service GA e a Atualização do SDK Que Muda Tudo</title><link>https://thedotnetblog.com/pt/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/pt/news/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</guid><description>A atualização de março de 2026 do Microsoft Foundry é gigante: Agent Service chega ao GA, GPT-5.4 traz raciocínio confiável, o SDK azure-ai-projects se estabiliza em todas as linguagens, e Fireworks AI traz modelos abertos para o Azure.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Os posts mensais de &amp;ldquo;Novidades no Microsoft Foundry&amp;rdquo; costumam ser uma mistura de melhorias incrementais e alguma funcionalidade destaque ocasional. A &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;edição de março de 2026&lt;/a&gt;? É basicamente tudo destaque. Foundry Agent Service chega ao GA, GPT-5.4 é lançado para produção, o SDK recebe uma grande versão estável, e Fireworks AI traz inferência de modelos abertos para o Azure. Vamos detalhar o que importa para desenvolvedores .NET.&lt;/p&gt;
&lt;h2 id="foundry-agent-service-está-pronto-para-produção"&gt;Foundry Agent Service está pronto para produção&lt;/h2&gt;
&lt;p&gt;Essa é a grande novidade. O runtime de agentes de nova geração está em disponibilidade geral — construído sobre a API Responses da OpenAI, compatível em protocolo com agentes OpenAI, e aberto a modelos de múltiplos provedores. Se você está construindo com a API Responses hoje, migrar para o Foundry adiciona segurança empresarial, rede privada, RBAC do Entra, rastreamento completo e avaliação sobre sua lógica de agentes existente.&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;Adições principais: rede privada de ponta a ponta, expansão de autenticação MCP (incluindo passthrough OAuth), preview do Voice Live para agentes de voz para voz, e agentes hospedados em 6 novas regiões.&lt;/p&gt;
&lt;h2 id="gpt-54--confiabilidade-acima-de-inteligência-pura"&gt;GPT-5.4 — confiabilidade acima de inteligência pura&lt;/h2&gt;
&lt;p&gt;GPT-5.4 não é sobre ser mais inteligente. É sobre ser mais confiável. Raciocínio mais forte em interações longas, melhor aderência a instruções, menos falhas no meio de workflows, e capacidades integradas de uso de computador. Para agentes em produção, essa confiabilidade importa muito mais do que pontuações em benchmarks.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Modelo&lt;/th&gt;
&lt;th&gt;Preço (por M tokens)&lt;/th&gt;
&lt;th&gt;Ideal Para&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 saída&lt;/td&gt;
&lt;td&gt;Agentes em produção, código, fluxos de documentos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Pro&lt;/td&gt;
&lt;td&gt;$30 / $180 saída&lt;/td&gt;
&lt;td&gt;Análise profunda, raciocínio científico&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Mini&lt;/td&gt;
&lt;td&gt;Econômico&lt;/td&gt;
&lt;td&gt;Classificação, extração, chamadas leves de ferramentas&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A jogada inteligente é uma estratégia de roteamento: GPT-5.4 Mini lida com o trabalho de alto volume e baixa latência enquanto GPT-5.4 cuida das solicitações com raciocínio pesado.&lt;/p&gt;
&lt;h2 id="o-sdk-finalmente-está-estável"&gt;O SDK finalmente está estável&lt;/h2&gt;
&lt;p&gt;O SDK &lt;code&gt;azure-ai-projects&lt;/code&gt; lançou versões estáveis em todas as linguagens — Python 2.0.0, JS/TS 2.0.0, Java 2.0.0, e .NET 2.0.0 (1º de abril). A dependência do &lt;code&gt;azure-ai-agents&lt;/code&gt; sumiu — tudo vive sob &lt;code&gt;AIProjectClient&lt;/code&gt;. Instale com &lt;code&gt;pip install azure-ai-projects&lt;/code&gt; e o pacote inclui &lt;code&gt;openai&lt;/code&gt; e &lt;code&gt;azure-identity&lt;/code&gt; como dependências diretas.&lt;/p&gt;
&lt;p&gt;Para desenvolvedores .NET, isso significa um único pacote NuGet para toda a superfície do Foundry. Chega de malabarismo com SDKs de agentes separados.&lt;/p&gt;
&lt;h2 id="fireworks-ai-traz-modelos-abertos-para-o-azure"&gt;Fireworks AI traz modelos abertos para o Azure&lt;/h2&gt;
&lt;p&gt;Talvez a adição mais interessante arquitetonicamente: Fireworks AI processando mais de 13 trilhões de tokens por dia a ~180K requisições/segundo, agora disponível através do Foundry. DeepSeek V3.2, gpt-oss-120b, Kimi K2.5, e MiniMax M2.5 no lançamento.&lt;/p&gt;
&lt;p&gt;A verdadeira história é o &lt;strong&gt;bring-your-own-weights&lt;/strong&gt; — faça upload de pesos quantizados ou fine-tunados de qualquer lugar sem mudar a stack de serving. Deploy via serverless pay-per-token ou throughput provisionado.&lt;/p&gt;
&lt;h2 id="outros-destaques"&gt;Outros destaques&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Phi-4 Reasoning Vision 15B&lt;/strong&gt; — raciocínio multimodal para gráficos, diagramas e layouts de documentos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluations GA&lt;/strong&gt; — avaliadores prontos para uso com monitoramento contínuo de produção integrado ao Azure Monitor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Priority Processing&lt;/strong&gt; (Preview) — faixa de computação dedicada para cargas de trabalho sensíveis à latência&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Voice Live&lt;/strong&gt; — runtime de voz para voz que se conecta diretamente aos agentes do Foundry&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tracing GA&lt;/strong&gt; — inspeção de rastreamento de agentes de ponta a ponta com ordenação e filtragem&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Depreciação do PromptFlow&lt;/strong&gt; — migração para Microsoft Framework Workflows até janeiro de 2027&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="conclusão"&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Março de 2026 é um ponto de virada para o Foundry. Agent Service GA, SDKs estáveis em todas as linguagens, GPT-5.4 para agentes de produção confiáveis, e inferência de modelos abertos via Fireworks AI — a plataforma está pronta para cargas de trabalho sérias.&lt;/p&gt;
&lt;p&gt;Leia o &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;resumo completo&lt;/a&gt; e &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;crie seu primeiro agente&lt;/a&gt; para começar.&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server — A forma certa de dar acesso a bancos de dados para agentes de IA</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</guid><description>SQL MCP Server do Data API builder dá aos agentes de IA acesso seguro e determinístico a bancos de dados sem expor esquemas ou depender de NL2SQL. RBAC, cache, suporte multi-banco — tudo incluído.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/sql-mcp-server-data-api-builder/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vamos ser honestos: a maioria dos servidores MCP de banco de dados disponíveis hoje são assustadores. Eles pegam uma consulta em linguagem natural, geram SQL na hora e executam contra seus dados de produção. O que poderia dar errado? (Tudo. Tudo poderia dar errado.)&lt;/p&gt;
&lt;p&gt;O time do Azure SQL acabou de &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;apresentar o SQL MCP Server&lt;/a&gt;, e ele adota uma abordagem fundamentalmente diferente. Construído como uma funcionalidade do Data API builder (DAB) 2.0, dá aos agentes de IA acesso estruturado e determinístico a operações de banco de dados — sem NL2SQL, sem expor seu esquema, e com RBAC completo em cada etapa.&lt;/p&gt;
&lt;h2 id="por-que-não-nl2sql"&gt;Por que não NL2SQL?&lt;/h2&gt;
&lt;p&gt;Essa é a decisão de design mais interessante. Modelos não são determinísticos, e consultas complexas são as mais propensas a produzir erros sutis. As consultas exatas que os usuários esperam que a IA gere são também as que precisam de mais escrutínio quando produzidas de forma não determinística.&lt;/p&gt;
&lt;p&gt;Em vez disso, o SQL MCP Server usa uma abordagem &lt;strong&gt;NL2DAB&lt;/strong&gt;. O agente trabalha com a camada de abstração de entidades do Data API builder e seu construtor de consultas integrado para produzir T-SQL preciso e bem formado de maneira determinística. Mesmo resultado para o usuário, mas sem o risco de JOINs alucinados ou exposição acidental de dados.&lt;/p&gt;
&lt;h2 id="sete-ferramentas-não-setecentas"&gt;Sete ferramentas, não setecentas&lt;/h2&gt;
&lt;p&gt;O SQL MCP Server expõe exatamente sete ferramentas DML, independentemente do tamanho do banco de dados:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;describe_entities&lt;/code&gt; — descobrir entidades e operações disponíveis&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create_record&lt;/code&gt; — inserir linhas&lt;/li&gt;
&lt;li&gt;&lt;code&gt;read_records&lt;/code&gt; — consultar tabelas e views&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update_record&lt;/code&gt; — modificar linhas&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete_record&lt;/code&gt; — remover linhas&lt;/li&gt;
&lt;li&gt;&lt;code&gt;execute_entity&lt;/code&gt; — executar stored procedures&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggregate_records&lt;/code&gt; — consultas de agregação&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Isso é inteligente porque janelas de contexto são o espaço de pensamento do agente. Inundá-las com centenas de definições de ferramentas deixa menos espaço para raciocínio. Sete ferramentas fixas mantêm o agente focado em &lt;em&gt;pensar&lt;/em&gt; em vez de &lt;em&gt;navegar&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Cada ferramenta pode ser habilitada ou desabilitada individualmente:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;runtime&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;dml-tools&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;describe-entities&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;create-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;read-records&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;update-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;delete-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;execute-entity&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;aggregate-records&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="começando-em-três-comandos"&gt;Começando em três comandos&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab init &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --database-type mssql &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --connection-string &lt;span class="s2"&gt;&amp;#34;@env(&amp;#39;sql_connection_string&amp;#39;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add Customers &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --source dbo.Customers &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --permissions &lt;span class="s2"&gt;&amp;#34;anonymous:*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Isso é um SQL MCP Server rodando e expondo sua tabela Customers. A camada de abstração de entidades significa que você pode criar aliases para nomes e colunas, limitar campos por papel, e controlar exatamente o que os agentes veem — sem expor detalhes internos do esquema.&lt;/p&gt;
&lt;h2 id="a-história-de-segurança-é-sólida"&gt;A história de segurança é sólida&lt;/h2&gt;
&lt;p&gt;É aqui que a maturidade do Data API builder compensa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RBAC em cada camada&lt;/strong&gt; — cada entidade define quais papéis podem ler, criar, atualizar ou deletar, e quais campos são visíveis&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integração com Azure Key Vault&lt;/strong&gt; — strings de conexão e segredos gerenciados com segurança&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microsoft Entra + OAuth personalizado&lt;/strong&gt; — autenticação de nível de produção&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Security Policy&lt;/strong&gt; — agentes interagem através de um contrato controlado, não SQL cru&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A abstração de esquema é particularmente importante. Seus nomes internos de tabelas e colunas nunca são expostos ao agente. Você define entidades, aliases e descrições que fazem sentido para a interação com IA — não seu diagrama ERD do banco de dados.&lt;/p&gt;
&lt;h2 id="multi-banco-e-multi-protocolo"&gt;Multi-banco e multi-protocolo&lt;/h2&gt;
&lt;p&gt;O SQL MCP Server suporta Microsoft SQL, PostgreSQL, Azure Cosmos DB e MySQL. E como é uma funcionalidade do DAB, você obtém endpoints REST, GraphQL e MCP simultaneamente da mesma configuração. Mesmas definições de entidades, mesmas regras RBAC, mesma segurança — nos três protocolos.&lt;/p&gt;
&lt;p&gt;A auto-configuração no DAB 2.0 pode até inspecionar seu banco de dados e construir a configuração dinamicamente, se você estiver confortável com menos abstração para prototipagem rápida.&lt;/p&gt;
&lt;h2 id="minha-opinião"&gt;Minha opinião&lt;/h2&gt;
&lt;p&gt;É assim que o acesso empresarial a bancos de dados para agentes de IA deveria funcionar. Não &amp;ldquo;ei LLM, escreve SQL pra mim e YOLO contra produção.&amp;rdquo; Em vez disso: uma camada de entidades bem definida, geração determinística de consultas, RBAC em cada etapa, cache, monitoramento e telemetria. É chato da melhor maneira possível.&lt;/p&gt;
&lt;p&gt;Para desenvolvedores .NET, a história de integração é limpa — DAB é uma ferramenta .NET, o MCP Server roda como contêiner, e funciona com Azure SQL, que a maioria de nós já está usando. Se você está construindo agentes de IA que precisam de acesso a dados, comece aqui.&lt;/p&gt;
&lt;h2 id="finalizando"&gt;Finalizando&lt;/h2&gt;
&lt;p&gt;SQL MCP Server é gratuito, open-source e roda em qualquer lugar. É a abordagem prescritiva da Microsoft para dar aos agentes de IA acesso seguro a bancos de dados. Confira o &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;post completo&lt;/a&gt; e a &lt;a href="https://aka.ms/sql/mcp"&gt;documentação&lt;/a&gt; para começar.&lt;/p&gt;</content:encoded></item><item><title>azd agora permite executar e depurar agentes IA localmente — O que mudou em março 2026</title><link>https://thedotnetblog.com/pt/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/pt/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>O Azure Developer CLI lançou sete versões em março 2026. Destaques: loop local de execução e depuração para agentes IA, integração com GitHub Copilot na configuração de projetos, e suporte a Container App Jobs.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sete versões em um mês. Foi isso que o time do Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) publicou em março 2026, e a funcionalidade principal é a que eu estava esperando: &lt;strong&gt;um loop local de execução e depuração para agentes 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;publicou o resumo completo&lt;/a&gt;, e embora haja muito conteúdo, deixe-me filtrar o que realmente importa para desenvolvedores .NET construindo apps com IA.&lt;/p&gt;
&lt;h2 id="executar-e-depurar-agentes-ia-sem-fazer-deploy"&gt;Executar e depurar agentes IA sem fazer deploy&lt;/h2&gt;
&lt;p&gt;Esta é a grande novidade. A nova extensão &lt;code&gt;azure.ai.agents&lt;/code&gt; adiciona comandos que te dão uma experiência de loop interno adequada para agentes IA:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt; — inicia seu agente localmente&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt; — envia mensagens (local ou em produção)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt; — mostra status e saúde do container&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt; — transmite logs do container em tempo real&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Antes, testar um agente IA significava fazer deploy no Microsoft Foundry toda vez que você fazia uma mudança. Agora você pode iterar localmente, testar o comportamento do seu agente, e só fazer deploy quando estiver pronto.&lt;/p&gt;
&lt;h2 id="github-copilot-configura-seu-projeto-azd"&gt;GitHub Copilot configura seu projeto azd&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt; agora oferece uma opção &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Em vez de responder prompts manualmente, um agente Copilot gera a configuração para você. Quando um comando falha, &lt;code&gt;azd&lt;/code&gt; oferece troubleshooting assistido por IA — tudo sem sair do terminal.&lt;/p&gt;
&lt;h2 id="container-app-jobs-e-melhorias-de-deploy"&gt;Container App Jobs e melhorias de deploy&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; agora faz deploy de &lt;code&gt;Microsoft.App/jobs&lt;/code&gt; pela config existente &lt;code&gt;host: containerapp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timeouts configuráveis&lt;/strong&gt;: Nova flag &lt;code&gt;--timeout&lt;/code&gt; no &lt;code&gt;azd deploy&lt;/code&gt; e campo &lt;code&gt;deployTimeout&lt;/code&gt; no &lt;code&gt;azure.yaml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fallback de build remoto&lt;/strong&gt;: Quando o build ACR falha, &lt;code&gt;azd&lt;/code&gt; faz fallback automático para Docker/Podman local.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validação preflight local&lt;/strong&gt;: Parâmetros Bicep são validados localmente antes do deploy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="melhorias-de-dx"&gt;Melhorias de DX&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Detecção automática de pnpm/yarn&lt;/strong&gt; para projetos JS/TS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Suporte a pyproject.toml&lt;/strong&gt; para Python&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diretórios de templates locais&lt;/strong&gt; — &lt;code&gt;azd init --template&lt;/code&gt; aceita caminhos do sistema de arquivos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Melhores mensagens de erro&lt;/strong&gt; no modo &lt;code&gt;--no-prompt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Variáveis de ambiente de build&lt;/strong&gt; injetadas em todos os subprocessos de build (.NET, Node.js, Java, Python)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="conclusão"&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;O loop de depuração local de agentes IA é a estrela desta versão, mas o acúmulo de melhorias de deploy e refinamento de DX faz o &lt;code&gt;azd&lt;/code&gt; parecer mais maduro do que nunca. Se você está fazendo deploy de apps .NET no Azure — especialmente agentes IA — esta atualização vale a pena.&lt;/p&gt;
&lt;p&gt;Confira as &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;notas completas da versão&lt;/a&gt; para todos os detalhes.&lt;/p&gt;</content:encoded></item><item><title>KubeCon Europe 2026: O que os desenvolvedores .NET realmente precisam saber</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</guid><description>A Microsoft soltou uma enxurrada de anúncios de Kubernetes na KubeCon Europe 2026. Aqui está a versão filtrada — só as atualizações de AKS e cloud-native que importam se você está entregando apps .NET.</description><content:encoded>&lt;p&gt;&lt;em&gt;Este post foi traduzido automaticamente. Para a versão original, &lt;a href="https://thedotnetblog.com/pt/news/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Sabe aquela sensação quando cai um post gigante de anúncios e você fica scrollando pensando &amp;ldquo;legal, mas o que isso muda pra mim na prática&amp;rdquo;? É assim que me sinto toda temporada de KubeCon.&lt;/p&gt;
&lt;p&gt;A Microsoft acabou de publicar o &lt;a href="https://opensource.microsoft.com/blog/2026/03/24/whats-new-with-microsoft-in-open-source-and-kubernetes-at-kubecon-cloudnativecon-europe-2026/"&gt;resumo completo da KubeCon Europe 2026&lt;/a&gt; — escrito pelo próprio Brendan Burns — e sinceramente? Tem conteúdo real aqui. Não são apenas checklists de features, mas melhorias operacionais que mudam como você gerencia as coisas em produção.&lt;/p&gt;
&lt;p&gt;Deixa eu explicar o que realmente importa para nós desenvolvedores .NET.&lt;/p&gt;
&lt;h2 id="mtls-sem-o-imposto-do-service-mesh"&gt;mTLS sem o imposto do service mesh&lt;/h2&gt;
&lt;p&gt;A coisa com service meshes é: todo mundo quer as garantias de segurança, ninguém quer a carga operacional. O AKS finalmente está fechando essa lacuna.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/application-network"&gt;Azure Kubernetes Application Network&lt;/a&gt; te dá TLS mútuo, autorização com reconhecimento de aplicação e telemetria de tráfego — sem implantar um mesh pesado com sidecars. Combinado com &lt;a href="https://aka.ms/acns/cilium-mtls"&gt;Cilium mTLS no Advanced Container Networking Services&lt;/a&gt;, você tem comunicação criptografada pod-a-pod usando certificados X.509 e SPIRE para gerenciamento de identidade.&lt;/p&gt;
&lt;p&gt;Na prática: suas APIs ASP.NET Core conversando com workers em background, seus serviços gRPC chamando uns aos outros — tudo criptografado e verificado por identidade no nível de rede, sem nenhuma alteração no código. Isso é enorme.&lt;/p&gt;
&lt;p&gt;Para times migrando do &lt;code&gt;ingress-nginx&lt;/code&gt;, também tem &lt;a href="https://aka.ms/aks/app-routing/gateway-api"&gt;Application Routing com Meshless Istio&lt;/a&gt; com suporte completo à Kubernetes Gateway API. Sem sidecars. Baseado em padrões. E lançaram ferramentas &lt;code&gt;ingress2gateway&lt;/code&gt; para migração incremental.&lt;/p&gt;
&lt;h2 id="observabilidade-de-gpu-que-não-é-secundária"&gt;Observabilidade de GPU que não é secundária&lt;/h2&gt;
&lt;p&gt;Se você está rodando inferência de IA junto com seus serviços .NET (e sejamos honestos, quem não está começando?), provavelmente já se deparou com o ponto cego do monitoramento de GPU. Tinha dashboards ótimos de CPU/memória e depois&amp;hellip; nada para GPUs sem configuração manual de exportadores.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/managed-gpu-metrics"&gt;AKS agora expõe métricas de GPU nativamente&lt;/a&gt; no Prometheus e Grafana gerenciados. Mesmo stack, mesmos dashboards, mesmo pipeline de alertas. Sem exportadores custom, sem agentes de terceiros.&lt;/p&gt;
&lt;p&gt;No lado de rede, adicionaram visibilidade por fluxo para tráfego HTTP, gRPC e Kafka com uma &lt;a href="https://learn.microsoft.com/en-us/azure/aks/container-network-observability-logs"&gt;experiência one-click no Azure Monitor&lt;/a&gt;. IPs, portas, workloads, direção do fluxo, decisões de policy — tudo em dashboards integrados.&lt;/p&gt;
&lt;p&gt;E aqui vem a que me fez olhar duas vezes: &lt;a href="https://learn.microsoft.com/en-us/azure/aks/advanced-container-networking-services-overview"&gt;agentic container networking&lt;/a&gt; adiciona uma UI web onde você pode fazer perguntas em linguagem natural sobre o estado de rede do seu cluster. &amp;ldquo;Por que o pod X não alcança o serviço Y?&amp;rdquo; → diagnósticos read-only a partir de telemetria ao vivo. Genuinamente útil às 2 da manhã.&lt;/p&gt;
&lt;h2 id="networking-cross-cluster-que-não-exige-doutorado"&gt;Networking cross-cluster que não exige doutorado&lt;/h2&gt;
&lt;p&gt;Multi-cluster em Kubernetes historicamente foi uma experiência de &amp;ldquo;traga sua própria cola de rede&amp;rdquo;. Azure Kubernetes Fleet Manager agora entrega &lt;a href="https://aka.ms/kubernetes-fleet/networking/cross-cluster"&gt;networking cross-cluster&lt;/a&gt; através de Cilium cluster mesh gerenciado:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conectividade unificada entre clusters AKS&lt;/li&gt;
&lt;li&gt;Registro global de serviços para descoberta cross-cluster&lt;/li&gt;
&lt;li&gt;Configuração gerenciada centralmente, não repetida por cluster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se você roda microsserviços .NET em várias regiões para resiliência ou compliance, isso substitui muita cola custom frágil. O Serviço A no West Europe pode descobrir e chamar o Serviço B no East US através do mesh, com políticas de roteamento e segurança consistentes.&lt;/p&gt;
&lt;h2 id="upgrades-que-não-exigem-coragem"&gt;Upgrades que não exigem coragem&lt;/h2&gt;
&lt;p&gt;Sejamos honestos — upgrades de Kubernetes em produção são estressantes. &amp;ldquo;Atualizar e torcer&amp;rdquo; tem sido a estratégia de facto para muitos times, e é a razão principal pela qual clusters ficam defasados nas versões.&lt;/p&gt;
&lt;p&gt;Duas novas capacidades mudam isso:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Blue-green agent pool upgrades&lt;/strong&gt; criam um pool de nós paralelo com a nova configuração. Valide o comportamento, mova tráfego gradualmente e mantenha um caminho limpo de rollback. Nada mais de mutações in-place em nós de produção.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agent pool rollback&lt;/strong&gt; permite reverter um pool de nós para a versão anterior do Kubernetes e imagem de nó quando um upgrade dá errado — sem reconstruir o cluster.&lt;/p&gt;
&lt;p&gt;Juntos, finalmente dão aos operadores controle real sobre o ciclo de vida de upgrades. Para times .NET, isso importa porque a velocidade da plataforma controla diretamente quão rápido você pode adotar novos runtimes, patches de segurança e capacidades de rede.&lt;/p&gt;
&lt;h2 id="workloads-de-ia-se-tornam-cidadãos-de-primeira-classe-no-kubernetes"&gt;Workloads de IA se tornam cidadãos de primeira classe no Kubernetes&lt;/h2&gt;
&lt;p&gt;O trabalho upstream em open-source é igualmente importante. Dynamic Resource Allocation (DRA) acabou de chegar em GA no Kubernetes 1.36, tornando o scheduling de GPU uma feature de primeira classe ao invés de um workaround.&lt;/p&gt;
&lt;p&gt;Alguns projetos que vale a pena acompanhar:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Projeto&lt;/th&gt;
&lt;th&gt;O que faz&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/kaito-project/kubeairunway"&gt;AI Runway&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;API Kubernetes comum para inferência — deploy de modelos sem saber K8s, com descoberta HuggingFace e estimativas de custo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cncf.io/blog/2026/01/07/holmesgpt-agentic-troubleshooting-built-for-the-cloud-native-era/"&gt;HolmesGPT&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Troubleshooting agêntico para cloud-native — agora projeto CNCF Sandbox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/project-dalec/dalec"&gt;Dalec&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Builds declarativos de imagens de container com geração de SBOM — menos CVEs na fase de build&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A direção é clara: sua API .NET, sua camada de orquestração com Semantic Kernel e seus workloads de inferência deveriam todos rodar em um modelo de plataforma consistente. Estamos chegando lá.&lt;/p&gt;
&lt;h2 id="por-onde-eu-começaria-esta-semana"&gt;Por onde eu começaria esta semana&lt;/h2&gt;
&lt;p&gt;Se você está avaliando essas mudanças para seu time, aqui vai minha lista honesta de prioridades:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Observabilidade primeiro&lt;/strong&gt; — habilite métricas de GPU e logs de fluxo de rede em um cluster não-prod. Veja o que você andou perdendo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Teste blue-green upgrades&lt;/strong&gt; — experimente o workflow de rollback antes do seu próximo upgrade de cluster em produção. Construa confiança no processo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pilote networking com identidade&lt;/strong&gt; — escolha um caminho de serviço interno e habilite mTLS com Cilium. Meça o overhead (spoiler: é mínimo).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avalie Fleet Manager&lt;/strong&gt; — se você roda mais de dois clusters, networking cross-cluster se paga sozinho em redução de cola custom.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Experimentos pequenos, feedback rápido. Essa é sempre a jogada.&lt;/p&gt;
&lt;h2 id="finalizando"&gt;Finalizando&lt;/h2&gt;
&lt;p&gt;Anúncios de KubeCon podem ser avassaladores, mas essa leva realmente move a agulha para times .NET no AKS. Melhor segurança de rede sem overhead de mesh, observabilidade real de GPU, upgrades mais seguros e fundações mais fortes para infraestrutura de IA.&lt;/p&gt;
&lt;p&gt;Se você já está no AKS, é um ótimo momento para reforçar sua baseline operacional. E se está planejando mover workloads .NET para Kubernetes — a plataforma ficou significativamente mais pronta para produção.&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server, Copilot no SSMS e um Database Hub com Agentes de IA: O que realmente importa da SQLCon 2026</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</guid><description>A Microsoft soltou uma pilha de anúncios sobre bancos de dados na SQLCon 2026. Aqui está o que realmente importa se você está construindo apps com IA no Azure SQL.</description><content:encoded>&lt;p&gt;A Microsoft acabou de abrir a &lt;a href="https://www.microsoft.com/en-us/sql-server/blog/2026/03/18/advancing-agentic-ai-with-microsoft-databases-across-a-unified-data-estate/"&gt;SQLCon 2026 junto com a FabCon em Atlanta&lt;/a&gt;, e tem muita coisa para desempacotar. O anúncio original cobre tudo, desde planos de economia até funcionalidades de conformidade enterprise. Eu vou pular os slides de preços enterprise e focar nas partes que importam se você é um desenvolvedor construindo coisas com Azure SQL e IA.&lt;/p&gt;
&lt;h2 id="sql-mcp-server-está-em-public-preview"&gt;SQL MCP Server está em public preview&lt;/h2&gt;
&lt;p&gt;Essa é a manchete principal pra mim. O Azure SQL Database Hyperscale agora tem um &lt;strong&gt;SQL MCP Server&lt;/strong&gt; em public preview que permite conectar seus dados SQL de forma segura a agentes de IA e Copilots usando o &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Se você tem acompanhado a onda do MCP — e honestamente, é difícil não perceber agora — isso é uma grande novidade. Em vez de construir pipelines de dados customizados para alimentar seus agentes de IA com contexto do seu banco de dados, você ganha um protocolo padronizado para expor dados SQL diretamente. Seus agentes podem consultar, raciocinar e agir sobre informações do banco de dados em tempo real.&lt;/p&gt;
&lt;p&gt;Para quem está construindo agentes de IA com Semantic Kernel ou o Microsoft Agent Framework, isso abre um caminho de integração limpo. Seu agente precisa verificar o estoque? Buscar um registro de cliente? Validar um pedido? O MCP dá a ele uma forma estruturada de fazer isso sem você escrever código de busca de dados sob medida para cada cenário.&lt;/p&gt;
&lt;h2 id="github-copilot-no-ssms-22-agora-é-ga"&gt;GitHub Copilot no SSMS 22 agora é GA&lt;/h2&gt;
&lt;p&gt;Se você passa algum tempo no SQL Server Management Studio — e sejamos honestos, a maioria de nós ainda passa — o GitHub Copilot agora está disponível de forma geral no SSMS 22. A mesma experiência Copilot que você já usa no VS Code e Visual Studio, mas para T-SQL.&lt;/p&gt;
&lt;p&gt;O valor prático aqui é direto: assistência por chat para escrever queries, refatorar stored procedures, resolver problemas de performance e lidar com tarefas administrativas. Nada revolucionário no conceito, mas ter isso dentro do SSMS significa que você não precisa trocar de contexto para outro editor só para ter ajuda de IA no seu trabalho com banco de dados.&lt;/p&gt;
&lt;h2 id="índices-vetoriais-receberam-um-upgrade-sério"&gt;Índices vetoriais receberam um upgrade sério&lt;/h2&gt;
&lt;p&gt;O Azure SQL Database agora tem índices vetoriais mais rápidos e mais robustos com suporte completo para insert, update e delete. Isso significa que seus dados vetoriais ficam atualizados em tempo real — sem necessidade de reindexação em lote.&lt;/p&gt;
&lt;p&gt;Aqui está o que há de novo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quantização&lt;/strong&gt; para tamanhos de índice menores sem perder muita precisão&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filtragem iterativa&lt;/strong&gt; para resultados mais precisos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integração mais próxima com o otimizador de queries&lt;/strong&gt; para performance previsível&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se você está fazendo Retrieval-Augmented Generation (RAG) com Azure SQL como vector store, essas melhorias são diretamente úteis. Você pode manter seus vetores junto com seus dados relacionais no mesmo banco de dados, o que simplifica significativamente sua arquitetura comparado a rodar um banco de dados vetorial separado.&lt;/p&gt;
&lt;p&gt;As mesmas melhorias vetoriais também estão disponíveis no SQL Database no Fabric, já que ambos rodam no mesmo motor SQL por baixo dos panos.&lt;/p&gt;
&lt;h2 id="database-hub-no-fabric-gestão-agêntica"&gt;Database Hub no Fabric: gestão agêntica&lt;/h2&gt;
&lt;p&gt;Esse ponto é mais voltado para o futuro, mas é interessante. A Microsoft anunciou o &lt;strong&gt;Database Hub no Microsoft Fabric&lt;/strong&gt; (acesso antecipado), que te dá uma visão unificada sobre Azure SQL, Cosmos DB, PostgreSQL, MySQL e SQL Server via Arc.&lt;/p&gt;
&lt;p&gt;O ângulo interessante não é só a visão unificada — é a abordagem agêntica de gestão. Agentes de IA monitoram continuamente seu parque de bancos de dados, mostram o que mudou, explicam por que isso importa e sugerem o que fazer em seguida. É um modelo human-in-the-loop onde o agente faz o trabalho pesado e você toma as decisões.&lt;/p&gt;
&lt;p&gt;Para equipes gerenciando mais do que um punhado de bancos de dados, isso poderia realmente reduzir o ruído operacional. Em vez de pular entre portais e verificar métricas manualmente, o agente traz o sinal até você.&lt;/p&gt;
&lt;h2 id="o-que-isso-significa-para-desenvolvedores-net"&gt;O que isso significa para desenvolvedores .NET&lt;/h2&gt;
&lt;p&gt;O fio que conecta todos esses anúncios é claro: a Microsoft está incorporando agentes de IA em cada camada da stack de banco de dados. Não como um truque, mas como uma camada prática de ferramentas.&lt;/p&gt;
&lt;p&gt;Se você está construindo apps .NET com Azure SQL, aqui está o que eu faria de fato:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Experimente o SQL MCP Server&lt;/strong&gt; se você está construindo agentes de IA. É a forma mais limpa de dar aos seus agentes acesso ao banco de dados sem encanamento customizado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ative o Copilot no SSMS&lt;/strong&gt; se você ainda não fez — ganho de produtividade gratuito para o trabalho diário com SQL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dê uma olhada nos índices vetoriais&lt;/strong&gt; se você está fazendo RAG e atualmente rodando um vector store separado. Consolidar no Azure SQL significa um serviço a menos para gerenciar.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="concluindo"&gt;Concluindo&lt;/h2&gt;
&lt;p&gt;O anúncio completo tem mais — planos de economia, assistentes de migração, funcionalidades de conformidade — mas a história para desenvolvedores está no MCP Server, nas melhorias vetoriais e na camada de gestão agêntica. São essas as peças que mudam como você constrói, não apenas como você faz orçamento.&lt;/p&gt;
&lt;p&gt;Confira o &lt;a href="https://www.microsoft.com/en-us/sql-server/blog/2026/03/18/advancing-agentic-ai-with-microsoft-databases-across-a-unified-data-estate/"&gt;anúncio completo do Shireesh Thota&lt;/a&gt; para o panorama completo, e &lt;a href="https://aka.ms/database-hub"&gt;inscreva-se para o acesso antecipado ao Database Hub&lt;/a&gt; se quiser experimentar a nova experiência de gestão.&lt;/p&gt;</content:encoded></item><item><title>Azure DevOps MCP Server chega ao Microsoft Foundry: O que isso significa para seus agentes de IA</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</guid><description>O Azure DevOps MCP Server agora está disponível no Microsoft Foundry. Conecte seus agentes de IA diretamente aos workflows de DevOps — work items, repos, pipelines — com poucos cliques.</description><content:encoded>&lt;p&gt;MCP (Model Context Protocol) está tendo seu momento. Se você tem acompanhado o ecossistema de agentes de IA, provavelmente notou servidores MCP surgindo por todo lado — dando aos agentes a capacidade de interagir com ferramentas e serviços externos através de um protocolo padronizado.&lt;/p&gt;
&lt;p&gt;Agora o &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;Azure DevOps MCP Server está disponível no Microsoft Foundry&lt;/a&gt;, e essa é uma daquelas integrações que faz você pensar nas possibilidades práticas.&lt;/p&gt;
&lt;h2 id="o-que-está-realmente-acontecendo-aqui"&gt;O que está realmente acontecendo aqui&lt;/h2&gt;
&lt;p&gt;A Microsoft já lançou o Azure DevOps MCP Server como &lt;a href="https://devblogs.microsoft.com/devops/azure-devops-remote-mcp-server-public-preview"&gt;public preview&lt;/a&gt; — esse é o servidor MCP em si. A novidade é a integração com o Foundry. Agora você pode adicionar o Azure DevOps MCP Server aos seus agentes Foundry diretamente do catálogo de ferramentas.&lt;/p&gt;
&lt;p&gt;Para quem ainda não conhece o Foundry: é a plataforma unificada da Microsoft para construir e gerenciar aplicações e agentes alimentados por IA em escala. Acesso a modelos, orquestração, avaliação, deploy — tudo em um só lugar.&lt;/p&gt;
&lt;h2 id="configurando"&gt;Configurando&lt;/h2&gt;
&lt;p&gt;A configuração é surpreendentemente simples:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;No seu agente Foundry, vá para &lt;strong&gt;Add Tools&lt;/strong&gt; &amp;gt; &lt;strong&gt;Catalog&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Busque &amp;ldquo;Azure DevOps&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Selecione o Azure DevOps MCP Server (preview) e clique em &lt;strong&gt;Create&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Insira o nome da sua organização e conecte&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Isso é tudo. Seu agente agora tem acesso às ferramentas do Azure DevOps.&lt;/p&gt;
&lt;h2 id="controlando-o-que-seu-agente-pode-acessar"&gt;Controlando o que seu agente pode acessar&lt;/h2&gt;
&lt;p&gt;Essa é a parte que eu aprecio: você não está preso a uma abordagem de tudo-ou-nada. Você pode especificar quais ferramentas estão disponíveis para seu agente. Então se você quer que ele apenas leia work items mas não toque em pipelines, pode configurar isso. Princípio do menor privilégio, aplicado aos seus agentes de IA.&lt;/p&gt;
&lt;p&gt;Isso importa para cenários enterprise onde você não quer que um agente acidentalmente dispare um pipeline de deploy porque alguém pediu para ele &amp;ldquo;ajudar com o release.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="por-que-isso-é-interessante-para-equipes-net"&gt;Por que isso é interessante para equipes .NET&lt;/h2&gt;
&lt;p&gt;Pense no que isso possibilita na prática:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Assistentes de planejamento de sprint&lt;/strong&gt; — agentes que podem buscar work items, analisar dados de velocidade e sugerir capacidade de sprint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bots de code review&lt;/strong&gt; — agentes que entendem o contexto do seu PR porque podem realmente ler seus repos e work items vinculados&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resposta a incidentes&lt;/strong&gt; — agentes que podem criar work items, consultar deploys recentes e correlacionar bugs com mudanças recentes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Onboarding de desenvolvedores&lt;/strong&gt; — &amp;ldquo;No que devo trabalhar?&amp;rdquo; recebe uma resposta real baseada em dados reais do projeto&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para equipes .NET que já usam Azure DevOps para seus pipelines de CI/CD e gerenciamento de projetos, ter um agente de IA que pode interagir diretamente com esses sistemas é um passo significativo em direção à automação útil.&lt;/p&gt;
&lt;h2 id="o-panorama-maior-do-mcp"&gt;O panorama maior do MCP&lt;/h2&gt;
&lt;p&gt;Isso faz parte de uma tendência mais ampla: servidores MCP estão se tornando a forma padrão como agentes de IA interagem com o mundo exterior. Estamos vendo para GitHub, Azure DevOps, bancos de dados, APIs SaaS — e o Foundry está se tornando o hub onde todas essas conexões se encontram.&lt;/p&gt;
&lt;p&gt;Se você está construindo agentes no ecossistema .NET, vale a pena prestar atenção ao MCP. O protocolo é padronizado, as ferramentas estão amadurecendo, e a integração com Foundry torna acessível sem precisar configurar manualmente conexões de servidor.&lt;/p&gt;
&lt;h2 id="para-finalizar"&gt;Para finalizar&lt;/h2&gt;
&lt;p&gt;O Azure DevOps MCP Server no Foundry está em preview, então espere que ele evolua. Mas o workflow principal é sólido: conectar, configurar acesso às ferramentas e deixar seus agentes trabalharem com seus dados de DevOps. Se você já está no ecossistema Foundry, está a poucos cliques. Experimente e veja quais workflows você consegue construir.&lt;/p&gt;
&lt;p&gt;Confira o &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;anúncio completo&lt;/a&gt; para a configuração passo a passo e mais detalhes.&lt;/p&gt;</content:encoded></item><item><title>Do laptop à produção: implantando agentes de IA no Microsoft Foundry com dois comandos</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</guid><description>O Azure Developer CLI agora tem comandos 'azd ai agent' que levam seu agente de IA do desenvolvimento local a um endpoint Foundry em produção em minutos. Aqui está o fluxo de trabalho completo.</description><content:encoded>&lt;p&gt;Você conhece aquela lacuna entre &amp;ldquo;funciona na minha máquina&amp;rdquo; e &amp;ldquo;está implantado e servindo tráfego&amp;rdquo;? Para agentes de IA, essa lacuna tem sido dolorosamente ampla. Você precisa provisionar recursos, implantar modelos, configurar identidade, montar monitoramento — e isso é antes de qualquer pessoa poder realmente chamar seu agente.&lt;/p&gt;
&lt;p&gt;O Azure Developer CLI acabou de transformar isso em &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;uma questão de dois comandos&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="o-novo-fluxo-de-trabalho-azd-ai-agent"&gt;O novo fluxo de trabalho &lt;code&gt;azd ai agent&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Deixe-me mostrar como isso realmente se parece. Você tem um projeto de agente de IA — digamos um agente concierge de hotel. Funciona localmente. Você quer ele rodando no Microsoft Foundry.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Isso é tudo. Dois comandos. &lt;code&gt;azd ai agent init&lt;/code&gt; gera a infraestrutura como código no seu repositório, e &lt;code&gt;azd up&lt;/code&gt; provisiona tudo no Azure e publica seu agente. Você recebe um link direto para seu agente no portal Foundry.&lt;/p&gt;
&lt;h2 id="o-que-acontece-por-baixo-dos-panos"&gt;O que acontece por baixo dos panos&lt;/h2&gt;
&lt;p&gt;O comando &lt;code&gt;init&lt;/code&gt; gera templates Bicep reais e inspecionáveis no seu repositório:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Um &lt;strong&gt;Foundry Resource&lt;/strong&gt; (contêiner de nível superior)&lt;/li&gt;
&lt;li&gt;Um &lt;strong&gt;Foundry Project&lt;/strong&gt; (onde seu agente vive)&lt;/li&gt;
&lt;li&gt;Configuração de &lt;strong&gt;implantação de modelo&lt;/strong&gt; (GPT-4o, etc.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identidade gerenciada&lt;/strong&gt; com atribuições de papéis RBAC apropriadas&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azure.yaml&lt;/code&gt; para o mapa de serviços&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent.yaml&lt;/code&gt; com metadados do agente e variáveis de ambiente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O ponto chave: tudo isso é seu. É Bicep versionado no seu repositório. Você pode inspecioná-lo, customizá-lo e fazer commit junto com o código do seu agente. Sem caixas pretas mágicas.&lt;/p&gt;
&lt;h2 id="o-ciclo-interno-de-desenvolvimento"&gt;O ciclo interno de desenvolvimento&lt;/h2&gt;
&lt;p&gt;O que eu realmente gosto é a história de desenvolvimento local. Quando você está iterando na lógica do agente, não quer reimplantar toda vez que muda um prompt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Isso inicia seu agente localmente. Combine com &lt;code&gt;azd ai agent invoke&lt;/code&gt; para enviar prompts de teste, e você tem um ciclo de feedback apertado. Editar código, reiniciar, invocar, repetir.&lt;/p&gt;
&lt;p&gt;O comando &lt;code&gt;invoke&lt;/code&gt; também é inteligente no roteamento — quando um agente local está rodando, ele aponta automaticamente para ele. Quando não está, vai para o endpoint remoto.&lt;/p&gt;
&lt;h2 id="monitoramento-em-tempo-real"&gt;Monitoramento em tempo real&lt;/h2&gt;
&lt;p&gt;Esta é a funcionalidade que me convenceu. Uma vez que seu agente está implantado:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent monitor --follow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cada requisição e resposta fluindo pelo seu agente é transmitida para seu terminal em tempo real. Para depurar problemas em produção, isso é inestimável. Sem vasculhar log analytics, sem esperar métricas agregarem — você vê o que está acontecendo agora.&lt;/p&gt;
&lt;h2 id="o-conjunto-completo-de-comandos"&gt;O conjunto completo de comandos&lt;/h2&gt;
&lt;p&gt;Aqui a referência rápida:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;O que faz&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Gera um projeto de agente Foundry com IaC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd up&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Provisiona recursos Azure e implanta o agente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Envia prompts ao agente remoto ou local&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Executa o agente localmente para desenvolvimento&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Transmite logs em tempo real do agente publicado&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Verifica saúde e status do agente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd down&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Limpa todos os recursos Azure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="por-que-isso-importa-para-desenvolvedores-net"&gt;Por que isso importa para desenvolvedores .NET&lt;/h2&gt;
&lt;p&gt;Embora o exemplo do anúncio seja baseado em Python, a história de infraestrutura é agnóstica a linguagem. Seu agente .NET recebe o mesmo scaffolding Bicep, a mesma configuração de identidade gerenciada, o mesmo pipeline de monitoramento. E se você já usa &lt;code&gt;azd&lt;/code&gt; para suas apps .NET Aspire ou implantações Azure, isso se encaixa direto no seu fluxo de trabalho existente.&lt;/p&gt;
&lt;p&gt;A lacuna de implantação para agentes de IA tem sido um dos maiores pontos de fricção no ecossistema. Ir de um protótipo funcional a um endpoint de produção com identidade, rede e monitoramento adequados não deveria exigir uma semana de trabalho DevOps. Agora requer dois comandos e alguns minutos.&lt;/p&gt;
&lt;h2 id="para-finalizar"&gt;Para finalizar&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd ai agent&lt;/code&gt; está disponível agora. Se você tem adiado a implantação dos seus agentes de IA porque a configuração de infraestrutura parecia trabalho demais, experimente. Confira o &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;tutorial completo&lt;/a&gt; para o passo a passo completo incluindo integração de app de chat frontend.&lt;/p&gt;</content:encoded></item><item><title>Foundry Agent Service está GA: O que realmente importa para construtores de agentes .NET</title><link>https://thedotnetblog.com/pt/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/pt/news/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</guid><description>O Foundry Agent Service da Microsoft acaba de chegar ao GA com rede privada, Voice Live, avaliações de produção e um runtime multi-modelo aberto. Aqui está o que você precisa saber.</description><content:encoded>&lt;p&gt;Vamos ser honestos — construir um protótipo de agente IA é a parte fácil. A parte difícil é tudo o que vem depois: colocá-lo em produção com isolamento de rede adequado, executar avaliações que realmente signifiquem algo, lidar com requisitos de conformidade e não quebrar nada às 2 da manhã.&lt;/p&gt;
&lt;p&gt;O &lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;Foundry Agent Service acabou de chegar ao GA&lt;/a&gt;, e esta versão está focada como um laser nessa lacuna do &amp;ldquo;tudo que vem depois&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="construído-sobre-a-responses-api"&gt;Construído sobre a Responses API&lt;/h2&gt;
&lt;p&gt;A manchete: o Foundry Agent Service de próxima geração é construído sobre a OpenAI Responses API. Se você já está construindo com esse protocolo, migrar para o Foundry requer mudanças mínimas de código. O que você ganha: segurança empresarial, rede privada, RBAC Entra, rastreamento completo e avaliação — sobre sua lógica de agente existente.&lt;/p&gt;
&lt;p&gt;A arquitetura é intencionalmente aberta. Você não está preso a um provedor de modelo ou um framework de orquestração. Use DeepSeek para planejamento, OpenAI para geração, LangGraph para orquestração — o runtime cuida da camada de consistência.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PromptAgentDefinition&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AZURE_AI_PROJECT_ENDPOINT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_openai_client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-enterprise-agent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;definition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PromptAgentDefinition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;AZURE_AI_MODEL_DEPLOYMENT_NAME&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;conversation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conversations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;What are best practices for building AI agents?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent_reference&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Se você vem do pacote &lt;code&gt;azure-ai-agents&lt;/code&gt;, os agentes agora são operações de primeira classe no &lt;code&gt;AIProjectClient&lt;/code&gt; em &lt;code&gt;azure-ai-projects&lt;/code&gt;. Remova a dependência standalone e use &lt;code&gt;get_openai_client()&lt;/code&gt; para conduzir as respostas.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="rede-privada-o-bloqueador-empresarial-removido"&gt;Rede privada: o bloqueador empresarial removido&lt;/h2&gt;
&lt;p&gt;Esta é a funcionalidade que desbloqueia a adoção empresarial. Foundry agora suporta rede privada completa de ponta a ponta com BYO VNet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sem egress público&lt;/strong&gt; — o tráfego do agente nunca toca a internet pública&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Injeção de contêiners/sub-redes&lt;/strong&gt; na sua rede para comunicação local&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conectividade de ferramentas incluída&lt;/strong&gt; — servidores MCP, Azure AI Search, agentes de dados Fabric, todos operam sobre caminhos privados&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esse último ponto é crítico. Não são apenas as chamadas de inferência que ficam privadas — cada invocação de ferramenta e chamada de recuperação também fica dentro do perímetro da sua rede. Para equipes operando sob políticas de classificação de dados que proíbem roteamento externo, isso era o que faltava.&lt;/p&gt;
&lt;h2 id="autenticação-mcp-feita-direito"&gt;Autenticação MCP feita direito&lt;/h2&gt;
&lt;p&gt;Conexões de servidores MCP agora suportam o espectro completo de padrões de autenticação:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Método de auth&lt;/th&gt;
&lt;th&gt;Quando usar&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Baseado em chave&lt;/td&gt;
&lt;td&gt;Acesso compartilhado simples para ferramentas internas da organização&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Agent Identity&lt;/td&gt;
&lt;td&gt;Serviço a serviço; o agente se autentica como ele mesmo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Managed Identity&lt;/td&gt;
&lt;td&gt;Isolamento por projeto; sem gerenciamento de credenciais&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAuth Identity Passthrough&lt;/td&gt;
&lt;td&gt;Acesso delegado por usuário; agente age em nome dos usuários&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;OAuth Identity Passthrough é o interessante. Quando usuários precisam dar a um agente acesso aos seus dados pessoais — seu OneDrive, sua organização Salesforce, uma API SaaS com escopo por usuário — o agente age em seu nome com fluxos OAuth padrão. Sem identidade de sistema compartilhada fingindo ser todos.&lt;/p&gt;
&lt;h2 id="voice-live-voz-a-voz-sem-a-encanação"&gt;Voice Live: voz a voz sem a encanação&lt;/h2&gt;
&lt;p&gt;Adicionar voz a um agente costumava significar juntar STT, LLM e TTS — três serviços, três saltos de latência, três superfícies de faturamento, tudo sincronizado à mão. &lt;strong&gt;Voice Live&lt;/strong&gt; colapsa isso em uma única API gerenciada com:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Detecção semântica de atividade de voz e fim de turno (entende significado, não apenas silêncio)&lt;/li&gt;
&lt;li&gt;Supressão de ruído e cancelamento de eco do lado do servidor&lt;/li&gt;
&lt;li&gt;Suporte a barge-in (usuários podem interromper no meio da resposta)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interações de voz passam pelo mesmo runtime de agente que o texto. Mesmos avaliadores, mesmos traces, mesma visibilidade de custos. Para suporte ao cliente, serviço de campo ou cenários de acessibilidade, isso substitui o que antes requeria um pipeline de áudio personalizado.&lt;/p&gt;
&lt;h2 id="avaliações-de-checkbox-para-monitoramento-contínuo"&gt;Avaliações: de checkbox para monitoramento contínuo&lt;/h2&gt;
&lt;p&gt;Aqui é onde o Foundry fica sério sobre qualidade em produção. O sistema de avaliação agora tem três camadas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Avaliadores prontos para uso&lt;/strong&gt; — coerência, relevância, fundamentação, qualidade de recuperação, segurança. Conecte a um dataset ou tráfego ao vivo e obtenha pontuações.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Avaliadores personalizados&lt;/strong&gt; — codifique sua própria lógica de negócio, padrões de tom e regras de conformidade específicas do domínio.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Avaliação contínua&lt;/strong&gt; — Foundry amostra tráfego de produção ao vivo, executa sua suíte de avaliadores e exibe resultados em dashboards. Configure alertas do Azure Monitor para quando a fundamentação cai ou limites de segurança são violados.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tudo é publicado no Azure Monitor Application Insights. Qualidade do agente, saúde da infraestrutura, custo e telemetria da aplicação — tudo em um só lugar.&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="seis-novas-regiões-para-agentes-hospedados"&gt;Seis novas regiões para agentes hospedados&lt;/h2&gt;
&lt;p&gt;Agentes hospedados agora estão disponíveis em East US, North Central US, Sweden Central, Southeast Asia, Japan East e mais. Isso importa para requisitos de residência de dados e para comprimir latência quando seu agente roda perto de suas fontes de dados.&lt;/p&gt;
&lt;h2 id="por-que-isso-importa-para-desenvolvedores-net"&gt;Por que isso importa para desenvolvedores .NET&lt;/h2&gt;
&lt;p&gt;Embora os exemplos de código no anúncio de GA sejam Python-first, a infraestrutura subjacente é agnóstica a linguagem — e o SDK .NET para &lt;code&gt;azure-ai-projects&lt;/code&gt; segue os mesmos padrões. A Responses API, o framework de avaliação, a rede privada, a autenticação MCP — tudo isso está disponível a partir do .NET.&lt;/p&gt;
&lt;p&gt;Se você tem esperado os agentes IA passarem de &amp;ldquo;demo legal&amp;rdquo; para &amp;ldquo;consigo realmente entregar isso no trabalho&amp;rdquo;, esta versão GA é o sinal. Rede privada, autenticação adequada, avaliação contínua e monitoramento de produção são as peças que faltavam.&lt;/p&gt;
&lt;h2 id="para-finalizar"&gt;Para finalizar&lt;/h2&gt;
&lt;p&gt;Foundry Agent Service está disponível agora. Instale o SDK, abra &lt;a href="https://ai.azure.com"&gt;o portal&lt;/a&gt; e comece a construir. O &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;guia de início rápido&lt;/a&gt; leva você de zero a um agente rodando em minutos.&lt;/p&gt;
&lt;p&gt;Para o mergulho técnico completo com todos os exemplos de código, confira o &lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;anúncio de GA&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Respostas em segundo plano no Microsoft Agent Framework: chega de ansiedade com timeouts</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</guid><description>O Microsoft Agent Framework agora permite descarregar tarefas de IA de longa duração com tokens de continuação. Veja como as respostas em segundo plano funcionam e por que importam para seus agentes .NET.</description><content:encoded>&lt;p&gt;Se você já construiu algo com modelos de raciocínio como o3 ou GPT-5.2, conhece a dor. Seu agente começa a pensar numa tarefa complexa, o cliente fica esperando, e em algum ponto entre &amp;ldquo;tá tudo bem&amp;rdquo; e &amp;ldquo;será que travou?&amp;rdquo; sua conexão expira por timeout. Todo aquele trabalho? Perdido.&lt;/p&gt;
&lt;p&gt;O Microsoft Agent Framework acabou de lançar &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;respostas em segundo plano&lt;/a&gt; — e honestamente, essa é uma daquelas funcionalidades que deveria ter existido desde o primeiro dia.&lt;/p&gt;
&lt;h2 id="o-problema-com-chamadas-bloqueantes"&gt;O problema com chamadas bloqueantes&lt;/h2&gt;
&lt;p&gt;Num padrão tradicional de requisição-resposta, seu cliente bloqueia até o agente terminar. Funciona bem para tarefas rápidas. Mas quando você pede a um modelo de raciocínio que faça pesquisa profunda, análise em múltiplas etapas, ou gere um relatório de 20 páginas? São minutos de tempo real. Durante essa janela:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conexões HTTP podem expirar&lt;/li&gt;
&lt;li&gt;Quedas de rede matam toda a operação&lt;/li&gt;
&lt;li&gt;Seu usuário fica olhando um spinner se perguntando se algo está acontecendo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Respostas em segundo plano invertem isso completamente.&lt;/p&gt;
&lt;h2 id="como-os-tokens-de-continuação-funcionam"&gt;Como os tokens de continuação funcionam&lt;/h2&gt;
&lt;p&gt;Em vez de bloquear, você dispara a tarefa do agente e recebe um &lt;strong&gt;token de continuação&lt;/strong&gt;. Pense nisso como um ticket de retirada numa oficina — você não fica parado no balcão esperando, volta quando está pronto.&lt;/p&gt;
&lt;p&gt;O fluxo é direto:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Envie sua requisição com &lt;code&gt;AllowBackgroundResponses = true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Se o agente suporta processamento em segundo plano, você recebe um token de continuação&lt;/li&gt;
&lt;li&gt;Consulte no seu ritmo até o token retornar &lt;code&gt;null&lt;/code&gt; — isso significa que o resultado está pronto&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Aqui está a versão .NET:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://&amp;lt;myresource&amp;gt;.openai.azure.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetResponsesClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;deployment-name&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentRunOptions&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AllowBackgroundResponses&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentResponse&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Write a detailed market analysis for the Q4 product launch.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Consultar até completar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromSeconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Se o agente completa imediatamente (tarefas simples, modelos que não precisam de processamento em segundo plano), nenhum token de continuação é retornado. Seu código simplesmente funciona — sem tratamento especial necessário.&lt;/p&gt;
&lt;h2 id="streaming-com-retomada-a-verdadeira-mágica"&gt;Streaming com retomada: a verdadeira mágica&lt;/h2&gt;
&lt;p&gt;Polling é bom para cenários de disparar e esquecer, mas e quando você quer progresso em tempo real? Respostas em segundo plano também suportam streaming com retomada embutida.&lt;/p&gt;
&lt;p&gt;Cada atualização do stream carrega seu próprio token de continuação. Se sua conexão cair no meio do stream, você retoma exatamente de onde parou:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentRunOptions&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AllowBackgroundResponses&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentResponseUpdate&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunStreamingAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;&amp;#34;Write a detailed market analysis for the Q4 product launch.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Simular uma interrupção de rede&lt;/span&gt;
&lt;/span&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;// Retomar exatamente de onde paramos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunStreamingAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;O agente continua processando no servidor independentemente do que aconteça com seu cliente. Isso é tolerância a falhas embutida sem que você escreva lógica de retry ou circuit breakers.&lt;/p&gt;
&lt;h2 id="quando-realmente-usar-isso"&gt;Quando realmente usar isso&lt;/h2&gt;
&lt;p&gt;Nem toda chamada ao agente precisa de respostas em segundo plano. Para completações rápidas, você está adicionando complexidade sem razão. Mas aqui é onde elas brilham:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tarefas de raciocínio complexo&lt;/strong&gt; — análise em múltiplas etapas, pesquisa profunda, qualquer coisa que faça um modelo de raciocínio realmente pensar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Geração de conteúdo longo&lt;/strong&gt; — relatórios detalhados, documentos de múltiplas partes, análises extensas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redes pouco confiáveis&lt;/strong&gt; — clientes móveis, deployments no edge, VPNs corporativas instáveis&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Padrões UX assíncronos&lt;/strong&gt; — envie uma tarefa, vá fazer outra coisa, volte para os resultados&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para nós desenvolvedores .NET construindo apps empresariais, esse último é particularmente interessante. Pense numa app Blazor onde um usuário solicita um relatório complexo — você dispara a tarefa do agente, mostra um indicador de progresso, e os deixa continuar trabalhando. Sem ginástica de WebSocket, sem infraestrutura de filas personalizada, apenas um token e um loop de polling.&lt;/p&gt;
&lt;h2 id="para-finalizar"&gt;Para finalizar&lt;/h2&gt;
&lt;p&gt;Respostas em segundo plano estão disponíveis agora tanto em .NET quanto em Python através do Microsoft Agent Framework. Se você está construindo agentes que fazem algo mais complexo que simples Q&amp;amp;A, vale a pena adicionar isso ao seu toolkit. O padrão de token de continuação mantém as coisas simples enquanto resolve um problema de produção muito real.&lt;/p&gt;
&lt;p&gt;Confira a &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;documentação completa&lt;/a&gt; para a referência completa da API e mais exemplos.&lt;/p&gt;</content:encoded></item></channel></rss>