<?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/ru/tags/architecture/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ru</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/ru/tags/architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>SDD Conference 2026</title><link>https://thedotnetblog.com/ru/events/sdd-conference-2026/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://thedotnetblog.com/ru/events/sdd-conference-2026/</guid><description>5-дневная конференция по разработке ПО в Barbican Centre в Лондоне с 78 сессиями и 14 воркшопами по архитектуре, .NET, ИИ, Azure, DevOps и другим темам.</description><content:encoded>&lt;p&gt;&lt;strong&gt;SDD 2026&lt;/strong&gt; проходит с &lt;strong&gt;11 по 15 мая 2026 года&lt;/strong&gt; в &lt;strong&gt;Barbican Centre в Лондоне&lt;/strong&gt;. Основная 3-дневная конференция — со вторника по четверг, с опциональными однодневными воркшопами в понедельник и пятницу.&lt;/p&gt;
&lt;p&gt;С &lt;strong&gt;78 сессиями&lt;/strong&gt; и &lt;strong&gt;14 воркшопами&lt;/strong&gt; это одна из самых насыщенных конференций для разработчиков в Европе.&lt;/p&gt;
&lt;h2 id="темы"&gt;Темы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Архитектурное мышление&lt;/li&gt;
&lt;li&gt;Функциональный код на C# 13&lt;/li&gt;
&lt;li&gt;Serverless-дизайн&lt;/li&gt;
&lt;li&gt;Семантический ИИ&lt;/li&gt;
&lt;li&gt;Azure Kubernetes Services&lt;/li&gt;
&lt;li&gt;Lean DevOps стратегии&lt;/li&gt;
&lt;li&gt;Протокол контекста модели (MCP)&lt;/li&gt;
&lt;li&gt;Агентный ИИ в .NET&lt;/li&gt;
&lt;li&gt;Рефакторинг монолита&lt;/li&gt;
&lt;li&gt;Быстрее программировать с LLM&lt;/li&gt;
&lt;li&gt;Криптография в постквантовом мире&lt;/li&gt;
&lt;li&gt;Local-First разработка&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="спикеры"&gt;Спикеры&lt;/h2&gt;
&lt;p&gt;Программу мирового класса представляют &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; и &lt;strong&gt;Raju Gandhi&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="билеты-и-информация"&gt;Билеты и информация&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/"&gt;Сайт мероприятия&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddvault.s3.amazonaws.com/assets/SDD_2026_schedule.pdf"&gt;PDF полного расписания&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/register"&gt;Варианты регистрации&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;98% участников SDD 2025 оценили общее впечатление как хорошее, очень хорошее или отличное.&lt;/p&gt;</content:encoded></item><item><title>Создание конференционного приложения с ИИ на основе составного стека .NET</title><link>https://thedotnetblog.com/ru/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/ru/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/</guid><description>Microsoft создала ConferencePulse — приложение Blazor для живых конференций — объединив Microsoft.Extensions.AI, DataIngestion, VectorData, MCP и Agent Framework. Вот как части соединяются вместе.</description><content:encoded>&lt;p&gt;&lt;em&gt;Этот пост был переведён автоматически. Для оригинальной версии &lt;a href="https://thedotnetblog.com/ru/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/"&gt;нажмите здесь&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;Создание конференционного приложения с ИИ на основе составного стека .NET&lt;/a&gt; — Microsoft создала ConferencePulse, приложение Blazor Server для сессий живых конференций, объединив пять библиотек расширения .NET. Оно было использовано на MVP Summit.&lt;/p&gt;
&lt;h2 id="что-делает-conferencepulse"&gt;Что делает ConferencePulse&lt;/h2&gt;
&lt;p&gt;ConferencePulse работает во время живых сессий и предоставляет: опросы, сгенерированные ИИ из содержимого сессии, вопросы и ответы аудитории с конвейером RAG, извлекающим из живой базы знаний, автоматически сгенерированные выводы и резюме сессий, создаваемые несколькими одновременными агентами ИИ. Стек — .NET 10, Blazor Server, Aspire, разбитый на пять проектов: Web, Core, Ingestion, Agents, Mcp и AppHost.&lt;/p&gt;
&lt;h2 id="microsoftextensionsai-одна-абстракция-для-всего"&gt;Microsoft.Extensions.AI: одна абстракция для всего&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;IChatClient&lt;/code&gt; — это унифицированная абстракция — настраивается один раз, и тот же интерфейс работает для Azure OpenAI, OpenAI, Anthropic или любого другого провайдера. Шесть строк для получения полностью настроенного клиента с вызовом функций, трассировкой OpenTelemetry и промежуточным ПО для логирования:&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;Тот же &lt;code&gt;IChatClient&lt;/code&gt; повторно используется позже для шага обогащения приёма данных — отдельный клиент для этого не нужен.&lt;/p&gt;
&lt;h2 id="конвейер-dataingestion"&gt;Конвейер DataIngestion&lt;/h2&gt;
&lt;p&gt;Содержимое сессии проходит через конвейер: &lt;code&gt;MarkdownReader&lt;/code&gt; → &lt;code&gt;HeaderChunker&lt;/code&gt; (500 токенов, перекрытие 50 токенов) → &lt;code&gt;SummaryEnricher&lt;/code&gt; + &lt;code&gt;KeywordEnricher&lt;/code&gt; → &lt;code&gt;VectorStoreWriter&lt;/code&gt; (Qdrant). Обогатители используют тот же &lt;code&gt;IChatClient&lt;/code&gt; для генерации резюме и извлечения ключевых слов перед индексацией. Вопросы аудитории, пары вопросов и ответов и результаты опросов принимаются в режиме реального времени по мере продвижения сессии — база знаний растёт во время доклада.&lt;/p&gt;
&lt;h2 id="vectordata-поиск-независимый-от-провайдера"&gt;VectorData: поиск, независимый от провайдера&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;VectorStoreCollection.SearchAsync()&lt;/code&gt; работает одинаково независимо от того, является ли резервное хранилище Qdrant или Azure AI Search. Гибридный поиск (вектор + полный текст) поддерживается. Конвейер RAG для вопросов и ответов аудитории запрашивает эту коллекцию и получает соответствующие фрагменты для передачи в качестве контекста клиенту чата.&lt;/p&gt;
&lt;h2 id="mcp-содержимое-сессии-как-инструменты"&gt;MCP: содержимое сессии как инструменты&lt;/h2&gt;
&lt;p&gt;Содержимое сессии открывается через MCP, чтобы любой совместимый с MCP клиент мог получить к нему доступ. Реализованы как сервер, так и клиент — сервер открывает знания сессии как инструменты MCP, а клиент позволяет вызывать эти инструменты из конвейера агента.&lt;/p&gt;
&lt;h2 id="agent-framework-параллельное-многоагентное-резюме"&gt;Agent Framework: параллельное многоагентное резюме&lt;/h2&gt;
&lt;p&gt;Резюме сессии генерируется тремя агентами, работающими одновременно — &lt;code&gt;PollSummaryAgent&lt;/code&gt;, &lt;code&gt;QuestionSummaryAgent&lt;/code&gt; и &lt;code&gt;InsightSummaryAgent&lt;/code&gt; — затем объединяется. Это использует шаблон группового чата или параллельного выполнения из Microsoft Agent Framework. Каждый агент обрабатывает одну задачу; оркестратор объединяет результаты.&lt;/p&gt;
&lt;h2 id="принцип-проектирования"&gt;Принцип проектирования&lt;/h2&gt;
&lt;p&gt;В посте сделан вывод, который стоит запомнить: используйте самый простой инструмент, который подходит. Прямые вызовы &lt;code&gt;IChatClient&lt;/code&gt; для простых задач генерации. Вызов инструмента/функции для извлечения структурированных данных. Полные агенты только тогда, когда нужны автономные многошаговые рассуждения. Слоистость библиотек это обеспечивает — вы можете использовать &lt;code&gt;Microsoft.Extensions.AI&lt;/code&gt; без подключения полного Agent Framework.&lt;/p&gt;
&lt;p&gt;Смотрите &lt;a href="https://devblogs.microsoft.com/dotnet/building-ai-conference-app-dotnet-composable-stack/"&gt;полный пост&lt;/a&gt; для полной структуры проекта и ссылок на исходный код.&lt;/p&gt;</content:encoded></item><item><title>Где Ваш Агент Помнит Вещи? Практическое Руководство по Хранению Истории Чата</title><link>https://thedotnetblog.com/ru/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/ru/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>Управляется сервисом или клиентом? Линейная или ветвящаяся? Архитектурное решение, которое определяет, что ваш ИИ-агент реально умеет — с примерами кода на C# и Python.</description><content:encoded>&lt;p&gt;&lt;em&gt;Этот пост переведён автоматически. Чтобы просмотреть оригинал, &lt;a href="https://thedotnetblog.com/ru/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/"&gt;нажмите здесь&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;При создании ИИ-агента вы тратите большую часть энергии на модель, инструменты и промпты. Вопрос о том, &lt;em&gt;где хранится история разговора&lt;/em&gt;, кажется деталью реализации — но это одно из важнейших архитектурных решений, которые вам предстоит принять.&lt;/p&gt;
&lt;p&gt;Оно определяет, могут ли пользователи ветвить беседы, отменять ответы, возобновлять сессии после перезапуска и покидают ли ваши данные вашу инфраструктуру. &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;Команда Agent Framework опубликовала глубокий анализ&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="два-основных-паттерна"&gt;Два основных паттерна&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Управляемое сервисом&lt;/strong&gt;: ИИ-сервис хранит состояние разговора. Ваше приложение хранит ссылку, и сервис автоматически включает нужную историю в каждый запрос.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Управляемое клиентом&lt;/strong&gt;: ваше приложение поддерживает полную историю и отправляет нужные сообщения с каждым запросом. Сервис не имеет состояния. Вы контролируете всё.&lt;/p&gt;
&lt;h2 id="как-agent-framework-это-абстрагирует"&gt;Как Agent Framework это абстрагирует&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;Меня зовут Алиса.&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;Как меня зовут?&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;Меня зовут Алиса.&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;Как меня зовут?&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="быстрый-справочник-по-поставщикам"&gt;Быстрый справочник по поставщикам&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Поставщик&lt;/th&gt;
&lt;th&gt;Хранилище&lt;/th&gt;
&lt;th&gt;Модель&lt;/th&gt;
&lt;th&gt;Компрессия&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;Клиент&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Вы&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;Сервис&lt;/td&gt;
&lt;td&gt;Линейная&lt;/td&gt;
&lt;td&gt;Сервис&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (по умолчанию)&lt;/td&gt;
&lt;td&gt;Сервис&lt;/td&gt;
&lt;td&gt;Ветвящаяся&lt;/td&gt;
&lt;td&gt;Сервис&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic Claude, Ollama&lt;/td&gt;
&lt;td&gt;Клиент&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Вы&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="как-выбрать"&gt;Как выбрать&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Нужны ветвление или «отмена»?&lt;/strong&gt; → Responses API, управляемый сервисом&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Нужен полный контроль над данными?&lt;/strong&gt; → Управляемое клиентом с DB-бэкендом&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Простой чатбот?&lt;/strong&gt; → Линейное, управляемое сервисом, — достаточно&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Читайте &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;полный пост&lt;/a&gt; для полного дерева решений.&lt;/p&gt;</content:encoded></item></channel></rss>