<?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>Deployment | The .NET Blog</title><link>https://thedotnetblog.com/pl/tags/deployment/</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, 30 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/pl/tags/deployment/index.xml" rel="self" type="application/rss+xml"/><item><title>Twój Lokalny Agent MAF Właśnie Znalazł Dom w Produkcji</title><link>https://thedotnetblog.com/pl/news/emiliano-montesdeoca/maf-agent-local-to-production-foundry-hosted-agents/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pl/news/emiliano-montesdeoca/maf-agent-local-to-production-foundry-hosted-agents/</guid><description>Foundry Hosted Agents daje agentowi Microsoft Agent Framework tożsamość, skalowanie, trwałość sesji i obserwowalność bez dodatkowej konfiguracji. Oto jak wygląda to w praktyce.</description><content:encoded>&lt;p&gt;Sprawienie, żeby agent działał lokalnie, to zabawna część. Trudna część to wszystko, co następuje potem: wdrożenie go bez utraty zdrowego rozsądku, zarządzanie sesjami, konfiguracja tożsamości, podłączenie obserwowalności. Zwykle oznacza to dużo niestandardowej infrastruktury.&lt;/p&gt;
&lt;p&gt;Foundry Hosted Agents właśnie usunął większość tej infrastruktury dla użytkowników Microsoft Agent Framework (MAF).&lt;/p&gt;
&lt;h2 id="co-naprawdę-robi-foundry-hosted-agents"&gt;Co Naprawdę Robi Foundry Hosted Agents&lt;/h2&gt;
&lt;p&gt;Gdy wdrażasz agenta MAF do Foundry Hosted Agents, platforma obsługuje zaskakująco długą listę rzeczy, które w innym przypadku musiałbyś zbudować samodzielnie:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Skalowanie do zera&lt;/strong&gt; — agent nie kosztuje nic, gdy jest bezczynny i automatycznie wraca do działania&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Izolowane sandbox&amp;rsquo;y VM na sesję&lt;/strong&gt; — każda sesja użytkownika dostaje własny sandbox z trwałością systemu plików, która przeżywa zdarzenia skalowania w dół&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wbudowane Entra ID&lt;/strong&gt; — każdy agent dostaje własną tożsamość, aby wywoływać modele Foundry, Toolbox i usługi Azure bez sekretów wbudowanych w obraz&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wersjonowane wdrożenia&lt;/strong&gt; — każde wdrożenie to niezmienny snapshot z obsługą blue/green i canary rollout&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Obserwowalność bez konfiguracji&lt;/strong&gt; — &lt;code&gt;APPLICATIONINSIGHTS_CONNECTION_STRING&lt;/code&gt; jest wstrzykiwane w czasie wykonywania, aby ślady OpenTelemetry MAF automatycznie trafiały do App Insights&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ten ostatni jest naprawdę wygodny. Bez dodatkowego okablowania, bez dodatkowej konfiguracji. Ślady po prostu się pojawiają.&lt;/p&gt;
&lt;h2 id="różnica-w-kodzie-jest-minimalna"&gt;Różnica w Kodzie Jest Minimalna&lt;/h2&gt;
&lt;p&gt;To właśnie najbardziej cenię w tej integracji. Nie przepisujesz swojego agenta. Wystarczy go opakować:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;W .NET:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI.Foundry.Hosting&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WebApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddFoundryResponses&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MapFoundryResponses&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;W Python:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ResponsesHostServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To wszystko. Ta sama logika, którą testowałeś lokalnie, jest tym, co działa w produkcji. Platforma opakuje ją w infrastrukturę zarządzania sesjami, tożsamością i skalowaniem.&lt;/p&gt;
&lt;h2 id="dwa-protokoły-jeden-agent"&gt;Dwa Protokoły, Jeden Agent&lt;/h2&gt;
&lt;p&gt;Hosted Agents obsługują dwa style endpointów:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Responses&lt;/strong&gt; (&lt;code&gt;/responses&lt;/code&gt;) — kompatybilny z OpenAI, zarządza historią konwersacji i streamingiem. Dobry domyślny wybór dla agentów w kształcie czatu.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invocations&lt;/strong&gt; (&lt;code&gt;/invocations&lt;/code&gt;) — definiujesz schemat żądania/odpowiedzi. Dobry do przepływów pracy bez konwersacji.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jeśli budujesz coś, co wygląda jak rozmowa, zacznij od Responses. Jeśli budujesz agenta w kształcie API, który przyjmuje strukturyzowane dane wejściowe i zwraca strukturyzowane dane wyjściowe, Invocations daje ci elastyczność.&lt;/p&gt;
&lt;h2 id="przepływ-wdrożenia-z-azd"&gt;Przepływ Wdrożenia z &lt;code&gt;azd&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Gdy uruchomisz &lt;code&gt;azd up&lt;/code&gt; z agentem MAF:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Opcjonalnie tworzy projekt Foundry i wdraża model&lt;/li&gt;
&lt;li&gt;Pakuje twój kod i przesuwa obraz do Azure Container Registry&lt;/li&gt;
&lt;li&gt;Aprowizuje zasoby obliczeniowe z obrazu ACR&lt;/li&gt;
&lt;li&gt;Przypisuje agentowi dedykowane Entra ID&lt;/li&gt;
&lt;li&gt;Udostępnia stabilny endpoint (&lt;code&gt;https://{project_endpoint}/agents/{agent_name}&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Obsługuje wszystko inne od tego momentu&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sesje trwają do 30 dni. Bezczynne zasoby obliczeniowe są deprowizowane po 15 minutach i transparentnie przywracane przy następnym żądaniu. Z perspektywy agenta nic się nie zmieniło.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Odległość między &amp;ldquo;działa lokalnie&amp;rdquo; a &amp;ldquo;działa w produkcji&amp;rdquo; była historycznie długa i bolesna dla agentów AI. Foundry Hosted Agents + MAF znacznie zmniejsza tę lukę. Jeśli masz już lokalnego agenta zbudowanego z Agent Framework, warto spróbować już dziś.&lt;/p&gt;
&lt;p&gt;Zespół mówi, że GA wkrótce nadejdzie — to jest obecnie w podglądzie. Sprawdź &lt;a href="https://learn.microsoft.com/en-us/agent-framework/hosting/foundry-hosted-agent"&gt;dokumentację integracji MAF Hosted Agent&lt;/a&gt; i &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/04-hosting/FoundryHostedAgents"&gt;przykłady .NET&lt;/a&gt;, aby zacząć.&lt;/p&gt;
&lt;p&gt;Oryginalny artykuł: &lt;a href="https://devblogs.microsoft.com/agent-framework/from-local-to-production-deploy-your-microsoft-agent-framework-agent-with-foundry-hosted-agents/"&gt;From Local to Production: Deploy Your Microsoft Agent Framework Agent with Foundry Hosted Agents&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>