<?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>AI Agents | The .NET Blog</title><link>https://thedotnetblog.com/id/tags/ai-agents/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>id</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/id/tags/ai-agents/index.xml" rel="self" type="application/rss+xml"/><item><title>Microsoft Agent Framework Bagian 3: Dari Alat ke Alur Kerja — Blok Bangunan Klik ke Tempatnya</title><link>https://thedotnetblog.com/id/news/emiliano-montesdeoca/maf-building-blocks-part-3-agents-tools-workflows/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/news/emiliano-montesdeoca/maf-building-blocks-part-3-agents-tools-workflows/</guid><description>Bagian 3 dari seri Building Blocks for AI di .NET mencakup Microsoft Agent Framework — dari agen tunggal dengan alat hingga alur kerja multi-agen dengan memori. Inilah yang benar-benar penting.</description><content:encoded>&lt;p&gt;&lt;em&gt;Postingan ini telah diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/news/emiliano-montesdeoca/maf-building-blocks-part-3-agents-tools-workflows/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Jika kamu mengikuti seri Building Blocks for AI di .NET, kamu tahu: Bagian 1 memberi kita &lt;code&gt;IChatClient&lt;/code&gt; (antarmuka model universal) dan Bagian 2 memberi kita &lt;code&gt;Microsoft.Extensions.VectorData&lt;/code&gt; (pencarian semantik dan RAG). Keduanya fundamental dan berguna sendiri-sendiri. Tapi di sinilah semuanya mulai terhubung.&lt;/p&gt;
&lt;p&gt;Bagian 3 tentang &lt;a href="https://github.com/microsoft/agent-framework"&gt;Microsoft Agent Framework&lt;/a&gt; — dan sejujurnya, ini adalah bagian yang saya tunggu-tunggu di .NET. Versi 1.0 rilis April lalu. API-nya stabil. Saatnya benar-benar membangun agen.&lt;/p&gt;
&lt;h2 id="apa-itu-agen-vs-chatbot"&gt;Apa itu Agen (vs. Chatbot)&lt;/h2&gt;
&lt;p&gt;Sebelum terjun ke kode, mari kita perjelas perbedaan ini. Chatbot menerima input, memanggil model, mengembalikan output. Loop sederhana.&lt;/p&gt;
&lt;p&gt;Agen memiliki &lt;em&gt;otonomi&lt;/em&gt;. Ia dapat bernalar tentang tugas, memutuskan alat mana yang digunakan, memanggilnya, mengevaluasi hasil, dan memutuskan apa yang harus dilakukan selanjutnya — semua tanpa kamu menulis logika langkah demi langkah untuk setiap skenario. Kamu memberinya alat dan instruksi, dan ia mengurus orkestrasi sendiri.&lt;/p&gt;
&lt;p&gt;Pikirkan begini: &lt;code&gt;IChatClient&lt;/code&gt; seperti mengobrol. Agen seperti mendelegasikan daftar tugas kepada seseorang.&lt;/p&gt;
&lt;h2 id="agen-pertamamu-dalam-10-baris"&gt;Agen Pertamamu dalam 10 Baris&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;dotnet add package Microsoft.Agents.AI
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-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="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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;GetChatClient&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;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&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;You are good at telling jokes.&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;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Joker&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="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="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Tell me a joke about a pirate.&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;Metode ekstensi &lt;code&gt;.AsAIAgent()&lt;/code&gt; adalah jembatannya. Pola yang sama seperti &lt;code&gt;.AsIChatClient()&lt;/code&gt; dari MEAI — membungkus SDK penyedia dalam abstraksi yang stabil. Bekerja dengan Azure OpenAI, OpenAI, GitHub Models, Microsoft Foundry, atau model lokal.&lt;/p&gt;
&lt;p&gt;Streaming juga berfungsi:&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;await&lt;/span&gt; &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="k"&gt;in&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;RunStreamingAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Tell me a joke about a pirate.&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="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&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;h2 id="memberi-alat-kepada-agen"&gt;Memberi Alat kepada Agen&lt;/h2&gt;
&lt;p&gt;Di sinilah agen berhenti menjadi chatbot canggih. Alat adalah fungsi yang dapat diputuskan oleh model untuk dipanggil berdasarkan permintaan pengguna. Tidak perlu logika routing dari sisimu — model yang mencari tahu sendiri.&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="na"&gt;[Description(&amp;#34;Get the weather for a given location.&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;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;GetWeather&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="na"&gt; [Description(&amp;#34;The location to get the weather for.&amp;#34;)]&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;location&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;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;$&amp;#34;The weather in {location} is cloudy with a high of 15°C.&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="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;chatClient&lt;/span&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&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;You are a helpful 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;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;AIFunctionFactory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetWeather&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;Dua hal yang perlu diperhatikan. Pertama, &lt;code&gt;AIFunctionFactory&lt;/code&gt; berasal dari MEAI — tool factory yang sama yang kamu gunakan dengan &lt;code&gt;IChatClient&lt;/code&gt; biasa. Jika kamu sudah mendefinisikan alat untuk skenario chat, mereka juga berfungsi di sini.&lt;/p&gt;
&lt;p&gt;Kedua, atribut &lt;code&gt;Description&lt;/code&gt; sangat penting. Inilah cara model memahami apa yang dilakukan alat dan kapan menggunakannya. Perlakukan mereka sebagai dokumentasi untuk AI kamu, bukan untuk manusia.&lt;/p&gt;
&lt;h2 id="sesi-percakapan-yang-benar-benar-ingat"&gt;Sesi: Percakapan yang Benar-benar Ingat&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&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="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Tell me a joke about a pirate.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&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="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;Now add some emojis and tell it in the voice of a pirate&amp;#39;s parrot.&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;session&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tanpa sesi, setiap panggilan &lt;code&gt;RunAsync&lt;/code&gt; tidak berstateful. Dengan sesi, agen tahu lelucon mana yang kamu maksud. &lt;code&gt;AgentSession&lt;/code&gt; menyimpan riwayat percakapan di antara giliran.&lt;/p&gt;
&lt;p&gt;Untuk layanan tanpa state di produksi, sesi dapat diserialisasikan dengan bersih:&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;JsonElement&lt;/span&gt; &lt;span class="n"&gt;sessionState&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;SerializeSessionAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// ... simpan di suatu tempat ...&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;restoredSession&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;DeserializeSessionAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sessionState&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;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="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;What were we just talking about?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;restoredSession&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;Ini krusial jika agenmu berjalan di lingkungan serverless atau horizontally-scaled.&lt;/p&gt;
&lt;h2 id="aicontextprovider-memori-persisten-lintas-sesi"&gt;AIContextProvider: Memori Persisten Lintas Sesi&lt;/h2&gt;
&lt;p&gt;Sesi menyimpan riwayat percakapan &lt;em&gt;dalam&lt;/em&gt; satu sesi. Tapi bagaimana dengan mengetahui hal-hal tentang pengguna lintas sesi? &lt;code&gt;AIContextProvider&lt;/code&gt; menangani itu.&lt;/p&gt;
&lt;p&gt;Ia memiliki dua hook:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ProvideAIContextAsync&lt;/code&gt;&lt;/strong&gt; — berjalan &lt;em&gt;sebelum&lt;/em&gt; setiap interaksi, menyuntikkan konteks ke agen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;StoreAIContextAsync&lt;/code&gt;&lt;/strong&gt; — berjalan &lt;em&gt;setelah&lt;/em&gt; setiap interaksi, memungkinkan pembelajaran dan persistensi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Polanya elegan: kamu dapat menumpuk beberapa provider — satu untuk preferensi pengguna, satu untuk interaksi terbaru, satu yang mengkueri store VectorData kamu untuk dokumen yang relevan. Yang terakhir adalah persis pola RAG dari Bagian 2, kini berjalan otomatis sebagai bagian dari setiap panggilan agen.&lt;/p&gt;
&lt;h2 id="alur-kerja-multi-agen"&gt;Alur Kerja Multi-Agen&lt;/h2&gt;
&lt;p&gt;Di sinilah framework mendapatkan namanya. Framework ini menyertakan sistem alur kerja berbasis grafik di mana eksekutor (agen, fungsi, apa saja) terhubung melalui edge.&lt;/p&gt;
&lt;p&gt;Beberapa pola yang didukung secara native:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sekuensial&lt;/strong&gt;: Output Agen A mengalir ke Agen B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Konkuren (fan-out/fan-in)&lt;/strong&gt;: Dispatch ke beberapa agen secara paralel, kumpulkan hasilnya&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Routing kondisional&lt;/strong&gt;: Arahkan pekerjaan ke agen berbeda berdasarkan output&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loop penulis-kritikus&lt;/strong&gt;: Satu agen menulis, yang lain mengevaluasi, loop sampai disetujui&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sub-alur kerja&lt;/strong&gt;: Menyusun alur kerja secara hierarkis&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contoh penulis-kritikus:&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;WorkflowBuilder&lt;/span&gt; &lt;span class="n"&gt;builder&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;writerAgent&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&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;AddEdge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;writerAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;criticAgent&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;AddEdge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;criticAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writerAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsApproved&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;WithOutputFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;criticAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsApproved&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;workflow&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bersih, mudah dibaca, dan routing berbasis kondisi berarti kamu tidak perlu menulis logika loop sendiri.&lt;/p&gt;
&lt;h2 id="human-in-the-loop"&gt;Human-in-the-Loop&lt;/h2&gt;
&lt;p&gt;Tidak semua hal harus berjalan sepenuhnya otonom. Untuk operasi sensitif — penulisan database, transaksi keuangan, pengiriman komunikasi — kamu ingin manusia menyetujui sebelum agen mengeksekusi.&lt;/p&gt;
&lt;p&gt;Framework memiliki dukungan bawaan untuk ini melalui &lt;code&gt;FunctionApprovalRequestContent&lt;/code&gt; dan &lt;code&gt;FunctionApprovalResponseContent&lt;/code&gt;. Agen mengusulkan pemanggilan alat, kode aplikasimu mempresentasikannya ke pengguna, dan responnya menentukan apakah eksekusi dilanjutkan.&lt;/p&gt;
&lt;p&gt;Inilah cara yang benar untuk berpikir tentang agen dalam pengaturan enterprise: tidak sepenuhnya otonom, tapi &lt;em&gt;otonomi dengan pembatas&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="gambaran-lengkap"&gt;Gambaran Lengkap&lt;/h2&gt;
&lt;p&gt;Jika kamu mundur sebentar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MEAI&lt;/strong&gt; memberimu antarmuka universal ke model manapun&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VectorData&lt;/strong&gt; memberi agenmu akses ke pengetahuan organisasimu melalui pencarian semantik&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Framework&lt;/strong&gt; mengorkestrasikan semuanya — menggunakan &lt;code&gt;IChatClient&lt;/code&gt; di balik layar, berkomposisi dengan context provider, dan berkoordinasi melalui alur kerja&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Setiap bagian dirancang untuk berkomposisi dengan bagian lainnya. Lihat &lt;a href="https://devblogs.microsoft.com/dotnet/microsoft-agent-framework-building-blocks-for-ai-part-3/"&gt;postingan asli Jeremy Likness&lt;/a&gt; dan &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet"&gt;repositori GitHub Agent Framework&lt;/a&gt; untuk sampel lengkapnya.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Postingan Bagian 3 Microsoft Agent Framework menutup loop dari seri building blocks. Untuk developer .NET yang ingin membangun agen AI — bukan hanya chatbot, tapi agen nyata yang menggunakan alat, mengingat hal-hal, dan berkoordinasi — inilah jalannya.&lt;/p&gt;
&lt;p&gt;Rilis stabil 1.0 berarti kamu bisa membangun ini di produksi. Jika kamu menunggu untuk terjun ke pengembangan agen di .NET, waktunya adalah sekarang.&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server di Azure App Service — Tanpa Container</title><link>https://thedotnetblog.com/id/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</guid><description>SQL MCP Server kini dapat berjalan di Azure App Service tanpa Docker atau Kubernetes. Apa artinya bagi developer .NET yang membangun agen AI yang berkomunikasi dengan database SQL.</description><content:encoded>&lt;p&gt;&lt;em&gt;Postingan ini telah diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Jujur saja: setiap kali melihat &amp;ldquo;membutuhkan container&amp;rdquo; dalam sebuah tutorial, ada rasa lelah yang muncul. Container memang hebat — sampai tim kamu tidak punya strategi container, dan fitur yang tampak sederhana tiba-tiba tersangkut pada kompleksitas orkestrasi yang tidak direncanakan siapapun.&lt;/p&gt;
&lt;p&gt;Itulah mengapa ini menarik perhatian saya. SQL MCP Server kini dapat berjalan di Azure App Service — tanpa Docker, tanpa Kubernetes, hanya dengan file konfigurasi Data API Builder (DAB) yang sama yang mengekspos database SQL kamu melalui MCP, REST, dan GraphQL.&lt;/p&gt;
&lt;h2 id="apa-itu-sql-mcp-server"&gt;Apa itu SQL MCP Server?&lt;/h2&gt;
&lt;p&gt;Pengenalan singkat jika kamu belum familiar. SQL MCP Server berada di antara agen AI kamu dan database SQL. Alih-alih memberikan akses langsung ke database pada agen (ide yang buruk), ia mengekspos tabel dan view kamu sebagai lapisan abstraksi — entitas dengan izin yang terdefinisi.&lt;/p&gt;
&lt;p&gt;Dibangun di atas &lt;a href="https://learn.microsoft.com/id-id/azure/data-api-builder/"&gt;Data API Builder&lt;/a&gt;, yang berarti satu file konfigurasi mengelola MCP &lt;em&gt;dan&lt;/em&gt; REST &lt;em&gt;dan&lt;/em&gt; GraphQL sekaligus. Agen kamu berkomunikasi dengan endpoint MCP. Aplikasi tradisional berkomunikasi dengan REST atau GraphQL. Konfigurasi yang sama, runtime yang sama, permukaan yang berbeda.&lt;/p&gt;
&lt;p&gt;Ini benar-benar berguna — kamu tidak perlu memelihara dua lapisan API yang terpisah.&lt;/p&gt;
&lt;h2 id="masalah-container-dan-solusinya"&gt;Masalah Container (dan Solusinya)&lt;/h2&gt;
&lt;p&gt;Model deployment awal SQL MCP Server menggunakan container. Ini berfungsi dengan baik di banyak tim — tapi tidak semua. Banyak tim .NET menggunakan Azure App Service atau VM sebagai standar. Mengharuskan runtime container hanya untuk mengekspos endpoint SQL menambah hambatan yang tidak diminta siapapun.&lt;/p&gt;
&lt;p&gt;Panduan baru menunjukkan cara melewatkan container sepenuhnya. Semuanya berjalan dengan perintah &lt;code&gt;dab start&lt;/code&gt;, di-host di App Service sebagai proses web .NET 8 standar.&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="c1"&gt;# Instal Data API Builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet tool install microsoft.dataapibuilder --prerelease -g
&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="c1"&gt;# Inisialisasi konfigurasi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab init --database-type mssql --host-mode Development --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;&lt;span class="c1"&gt;# Tambahkan entitas&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add products --source dbo.products --permissions &lt;span class="s2"&gt;&amp;#34;authenticated:*&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;&lt;span class="c1"&gt;# Konfigurasi penyedia autentikasi App Service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab configure --runtime.host.authentication.provider AppService
&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="c1"&gt;# Jalankan server&lt;/span&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;p&gt;Pada titik ini kamu memiliki MCP di &lt;code&gt;/mcp&lt;/code&gt;, REST dan GraphQL dari proses yang sama — dan tidak ada yang berjalan di container.&lt;/p&gt;
&lt;h2 id="autentikasi-tanpa-api-key-bersama"&gt;Autentikasi Tanpa API Key Bersama&lt;/h2&gt;
&lt;p&gt;Inilah bagian yang paling saya hargai. Saat deploy ke App Service, kamu mengonfigurasi Microsoft Entra ID sebagai penyedia autentikasi. Tidak ada rahasia bersama dalam file konfigurasi, tidak ada API key untuk dirotasi.&lt;/p&gt;
&lt;p&gt;Connection string tetap berada di variabel lingkungan App Service (bukan di &lt;code&gt;dab-config.json&lt;/code&gt;), dan endpoint MCP dilindungi oleh autentikasi platform. Jika workload Azure kamu sudah selaras dengan Entra ID, ini akan terintegrasi secara alami.&lt;/p&gt;
&lt;p&gt;Untuk development lokal, beralih ke mode &lt;code&gt;Simulator&lt;/code&gt; dan transport STDIO. Kembali ke mode &lt;code&gt;AppService&lt;/code&gt; sebelum deployment. Bersih dan eksplisit.&lt;/p&gt;
&lt;h2 id="deploy-ke-app-service"&gt;Deploy ke App Service&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;az appservice plan create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --sku B1 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --is-linux
&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;az webapp create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --plan &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --runtime &lt;span class="s2"&gt;&amp;#34;DOTNETCORE:8.0&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;az webapp config &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --startup-file &lt;span class="s2"&gt;&amp;#34;dab start&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kemudian deploy proyek DAB kamu menggunakan metode deployment kode yang sudah digunakan tim kamu. Detail kuncinya: ini adalah deployment &lt;strong&gt;kode&lt;/strong&gt;, bukan deployment container.&lt;/p&gt;
&lt;h2 id="mengapa-penting-bagi-developer-net"&gt;Mengapa Penting bagi Developer .NET&lt;/h2&gt;
&lt;p&gt;Jika kamu membangun agen AI di .NET, cepat atau lambat agen kamu perlu berkomunikasi dengan database. SQL MCP Server memberimu cara terstruktur untuk melakukannya — tanpa mengekspos connection string mentah.&lt;/p&gt;
&lt;p&gt;Lihat panduan lengkapnya di &lt;a href="https://devblogs.microsoft.com/azure-sql/sql-mcp-server-app-service/"&gt;postingan blog asli&lt;/a&gt; dan &lt;a href="https://github.com/Azure-Samples/SQL-MCP-NoContainer"&gt;repositori sampel GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;SQL MCP Server di App Service adalah pilihan pragmatis untuk tim .NET yang ingin memberikan akses data SQL terstruktur kepada agen mereka tanpa strategi container. Coba — agen kamu akan mengapresiasi permukaan API yang bersih.&lt;/p&gt;</content:encoded></item><item><title>Mengatur Panggilan Alat MCP di .NET dengan Agent Governance Toolkit</title><link>https://thedotnetblog.com/id/news/emiliano-montesdeoca/governing-mcp-tool-calls-dotnet/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/news/emiliano-montesdeoca/governing-mcp-tool-calls-dotnet/</guid><description>Cara memperkenalkan tata kelola, pemeriksaan kebijakan, dan eksekusi alat yang lebih aman untuk agen .NET berbasis MCP.</description><content:encoded>&lt;p&gt;&lt;em&gt;Posting ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/news/emiliano-montesdeoca/governing-mcp-tool-calls-dotnet/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/"&gt;Governing MCP Tool Calls in .NET with the Agent Governance Toolkit&lt;/a&gt; layak untuk dicermati jika Anda sedang membangun atau mengoperasikan sistem .NET dalam skala besar.&lt;/p&gt;
&lt;p&gt;Dari sudut pandang saya, yang penting bukan fitur utamanya, melainkan seberapa cepat sebuah tim dapat mengubahnya menjadi alur kerja rekayasa yang lebih aman dan dapat diulang.&lt;/p&gt;
&lt;h2 id="mengapa-ini-penting-bagi-tim-net"&gt;Mengapa ini penting bagi tim .NET&lt;/h2&gt;
&lt;p&gt;Kebanyakan tim menyeimbangkan antara kecepatan pengiriman, konsistensi platform, dan tata kelola. Pembaruan ini berguna karena memberikan jalur yang lebih konkret untuk meningkatkan salah satu hambatan tersebut tanpa menulis ulang segalanya.&lt;/p&gt;
&lt;h2 id="langkah-praktis-selanjutnya"&gt;Langkah praktis selanjutnya&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Validasi fitur dalam pilot .NET kecil dengan data mirip produksi.&lt;/li&gt;
&lt;li&gt;Tambahkan titik pemeriksaan rollback dan observabilitas yang jelas sebelum peluncuran yang lebih luas.&lt;/li&gt;
&lt;li&gt;Tangkap pola implementasi dalam template internal Anda sehingga tim lain dapat menggunakannya kembali.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="sumber"&gt;Sumber&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Artikel asli: &lt;a href="https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/"&gt;https://devblogs.microsoft.com/dotnet/governing-mcp-tool-calls-in-dotnet-with-the-agent-governance-toolkit/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Pembaruan April Visual Studio: Integrasi Cloud Agent untuk Alur Kerja .NET</title><link>https://thedotnetblog.com/id/news/emiliano-montesdeoca/visual-studio-april-update-cloud-agent-integration/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/news/emiliano-montesdeoca/visual-studio-april-update-cloud-agent-integration/</guid><description>Panduan terperinci tentang pembaruan April Visual Studio dan apa yang diubah integrasi Cloud Agent untuk alur kerja .NET.</description><content:encoded>&lt;p&gt;&lt;em&gt;Posting ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/news/emiliano-montesdeoca/visual-studio-april-update-cloud-agent-integration/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/"&gt;Visual Studio April Update: Cloud Agent Integration for .NET Workflows&lt;/a&gt; layak untuk dicermati jika Anda sedang membangun atau mengoperasikan sistem .NET dalam skala besar.&lt;/p&gt;
&lt;p&gt;Dari sudut pandang saya, yang penting bukan fitur utamanya, melainkan seberapa cepat sebuah tim dapat mengubahnya menjadi alur kerja rekayasa yang lebih aman dan dapat diulang.&lt;/p&gt;
&lt;h2 id="mengapa-ini-penting-bagi-tim-net"&gt;Mengapa ini penting bagi tim .NET&lt;/h2&gt;
&lt;p&gt;Kebanyakan tim menyeimbangkan antara kecepatan pengiriman, konsistensi platform, dan tata kelola. Pembaruan ini berguna karena memberikan jalur yang lebih konkret untuk meningkatkan salah satu hambatan tersebut tanpa menulis ulang segalanya.&lt;/p&gt;
&lt;h2 id="langkah-praktis-selanjutnya"&gt;Langkah praktis selanjutnya&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Validasi fitur dalam pilot .NET kecil dengan data mirip produksi.&lt;/li&gt;
&lt;li&gt;Tambahkan titik pemeriksaan rollback dan observabilitas yang jelas sebelum peluncuran yang lebih luas.&lt;/li&gt;
&lt;li&gt;Tangkap pola implementasi dalam template internal Anda sehingga tim lain dapat menggunakannya kembali.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="sumber"&gt;Sumber&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Artikel asli: &lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/"&gt;https://devblogs.microsoft.com/visualstudio/visual-studio-april-update-cloud-agent-integration/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item></channel></rss>