<?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/pl/tags/azure/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>pl</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sat, 25 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/pl/tags/azure/index.xml" rel="self" type="application/rss+xml"/><item><title>Azure MCP Server jest Teraz .mcpb — Instaluj bez Żadnego Runtime</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</guid><description>Azure MCP Server jest teraz dostępny jako MCP Bundle (.mcpb) — pobierz, przeciągnij do Claude Desktop i gotowe. Bez Node.js, Python czy .NET.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby zobaczyć oryginalną wersję, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Wiesz, co było irytujące w konfiguracji serwerów MCP? Potrzebowałeś runtime. Node.js dla wersji npm, Python dla pip/uvx, .NET SDK dla wariantu dotnet.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;Azure MCP Server właśnie to zmienił&lt;/a&gt;. Jest teraz dostępny jako &lt;code&gt;.mcpb&lt;/code&gt; — MCP Bundle — a konfiguracja to przeciągnij i upuść.&lt;/p&gt;
&lt;h2 id="czym-jest-mcp-bundle"&gt;Czym jest MCP Bundle?&lt;/h2&gt;
&lt;p&gt;Pomyśl o tym jak o rozszerzeniu VS Code (&lt;code&gt;.vsix&lt;/code&gt;) lub rozszerzeniu przeglądarki (&lt;code&gt;.crx&lt;/code&gt;), ale dla serwerów MCP. Plik &lt;code&gt;.mcpb&lt;/code&gt; to samodzielne archiwum ZIP zawierające binarny plik serwera i wszystkie jego zależności.&lt;/p&gt;
&lt;h2 id="jak-zainstalować"&gt;Jak zainstalować&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Pobierz bundle dla swojej platformy&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Przejdź na &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server"&gt;stronę GitHub Releases&lt;/a&gt; i pobierz plik &lt;code&gt;.mcpb&lt;/code&gt; dla swojego OS i architektury.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Zainstaluj w Claude Desktop&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Najłatwiej: przeciągnij plik &lt;code&gt;.mcpb&lt;/code&gt; do okna Claude Desktop na stronie ustawień Rozszerzeń (&lt;code&gt;☰ → Plik → Ustawienia → Rozszerzenia&lt;/code&gt;). Przejrzyj szczegóły serwera, kliknij Zainstaluj, potwierdź.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Uwierzytelnij się w 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;h2 id="na-początek"&gt;Na początek&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pobieranie&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;Repozytorium&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;Dokumentacja&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;Sprawdź &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;pełny post&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>GPT-5.5 Jest Tutaj i Trafia do Azure Foundry — Co Muszą Wiedzieć Deweloperzy .NET</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</guid><description>GPT-5.5 jest ogólnie dostępny w Microsoft Foundry. Ewolucja od GPT-5 do 5.5, co naprawdę się poprawiło i jak zacząć używać go w swoich agentach już dziś.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby zobaczyć oryginalną wersję, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Microsoft właśnie ogłosił, że &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 jest ogólnie dostępny w Microsoft Foundry&lt;/a&gt;. Jeśli budujesz agentów na Azure, to jest aktualizacja, na którą czekałeś.&lt;/p&gt;
&lt;h2 id="ewolucja-gpt-5"&gt;Ewolucja GPT-5&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-5&lt;/strong&gt;: połączył rozumowanie i szybkość w jednym systemie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.4&lt;/strong&gt;: silniejsze rozumowanie wieloetapowe, wczesne możliwości agentyczne dla enterprise&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.5&lt;/strong&gt;: głębsze rozumowanie w długim kontekście, bardziej niezawodne wykonanie agentyczne, lepsza wydajność tokenów&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="co-naprawdę-się-zmieniło"&gt;Co naprawdę się zmieniło&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ulepszone kodowanie agentyczne&lt;/strong&gt;: GPT-5.5 utrzymuje kontekst w dużych bazach kodu, diagnozuje awarie architektoniczne i przewiduje wymagania testowe. Model rozumuje, na &lt;em&gt;co jeszcze&lt;/em&gt; wpływa poprawka, zanim zadziała.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wydajność tokenów&lt;/strong&gt;: Wyższa jakość danych wyjściowych przy mniejszej liczbie tokenów i mniej prób. Bezpośrednio obniżone koszty i opóźnienia w produkcji.&lt;/p&gt;
&lt;h2 id="cennik"&gt;Cennik&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Wejście ($/M tokenów)&lt;/th&gt;
&lt;th&gt;Pamięć podręczna&lt;/th&gt;
&lt;th&gt;Wyjście ($/M tokenów)&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="dlaczego-foundry-jest-ważny"&gt;Dlaczego Foundry jest ważny&lt;/h2&gt;
&lt;p&gt;Foundry Agent Service umożliwia definiowanie agentów w YAML lub połączenie ich z Microsoft Agent Framework, GitHub Copilot SDK, LangGraph lub OpenAI Agents SDK — i uruchamianie ich jako izolowanych hostowanych agentów z trwałym systemem plików, tożsamością Microsoft Entra i cenami scale-to-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;Jesteś pomocnym asystentem.&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;MójAgent&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;Sprawdź &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;pełne ogłoszenie&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Foundry Toolboxes: Jeden endpoint dla wszystkich narzędzi agentów AI</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</guid><description>Microsoft Foundry uruchomił Toolboxes w publicznym podglądzie — sposób na zarządzanie narzędziami agentów AI i ich udostępnianie przez jeden endpoint zgodny z MCP.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ten artykuł został przetłumaczony automatycznie. Aby zobaczyć oryginalną wersję, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Jest problem, który wydaje się błahy — dopóki się na niego nie natrafi. Organizacja buduje wiele agentów AI, każdy wymaga narzędzi, a każdy zespół konfiguruje je od zera. Ta sama integracja wyszukiwania, ta sama konfiguracja Azure AI Search, to samo połączenie z serwerem GitHub MCP — ale w innym repozytorium, przez inny zespół, z innymi danymi uwierzytelniającymi i bez wspólnego zarządzania.&lt;/p&gt;
&lt;p&gt;Microsoft Foundry właśnie uruchomił &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;Toolboxes&lt;/a&gt; w publicznym podglądzie — bezpośrednia odpowiedź na ten problem.&lt;/p&gt;
&lt;h2 id="czym-jest-toolbox"&gt;Czym jest Toolbox?&lt;/h2&gt;
&lt;p&gt;Toolbox to nazwany, wielokrotnie używalny zestaw narzędzi, który definiuje się raz w Foundry i udostępnia przez jeden endpoint zgodny z MCP. Każde środowisko uruchomieniowe agenta obsługujące MCP może je konsumować — bez uzależnienia od Foundry Agents.&lt;/p&gt;
&lt;p&gt;Obietnica jest prosta: &lt;strong&gt;build once, consume anywhere&lt;/strong&gt;. Zdefiniuj narzędzia, skonfiguruj uwierzytelnianie centralnie (OAuth passthrough, tożsamość zarządzana Entra), opublikuj endpoint. Każdy agent potrzebujący tych narzędzi łączy się raz i dostaje je wszystkie.&lt;/p&gt;
&lt;h2 id="cztery-filary-dwa-dostępne-dziś"&gt;Cztery filary (dwa dostępne dziś)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filar&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Co robi&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;Wkrótce&lt;/td&gt;
&lt;td&gt;Znajdowanie zatwierdzonych narzędzi bez ręcznego szukania&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;Dostępny&lt;/td&gt;
&lt;td&gt;Grupowanie narzędzi w wielokrotnie używalny bundle&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;Dostępny&lt;/td&gt;
&lt;td&gt;Jeden endpoint MCP udostępnia wszystkie narzędzia&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;Wkrótce&lt;/td&gt;
&lt;td&gt;Centralne uwierzytelnianie + obserwowalność wszystkich wywołań&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="przykład-praktyczny"&gt;Przykład praktyczny&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;Przeszukaj dokumentację i odpowiedz na issues 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;Szukaj publicznej dokumentacji&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;Po opublikowaniu Foundry udostępnia ujednolicony endpoint. Jedno połączenie — wszystkie narzędzia.&lt;/p&gt;
&lt;h2 id="brak-uzależnienia-od-foundry-agents"&gt;Brak uzależnienia od Foundry Agents&lt;/h2&gt;
&lt;p&gt;Toolboxes są &lt;strong&gt;tworzone i zarządzane&lt;/strong&gt; w Foundry, ale powierzchnią konsumpcji jest otwarty protokół MCP. Można ich używać z niestandardowych agentów (Microsoft Agent Framework, LangGraph), GitHub Copilot i innych środowisk IDE zgodnych z MCP.&lt;/p&gt;
&lt;h2 id="dlaczego-to-ważne-teraz"&gt;Dlaczego to ważne teraz&lt;/h2&gt;
&lt;p&gt;Fala wielu agentów dociera do produkcji. Każdy nowy agent to nowa powierzchnia zduplikowanej konfiguracji, przestarzałych danych uwierzytelniających i niespójnego zachowania. Podstawa Build + Consume wystarczy, by zacząć centralizować. Gdy pojawi się filar Govern, będzie dostępna w pełni obserwowalna, centralnie kontrolowana warstwa narzędzi dla całej floty agentów.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;To jeszcze wczesny etap — publiczny podgląd, Python SDK na początku, Discover i Govern jeszcze przed nami. Ale model jest solidny, a natywny design MCP oznacza, że działa z narzędziami, które już się buduje. Szczegóły w &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;oficjalnym ogłoszeniu&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>azd + GitHub Copilot: Konfiguracja projektu z AI i inteligentne rozwiązywanie błędów</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</guid><description>Azure Developer CLI integruje się teraz z GitHub Copilot, żeby wygenerować infrastrukturę projektu i naprawiać błędy wdrożeń — bez wychodzenia z terminala.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten artykuł został przetłumaczony automatycznie. Oryginalną wersję angielską znajdziesz &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/"&gt;tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Znasz ten moment, gdy chcesz wdrożyć istniejącą aplikację na Azure i patrzysz na pusty &lt;code&gt;azure.yaml&lt;/code&gt;, próbując przypomnieć sobie, czy Twoje Express API powinno używać Container Apps czy App Service? Ten moment właśnie stał się znacznie krótszy.&lt;/p&gt;
&lt;p&gt;Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) integruje się teraz z GitHub Copilot na dwa konkretne sposoby: scaffolding projektu wspomagany przez AI podczas &lt;code&gt;azd init&lt;/code&gt; oraz inteligentne rozwiązywanie błędów gdy wdrożenia kończą się niepowodzeniem. Obie funkcje działają całkowicie w terminalu.&lt;/p&gt;
&lt;h2 id="konfiguracja-z-copilotem-podczas-azd-init"&gt;Konfiguracja z Copilotem podczas azd init&lt;/h2&gt;
&lt;p&gt;Po uruchomieniu &lt;code&gt;azd init&lt;/code&gt; pojawia się opcja &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Wybierz ją, a Copilot przeanalizuje Twój codebase i wygeneruje &lt;code&gt;azure.yaml&lt;/code&gt;, szablony infrastruktury oraz moduły Bicep — na podstawie Twojego rzeczywistego kodu.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd init
# Wybierz: &amp;#34;Set up with GitHub Copilot (Preview)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Wymagania:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;azd 1.23.11 lub nowszy&lt;/strong&gt; — sprawdź przez &lt;code&gt;azd version&lt;/code&gt; lub zaktualizuj przez &lt;code&gt;azd update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aktywna subskrypcja GitHub Copilot&lt;/strong&gt; (Individual, Business lub Enterprise)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub CLI (&lt;code&gt;gh&lt;/code&gt;)&lt;/strong&gt; — &lt;code&gt;azd&lt;/code&gt; poprosi o logowanie jeśli potrzeba&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To co uważam za naprawdę użyteczne: działa w obu kierunkach. Budujesz od zera? Copilot pomaga skonfigurować właściwe usługi Azure od początku. Masz istniejącą aplikację do wdrożenia? Wskaż Copilotem na nią — konfiguracja zostanie wygenerowana bez konieczności restrukturyzacji kodu.&lt;/p&gt;
&lt;h3 id="co-faktycznie-robi"&gt;Co faktycznie robi&lt;/h3&gt;
&lt;p&gt;Powiedzmy, że masz Node.js Express API z zależnością od PostgreSQL. Zamiast ręcznie wybierać między Container Apps a App Service, a potem pisać Bicep od zera, Copilot wykrywa Twój stack i generuje:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azure.yaml&lt;/code&gt; z właściwymi ustawieniami &lt;code&gt;language&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt; i &lt;code&gt;build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Moduł Bicep dla Azure Container Apps&lt;/li&gt;
&lt;li&gt;Moduł Bicep dla Azure Database for PostgreSQL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Przed jakąkolwiek zmianą przeprowadzane są wstępne sprawdzenia — weryfikuje czystość katalogu roboczego git, pyta z wyprzedzeniem o zgodę na narzędzia serwera MCP. Nic nie dzieje się bez Twojej wiedzy.&lt;/p&gt;
&lt;h2 id="rozwiązywanie-błędów-z-copilotem"&gt;Rozwiązywanie błędów z Copilotem&lt;/h2&gt;
&lt;p&gt;Błędy wdrożenia są nieuniknione. Brakujące parametry, problemy z uprawnieniami, dostępność SKU — a komunikat o błędzie rzadko mówi to, co naprawdę musisz wiedzieć: &lt;em&gt;jak to naprawić&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Bez Copilota pętla wygląda tak: skopiuj błąd → szukaj w dokumentacji → czytaj trzy niepowiązane odpowiedzi na Stack Overflow → uruchom kilka poleceń &lt;code&gt;az&lt;/code&gt; CLI → spróbuj ponownie. Z Copilotem w &lt;code&gt;azd&lt;/code&gt; ta pętla znika. Gdy jakiekolwiek polecenie &lt;code&gt;azd&lt;/code&gt; kończy się błędem, natychmiast oferuje cztery opcje:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt; — wyjaśnienie w zrozumiałym języku, co poszło nie tak&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance&lt;/strong&gt; — instrukcje krok po kroku jak naprawić problem&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose and Guide&lt;/strong&gt; — pełna analiza + Copilot stosuje poprawkę (za Twoją zgodą) + opcjonalne ponowienie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip&lt;/strong&gt; — samodzielna obsługa&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kluczowa kwestia: Copilot ma już kontekst Twojego projektu, nieudanego polecenia i szczegółów błędu. Jego sugestie są specyficzne dla &lt;em&gt;Twojej sytuacji&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id="ustawianie-domyślnego-zachowania"&gt;Ustawianie domyślnego zachowania&lt;/h3&gt;
&lt;p&gt;Jeśli zawsze wybierasz tę samą opcję, pomiń interaktywny monit:&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;Wartości: &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;. Możesz też włączyć automatyczną naprawę i ponowienie:&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;Powrót do trybu interaktywnego w dowolnym momencie:&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="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Uruchom &lt;code&gt;azd update&lt;/code&gt; po najnowszą wersję i wypróbuj &lt;code&gt;azd init&lt;/code&gt; w swoim następnym projekcie.&lt;/p&gt;
&lt;p&gt;Przeczytaj &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/"&gt;oryginalny komunikat tutaj&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>RFT Foundry Stał Się Tańszy i Mądrzejszy — Oto Co Się Zmieniło</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</guid><description>Microsoft Foundry wysłał w tym miesiącu trzy aktualizacje RFT: globalne szkolenie dla o4-mini, nowe oceniające modele GPT-4.1 i przewodnik po najlepszych praktykach.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli tworzysz aplikacje .NET opierające się na dostrojonych modelach, aktualizacje Foundry z tego miesiąca są warte uwagi.&lt;/p&gt;
&lt;p&gt;Pełne szczegóły są w &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-foundry-finetune-april-2026/"&gt;oficjalnym ogłoszeniu&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="globalne-szkolenie-dla-o4-mini"&gt;Globalne szkolenie dla o4-mini&lt;/h2&gt;
&lt;p&gt;o4-mini to model do intensywnego rozumowania i obciążeń agentycznych. Możesz teraz uruchamiać zadania dostrajania z 13+ regionów Azure z niższymi stawkami trenowania.&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="s2"&gt;&amp;#34;trainingType&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;globalstandard&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="nowe-oceniające-modele-rodzina-gpt-41"&gt;Nowe oceniające modele: rodzina GPT-4.1&lt;/h2&gt;
&lt;p&gt;Trzy nowe opcje: GPT-4.1, GPT-4.1-mini i GPT-4.1-nano.&lt;/p&gt;
&lt;p&gt;Strategia poziomowania:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-nano&lt;/strong&gt; do wstępnych iteracji. Niski koszt, szybka pętla informacji zwrotnych.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-mini&lt;/strong&gt; gdy rubrum oceniania jest stabilne.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1&lt;/strong&gt; do produkcyjnego oceniania.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pułapka-formatu-danych-rft"&gt;Pułapka formatu danych RFT&lt;/h2&gt;
&lt;p&gt;Format danych RFT różni się od SFT. Ostatnia wiadomość w każdym wierszu musi mieć rolę User lub Developer — nie Assistant.&lt;/p&gt;
&lt;h2 id="dlaczego-to-ważne-dla-programistów-net"&gt;Dlaczego to ważne dla programistów .NET&lt;/h2&gt;
&lt;p&gt;Tańsze szkolenie oznacza, że możesz bardziej agresywnie iterować. Przewodnik po najlepszych praktykach na &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; zaoszczędzi ci czasu debugowania.&lt;/p&gt;</content:encoded></item><item><title>Twoje Eksperymenty AI na Azure Palą Pieniądze — Oto Jak To Naprawić</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</guid><description>Obciążenia AI na Azure mogą szybko stać się drogie. Porozmawiajmy o tym, co naprawdę działa w zakresie kontroli kosztów bez spowalniania rozwoju.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli teraz budujesz aplikacje oparte na AI na Azure, pewnie już to zauważyłeś: twój rachunek w chmurze wygląda inaczej. Nie tylko wyższy — dziwniejszy. Skokowy. Trudny do przewidzenia.&lt;/p&gt;
&lt;p&gt;Microsoft opublikował świetny artykuł o &lt;a href="https://azure.microsoft.com/en-us/blog/cloud-cost-optimization-principles-that-still-matter/"&gt;zasadach optymalizacji kosztów w chmurze, które wciąż mają znaczenie&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="dlaczego-obciążenia-ai-są-inne"&gt;Dlaczego obciążenia AI są inne&lt;/h2&gt;
&lt;p&gt;Tradycyjne obciążenia .NET są stosunkowo przewidywalne. Obciążenia AI? Ani trochę. Testujesz wiele modeli, uruchamiasz infrastrukturę GPU, robisz wywołania API Azure OpenAI, gdzie zużycie tokenów drastycznie się waha.&lt;/p&gt;
&lt;h2 id="zarządzanie-vs-optymalizacja--znaj-różnicę"&gt;Zarządzanie vs. optymalizacja — znaj różnicę&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zarządzanie&lt;/strong&gt;: śledzenie i raportowanie.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optymalizacja&lt;/strong&gt;: faktyczne podejmowanie decyzji. Czy naprawdę potrzebujesz tego poziomu S3? Czy ta instancja siedzi bezczynnie w weekendy?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="co-naprawdę-działa"&gt;Co naprawdę działa&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Taguj zasoby&lt;/strong&gt; — jeśli nie wiesz, który projekt je twój budżet, nie możesz nic optymalizować&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ustaw bariery przed eksperymentami&lt;/strong&gt; — używaj Azure Policy do ograniczania drogich jednostek SKU&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stale dopasowuj rozmiary&lt;/strong&gt; — sprawdzaj rekomendacje Azure Advisor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Myśl o cyklu życia&lt;/strong&gt; — zasoby dev powinny być wyłączane&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mierz wartość, nie tylko koszt&lt;/strong&gt; — droższy model dający znacznie lepsze wyniki może być właściwym wyborem&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Narzędzia Azure MCP Są Teraz Wbudowane w Visual Studio 2022 — Żadnego Rozszerzenia</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</guid><description>Narzędzia Azure MCP są dostarczane jako część obciążenia deweloperskiego Azure w Visual Studio 2022. Ponad 230 narzędzi, 45 usług Azure, zero rozszerzeń do zainstalowania.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli korzystałeś z narzędzi Azure MCP w Visual Studio przez oddzielne rozszerzenie, znasz procedurę — zainstaluj VSIX, zrestartuj, miej nadzieję, że nie popsuje, zarządzaj niezgodnościami wersji. To tarcie zniknęło.&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;ogłosiła&lt;/a&gt;, że narzędzia Azure MCP są teraz dostarczane bezpośrednio jako część obciążenia deweloperskiego Azure w Visual Studio 2022. Żadnego rozszerzenia. Żadnego VSIX.&lt;/p&gt;
&lt;h2 id="co-to-faktycznie-oznacza"&gt;Co to faktycznie oznacza&lt;/h2&gt;
&lt;p&gt;Ponad 230 narzędzi w 45 usługach Azure — dostępnych bezpośrednio z okna czatu. Wylistuj swoje konta pamięci masowej, wdróż aplikację ASP.NET Core, diagnostykuj problemy App Service — wszystko bez otwierania karty przeglądarki.&lt;/p&gt;
&lt;h2 id="jak-włączyć"&gt;Jak włączyć&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Zaktualizuj do Visual Studio 2022 &lt;strong&gt;17.14.30&lt;/strong&gt; lub nowszego&lt;/li&gt;
&lt;li&gt;Upewnij się, że obciążenie &lt;strong&gt;Azure development&lt;/strong&gt; jest zainstalowane&lt;/li&gt;
&lt;li&gt;Otwórz GitHub Copilot Chat&lt;/li&gt;
&lt;li&gt;Kliknij przycisk &lt;strong&gt;Wybierz narzędzia&lt;/strong&gt; (ikona dwóch kluczy)&lt;/li&gt;
&lt;li&gt;Włącz &lt;strong&gt;Azure MCP Server&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pozostaje włączone między sesjami.&lt;/p&gt;
&lt;h2 id="zastrzeżenie"&gt;Zastrzeżenie&lt;/h2&gt;
&lt;p&gt;Narzędzia są domyślnie wyłączone — musisz je włączyć. Dla .NET deweloperów korzystających z Visual Studio oznacza to jeszcze mniej powodów do przełączania kontekstu do portalu Azure.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 Dostaje MongoDB EF Core i Azure Data Lake — Dwie Integracje Warte Wypróbowania</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</guid><description>Aspire 13.2 dodaje integracje MongoDB Entity Framework Core i Azure Data Lake Storage z automatycznymi health checks i service discovery. Oto jak wyglądają w praktyce.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aspire 13.2 właśnie wylądował z dwiema nowymi integracjami bazodanowymi, które są warte uwagi: MongoDB Entity Framework Core i Azure Data Lake Storage.&lt;/p&gt;
&lt;h2 id="mongodb-spotyka-ef-core-w-aspire"&gt;MongoDB spotyka EF Core w Aspire&lt;/h2&gt;
&lt;p&gt;To ta, z której jestem najbardziej podekscytowany. Aspire obsługiwał MongoDB przez chwilę, ale zawsze był to surowy sterownik — bez EF Core, bez DbContext, bez zapytań LINQ. Teraz otrzymujesz pełne doświadczenie EF Core z MongoDB, wraz z automatycznymi health checks i service discovery Aspire.&lt;/p&gt;
&lt;p&gt;Konfiguracja w 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;W projekcie klienckim:&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;Zarejestruj DbContext:&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;Integracja obsługuje connection pooling, ślady OpenTelemetry i health checks za kulisami.&lt;/p&gt;
&lt;h2 id="azure-data-lake-storage-dołącza-do-zabawy"&gt;Azure Data Lake Storage dołącza do zabawy&lt;/h2&gt;
&lt;p&gt;W 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;W projekcie klienckim:&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;Żadnego ręcznego zarządzania ciągami połączeń, żadnego polowania na poświadczenia.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 to wydanie przyrostowe, ale integracje MongoDB EF Core i Data Lake wypełniają rzeczywiste luki. &lt;a href="https://get.aspire.dev"&gt;Zaktualizuj do 13.2&lt;/a&gt; i wypróbuj je.&lt;/p&gt;</content:encoded></item><item><title>azd update — Jedno Polecenie do Wszystkich Menedżerów Pakietów</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>Azure Developer CLI ma teraz uniwersalne polecenie aktualizacji, które działa niezależnie od metody instalacji — winget, Homebrew, Chocolatey lub skrypt instalacyjny.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Znasz ten komunikat &amp;ldquo;Dostępna jest nowa wersja azd&amp;rdquo;, który pojawia się co kilka tygodni? Ten, który odrzucasz, bo nie pamiętasz, czy zainstalowałeś &lt;code&gt;azd&lt;/code&gt; przez winget, Homebrew czy ten skrypt curl z sześciu miesięcy temu? To jest w końcu naprawione.&lt;/p&gt;
&lt;p&gt;Microsoft właśnie dostarczył &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt; — pojedyncze polecenie, które aktualizuje Azure Developer CLI do najnowszej wersji niezależnie od tego, jak go pierwotnie zainstalowałeś.&lt;/p&gt;
&lt;h2 id="jak-to-działa"&gt;Jak to działa&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;To wszystko. Dla wczesnego dostępu do nowych funkcji:&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;Polecenie wykrywa Twoją aktualną metodę instalacji i używa odpowiedniego mechanizmu aktualizacji.&lt;/p&gt;
&lt;h2 id="mały-haczyk"&gt;Mały haczyk&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt; jest dostarczany od wersji 1.23.x. Jeśli jesteś na starszej wersji, będziesz musiał wykonać jedną ostatnią ręczną aktualizację. Potem &lt;code&gt;azd update&lt;/code&gt; zajmuje się wszystkim.&lt;/p&gt;
&lt;h2 id="dlaczego-to-ważne"&gt;Dlaczego to ważne&lt;/h2&gt;
&lt;p&gt;To małe ulepszenie jakości życia, ale dla tych z nas, którzy używają &lt;code&gt;azd&lt;/code&gt; na co dzień do wdrażania agentów AI i aplikacji Aspire do Azure, bycie na bieżąco ma znaczenie.&lt;/p&gt;
&lt;p&gt;Przeczytaj &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;pełne ogłoszenie&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure Smart Tier jest GA — Automatyczna Optymalizacja Kosztów Blob Storage Bez Reguł Cyklu Życia</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</guid><description>Inteligentna warstwa Azure Blob Storage jest teraz ogólnie dostępna, automatycznie przenosząc obiekty między warstwami hot, cool i cold na podstawie rzeczywistych wzorców dostępu.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli kiedykolwiek spędziłeś czas na dostosowywaniu polityk cyklu życia Azure Blob Storage i obserwowałeś ich rozpadanie się, gdy wzorce dostępu się zmieniły, to jest coś dla Ciebie. Microsoft właśnie ogłosił &lt;a href="https://azure.microsoft.com/en-us/blog/optimize-object-storage-costs-automatically-with-smart-tier-now-generally-available/"&gt;ogólną dostępność inteligentnej warstwy&lt;/a&gt; dla Azure Blob i Data Lake Storage.&lt;/p&gt;
&lt;h2 id="co-inteligentna-warstwa-faktycznie-robi"&gt;Co inteligentna warstwa faktycznie robi&lt;/h2&gt;
&lt;p&gt;Inteligentna warstwa ciągle ocenia czas ostatniego dostępu do każdego obiektu. Często dostępne dane pozostają w hot, nieaktywne dane przechodzą do cool po 30 dniach, następnie do cold po kolejnych 60 dniach. Gdy dane są ponownie dostępne, są natychmiast promowane z powrotem do hot.&lt;/p&gt;
&lt;p&gt;Podczas podglądu Microsoft poinformował, że &lt;strong&gt;ponad 50% pojemności zarządzanej przez inteligentną warstwę automatycznie przesunęło się do chłodniejszych warstw&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="dlaczego-to-ważne-dla-deweloperów-net"&gt;Dlaczego to ważne dla deweloperów .NET&lt;/h2&gt;
&lt;p&gt;Scenariusze praktyczne:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Telemetria i logi aplikacji&lt;/strong&gt; — gorące podczas debugowania, rzadko dostępne po kilku tygodniach&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pipeline&amp;rsquo;y danych i wyniki ETL&lt;/strong&gt; — intensywnie dostępne podczas przetwarzania, potem głównie zimne&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Treści generowane przez użytkowników&lt;/strong&gt; — nowe przesłania są gorące, starsze treści stopniowo się schładzają&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="konfiguracja"&gt;Konfiguracja&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nowe konta&lt;/strong&gt;: Wybierz inteligentną warstwę jako domyślną warstwę dostępu podczas tworzenia konta&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Istniejące konta&lt;/strong&gt;: Zmień domyślną warstwę dostępu do blobów na inteligentną&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Obiekty mniejsze niż 128 KiB pozostają w hot i nie ponoszą opłaty monitoringowej.&lt;/p&gt;</content:encoded></item><item><title>Gdzie Hostować Agenty AI na Azure? Praktyczny Przewodnik po Decyzjach</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</guid><description>Azure oferuje sześć sposobów hostowania agentów AI — od surowych kontenerów po w pełni zarządzane Foundry Hosted Agents. Oto jak wybrać odpowiedni dla swojego obciążenia .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli teraz budujesz agenty AI z .NET, pewnie zauważyłeś: jest &lt;em&gt;wiele&lt;/em&gt; sposobów na hostowanie ich na Azure. Container Apps, AKS, Functions, App Service, Foundry Agents, Foundry Hosted Agents.&lt;/p&gt;
&lt;p&gt;Microsoft opublikował &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;kompleksowy przewodnik po hostowaniu agentów Azure AI&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sześć-opcji-na-pierwszy-rzut-oka"&gt;Sześć opcji na pierwszy rzut oka&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opcja&lt;/th&gt;
&lt;th&gt;Najlepsza dla&lt;/th&gt;
&lt;th&gt;Zarządzasz&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;Pełna kontrola kontenera bez K8s&lt;/td&gt;
&lt;td&gt;Obserwowalność, stan, cykl życia&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;Enterprise compliance, multi-cluster&lt;/td&gt;
&lt;td&gt;Wszystkim&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;Sterowane zdarzeniami, krótkotrwałe zadania&lt;/td&gt;
&lt;td&gt;Prawie niczym&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;Prosty agent HTTP&lt;/td&gt;
&lt;td&gt;Wdrożeniem, skalowaniem&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;Agenty bez kodu&lt;/td&gt;
&lt;td&gt;Prawie niczym&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;Agenty z własnym frameworkiem&lt;/td&gt;
&lt;td&gt;Tylko kodem agenta&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="foundry-hosted-agents--słodkie-miejsce-dla-deweloperów-agentów-net"&gt;Foundry Hosted Agents — słodkie miejsce dla deweloperów agentów .NET&lt;/h2&gt;
&lt;p&gt;Wdrożenie jest naprawdę proste:&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 ext install azure.ai.agents
&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;azd up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To pojedyncze &lt;code&gt;azd up&lt;/code&gt; buduje kontener, wypycha go do ACR, provisionuje projekt Foundry i uruchamia agenta.&lt;/p&gt;
&lt;h2 id="mój-framework-decyzyjny"&gt;Mój framework decyzyjny&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Potrzebujesz zero infrastruktury?&lt;/strong&gt; → Foundry Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Masz własny kod agenta ale chcesz zarządzanego hostingu?&lt;/strong&gt; → Foundry Hosted Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sterowane zdarzeniami, krótkotrwałe zadania?&lt;/strong&gt; → Azure Functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maksymalna kontrola kontenera?&lt;/strong&gt; → Container Apps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ścisła zgodność i multi-cluster?&lt;/strong&gt; → AKS&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Dla większości deweloperów .NET budujących z Semantic Kernel lub Microsoft Agent Framework, Hosted Agents to prawdopodobnie właściwy punkt startowy. Sprawdź &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;pełny przewodnik Microsoftu&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Umiejętności agentów w .NET stały się naprawdę elastyczne</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</guid><description>Microsoft Agent Framework obsługuje teraz trzy sposoby tworzenia umiejętności — na podstawie plików, klas i kodu inline — wszystkie komponowane przez jeden dostawca. Oto dlaczego to ważne i jak używać każdego z nich.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli budujesz agenty z Microsoft Agent Framework, znasz schemat: definiujesz umiejętności, podłączasz je do dostawcy i pozwalasz agentowi zdecydować, którą wywołać. Co nowego to &lt;em&gt;sposób&lt;/em&gt; tworzenia tych umiejętności — a skok elastyczności jest znaczący.&lt;/p&gt;
&lt;p&gt;Najnowsza aktualizacja wprowadza trzy odmienne wzorce tworzenia umiejętności agentów: &lt;strong&gt;oparty na plikach&lt;/strong&gt;, &lt;strong&gt;oparty na klasach&lt;/strong&gt; i &lt;strong&gt;zdefiniowany w kodzie inline&lt;/strong&gt;. Wszystkie trzy podłączają się do jednego &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;, co oznacza, że możesz je mieszać i dopasowywać bez żadnej logiki routingu ani specjalnego kodu spinającego. Przeprowadzę cię przez każdy z nich i kiedy po który sięgać.&lt;/p&gt;
&lt;h2 id="umiejętności-oparte-na-plikach-punkt-startowy"&gt;Umiejętności oparte na plikach: punkt startowy&lt;/h2&gt;
&lt;p&gt;Umiejętności oparte na plikach to dokładnie to, na co wskazuje nazwa — katalog na dysku z plikiem &lt;code&gt;SKILL.md&lt;/code&gt;, opcjonalnymi skryptami i dokumentami referencyjnymi. Pomyśl o tym jako o najprostszym sposobie na danie agentowi nowych możliwości:&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;Metadane w &lt;code&gt;SKILL.md&lt;/code&gt; deklarują nazwę i opis umiejętności, a sekcja instrukcji mówi agentowi, jak używać skryptów i referencji:&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;Następnie podłączasz to za pomocą &lt;code&gt;SubprocessScriptRunner.RunAsync&lt;/code&gt; do wykonania skryptów:&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;Agent automatycznie wykrywa umiejętność i wywołuje skrypt sprawdzania uprawnień, gdy jest to potrzebne. Czyste i proste.&lt;/p&gt;
&lt;h2 id="umiejętności-oparte-na-klasach-dostarcz-przez-nuget"&gt;Umiejętności oparte na klasach: dostarcz przez NuGet&lt;/h2&gt;
&lt;p&gt;Tu robi się interesująco dla zespołów. Umiejętności oparte na klasach dziedziczą z &lt;code&gt;AgentClassSkill&amp;lt;T&amp;gt;&lt;/code&gt; i używają atrybutów takich jak &lt;code&gt;[AgentSkillResource]&lt;/code&gt; i &lt;code&gt;[AgentSkillScript]&lt;/code&gt;, dzięki czemu framework odkrywa wszystko przez refleksję:&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;Piękno polega na tym, że zespół może spakować to jako pakiet NuGet. Dodajesz go do projektu, wrzucasz do buildera i działa obok umiejętności opartych na plikach bez żadnej koordynacji:&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;Obie umiejętności pojawiają się w prompcie systemowym agenta. Agent decyduje, którą użyć na podstawie rozmowy — bez kodu routingu.&lt;/p&gt;
&lt;h2 id="umiejętności-inline-szybki-pomost"&gt;Umiejętności inline: szybki pomost&lt;/h2&gt;
&lt;p&gt;Znasz ten moment, gdy inny zespół buduje dokładnie tę umiejętność, której potrzebujesz, ale nie wyda jej przez sprint? &lt;code&gt;AgentInlineSkill&lt;/code&gt; to twój pomost:&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;Dodajesz ją do buildera tak samo jak pozostałe:&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;Gdy pakiet NuGet w końcu się pojawi, wymieniasz umiejętność inline na opartą na klasach. Agent nie zna różnicy.&lt;/p&gt;
&lt;p&gt;Ale umiejętności inline nie są tylko dla pomostów. Są też właściwym wyborem, gdy musisz dynamicznie generować umiejętności w czasie działania — pomyśl jedna umiejętność na jednostkę biznesową ładowaną z konfiguracji — albo gdy skrypt musi zamykać się na lokalnym stanie, który nie należy do kontenera DI.&lt;/p&gt;
&lt;h2 id="zatwierdzanie-skryptów-człowiek-w-pętli"&gt;Zatwierdzanie skryptów: człowiek w pętli&lt;/h2&gt;
&lt;p&gt;Dla nas, programistów .NET, budujących agenty produkcyjne, to jest część, która naprawdę odblokowuje rozmowy o wdrożeniu. Niektóre skrypty mają realne konsekwencje — rejestrowanie kogoś w świadczeniach, zapytania do infrastruktury produkcyjnej. Włącz &lt;code&gt;UseScriptApproval&lt;/code&gt; i agent wstrzymuje się przed wykonaniem jakiegokolwiek skryptu:&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;Gdy agent chce uruchomić skrypt, zamiast tego zwraca żądanie zatwierdzenia. Twoja aplikacja zbiera decyzję — zatwierdź lub odrzuć — i agent kontynuuje odpowiednio. W regulowanych środowiskach to jest różnica między &amp;ldquo;możemy to wdrożyć&amp;rdquo; a &amp;ldquo;dział prawny mówi nie&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="dlaczego-ta-kombinacja-ma-znaczenie"&gt;Dlaczego ta kombinacja ma znaczenie&lt;/h2&gt;
&lt;p&gt;Prawdziwa moc nie leży w żadnym pojedynczym wzorcu tworzenia — to w kompozycji. Możesz:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zacząć mało&lt;/strong&gt; z umiejętnością opartą na plikach, iterować instrukcje i dostarczyć bez pisania C#&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dostarczać umiejętności wielokrotnego użytku&lt;/strong&gt; jako pakiety NuGet, które inne zespoły mogą dodać jedną linijką&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pomost luk&lt;/strong&gt; z umiejętnościami inline, gdy potrzebujesz czegoś &lt;em&gt;teraz&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filtrować współdzielone katalogi umiejętności&lt;/strong&gt; za pomocą predykatów, by agent ładował tylko to, co powinien&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dodawać nadzór ludzki&lt;/strong&gt; dla skryptów dotykających systemów produkcyjnych&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wszystko to komponuje się przez &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;. Żadnego specjalnego routingu, żadnej logiki warunkowej, żadnych sprawdzeń typów umiejętności.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Umiejętności agentów w .NET mają teraz naprawdę elastyczny model tworzenia. Czy jesteś samotnym programistą szkicującym prototyp z umiejętnościami opartymi na plikach, czy zespołem enterprise dostarczającym spakowane możliwości przez NuGet — wzorce się dopasowują. A mechanizm zatwierdzania skryptów sprawia, że jest gotowe do produkcji dla środowisk, gdzie potrzebujesz tego ludzkiego punktu kontrolnego.&lt;/p&gt;
&lt;p&gt;Sprawdź &lt;a href="https://devblogs.microsoft.com/agent-framework/agent-skills-in-net-three-ways-to-author-one-provider-to-run-them/"&gt;oryginalne ogłoszenie&lt;/a&gt; po pełny przewodnik, &lt;a href="https://learn.microsoft.com/en-us/agent-framework/agents/skills"&gt;dokumentację Agent Skills&lt;/a&gt; na Microsoft Learn i &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/02-agents/AgentSkills"&gt;przykłady .NET na GitHub&lt;/a&gt;, by zacząć pracę.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server 2.0 Właśnie Wylądował — Samodzielnie Hostowana Agentic Cloud Automation Jest Tutaj</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>Azure MCP Server 2.0 osiąga stabilność z samodzielnie hostowanymi zdalnymi wdrożeniami, 276 narzędziami w 57 usługach Azure i zabezpieczeniami klasy enterprise.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli ostatnio budowałeś cokolwiek z MCP i Azure, pewnie wiesz, że lokalne doświadczenie działa dobrze. Ale gdy musisz udostępnić tę konfigurację całemu zespołowi? Tam rzeczy się komplikowały.&lt;/p&gt;
&lt;p&gt;Już nie. Azure MCP Server &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;osiągnął stabilną wersję 2.0&lt;/a&gt;, a główna funkcja to dokładnie to, o co prosiły zespoły enterprise: &lt;strong&gt;obsługa samodzielnie hostowanego zdalnego serwera MCP&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="co-to-jest-azure-mcp-server"&gt;Co to jest Azure MCP Server?&lt;/h2&gt;
&lt;p&gt;Azure MCP Server implementuje specyfikację &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;Model Context Protocol&lt;/a&gt; i ujawnia możliwości Azure jako ustrukturyzowane, odkrywalne narzędzia. Liczby mówią same za siebie: &lt;strong&gt;276 narzędzi MCP w 57 usługach Azure&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="wielka-sprawa-samodzielnie-hostowane-zdalne-wdrożenia"&gt;Wielka sprawa: samodzielnie hostowane zdalne wdrożenia&lt;/h2&gt;
&lt;p&gt;W prawdziwym scenariuszu zespołowym potrzebujesz:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wspólny dostęp dla deweloperów i wewnętrznych systemów agentów&lt;/li&gt;
&lt;li&gt;Scentralizowana konfiguracja&lt;/li&gt;
&lt;li&gt;Granice sieci i polityk enterprise&lt;/li&gt;
&lt;li&gt;Integracja z pipeline&amp;rsquo;ami CI/CD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 rozwiązuje to wszystko. Do autoryzacji masz dwie opcje:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Managed Identity&lt;/strong&gt; — przy pracy z &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;Przepływ On-Behalf-Of (OBO)&lt;/strong&gt; — delegacja OpenID Connect z rzeczywistymi uprawnieniami użytkownika&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="wzmocnienie-bezpieczeństwa"&gt;Wzmocnienie bezpieczeństwa&lt;/h2&gt;
&lt;p&gt;Wersja 2.0 dodaje silniejszą walidację punktów końcowych, ochronę przed wzorcami injection i ściślejsze kontrole izolacji.&lt;/p&gt;
&lt;h2 id="pierwsze-kroki"&gt;Pierwsze kroki&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp"&gt;GitHub Repo&lt;/a&gt;&lt;/strong&gt; — kod źródłowy, dokumenty&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/docker"&gt;Docker Image&lt;/a&gt;&lt;/strong&gt; — wdrożenie w kontenerze&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;Rozszerzenie VS Code&lt;/a&gt;&lt;/strong&gt; — integracja IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;Przewodnik self-hosting&lt;/a&gt;&lt;/strong&gt; — flagowa funkcja 2.0&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Agentic Platform Engineering Staje Się Rzeczywistością — Git-APE Pokazuje Jak</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</guid><description>Projekt Git-APE Microsoftu wdraża agentic platform engineering w praktyce — używając agentów GitHub Copilot i Azure MCP do zamiany żądań w języku naturalnym na zwalidowaną infrastrukturę chmurową.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Platform engineering to jeden z tych terminów, które świetnie brzmią na konferencjach, ale zazwyczaj oznaczają &amp;ldquo;zbudowaliśmy portal wewnętrzny i wrapper Terraform.&amp;rdquo; Prawdziwa obietnica — self-service infrastruktura, która jest bezpieczna, zarządzana i szybka — zawsze była o kilka kroków za daleko.&lt;/p&gt;
&lt;p&gt;Zespół Azure właśnie opublikował &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;Part 2 swojej serii agentic platform engineering&lt;/a&gt;. Nazywają to &lt;strong&gt;Git-APE&lt;/strong&gt; — projekt open-source, który używa agentów GitHub Copilot i serwerów Azure MCP do zamiany żądań w języku naturalnym na zwalidowaną, wdrożoną infrastrukturę.&lt;/p&gt;
&lt;h2 id="co-faktycznie-robi-git-ape"&gt;Co faktycznie robi Git-APE&lt;/h2&gt;
&lt;p&gt;Podstawowy pomysł: zamiast uczyć się modułów Terraform, deweloperzy rozmawiają z agentem Copilot. Agent interpretuje intencje, generuje Infrastructure-as-Code, waliduje wobec zasad i wdraża — wszystko w VS Code.&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;Otwórz obszar roboczy w VS Code, a pliki konfiguracji agenta są automatycznie odkrywane przez GitHub Copilot:&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;Czyszczenie jest równie proste:&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="dlaczego-to-ważne"&gt;Dlaczego to ważne&lt;/h2&gt;
&lt;p&gt;Dla tych z nas budujących na Azure, przesuwa to rozmowę z &amp;ldquo;jak zbudować portal&amp;rdquo; na &amp;ldquo;jak opisać nasze guardrails jako API.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Jako deweloper .NET: Azure MCP Server i agenty GitHub Copilot działają z dowolnym obciążeniem Azure — Twoje ASP.NET Core API, .NET Aspire — wszystko może być celem agentic deployment flow.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Git-APE to wczesne, ale konkretne spojrzenie na agentic platform engineering w praktyce. Sklonuj &lt;a href="https://github.com/Azure/git-ape"&gt;repozytorium&lt;/a&gt; i przeczytaj &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;pełny post&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Foundry Marzec 2026 — GPT-5.4, Agent Service GA i Odświeżenie SDK, Które Zmienia Wszystko</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</guid><description>Aktualizacja Foundry z marca 2026 jest ogromna: Agent Service osiąga GA, GPT-5.4 przynosi niezawodne rozumowanie, SDK azure-ai-projects stabilizuje się we wszystkich językach.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Miesięczne posty &amp;ldquo;Co nowego w Microsoft Foundry&amp;rdquo; to zazwyczaj mieszanka drobnych ulepszeń. &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;Edycja z marca 2026&lt;/a&gt;? To prawie same główne funkcje.&lt;/p&gt;
&lt;h2 id="foundry-agent-service-jest-gotowy-do-produkcji"&gt;Foundry Agent Service jest gotowy do produkcji&lt;/h2&gt;
&lt;p&gt;Środowisko uruchomieniowe agentów nowej generacji jest ogólnie dostępne — zbudowane na OpenAI Responses API, kompatybilne przewodowo z agentami OpenAI.&lt;/p&gt;
&lt;p&gt;Kluczowe dodatki: kompleksowe prywatne sieci, rozszerzenie auth MCP, podgląd Voice Live i hosted agents w 6 nowych regionach.&lt;/p&gt;
&lt;h2 id="gpt-54--niezawodność-ponad-surową-inteligencję"&gt;GPT-5.4 — niezawodność ponad surową inteligencję&lt;/h2&gt;
&lt;p&gt;GPT-5.4 nie chodzi o bycie mądrzejszym. Chodzi o bycie bardziej niezawodnym.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Cena (za M tokenów)&lt;/th&gt;
&lt;th&gt;Najlepszy dla&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 (≤272K)&lt;/td&gt;
&lt;td&gt;$2.50 / $15 output&lt;/td&gt;
&lt;td&gt;Agenty produkcyjne&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Pro&lt;/td&gt;
&lt;td&gt;$30 / $180 output&lt;/td&gt;
&lt;td&gt;Głęboka analiza&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Mini&lt;/td&gt;
&lt;td&gt;Opłacalny&lt;/td&gt;
&lt;td&gt;Klasyfikacja, ekstrakcja&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="sdk-jest-w-końcu-stabilny"&gt;SDK jest w końcu stabilny&lt;/h2&gt;
&lt;p&gt;SDK &lt;code&gt;azure-ai-projects&lt;/code&gt; opublikował stabilne wersje we wszystkich językach — w tym .NET 2.0.0.&lt;/p&gt;
&lt;h2 id="fireworks-ai-przynosi-otwarte-modele-na-azure"&gt;Fireworks AI przynosi otwarte modele na Azure&lt;/h2&gt;
&lt;p&gt;DeepSeek V3.2, gpt-oss-120b, Kimi K2.5 przy uruchomieniu.&lt;/p&gt;
&lt;p&gt;Przeczytaj &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;pełne podsumowanie&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Ocena Modernizacji GitHub Copilot To Najlepsze Narzędzie Migracji, Którego Jeszcze Nie Używasz</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</guid><description>Rozszerzenie modernizacji GitHub Copilot nie tylko sugeruje zmiany kodu — produkuje pełną ocenę migracji z wykonalnymi problemami, porównaniami celów Azure i współpracującym przepływem pracy.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Migrowanie starszej aplikacji .NET Framework do nowoczesnego .NET to jedno z tych zadań, które wszyscy wiedzą, że powinni wykonać, ale nikt nie chce zaczynać.&lt;/p&gt;
&lt;p&gt;Jeffrey Fritz właśnie opublikował &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;dogłębną analizę oceny modernizacji GitHub Copilot&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="to-nie-jest-tylko-silnik-sugestii-kodu"&gt;To nie jest tylko silnik sugestii kodu&lt;/h2&gt;
&lt;p&gt;Rozszerzenie VS Code podąża za modelem &lt;strong&gt;Oceń → Planuj → Wykonaj&lt;/strong&gt;. Faza oceny analizuje całą bazę kodu i produkuje ustrukturyzowany dokument, który wszystko przechwytuje.&lt;/p&gt;
&lt;p&gt;Ocena jest przechowywana pod &lt;code&gt;.github/modernize/assessment/&lt;/code&gt;. Każde uruchomienie produkuje niezależny raport.&lt;/p&gt;
&lt;h2 id="dwa-sposoby-na-start"&gt;Dwa sposoby na start&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Zalecana ocena&lt;/strong&gt; — szybka ścieżka. Wybierz z kuratorowanych domenach (Java/.NET Upgrade, Cloud Readiness, Security).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Niestandardowa ocena&lt;/strong&gt; — ścieżka ukierunkowana. Skonfiguruj dokładnie co analizować: docelowe obliczenia (App Service, AKS, Container Apps), docelowy system operacyjny, analiza konteneryzacji.&lt;/p&gt;
&lt;h2 id="podział-problemów-jest-wykonalny"&gt;Podział problemów jest wykonalny&lt;/h2&gt;
&lt;p&gt;Każdy problem ma poziom krytyczności:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Obowiązkowy&lt;/strong&gt; — musi być naprawiony lub migracja się nie powiedzie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Potencjalny&lt;/strong&gt; — może wpłynąć na migrację, wymaga ludzkiego osądu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opcjonalny&lt;/strong&gt; — zalecane ulepszenia, nie blokuje migracji&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="moje-zdanie"&gt;Moje zdanie&lt;/h2&gt;
&lt;p&gt;Jeśli masz starsze aplikacje .NET Framework, to jest &lt;em&gt;najlepsze&lt;/em&gt; narzędzie do rozpoczęcia. Sam dokument oceny jest wart poświęconego czasu.&lt;/p&gt;
&lt;p&gt;Przeczytaj &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;pełny przewodnik&lt;/a&gt; i pobierz &lt;a href="https://aka.ms/ghcp-appmod/vscode-ext"&gt;rozszerzenie VS Code&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Połącz Swoje Serwery MCP na Azure Functions z Agentami Foundry — Oto Jak</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</guid><description>Zbuduj swój serwer MCP raz, wdróż go na Azure Functions i połącz z agentami Microsoft Foundry z właściwym uwierzytelnianiem.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jest jedna rzecz, którą kocham w ekosystemie MCP: budujesz swój serwer raz i działa wszędzie.&lt;/p&gt;
&lt;p&gt;Lily Ma z Azure SDK team &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;opublikowała praktyczny przewodnik&lt;/a&gt; dotyczący łączenia serwerów MCP wdrożonych na Azure Functions z agentami Microsoft Foundry.&lt;/p&gt;
&lt;h2 id="dlaczego-ta-kombinacja-ma-sens"&gt;Dlaczego ta kombinacja ma sens&lt;/h2&gt;
&lt;p&gt;Azure Functions daje ci skalowalną infrastrukturę, wbudowane uwierzytelnianie i bezserwerowe rozliczenia. Microsoft Foundry daje ci agentów AI, którzy mogą rozumować i działać. Połączenie obu oznacza, że twoje narzędzia stają się możliwościami agentów AI.&lt;/p&gt;
&lt;h2 id="opcje-uwierzytelniania"&gt;Opcje uwierzytelniania&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metoda&lt;/th&gt;
&lt;th&gt;Przypadek użycia&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Key-based&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Programowanie lub serwery bez Entra auth&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;Produkcja z zarządzanymi tożsamościami&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OAuth identity passthrough&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Produkcja z kontekstem użytkownika&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nieuwierzytelnione&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dev/testowanie lub dane publiczne&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="konfiguracja"&gt;Konfiguracja&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Wdróż serwer MCP na Azure Functions&lt;/strong&gt; — próbki dla &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;.NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Włącz wbudowane uwierzytelnianie MCP&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pobierz URL 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;Dodaj serwer MCP jako narzędzie w Foundry&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Przeczytaj &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;pełny przewodnik&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server — Właściwy Sposób na Danie Agentom AI Dostępu do Bazy Danych</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</guid><description>SQL MCP Server z Data API builder daje agentom AI bezpieczny, deterministyczny dostęp do bazy danych bez ujawniania schematów lub polegania na NL2SQL.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Będąc szczerym: większość dostępnych dziś serwerów MCP dla baz danych jest przerażająca. Biorą zapytanie w języku naturalnym, generują SQL w locie i uruchamiają go na twoich danych produkcyjnych.&lt;/p&gt;
&lt;p&gt;Zespół Azure SQL właśnie &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;przedstawił SQL MCP Server&lt;/a&gt;, i przyjmuje fundamentalnie inne podejście.&lt;/p&gt;
&lt;h2 id="dlaczego-nie-nl2sql"&gt;Dlaczego nie NL2SQL?&lt;/h2&gt;
&lt;p&gt;Modele nie są deterministyczne. SQL MCP Server używa podejścia &lt;strong&gt;NL2DAB&lt;/strong&gt;. Agent pracuje z warstwą abstrakcji encji Data API builder, aby deterministycznie produkować dokładne T-SQL.&lt;/p&gt;
&lt;h2 id="siedem-narzędzi-nie-siedemset"&gt;Siedem narzędzi, nie siedemset&lt;/h2&gt;
&lt;p&gt;SQL MCP Server udostępnia dokładnie siedem narzędzi DML:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;describe_entities&lt;/code&gt; — odkryj dostępne encje&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create_record&lt;/code&gt; — wstawiaj wiersze&lt;/li&gt;
&lt;li&gt;&lt;code&gt;read_records&lt;/code&gt; — zapytuj tabele i widoki&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update_record&lt;/code&gt; — modyfikuj wiersze&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete_record&lt;/code&gt; — usuń wiersze&lt;/li&gt;
&lt;li&gt;&lt;code&gt;execute_entity&lt;/code&gt; — uruchamiaj procedury składowane&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggregate_records&lt;/code&gt; — zapytania agregujące&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pierwsze-kroki-w-trzech-poleceniach"&gt;Pierwsze kroki w trzech poleceniach&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 --database-type mssql --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 --source dbo.Customers --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;h2 id="historia-bezpieczeństwa-jest-solidna"&gt;Historia bezpieczeństwa jest solidna&lt;/h2&gt;
&lt;p&gt;RBAC na każdej warstwie, integracja Azure Key Vault, Microsoft Entra + niestandardowy OAuth.&lt;/p&gt;
&lt;p&gt;Sprawdź &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;pełny post&lt;/a&gt; i &lt;a href="https://aka.ms/sql/mcp"&gt;dokumentację&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Tworzenie interfejsów użytkownika dla multi-agentowych systemów w czasie rzeczywistym — bez efektu czarnej skrzynki</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</guid><description>AG-UI i Microsoft Agent Framework łączą siły, by zapewnić multi-agentowym przepływom pracy właściwy frontend — ze streamingiem w czasie rzeczywistym, zatwierdzeniami przez człowieka i pełną widocznością działań agentów.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Oto rzecz o systemach wieloagentowych: w demonstracjach wyglądają niesamowicie. Trzy agenty przekazują sobie pracę, rozwiązują problemy, podejmują decyzje. Potem próbujesz pokazać to prawdziwym użytkownikom i&amp;hellip; cisza. Kręcący się wskaźnik. Nikt nie wie, który agent co robi ani dlaczego system jest wstrzymany. To nie jest produkt — to problem zaufania.&lt;/p&gt;
&lt;p&gt;Zespół Microsoft Agent Framework właśnie opublikował &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;świetny przewodnik&lt;/a&gt; dotyczący łączenia przepływów pracy MAF z &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;AG-UI&lt;/a&gt; — otwartym protokołem do strumieniowania zdarzeń wykonania agentów do frontendu przez Server-Sent Events. I szczerze? To jest właśnie ten most, którego nam brakowało.&lt;/p&gt;
&lt;h2 id="dlaczego-to-ważne-dla-programistów-net"&gt;Dlaczego to ważne dla programistów .NET&lt;/h2&gt;
&lt;p&gt;Jeśli budujesz aplikacje oparte na AI, prawdopodobnie trafiłeś już na tę ścianę. Twoja orkiestracja backendowa działa świetnie — agenty przekazują sobie zadania, narzędzia się uruchamiają, decyzje są podejmowane. Ale frontend nie ma pojęcia, co dzieje się za kulisami. AG-UI rozwiązuje to, definiując standardowy protokół do strumieniowania zdarzeń agentów (takich jak &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;) bezpośrednio do warstwy interfejsu przez SSE.&lt;/p&gt;
&lt;p&gt;Demonstracja, którą zbudowali, to przepływ pracy obsługi klienta z trzema agentami: agent triaży kierujący żądaniami, agent zwrotów obsługujący pieniądze i agent zamówień zarządzający wymianami. Każdy agent ma własne narzędzia, a topologia przekazywania jest jawnie zdefiniowana — żadnego &amp;ldquo;wyczuj to z kontekstu prompta&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="topologia-przekazywania-to-prawdziwa-gwiazda"&gt;Topologia przekazywania to prawdziwa gwiazda&lt;/h2&gt;
&lt;p&gt;Zwróciło moją uwagę to, jak &lt;code&gt;HandoffBuilder&lt;/code&gt; pozwala zadeklarować skierowany graf routingu między agentami:&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;Każde &lt;code&gt;add_handoff&lt;/code&gt; tworzy skierowaną krawędź z opisem w języku naturalnym. Framework generuje narzędzia przekazywania dla każdego agenta na podstawie tej topologii. Decyzje dotyczące routingu są zakorzenione w strukturze orkiestracji, a nie w tym, na co ma ochotę LLM. To ogromna rzecz dla niezawodności produkcji.&lt;/p&gt;
&lt;h2 id="człowiek-w-pętli-który-naprawdę-działa"&gt;Człowiek w pętli, który naprawdę działa&lt;/h2&gt;
&lt;p&gt;Demonstracja prezentuje dwa wzorce przerwań, które są potrzebne w każdej prawdziwej aplikacji agentowej:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Przerwania zatwierdzania narzędzi&lt;/strong&gt; — gdy agent wywołuje narzędzie oznaczone jako &lt;code&gt;approval_mode=&amp;quot;always_require&amp;quot;&lt;/code&gt;, przepływ pracy wstrzymuje się i emituje zdarzenie. Frontend renderuje modal zatwierdzenia z nazwą narzędzia i argumentami. Żadnych pętli ponownych prób — tylko czysty przepływ wstrzymaj-zatwierdź-wznów.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Przerwania żądania informacji&lt;/strong&gt; — gdy agent potrzebuje więcej kontekstu od użytkownika (jak numer zamówienia), wstrzymuje się i pyta. Frontend wyświetla pytanie, użytkownik odpowiada, a wykonanie wznawia się dokładnie tam, gdzie się zatrzymało.&lt;/p&gt;
&lt;p&gt;Oba wzorce są strumieniowane jako standardowe zdarzenia AG-UI, więc frontend nie potrzebuje niestandardowej logiki dla każdego agenta — po prostu renderuje to, co przychodzi przez połączenie SSE.&lt;/p&gt;
&lt;h2 id="podłączenie-jest-zaskakująco-proste"&gt;Podłączenie jest zaskakująco proste&lt;/h2&gt;
&lt;p&gt;Integracja między MAF a AG-UI to jedno wywołanie funkcji:&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;&lt;code&gt;workflow_factory&lt;/code&gt; tworzy nowy przepływ pracy dla każdego wątku, więc każda rozmowa otrzymuje izolowany stan. Endpoint automatycznie obsługuje całe &amp;ldquo;hydrauliczne&amp;rdquo; SSE. Jeśli już używasz FastAPI (lub możesz dodać go jako lekką warstwę), to właściwie zerowe tarcie.&lt;/p&gt;
&lt;h2 id="moje-zdanie"&gt;Moje zdanie&lt;/h2&gt;
&lt;p&gt;Dla nas, programistów .NET, natychmiastowe pytanie brzmi: &amp;ldquo;Czy mogę to zrobić w C#?&amp;rdquo; Agent Framework jest dostępny zarówno dla .NET, jak i Python, a protokół AG-UI jest niezależny od języka (to po prostu SSE). Więc choć ta konkretna demonstracja używa Python i FastAPI, wzorzec przekłada się bezpośrednio. Możesz podpiąć minimalne API ASP.NET Core z endpointami SSE zgodnie z tym samym schematem zdarzeń AG-UI.&lt;/p&gt;
&lt;p&gt;Ważniejszy wniosek: interfejsy użytkownika dla wielu agentów stają się pierwszoklasowym zagadnieniem, a nie przemyśleniem. Jeśli budujesz cokolwiek, gdzie agenty wchodzą w interakcje z ludźmi — obsługa klienta, przepływy zatwierdzeń, przetwarzanie dokumentów — ta kombinacja orkiestracji MAF i przejrzystości AG-UI to wzorzec do naśladowania.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;AG-UI + Microsoft Agent Framework zapewnia to, co najlepsze z obu światów: solidną orkiestrację wieloagentową na backendzie i widoczność w czasie rzeczywistym na frontendzie. Koniec z interakcjami agentów jako czarną skrzynką.&lt;/p&gt;
&lt;p&gt;Sprawdź &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;pełny przewodnik&lt;/a&gt; i &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;repozytorium protokołu AG-UI&lt;/a&gt;, by zagłębić się w temat.&lt;/p&gt;</content:encoded></item><item><title>azd Pozwala Teraz Uruchamiać i Debugować Agenty AI Lokalnie — Co Zmieniło Się w Marcu 2026</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>Azure Developer CLI wypuścił siedem wydań w marcu 2026. Najważniejsze: lokalna pętla uruchamiania i debugowania dla agentów AI, integracja GitHub Copilot w konfiguracji projektu i obsługa Container App Jobs.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Siedem wydań w jednym miesiącu. To co zespół Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) wypchnął w marcu 2026, a główna funkcja to ta, na którą czekałem: &lt;strong&gt;lokalna pętla uruchamiania i debugowania dla agentów AI&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="uruchamiaj-i-debuguj-agenty-ai-bez-wdrażania"&gt;Uruchamiaj i debuguj agenty AI bez wdrażania&lt;/h2&gt;
&lt;p&gt;To jest ta duża. Nowe rozszerzenie &lt;code&gt;azure.ai.agents&lt;/code&gt; dodaje zestaw poleceń:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt; — uruchamia agenta lokalnie&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt; — wysyła do niego wiadomości (lokalnie lub wdrożone)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt; — wyświetla status kontenera i zdrowie&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt; — strumieniuje logi kontenera w czasie rzeczywistym&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wcześniej testowanie agenta AI oznaczało wdrożenie do Microsoft Foundry za każdym razem. Teraz możesz iterować lokalnie.&lt;/p&gt;
&lt;h2 id="github-copilot-szkieletuje-twój-projekt-azd"&gt;GitHub Copilot szkieletuje Twój projekt azd&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt; oferuje teraz opcję &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Agent Copilot tworzy szkielet konfiguracji dla Twojej struktury projektu.&lt;/p&gt;
&lt;h2 id="container-app-jobs-i-ulepszenia-wdrażania"&gt;Container App Jobs i ulepszenia wdrażania&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; teraz wdraża &lt;code&gt;Microsoft.App/jobs&lt;/code&gt; przez istniejącą konfigurację &lt;code&gt;host: containerapp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Konfigurowalne limity czasu wdrażania&lt;/strong&gt;: Nowa flaga &lt;code&gt;--timeout&lt;/code&gt; na &lt;code&gt;azd deploy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatyczny fallback do lokalnego buildu&lt;/strong&gt;: Gdy zdalny build ACR zawiedzie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lokalna walidacja preflightowa&lt;/strong&gt;: Parametry Bicep są walidowane lokalnie przed wdrożeniem&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Lokalna pętla debugowania agentów AI to gwiazda tego wydania. Sprawdź &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;pełne notatki wydania&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>KubeCon Europe 2026: Na Czym Powinni Naprawdę Zależeć Deweloperom .NET</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</guid><description>Microsoft zrzucił ścianę ogłoszeń Kubernetes na KubeCon Europe 2026. Oto przefiltrowana wersja — tylko aktualizacje AKS i cloud-native, które mają znaczenie.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Znasz to uczucie, gdy spada ogromny post z ogłoszeniami i przewijasz go myśląc &amp;ldquo;fajne, ale co to dla mnie znaczy&amp;rdquo;?&lt;/p&gt;
&lt;p&gt;Microsoft właśnie opublikował &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;swoje pełne podsumowanie KubeCon Europe 2026&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="mtls-bez-podatku-service-mesh"&gt;mTLS bez podatku service mesh&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/application-network"&gt;Azure Kubernetes Application Network&lt;/a&gt; daje ci wzajemne TLS, autoryzację świadomą aplikacji i telemetrię ruchu — bez wdrażania pełnej siatki z sidecarami. Twoje API ASP.NET Core rozmawiające z robotnikami w tle — wszystko zaszyfrowane na poziomie sieci, bez żadnych zmian kodu aplikacji.&lt;/p&gt;
&lt;h2 id="obserwowalność-gpu"&gt;Obserwowalność GPU&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/managed-gpu-metrics"&gt;AKS teraz ujawnia metryki GPU natywnie&lt;/a&gt; do zarządzanego Prometheus i Grafana. Bez niestandardowych eksporterów.&lt;/p&gt;
&lt;h2 id="wieloklasterowa-sieć"&gt;Wieloklasterowa sieć&lt;/h2&gt;
&lt;p&gt;Azure Kubernetes Fleet Manager dostarcza teraz &lt;a href="https://aka.ms/kubernetes-fleet/networking/cross-cluster"&gt;sieciowanie między klastrami&lt;/a&gt; przez zarządzaną siatkę Cilium — unified connectivity, globalny rejestr usług.&lt;/p&gt;
&lt;h2 id="bezpieczniejsze-ulepszenia"&gt;Bezpieczniejsze ulepszenia&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ulepszenia niebiesko-zielone&lt;/strong&gt; tworzą równoległy pool węzłów. &lt;strong&gt;Wycofanie puli agentów&lt;/strong&gt; pozwala ci cofnąć się do poprzedniej wersji.&lt;/p&gt;
&lt;h2 id="gdzie-zacząć"&gt;Gdzie zacząć&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obserwowalność najpierw&lt;/strong&gt; — włącz metryki GPU i logi przepływu sieci&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wypróbuj ulepszenia niebiesko-zielone&lt;/strong&gt; — przetestuj przepływ pracy wycofywania&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pilot sieci świadomej tożsamości&lt;/strong&gt; — włącz mTLS dla jednej ścieżki usługi&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>SQL MCP Server, Copilot w SSMS i centrum baz danych z agentami AI: co naprawdę ważne z SQLCon 2026</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</guid><description>Microsoft zaprezentował stos ogłoszeń dotyczących baz danych na SQLCon 2026. Oto rzeczy, które naprawdę mają znaczenie, jeśli budujesz aplikacje oparte na AI na Azure SQL.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Microsoft właśnie zainaugurował &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 razem z FabCon w Atlancie&lt;/a&gt; i jest wiele do omówienia. Oryginalne ogłoszenie obejmuje wszystko od planów oszczędnościowych po funkcje zgodności dla przedsiębiorstw. Pominę slajdy z cenami dla enterprise i skupię się na kawałkach, które mają znaczenie, jeśli jesteś programistą budującym na Azure SQL i AI.&lt;/p&gt;
&lt;h2 id="sql-mcp-server-jest-w-publicznym-podglądzie"&gt;SQL MCP Server jest w publicznym podglądzie&lt;/h2&gt;
&lt;p&gt;To jest dla mnie nagłówek. Azure SQL Database Hyperscale ma teraz &lt;strong&gt;SQL MCP Server&lt;/strong&gt; w publicznym podglądzie, który pozwala bezpiecznie połączyć dane SQL z agentami AI i Copilotami za pomocą &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Jeśli śledziłeś falę MCP — a szczerze, trudno ją przeoczyć — to jest poważna sprawa. Zamiast budować niestandardowe potoki danych, by dostarczać kontekst z bazy danych do agentów AI, masz standardowy protokół do bezpośredniego eksponowania danych SQL. Twoje agenty mogą odpytywać, analizować i działać na żywych danych bazy danych.&lt;/p&gt;
&lt;p&gt;Dla tych z nas budujących agenty AI z Semantic Kernel lub Microsoft Agent Framework, otwiera to czystą ścieżkę integracji. Agent musi sprawdzić stan magazynu? Wyszukać rekord klienta? Zweryfikować zamówienie? MCP daje mu ustrukturyzowany sposób na zrobienie tego bez pisania niestandardowego kodu pobierania danych dla każdego scenariusza.&lt;/p&gt;
&lt;h2 id="github-copilot-w-ssms-22-jest-teraz-ogólnie-dostępny"&gt;GitHub Copilot w SSMS 22 jest teraz ogólnie dostępny&lt;/h2&gt;
&lt;p&gt;Jeśli spędzasz czas w SQL Server Management Studio — a bądźmy szczerzy, większość z nas nadal to robi — GitHub Copilot jest teraz ogólnie dostępny w SSMS 22. To samo doświadczenie Copilot, którego już używasz w VS Code i Visual Studio, ale dla T-SQL.&lt;/p&gt;
&lt;p&gt;Praktyczna wartość jest prosta: pomoc oparta na czacie do pisania zapytań, refaktoryzacji procedur składowanych, rozwiązywania problemów z wydajnością i obsługi zadań administracyjnych. Nic rewolucyjnego w koncepcji, ale mając to bezpośrednio w SSMS, nie musisz przełączać kontekstu do innego edytora tylko po to, by uzyskać pomoc AI przy pracy z bazą danych.&lt;/p&gt;
&lt;h2 id="indeksy-wektorowe-otrzymały-poważną-aktualizację"&gt;Indeksy wektorowe otrzymały poważną aktualizację&lt;/h2&gt;
&lt;p&gt;Azure SQL Database ma teraz szybsze i bardziej wydajne indeksy wektorowe z pełnym wsparciem wstawiania, aktualizacji i usuwania. To oznacza, że dane wektorowe pozostają aktualne w czasie rzeczywistym — bez wsadowego ponownego indeksowania.&lt;/p&gt;
&lt;p&gt;Co nowego:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kwantyzacja&lt;/strong&gt; dla mniejszych rozmiarów indeksów bez zbytniej utraty dokładności&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filtrowanie iteracyjne&lt;/strong&gt; dla precyzyjniejszych wyników&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ściślejsza integracja z optymalizatorem zapytań&lt;/strong&gt; dla przewidywalnej wydajności&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jeśli robisz generowanie wspomagane pobieraniem (RAG) z Azure SQL jako magazynem wektorów, te ulepszenia są bezpośrednio przydatne. Możesz trzymać wektory obok danych relacyjnych w tej samej bazie danych, co znacznie upraszcza architekturę w porównaniu do osobnej bazy wektorowej.&lt;/p&gt;
&lt;p&gt;Te same ulepszenia wektorów są również dostępne w SQL database w Fabric, ponieważ oba działają na tym samym silniku SQL.&lt;/p&gt;
&lt;h2 id="database-hub-w-fabric-zarządzanie-agentyczne"&gt;Database Hub w Fabric: zarządzanie agentyczne&lt;/h2&gt;
&lt;p&gt;Ten jest bardziej perspektywiczny, ale interesujący. Microsoft ogłosił &lt;strong&gt;Database Hub w Microsoft Fabric&lt;/strong&gt; (wczesny dostęp), który daje jeden widok na Azure SQL, Cosmos DB, PostgreSQL, MySQL i SQL Server przez Arc.&lt;/p&gt;
&lt;p&gt;Interesujący kąt nie polega tylko na ujednoliconym widoku — to agentyczne podejście do zarządzania. Agenty AI ciągłe monitorują twoją infrastrukturę baz danych, wyświetlają zmiany, wyjaśniają dlaczego mają znaczenie i sugerują co zrobić dalej. To model z człowiekiem w pętli, gdzie agent wykonuje ciężką pracę, a ty podejmujesz decyzje.&lt;/p&gt;
&lt;p&gt;Dla zespołów zarządzających więcej niż garścią baz danych, może to naprawdę zmniejszyć operacyjny szum. Zamiast skakać między portalami i ręcznie sprawdzać metryki, agent przynosi sygnał do ciebie.&lt;/p&gt;
&lt;h2 id="co-to-oznacza-dla-programistów-net"&gt;Co to oznacza dla programistów .NET&lt;/h2&gt;
&lt;p&gt;Wątek łączący wszystkie te ogłoszenia jest jasny: Microsoft wbudowuje agenty AI w każdą warstwę stosu baz danych. Nie jako gadżet, ale jako praktyczną warstwę narzędziową.&lt;/p&gt;
&lt;p&gt;Jeśli budujesz aplikacje .NET wspierane przez Azure SQL, oto co bym faktycznie zrobił:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Wypróbuj SQL MCP Server&lt;/strong&gt; jeśli budujesz agenty AI. To najczystszy sposób, by dać agentom dostęp do bazy danych bez niestandardowej hydrauliki.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Włącz Copilot w SSMS&lt;/strong&gt; jeśli jeszcze tego nie zrobiłeś — bezpłatne zwiększenie produktywności przy codziennej pracy z SQL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Przyjrzyj się indeksom wektorowym&lt;/strong&gt; jeśli robisz RAG i obecnie używasz osobnego magazynu wektorów. Konsolidacja do Azure SQL oznacza jedną usługę mniej do zarządzania.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Pełne ogłoszenie ma więcej — plany oszczędnościowe, asystentów migracji, funkcje zgodności — ale historia dla programistów jest w MCP Server, ulepszeniach wektorowych i agentycznej warstwie zarządzania. To są kawałki, które zmieniają sposób budowania, a nie tylko budżetowania.&lt;/p&gt;
&lt;p&gt;Sprawdź &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;pełne ogłoszenie od Shireesha Thoty&lt;/a&gt; po pełny obraz i &lt;a href="https://aka.ms/database-hub"&gt;zarejestruj się na wczesny dostęp do Database Hub&lt;/a&gt; jeśli chcesz wypróbować nowe doświadczenie zarządzania.&lt;/p&gt;</content:encoded></item><item><title>Azure DevOps MCP Server Trafia do Microsoft Foundry: Co To Oznacza dla Twoich Agentów AI</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</guid><description>Azure DevOps MCP Server jest teraz dostępny w Microsoft Foundry. Połącz swoje agenty AI bezpośrednio z przepływami pracy DevOps — elementy robocze, repozytoria, potoki — za pomocą kilku kliknięć.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MCP (Model Context Protocol) ma swój moment. Jeśli śledzisz ekosystem agentów AI, pewnie zauważyłeś, że serwery MCP pojawiają się wszędzie — dając agentom możliwość interakcji z zewnętrznymi narzędziami i usługami przez standaryzowany protokół.&lt;/p&gt;
&lt;p&gt;Teraz &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;Azure DevOps MCP Server jest dostępny w Microsoft Foundry&lt;/a&gt;, i jest to jedna z tych integracji, która skłania do myślenia o praktycznych możliwościach.&lt;/p&gt;
&lt;h2 id="co-się-faktycznie-dzieje"&gt;Co się faktycznie dzieje&lt;/h2&gt;
&lt;p&gt;Microsoft już wydał Azure DevOps MCP Server jako &lt;a href="https://devblogs.microsoft.com/devops/azure-devops-remote-mcp-server-public-preview"&gt;publiczny podgląd&lt;/a&gt;. Co nowego, to integracja z Foundry. Możesz teraz dodawać Azure DevOps MCP Server do swoich agentów Foundry bezpośrednio z katalogu narzędzi.&lt;/p&gt;
&lt;h2 id="konfiguracja"&gt;Konfiguracja&lt;/h2&gt;
&lt;p&gt;Konfiguracja jest zaskakująco prosta:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;W swoim agencie Foundry przejdź do &lt;strong&gt;Dodaj narzędzia&lt;/strong&gt; &amp;gt; &lt;strong&gt;Katalog&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Wyszukaj &amp;ldquo;Azure DevOps&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Wybierz Azure DevOps MCP Server (podgląd) i kliknij &lt;strong&gt;Utwórz&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Podaj nazwę swojej organizacji i połącz&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="kontrolowanie-dostępu-agenta"&gt;Kontrolowanie dostępu agenta&lt;/h2&gt;
&lt;p&gt;Możesz określić, które narzędzia są dostępne dla Twojego agenta. Jeśli chcesz, żeby tylko czytał elementy robocze, ale nie dotykał potoków, możesz to skonfigurować. Zasada najmniejszego przywileju, zastosowana do agentów AI.&lt;/p&gt;
&lt;h2 id="dlaczego-to-interesujące-dla-zespołów-net"&gt;Dlaczego to interesujące dla zespołów .NET&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Asystenci planowania sprintów&lt;/strong&gt; — agenty, które mogą pobierać elementy robocze i sugerować pojemność sprintu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Boty code review&lt;/strong&gt; — agenty rozumiejące kontekst PR&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reagowanie na incydenty&lt;/strong&gt; — agenty tworzące elementy robocze i korelujące błędy&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wdrażanie deweloperów&lt;/strong&gt; — &amp;ldquo;Co powinienem teraz zrobić?&amp;rdquo; z realną odpowiedzią&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Sprawdź &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;pełne ogłoszenie&lt;/a&gt; po szczegóły.&lt;/p&gt;</content:encoded></item><item><title>Foundry Agent Service jest GA: Co Naprawdę Ważne dla Budowniczych Agentów .NET</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</guid><description>Usługa Foundry Agent firmy Microsoft właśnie osiągnęła GA z prywatną siecią, Voice Live, ocenami produkcyjnymi i otwartym środowiskiem uruchomieniowym wielu modeli.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bądźmy szczerzy — budowanie prototypu agenta AI to łatwa część. Trudna część to wszystko potem.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;Foundry Agent Service właśnie osiągnął GA&lt;/a&gt;, a to wydanie jest skupione na tej luce &amp;ldquo;wszystko potem&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="zbudowany-na-responses-api"&gt;Zbudowany na Responses API&lt;/h2&gt;
&lt;p&gt;Nowej generacji Foundry Agent Service jest zbudowany na OpenAI Responses API. Architektura jest celowo otwarta — nie jesteś przywiązany do jednego dostawcy modeli.&lt;/p&gt;
&lt;h2 id="prywatna-sieć-blokada-enterprise-usunięta"&gt;Prywatna sieć: blokada enterprise usunięta&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Brak publicznego wyjścia&lt;/strong&gt; — ruch agenta nigdy nie dotyka publicznego internetu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iniekcja kontenera/podsieci&lt;/strong&gt; do Twojej sieci&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Łączność narzędzi&lt;/strong&gt; — serwery MCP, Azure AI Search działają przez prywatne ścieżki&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="uwierzytelnianie-mcp"&gt;Uwierzytelnianie MCP&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metoda auth&lt;/th&gt;
&lt;th&gt;Kiedy używać&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Key-based&lt;/td&gt;
&lt;td&gt;Prosty wspólny dostęp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Agent Identity&lt;/td&gt;
&lt;td&gt;Service-to-service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Managed Identity&lt;/td&gt;
&lt;td&gt;Izolacja per-projekt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAuth Identity Passthrough&lt;/td&gt;
&lt;td&gt;Delegowany dostęp użytkownika&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="voice-live"&gt;Voice Live&lt;/h2&gt;
&lt;p&gt;Voice Live składa STT, LLM i TTS w jedno zarządzane API.&lt;/p&gt;
&lt;h2 id="oceny"&gt;Oceny&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Wbudowane ewaluatory&lt;/strong&gt; — spójność, trafność, uziemienie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Niestandardowe ewaluatory&lt;/strong&gt; — Twoja własna logika biznesowa&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ciągła ocena&lt;/strong&gt; — próbkowanie żywego ruchu produkcyjnego&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sprawdź &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;przewodnik quickstart&lt;/a&gt; i &lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;ogłoszenie GA&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Od Laptopa do Produkcji: Wdrażanie Agentów AI do Microsoft Foundry Dwoma Poleceniami</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</guid><description>Azure Developer CLI ma teraz polecenia 'azd ai agent', które przenoszą Twojego agenta AI z lokalnego dev do żywego endpoint Foundry w minuty.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Znasz tę lukę między &amp;ldquo;działa na mojej maszynie&amp;rdquo; a &amp;ldquo;jest wdrożone i obsługuje ruch&amp;rdquo;? Dla agentów AI ta luka była boleśnie szeroka.&lt;/p&gt;
&lt;p&gt;Azure Developer CLI właśnie uczyniło to &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;sprawą dwóch poleceń&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="nowy-workflow-azd-ai-agent"&gt;Nowy workflow &lt;code&gt;azd ai agent&lt;/code&gt;&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 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;To wszystko. &lt;code&gt;azd ai agent init&lt;/code&gt; tworzy scaffolding infrastruktury-jako-kod w Twoim repozytorium, a &lt;code&gt;azd up&lt;/code&gt; provisionuje wszystko na Azure i publikuje Twojego agenta.&lt;/p&gt;
&lt;h2 id="co-się-dzieje-pod-maską"&gt;Co się dzieje pod maską&lt;/h2&gt;
&lt;p&gt;Polecenie &lt;code&gt;init&lt;/code&gt; generuje prawdziwe, inspekowalne szablony Bicep w Twoim repo — Foundry Resource, Foundry Project, konfiguracja wdrożenia modelu, zarządzana tożsamość z RBAC.&lt;/p&gt;
&lt;h2 id="dev-inner-loop"&gt;Dev inner loop&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 ai agent run &lt;span class="c1"&gt;# uruchom agenta lokalnie&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent invoke &lt;span class="c1"&gt;# wyślij testowe prompty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent monitor --follow &lt;span class="c1"&gt;# streamuj logi w czasie rzeczywistym&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="pełny-zestaw-poleceń"&gt;Pełny zestaw poleceń&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Polecenie&lt;/th&gt;
&lt;th&gt;Co robi&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;Scaffold projektu agenta Foundry z 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;Provisionuj zasoby i wdrożyj agenta&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;Wyślij prompty do zdalnego lub lokalnego agenta&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;Uruchom agenta lokalnie&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;Streamuj logi w czasie rzeczywistym&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;Wyczyść wszystkie zasoby Azure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Sprawdź &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;pełny przewodnik&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Odpowiedzi w Tle w Microsoft Agent Framework: Koniec z Lękiem Przed Timeoutem</title><link>https://thedotnetblog.com/pl/posts/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/pl/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</guid><description>Microsoft Agent Framework umożliwia teraz odciążanie długotrwałych zadań AI za pomocą tokenów kontynuacji. Oto jak działają odpowiedzi w tle i dlaczego mają znaczenie dla Twoich agentów .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli budowałeś cokolwiek z modelami rozumowania jak o3 lub GPT-5.2, znasz ten ból. Twój agent zaczyna przetwarzać złożone zadanie, klient czeka, a gdzieś między &amp;ldquo;to jest w porządku&amp;rdquo; a &amp;ldquo;czy to się zawiesiło?&amp;rdquo; połączenie przekracza czas.&lt;/p&gt;
&lt;p&gt;Microsoft Agent Framework właśnie dostarczył &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;odpowiedzi w tle&lt;/a&gt; — i szczerze mówiąc, to jedna z tych funkcji, która powinna istnieć od pierwszego dnia.&lt;/p&gt;
&lt;h2 id="problem-z-blokującymi-wywołaniami"&gt;Problem z blokującymi wywołaniami&lt;/h2&gt;
&lt;p&gt;W tradycyjnym wzorcu żądanie-odpowiedź klient blokuje się do momentu zakończenia przez agenta. Odpowiedzi w tle odwracają to do góry nogami.&lt;/p&gt;
&lt;h2 id="jak-działają-tokeny-kontynuacji"&gt;Jak działają tokeny kontynuacji&lt;/h2&gt;
&lt;p&gt;Zamiast blokować, uruchamiasz zadanie agenta i otrzymujesz z powrotem &lt;strong&gt;token kontynuacji&lt;/strong&gt;. Pomyśl o tym jak o numerku w garderob. Przepływ jest prosty:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Wyślij żądanie z &lt;code&gt;AllowBackgroundResponses = true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Jeśli agent obsługuje przetwarzanie w tle, otrzymujesz token kontynuacji&lt;/li&gt;
&lt;li&gt;Odpytuj według harmonogramu, aż token wróci jako &lt;code&gt;null&lt;/code&gt;&lt;/li&gt;
&lt;/ol&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;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="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;h2 id="kiedy-faktycznie-tego-używać"&gt;Kiedy faktycznie tego używać&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Złożone zadania rozumowania&lt;/strong&gt; — wieloetapowe analizy, głębokie badania&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Długa generacja treści&lt;/strong&gt; — szczegółowe raporty, wieloczęściowe dokumenty&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nierezualne sieci&lt;/strong&gt; — klienci mobilni, wdrożenia brzegowe&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asynchroniczne wzorce UX&lt;/strong&gt; — prześlij zadanie, zrób coś innego, wróć po wyniki&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sprawdź &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;pełną dokumentację&lt;/a&gt; po kompletny opis API.&lt;/p&gt;</content:encoded></item></channel></rss>