{"id":2798,"date":"2026-11-04T09:08:55","date_gmt":"2026-11-04T02:08:55","guid":{"rendered":"https:\/\/komunitech.com\/blog\/?p=2798"},"modified":"2026-11-04T09:08:55","modified_gmt":"2026-11-04T02:08:55","slug":"autogen-microsoft-agent-framework-tutorial-2026","status":"publish","type":"post","link":"https:\/\/komunitech.com\/blog\/ai-agent\/autogen-microsoft-agent-framework-tutorial-2026\/","title":{"rendered":"AutoGen Diarsipkan: Tutorial Microsoft Agent Framework (2026)"},"content":{"rendered":"<div style=\"background:#f8fafc;border-left:4px solid #3b82f6;padding:16px 20px;margin:24px 0;border-radius:0 6px 6px 0\">\n<p style=\"margin:0;font-size:15px;line-height:1.6;color:#1e293b\"><strong>TL;DR:<\/strong> AutoGen sudah diarsipkan Microsoft: README resminya per Oktober 2026 menyatakan proyek ini tidak lagi dirawat, tanpa perbaikan bug, tanpa perbaikan keamanan, dan tanpa dukungan. Penggantinya adalah Microsoft Agent Framework (MAF), dibuat oleh tim yang sama dengan AutoGen dan Semantic Kernel, berlisensi MIT, dan per 4 November 2026 sudah di versi 1.24.0 di PyPI. Buat kamu yang masih memakai AutoGen di proyek bisnis, artinya celah keamanan baru tidak akan ditambal lagi; buat yang baru mulai, langsung belajar MAF. Halaman ini memandu instalasi, agen pertama dengan tool, multi-agent CS toko online dengan pola handoff, dan peta migrasi dari konsep AutoGen.<\/p>\n<\/div>\n<div style=\"background:#f0f9ff;border-left:4px solid #0284c7;padding:16px 20px;margin:24px 0;border-radius:0 6px 6px 0\">\n<p style=\"margin:0 0 8px;font-size:12px;font-weight:700;letter-spacing:0.05em;text-transform:uppercase;color:#0284c7\">\ud83d\udca1 KEY TAKEAWAY<\/p>\n<ul style=\"margin:0;padding-left:1.2em;font-size:15px;line-height:1.6;color:#0c4a6e\">\n<li style=\"margin-bottom:6px\"><strong>Status AutoGen:<\/strong> diarsipkan, tanpa security fix; rilis terakhir autogen-agentchat 0.7.5 pada 30 September 2025.<\/li>\n<li style=\"margin-bottom:6px\"><strong>Pengganti resmi:<\/strong> Microsoft Agent Framework, paket <code>agent-framework<\/code> 1.24.0 (rilis 30 Oktober 2026), lisensi MIT.<\/li>\n<li style=\"margin-bottom:6px\"><strong>Syarat:<\/strong> Python 3.11 ke atas (aman), API key model AI, dan kemampuan dasar Python async.<\/li>\n<li style=\"margin-bottom:0\"><strong>Konsep inti:<\/strong> Agent untuk tugas terbuka, Workflow untuk alur yang langkahnya sudah pasti.<\/li>\n<\/ul>\n<\/div>\n<p>Banyak tutorial AutoGen berbahasa Indonesia masih beredar dan masih mengajarkan <code>AssistantAgent<\/code>, <code>RoundRobinGroupChat<\/code>, dan <code>UserProxyAgent<\/code>. Kodenya masih bisa dijalankan, tapi fondasinya sudah berhenti dirawat. Microsoft sendiri kini menulis di repositori AutoGen bahwa pengguna baru harus mulai dari Microsoft Agent Framework, dan pengguna lama diminta bermigrasi lewat panduan resmi. Jadi pertanyaannya bukan lagi &#8220;AutoGen atau bukan&#8221;, melainkan &#8220;bagaimana pindah dengan rapi&#8221;.<\/p>\n<h2>Apa yang Terjadi dengan AutoGen?<\/h2>\n<p>AutoGen adalah framework multi-agent dari Microsoft Research yang populer sejak 2023 karena pola agen-agen yang &#8220;mengobrol&#8221; untuk menyelesaikan tugas. Status itu berubah. <a href=\"https:\/\/github.com\/microsoft\/autogen\" rel=\"noopener nofollow\" target=\"_blank\">README resmi microsoft\/autogen<\/a> sekarang memuat peringatan &#8220;Project archived and no longer maintained&#8221;: Microsoft tidak lagi memberikan bug fix, security fix, fitur baru, maupun dukungan, dan repositori dibiarkan tersedia hanya untuk referensi.<\/p>\n<p>Perubahannya bertahap. Riwayat commit README mencatat banner mode pemeliharaan diperbarui pada 6 April 2026, lalu pada 16 Oktober 2026 teksnya dipertegas menjadi &#8220;archived and no longer maintained&#8221;. Di sisi paket, versi terakhir <a href=\"https:\/\/pypi.org\/project\/autogen-agentchat\/\" rel=\"noopener nofollow\" target=\"_blank\">autogen-agentchat di PyPI<\/a> adalah 0.7.5 yang rilis 30 September 2025, dan belum ada rilis baru sesudahnya per 4 November 2026.<\/p>\n<p>README yang sama juga menyebut AutoGen dikembangkan untuk riset dan eksperimen, dan Microsoft tetap tidak menyarankannya untuk produksi. Ada satu catatan teknis: per 4 November 2026, flag &#8220;archived&#8221; di GitHub API untuk repositori itu masih <code>false<\/code>, jadi tombol issue dan pull request belum dikunci. Status yang mengikat tetap pernyataan tertulis di README.<\/p>\n<p>Perlu dibedakan juga dengan AG2. AG2 adalah fork komunitas dari AutoGen versi lama yang berjalan terpisah dan, per November 2026, sudah mengganti API-nya secara total. Pembahasan lengkap peta framework-nya ada di <a href=\"https:\/\/komunitech.com\/blog\/ai-agent\/framework-multi-agent-ai-terbaik-2026-langgraph-crewai-autogen-claude-openclaw\/\">perbandingan framework multi-agent AI terbaik 2026<\/a>. Halaman ini fokus ke jalur resmi Microsoft.<\/p>\n<h2>Apa Itu Microsoft Agent Framework?<\/h2>\n<p>Microsoft Agent Framework (MAF) adalah SDK open-source untuk membangun AI agent dan workflow multi-agent di Python dan .NET, dengan SDK Go dalam status public preview. <a href=\"https:\/\/learn.microsoft.com\/en-us\/agent-framework\/overview\/\" rel=\"noopener nofollow\" target=\"_blank\">Dokumentasi resmi Microsoft Learn<\/a> menyebut MAF sebagai penerus langsung AutoGen dan Semantic Kernel, dibuat oleh tim yang sama: abstraksi agen sederhana dari AutoGen digabung dengan fitur enterprise Semantic Kernel seperti state berbasis sesi, type safety, middleware, dan telemetri.<\/p>\n<p>Per 4 November 2026, <a href=\"https:\/\/pypi.org\/project\/agent-framework\/\" rel=\"noopener nofollow\" target=\"_blank\">paket agent-framework di PyPI<\/a> ada di versi 1.24.0 (rilis 30 Oktober 2026) dengan lisensi MIT. Versi stabil 1.0.0 rilis 2 April 2026, jadi API-nya sudah keluar dari fase beta. Metadata PyPI menulis Python minimal 3.10, tapi <code>pyproject.toml<\/code> di repositori resminya meminta 3.11 ke atas, jadi pakai Python 3.11 atau lebih baru supaya aman.<\/p>\n<p>Dokumentasi MAF membagi framework ini ke empat area:<\/p>\n<ul>\n<li><strong>Agents:<\/strong> agen tunggal yang memakai LLM, memanggil tool dan server MCP, lalu menjawab.<\/li>\n<li><strong>Harness Agent:<\/strong> agen siap pakai untuk tugas panjang, lengkap dengan perencanaan, to-do, akses file, memori, dan persetujuan tool.<\/li>\n<li><strong>Workflows:<\/strong> alur berbasis fungsi atau graph yang menghubungkan agen dan fungsi lewat jalur eksekusi yang eksplisit.<\/li>\n<li><strong>Integrations:<\/strong> koneksi ke penyedia model (Microsoft Foundry, Azure OpenAI, OpenAI, Anthropic, Ollama, dan lainnya), tool, middleware, dan evaluasi.<\/li>\n<\/ul>\n<p>Satu kalimat dari dokumentasi resminya layak ditempel di dinding tim: &#8220;If you can write a function to handle the task, do that instead of using an AI agent.&#8221; Kalau tugasnya bisa diselesaikan fungsi biasa, tidak perlu agen.<\/p>\n<h2>Kapan Pakai Agent, Kapan Pakai Workflow<\/h2>\n<p>Pembedaan Agent dan Workflow adalah konsep yang paling sering membingungkan pengguna AutoGen lama, karena di AutoGen semuanya cenderung dibuat sebagai &#8220;tim agen yang mengobrol&#8221;. MAF memisahkannya dengan tegas:<\/p>\n<table>\n<thead>\n<tr>\n<th>Pakai Agent kalau\u2026<\/th>\n<th>Pakai Workflow kalau\u2026<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Tugasnya terbuka atau berbentuk percakapan<\/td>\n<td>Prosesnya punya langkah yang sudah jelas<\/td>\n<\/tr>\n<tr>\n<td>Butuh agen yang memilih tool dan merencanakan sendiri<\/td>\n<td>Butuh kontrol pasti atas urutan eksekusi<\/td>\n<\/tr>\n<tr>\n<td>Satu panggilan LLM (dengan tool) sudah cukup<\/td>\n<td>Beberapa agen atau fungsi harus berkoordinasi<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Contoh di toko online: menjawab pertanyaan bebas pelanggan cocok untuk Agent. Alur &#8220;terima pesanan, cek stok, potong stok, kirim konfirmasi&#8221; cocok untuk Workflow, karena urutannya tidak boleh ditebak AI. Logika yang sama juga dipakai di <a href=\"https:\/\/komunitech.com\/blog\/ai-agent\/cara-membuat-multi-agent-system-langgraph-2026\/\">tutorial multi-agent system dengan LangGraph<\/a>, hanya beda istilah dan gaya kode.<\/p>\n<h2>Persiapan: Instalasi Microsoft Agent Framework<\/h2>\n<p>Yang kamu butuhkan: Python 3.11 atau lebih baru, satu API key model AI, dan terminal. Contoh di halaman ini memakai <code>OpenAIChatClient<\/code> karena paling mudah dicoba tanpa akun Azure. Sampel resmi Microsoft kebanyakan memakai <code>FoundryChatClient<\/code> (Microsoft Foundry); kalau timmu sudah di Azure, tinggal ganti client-nya, kode agennya tetap sama.<\/p>\n<p>Buat virtual environment lalu pasang paketnya:<\/p>\n<pre><code>python3 -m venv .venv\nsource .venv\/bin\/activate\npip install agent-framework python-dotenv<\/code><\/pre>\n<p>Paket <code>agent-framework<\/code> berisi inti framework plus integrasi pilihan, termasuk OpenAI dan modul orkestrasi. Lalu buat file <code>.env<\/code> di folder yang sama:<\/p>\n<pre><code>OPENAI_API_KEY=isi-api-key-kamu\nOPENAI_MODEL=gpt-5.4-nano<\/code><\/pre>\n<p>Catatan dari dokumentasi resmi: MAF tidak membaca file <code>.env<\/code> secara otomatis. Itu sebabnya setiap contoh di bawah memanggil <code>load_dotenv()<\/code> di awal. Nama model mengikuti contoh di sampel resmi; ganti dengan model yang tersedia di akunmu.<\/p>\n<h2>Tutorial: Agen Pertama dengan Tool<\/h2>\n<p>Kasusnya sederhana: admin toko online kaos ingin agen yang bisa menjawab &#8220;stoknya masih ada?&#8221; tanpa menebak. Agen diberi satu tool, <code>cek_stok<\/code>, yang membaca data stok. Di produksi, isi fungsi itu diganti query ke database atau Google Sheets milikmu.<\/p>\n<pre><code>import asyncio\nfrom typing import Annotated\n\nfrom agent_framework import Agent, tool\nfrom agent_framework.openai import OpenAIChatClient\nfrom dotenv import load_dotenv\nfrom pydantic import Field\n\nload_dotenv()\n\nSTOK = {\"KAOS-HITAM-L\": 12, \"KAOS-PUTIH-M\": 0, \"HOODIE-NAVY-XL\": 3}\n\n\n@tool(approval_mode=\"never_require\")\ndef cek_stok(\n    sku: Annotated[str, Field(description=\"Kode SKU produk, misalnya KAOS-HITAM-L\")],\n) -&gt; str:\n    \"\"\"Cek sisa stok satu produk berdasarkan SKU.\"\"\"\n    jumlah = STOK.get(sku.upper())\n    if jumlah is None:\n        return f\"SKU {sku} tidak ditemukan.\"\n    return f\"Stok {sku}: {jumlah} pcs.\"\n\n\nasync def main() -&gt; None:\n    agent = Agent(\n        client=OpenAIChatClient(),\n        name=\"AgenStok\",\n        instructions=\"Kamu admin gudang toko online. Jawab singkat dalam Bahasa Indonesia dan selalu cek stok lewat tool cek_stok.\",\n        tools=[cek_stok],\n    )\n    print(await agent.run(\"Kaos hitam ukuran L masih ada? SKU-nya KAOS-HITAM-L\"))\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main())<\/code><\/pre>\n<p>Tiga hal yang perlu diperhatikan dari kode di atas:<\/p>\n<ul>\n<li><strong>Dekorator <code>@tool<\/code><\/strong> mengubah fungsi Python biasa jadi tool. Skema parameternya dibaca otomatis dari type hint dan <code>Field(description=...)<\/code>, tidak perlu dibungkus manual seperti <code>FunctionTool<\/code> di AutoGen.<\/li>\n<li><strong><code>approval_mode=\"never_require\"<\/code><\/strong> dipakai di sampel resmi supaya contohnya ringkas. Komentar di sampel Microsoft sendiri menyarankan <code>\"always_require\"<\/code> untuk produksi, terutama untuk tool yang mengubah data.<\/li>\n<li><strong><code>agent.run()<\/code> bersifat multi-turn secara default.<\/strong> Agen terus memanggil tool sampai bisa memberi jawaban akhir, berbeda dengan <code>AssistantAgent<\/code> AutoGen yang satu putaran kecuali <code>max_tool_iterations<\/code> dinaikkan.<\/li>\n<\/ul>\n<p>Kalau agen perlu mengingat percakapan sebelumnya (misalnya pelanggan menyebut nama di pesan pertama), buat sesi dengan <code>session = agent.create_session()<\/code> lalu kirim <code>session=session<\/code> di setiap <code>run()<\/code>. Tanpa sesi, tiap panggilan berdiri sendiri.<\/p>\n<h2>Studi Kasus: Multi-Agent CS Toko Online dengan Pola Handoff<\/h2>\n<p>Bayangkan toko online fashion di Bandung dengan satu admin yang menjawab chat dari pagi sampai malam. Pertanyaannya berulang dan terbagi tiga: stok produk, status kiriman, dan retur barang rusak. Ketiganya butuh data yang berbeda, dan admin sering salah membuka sistem saat chat menumpuk.<\/p>\n<p>Pola handoff di MAF cocok untuk kasus seperti ini. Satu agen triage menerima pesan pertama, lalu menyerahkan percakapan ke agen spesialis yang memegang tool-nya sendiri. <code>HandoffBuilder<\/code> otomatis membuat tool &#8220;serah terima&#8221; untuk setiap peserta, jadi kamu tidak perlu menulis logika routing sendiri. Kode berikut diadaptasi dari sampel resmi <code>handoff_simple.py<\/code>, dengan agen dan tool yang disesuaikan ke toko online:<\/p>\n<pre><code>import asyncio\nfrom typing import Annotated, cast\n\nfrom agent_framework import Agent, AgentResponse, WorkflowEvent, tool\nfrom agent_framework.openai import OpenAIChatClient\nfrom agent_framework.orchestrations import HandoffAgentUserRequest, HandoffBuilder\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\n\n@tool(approval_mode=\"never_require\")\ndef cek_stok(sku: Annotated[str, \"Kode SKU produk\"]) -&gt; str:\n    \"\"\"Cek sisa stok produk (data contoh).\"\"\"\n    stok = {\"KAOS-HITAM-L\": 12, \"KAOS-PUTIH-M\": 0}\n    return f\"Stok {sku}: {stok.get(sku.upper(), 'SKU tidak ditemukan')}\"\n\n\n@tool(approval_mode=\"never_require\")\ndef cek_status_pesanan(no_pesanan: Annotated[str, \"Nomor pesanan\"]) -&gt; str:\n    \"\"\"Cek status pengiriman pesanan (data contoh).\"\"\"\n    return f\"Pesanan {no_pesanan} sudah dikirim, estimasi tiba 2 hari kerja.\"\n\n\n@tool(approval_mode=\"never_require\")\ndef ajukan_retur(no_pesanan: Annotated[str, \"Nomor pesanan yang diretur\"]) -&gt; str:\n    \"\"\"Catat pengajuan retur (data contoh).\"\"\"\n    return f\"Retur pesanan {no_pesanan} tercatat. Instruksi pengiriman balik dikirim lewat WhatsApp.\"\n\n\ndef buat_agen(client: OpenAIChatClient) -&gt; list[Agent]:\n    triage = Agent(\n        client=client,\n        name=\"agen_triage\",\n        instructions=(\n            \"Kamu CS pertama toko online. Pahami masalah pelanggan lalu serahkan ke agen spesialis yang tepat. \"\n            \"Kalau pelanggan berterima kasih, tutup dengan kalimat 'Terima kasih kembali'.\"\n        ),\n        require_per_service_call_history_persistence=True,\n    )\n    stok = Agent(\n        client=client,\n        name=\"agen_stok\",\n        instructions=\"Kamu menjawab pertanyaan ketersediaan produk.\",\n        tools=[cek_stok],\n        require_per_service_call_history_persistence=True,\n    )\n    pesanan = Agent(\n        client=client,\n        name=\"agen_pesanan\",\n        instructions=\"Kamu menangani pertanyaan status pesanan dan pengiriman.\",\n        tools=[cek_status_pesanan],\n        require_per_service_call_history_persistence=True,\n    )\n    retur = Agent(\n        client=client,\n        name=\"agen_retur\",\n        instructions=\"Kamu memproses pengajuan retur barang rusak atau salah kirim.\",\n        tools=[ajukan_retur],\n        require_per_service_call_history_persistence=True,\n    )\n    return [triage, stok, pesanan, retur]\n\n\ndef tampilkan(events: list[WorkflowEvent]) -&gt; list[WorkflowEvent[HandoffAgentUserRequest]]:\n    permintaan: list[WorkflowEvent[HandoffAgentUserRequest]] = []\n    for event in events:\n        if event.type == \"handoff_sent\":\n            print(f\"[Dialihkan dari {event.data.source} ke {event.data.target}]\")\n        elif event.type == \"output\" and isinstance(event.data, AgentResponse):\n            for message in event.data.messages:\n                if message.text:\n                    print(f\"- {message.author_name or message.role}: {message.text}\")\n        elif event.type == \"request_info\" and isinstance(event.data, HandoffAgentUserRequest):\n            for message in event.data.agent_response.messages:\n                if message.text:\n                    print(f\"- {message.author_name or message.role}: {message.text}\")\n            permintaan.append(cast(WorkflowEvent[HandoffAgentUserRequest], event))\n    return permintaan\n\n\nasync def main() -&gt; None:\n    agen = buat_agen(OpenAIChatClient())\n    workflow = (\n        HandoffBuilder(\n            name=\"cs_toko_online\",\n            participants=agen,\n            termination_condition=lambda conversation: (\n                len(conversation) &gt; 0 and \"terima kasih kembali\" in (conversation[-1].text or \"\").lower()\n            ),\n        )\n        .with_start_agent(agen[0])\n        .build()\n    )\n\n    jawaban_pelanggan = [\n        \"Pesanan 1234 datang rusak, saya mau retur.\",\n        \"Sekalian, kaos putih ukuran M masih ada?\",\n        \"Oke, makasih ya.\",\n    ]\n\n    pending = tampilkan([e async for e in workflow.run(\"Halo, saya butuh bantuan soal pesanan.\", stream=True)])\n    while pending:\n        if not jawaban_pelanggan:\n            responses = {r.request_id: HandoffAgentUserRequest.terminate() for r in pending}\n        else:\n            teks = jawaban_pelanggan.pop(0)\n            print(f\"- user: {teks}\")\n            responses = {r.request_id: HandoffAgentUserRequest.create_response(teks) for r in pending}\n        pending = tampilkan(await workflow.run(responses=responses))\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main())<\/code><\/pre>\n<p>Alur yang terjadi saat dijalankan: agen triage bertanya detail masalah, pelanggan menyebut pesanan rusak, triage mengalihkan ke <code>agen_retur<\/code>, lalu pertanyaan stok diteruskan ke <code>agen_stok<\/code>. Workflow berhenti ketika kondisi <code>termination_condition<\/code> terpenuhi, di contoh ini saat balasan terakhir memuat &#8220;terima kasih kembali&#8221;. Di aplikasi sungguhan, daftar <code>jawaban_pelanggan<\/code> diganti pesan masuk dari kanal chat-mu.<\/p>\n<p>Tiga batasan perlu kamu sadari sebelum memakai pola ini untuk pelanggan sungguhan:<\/p>\n<ul>\n<li><strong>Data di contoh masih dummy.<\/strong> Fungsi <code>cek_stok<\/code> dan <code>ajukan_retur<\/code> harus disambungkan ke sistem stok dan order yang sebenarnya.<\/li>\n<li><strong>Tool yang mengubah data wajib disetujui manusia dulu.<\/strong> Retur dan refund jangan diproses tanpa persetujuan admin; MAF menyediakan <code>approval_mode=\"always_require\"<\/code> untuk itu.<\/li>\n<li><strong>Setiap serah terima memakan panggilan model tambahan.<\/strong> Untuk toko dengan puluhan chat per hari, satu agen dengan tiga tool sering sudah cukup dan lebih murah.<\/li>\n<\/ul>\n<p>Kalau kebutuhanmu justru menghubungkan agen dari framework atau vendor yang berbeda (misalnya agen stok dibuat tim lain di LangGraph), pola handoff di dalam satu proses tidak cukup. Untuk itu ada protokol antar-agen yang dibahas di <a href=\"https:\/\/komunitech.com\/blog\/ai-agent\/a2a-protocol-agent2agent-ai-agent-2026\/\">panduan A2A Protocol untuk AI agent beda framework<\/a>.<\/p>\n<div style=\"background:#f0f9ff;border-left:4px solid #0284c7;padding:16px 20px;margin:24px 0;border-radius:0 6px 6px 0\">\n<p style=\"margin:0 0 8px;font-size:12px;font-weight:700;letter-spacing:0.05em;text-transform:uppercase;color:#0284c7\">\ud83d\udca1 KEY TAKEAWAY<\/p>\n<ul style=\"margin:0;padding-left:1.2em;font-size:15px;line-height:1.6;color:#0c4a6e\">\n<li style=\"margin-bottom:6px\"><strong>Handoff:<\/strong> satu agen triage plus beberapa agen spesialis, routing dibuat otomatis oleh <code>HandoffBuilder<\/code>.<\/li>\n<li style=\"margin-bottom:6px\"><strong>Persetujuan:<\/strong> tool yang mengubah data (retur, refund, potong stok) pakai <code>approval_mode=\"always_require\"<\/code>.<\/li>\n<li style=\"margin-bottom:0\"><strong>Hemat dulu:<\/strong> mulai dari satu agen dengan beberapa tool; pecah jadi multi-agent hanya kalau agen tunggal mulai salah pilih tool.<\/li>\n<\/ul>\n<\/div>\n<h2>Alur Berurutan dengan SequentialBuilder<\/h2>\n<p>Tidak semua kerja multi-agent berupa percakapan dengan pelanggan. Banyak tugas toko online berbentuk rantai: satu agen membuat draf, agen lain memeriksa. Pengganti <code>RoundRobinGroupChat<\/code> AutoGen di MAF adalah <code>SequentialBuilder<\/code>: setiap agen mendapat percakapan bersama dan menambahkan jawabannya secara berurutan.<\/p>\n<pre><code>import asyncio\nfrom typing import cast\n\nfrom agent_framework import Agent, AgentResponse\nfrom agent_framework.openai import OpenAIChatClient\nfrom agent_framework.orchestrations import SequentialBuilder\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\n\nasync def main() -&gt; None:\n    client = OpenAIChatClient()\n    penulis = Agent(\n        client=client,\n        name=\"penulis\",\n        instructions=\"Kamu copywriter marketplace. Tulis deskripsi produk maksimal 80 kata, bahasa santai.\",\n    )\n    pemeriksa = Agent(\n        client=client,\n        name=\"pemeriksa\",\n        instructions=\"Kamu editor. Cek deskripsi sebelumnya: ada klaim berlebihan atau info bahan yang hilang? Beri catatan singkat.\",\n    )\n\n    workflow = SequentialBuilder(participants=[penulis, pemeriksa], output_from=\"all\").build()\n    result = await workflow.run(\"Hoodie navy bahan fleece 280 gsm, ukuran M sampai XL, harga Rp189.000.\")\n    for output in result.get_outputs():\n        response = cast(AgentResponse, output)\n        for message in response.messages:\n            print(f\"- {message.author_name or message.role}: {message.text}\")\n\n\nif __name__ == \"__main__\":\n    asyncio.run(main())<\/code><\/pre>\n<p>Contoh di atas diadaptasi dari sampel resmi <code>sequential_agents.py<\/code>. Parameter <code>output_from=\"all\"<\/code> membuat hasil kedua agen ikut dikembalikan, jadi kamu bisa melihat draf penulis dan catatan pemeriksa sekaligus. Untuk menjalankan beberapa agen bersamaan (misalnya tiga agen membuat variasi judul produk paralel), MAF menyediakan <code>ConcurrentBuilder<\/code> dengan pola yang mirip.<\/p>\n<h2>Migrasi dari AutoGen: Peta Konsep Lama ke Baru<\/h2>\n<p>Microsoft menerbitkan <a href=\"https:\/\/learn.microsoft.com\/en-us\/agent-framework\/migration-guide\/from-autogen\/\" rel=\"noopener nofollow\" target=\"_blank\">panduan migrasi resmi AutoGen ke Microsoft Agent Framework<\/a> (terakhir diperbarui 26 Oktober 2026) yang membandingkan kode berdampingan. Ringkasan pemetaannya:<\/p>\n<table>\n<thead>\n<tr>\n<th>AutoGen<\/th>\n<th>Microsoft Agent Framework<\/th>\n<th>Catatan<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>AssistantAgent(model_client=...)<\/code><\/td>\n<td><code>Agent(client=...)<\/code><\/td>\n<td>Agent MAF multi-turn secara default<\/td>\n<\/tr>\n<tr>\n<td><code>agent.run(task=\"...\")<\/code><\/td>\n<td><code>agent.run(\"...\")<\/code><\/td>\n<td>Tanpa argumen <code>task=<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>FunctionTool(func=...)<\/code><\/td>\n<td>Dekorator <code>@tool<\/code><\/td>\n<td>Skema dibaca otomatis dari type hint<\/td>\n<\/tr>\n<tr>\n<td><code>AgentTool(agent=...)<\/code><\/td>\n<td><code>agent.as_tool(...)<\/code><\/td>\n<td>Tidak perlu mematikan parallel tool calls<\/td>\n<\/tr>\n<tr>\n<td><code>TextMessage<\/code>, <code>MultiModalMessage<\/code><\/td>\n<td><code>Message<\/code> + <code>Content<\/code><\/td>\n<td>Satu kelas pesan dengan field <code>role<\/code><\/td>\n<\/tr>\n<tr>\n<td>Konteks model (<code>ChatCompletionContext<\/code>)<\/td>\n<td><code>AgentSession<\/code><\/td>\n<td>Riwayat percakapan per sesi<\/td>\n<\/tr>\n<tr>\n<td><code>RoundRobinGroupChat<\/code><\/td>\n<td><code>SequentialBuilder<\/code><\/td>\n<td>Paralel lewat <code>ConcurrentBuilder<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>MagenticOneGroupChat<\/code><\/td>\n<td><code>MagenticBuilder<\/code><\/td>\n<td>Manager agent + batas putaran<\/td>\n<\/tr>\n<tr>\n<td><code>GraphFlow<\/code> + <code>DiGraphBuilder<\/code><\/td>\n<td><code>WorkflowBuilder<\/code> + <code>@executor<\/code><\/td>\n<td>Control flow menjadi data flow dengan tipe<\/td>\n<\/tr>\n<tr>\n<td>Pesan broadcast ke semua agen<\/td>\n<td>Pesan dikirim lewat edge tertentu<\/td>\n<td>Routing dengan <code>target_id<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Panduan yang sama juga jujur soal fitur yang belum setara. Per Oktober 2026, client bawaan untuk Anthropic dan Ollama serta caching model masih berstatus &#8220;planned&#8221; di tabel pemetaan client, eksekusi kode lokal ala AutoGen belum tersedia, dan runtime terdistribusi masih direncanakan karena MAF saat ini berfokus pada komposisi dalam satu proses. Dokumentasi overview MAF sendiri sudah menyebut Anthropic dan Ollama sebagai penyedia yang didukung, jadi cek halaman integrasi terbaru sebelum memutuskan.<\/p>\n<p>Urutan migrasi yang masuk akal: pindahkan dulu model client, lalu agen tunggal dan tool-nya, uji, baru pindahkan orkestrasi tim. Jangan memigrasikan semuanya dalam satu commit.<\/p>\n<h2>Kapan Microsoft Agent Framework Bukan Pilihan Tepat<\/h2>\n<p>MAF kuat untuk tim developer yang ingin agen siap produksi, terutama di ekosistem Azure. Tapi ada kondisi di mana framework ini justru menambah beban:<\/p>\n<ul>\n<li><strong>Tim tanpa developer Python atau .NET.<\/strong> Semua yang dibahas di halaman ini adalah kode. Pemilik usaha yang ingin agen tanpa ngoding lebih cocok memakai platform agen siap pakai.<\/li>\n<li><strong>Butuh agen terdistribusi lintas server sekarang juga.<\/strong> Panduan migrasi menyebut eksekusi terdistribusi masih dalam rencana; runtime gRPC AutoGen belum punya padanan langsung.<\/li>\n<li><strong>Kode AutoGen lama butuh eksekusi kode lokal.<\/strong> Fitur ini belum ada di MAF per Oktober 2026, jadi migrasi agen &#8220;penulis dan penjalan kode&#8221; perlu desain ulang.<\/li>\n<li><strong>Proyek sudah stabil di LangGraph atau CrewAI.<\/strong> Tidak ada alasan pindah framework hanya karena AutoGen diarsipkan; perbandingan pendekatannya ada di <a href=\"https:\/\/komunitech.com\/blog\/ai-agent\/autogen-vs-langgraph-vs-crewai-pilih-framework-multi-agent-yang-mana\/\">AutoGen vs LangGraph vs CrewAI<\/a>.<\/li>\n<li><strong>Tugasnya bisa diselesaikan fungsi biasa.<\/strong> Ini saran resmi Microsoft sendiri: kalau bisa ditulis sebagai fungsi, jangan dibuat agen.<\/li>\n<\/ul>\n<h2>Catatan Keamanan<\/h2>\n<p>Alasan terkuat untuk meninggalkan AutoGen adalah keamanan, bukan fitur. Setelah diarsipkan, celah baru di AutoGen atau dependensinya tidak akan ditambal Microsoft, dan README-nya sendiri memperingatkan risiko itu saat menangani data sensitif.<\/p>\n<p>Untuk MAF, pengecekan Komunitech pada 4 November 2026 ke <a href=\"https:\/\/nvd.nist.gov\/vuln\/search\/results?query=agent-framework\" rel=\"noopener nofollow\" target=\"_blank\">National Vulnerability Database (NVD)<\/a> dengan kata kunci &#8220;agent-framework&#8221; mengembalikan 0 hasil, dan database OSV juga tidak mencatat advisory untuk paket <code>agent-framework<\/code> maupun <code>autogen-agentchat<\/code> di PyPI. Nol CVE bukan jaminan aman, jadi tetap pasang versi terbaru dan pantau halaman rilis repositori MAF.<\/p>\n<p>Dua kebiasaan praktis dari sampel resmi Microsoft: pakai <code>approval_mode=\"always_require\"<\/code> untuk tool yang mengubah data, dan simpan API key di environment variable, bukan di kode. Risiko keamanan agen yang lebih luas, seperti prompt injection dan izin tool yang terlalu longgar, dibahas di <a href=\"https:\/\/komunitech.com\/blog\/ai-agent\/keamanan-ai-agent-4-risiko-dan-cara-mitigasi-2026\/\">empat risiko keamanan AI agent dan cara mitigasinya<\/a>.<\/p>\n<h2>Dampaknya buat Tim dan Bisnis di Indonesia<\/h2>\n<p>Kalau timmu punya aplikasi berbasis AutoGen yang sudah melayani pelanggan, masukkan migrasi ke rencana kuartal ini. Bukan karena kodenya tiba-tiba rusak, melainkan karena setiap bulan tanpa security fix menambah risiko. Mulai dari agen yang menyentuh data pelanggan atau pembayaran.<\/p>\n<p>Kalau kamu baru belajar multi-agent, lewati AutoGen dan langsung ke MAF atau framework lain yang aktif dirawat. Konsep dasarnya (agen, tool, orkestrasi) tetap sama, jadi tidak ada ilmu yang terbuang.<\/p>\n<p>Kalau kamu pemilik usaha tanpa tim developer, framework seperti MAF bukan titik awal yang realistis. Di Komunitech, kami mengajarkan pembuatan AI Agent berbasis OpenClaw lewat instruksi bahasa sehari-hari, sehingga pemilik usaha bisa menjalankan agen CS atau stok tanpa menulis kode Python. Contoh rancangan multi-agent yang terhubung ke stok, CRM, dan keuangan UMKM bisa kamu lihat di <a href=\"https:\/\/komunitech.com\/blog\/implementasi\/arsitektur-multi-agent-chatbot-integrasi-inventory-crm-keuangan-umkm-2026\/\">arsitektur multi-agent chatbot untuk inventory, CRM, dan keuangan UMKM<\/a>.<\/p>\n<h2>Pertanyaan yang Sering Ditanya<\/h2>\n<h3>Apakah AutoGen masih bisa dipakai?<\/h3>\n<p>Masih bisa diinstal dan dijalankan, karena paket di PyPI dan repositorinya tetap tersedia. Namun Microsoft tidak lagi memberikan perbaikan bug, perbaikan keamanan, maupun dukungan, sehingga AutoGen hanya layak untuk belajar konsep atau proyek eksperimen, bukan sistem yang melayani pelanggan.<\/p>\n<h3>Apakah Microsoft Agent Framework gratis?<\/h3>\n<p>Framework-nya open-source dengan lisensi MIT dan gratis dipakai. Biaya datang dari model AI yang dipanggil (OpenAI, Azure OpenAI, Microsoft Foundry, atau penyedia lain) dan infrastruktur tempat agen dijalankan.<\/p>\n<h3>Apakah Microsoft Agent Framework wajib memakai Azure?<\/h3>\n<p>Tidak. Sampel resmi banyak memakai Microsoft Foundry, tapi tersedia client untuk OpenAI langsung, dan dokumentasi menyebut dukungan penyedia lain seperti Anthropic dan Ollama. Azure memberi nilai tambah kalau organisasimu sudah memakai layanan Microsoft.<\/p>\n<h3>Apa beda Microsoft Agent Framework dengan AG2?<\/h3>\n<p>MAF adalah penerus resmi dari Microsoft yang dibuat tim AutoGen dan Semantic Kernel. AG2 adalah proyek komunitas terpisah yang berawal dari fork AutoGen versi lama dan dikelola di luar Microsoft, dengan API yang sudah berbeda dari AutoGen.<\/p>\n<h3>Berapa lama migrasi dari AutoGen ke Microsoft Agent Framework?<\/h3>\n<p>Tergantung fitur yang dipakai. Agen tunggal dengan tool biasanya hanya butuh mengganti kelas dan import. Tim berbasis GraphFlow, eksekusi kode lokal, atau runtime terdistribusi butuh desain ulang karena pemetaannya tidak satu banding satu atau fiturnya belum tersedia.<\/p>\n<h3>Apakah Microsoft Agent Framework mendukung MCP?<\/h3>\n<p>Ya. MAF menyediakan <code>MCPStdioTool<\/code> untuk server MCP lokal dan <code>MCPStreamableHTTPTool<\/code> untuk server MCP lewat HTTP, sehingga agen bisa memakai tool dari server MCP yang sudah ada.<\/p>\n<h2>Kesimpulan<\/h2>\n<p>AutoGen sudah selesai sebagai proyek yang dirawat; pernyataan arsip di README resminya membuat setiap pemakaian baru menanggung risiko keamanan sendiri. Microsoft Agent Framework adalah jalur resmi penggantinya: API stabil sejak versi 1.0, lisensi MIT, dan pemisahan yang jelas antara Agent untuk tugas terbuka dan Workflow untuk alur pasti.<\/p>\n<p>Langkah praktis minggu ini: jalankan contoh agen stok dengan data dummy, ganti datanya dengan stok asli, lalu coba pola handoff untuk dua jenis pertanyaan pelanggan saja. Kalau masih punya kode AutoGen, buka panduan migrasi resmi dan pindahkan satu agen tunggal dulu sebelum menyentuh orkestrasi tim.<\/p>\n<h2>Referensi<\/h2>\n<ul>\n<li>Microsoft. <a href=\"https:\/\/github.com\/microsoft\/autogen\" rel=\"noopener nofollow\" target=\"_blank\">microsoft\/autogen README<\/a>. Diakses 4 November 2026.<\/li>\n<li>Microsoft. <a href=\"https:\/\/github.com\/microsoft\/agent-framework\" rel=\"noopener nofollow\" target=\"_blank\">microsoft\/agent-framework README<\/a>. Diakses 4 November 2026.<\/li>\n<li>Microsoft Learn. <a href=\"https:\/\/learn.microsoft.com\/en-us\/agent-framework\/overview\/\" rel=\"noopener nofollow\" target=\"_blank\">Microsoft Agent Framework overview<\/a>. Diperbarui 28 Oktober 2026.<\/li>\n<li>Microsoft Learn. <a href=\"https:\/\/learn.microsoft.com\/en-us\/agent-framework\/migration-guide\/from-autogen\/\" rel=\"noopener nofollow\" target=\"_blank\">AutoGen to Microsoft Agent Framework Migration Guide<\/a>. Diperbarui 26 Oktober 2026.<\/li>\n<li>Microsoft. <a href=\"https:\/\/github.com\/microsoft\/agent-framework\/tree\/main\/python\/samples\" rel=\"noopener nofollow\" target=\"_blank\">Agent Framework Python samples<\/a>. Diakses 4 November 2026.<\/li>\n<li>PyPI. <a href=\"https:\/\/pypi.org\/project\/agent-framework\/\" rel=\"noopener nofollow\" target=\"_blank\">agent-framework<\/a>. Diakses 4 November 2026.<\/li>\n<li>PyPI. <a href=\"https:\/\/pypi.org\/project\/autogen-agentchat\/\" rel=\"noopener nofollow\" target=\"_blank\">autogen-agentchat<\/a>. Diakses 4 November 2026.<\/li>\n<li>NIST. <a href=\"https:\/\/nvd.nist.gov\/vuln\/search\/results?query=agent-framework\" rel=\"noopener nofollow\" target=\"_blank\">National Vulnerability Database: agent-framework<\/a>. Diakses 4 November 2026.<\/li>\n<\/ul>\n<h2>Disclaimer<\/h2>\n<p>Contoh kode di halaman ini diadaptasi dari sampel resmi Microsoft Agent Framework (<a href=\"https:\/\/github.com\/microsoft\/agent-framework\/tree\/main\/python\/samples\" rel=\"noopener nofollow\" target=\"_blank\">repositori sampel Python<\/a>) per November 2026 dan tidak dijalankan di sini; data stok dan pesanan di dalamnya adalah data contoh. API dan versi paket bisa berubah, jadi cek dokumentasi terbaru sebelum dipakai di produksi. Komunitech tidak berafiliasi dengan Microsoft.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>TL;DR: AutoGen sudah diarsipkan Microsoft: README resminya per Oktober 2026 menyatakan proyek ini tidak lagi dirawat, tanpa perbaikan bug, tanpa perbaikan keamanan, dan tanpa dukungan. Penggantinya adalah Microsoft Agent Framework (MAF), dibuat oleh tim yang sama dengan AutoGen dan Semantic Kernel, berlisensi MIT, dan per 4 November 2026 sudah di versi 1.24.0 di PyPI. Buat [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2800,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-2798","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-agent"],"acf":[],"_links":{"self":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/2798","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/comments?post=2798"}],"version-history":[{"count":1,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/2798\/revisions"}],"predecessor-version":[{"id":2799,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/2798\/revisions\/2799"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/media\/2800"}],"wp:attachment":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/media?parent=2798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/categories?post=2798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/tags?post=2798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}