<?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>Architecture | The .NET Blog</title><link>https://thedotnetblog.com/pt/tags/architecture/</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>Mon, 11 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/pt/tags/architecture/index.xml" rel="self" type="application/rss+xml"/><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>Construindo um app de conferência com IA com a stack componível do .NET</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/</guid><description>A Microsoft criou o ConferencePulse — um app Blazor para conferências ao vivo — combinando Microsoft.Extensions.AI, DataIngestion, VectorData, MCP e Agent Framework. Veja como as peças se encaixam.</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/ai-conference-app-dotnet-composable-stack/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/building-ai-conference-app-dotnet-composable-stack/"&gt;Construindo um app de conferência com IA com a stack componível do .NET&lt;/a&gt; — A Microsoft criou o ConferencePulse, um app Blazor Server para sessões de conferência ao vivo, combinando cinco bibliotecas de extensão do .NET. Foi utilizado no MVP Summit.&lt;/p&gt;
&lt;h2 id="o-que-o-conferencepulse-faz"&gt;O que o ConferencePulse faz&lt;/h2&gt;
&lt;p&gt;O ConferencePulse é executado durante as sessões ao vivo e fornece: enquetes geradas por IA a partir do conteúdo da sessão, perguntas e respostas do público com um pipeline RAG que extrai de uma base de conhecimento ao vivo, insights gerados automaticamente e resumos de sessões produzidos por múltiplos agentes de IA concorrentes. A stack é .NET 10, Blazor Server, Aspire, dividida em cinco projetos: Web, Core, Ingestion, Agents, Mcp e AppHost.&lt;/p&gt;
&lt;h2 id="microsoftextensionsai-uma-abstração-para-tudo"&gt;Microsoft.Extensions.AI: uma abstração para tudo&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;IChatClient&lt;/code&gt; é a abstração unificada — configura-se uma vez e a mesma interface funciona para Azure OpenAI, OpenAI, Anthropic ou qualquer outro provedor. Seis linhas para obter um cliente totalmente configurado com invocação de funções, rastreamento OpenTelemetry e middleware de logging:&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;services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddChatClient&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="n"&gt;GetChatClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gpt-4o&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&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;UseFunctionInvocation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&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;UseOpenTelemetry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&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;UseLogging&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 mesmo &lt;code&gt;IChatClient&lt;/code&gt; é reutilizado posteriormente para o passo de enriquecimento da ingestão de dados — sem necessidade de um cliente separado para isso.&lt;/p&gt;
&lt;h2 id="pipeline-de-dataingestion"&gt;Pipeline de DataIngestion&lt;/h2&gt;
&lt;p&gt;O conteúdo da sessão flui por um pipeline: &lt;code&gt;MarkdownReader&lt;/code&gt; → &lt;code&gt;HeaderChunker&lt;/code&gt; (500 tokens, 50 tokens de sobreposição) → &lt;code&gt;SummaryEnricher&lt;/code&gt; + &lt;code&gt;KeywordEnricher&lt;/code&gt; → &lt;code&gt;VectorStoreWriter&lt;/code&gt; (Qdrant). Os enriquecedores usam o mesmo &lt;code&gt;IChatClient&lt;/code&gt; para gerar resumos e extrair palavras-chave antes da indexação. Perguntas do público, pares de perguntas e respostas e resultados de enquetes são ingeridos em tempo real à medida que a sessão avança — a base de conhecimento cresce durante a apresentação.&lt;/p&gt;
&lt;h2 id="vectordata-busca-independente-do-provedor"&gt;VectorData: busca independente do provedor&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;VectorStoreCollection.SearchAsync()&lt;/code&gt; funciona da mesma forma independentemente de o backing store ser Qdrant ou Azure AI Search. A busca híbrida (vetor + texto completo) é suportada. O pipeline RAG para perguntas e respostas do público consulta esta coleção e obtém chunks relevantes para passar como contexto ao cliente de chat.&lt;/p&gt;
&lt;h2 id="mcp-conteúdo-da-sessão-como-ferramentas"&gt;MCP: conteúdo da sessão como ferramentas&lt;/h2&gt;
&lt;p&gt;O conteúdo da sessão é exposto via MCP para que qualquer cliente compatível com MCP possa acessá-lo. Tanto o servidor quanto o cliente estão implementados — o servidor expõe o conhecimento da sessão como ferramentas MCP, e o cliente permite chamar essas ferramentas de dentro do pipeline do agente.&lt;/p&gt;
&lt;h2 id="agent-framework-resumo-multi-agente-em-paralelo"&gt;Agent Framework: resumo multi-agente em paralelo&lt;/h2&gt;
&lt;p&gt;O resumo da sessão é gerado por três agentes executados de forma concorrente — &lt;code&gt;PollSummaryAgent&lt;/code&gt;, &lt;code&gt;QuestionSummaryAgent&lt;/code&gt; e &lt;code&gt;InsightSummaryAgent&lt;/code&gt; — e então mesclados. Isso utiliza o padrão de chat em grupo ou execução paralela do Microsoft Agent Framework. Cada agente lida com uma preocupação; o orquestrador mescla as saídas.&lt;/p&gt;
&lt;h2 id="o-princípio-de-design"&gt;O princípio de design&lt;/h2&gt;
&lt;p&gt;O post faz um ponto que vale a pena guardar: use a ferramenta mais simples que se encaixe. Chamadas diretas ao &lt;code&gt;IChatClient&lt;/code&gt; para tarefas simples de geração. Chamada de ferramenta/função para extração de dados estruturados. Agentes completos apenas quando você precisa de raciocínio autônomo de múltiplos passos. A camada de bibliotecas impõe isso — você pode usar o &lt;code&gt;Microsoft.Extensions.AI&lt;/code&gt; sem incluir o Agent Framework completo.&lt;/p&gt;
&lt;p&gt;Consulte o &lt;a href="https://devblogs.microsoft.com/dotnet/building-ai-conference-app-dotnet-composable-stack/"&gt;post completo&lt;/a&gt; para a estrutura completa do projeto e links de código-fonte.&lt;/p&gt;</content:encoded></item><item><title>Onde seu Agente se Lembra das Coisas? Guia Prático de Armazenamento do Histórico de Chat</title><link>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pt/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>Gerenciado pelo serviço ou pelo cliente? Linear ou ramificável? A decisão arquitetural que molda o que seu agente IA pode realmente fazer — com exemplos de código em C# e Python.</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/chat-history-storage-patterns-agent-framework/"&gt;clique aqui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ao criar um agente IA, você gasta a maior parte da energia no modelo, nas ferramentas e nos prompts. A pergunta de &lt;em&gt;onde vive o histórico de conversa&lt;/em&gt; parece um detalhe de implementação — mas é uma das decisões arquiteturais mais importantes que você tomará.&lt;/p&gt;
&lt;p&gt;Ela determina se usuários podem bifurcar conversas, desfazer respostas, retomar sessões após uma reinicialização e se seus dados saem da sua infraestrutura. A &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;equipe do Agent Framework publicou uma análise aprofundada&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="dois-padrões-fundamentais"&gt;Dois padrões fundamentais&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Gerenciado pelo serviço&lt;/strong&gt;: o serviço IA armazena o estado da conversa. Seu app mantém uma referência e o serviço inclui automaticamente o histórico relevante em cada requisição.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gerenciado pelo cliente&lt;/strong&gt;: seu app mantém o histórico completo e envia mensagens relevantes com cada requisição. O serviço é stateless. Você controla tudo.&lt;/p&gt;
&lt;h2 id="como-o-agent-framework-abstrai-isso"&gt;Como o Agent Framework abstrai isso&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Meu nome é Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Qual é o meu nome?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Meu nome é Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Qual é o meu nome?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="referência-rápida-de-provedores"&gt;Referência rápida de provedores&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provedor&lt;/th&gt;
&lt;th&gt;Armazenamento&lt;/th&gt;
&lt;th&gt;Modelo&lt;/th&gt;
&lt;th&gt;Compactação&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI/Azure Chat Completions&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Você&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;Serviço&lt;/td&gt;
&lt;td&gt;Linear&lt;/td&gt;
&lt;td&gt;Serviço&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (padrão)&lt;/td&gt;
&lt;td&gt;Serviço&lt;/td&gt;
&lt;td&gt;Ramificável&lt;/td&gt;
&lt;td&gt;Serviço&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic Claude, Ollama&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Você&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="como-escolher"&gt;Como escolher&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Precisa de ramificação ou &amp;ldquo;desfazer&amp;rdquo;?&lt;/strong&gt; → Responses API gerenciado pelo serviço&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Precisa de soberania de dados?&lt;/strong&gt; → Gerenciado pelo cliente com provedor de banco de dados&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;É um chatbot simples?&lt;/strong&gt; → Gerenciado pelo serviço linear está ótimo&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Leia o &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;post completo&lt;/a&gt; para a árvore de decisão completa.&lt;/p&gt;</content:encoded></item></channel></rss>