Microsoft Agent Framework: Declarative Workflows แตะ 1.0 — ย้าย orchestration ของ agent ออกจากโค้ดไปเป็น YAML
เมื่อวันที่ 23 กรกฎาคม 2026 Peter Ibekwe (Principal Software Engineer) ประกาศบนบล็อกของ Microsoft Agent Framework ว่า declarative workflows ถึงเวอร์ชัน 1.0 พร้อมกันทั้งสอง SDK — ฝั่ง Python แพ็กเกจ agent-framework-declarative ขึ้นเป็น 1.0.0 ตามหลังฝั่ง .NET ที่แพ็กเกจ Microsoft.Agents.AI.Workflows.Declarative เสถียรอยู่ก่อนแล้ว
แนวคิดของฟีเจอร์นี้เรียบง่ายแต่กระทบวิธีทำงานพอสมควร: แทนที่จะเขียนว่า agent ตัวไหนคุยกับตัวไหน สถานะเปลี่ยนตรงไหน แตกกิ่งเมื่อไร และคนต้องเข้ามาแทรกจุดใด ไว้ในโค้ดแอปพลิเคชัน ให้ย้ายทั้งหมดไปอยู่ใน ไฟล์ YAML แล้ว Agent Framework จะโหลดนิยามนั้นขึ้นมาเป็น workflow มาตรฐานที่รันได้ สตรีมได้ และประกอบร่วมกับโค้ดปกติได้
หน้าตาของ workflow ในรูปแบบ YAML
ตัวอย่างที่บล็อกยกมาเป็นแพตเทิร์นเราต์ติ้งงานซัพพอร์ต:
kind: Workflow
trigger:
kind: OnConversationStart
id: support_router
actions:
- kind: InvokeAzureAgent
id: triage
agent:
name: TriageAgent
- kind: If
condition: =Local.Triage.Category = "Billing"
ชนิดของ action ที่รองรับครอบคลุมค่อนข้างกว้าง — การจัดการตัวแปร, control flow (เงื่อนไขและลูป), การเรียก agent และ tool, การเรียก HTTP และ MCP, จุด human-in-the-loop ที่หยุดรอคนอนุมัติ ไปจนถึงการควบคุมบทสนทนา ส่วน InvokeAzureAgent จะไปเรียก agent ตามชื่อที่ประกาศไว้ในโปรเจกต์ Foundry
ทำไมการเป็น “เอกสาร” ถึงต่างจากการเป็น “call graph”
เหตุผลที่ Microsoft ให้ไว้น่าสนใจกว่าที่คิด — เมื่อ workflow เป็นเอกสารไม่ใช่กราฟการเรียกฟังก์ชันที่กระจายอยู่ในโค้ด product owner, solution architect และนักพัฒนาสามารถอ่านและรีวิวพฤติกรรมของ workflow ได้โดยไม่ต้องอ่านโค้ดเฟรมเวิร์ก และในทางปฏิบัติ การแก้ขั้นตอนอนุมัติ เพิ่ม handoff ระหว่าง agent หรือเปลี่ยนเงื่อนไขการแตกกิ่ง กลายเป็นการแก้ YAML แทนที่จะเป็นการแก้โค้ดแล้ว deploy ใหม่
พูดอีกอย่างคือมันแยก orchestration ออกจาก application logic ซึ่งเป็นเส้นแบ่งที่เฟรมเวิร์ก agent ส่วนใหญ่ยังไม่ได้ขีดไว้ชัด
มุมมอง AI Curator
ถ้ามองภาพรวมของปีนี้ นี่คืออีกหนึ่งหมุดในเทรนด์เดียวกับที่เราเห็นจาก CrewAI, Pydantic AI และ LangGraph — วงการกำลังเลิกมอง agent orchestration เป็นโค้ด แล้วเริ่มมองเป็น configuration เส้นทางนี้คุ้นเคยมาก ใครที่ผ่านยุค CI/CD มาจะจำได้ว่าสคริปต์ build เคยเป็นเชลล์สคริปต์ยาวเหยียดในเครื่องใครเครื่องมัน ก่อนจะถูกบีบให้กลายเป็น .yml ไฟล์เดียวที่รีวิวผ่าน pull request ได้ Agent workflow กำลังเดินเส้นเดียวกัน และเหตุผลก็เหมือนกัน คือพอระบบมีหลายชิ้นส่วนและหลายคนต้องเห็นตรงกัน “โค้ดที่อ่านยาก” กลายเป็นต้นทุนที่แพงกว่า “ไฟล์ที่จำกัดความสามารถ”
แต่ผมอยากตั้งข้อสังเกตแบบตรงไปตรงมาสองข้อ ข้อแรก ประวัติศาสตร์ของ YAML ในวงการเราไม่ค่อยสวย — สิ่งที่เริ่มจาก “แค่ config ง่าย ๆ” มักจบด้วยการมี expression language ของตัวเอง มีเงื่อนไขซ้อนเงื่อนไข และกลายเป็นภาษาโปรแกรมที่ไม่มี type checker ไม่มี debugger สังเกตว่าในตัวอย่างข้างบนก็มี =Local.Triage.Category = "Billing" ซึ่งคือ expression language อยู่แล้วตั้งแต่วันแรก ทีมที่จะรับมาใช้ควรวางกติกาตั้งแต่ต้นว่าตรรกะระดับไหนอยู่ใน YAML ได้ และระดับไหนต้องเป็นโค้ดจริงที่เทสต์ได้
ข้อที่สองคือเรื่อง lock-in ที่ควรพูดให้ชัด InvokeAzureAgent ผูกกับโปรเจกต์ Foundry ของ Azure โดยตรง สำหรับทีมไทยที่อยู่บน Azure อยู่แล้ว — ซึ่งมีไม่น้อย โดยเฉพาะองค์กรใหญ่และภาคการเงินที่ใช้ Microsoft ทั้งสแต็ก — นี่คือข้อดี เพราะเสียบเข้ากับสิ่งที่มีอยู่ได้ทันที แต่ถ้ากำลังชั่งใจระหว่างเฟรมเวิร์ก ควรรู้ว่าไฟล์ YAML เหล่านี้ไม่ใช่มาตรฐานกลาง การย้ายออกภายหลังคือการเขียน workflow ใหม่ ไม่ใช่แค่เปลี่ยน runtime
จุดที่ผมมองว่ามีค่าที่สุดและถูกพูดถึงน้อยที่สุด คือ human-in-the-loop เป็น action kind ในตัว สำหรับงานที่ต้องมีคนอนุมัติตามกฎ เช่น การอนุมัติสินเชื่อหรือการเปลี่ยนแปลงข้อมูลลูกค้าภายใต้ PDPA การมีจุดหยุดรอคนที่ประกาศไว้ในเอกสารอย่างชัดเจน แทนที่จะซ่อนอยู่ใน callback สักที่ในโค้ด คือสิ่งที่ทำให้ผู้ตรวจสอบภายในอ่านแล้วเข้าใจได้ — และนั่นมักเป็นอุปสรรคจริงที่ทำให้โปรเจกต์ agent ในองค์กรไทยไปไม่ถึงโปรดักชัน มากกว่าปัญหาทางเทคนิคเสียอีก
แหล่งข่าว
อ่านเพิ่มในหมวด เครื่องมือนักพัฒนา
Betelgeuse รัน Qwen3.8 Flash Next ขนาด 68GB บน RTX 3060 กับแรม 16GB ส่วน Basalt วัดให้เห็นว่าเอนจินที่เร่งด้วยแฟล็กลัดทำให้โมเดลลืมของ
Betelgeuse ฟอร์ก llama.cpp ที่เปิดเมื่อ 31 ต.ค. ดึง expert จาก NVMe เข้า VRAM ตามต้องการ อ้าง 22 tok/s แบบไม่ทิ้ง expert แต่ README เตือนเองว่ายังทดลองและตัวเลขมาจากคนละรอบ วันเดียวกันผู้พัฒนา Basalt เผยผลวัดว่าแฟล็กเร่งความเร็วทำคุณภาพ Q8 ตกไปใกล้ Q2
กฎห้ามโคลนเกมของ Claude Code เริ่มกระทบงานจริง บริษัทรับทำเกมกระดานร้องงานลูกค้าหยุด แต่รายงานหลายชิ้นปนกับตัวกรองไซเบอร์คนละเรื่อง
ต่อจากที่เราพบกฎนี้ในไบนารี Claude Code ผู้ใช้เริ่มรายงานว่างานเชิงพาณิชย์ถูกปฏิเสธ และ Tom's Hardware กับ Mashable หยิบไปรายงาน แต่เมื่อไล่ issue ที่อ้างถึง พบว่าหลายรายการเกิดก่อนกฎจะมา จึงน่าจะเป็นตัวกรองด้านไซเบอร์ ส่วน Anthropic ยังไม่ชี้แจง
Claude Code ส่ง transcript ของ background agent ให้โมเดลทุก ~30 วินาทีเพื่อเขียนสถานะ 3–5 คำ ผู้วัดรายงานกินราว 16% และยังปิดแบบทางการไม่ได้
รายงานอิสระพบว่าฟีเจอร์ agent_summary ของ Claude Code ส่ง transcript เต็มของ background agent ไปถามสถานะทุก ~30 วินาที คิดเป็น 16.4% ของค่าใช้จ่ายในระบบของผู้วัด Issue เปิดมาตั้งแต่ ส.ค. ยังไม่มีสวิตช์ปิดที่รองรับ เราตรวจพบโค้ดนี้ใน 2.1.314 และพบกฎใหม่เรื่องเกมที่ไม่อยู่ใน changelog