Day 1B: Agent Architectures — How Modern AI Agents Are Built (Google x Kaggle)
สรุปย่อ
ประเด็นสำคัญจากวิดีโอ
- **ช่อง:** Adspolitan Knowledge Studio · **ความยาว:** ~26 นาที · **ลิงก์:** https://www.youtube.com/watch?v=8lpG59eugF8
# สรุป: Day 1B: Agent Architectures — How Modern AI Agents Are Built (Google x Kaggle) - **ช่อง:** Adspolitan Knowledge Studio · **ความยาว:** ~26 นาที · **ลิงก์:** https://www.youtube.com/watch?v=8lpG59eugF8 ## ประเด็นหลัก - ภาค B ของ Day 1 คือการสร้างระบบ multi-agent ตัวแรก ด้วยรูปแบบ LLM as a manager และเรียนรู้ pattern หลัก 3 แบบ: sequential, parallel และ loop - agent เดี่ยวเมื่อเจองานซับซ้อนจะมี instruction ยืดยาวจนสับสน แก้ยาก ดูแลยาก และไม่น่าเชื่อถือ — ทีม agent เฉพาะทางที่มีหน้าที่ชัดเจนต่างกันสร้างง่าย ทดสอบง่าย และเชื่อถือได้กว่า - ระบบแรก: research agent (ค้นด้วย Google Search) + summarizer agent (สรุปเป็น bullet 3-5 ข้อ) + coordinator ที่เรียกทั้งสองเป็น tool - sequential workflow หรือ assembly line: output ของ agent ก่อนหน้าเป็น input ของตัวถัดไป — เหมาะกับ linear pipeline เช่น outline → writer → editor ในการเขียนบล็อก - parallel workflow: งานอิสระต่อกันรันพร้อมกันเพื่อความเร็ว — ตัวอย่างนักวิจัย 3 หัวข้อ (tech/health/finance) ที่ค้นพร้อมกันแล้วรวมด้วย aggregator เป็น executive briefing - aggregator ไม่ใช้ Google Search แต่ใช้ output ของ agent ทั้งสามเป็นข้อมูลตั้งต้น - loop workflow คือ refinement cycle: writer ร่างเรื่องสั้น critic วิจารณ์ แล้ว refiner ตัดสินใจว่าจะเรียก exit loop (เมื่อเจอคำว่า approved) หรือเขียนใหม่ตาม feedback - loop agent ไม่เข้าใจเองว่า approved คือหยุด จึงต้องสร้าง Python function ชื่อ exit loop และ wrap เป็น function tool ให้ refiner เรียกใช้ - ต้องระบุจำนวน iteration สูงสุดเสมอ (ในตัวอย่างคือ 2) เพื่อกันวงจรวนไม่รู้จบ - decision tree สรุป: pipeline ตามตัว → sequential, งานขนานอิสระ → parallel, ต้องปรับปรุงคุณภาพวนซ้ำ → loop, ให้ LLM ตัดสินใจเอง → dynamic (LLM orchestrator) - คอร์สไม่บังคับส่งงาน (no submission required) เรียนตามจังหวะตัวเองได้ - setup ส่วนแรก (install, API key, import ADK, retry) เหมือนภาค A ทุกอย่าง ## ความเห็นสรุป วิดีโอนี้คือหัวใจของ Day 1 เลยครับ เพราะเปรียบเทียบสถาปัตยกรรม agent ครบทั้งสามแบบพร้อมตัวอย่างโค้ดจริงที่รันได้ตั้งแต่ทีมวิจัยไปจนถึงวงจร writer-critic ครับ คำอธิบาย decision tree ตอนท้ายช่วยให้เลือกใช้ pattern ถูกสถานการณ์ ถือเป็นวิดีโอที่ผู้เรียนควรดูซ้ำและทำ codelab ตามจริงครับ
คำแปลเต็ม
แปลตามบทสนทนาต้นฉบับ ปรับเป็นภาษาไทยธรรมชาติ
จากวิดีโอก่อนหน้า เราสร้าง agent ตัวแรกสำเร็จเรียบร้อยแล้ว เราได้เรียนรู้ว่าเครื่องมือ Gemini ถูกใช้อย่างไร และได้ถามคำถามไปสองสามข้อ agent ก็ตอบข้อมูลที่ถูกต้องและเป็นปัจจุบันกลับมาครับ ในวิดีโอนี้เราจะทำภาค B ซึ่งก็คือการสร้างระบบ multi-agent (ระบบหลายเอเจนต์) ตัวแรกของเรา ครอบคลุมหลายรูปแบบการทำงาน (workflow) ครับ คลิกที่ build แล้วจะพาเราไปยังหน้าของ Kaggle ซึ่งเป็น Notebook ที่ยังแก้ไขไม่ได้ เราจะทำซ้ำขั้นตอนเดิม คือกด copy แล้ว edit ครับ
เริ่มต้นด้วยคำถามว่าในคอร์สนี้เราจะได้อะไรบ้าง เราจะเรียนรู้ว่าเมื่อไหร่ควรใช้ระบบ multi-agent แบบใด และจะสร้างระบบแรกด้วยรูปแบบ LLM as a manager (ใช้ LLM เป็นผู้จัดการทีม) ครับ เราจะเรียนรู้ pattern หลักสามแบบ ได้แก่ sequential, parallel และ loop เพื่อประสานงานทีม agent ของเราครับ และตามที่ระบุไว้ที่นี่ ไม่ต้องส่งงาน (no submission required) ดังนั้นคุณจะเรียนจบคอร์สนี้ด้วยจังหวะของตัวเองได้เลยครับ
ถ้าคุณใช้ Kaggle Notebook และไม่ได้ทำอะไรนอกเหนือจากคอร์สนี้ คุณไม่ต้องติดตั้งอะไรเลยครับ ตามที่เคยพูดไปในวิดีโอก่อน สภาพแวดล้อมของ Kaggle Notebook มี library ของ Google ADK สำหรับ Python ติดตั้งไว้ให้แล้วแบบสำเร็จรูป ดังนั้นถ้าใช้ Kaggle Notebook คุณไม่ต้องกังวลเรื่องนี้เลยครับ
ต่อมาคือ Gemini API key ซึ่งเราสร้างไว้แล้วในครั้งก่อน สิ่งที่ต้องทำคือมาที่นี่ เข้าไปที่ secrets จาก add-on ครับ ตรงนี้จะมีตัวเลือกให้กดเลือก การเลือกไว้จะทำให้ key ของเราถูกใส่เข้าไปใน code snippet นี้ แล้วกดรันได้เลย เท่านี้เราก็ตั้งค่า Gemini API key สำเร็จแล้วครับ
ขั้นถัดไปเป็นขั้นประจำ คือ import ส่วนประกอบของ ADK ครับ ส่วนประกอบของ ADK ก็ import สำเร็จเรียบร้อย ขั้นต่อมาคือ configure retry option (ตัวเลือกการลองใหม่) ครับ ถ้าสังเกตจะเห็นว่าส่วนแรกซึ่งเป็นส่วน setup นั้นเหมือนกันทั้งภาค A และภาค B ครับ คุณไม่ต้องทำอะไรต่างจากเดิม เหมือนที่ผมทำครั้งก่อน ผมจะใส่คำสั่ง print ไว้ให้ตัวเองเห็นว่าขั้นนี้เสร็จแล้ว ครับ ได้เลย เสร็จแล้วครับ
ต่อมาถึง section สอง ซึ่งเกี่ยวกับระบบ multi-agent ครับ ตัวอย่างในส่วนนี้อธิบายว่าระบบหลายขั้นตอนหรือ multi-agent ช่วยลดภาระของงานได้อย่างไร เขาอธิบายว่า agent ตัวเดียวทำอะไรได้เยอะมาก แต่ปัญหาคือเมื่องานซับซ้อนขึ้น agent ตัวเดียวจะพยายามทำทุกอย่างและครอบคลุมโค้ดทั้งหมดเอง ซึ่งกลายเป็นปัญหาครับ instruction (คำสั่งระบบ) หรือ prompt จะยืดยาวมากจน agent สับสน ทำให้แก้ไขยากเมื่อโค้ดส่วนใดส่วนหนึ่งล้มเหลว ดูแลรักษายาก และมักให้ผลลัพธ์ที่ไม่น่าเชื่อถือครับ
ตรงข้ามกับระบบ agent เดี่ยว ทีมของผู้เชี่ยวชาญซึ่งเราเรียกว่าระบบ multi-agent ไม่ใช่ agent ที่ทำทุกอย่างเองหรอกครับ มันคือระบบที่ agent แต่ละตัวมีความเชี่ยวชาญเฉพาะทางและทำงานร่วมกัน เหมือนทีมในโลกจริงครับ แต่ละ agent จะมีหน้าที่เดียวที่ชัดเจน ไม่ว่าจะเป็นงานเขียน งานวิจัย หรืองานคัดสรร ซึ่งทำให้ทุกอย่างสร้างง่ายขึ้น ทดสอบง่ายขึ้น และทรงพลังกว่าพร้อมน่าเชื่อถือกว่าเมื่อทำงานร่วมกันครับ ถ้าอยากเรียนรู้เรื่องนี้เพิ่มเติม ไปอ่านเอกสาร LLM agents ใน ADK ได้ครับ
นี่คือ flowchart พื้นฐานเปรียบเทียบ single agent กับ multi-agent ครับ ในตัวอย่างนี้ เรามี research agent (เอเจนต์นักวิจัย) กับ summarizer agent (เอเจนต์ผู้สรุป) สองตัวนี้คือ specialized agent (เอเจนต์เฉพาะทาง) ครับ research agent ค้นหาข้อมูลด้วย Google Search ส่วน summarizer agent นำข้อมูลที่ research agent ให้มาสร้างเป็นสรุปกระชับ แล้วข้อมูลจะถูกรวมเข้าด้วยกันและส่งให้ผู้ใช้เป็นคำตอบสุดท้ายครับ งั้นเรามาทำกันเลย สร้างทั้งสอง agent แล้วรวมผลลัพธ์และส่งออกคำตอบสุดท้ายกันครับ
เพื่อทำเรื่องนี้ เราต้องสร้าง agent แยกกันสองตัวครับ ในส่วนของ research agent นั้น ช่วงแรกของการ define agent ยังเหมือนเดิมครับ คุณจะมี name (ชื่อ) model ที่เป็น Gemini และ retry option ครับ หลังจากนั้นส่วนของ instruction เป็นจุดที่ต้องระวังมากที่สุดว่าจะให้ agent นี้ทำหน้าที่อย่างไรบ้างพอดีเป๊ะครับ ที่นี่เขาเขียนไว้ว่า คุณคือ research agent เฉพาะทาง หน้าที่เดียวของคุณคือใช้เครื่องมือ Google Search หาข้อมูลที่เกี่ยวข้อง 2-3 ชิ้น สำหรับหัวข้อที่กำหนดให้ และนำเสนอผลการค้นหาพร้อมการอ้างอิง (citations) ครับ เครื่องมือที่ใช้คือ Google Search และข้อมูลที่ค้นได้จะส่งออกไปเก็บใน output key ชื่อ research findings ครับ ผลลัพธ์จะถูกเก็บไว้ตรงนี้ ให้ print ข้อความว่า research agent created ครับ
ในทำนองเดียวกัน เราจะสร้าง summarizer agent ที่ตรงนี้ครับ ตอนนี้เราสร้าง summarizer agent เสร็จแล้ว ทุกอย่างเหมือนเดิมครับ instruction ของ agent ตัวนี้คือ อ่าน research findings ที่ได้รับมา ซึ่งก็คือ output key ของ research agent อย่างที่เห็นครับ แล้วสร้างสรุปกระชับเป็น bulleted list (รายการแบบจุดนำ) ที่มี 3-5 ประเด็นหลัก แล้วส่งออกเป็น final summary ไปยัง aggregate agent หรือ coordinator ครับ ถ้าอยากรู้เพิ่มเติมว่าจะเขียน instruction ที่ชัดเจน ระบุสเปก และกำกับ agent ได้อย่างไร โปรดไปอ่านบทความนี้ครับ เข้าใจง่ายและมีประโยชน์มากครับ
ตอนนี้เราสร้าง agent ครบสองตัวแล้ว ขั้นต่อมาคือการรวมทุกอย่างเข้าด้วยกัน ซึ่งเราต้องมี coordinator (ตัวประสานงาน) หรือ orchestrator (ตัวควบคุมวงออเคสตรา) ครับ ตรงนี้เราจะ define root coordinator agent และเราจะเรียกมันว่า research coordinator ครับ ใช้ model เดิม retry option เท่ากับ retry config เหมือนเดิมครับ instruction ตรงนี้สำคัญมากครับ เพราะเรากำลังบอก coordinator ให้รวบรวมทุกอย่างและส่งออกผลลัพธ์สุดท้ายครับ เนื้อหาคือ คุณคือ research coordinator เป้าหมายของคุณคือตอบคำถามของผู้ใช้โดยการ orchestrate (ประสาน) workflow ขั้นแรก คุณต้องเรียก research agent tool เพื่อค้นหาข้อมูลที่เกี่ยวข้องกับหัวข้อที่ผู้ใช้ให้มา ขั้นต่อมา หลังได้รับ research findings แล้ว คุณต้องเรียก summarizer agent tool เพื่อสร้างสรุปกระชับ และขั้นสุดท้าย นำเสนอ final summary ให้ชัดเจนต่อผู้ใช้เป็นคำตอบของคุณครับ
ต่อมาเราจะ wrap agent ทั้งสองตัวให้เป็น tool (เครื่องมือ) ครับ เพราะตรงนี้เราไม่ได้ใช้ Google Search เป็น tool หรอกครับ เราใช้ข้อมูลที่ research agent กับ summarizer agent สร้างขึ้นเป็น tool ของ coordinator แทนครับ ดังนั้น tool ตรงนี้จึงเป็น agent tool ของ research agent และ agent tool ของ summarizer agent ครับ มา execute เพื่อสร้าง root agent กัน เสร็จเรียบร้อยครับ
ต่อไปเราจะรัน agent นี้ด้วยคำสั่งเดิม คือคำสั่งสร้าง runner แบบ in-memory สำหรับ root agent ครับ แล้วส่ง query เข้าไปดูว่ามันตอบอย่างไร มันตอบว่า ฝนเป็นส่วนสำคัญของวัฏจักรน้ำบนโลก ฝนเริ่มต้นเมื่อน้ำจากมหาสมุทร ทะเลสาบ และแม่น้ำระเหยขึ้นไปในบรรยากาศเป็นไอน้ำครับ มันอธิบายแนวคิดนี้ให้เราฟังได้ดีมากครับ
ยินดีด้วยครับ เราสร้างระบบ multi-agent ตัวแรกสำเร็จแล้ว เราใช้ coordinator agent ตัวเดียวที่บริหารทั้ง workflow ครับ ดูเป็นระบบที่ทรงพลังและยืดหยุ่นมาก เพราะถ้า agent ตัวไหนมีปัญหา คุณแค่กลับไปแก้เฉพาะ agent ตัวนั้น แทนที่จะต้องไล่ดูโค้ดทั้งหมดเพื่อหาว่าอะไรพังครับ
ต่อไปเป็น section ถัดไป คือ sequential workflow (การทำงานตามลำดับ) ครับ ซึ่งมักถูกเรียกว่า assembly line (สายการประกอบ) ครับ เหตุผลที่เรียกแบบนั้นก็เพราะ output ของ agent ตัวแรกจะเป็น input ของอีกตัวหนึ่ง แล้วก็วนแบบนี้ต่อไปเรื่อย ๆ จนได้ output สุดท้ายครับ เพื่อเข้าใจให้ลึกขึ้นว่าเมื่อไหร่ควรใช้ คำตอบคือเมื่อเรามี linear pipeline (ไปป์ไลน์แบบเส้นตรง) หรือขั้นตอนปัจจุบันขึ้นอยู่กับขั้นตอนก่อนหน้า ตั้งแต่ต้นจนจบแบบนั้น workflow นี้เหมาะสมที่สุดครับ อยากเรียนรู้เพิ่มไปอ่านเอกสาร sequential agents ใน ADK ได้ครับ มีตัวอย่างให้ดูด้วยครับ
ตัวอย่างที่ใช้ที่นี่คือการสร้างบทความบล็อกครับ ปกติในงานเขียนบล็อก ผู้ใช้จะพิมพ์หัวข้อเป็น prompt ส่งเข้ามา สมมติผู้ใช้ขอเนื้อหาเกี่ยวกับ AI ครับ outline agent จะเรียกใช้ tool ที่เกี่ยวข้องแล้วกลับมาพร้อม pointers คือโครงร่างว่าคำตอบควรประกอบด้วยอะไรบ้าง ซึ่งกลายเป็น input ของ writer agent ครับ writer agent นำ pointers เหล่านั้นไปเขียนเป็น draft แล้ว draft นั้นก็กลายเป็น input ของ editor ซึ่งจะประสาน คัดสรร จัดให้เนื้อหาต่อเนื่องกัน แล้วนำเสนอเป็น output ส่งให้ผู้ใช้ครับ ดังนั้นเราต้องสร้างทีละ agent ได้แก่ outline, writer, editor แล้วจะมี coordinator กับ aggregator agent มาช่วยรวมทั้งระบบเข้าด้วยกันครับ
เริ่มจาก outline agent ครับ รูปแบบการ define ยังเหมือนเดิม คุณระบุ name ระบุ model และใส่ retry option ครับ หลังจากนั้นส่วนของ instruction กับ output key เป็นจุดที่ทุก agent ต่างกันครับ instruction ของ agent นี้คือ สร้างโครงร่างบล็อกสำหรับหัวข้อที่กำหนด พร้อม headline (พาดหัว) ที่เด็ดและ introduction hook (คำเปิดชวนอ่าน) มี 3-5 section หลัก แต่ละ section มี 2-3 bullet points และปิดท้ายด้วย concluding thought (บทสรุปความคิด) ทุกอย่างที่ทำให้เก็บใน key นี้ครับ รันได้เลยครับ
ในทำนองเดียวกัน เราจะ execute ตัว writer agent ครับ instruction ของ writer agent คือ ทำตาม outline นี้อย่างเคร่งครัด ซึ่งก็คือ blog outline นี้ เขียนบล็อกสั้น ๆ ประมาณ 200-300 คำ ด้วยโทนที่น่าสนใจและให้สาระ แล้วเก็บ draft นั้นไว้ใน output key ชื่อ blog draft ครับ
ตอนนี้ blog draft กลายเป็น input ของ editor agent ครับ เราบอก editor agent ว่า ให้แก้ไข draft นี้คือ blog draft หน้าที่ของคุณคือขัดเกลาบทความโดยแก้ข้อผิดพลาดทางไวยากรณ์ ปรับให้ลื่นไหลขึ้นทั้งโครงสร้างประโยค และเพิ่มความชัดเจนโดยรวม output ของคุณคือ output สุดท้ายของทั้ง pipeline จึงถูกเก็บใน final blog key ครับ เราสร้างสาม agent สำเร็จแล้ว
ขั้นต่อมาคือรวมทั้งหมดเข้าไว้ใน sequential agent เพื่อให้ทำงานตามลำดับครับ เรามี root agent ซึ่งเป็น sequential agent เรากำลังสร้างมันและเรียกมันว่า blog pipeline ครับ sub-agent ข้างใน agent นี้คือ outline, writer และ editor ครับ เราสร้าง sequential agent เสร็จแล้ว
ต่อไปรัน runner คำถามที่ใช้คือ เขียนบล็อกเกี่ยวกับประโยชน์ของระบบ multi-agent สำหรับนักพัฒนาซอฟต์แวร์ครับ outline agent คืนมาพร้อมโครงร่างบล็อก ทั้ง headline, introduction hook, section หลักที่มี 2-3 ประเด็นต่อ section และ concluding thoughts ครับ จากนั้น writer agent สร้าง draft จาก pointers ของ outline แล้ว editor agent ก็ขัดเกลา draft ให้เรียบร้อยต่อเนื่องครับ นี่คือวิธีที่เราสร้าง assembly line ที่น่าเชื่อถือด้วย sequential agent ซึ่งคืนผลลัพธ์ตามลำดับที่คาดเดาได้ครับ
ต่อไปเป็น parallel workflow (การทำงานขนาน) ซึ่งหมายถึงนักวิจัยที่อิสระต่อกันครับ ตรงนี้ไม่มี dependency ใครก็รันของใคร เป็นการ execute พร้อมกัน (concurrent) ครับ ใช้เมื่อไหร่? เมื่อความเร็วสำคัญ เมื่องานแต่ละชิ้นทำงานขนานกันได้อย่างอิสระครับ ตัวอย่างที่ใช้คือนักวิจัยหลายหัวข้อ (multi-topic researchers) ที่แต่ละคนรับหัวข้อต่างกัน ไม่ต้องรอกันและกันครับ อย่างไรก็ตาม เมื่อทุกงานเสร็จแล้ว ผลลัพธ์ทั้งหมดจะถูกรวมกันในขั้น aggregator เพื่อสร้าง output รวมส่งให้ผู้ใช้ครับ
ในตัวอย่างนี้เราใช้ 4 agent ครับ คือ tech (เทคโนโลยี) health (สุขภาพ) finance (การเงิน) และ aggregator ที่จะรวมข้อมูลทั้งหมดเป็น draft รวมเดียวกันครับ ตัวแรกคือ tech researcher ผ่านวิธี define แบบเดิม คือ name, model และ retry option ครับ instruction คือ วิจัยเทรนด์ AI/ML ล่าสุด ระบุ 3 พัฒนาการหลัก บริษัทหลักที่เกี่ยวข้อง และผลกระทบที่อาจเกิดขึ้น รายงานกระชับประมาณ 100 คำ ใช้ Google Search tool แล้วส่งข้อมูลที่ค้นพบไปเก็บใน output key ฝั่งงานวิจัยเทคโนโลยีครับ รันเลยครับ
ในทำนองเดียวกัน บอก health researcher ให้หาความก้าวหน้าทางการแพทย์ล่าสุด ระบุ 3 ความก้าวหน้าสำคัญ การประยุกต์ใช้จริง และกรอบเวลาที่คาดการณ์ รายงานกระชับประมาณ 100 คำ และเราก็สร้าง health research agent เสร็จแล้วครับ
ต่อไปผมจะ execute finance research agent ครับ instruction คือ วิจัยเทรนด์ fintech ปัจจุบัน ระบุ 3 เทรนด์หลัก ผลกระทบต่อตลาด และมุมมองอนาคต รายงานกระชับประมาณ 100 คำ โดยใช้ Google Search tool ตัวเดิมครับ ทั้งสามตัวใช้ Google Search tool ตัวเดียวกันครับ
ต่อมาคือ aggregator agent ที่จะรวมทั้งหมดและสร้าง output รวมสุดท้ายครับ มันจะไม่ใช้ Google Search เป็น tool หรอกครับ แต่จะดู output ของ agent ทั้งสามตัวนี้แทนครับ name กับ model กับ retry option เป็นค่า default ตามเดิม อย่างไรก็ตาม instruction จะเป็นตัวรวม research findings ทั้งสามชุดเข้าเป็น executive summary เดียว ครอบคลุมเทรนด์เทคโนโลยี ความก้าวหน้าด้านสุขภาพ และนวัตกรรมการเงิน โดยดึงจาก output key ของ agent แต่ละตัวครับ summary ของคุณควรเน้นธีมร่วม ความเชื่อมโยงที่น่าแปลกใจ และประเด็นสำคัญที่สุดจากทั้งสามรายงาน โดย final summary ยาวประมาณ 200 คำ และเก็บ output ไว้ใน executive summary ครับ เท่านี้ aggregator agent ก็ถูกสร้างแล้วครับ
หลังจากนี้เราต้องมี parallel research team agent ครับ agent แบบ parallel ตัวนี้จะ wrap agent ทั้งหมดเข้าเป็น agent เดียว เหมือนการรวม agent ทั้งหมดเพื่อนำ research findings มารวมกันเป็นรายงานเดียวครับ ใน workflow ก่อนหน้าตรงจุดนี้เราใช้ sequential agent ที่นี่เราจะใช้ parallel agent ที่มี sub-agent คือ tech, health และ finance ครับ
เมื่อสร้างเสร็จแล้ว ต่อไปเราต้องมี sequential agent ที่ข้างในบรรจุ parallel agent ตัวนี้อยู่ร่วมกับ aggregator agent ครับ ทั้งสองจึงมาเรียงกันเป็นลำดับครับ กลับมาที่โค้ด เราได้ root agent ซึ่งเป็น sequential agent ครับ ทำหน้าที่รันลำดับของ parallel research agent ซึ่งรวมรายงานทั้งหมดเข้าด้วยกัน แล้วจึงตามด้วย aggregator agent ที่จะรวมทุกรายงานจาก parallel research team แล้วส่งออกเป็นลำดับครับ
ตอนนี้รัน runner ครับ มีคำถามขอ daily executive briefing เรื่อง tech, health และ finance ครับ ระบบแจ้งว่าผู้ใช้ถามเรื่องนี้ tech researcher ให้ข้อมูลมาสองสามบรรทัด แล้ว health researcher ก็ให้ข้อมูลส่วนของ health executive briefing ครับ มี executive briefing เรื่อง fintech trends และข้อมูล healthcare รวมถึง future outlook ครับ และนี่คือสิ่งที่ aggregator agent ทำ มันรับ daily briefing เรื่อง tech, health, finance แล้วสร้าง output สุดท้ายออกมาครับ นี่คือวิธีที่ agent ทั้งหมดทำงานร่วมกันเพื่อสร้าง output เดียวที่เรียบร้อยให้ผู้ใช้ สำหรับ prompt ที่เขาส่งเข้ามาครับ
ต่อไปเป็น section ที่ห้า คือ loop workflow (การทำงานแบบวนซ้ำ) หรือวงจรการขัดเกลาผลงาน (refinement cycle) ครับ ใช้เมื่องานต้องได้รับการปรับปรุงผ่านรอบของ feedback และการแก้ไขซ้ำครับ เราสามารถใช้ loop agent ซึ่งรันชุดของ sub-agent ซ้ำ ๆ จนกว่าเงื่อนไขที่กำหนดจะถูกทำให้สำเร็จ หรือจนถึงจำนวนรอบ (iteration) สูงสุดครับ กลไกนี้จะสร้างวงจรปรับปรุง ให้ระบบ agent พัฒนาผลงานของตัวเองซ้ำแล้วซ้ำเล่าได้ครับ
แล้วเมื่อไหร่ควรใช้ loop? พื้นฐานคือเมื่อคุณมีความต้องการปรับปรุงแบบวนซ้ำ (iterative improvement) เมื่อต้องขัดเกลาคุณภาพ และต้องการรอบการแก้ไขซ้ำ ๆ สำหรับปัญหาใดปัญหาหนึ่งครับ ปัญหาพื้นฐานที่ยกมาคือ workflow ทั้งหมดที่เห็นมาถึงตอนนี้ ทั้ง sequential และ parallel รันตั้งแต่ต้นจนจบ สร้าง output สุดท้ายแล้วหยุดครับ แนวทางแบบยิงครั้งเดียวจบ (one-shot) แบบนี้ไม่เหมาะกับงานที่ต้องปรับปรุงซ้ำและควบคุมคุณภาพ ซึ่งตรงนี้เองที่วงจร critic และ loop workflow เข้ามามีบทบาทครับ อยากเรียนรู้เพิ่มไปอ่านบทความ loop agent ใน ADK ได้ครับ มีตัวอย่างและโค้ดหลายแบบให้ศึกษาครับ
ในตัวอย่างนี้ เรามี writer agent (เอเจนต์นักเขียน) กับ critic agent (เอเจนต์นักวิจารณ์) ครับ writer จะร่างเรื่องสั้น แล้ว critic จะรีวิวและให้วิจารณ์เรื่องสั้นนั้น พร้อมเสนอแนะการปรับปรุง ตามจำนวน iteration ที่กำหนด ไม่ว่าจะรอบจนกว่าเงื่อนไขสำเร็จ หรือจนครบจำนวนรอบครับ
เริ่มจากสร้าง initial writer agent ก่อนครับ instruction คือ จาก prompt ของผู้ใช้ เขียน draft แรกของเรื่องสั้นความยาวประมาณ 100-150 คำ ส่งออกเฉพาะเนื้อเรื่องล้วน ๆ ไม่ต้องมีคำนำหรือคำอธิบาย และ output ที่ได้ให้บันทึกเป็น current story ซึ่งก็คือ draft แรกของคุณ ไว้ใน state (สถานะ) ครับ กด execute แล้ว agent ถูกสร้างครับ
ตัวถัดไปคือ critic agent ครับ instruction ของ critic agent คือ คุณเป็นนักวิจารณ์เรื่องสั้นเชิงสร้างสรรค์ รีวิวเรื่องสั้นที่ให้มา ซึ่งก็คือ draft แรกหรือ current story ประเมิน plot (โครงเรื่อง) ตัวละคร และจังหวะการเล่าเรื่อง (pacing) ถ้าเรื่องสั้นเขียนได้ดีและสมบูรณ์แล้ว คุณต้องตอบกลับด้วยวลีที่แน่นอนคือคำว่า approved แต่ถ้ายังไม่ดีพอ ให้เสนอ 2-3 ข้อเสนอแนะที่เจาะจงและลงมือทำได้จริง และ feedback ที่ออกมาให้เก็บใน output key ชื่อ critic ครับ กด generate ตัว agent นี้ครับ
ตอนนี้เราสร้าง agent ครบแล้ว แต่เรายังต้องสร้าง loop agent ที่จะหยุดทำงานตาม feedback ของ critic ครับ แต่ปัญหาคือ loop agent จะไม่เข้าใจเองโดยอัตโนมัติว่าคำว่า approved หมายถึงให้หยุดครับ เราจึงต้องให้สัญญาณที่ชัดเจนแก่ loop agent เพื่อยุติการวนซ้ำครับ ทำได้สองส่วนครับ ส่วนแรกคือสร้าง Python function ง่าย ๆ ชื่อ exit loop เพื่อให้ loop agent เข้าใจว่านี่คือสัญญาณออกจากวงจร แล้วอีกส่วนคือ agent ที่จะเรียก function นั้นเมื่อเงื่อนไขที่ถูกต้องเกิดขึ้นครับ
ขั้นแรก define ฟังก์ชัน exit loop กันครับ เรียกฟังก์ชันนี้เมื่อ critic ตอบว่า approved เท่านั้น ซึ่งแสดงว่าเรื่องสั้นเสร็จสมบูรณ์แล้วไม่ต้องแก้อีก โดยเขียน status เป็น approved และ message ว่า story approved กำลังออกจากวงจรปรับปรุงครับ ความหมายคือเมื่อ critic บอกว่า approved แล้ว loop agent จะต้องออกจากวงจรครับ เรากำลัง define ฟังก์ชัน exit loop นี้ครับ เสร็จแล้วครับ
ต่อมาต้องสร้าง agent ที่จะเรียกใช้ Python function นี้ โดยครอบมันไว้ใน function tool ครับ เราเรียก agent นี้ว่า refiner agent ครับ instruction ของ refiner agent คือ คุณเป็นผู้ขัดเกลาเรื่องสั้น (story refiner) คุณมี story draft ซึ่งก็คือ current story ที่มาจาก initial agent และมี critic ซึ่งเป็น output ของ critic agent หน้าที่ของคุณคือวิเคราะห์คำวิจารณ์ ถ้าคำวิจารณ์คือคำว่า approved เป๊ะ ๆ คุณต้องเรียกฟังก์ชัน exit loop และไม่ทำอย่างอื่นเลย แต่ถ้าไม่ใช่ ให้เขียนเรื่องสั้นใหม่โดยนำ feedback จาก critic มาใช้ให้ครบถ้วน แล้วบันทึกกลับเป็น current story ครับ แบบนี้เรื่องสั้นเวอร์ชันปรับปรุงใหม่จะเขียนทับของเดิม แล้ววนกลับไปหา critic ให้วิจารณ์รอบใหม่อีกครั้ง วงจรก็เดินต่อแบบนี้ครับ โดยสรุป instruction นี้บอกว่า agent ตัวนี้คือสมองของวงจร มันอ่านผลวิจารณ์จาก critic agent แล้วตัดสินใจว่าจะเรียก exit loop หรือจะเขียนเรื่องสั้นใหม่ครับ output key อยู่ตรงนี้ และ tool คือ function tool ชื่อ exit loop ครับ ลองสร้าง agent นี้ครับ refiner agent ถูกสร้างแล้วครับ
เท่านี้เราก็มีนิยามของ exit loop มีตัวฟังก์ชัน exit loop และมี refiner agent ครับ ต่อมาคือ loop agent ซึ่งเราเตรียมสองขั้นข้างบนมาเพื่อมันครับ ตัวนี้ชื่อ story refinement loop ครับ sub-agent ข้างในคือ critic agent กับ refiner agent ครับ จำนวน iteration สูงสุดที่ให้ตรงนี้คือสองครับ จะตั้งกี่รอบก็ได้ตามต้องการครับ แต่สำคัญมากที่ต้องระบุตัวเลขกำกับไว้เสมอ เพื่อกัน agent วนซ้ำไม่รู้จบครับ
ต่อมา define root agent ครับ เป็น sequential agent ชื่อ story pipeline ครับ sub-agent จะเป็น initial writer กับ story refinement loop ครับ ตัวนี้เองครับ เราไม่ได้เอา critic มาอยู่ตรงระดับบนสุดนะครับ เพราะ critic มีไว้เพื่อให้ feedback เฉย ๆ ดังนั้นเราจะมี first draft ก่อน แล้วจึงมี refinement loop ซึ่งจะคาย draft ฉบับขัดเกลาแล้วออกมาด้วยครับ กด execute เพื่อสร้าง loop agent และ sequential agent ครับ เสร็จแล้วครับ
ต่อไปรัน runner ครับ มีคำถามเตรียมไว้ให้อยู่แล้วคือ เขียนเรื่องสั้นเกี่ยวกับคนดูประภาคารที่ค้นพบแผนที่เรืองแสงอันลึกลับครับ คุณเปลี่ยนคำถามเป็นหัวข้ออื่นก็ได้ แล้วดูว่า agent ตอบอย่างไรครับ ผู้ใช้ให้ prompt แล้ว initial writer ก็ส่ง draft แรกมาครับ จากนั้น critic เสนอแนะการปรับปรุง เช่น ขยายปฏิกิริยาของตัวละครให้ชัดขึ้น ความชัดเจนว่าไม่ใช่โลกนี้ และเพิ่มนัยบางอย่างเกี่ยวกับความสำคัญของสิ่งที่ค้นพบ แล้ว refiner agent ก็เขียนทั้งเรื่องใหม่ครับ จากนั้น critic ดูอีกรอบ เห็นว่าดีแล้วจึงตอบว่า approved ซึ่งหมายถึง loop agent ออกจากวงจร และ output ถูกส่งให้ผู้ใช้ครับ เราได้ implement ระบบ loop agent สร้างระบบที่ซับซ้อนซึ่งสามารถรีวิวและปรับปรุง output ของตัวเองเป็นรอบ ๆ ได้อย่างสะอาดเนี้ยบครับ นี่คือ pattern สำคัญสำหรับการสร้างผลลัพธ์คุณภาพสูงครับ
ต่อมาคือบทสรุปของทั้งสามแบบที่เราทำมาครับ จนถึงตอนนี้เราผ่านครบทั้งสามระบบแล้ว ตั้งแต่ sequential ถึง parallel ซึ่งเป็นแบบต่างฝ่ายต่างพึ่งพากันกับอิสระต่อกันตามลำดับ แล้วจึงเป็น loop agent ที่วนซ้ำตามจำนวนรอบเพื่อประกันผลลัพธ์คุณภาพสูงครับ มาดูกันว่าทั้งสามต่างกันอย่างไร ใน section นี้มีสรุปเพื่อช่วยให้เข้าใจว่าควรเลือก pattern ไหนในสถานการณ์ไหนครับ นี่คือ decision tree (แผนผังการตัดสินใจ) ครับ ถ้าคุณมี pipeline ตามตัว ใช้ sequential agent ครับ ถ้ามีงานขนานที่อิสระต่อกัน ใช้ parallel agent ครับ ถ้ามีการปรับปรุงแบบวนซ้ำที่ต้องเฝ้าคุณภาพและต้องบรรลุเกณฑ์ที่กำหนด ใช้ loop agent ครับ และถ้าคุณอยากให้ LLM ตัดสินใจเองว่าจะทำอะไร ต้องไปทาง dynamic decision ซึ่ง LLM orchestrator จะทำหน้าที่เป็นสมองและประสานงานกับ agent ตัวอื่น ๆ ครับ ก็คือรูปแบบ agent-to-agent as tools นั่นเองครับ คุณสามารถดูตารางนี้เพื่อข้อมูลเพิ่มเติมเพื่อเข้าใจว่าเกิดอะไรขึ้นกันแน่ครับ ยินดีด้วยครับ ตอนนี้คุณเป็น agent orchestrator แล้ว ในวิดีโอถัดไปเราจะไปทำ unit ของ Day 2 กันครับ ขอบคุณมากที่รับชมครับ
หมายเหตุการแปล
ความโปร่งใสเกี่ยวกับความไม่แน่นอนในต้นฉบับ
- ## จุดที่ใช้สัญลักษณ์ฟังไม่ชัด
อภิธานศัพท์เทคนิค
คำศัพท์และชื่อผลิตภัณฑ์ที่คงรูปภาษาอังกฤษ
| ศัพท์ | คำแปล / คำอธิบาย |
|---|---|
| multi-agent system | ระบบที่มีเอเจนต์หลายตัวทำงานร่วมกันเป็นทีม |
| workflow | รูปแบบการไหลของงานภายในระบบเอเจนต์ |
| LLM as a manager | ใช้ LLM เป็นผู้จัดการประสานงานเอเจนต์อื่น |
| ADK (Agent Development Kit) | ชุดเครื่องมือพัฒนาเอเจนต์ของ Google ขับเคลื่อนด้วย Gemini |
| sequential workflow | การทำงานตามลำดับ — output ของตัวก่อนเป็น input ของตัวถัดไป |
| assembly line | สายการประกอบ — อีกชื่อของ sequential workflow |
| parallel workflow | การทำงานขนาน — หลายเอเจนต์รันพร้อมกันอย่างอิสระ |
| loop workflow | การทำงานวนซ้ำ — ปรับปรุงผลงานเป็นรอบจนได้คุณภาพ |
| refinement cycle | วงจรการขัดเกลาผลงานให้ดีขึ้นเรื่อย ๆ |
| coordinator | ตัวประสานงานที่คุมการทำงานของเอเจนต์ทั้งทีม |
| orchestrator | ตัวควบคุมวงออเคสตรา — ผู้อำนวยการทั้งระบบ |
| research agent | เอเจนต์นักวิจัยที่ค้นข้อมูลด้วย Google Search |
| summarizer agent | เอเจนต์ผู้สรุปที่รวบรวมข้อมูลเป็นสรุปกระชับ |
| specialized agent | เอเจนต์เฉพาะทางที่มีหน้าที่เดียวชัดเจน |
| sub-agent | เอเจนต์ย่อยที่อยู่ใต้ root agent |
| root agent | เอเจนต์หลักที่ครอบทั้งระบบไว้ |
| instruction | คำสั่งระบบที่กำหนดหน้าที่ของเอเจนต์ |
| output key | ชื่อคีย์ที่เอเจนต์เก็บผลลัพธ์ของตัวเอง |
| agent tool | การครอบเอเจนต์หนึ่งตัวเป็นเครื่องมือให้อีกตัวเรียกใช้ |
| function tool | การครอบฟังก์ชัน Python เป็นเครื่องมือให้เอเจนต์เรียก |
| outline agent | เอเจนต์ที่สร้างโครงร่างบทความ |
| writer agent | เอเจนต์นักเขียนที่เปลี่ยนโครงร่างเป็น draft |
| editor agent | เอเจนต์บรรณาธิการที่ขัดเกลา draft ให้เรียบร้อย |
| critic agent | เอเจนต์นักวิจารณ์ที่รีวิวและเสนอแนะ |
| refiner agent | เอเจนต์ผู้ขัดเกลาที่ตัดสินใจวนซ้ำหรือหยุด |
| aggregator agent | เอเจนต์ที่รวมผลลัพธ์หลายชุดเป็นชุดเดียว |
| exit loop | ฟังก์ชันสัญญาณให้ loop agent หยุดวนซ้ำ |
| iteration | หนึ่งรอบของการวนซ้ำ |
| maximum iterations | จำนวนรอบสูงสุดที่อนุญาตให้วน |
| approved | คำสัญญาณที่ critic ใช้บอกว่าผลงานผ่านเกณฑ์แล้ว |
| state | สถานะร่วมที่เอเจนต์เก็บค่าต่าง ๆ ระหว่างวงจร |
| linear pipeline | ไปป์ไลน์แบบเส้นตรงต้นจนจบ |
| dependency | ความพึ่งพากันระหว่างขั้นตอน |
| concurrent execution | การทำงานพร้อมกันในเวลาเดียว |
| executive summary | บทสรุปผู้บริหารที่ครอบคลุมประเด็นหลัก |
| decision tree | แผนผังการตัดสินใจเลือกใช้ pattern |
| dynamic decision | ให้ LLM orchestrator ตัดสินใจลำดับงานเองแบบยืดหยุ่น |
| headline | พาดหัวของบทความ |
| introduction hook | คำเปิดชวนอ่าน |
| concluding thought | บทสรุปความคิดปิดท้าย |
| bulleted list | รายการแบบจุดนำหน้า |
| citation | การอ้างอิงแหล่งข้อมูล |
| plot | โครงเรื่องของเรื่องสั้น |
| pacing | จังหวะการเล่าเรื่อง |
| no submission required | ไม่ต้องส่งงาน — เรียนตามจังหวะตัวเองได้ |
| secrets (add-on) | ที่เก็บ API key ลับใน Kaggle Notebook |
| retry option | ตัวเลือกลองส่งคำขอใหม่อัตโนมัติเมื่อล้มเหลว |
| in-memory runner | ตัวรันเอเจนต์ที่เก็บ session ไว้ในหน่วยความจำ |
ซับไตเติ้ลภาษาไทย
ดาวน์โหลดหรือดูซับทั้งหมด
1 00:00:00,000 --> 00:00:02,709 จากวิดีโอก่อนหน้า เราสร้าง agent 2 00:00:02,709 --> 00:00:04,826 ตัวแรกสำเร็จเรียบร้อยแล้ว 3 00:00:04,826 --> 00:00:07,705 เราได้เรียนรู้ว่าเครื่องมือ Gemini 4 00:00:07,705 --> 00:00:11,515 ถูกใช้อย่างไร และได้ถามคำถามไปสองสามข้อ agent
เปิดดูซับไตเติ้ลทั้งหมด (479 segments)
1 00:00:00,000 --> 00:00:02,709 จากวิดีโอก่อนหน้า เราสร้าง agent 2 00:00:02,709 --> 00:00:04,826 ตัวแรกสำเร็จเรียบร้อยแล้ว 3 00:00:04,826 --> 00:00:07,705 เราได้เรียนรู้ว่าเครื่องมือ Gemini 4 00:00:07,705 --> 00:00:11,515 ถูกใช้อย่างไร และได้ถามคำถามไปสองสามข้อ agent 5 00:00:11,515 --> 00:00:15,409 ก็ตอบข้อมูลที่ถูกต้องและเป็นปัจจุบันกลับมาครับ 6 00:00:15,409 --> 00:00:19,219 ในวิดีโอนี้เราจะทำภาค B ซึ่งก็คือการสร้างระบบ 7 00:00:19,219 --> 00:00:22,775 multi-agent (ระบบหลายเอเจนต์) ตัวแรกของเรา 8 00:00:22,775 --> 00:00:26,331 ครอบคลุมหลายรูปแบบการทำงาน (workflow) ครับ 9 00:00:26,331 --> 00:00:30,057 คลิกที่ build แล้วจะพาเราไปยังหน้าของ Kaggle 10 00:00:30,057 --> 00:00:33,020 ซึ่งเป็น Notebook ที่ยังแก้ไขไม่ได้ 11 00:00:33,020 --> 00:00:36,576 เราจะทำซ้ำขั้นตอนเดิม คือกด copy แล้ว edit 12 00:00:36,576 --> 00:00:37,673 ครับ 13 00:00:37,673 --> 00:00:41,568 เริ่มต้นด้วยคำถามว่าในคอร์สนี้เราจะได้อะไรบ้าง 14 00:00:41,568 --> 00:00:44,531 เราจะเรียนรู้ว่าเมื่อไหร่ควรใช้ระบบ 15 00:00:44,531 --> 00:00:48,341 multi-agent แบบใด และจะสร้างระบบแรกด้วยรูปแบบ 16 00:00:48,341 --> 00:00:51,982 LLM as a manager (ใช้ LLM เป็นผู้จัดการทีม) 17 00:00:51,982 --> 00:00:55,707 ครับ เราจะเรียนรู้ pattern หลักสามแบบ ได้แก่ 18 00:00:55,707 --> 00:00:58,162 sequential, parallel และ loop 19 00:00:58,162 --> 00:01:01,041 เพื่อประสานงานทีม agent ของเราครับ 20 00:01:01,041 --> 00:01:04,428 และตามที่ระบุไว้ที่นี่ ไม่ต้องส่งงาน (no 21 00:01:04,428 --> 00:01:06,121 submission required) 22 00:01:06,121 --> 00:01:10,862 ดังนั้นคุณจะเรียนจบคอร์สนี้ด้วยจังหวะของตัวเองได้เลยครับ 23 00:01:10,862 --> 00:01:12,979 ถ้าคุณใช้ Kaggle Notebook 24 00:01:12,979 --> 00:01:15,858 และไม่ได้ทำอะไรนอกเหนือจากคอร์สนี้ 25 00:01:15,858 --> 00:01:18,228 คุณไม่ต้องติดตั้งอะไรเลยครับ 26 00:01:18,228 --> 00:01:21,700 ตามที่เคยพูดไปในวิดีโอก่อน สภาพแวดล้อมของ 27 00:01:21,700 --> 00:01:25,171 Kaggle Notebook มี library ของ Google ADK 28 00:01:25,171 --> 00:01:28,812 สำหรับ Python ติดตั้งไว้ให้แล้วแบบสำเร็จรูป 29 00:01:28,812 --> 00:01:31,267 ดังนั้นถ้าใช้ Kaggle Notebook 30 00:01:31,267 --> 00:01:34,654 คุณไม่ต้องกังวลเรื่องนี้เลยครับ ต่อมาคือ 31 00:01:34,654 --> 00:01:38,464 Gemini API key ซึ่งเราสร้างไว้แล้วในครั้งก่อน 32 00:01:38,464 --> 00:01:42,359 สิ่งที่ต้องทำคือมาที่นี่ เข้าไปที่ secrets จาก 33 00:01:42,359 --> 00:01:45,745 add-on ครับ ตรงนี้จะมีตัวเลือกให้กดเลือก 34 00:01:45,745 --> 00:01:49,386 การเลือกไว้จะทำให้ key ของเราถูกใส่เข้าไปใน 35 00:01:49,386 --> 00:01:52,095 code snippet นี้ แล้วกดรันได้เลย 36 00:01:52,095 --> 00:01:54,974 เท่านี้เราก็ตั้งค่า Gemini API key 37 00:01:54,974 --> 00:01:58,445 สำเร็จแล้วครับ ขั้นถัดไปเป็นขั้นประจำ คือ 38 00:01:58,445 --> 00:02:02,086 import ส่วนประกอบของ ADK ครับ ส่วนประกอบของ 39 00:02:02,086 --> 00:02:05,642 ADK ก็ import สำเร็จเรียบร้อย ขั้นต่อมาคือ 40 00:02:05,642 --> 00:02:09,283 configure retry option (ตัวเลือกการลองใหม่) 41 00:02:09,283 --> 00:02:12,839 ครับ ถ้าสังเกตจะเห็นว่าส่วนแรกซึ่งเป็นส่วน 42 00:02:12,839 --> 00:02:16,395 setup นั้นเหมือนกันทั้งภาค A และภาค B ครับ 43 00:02:16,395 --> 00:02:18,681 คุณไม่ต้องทำอะไรต่างจากเดิม 44 00:02:18,681 --> 00:02:22,237 เหมือนที่ผมทำครั้งก่อน ผมจะใส่คำสั่ง print 45 00:02:22,237 --> 00:02:25,623 ไว้ให้ตัวเองเห็นว่าขั้นนี้เสร็จแล้ว ครับ 46 00:02:25,623 --> 00:02:29,095 ได้เลย เสร็จแล้วครับ ต่อมาถึง section สอง 47 00:02:29,095 --> 00:02:31,973 ซึ่งเกี่ยวกับระบบ multi-agent ครับ 48 00:02:31,973 --> 00:02:35,783 ตัวอย่างในส่วนนี้อธิบายว่าระบบหลายขั้นตอนหรือ 49 00:02:35,783 --> 00:02:39,001 multi-agent ช่วยลดภาระของงานได้อย่างไร 50 00:02:39,001 --> 00:02:42,641 เขาอธิบายว่า agent ตัวเดียวทำอะไรได้เยอะมาก 51 00:02:42,641 --> 00:02:45,689 แต่ปัญหาคือเมื่องานซับซ้อนขึ้น agent 52 00:02:45,689 --> 00:02:50,007 ตัวเดียวจะพยายามทำทุกอย่างและครอบคลุมโค้ดทั้งหมดเอง 53 00:02:50,007 --> 00:02:53,902 ซึ่งกลายเป็นปัญหาครับ instruction (คำสั่งระบบ) 54 00:02:53,902 --> 00:02:57,035 หรือ prompt จะยืดยาวมากจน agent สับสน 55 00:02:57,035 --> 00:03:00,760 ทำให้แก้ไขยากเมื่อโค้ดส่วนใดส่วนหนึ่งล้มเหลว 56 00:03:00,760 --> 00:03:01,857 ดูแลรักษายาก 57 00:03:01,857 --> 00:03:04,990 และมักให้ผลลัพธ์ที่ไม่น่าเชื่อถือครับ 58 00:03:04,990 --> 00:03:07,276 ตรงข้ามกับระบบ agent เดี่ยว 59 00:03:07,276 --> 00:03:10,408 ทีมของผู้เชี่ยวชาญซึ่งเราเรียกว่าระบบ 60 00:03:10,408 --> 00:03:12,440 multi-agent ไม่ใช่ agent 61 00:03:12,440 --> 00:03:16,166 ที่ทำทุกอย่างเองหรอกครับ มันคือระบบที่ agent 62 00:03:16,166 --> 00:03:20,060 แต่ละตัวมีความเชี่ยวชาญเฉพาะทางและทำงานร่วมกัน 63 00:03:20,060 --> 00:03:22,939 เหมือนทีมในโลกจริงครับ แต่ละ agent 64 00:03:22,939 --> 00:03:26,834 จะมีหน้าที่เดียวที่ชัดเจน ไม่ว่าจะเป็นงานเขียน 65 00:03:26,834 --> 00:03:28,696 งานวิจัย หรืองานคัดสรร 66 00:03:28,696 --> 00:03:32,422 ซึ่งทำให้ทุกอย่างสร้างง่ายขึ้น ทดสอบง่ายขึ้น 67 00:03:32,422 --> 00:03:37,078 และทรงพลังกว่าพร้อมน่าเชื่อถือกว่าเมื่อทำงานร่วมกันครับ 68 00:03:37,078 --> 00:03:40,973 ถ้าอยากเรียนรู้เรื่องนี้เพิ่มเติม ไปอ่านเอกสาร 69 00:03:40,973 --> 00:03:44,529 LLM agents ใน ADK ได้ครับ นี่คือ flowchart 70 00:03:44,529 --> 00:03:47,492 พื้นฐานเปรียบเทียบ single agent กับ 71 00:03:47,492 --> 00:03:51,302 multi-agent ครับ ในตัวอย่างนี้ เรามี research 72 00:03:51,302 --> 00:03:55,028 agent (เอเจนต์นักวิจัย) กับ summarizer agent 73 00:03:55,028 --> 00:03:58,499 (เอเจนต์ผู้สรุป) สองตัวนี้คือ specialized 74 00:03:58,499 --> 00:04:02,140 agent (เอเจนต์เฉพาะทาง) ครับ research agent 75 00:04:02,140 --> 00:04:05,950 ค้นหาข้อมูลด้วย Google Search ส่วน summarizer 76 00:04:05,950 --> 00:04:08,659 agent นำข้อมูลที่ research agent 77 00:04:08,659 --> 00:04:10,691 ให้มาสร้างเป็นสรุปกระชับ 78 00:04:10,691 --> 00:04:16,110 แล้วข้อมูลจะถูกรวมเข้าด้วยกันและส่งให้ผู้ใช้เป็นคำตอบสุดท้ายครับ 79 00:04:16,110 --> 00:04:19,158 งั้นเรามาทำกันเลย สร้างทั้งสอง agent 80 00:04:19,158 --> 00:04:22,714 แล้วรวมผลลัพธ์และส่งออกคำตอบสุดท้ายกันครับ 81 00:04:22,714 --> 00:04:25,677 เพื่อทำเรื่องนี้ เราต้องสร้าง agent 82 00:04:25,677 --> 00:04:29,572 แยกกันสองตัวครับ ในส่วนของ research agent นั้น 83 00:04:29,572 --> 00:04:33,297 ช่วงแรกของการ define agent ยังเหมือนเดิมครับ 84 00:04:33,297 --> 00:04:37,022 คุณจะมี name (ชื่อ) model ที่เป็น Gemini และ 85 00:04:37,022 --> 00:04:40,070 retry option ครับ หลังจากนั้นส่วนของ 86 00:04:40,070 --> 00:04:41,168 instruction 87 00:04:41,168 --> 00:04:44,724 เป็นจุดที่ต้องระวังมากที่สุดว่าจะให้ agent 88 00:04:44,724 --> 00:04:47,687 นี้ทำหน้าที่อย่างไรบ้างพอดีเป๊ะครับ 89 00:04:47,687 --> 00:04:51,243 ที่นี่เขาเขียนไว้ว่า คุณคือ research agent 90 00:04:51,243 --> 00:04:54,884 เฉพาะทาง หน้าที่เดียวของคุณคือใช้เครื่องมือ 91 00:04:54,884 --> 00:04:58,609 Google Search หาข้อมูลที่เกี่ยวข้อง 2-3 ชิ้น 92 00:04:58,609 --> 00:05:00,556 สำหรับหัวข้อที่กำหนดให้ 93 00:05:00,556 --> 00:05:04,451 และนำเสนอผลการค้นหาพร้อมการอ้างอิง (citations) 94 00:05:04,451 --> 00:05:07,668 ครับ เครื่องมือที่ใช้คือ Google Search 95 00:05:07,668 --> 00:05:11,478 และข้อมูลที่ค้นได้จะส่งออกไปเก็บใน output key 96 00:05:11,478 --> 00:05:13,764 ชื่อ research findings ครับ 97 00:05:13,764 --> 00:05:17,659 ผลลัพธ์จะถูกเก็บไว้ตรงนี้ ให้ print ข้อความว่า 98 00:05:17,659 --> 00:05:21,300 research agent created ครับ ในทำนองเดียวกัน 99 00:05:21,300 --> 00:05:24,771 เราจะสร้าง summarizer agent ที่ตรงนี้ครับ 100 00:05:24,771 --> 00:05:28,242 ตอนนี้เราสร้าง summarizer agent เสร็จแล้ว 101 00:05:28,242 --> 00:05:31,968 ทุกอย่างเหมือนเดิมครับ instruction ของ agent 102 00:05:31,968 --> 00:05:35,693 ตัวนี้คือ อ่าน research findings ที่ได้รับมา 103 00:05:35,693 --> 00:05:38,995 ซึ่งก็คือ output key ของ research agent 104 00:05:38,995 --> 00:05:42,382 อย่างที่เห็นครับ แล้วสร้างสรุปกระชับเป็น 105 00:05:42,382 --> 00:05:45,768 bulleted list (รายการแบบจุดนำ) ที่มี 3-5 106 00:05:45,768 --> 00:05:49,663 ประเด็นหลัก แล้วส่งออกเป็น final summary ไปยัง 107 00:05:49,663 --> 00:05:52,796 aggregate agent หรือ coordinator ครับ 108 00:05:52,796 --> 00:05:56,267 ถ้าอยากรู้เพิ่มเติมว่าจะเขียน instruction 109 00:05:56,267 --> 00:05:59,992 ที่ชัดเจน ระบุสเปก และกำกับ agent ได้อย่างไร 110 00:05:59,992 --> 00:06:01,940 โปรดไปอ่านบทความนี้ครับ 111 00:06:01,940 --> 00:06:05,750 เข้าใจง่ายและมีประโยชน์มากครับ ตอนนี้เราสร้าง 112 00:06:05,750 --> 00:06:07,358 agent ครบสองตัวแล้ว 113 00:06:07,358 --> 00:06:10,491 ขั้นต่อมาคือการรวมทุกอย่างเข้าด้วยกัน 114 00:06:10,491 --> 00:06:14,301 ซึ่งเราต้องมี coordinator (ตัวประสานงาน) หรือ 115 00:06:14,301 --> 00:06:17,603 orchestrator (ตัวควบคุมวงออเคสตรา) ครับ 116 00:06:17,603 --> 00:06:21,074 ตรงนี้เราจะ define root coordinator agent 117 00:06:21,074 --> 00:06:24,884 และเราจะเรียกมันว่า research coordinator ครับ 118 00:06:24,884 --> 00:06:28,356 ใช้ model เดิม retry option เท่ากับ retry 119 00:06:28,356 --> 00:06:31,150 config เหมือนเดิมครับ instruction 120 00:06:31,150 --> 00:06:34,113 ตรงนี้สำคัญมากครับ เพราะเรากำลังบอก 121 00:06:34,113 --> 00:06:35,210 coordinator 122 00:06:35,210 --> 00:06:38,935 ให้รวบรวมทุกอย่างและส่งออกผลลัพธ์สุดท้ายครับ 123 00:06:38,935 --> 00:06:42,153 เนื้อหาคือ คุณคือ research coordinator 124 00:06:42,153 --> 00:06:45,539 เป้าหมายของคุณคือตอบคำถามของผู้ใช้โดยการ 125 00:06:45,539 --> 00:06:48,672 orchestrate (ประสาน) workflow ขั้นแรก 126 00:06:48,672 --> 00:06:51,381 คุณต้องเรียก research agent tool 127 00:06:51,381 --> 00:06:55,784 เพื่อค้นหาข้อมูลที่เกี่ยวข้องกับหัวข้อที่ผู้ใช้ให้มา 128 00:06:55,784 --> 00:06:59,425 ขั้นต่อมา หลังได้รับ research findings แล้ว 129 00:06:59,425 --> 00:07:02,303 คุณต้องเรียก summarizer agent tool 130 00:07:02,303 --> 00:07:05,859 เพื่อสร้างสรุปกระชับ และขั้นสุดท้าย นำเสนอ 131 00:07:05,859 --> 00:07:06,960 final summary 132 00:07:06,960 --> 00:07:10,093 ให้ชัดเจนต่อผู้ใช้เป็นคำตอบของคุณครับ 133 00:07:10,093 --> 00:07:13,818 ต่อมาเราจะ wrap agent ทั้งสองตัวให้เป็น tool 134 00:07:13,818 --> 00:07:17,289 (เครื่องมือ) ครับ เพราะตรงนี้เราไม่ได้ใช้ 135 00:07:17,289 --> 00:07:19,999 Google Search เป็น tool หรอกครับ 136 00:07:19,999 --> 00:07:23,809 เราใช้ข้อมูลที่ research agent กับ summarizer 137 00:07:23,809 --> 00:07:27,195 agent สร้างขึ้นเป็น tool ของ coordinator 138 00:07:27,195 --> 00:07:31,005 แทนครับ ดังนั้น tool ตรงนี้จึงเป็น agent tool 139 00:07:31,005 --> 00:07:34,138 ของ research agent และ agent tool ของ 140 00:07:34,138 --> 00:07:37,779 summarizer agent ครับ มา execute เพื่อสร้าง 141 00:07:37,779 --> 00:07:40,573 root agent กัน เสร็จเรียบร้อยครับ 142 00:07:40,573 --> 00:07:43,705 ต่อไปเราจะรัน agent นี้ด้วยคำสั่งเดิม 143 00:07:43,705 --> 00:07:47,261 คือคำสั่งสร้าง runner แบบ in-memory สำหรับ 144 00:07:47,261 --> 00:07:49,717 root agent ครับ แล้วส่ง query 145 00:07:49,717 --> 00:07:52,595 เข้าไปดูว่ามันตอบอย่างไร มันตอบว่า 146 00:07:52,595 --> 00:07:55,390 ฝนเป็นส่วนสำคัญของวัฏจักรน้ำบนโลก 147 00:07:55,390 --> 00:07:58,522 ฝนเริ่มต้นเมื่อน้ำจากมหาสมุทร ทะเลสาบ 148 00:07:58,522 --> 00:08:02,163 และแม่น้ำระเหยขึ้นไปในบรรยากาศเป็นไอน้ำครับ 149 00:08:02,163 --> 00:08:05,465 มันอธิบายแนวคิดนี้ให้เราฟังได้ดีมากครับ 150 00:08:05,465 --> 00:08:08,682 ยินดีด้วยครับ เราสร้างระบบ multi-agent 151 00:08:08,682 --> 00:08:12,154 ตัวแรกสำเร็จแล้ว เราใช้ coordinator agent 152 00:08:12,154 --> 00:08:15,117 ตัวเดียวที่บริหารทั้ง workflow ครับ 153 00:08:15,117 --> 00:08:18,758 ดูเป็นระบบที่ทรงพลังและยืดหยุ่นมาก เพราะถ้า 154 00:08:18,758 --> 00:08:22,652 agent ตัวไหนมีปัญหา คุณแค่กลับไปแก้เฉพาะ agent 155 00:08:22,652 --> 00:08:23,749 ตัวนั้น 156 00:08:23,749 --> 00:08:27,898 แทนที่จะต้องไล่ดูโค้ดทั้งหมดเพื่อหาว่าอะไรพังครับ 157 00:08:27,898 --> 00:08:31,115 ต่อไปเป็น section ถัดไป คือ sequential 158 00:08:31,115 --> 00:08:33,825 workflow (การทำงานตามลำดับ) ครับ 159 00:08:33,825 --> 00:08:36,534 ซึ่งมักถูกเรียกว่า assembly line 160 00:08:36,534 --> 00:08:38,143 (สายการประกอบ) ครับ 161 00:08:38,143 --> 00:08:41,953 เหตุผลที่เรียกแบบนั้นก็เพราะ output ของ agent 162 00:08:41,953 --> 00:08:44,747 ตัวแรกจะเป็น input ของอีกตัวหนึ่ง 163 00:08:44,747 --> 00:08:48,133 แล้วก็วนแบบนี้ต่อไปเรื่อย ๆ จนได้ output 164 00:08:48,133 --> 00:08:49,230 สุดท้ายครับ 165 00:08:49,230 --> 00:08:52,532 เพื่อเข้าใจให้ลึกขึ้นว่าเมื่อไหร่ควรใช้ 166 00:08:52,532 --> 00:08:55,411 คำตอบคือเมื่อเรามี linear pipeline 167 00:08:55,411 --> 00:08:57,104 (ไปป์ไลน์แบบเส้นตรง) 168 00:08:57,104 --> 00:09:00,914 หรือขั้นตอนปัจจุบันขึ้นอยู่กับขั้นตอนก่อนหน้า 169 00:09:00,914 --> 00:09:03,454 ตั้งแต่ต้นจนจบแบบนั้น workflow 170 00:09:03,454 --> 00:09:05,148 นี้เหมาะสมที่สุดครับ 171 00:09:05,148 --> 00:09:08,534 อยากเรียนรู้เพิ่มไปอ่านเอกสาร sequential 172 00:09:08,534 --> 00:09:12,344 agents ใน ADK ได้ครับ มีตัวอย่างให้ดูด้วยครับ 173 00:09:12,344 --> 00:09:16,239 ตัวอย่างที่ใช้ที่นี่คือการสร้างบทความบล็อกครับ 174 00:09:16,239 --> 00:09:19,880 ปกติในงานเขียนบล็อก ผู้ใช้จะพิมพ์หัวข้อเป็น 175 00:09:19,880 --> 00:09:23,774 prompt ส่งเข้ามา สมมติผู้ใช้ขอเนื้อหาเกี่ยวกับ 176 00:09:23,774 --> 00:09:26,907 AI ครับ outline agent จะเรียกใช้ tool 177 00:09:26,907 --> 00:09:30,040 ที่เกี่ยวข้องแล้วกลับมาพร้อม pointers 178 00:09:30,040 --> 00:09:33,426 คือโครงร่างว่าคำตอบควรประกอบด้วยอะไรบ้าง 179 00:09:33,426 --> 00:09:36,813 ซึ่งกลายเป็น input ของ writer agent ครับ 180 00:09:36,813 --> 00:09:40,623 writer agent นำ pointers เหล่านั้นไปเขียนเป็น 181 00:09:40,623 --> 00:09:44,094 draft แล้ว draft นั้นก็กลายเป็น input ของ 182 00:09:44,094 --> 00:09:46,296 editor ซึ่งจะประสาน คัดสรร 183 00:09:46,296 --> 00:09:49,682 จัดให้เนื้อหาต่อเนื่องกัน แล้วนำเสนอเป็น 184 00:09:49,682 --> 00:09:51,630 output ส่งให้ผู้ใช้ครับ 185 00:09:51,630 --> 00:09:55,440 ดังนั้นเราต้องสร้างทีละ agent ได้แก่ outline, 186 00:09:55,440 --> 00:09:58,742 writer, editor แล้วจะมี coordinator กับ 187 00:09:58,742 --> 00:10:00,096 aggregator agent 188 00:10:00,096 --> 00:10:03,568 มาช่วยรวมทั้งระบบเข้าด้วยกันครับ เริ่มจาก 189 00:10:03,568 --> 00:10:06,531 outline agent ครับ รูปแบบการ define 190 00:10:06,531 --> 00:10:10,256 ยังเหมือนเดิม คุณระบุ name ระบุ model และใส่ 191 00:10:10,256 --> 00:10:13,304 retry option ครับ หลังจากนั้นส่วนของ 192 00:10:13,304 --> 00:10:17,199 instruction กับ output key เป็นจุดที่ทุก agent 193 00:10:17,199 --> 00:10:20,586 ต่างกันครับ instruction ของ agent นี้คือ 194 00:10:20,586 --> 00:10:24,311 สร้างโครงร่างบล็อกสำหรับหัวข้อที่กำหนด พร้อม 195 00:10:24,311 --> 00:10:28,206 headline (พาดหัว) ที่เด็ดและ introduction hook 196 00:10:28,206 --> 00:10:31,677 (คำเปิดชวนอ่าน) มี 3-5 section หลัก แต่ละ 197 00:10:31,677 --> 00:10:35,318 section มี 2-3 bullet points และปิดท้ายด้วย 198 00:10:35,318 --> 00:10:38,196 concluding thought (บทสรุปความคิด) 199 00:10:38,196 --> 00:10:41,075 ทุกอย่างที่ทำให้เก็บใน key นี้ครับ 200 00:10:41,075 --> 00:10:44,716 รันได้เลยครับ ในทำนองเดียวกัน เราจะ execute 201 00:10:44,716 --> 00:10:48,441 ตัว writer agent ครับ instruction ของ writer 202 00:10:48,441 --> 00:10:51,912 agent คือ ทำตาม outline นี้อย่างเคร่งครัด 203 00:10:51,912 --> 00:10:55,553 ซึ่งก็คือ blog outline นี้ เขียนบล็อกสั้น ๆ 204 00:10:55,553 --> 00:10:59,363 ประมาณ 200-300 คำ ด้วยโทนที่น่าสนใจและให้สาระ 205 00:10:59,363 --> 00:11:03,173 แล้วเก็บ draft นั้นไว้ใน output key ชื่อ blog 206 00:11:03,173 --> 00:11:06,814 draft ครับ ตอนนี้ blog draft กลายเป็น input 207 00:11:06,814 --> 00:11:10,624 ของ editor agent ครับ เราบอก editor agent ว่า 208 00:11:10,624 --> 00:11:13,333 ให้แก้ไข draft นี้คือ blog draft 209 00:11:13,333 --> 00:11:18,075 หน้าที่ของคุณคือขัดเกลาบทความโดยแก้ข้อผิดพลาดทางไวยากรณ์ 210 00:11:18,075 --> 00:11:21,207 ปรับให้ลื่นไหลขึ้นทั้งโครงสร้างประโยค 211 00:11:21,207 --> 00:11:24,679 และเพิ่มความชัดเจนโดยรวม output ของคุณคือ 212 00:11:24,679 --> 00:11:28,319 output สุดท้ายของทั้ง pipeline จึงถูกเก็บใน 213 00:11:28,319 --> 00:11:31,452 final blog key ครับ เราสร้างสาม agent 214 00:11:31,452 --> 00:11:35,008 สำเร็จแล้ว ขั้นต่อมาคือรวมทั้งหมดเข้าไว้ใน 215 00:11:35,008 --> 00:11:38,564 sequential agent เพื่อให้ทำงานตามลำดับครับ 216 00:11:38,564 --> 00:11:42,120 เรามี root agent ซึ่งเป็น sequential agent 217 00:11:42,120 --> 00:11:45,845 เรากำลังสร้างมันและเรียกมันว่า blog pipeline 218 00:11:45,845 --> 00:11:49,486 ครับ sub-agent ข้างใน agent นี้คือ outline, 219 00:11:49,486 --> 00:11:53,042 writer และ editor ครับ เราสร้าง sequential 220 00:11:53,042 --> 00:11:56,937 agent เสร็จแล้ว ต่อไปรัน runner คำถามที่ใช้คือ 221 00:11:56,937 --> 00:12:00,831 เขียนบล็อกเกี่ยวกับประโยชน์ของระบบ multi-agent 222 00:12:00,831 --> 00:12:04,303 สำหรับนักพัฒนาซอฟต์แวร์ครับ outline agent 223 00:12:04,303 --> 00:12:07,520 คืนมาพร้อมโครงร่างบล็อก ทั้ง headline, 224 00:12:07,520 --> 00:12:10,907 introduction hook, section หลักที่มี 2-3 225 00:12:10,907 --> 00:12:14,463 ประเด็นต่อ section และ concluding thoughts 226 00:12:14,463 --> 00:12:17,934 ครับ จากนั้น writer agent สร้าง draft จาก 227 00:12:17,934 --> 00:12:21,151 pointers ของ outline แล้ว editor agent 228 00:12:21,151 --> 00:12:24,623 ก็ขัดเกลา draft ให้เรียบร้อยต่อเนื่องครับ 229 00:12:24,623 --> 00:12:27,586 นี่คือวิธีที่เราสร้าง assembly line 230 00:12:27,586 --> 00:12:30,549 ที่น่าเชื่อถือด้วย sequential agent 231 00:12:30,549 --> 00:12:33,767 ซึ่งคืนผลลัพธ์ตามลำดับที่คาดเดาได้ครับ 232 00:12:33,767 --> 00:12:37,323 ต่อไปเป็น parallel workflow (การทำงานขนาน) 233 00:12:37,323 --> 00:12:40,455 ซึ่งหมายถึงนักวิจัยที่อิสระต่อกันครับ 234 00:12:40,455 --> 00:12:44,265 ตรงนี้ไม่มี dependency ใครก็รันของใคร เป็นการ 235 00:12:44,265 --> 00:12:47,144 execute พร้อมกัน (concurrent) ครับ 236 00:12:47,144 --> 00:12:49,853 ใช้เมื่อไหร่? เมื่อความเร็วสำคัญ 237 00:12:49,853 --> 00:12:53,748 เมื่องานแต่ละชิ้นทำงานขนานกันได้อย่างอิสระครับ 238 00:12:53,748 --> 00:12:56,711 ตัวอย่างที่ใช้คือนักวิจัยหลายหัวข้อ 239 00:12:56,711 --> 00:12:58,828 (multi-topic researchers) 240 00:12:58,828 --> 00:13:01,029 ที่แต่ละคนรับหัวข้อต่างกัน 241 00:13:01,029 --> 00:13:03,993 ไม่ต้องรอกันและกันครับ อย่างไรก็ตาม 242 00:13:03,993 --> 00:13:05,686 เมื่อทุกงานเสร็จแล้ว 243 00:13:05,686 --> 00:13:09,242 ผลลัพธ์ทั้งหมดจะถูกรวมกันในขั้น aggregator 244 00:13:09,242 --> 00:13:12,375 เพื่อสร้าง output รวมส่งให้ผู้ใช้ครับ 245 00:13:12,375 --> 00:13:15,846 ในตัวอย่างนี้เราใช้ 4 agent ครับ คือ tech 246 00:13:15,846 --> 00:13:19,656 (เทคโนโลยี) health (สุขภาพ) finance (การเงิน) 247 00:13:19,656 --> 00:13:23,551 และ aggregator ที่จะรวมข้อมูลทั้งหมดเป็น draft 248 00:13:23,551 --> 00:13:27,022 รวมเดียวกันครับ ตัวแรกคือ tech researcher 249 00:13:27,022 --> 00:13:30,663 ผ่านวิธี define แบบเดิม คือ name, model และ 250 00:13:30,663 --> 00:13:34,473 retry option ครับ instruction คือ วิจัยเทรนด์ 251 00:13:34,473 --> 00:13:37,182 AI/ML ล่าสุด ระบุ 3 พัฒนาการหลัก 252 00:13:37,182 --> 00:13:39,129 บริษัทหลักที่เกี่ยวข้อง 253 00:13:39,129 --> 00:13:42,770 และผลกระทบที่อาจเกิดขึ้น รายงานกระชับประมาณ 254 00:13:42,770 --> 00:13:45,225 100 คำ ใช้ Google Search tool 255 00:13:45,225 --> 00:13:48,612 แล้วส่งข้อมูลที่ค้นพบไปเก็บใน output key 256 00:13:48,612 --> 00:13:51,660 ฝั่งงานวิจัยเทคโนโลยีครับ รันเลยครับ 257 00:13:51,660 --> 00:13:54,793 ในทำนองเดียวกัน บอก health researcher 258 00:13:54,793 --> 00:13:58,264 ให้หาความก้าวหน้าทางการแพทย์ล่าสุด ระบุ 3 259 00:13:58,264 --> 00:14:01,312 ความก้าวหน้าสำคัญ การประยุกต์ใช้จริง 260 00:14:01,312 --> 00:14:05,122 และกรอบเวลาที่คาดการณ์ รายงานกระชับประมาณ 100 261 00:14:05,122 --> 00:14:08,339 คำ และเราก็สร้าง health research agent 262 00:14:08,339 --> 00:14:11,641 เสร็จแล้วครับ ต่อไปผมจะ execute finance 263 00:14:11,641 --> 00:14:14,605 research agent ครับ instruction คือ 264 00:14:14,605 --> 00:14:18,499 วิจัยเทรนด์ fintech ปัจจุบัน ระบุ 3 เทรนด์หลัก 265 00:14:18,499 --> 00:14:20,955 ผลกระทบต่อตลาด และมุมมองอนาคต 266 00:14:20,955 --> 00:14:24,849 รายงานกระชับประมาณ 100 คำ โดยใช้ Google Search 267 00:14:24,849 --> 00:14:28,575 tool ตัวเดิมครับ ทั้งสามตัวใช้ Google Search 268 00:14:28,575 --> 00:14:32,469 tool ตัวเดียวกันครับ ต่อมาคือ aggregator agent 269 00:14:32,469 --> 00:14:36,279 ที่จะรวมทั้งหมดและสร้าง output รวมสุดท้ายครับ 270 00:14:36,279 --> 00:14:40,005 มันจะไม่ใช้ Google Search เป็น tool หรอกครับ 271 00:14:40,005 --> 00:14:43,815 แต่จะดู output ของ agent ทั้งสามตัวนี้แทนครับ 272 00:14:43,815 --> 00:14:47,117 name กับ model กับ retry option เป็นค่า 273 00:14:47,117 --> 00:14:50,504 default ตามเดิม อย่างไรก็ตาม instruction 274 00:14:50,504 --> 00:14:53,044 จะเป็นตัวรวม research findings 275 00:14:53,044 --> 00:14:56,600 ทั้งสามชุดเข้าเป็น executive summary เดียว 276 00:14:56,600 --> 00:15:00,494 ครอบคลุมเทรนด์เทคโนโลยี ความก้าวหน้าด้านสุขภาพ 277 00:15:00,494 --> 00:15:04,135 และนวัตกรรมการเงิน โดยดึงจาก output key ของ 278 00:15:04,135 --> 00:15:06,336 agent แต่ละตัวครับ summary 279 00:15:06,336 --> 00:15:10,231 ของคุณควรเน้นธีมร่วม ความเชื่อมโยงที่น่าแปลกใจ 280 00:15:10,231 --> 00:15:13,702 และประเด็นสำคัญที่สุดจากทั้งสามรายงาน โดย 281 00:15:13,702 --> 00:15:17,512 final summary ยาวประมาณ 200 คำ และเก็บ output 282 00:15:17,512 --> 00:15:20,560 ไว้ใน executive summary ครับ เท่านี้ 283 00:15:20,560 --> 00:15:23,524 aggregator agent ก็ถูกสร้างแล้วครับ 284 00:15:23,524 --> 00:15:27,080 หลังจากนี้เราต้องมี parallel research team 285 00:15:27,080 --> 00:15:30,720 agent ครับ agent แบบ parallel ตัวนี้จะ wrap 286 00:15:30,720 --> 00:15:34,615 agent ทั้งหมดเข้าเป็น agent เดียว เหมือนการรวม 287 00:15:34,615 --> 00:15:37,832 agent ทั้งหมดเพื่อนำ research findings 288 00:15:37,832 --> 00:15:41,134 มารวมกันเป็นรายงานเดียวครับ ใน workflow 289 00:15:41,134 --> 00:15:44,521 ก่อนหน้าตรงจุดนี้เราใช้ sequential agent 290 00:15:44,521 --> 00:15:48,331 ที่นี่เราจะใช้ parallel agent ที่มี sub-agent 291 00:15:48,331 --> 00:15:51,125 คือ tech, health และ finance ครับ 292 00:15:51,125 --> 00:15:54,935 เมื่อสร้างเสร็จแล้ว ต่อไปเราต้องมี sequential 293 00:15:54,935 --> 00:15:57,898 agent ที่ข้างในบรรจุ parallel agent 294 00:15:57,898 --> 00:16:01,200 ตัวนี้อยู่ร่วมกับ aggregator agent ครับ 295 00:16:01,200 --> 00:16:03,994 ทั้งสองจึงมาเรียงกันเป็นลำดับครับ 296 00:16:03,994 --> 00:16:07,381 กลับมาที่โค้ด เราได้ root agent ซึ่งเป็น 297 00:16:07,381 --> 00:16:10,937 sequential agent ครับ ทำหน้าที่รันลำดับของ 298 00:16:10,937 --> 00:16:12,884 parallel research agent 299 00:16:12,884 --> 00:16:16,779 ซึ่งรวมรายงานทั้งหมดเข้าด้วยกัน แล้วจึงตามด้วย 300 00:16:16,779 --> 00:16:20,674 aggregator agent ที่จะรวมทุกรายงานจาก parallel 301 00:16:20,674 --> 00:16:23,806 research team แล้วส่งออกเป็นลำดับครับ 302 00:16:23,806 --> 00:16:26,939 ตอนนี้รัน runner ครับ มีคำถามขอ daily 303 00:16:26,939 --> 00:16:30,495 executive briefing เรื่อง tech, health และ 304 00:16:30,495 --> 00:16:34,051 finance ครับ ระบบแจ้งว่าผู้ใช้ถามเรื่องนี้ 305 00:16:34,051 --> 00:16:37,776 tech researcher ให้ข้อมูลมาสองสามบรรทัด แล้ว 306 00:16:37,776 --> 00:16:41,417 health researcher ก็ให้ข้อมูลส่วนของ health 307 00:16:41,417 --> 00:16:45,227 executive briefing ครับ มี executive briefing 308 00:16:45,227 --> 00:16:48,783 เรื่อง fintech trends และข้อมูล healthcare 309 00:16:48,783 --> 00:16:52,424 รวมถึง future outlook ครับ และนี่คือสิ่งที่ 310 00:16:52,424 --> 00:16:55,895 aggregator agent ทำ มันรับ daily briefing 311 00:16:55,895 --> 00:16:59,705 เรื่อง tech, health, finance แล้วสร้าง output 312 00:16:59,705 --> 00:17:02,753 สุดท้ายออกมาครับ นี่คือวิธีที่ agent 313 00:17:02,753 --> 00:17:05,801 ทั้งหมดทำงานร่วมกันเพื่อสร้าง output 314 00:17:05,801 --> 00:17:09,188 เดียวที่เรียบร้อยให้ผู้ใช้ สำหรับ prompt 315 00:17:09,188 --> 00:17:12,913 ที่เขาส่งเข้ามาครับ ต่อไปเป็น section ที่ห้า 316 00:17:12,913 --> 00:17:15,961 คือ loop workflow (การทำงานแบบวนซ้ำ) 317 00:17:15,961 --> 00:17:19,517 หรือวงจรการขัดเกลาผลงาน (refinement cycle) 318 00:17:19,517 --> 00:17:20,614 ครับ 319 00:17:20,614 --> 00:17:24,170 ใช้เมื่องานต้องได้รับการปรับปรุงผ่านรอบของ 320 00:17:24,170 --> 00:17:27,980 feedback และการแก้ไขซ้ำครับ เราสามารถใช้ loop 321 00:17:27,980 --> 00:17:30,943 agent ซึ่งรันชุดของ sub-agent ซ้ำ ๆ 322 00:17:30,943 --> 00:17:34,161 จนกว่าเงื่อนไขที่กำหนดจะถูกทำให้สำเร็จ 323 00:17:34,161 --> 00:17:37,547 หรือจนถึงจำนวนรอบ (iteration) สูงสุดครับ 324 00:17:37,547 --> 00:17:40,934 กลไกนี้จะสร้างวงจรปรับปรุง ให้ระบบ agent 325 00:17:40,934 --> 00:17:44,321 พัฒนาผลงานของตัวเองซ้ำแล้วซ้ำเล่าได้ครับ 326 00:17:44,321 --> 00:17:46,437 แล้วเมื่อไหร่ควรใช้ loop? 327 00:17:46,437 --> 00:17:50,417 พื้นฐานคือเมื่อคุณมีความต้องการปรับปรุงแบบวนซ้ำ 328 00:17:50,417 --> 00:17:54,311 (iterative improvement) เมื่อต้องขัดเกลาคุณภาพ 329 00:17:54,311 --> 00:17:56,513 และต้องการรอบการแก้ไขซ้ำ ๆ 330 00:17:56,513 --> 00:17:58,799 สำหรับปัญหาใดปัญหาหนึ่งครับ 331 00:17:58,799 --> 00:18:01,423 ปัญหาพื้นฐานที่ยกมาคือ workflow 332 00:18:01,423 --> 00:18:05,234 ทั้งหมดที่เห็นมาถึงตอนนี้ ทั้ง sequential และ 333 00:18:05,234 --> 00:18:08,536 parallel รันตั้งแต่ต้นจนจบ สร้าง output 334 00:18:08,536 --> 00:18:12,261 สุดท้ายแล้วหยุดครับ แนวทางแบบยิงครั้งเดียวจบ 335 00:18:12,261 --> 00:18:13,358 (one-shot) 336 00:18:13,358 --> 00:18:17,845 แบบนี้ไม่เหมาะกับงานที่ต้องปรับปรุงซ้ำและควบคุมคุณภาพ 337 00:18:17,845 --> 00:18:21,655 ซึ่งตรงนี้เองที่วงจร critic และ loop workflow 338 00:18:21,655 --> 00:18:23,095 เข้ามามีบทบาทครับ 339 00:18:23,095 --> 00:18:26,735 อยากเรียนรู้เพิ่มไปอ่านบทความ loop agent ใน 340 00:18:26,735 --> 00:18:27,832 ADK ได้ครับ 341 00:18:27,832 --> 00:18:30,880 มีตัวอย่างและโค้ดหลายแบบให้ศึกษาครับ 342 00:18:30,880 --> 00:18:33,590 ในตัวอย่างนี้ เรามี writer agent 343 00:18:33,590 --> 00:18:36,468 (เอเจนต์นักเขียน) กับ critic agent 344 00:18:36,468 --> 00:18:39,093 (เอเจนต์นักวิจารณ์) ครับ writer 345 00:18:39,093 --> 00:18:41,464 จะร่างเรื่องสั้น แล้ว critic 346 00:18:41,464 --> 00:18:44,342 จะรีวิวและให้วิจารณ์เรื่องสั้นนั้น 347 00:18:44,342 --> 00:18:47,898 พร้อมเสนอแนะการปรับปรุง ตามจำนวน iteration 348 00:18:47,898 --> 00:18:51,285 ที่กำหนด ไม่ว่าจะรอบจนกว่าเงื่อนไขสำเร็จ 349 00:18:51,285 --> 00:18:54,926 หรือจนครบจำนวนรอบครับ เริ่มจากสร้าง initial 350 00:18:54,926 --> 00:18:58,397 writer agent ก่อนครับ instruction คือ จาก 351 00:18:58,397 --> 00:19:00,768 prompt ของผู้ใช้ เขียน draft 352 00:19:00,768 --> 00:19:04,154 แรกของเรื่องสั้นความยาวประมาณ 100-150 คำ 353 00:19:04,154 --> 00:19:06,525 ส่งออกเฉพาะเนื้อเรื่องล้วน ๆ 354 00:19:06,525 --> 00:19:09,573 ไม่ต้องมีคำนำหรือคำอธิบาย และ output 355 00:19:09,573 --> 00:19:13,214 ที่ได้ให้บันทึกเป็น current story ซึ่งก็คือ 356 00:19:13,214 --> 00:19:16,854 draft แรกของคุณ ไว้ใน state (สถานะ) ครับ กด 357 00:19:16,854 --> 00:19:20,495 execute แล้ว agent ถูกสร้างครับ ตัวถัดไปคือ 358 00:19:20,495 --> 00:19:24,390 critic agent ครับ instruction ของ critic agent 359 00:19:24,390 --> 00:19:28,200 คือ คุณเป็นนักวิจารณ์เรื่องสั้นเชิงสร้างสรรค์ 360 00:19:28,200 --> 00:19:31,502 รีวิวเรื่องสั้นที่ให้มา ซึ่งก็คือ draft 361 00:19:31,502 --> 00:19:34,380 แรกหรือ current story ประเมิน plot 362 00:19:34,380 --> 00:19:38,021 (โครงเรื่อง) ตัวละคร และจังหวะการเล่าเรื่อง 363 00:19:38,021 --> 00:19:41,916 (pacing) ถ้าเรื่องสั้นเขียนได้ดีและสมบูรณ์แล้ว 364 00:19:41,916 --> 00:19:45,133 คุณต้องตอบกลับด้วยวลีที่แน่นอนคือคำว่า 365 00:19:45,133 --> 00:19:48,266 approved แต่ถ้ายังไม่ดีพอ ให้เสนอ 2-3 366 00:19:48,266 --> 00:19:51,652 ข้อเสนอแนะที่เจาะจงและลงมือทำได้จริง และ 367 00:19:51,652 --> 00:19:55,208 feedback ที่ออกมาให้เก็บใน output key ชื่อ 368 00:19:55,208 --> 00:19:58,680 critic ครับ กด generate ตัว agent นี้ครับ 369 00:19:58,680 --> 00:20:01,050 ตอนนี้เราสร้าง agent ครบแล้ว 370 00:20:01,050 --> 00:20:03,506 แต่เรายังต้องสร้าง loop agent 371 00:20:03,506 --> 00:20:07,062 ที่จะหยุดทำงานตาม feedback ของ critic ครับ 372 00:20:07,062 --> 00:20:08,924 แต่ปัญหาคือ loop agent 373 00:20:08,924 --> 00:20:12,565 จะไม่เข้าใจเองโดยอัตโนมัติว่าคำว่า approved 374 00:20:12,565 --> 00:20:14,089 หมายถึงให้หยุดครับ 375 00:20:14,089 --> 00:20:17,645 เราจึงต้องให้สัญญาณที่ชัดเจนแก่ loop agent 376 00:20:17,645 --> 00:20:20,862 เพื่อยุติการวนซ้ำครับ ทำได้สองส่วนครับ 377 00:20:20,862 --> 00:20:24,503 ส่วนแรกคือสร้าง Python function ง่าย ๆ ชื่อ 378 00:20:24,503 --> 00:20:26,958 exit loop เพื่อให้ loop agent 379 00:20:26,958 --> 00:20:30,853 เข้าใจว่านี่คือสัญญาณออกจากวงจร แล้วอีกส่วนคือ 380 00:20:30,853 --> 00:20:32,970 agent ที่จะเรียก function 381 00:20:32,970 --> 00:20:36,272 นั้นเมื่อเงื่อนไขที่ถูกต้องเกิดขึ้นครับ 382 00:20:36,272 --> 00:20:39,743 ขั้นแรก define ฟังก์ชัน exit loop กันครับ 383 00:20:39,743 --> 00:20:43,468 เรียกฟังก์ชันนี้เมื่อ critic ตอบว่า approved 384 00:20:43,468 --> 00:20:44,566 เท่านั้น 385 00:20:44,566 --> 00:20:48,799 ซึ่งแสดงว่าเรื่องสั้นเสร็จสมบูรณ์แล้วไม่ต้องแก้อีก 386 00:20:48,799 --> 00:20:52,609 โดยเขียน status เป็น approved และ message ว่า 387 00:20:52,609 --> 00:20:56,165 story approved กำลังออกจากวงจรปรับปรุงครับ 388 00:20:56,165 --> 00:20:59,890 ความหมายคือเมื่อ critic บอกว่า approved แล้ว 389 00:20:59,890 --> 00:21:03,277 loop agent จะต้องออกจากวงจรครับ เรากำลัง 390 00:21:03,277 --> 00:21:06,071 define ฟังก์ชัน exit loop นี้ครับ 391 00:21:06,071 --> 00:21:08,950 เสร็จแล้วครับ ต่อมาต้องสร้าง agent 392 00:21:08,950 --> 00:21:11,744 ที่จะเรียกใช้ Python function นี้ 393 00:21:11,744 --> 00:21:15,384 โดยครอบมันไว้ใน function tool ครับ เราเรียก 394 00:21:15,384 --> 00:21:19,025 agent นี้ว่า refiner agent ครับ instruction 395 00:21:19,025 --> 00:21:20,803 ของ refiner agent คือ 396 00:21:20,803 --> 00:21:24,444 คุณเป็นผู้ขัดเกลาเรื่องสั้น (story refiner) 397 00:21:24,444 --> 00:21:27,915 คุณมี story draft ซึ่งก็คือ current story 398 00:21:27,915 --> 00:21:31,640 ที่มาจาก initial agent และมี critic ซึ่งเป็น 399 00:21:31,640 --> 00:21:33,588 output ของ critic agent 400 00:21:33,588 --> 00:21:36,466 หน้าที่ของคุณคือวิเคราะห์คำวิจารณ์ 401 00:21:36,466 --> 00:21:39,514 ถ้าคำวิจารณ์คือคำว่า approved เป๊ะ ๆ 402 00:21:39,514 --> 00:21:42,054 คุณต้องเรียกฟังก์ชัน exit loop 403 00:21:42,054 --> 00:21:44,848 และไม่ทำอย่างอื่นเลย แต่ถ้าไม่ใช่ 404 00:21:44,848 --> 00:21:48,235 ให้เขียนเรื่องสั้นใหม่โดยนำ feedback จาก 405 00:21:48,235 --> 00:21:51,706 critic มาใช้ให้ครบถ้วน แล้วบันทึกกลับเป็น 406 00:21:51,706 --> 00:21:53,230 current story ครับ 407 00:21:53,230 --> 00:21:57,718 แบบนี้เรื่องสั้นเวอร์ชันปรับปรุงใหม่จะเขียนทับของเดิม 408 00:21:57,718 --> 00:21:59,496 แล้ววนกลับไปหา critic 409 00:21:59,496 --> 00:22:01,612 ให้วิจารณ์รอบใหม่อีกครั้ง 410 00:22:01,612 --> 00:22:05,253 วงจรก็เดินต่อแบบนี้ครับ โดยสรุป instruction 411 00:22:05,253 --> 00:22:08,301 นี้บอกว่า agent ตัวนี้คือสมองของวงจร 412 00:22:08,301 --> 00:22:11,010 มันอ่านผลวิจารณ์จาก critic agent 413 00:22:11,010 --> 00:22:13,720 แล้วตัดสินใจว่าจะเรียก exit loop 414 00:22:13,720 --> 00:22:17,106 หรือจะเขียนเรื่องสั้นใหม่ครับ output key 415 00:22:17,106 --> 00:22:20,662 อยู่ตรงนี้ และ tool คือ function tool ชื่อ 416 00:22:20,662 --> 00:22:24,472 exit loop ครับ ลองสร้าง agent นี้ครับ refiner 417 00:22:24,472 --> 00:22:28,282 agent ถูกสร้างแล้วครับ เท่านี้เราก็มีนิยามของ 418 00:22:28,282 --> 00:22:31,584 exit loop มีตัวฟังก์ชัน exit loop และมี 419 00:22:31,584 --> 00:22:34,802 refiner agent ครับ ต่อมาคือ loop agent 420 00:22:34,802 --> 00:22:38,188 ซึ่งเราเตรียมสองขั้นข้างบนมาเพื่อมันครับ 421 00:22:38,188 --> 00:22:41,321 ตัวนี้ชื่อ story refinement loop ครับ 422 00:22:41,321 --> 00:22:45,046 sub-agent ข้างในคือ critic agent กับ refiner 423 00:22:45,046 --> 00:22:47,248 agent ครับ จำนวน iteration 424 00:22:47,248 --> 00:22:49,618 สูงสุดที่ให้ตรงนี้คือสองครับ 425 00:22:49,618 --> 00:22:52,243 จะตั้งกี่รอบก็ได้ตามต้องการครับ 426 00:22:52,243 --> 00:22:55,630 แต่สำคัญมากที่ต้องระบุตัวเลขกำกับไว้เสมอ 427 00:22:55,630 --> 00:22:59,440 เพื่อกัน agent วนซ้ำไม่รู้จบครับ ต่อมา define 428 00:22:59,440 --> 00:23:02,996 root agent ครับ เป็น sequential agent ชื่อ 429 00:23:02,996 --> 00:23:06,721 story pipeline ครับ sub-agent จะเป็น initial 430 00:23:06,721 --> 00:23:09,854 writer กับ story refinement loop ครับ 431 00:23:09,854 --> 00:23:12,648 ตัวนี้เองครับ เราไม่ได้เอา critic 432 00:23:12,648 --> 00:23:15,865 มาอยู่ตรงระดับบนสุดนะครับ เพราะ critic 433 00:23:15,865 --> 00:23:19,506 มีไว้เพื่อให้ feedback เฉย ๆ ดังนั้นเราจะมี 434 00:23:19,506 --> 00:23:23,062 first draft ก่อน แล้วจึงมี refinement loop 435 00:23:23,062 --> 00:23:26,787 ซึ่งจะคาย draft ฉบับขัดเกลาแล้วออกมาด้วยครับ 436 00:23:26,787 --> 00:23:29,835 กด execute เพื่อสร้าง loop agent และ 437 00:23:29,835 --> 00:23:33,560 sequential agent ครับ เสร็จแล้วครับ ต่อไปรัน 438 00:23:33,560 --> 00:23:37,116 runner ครับ มีคำถามเตรียมไว้ให้อยู่แล้วคือ 439 00:23:37,116 --> 00:23:43,128 เขียนเรื่องสั้นเกี่ยวกับคนดูประภาคารที่ค้นพบแผนที่เรืองแสงอันลึกลับครับ 440 00:23:43,128 --> 00:23:46,853 คุณเปลี่ยนคำถามเป็นหัวข้ออื่นก็ได้ แล้วดูว่า 441 00:23:46,853 --> 00:23:50,409 agent ตอบอย่างไรครับ ผู้ใช้ให้ prompt แล้ว 442 00:23:50,409 --> 00:23:54,134 initial writer ก็ส่ง draft แรกมาครับ จากนั้น 443 00:23:54,134 --> 00:23:56,674 critic เสนอแนะการปรับปรุง เช่น 444 00:23:56,674 --> 00:23:59,468 ขยายปฏิกิริยาของตัวละครให้ชัดขึ้น 445 00:23:59,468 --> 00:24:01,585 ความชัดเจนว่าไม่ใช่โลกนี้ 446 00:24:01,585 --> 00:24:05,988 และเพิ่มนัยบางอย่างเกี่ยวกับความสำคัญของสิ่งที่ค้นพบ 447 00:24:05,988 --> 00:24:09,713 แล้ว refiner agent ก็เขียนทั้งเรื่องใหม่ครับ 448 00:24:09,713 --> 00:24:13,608 จากนั้น critic ดูอีกรอบ เห็นว่าดีแล้วจึงตอบว่า 449 00:24:13,608 --> 00:24:17,502 approved ซึ่งหมายถึง loop agent ออกจากวงจร และ 450 00:24:17,502 --> 00:24:21,143 output ถูกส่งให้ผู้ใช้ครับ เราได้ implement 451 00:24:21,143 --> 00:24:22,413 ระบบ loop agent 452 00:24:22,413 --> 00:24:26,223 สร้างระบบที่ซับซ้อนซึ่งสามารถรีวิวและปรับปรุง 453 00:24:26,223 --> 00:24:28,340 output ของตัวเองเป็นรอบ ๆ 454 00:24:28,340 --> 00:24:31,557 ได้อย่างสะอาดเนี้ยบครับ นี่คือ pattern 455 00:24:31,557 --> 00:24:34,859 สำคัญสำหรับการสร้างผลลัพธ์คุณภาพสูงครับ 456 00:24:34,859 --> 00:24:38,331 ต่อมาคือบทสรุปของทั้งสามแบบที่เราทำมาครับ 457 00:24:38,331 --> 00:24:42,056 จนถึงตอนนี้เราผ่านครบทั้งสามระบบแล้ว ตั้งแต่ 458 00:24:42,056 --> 00:24:44,003 sequential ถึง parallel 459 00:24:44,003 --> 00:24:48,575 ซึ่งเป็นแบบต่างฝ่ายต่างพึ่งพากันกับอิสระต่อกันตามลำดับ 460 00:24:48,575 --> 00:24:50,438 แล้วจึงเป็น loop agent 461 00:24:50,438 --> 00:24:54,671 ที่วนซ้ำตามจำนวนรอบเพื่อประกันผลลัพธ์คุณภาพสูงครับ 462 00:24:54,671 --> 00:24:58,227 มาดูกันว่าทั้งสามต่างกันอย่างไร ใน section 463 00:24:58,227 --> 00:25:02,122 นี้มีสรุปเพื่อช่วยให้เข้าใจว่าควรเลือก pattern 464 00:25:02,122 --> 00:25:05,678 ไหนในสถานการณ์ไหนครับ นี่คือ decision tree 465 00:25:05,678 --> 00:25:09,234 (แผนผังการตัดสินใจ) ครับ ถ้าคุณมี pipeline 466 00:25:09,234 --> 00:25:11,943 ตามตัว ใช้ sequential agent ครับ 467 00:25:11,943 --> 00:25:15,753 ถ้ามีงานขนานที่อิสระต่อกัน ใช้ parallel agent 468 00:25:15,753 --> 00:25:16,850 ครับ 469 00:25:16,850 --> 00:25:22,438 ถ้ามีการปรับปรุงแบบวนซ้ำที่ต้องเฝ้าคุณภาพและต้องบรรลุเกณฑ์ที่กำหนด 470 00:25:22,438 --> 00:25:25,825 ใช้ loop agent ครับ และถ้าคุณอยากให้ LLM 471 00:25:25,825 --> 00:25:29,212 ตัดสินใจเองว่าจะทำอะไร ต้องไปทาง dynamic 472 00:25:29,212 --> 00:25:31,752 decision ซึ่ง LLM orchestrator 473 00:25:31,752 --> 00:25:35,138 จะทำหน้าที่เป็นสมองและประสานงานกับ agent 474 00:25:35,138 --> 00:25:38,864 ตัวอื่น ๆ ครับ ก็คือรูปแบบ agent-to-agent as 475 00:25:38,864 --> 00:25:40,303 tools นั่นเองครับ 476 00:25:40,303 --> 00:25:46,653 คุณสามารถดูตารางนี้เพื่อข้อมูลเพิ่มเติมเพื่อเข้าใจว่าเกิดอะไรขึ้นกันแน่ครับ 477 00:25:46,653 --> 00:25:50,548 ยินดีด้วยครับ ตอนนี้คุณเป็น agent orchestrator 478 00:25:50,548 --> 00:25:54,104 แล้ว ในวิดีโอถัดไปเราจะไปทำ unit ของ Day 2 479 00:25:54,104 --> 00:25:56,559 กันครับ ขอบคุณมากที่รับชมครับ