<?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>Tool Calling | The .NET Blog</title><link>https://thedotnetblog.com/id/tags/tool-calling/</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/tool-calling/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></channel></rss>