<?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/es/tags/architecture/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>es</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/es/tags/architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>SDD Conference 2026</title><link>https://thedotnetblog.com/es/events/sdd-conference-2026/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://thedotnetblog.com/es/events/sdd-conference-2026/</guid><description>Una conferencia de 5 días sobre desarrollo de software en el Barbican Centre de Londres con 78 sesiones y 14 talleres sobre arquitectura, .NET, IA, Azure, DevOps y más.</description><content:encoded>&lt;p&gt;&lt;strong&gt;SDD 2026&lt;/strong&gt; se celebra del &lt;strong&gt;11 al 15 de mayo de 2026&lt;/strong&gt; en el &lt;strong&gt;Barbican Centre de Londres&lt;/strong&gt;. La conferencia principal de 3 días es de martes a jueves, con talleres opcionales de día completo el lunes y el viernes.&lt;/p&gt;
&lt;p&gt;Con &lt;strong&gt;78 sesiones&lt;/strong&gt; y &lt;strong&gt;14 talleres&lt;/strong&gt;, es una de las conferencias más completas para desarrolladores en Europa.&lt;/p&gt;
&lt;h2 id="temas"&gt;Temas&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pensamiento Arquitectónico&lt;/li&gt;
&lt;li&gt;Código Funcional en C# 13&lt;/li&gt;
&lt;li&gt;Diseño 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;Estrategias Lean DevOps&lt;/li&gt;
&lt;li&gt;The Model Context Protocol (MCP)&lt;/li&gt;
&lt;li&gt;IA Agéntica en .NET&lt;/li&gt;
&lt;li&gt;Refactorizando el Monolito&lt;/li&gt;
&lt;li&gt;Programar Más Rápido con LLMs&lt;/li&gt;
&lt;li&gt;Criptografía en un Mundo Post-Cuántico&lt;/li&gt;
&lt;li&gt;Desarrollo Local First&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ponentes"&gt;Ponentes&lt;/h2&gt;
&lt;p&gt;Elenco de primer nivel incluyendo a &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; y &lt;strong&gt;Raju Gandhi&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="entradas-e-información"&gt;Entradas e información&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/"&gt;Sitio web del 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 con la agenda completa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/register"&gt;Opciones de registro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El 98% de los asistentes de SDD 2025 calificaron la experiencia general como buena, muy buena o excelente.&lt;/p&gt;</content:encoded></item><item><title>Crear una app de conferencias con IA usando la pila componible de .NET</title><link>https://thedotnetblog.com/es/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/es/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/</guid><description>Microsoft creó ConferencePulse — una app Blazor para conferencias en vivo — combinando Microsoft.Extensions.AI, DataIngestion, VectorData, MCP y Agent Framework. Así encajan las piezas.</description><content:encoded>&lt;p&gt;&lt;em&gt;Este post fue traducido automáticamente. Para la versión original, &lt;a href="https://thedotnetblog.com/es/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/"&gt;haz clic aquí&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;Crear una app de conferencias con IA usando la pila componible de .NET&lt;/a&gt; — Microsoft creó ConferencePulse, una app Blazor Server para sesiones de conferencias en vivo, combinando cinco bibliotecas de extensión de .NET. La usaron en el MVP Summit.&lt;/p&gt;
&lt;h2 id="qué-hace-conferencepulse"&gt;Qué hace ConferencePulse&lt;/h2&gt;
&lt;p&gt;ConferencePulse se ejecuta durante las sesiones en vivo y proporciona: encuestas generadas por IA a partir del contenido de la sesión, preguntas y respuestas del público con un pipeline RAG que extrae de una base de conocimiento en vivo, insights generados automáticamente y resúmenes de sesiones producidos por múltiples agentes de IA concurrentes. La pila es .NET 10, Blazor Server, Aspire, dividida en cinco proyectos: Web, Core, Ingestion, Agents, Mcp y AppHost.&lt;/p&gt;
&lt;h2 id="microsoftextensionsai-una-abstracción-para-todo"&gt;Microsoft.Extensions.AI: una abstracción para todo&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;IChatClient&lt;/code&gt; es la abstracción unificada — se configura una vez y la misma interfaz funciona para Azure OpenAI, OpenAI, Anthropic o cualquier otro proveedor. Seis líneas para obtener un cliente totalmente configurado con invocación de funciones, rastreo OpenTelemetry y middleware de registro:&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;El mismo &lt;code&gt;IChatClient&lt;/code&gt; se reutiliza más adelante para el paso de enriquecimiento de la ingesta de datos — no se necesita un cliente separado para eso.&lt;/p&gt;
&lt;h2 id="pipeline-de-dataingestion"&gt;Pipeline de DataIngestion&lt;/h2&gt;
&lt;p&gt;El contenido de la sesión fluye a través de un pipeline: &lt;code&gt;MarkdownReader&lt;/code&gt; → &lt;code&gt;HeaderChunker&lt;/code&gt; (500 tokens, 50 tokens de solapamiento) → &lt;code&gt;SummaryEnricher&lt;/code&gt; + &lt;code&gt;KeywordEnricher&lt;/code&gt; → &lt;code&gt;VectorStoreWriter&lt;/code&gt; (Qdrant). Los enriquecedores usan el mismo &lt;code&gt;IChatClient&lt;/code&gt; para generar resúmenes y extraer palabras clave antes de la indexación. Las preguntas del público, los pares de preguntas y respuestas y los resultados de las encuestas se ingieren en tiempo real a medida que avanza la sesión — la base de conocimiento crece durante la charla.&lt;/p&gt;
&lt;h2 id="vectordata-búsqueda-independiente-del-proveedor"&gt;VectorData: búsqueda independiente del proveedor&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;VectorStoreCollection.SearchAsync()&lt;/code&gt; funciona igual tanto si el almacén subyacente es Qdrant como Azure AI Search. La búsqueda híbrida (vector + texto completo) es compatible. El pipeline RAG para preguntas y respuestas del público consulta esta colección y obtiene fragmentos relevantes para pasar como contexto al cliente de chat.&lt;/p&gt;
&lt;h2 id="mcp-contenido-de-la-sesión-como-herramientas"&gt;MCP: contenido de la sesión como herramientas&lt;/h2&gt;
&lt;p&gt;El contenido de la sesión se expone a través de MCP para que cualquier cliente compatible con MCP pueda acceder a él. Tanto el servidor como el cliente están implementados — el servidor expone el conocimiento de la sesión como herramientas MCP, y el cliente permite llamar a esas herramientas desde dentro del pipeline del agente.&lt;/p&gt;
&lt;h2 id="agent-framework-resumen-multi-agente-en-paralelo"&gt;Agent Framework: resumen multi-agente en paralelo&lt;/h2&gt;
&lt;p&gt;El resumen de la sesión es generado por tres agentes que se ejecutan de forma concurrente — &lt;code&gt;PollSummaryAgent&lt;/code&gt;, &lt;code&gt;QuestionSummaryAgent&lt;/code&gt; e &lt;code&gt;InsightSummaryAgent&lt;/code&gt; — y luego se fusionan. Esto utiliza el patrón de chat en grupo o ejecución paralela de Microsoft Agent Framework. Cada agente maneja una preocupación; el orquestador fusiona las salidas.&lt;/p&gt;
&lt;h2 id="el-principio-de-diseño"&gt;El principio de diseño&lt;/h2&gt;
&lt;p&gt;El post hace un punto que vale la pena recordar: usa la herramienta más simple que se adapte. Llamadas directas a &lt;code&gt;IChatClient&lt;/code&gt; para tareas de generación simples. Llamada de herramienta/función para la extracción de datos estructurados. Agentes completos solo cuando necesitas razonamiento autónomo de múltiples pasos. La superposición de bibliotecas lo enforza — puedes usar &lt;code&gt;Microsoft.Extensions.AI&lt;/code&gt; sin incluir el Agent Framework completo.&lt;/p&gt;
&lt;p&gt;Consulta el &lt;a href="https://devblogs.microsoft.com/dotnet/building-ai-conference-app-dotnet-composable-stack/"&gt;post completo&lt;/a&gt; para la estructura completa del proyecto y los enlaces al código fuente.&lt;/p&gt;</content:encoded></item><item><title>¿Dónde Recuerda las Cosas tu Agente? Guía Práctica sobre el Almacenamiento del Historial de Chat</title><link>https://thedotnetblog.com/es/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/es/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>¿Gestionado por el servicio o por el cliente? ¿Lineal o con bifurcaciones? La decisión arquitectónica que define lo que tu agente IA puede hacer realmente, con ejemplos de código en C# y Python.</description><content:encoded>&lt;p&gt;&lt;em&gt;Este post fue traducido automáticamente. Para la versión original, &lt;a href="https://thedotnetblog.com/es/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/"&gt;haz clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Cuando construyes un agente IA, dedicas la mayor parte de tu energía al modelo, las herramientas y los prompts. La pregunta de &lt;em&gt;dónde vive el historial de conversación&lt;/em&gt; parece un detalle de implementación — pero es una de las decisiones arquitectónicas más importantes que tomarás.&lt;/p&gt;
&lt;p&gt;Determina si los usuarios pueden bifurcar conversaciones, deshacer respuestas, reanudar sesiones después de un reinicio, y si tus datos salen alguna vez de tu infraestructura. El &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;equipo de Agent Framework publicó un análisis en profundidad&lt;/a&gt; y vale la pena entender el panorama completo.&lt;/p&gt;
&lt;h2 id="dos-patrones-fundamentales"&gt;Dos patrones fundamentales&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Gestionado por el servicio&lt;/strong&gt;: el servicio de IA almacena el estado de la conversación. Tu app mantiene una referencia (un ID de hilo, un ID de respuesta) y el servicio incluye automáticamente el historial relevante en cada solicitud. Más simple de configurar. Menos control.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gestionado por el cliente&lt;/strong&gt;: tu app mantiene el historial completo y envía mensajes relevantes con cada solicitud. El servicio no tiene estado. Controlas todo.&lt;/p&gt;
&lt;h2 id="gestionado-por-servicio-lineal-vs-bifurcación"&gt;Gestionado por servicio: lineal vs bifurcación&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Lineal (hilo único)&lt;/strong&gt;: los mensajes forman una secuencia ordenada. Puedes añadir pero no bifurcar. Ideal para chatbots y flujos simples. Malo para &amp;ldquo;inténtalo de nuevo&amp;rdquo; o exploración paralela.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Con capacidad de bifurcación&lt;/strong&gt;: cada respuesta tiene un ID único, y las nuevas solicitudes pueden referenciar cualquier respuesta anterior como punto de continuación. Esto es lo que soporta la API de Responses (Microsoft Foundry, Azure OpenAI, OpenAI). Permite bifurcar conversaciones y construir flujos de &amp;ldquo;deshacer&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="cómo-agent-framework-abstrae-esto"&gt;Cómo Agent Framework abstrae esto&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="c1"&gt;// C# — funciona igual independientemente del proveedor&lt;/span&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="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;Me llamo 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;¿Cuál es mi nombre?&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="c1"&gt;# Python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="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;Me llamo 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;¿Cuál es mi nombre?&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;p&gt;La sesión maneja las diferencias subyacentes. Este desacoplamiento es valioso para experimentar con diferentes proveedores sin reescribir tu código.&lt;/p&gt;
&lt;h2 id="referencia-rápida-de-proveedores"&gt;Referencia rápida de proveedores&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Proveedor&lt;/th&gt;
&lt;th&gt;Almacenamiento&lt;/th&gt;
&lt;th&gt;Modelo&lt;/th&gt;
&lt;th&gt;Compactación&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;Tú&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;Servicio&lt;/td&gt;
&lt;td&gt;Lineal&lt;/td&gt;
&lt;td&gt;Servicio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (por defecto)&lt;/td&gt;
&lt;td&gt;Servicio&lt;/td&gt;
&lt;td&gt;Bifurcación&lt;/td&gt;
&lt;td&gt;Servicio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (&lt;code&gt;store=false&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Tú&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;Tú&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="cómo-elegir"&gt;Cómo elegir&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;¿Necesitas bifurcación o &amp;ldquo;deshacer&amp;rdquo;?&lt;/strong&gt; → Responses API gestionado por servicio&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Necesitas soberanía total de datos?&lt;/strong&gt; → Gestionado por cliente con proveedor respaldado por base de datos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Es un chatbot sencillo?&lt;/strong&gt; → Lineal gestionado por servicio está bien&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Necesitas portabilidad entre proveedores?&lt;/strong&gt; → Gestionado por cliente da portabilidad&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lee el &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;post completo&lt;/a&gt; para el árbol de decisión completo y los detalles de la API de Conversations.&lt;/p&gt;</content:encoded></item></channel></rss>