▶SUBTHAIแปลไทย · ซับ · พากย์⚙
บทความแปลภาษาไทย · YouTube

Day 1B: Agent Architectures — How Modern AI Agents Are Built (Google x Kaggle)

0:000:00
เล่นเสียงต้นฉบับของวิดีโอ พร้อมแสดงซับไทยซิงก์ตามเวลา
กำลังโหลดวิดีโอ…
01

สรุปย่อ

ประเด็นสำคัญจากวิดีโอ

- **ช่อง:** 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 ตามจริงครับ
02

คำแปลเต็ม

แปลตามบทสนทนาต้นฉบับ ปรับเป็นภาษาไทยธรรมชาติ

จากวิดีโอก่อนหน้า เราสร้าง 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 กันครับ ขอบคุณมากที่รับชมครับ

03

หมายเหตุการแปล

ความโปร่งใสเกี่ยวกับความไม่แน่นอนในต้นฉบับ

  • ## จุดที่ใช้สัญลักษณ์ฟังไม่ชัด
04

อภิธานศัพท์เทคนิค

คำศัพท์และชื่อผลิตภัณฑ์ที่คงรูปภาษาอังกฤษ

ศัพท์คำแปล / คำอธิบาย
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 ไว้ในหน่วยความจำ
05

ซับไตเติ้ลภาษาไทย

ดาวน์โหลดหรือดูซับทั้งหมด

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
thai-subtitles.srt
SubRip — ใช้กับเครื่องเล่นวิดีโอส่วนใหญ่
↓ ดาวน์โหลด
thai-subtitles.vtt
WebVTT — ใช้กับเว็บ / YouTube
↓ ดาวน์โหลด
เปิดดูซับไตเติ้ลทั้งหมด (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
กันครับ ขอบคุณมากที่รับชมครับ