Day 5A: AI Agent Deployment — Running Agents in Production
สรุปย่อ
ประเด็นสำคัญจากวิดีโอ
- **ช่อง:** Adspolitan Knowledge Studio · **ความยาว:** ~15 นาที · **ลิงก์:** https://www.youtube.com/watch?v=r3GDPvlVZXg
# สรุป: Day 5A: AI Agent Deployment — Running Agents in Production
- **ช่อง:** Adspolitan Knowledge Studio · **ความยาว:** ~15 นาที · **ลิงก์:** https://www.youtube.com/watch?v=r3GDPvlVZXg
## ประเด็นหลัก
- Assignment สุดท้ายของคอร์ส หัวข้อ prototype to production — เนื้อหาหลักคือ A2A protocol (agent-to-agent) สำหรับให้เอเจนต์อิสระหลายตัวสื่อสารและร่วมมือกันข้ามเครือข่ายและ framework
- เอเจนต์เดี่ยวทำทุกอย่างไม่ได้: ทีมต่างๆ สร้างเอเจนต์ต่างกัน ใช้ภาษา/framework ต่างกัน จึงต้องมีโปรโตคอลสื่อสารมาตรฐาน — A2A คือคำตอบ
- จุดเด่นของ A2A: เรียกเอเจนต์อื่นเหมือนเรียก tool, framework/language agnostic, รักษาสัญญาที่เป็นทางการผ่าน agent cards
- กรณีใช้งานหลัก 3 แบบ: cross framework (ADK ↔ framework อื่น), cross language (Python เรียก Java/Node.js), cross organization (เอเจนต์ภายใน ↔ service ผู้ให้บริการภายนอก)
- ตัวอย่างใน codelab: product catalog agent (ฝั่งผู้ขายภายนอก ให้ข้อมูลสินค้า) และ customer support agent (ฝั่งเรา ตอบลูกค้า) — จำลองรันบน localhost เพื่อการเรียน ใน production จะรันคนละโครงสร้างพื้นฐานแล้วคุยกันผ่านเน็ต
- ขั้นตอน 6 ขั้น: สร้าง product catalog agent → เปิดเผยผ่าน A2A → เริ่ม server → สร้าง customer support agent → ทดสอบการสื่อสาร → เข้าใจ flow
- Agent card = นามบัตร JSON ของเอเจนต์ (ชื่อ คำอธิบาย เวอร์ชัน skills URL endpoints) เผยแพร่ที่ path มาตรฐาน well-known/agent-card.json — ทุกเอเจนต์ A2A ต้องมี
- การเปิดเผย ADK agent ผ่าน A2A ทำได้ง่ายที่สุดด้วยฟังก์ชัน A2A ของ ADK: ห่อเอเจนต์ใน server ที่เข้ากันได้ (FastAPI/Starlette + uvicorn) แล้วสร้าง agent card อัตโนมัติ
- Flow การทำงาน: ลูกค้าถาม → support agent มอบหมายให้ sub-agent (remote A2A proxy) → ส่ง A2A request ผ่าน HTTP → catalog agent เรียก get_product_info → ตอบกลับ → support agent ประกอบคำตอบสุดท้ายให้ลูกค้า
- การใช้งานจริง: microservices, การเชื่อมบุคคลที่สาม, cross language, cross organization; ไอเดียต่อยอด: เพิ่ม inventory/shipping agent + coordinator, ใช้ฐานข้อมูลจริง (MongoDB), เชื่อม payment gateway จริง
- ขั้นถัดไป (optional): deploy product catalog agent ขึ้น Vertex AI Agent Engine บน Google Cloud แล้วอัปเดต URL ใน agent card เป็น production server จริง
## ความเห็นสรุป
วิดีโอนี้อธิบาย A2A ได้กระชับและเป็นรูปเป็นร่าง ผ่านตัวอย่าง e-commerce ที่รันได้จริงบน localhost ครับ จุดที่ควรเก็บคือแนวคิด agent card และการที่ remote agent ถูกมองเป็น sub-agent ผ่าน proxy ทำให้โค้ดฝั่งผู้ใช้เขียนเหมือนใช้เอเจนต์ local ทั่วไปครับ ชื่อวิดีโอ ("Deployment — Running Agents in Production") สื่อกว้างกว่าเนื้อหาจริงซึ่งเจาะ A2A เป็นหลัก ส่วน deployment จริงบน Agent Engine ถูกพูดถึงเพียงสั้นๆ ตอนท้ายครับ
คำแปลเต็ม
แปลตามบทสนทนาต้นฉบับ ปรับเป็นภาษาไทยธรรมชาติ
นี่คือวันที่ห้าของคอร์ส 5 วัน จึงเป็น assignment สุดท้ายของเราครับ เป็นเรื่อง prototype to production ครับ โปรดฟังพอดแคสต์สรุปซึ่งช่วยให้เข้าใจว่าหน่วยนี้มีอะไรบ้าง และโปรดอ่าน white paper เรื่อง prototype to production ซึ่งเป็นข้อมูลประกอบของพอดแคสต์นี้ครับ white paper ฉบับนี้เป็นคู่มือทางเทคนิคเกี่ยวกับวงจรการดำเนินงานของ AI agents โดยเน้นเรื่อง deployment การ scaling และการทำ productionization ครับ
ใน assignment นี้เราจะสำรวจความท้าทายของการยกระบบ agentic จากต้นแบบสู่โซลูชันระดับองค์กร โดยให้ความสนใจเป็นพิเพศกับ agent-to-agent หรือ A2A protocol ครับ ใน codelab วันนี้เราจะเรียนวิธีสร้างระบบของเอเจนต์อิสระหลายตัวที่สื่อสารและร่วมมือกันได้โดยใช้ A2A protocol และส่วนที่เขียนว่า optional เราจะเรียนวิธีพาเอเจนต์จากเครื่อง local ของเราไปสู่ service ที่พร้อมใช้งานและ scale ได้ใน production โดย deploy ขึ้น Vertex AI Agent Engine บน Google Cloud ครับ เอาล่ะ เริ่มกันเลย ผมจะคลิกที่ explore เพื่อเปิด notebook แล้วกด copy and edit ครับ
ใน assignment นี้ส่วน A เราจะเข้าใจเรื่องการสื่อสาร A2A กับ ADK ครับ เราจะเข้าใจวิธีสร้างระบบ multi-agent (ระบบหลายเอเจนต์) ที่เอเจนต์ต่างๆ สื่อสารและร่วมมือกันได้โดยใช้ A2A protocol ครับ ใน notebook นี้เราจะเข้าใจ A2A protocol และเมื่อไหร่ควรใช้มันเทียบกับ sub-agents เรียนรู้ architecture pattern ที่พบบ่อยของ A2A เปิดเผย ADK agent ให้เป็น service ใช้เอเจนต์ระยะไกล และสร้างระบบ product catalog integration ครับ
เมื่อเราสร้างระบบ AI ที่ซับซ้อนมากขึ้น เราจะพบว่าเอเจนต์เดี่ยวทำทุกอย่างไม่ได้ ซึ่งเราพูดกันมาตั้งแต่วันแรกแล้ว คุณต้องให้เอเจนต์ร่วมมือกัน ทีมต่างๆ สร้างเอเจนต์ต่างๆ กัน เอเจนต์อาจใช้ภาษาหรือ framework ต่างกัน ดังนั้นเราจึงต้องมีโปรโตคอลการสื่อสารแบบมาตรฐานครับ จะแก้ปัญหานี้อย่างไร คำตอบคือ A2A protocol ครับ คุณสามารถตามลิงก์นี้ไปทำความเข้าใจโดยละเอียดได้ครับ โปรโตคอลนี้เป็นมาตรฐานที่ทำให้เอเจนต์สื่อสารกันผ่านเครือข่ายได้ แม้เอเจนต์จะอยู่คนละเครื่อง ใช้ความสามารถของกันและกันได้ เช่นเอเจนต์หนึ่งเรียกอีกเอเจนต์หนึ่งเหมือนเรียก tool ทำงานข้าม framework ได้ หมายความว่าเป็น language หรือ framework agnostic และรักษาสัญญาที่เป็นทางการ โดย agent cards อธิบายความสามารถของแต่ละตัวครับ
architecture ที่พบบ่อยของ A2A มีประโยชน์เป็นพิเศษในสามกรณีครับ คือ cross framework cross language และ cross organization ครับ cross framework คือเอเจนต์ ADK สื่อสารกับ agent framework อื่นๆ cross language คือเอเจนต์ Python เรียกเอเจนต์ Java หรือ Node.js ส่วน cross organization หมายถึงเอเจนต์ภายในของคุณติดต่อหรือเชื่อมกับ service ของผู้ให้บริการภายนอกครับ
notebook นี้สาธิตการสร้าง e-commerce integration จริงๆ ครับ อันดับแรกคือ product catalog ซึ่งเปิดเผยผ่าน A2A เป็น service ของผู้ให้บริการภายนอกที่ให้ข้อมูลสินค้า จากนั้นเรามี customer support agent ซึ่งเป็นฝั่งผู้ใช้ คือเอเจนต์ภายในของเราที่ช่วยเหลือลูกค้าโดยค้นข้อมูลสินค้าครับ ในบทเรียนนี้เราจะจำลองทั้งสองเอเจนต์ไว้ในเครื่อง local เหมือนรันบน localhost เพื่อการเรียนรู้ครับ ใน production จริง product catalog agent จะรันบนโครงสร้างพื้นฐานของผู้ขาย และ customer support agent จะรันบนโครงสร้างพื้นฐานของเราเอง โดยสื่อสารกันผ่านอินเทอร์เน็ตด้วย A2A protocol ครับ
ขั้นตอนของบทเรียนนี้มีอะไรบ้าง บทเรียนนี้มีหกขั้นตอนครับ ขั้นแรกสร้าง product catalog agent จากนั้นเปิดเผยผ่าน A2A ซึ่งก็ส่วนนี้ แล้วเริ่ม server สร้าง customer support agent ทดสอบการสื่อสาร และเข้าใจว่าข้อมูลไหลอย่างไรครับ
เริ่มจากส่วนแรกคือ setup ตามปกติ ไปที่ add-ons แล้ว secret key กด add secret เลือกแล้วรันโค้ด อย่างที่เห็น setup และการยืนยันตัวตนเสร็จสมบูรณ์ครับ ไปกันขั้นต่อไป ซึ่งก็คือ import ส่วนประกอบเฉพาะที่เราต้องใช้จาก ADK และไลบรารี genai ครับ อันนี้สำเร็จแล้ว ขั้นถัดไปคือตั้งค่า retry option อันนี้ก็เสร็จแล้วครับ
ทีนี้ใน section หนึ่งสิ่งที่เราจะทำคือสร้าง product catalog agent ที่จะถูกเปิดเผยครับ คำถามแรกคือทำไมต้องเปิดเผยผ่าน A2A ในระบบจริงสิ่งนี้จะถูกดูแลโดยผู้ให้บริการภายนอกหรือบริษัทอื่น เอเจนต์ภายในของเราเอง เช่น customer support หรือ sales หรือ inventory ต้องการข้อมูลสินค้า ผู้ขายควบคุม code base ของตัวเอง เราแก้ implementation ของเขาไม่ได้ ดังนั้นการเปิดเผยผ่าน A2A ทำให้เอเจนต์ใดก็ตามที่ได้รับอนุญาตสามารถใช้งานได้ผ่านโปรโตคอลมาตรฐานครับ ด้วยเหตุนี้ product catalog agent จึงจะถูกเปิดเผยผ่าน A2A เพื่อให้เอเจนต์อื่นใช้งานได้ครับ
ตรงนี้เรากำลังนิยาม product catalog lookup ครับ เรามี product info กับ product name มีอาร์กิวเมนต์และค่าที่คืน แล้วเรากำหนด mock product catalog ขึ้นมาครับ จากนั้นสร้างเอเจนต์ มีชื่อ มี instructions กับ description และ tool ที่ใช้คือ get_product_info ตัวที่เราเพิ่งสร้างไปครับ instructions คือเธอเป็นผู้เชี่ยวชาญ catalog สินค้าจากผู้ให้บริการภายนอก เมื่อถูกถามเรื่องสินค้า ให้ใช้ tool ชื่อ get_product_info เพื่อดึงข้อมูลจาก catalog เป็นต้นครับ ผมจะรันอันนี้ catalog agent ถูกสร้างแล้ว มันให้ข้อมูลว่าใช้ tool อะไรและเปิดเผยอย่างไรครับ
section ถัดไปคือการเปิดเผย product catalog agent ผ่าน A2A ครับ สิ่งที่ A2A ทำตรงนี้คือเรามีฟังก์ชัน A2A อยู่ตัวหนึ่ง ฟังก์ชันนี้เราจะใช้ทำให้ product catalog ของเราเข้าถึงได้จากเอเจนต์อื่นครับ ฟังก์ชันนี้ทำอะไร มันห่อเอเจนต์ของเราไว้ใน server ที่เข้ากันได้กับ A2A เช่น FastAPI หรือ Starlette หมายความว่ามันสร้าง agent card ขึ้นอัตโนมัติ ที่รวมชื่อเอเจนต์ คำอธิบาย และเวอร์ชัน พร้อม protocol version และ endpoints มี input และ output modes และมันจะเสิร์ฟ agent card ที่ path มาตรฐานอย่าง well-known agent card.json ซึ่งเป็น path มาตรฐานของ A2A ครับ ดังนั้นมันจัดการรายละเอียดของ A2A protocol ทั้งหมด เช่น request response formatting และ task endpoints และอื่นๆ นี่คือวิธีที่ง่ายที่สุดในการเปิดเผย ADK agent ผ่าน A2A ครับ
ต่อไปขอเล่าเรื่อง agent card กันหน่อยครับ agent card คืออะไร agent card เป็นเอกสาร JSON ที่ทำหน้าที่เหมือนนามบัตรของเอเจนต์ครับ มันอธิบายว่าเอเจนต์ทำอะไร เช่น ชื่อ คำอธิบาย เวอร์ชัน มีความสามารถอะไร เช่น skills tools functions และสื่อสารกับมันได้อย่างไร ผ่าน URL ผ่าน protocol version หรือผ่าน endpoints ครับ เอเจนต์ A2A ทุกตัวต้องเผยแพร่ agent card ของตัวเองที่ path มาตรฐานนี้ครับ ถ้าอยากเรียนรู้เพิ่มเติม มีเอกสารสองชุดนี้ให้อ่านได้ครับ ผมรันอันนี้เพื่อเตรียมเริ่ม server ครับ agent card จะอยู่ตรงนี้พร้อมเริ่ม server แล้วครับ
section ถัดไปคือการเริ่ม server ของ product catalog agent ครับ เราจะเริ่ม agent server นี้ใน background โดยใช้ uvicorn เพื่อให้มันตอบ request จากเอเจนต์อื่นได้ครับ ทำไมต้องรันใน background เพราะ server ต้องรันค้างไว้ระหว่างที่เราสร้างและทดสอบ customer support agent ครับ นี่จำลองสถานการณ์จริงที่เอเจนต์ต่างๆ รันเป็น service แยกจากกัน ใน production ผู้ขายจะเป็นฝ่ายโฮสต์มันบนโครงสร้างพื้นฐานของเขาเองครับ เราจะบันทึก product catalog agent ลงไฟล์ที่ uvicorn สามารถ import ได้ ตรงนี้เราจะใส่ข้อมูลทั้งหมด get_info config ส่วนประกอบที่ import จาก ADK และข้อมูลของ catalog agent ทั้งหมด แล้วเราจะเขียน product agent ลงไฟล์ชั่วคราวแบบนี้ครับ แล้วเริ่ม uvicorn server ใน background ครับ ตัว server process เปิด subprocess ขึ้นมา ส่วน input output subprocess พวกนี้คือ print statements ครับ เรารอให้ server เริ่มทำงาน จำนวนความพยายามสูงสุดที่ให้คือ 30 ครั้ง แล้ว request ตอบกลับมาที่ well-known agent card ครับ ผมรันอันนี้ อย่างที่เห็นโค้ดของ catalog agent ถูกบันทึกไปที่นี่แล้วครับ
ทีนี้เราจะดู card ที่สร้างอัตโนมัติ ฟังก์ชัน A2A ตัวนี้สร้าง agent card ขึ้นมาโดยอัตโนมัติ ซึ่งอธิบายความสามารถของ product catalog agent ครับ มันให้ข้อมูลครบทุกอย่างเกี่ยวกับความสามารถ พร้อมคำอธิบายของแต่ละสินค้าครับ ต่อไปเราจะสร้าง remote A2A agent ที่เชื่อมต่อกับ product catalog ครับ remote product catalog agent ถูกสร้างแล้ว มันคือ proxy ครับ customer support agent สามารถใช้ตัวนี้เป็น sub-agent ในเครื่องได้เลยครับ ทีนี้เราจะสร้าง customer support agent ซึ่งเป็นเอเจนต์แบบปกติที่เราสร้างกันทั่วไป โดยใช้ sub-agent หนึ่งตัวคือ remote product ตัวที่เราสร้างไว้ด้านบนครับ
ต่อไป section ห้าคือการทดสอบการสื่อสาร A2A ครับ สิ่งที่เกิดขึ้นเบื้องหลังคือ ลูกค้าถาม customer support agent เรื่องสินค้าหนึ่งๆ แล้ว support agent รู้ตัวว่าต้องการข้อมูลสินค้า จึงไปที่ remote product catalog agent ซึ่งเป็น remote A2A agent ที่เราสร้างไว้ โดยส่ง A2A protocol request ไปที่ localhost ครับ แล้ว product catalog agent ประมวลผล request และตอบกลับ support agent รับ response นั้นแล้วดำเนินการต่อ ลูกค้าก็ได้คำตอบสุดท้ายครับ ตรงนี้ถ้าเห็น ลูกค้าถามว่าเล่าเรื่อง 15 Pro ให้ฟังหน่อย ยังมีสต็อกไหม เอเจนต์ตอบว่า iPhone 15 มีสต็อกอยู่ เหลือเพียง 8 เครื่องเท่านั้น ราคาอยู่ที่ระดับนี้ มีความจุ 128 GB และเป็นเครื่องสีไทเทเนียมครับ
คุณลองตัวอย่างเพิ่มเติมได้ครับ เช่น ผมกำลังหาแล็ปท็อป เปรียบเทียบ Dell กับ MacBook Pro ให้หน่อยได้ไหม หรืออีกอันคือ มีหูฟัง Sony ไหม ราคาเท่าไหร่ คุณทำแบบนี้ได้ครับ ตอนนี้มันให้การเปรียบเทียบมาแล้ว และพอถามว่ามีอันนี้ไหม มันตอบว่าขอโทษครับ ดูเหมือนไม่มีข้อมูลเรื่องหูฟังรุ่นนี้ในสต็อกครับ คุณลองตัวอย่างอื่นๆ เพิ่มเติมเองได้อีก โค้ดชุดนี้คัดลอกไปใช้ได้เลย เพียงเปลี่ยนคำถาม ผมว่าผมพลาดอันนี้ไป มันบอกว่าไม่มีใน product catalog ของเรา สินค้าที่มีคืออันนี้ อันนี้ อันนี้ และอันนี้ครับ คุณลองเล่นดูเองได้ถ้าอยากดูว่ามันตอบอย่างไรครับ
อันถัดไปคือ section หก เรื่องทำความเข้าใจว่าเพิ่งเกิดอะไรขึ้นครับ ตรงนี้สิ่งที่เกิดขึ้นคือลูกค้าถามเรื่อง iPhone 15 Pro แล้ว customer support agent รับคำถามและตัดสินใจว่าต้องการข้อมูลสินค้า support agent จึงมอบหมายงานให้ product catalog agent ซึ่งเป็น sub-agent ครับ จากนั้น remote A2A agent ในฐานะ proxy ฝั่ง client แปลงสิ่งนี้เป็น A2A protocol request ครับ สิ่งที่เกิดขึ้นตรงนี้คือ request ถูกส่งผ่าน HTTP ในรูปแบบ A2A request ตรงที่ไฮไลต์สีเหลืองอยู่นี่ครับ ทีนี้ product catalog agent ฝั่ง server รับ request นี้แล้วเรียก get_product_info เรื่อง iPhone 15 Pro ครับ จากนั้นเอเจนต์นี้คืนข้อมูลสินค้าจากตรงนี้กลับไปที่ remote agent ผ่าน response ของ A2A ครับ แล้ว remote agent รับ response แล้วส่งต่อกลับให้ support agent ครับ support agent ประกอบคำตอบสุดท้ายพร้อมรายละเอียดสินค้า แล้วคืน response นั้นให้ลูกค้า ดังนั้นลูกค้าจึงได้รับคำตอบที่สมบูรณ์และมีประโยชน์ครับ
มีการใช้งานจริงมากมายครับ เช่น microservices การเชื่อมต่อบริษัทอื่น cross language specialized teams และ cross organization ครับ ทั้งหมดนี้คือการใช้งานจริงครับ ส่วนไอเดียต่อยอดคือ ตอนนี้คุณเข้าใจพื้นฐานแล้ว ลองขยายตัวอย่างพวกนี้ดู เช่น เพิ่มเอเจนต์อื่นๆ เข้ามาอีก เช่น inventory agent และ shipping agent แล้วให้มีเอเจนต์ coordinator คุมทั้งสามตัวนี้ จากนั้นใช้แหล่งข้อมูลจริง แทนที่ mock product ด้วยฐานข้อมูลจริง เช่น MongoDB เพิ่มระบบติดตามสต็อกจริง เชื่อมต่อกับ payment gateway API จริงๆ ครับ เพื่อนๆ ทำทั้งหมดนี้ด้วยตัวเองได้เลยครับ จากนั้นคุณสามารถ deploy product catalog agent ขึ้น Agent Engine ได้ โดยอัปเดต URL ใน card จาก well-known ให้เป็น production server ที่ถูกต้องจริงๆ ครับ อยากรู้ว่าทำอย่างไร ใช้คู่มือ A2A เอกสารโปรโตคอล และตัวเลือก deployment อื่นๆ ได้เลย คุณทำได้ด้วยตัวเองครับ
โดยสรุปใน notebook นี้เราได้เรียนรู้วิธีสร้างระบบ multi-agent ด้วย A2A protocol ซึ่งเป็นโปรโตคอลมาตรฐานสำหรับการสื่อสารระหว่างเอเจนต์กับเอเจนต์ข้ามเครือข่ายและข้าม framework รวมถึงการเปิดเผยเอเจนต์ การใช้เอเจนต์ และ use case ต่างๆ ครับ ยินดีด้วยครับ เราทำส่วนแรกของ Day 5 ซึ่งเป็นวันสุดท้ายของคอร์สนี้เสร็จแล้ว ส่วนจะไปส่วนสุดท้ายซึ่งก็คือ Day 5B โปรดไปดูวิดีโอถัดไปครับ
หมายเหตุการแปล
ความโปร่งใสเกี่ยวกับความไม่แน่นอนในต้นฉบับ
- ไม่มีการใช้สัญลักษณ์ระบุเสียงไม่ชัดเจน (0 จุด) — ทุก segment เข้าใจความหมายได้ครบ
อภิธานศัพท์เทคนิค
คำศัพท์และชื่อผลิตภัณฑ์ที่คงรูปภาษาอังกฤษ
| ศัพท์ | คำแปล / คำอธิบาย |
|---|---|
| prototype to production | การยกระบบจากต้นแบบสู่การใช้งานจริง |
| productionization | การทำระบบให้พร้อมใช้งานใน production |
| deployment | การปล่อยระบบขึ้นใช้งานจริง |
| scaling | การขยายขีดความสามารถรองรับงานที่มากขึ้น |
| A2A protocol (agent-to-agent) | โปรโตคอลมาตรฐานให้เอเจนต์สื่อสารกันข้ามเครือข่ายและ framework |
| enterprise-grade | ระดับมาตรฐานองค์กร |
| agentic systems | ระบบที่ขับเคลื่อนด้วยเอเจนต์ |
| multi-agent systems | ระบบหลายเอเจนต์ทำงานร่วมกัน |
| sub-agent | เอเจนต์บริวารที่เอเจนต์หลักมอบหมายงานให้ |
| framework agnostic | ไม่ผูกกับ framework ใด framework หนึ่ง |
| agent card | เอกสาร JSON แบบนามบัตรอธิบายความสามารถของเอเจนต์ |
| well-known path | path URL มาตรฐานที่เอเจนต์ A2A เผยแพร่ agent card |
| cross framework / cross language / cross organization | ข้าม framework / ข้ามภาษาโปรแกรม / ข้ามองค์กร |
| product catalog | แคตตาล็อกสินค้า |
| customer support agent | เอเจนต์ช่วยเหลือลูกค้า |
| e-commerce integration | การเชื่อมระบบพาณิชย์อิเล็กทรอนิกส์ |
| vendor | ผู้ให้บริการ/ผู้ขายภายนอก |
| third party | บุคคล/บริษัทภายนอกที่สาม |
| proxy | ตัวแทนส่งต่อคำขอ — remote agent ที่ห่อเอเจนต์ระยะไกลให้ใช้เหมือน local |
| FastAPI / Starlette | เฟรมเวิร์กสร้างเว็บ server ของ Python |
| uvicorn | โปรแกรมรันเว็บ server ของ Python |
| localhost | การรัน service ในเครื่องตัวเอง |
| background process | กระบวนการที่รันแบบเบื้องหลัง |
| subprocess | กระบวนการย่อยที่โปรแกรมหลักเปิดขึ้น |
| mock | ข้อมูลจำลองสำหรับทดสอบแทนของจริง |
| get_product_info | ชื่อ tool ดึงข้อมูลสินค้าในตัวอย่าง |
| request / response | คำขอ / การตอบกลับ |
| endpoint | จุดเชื่อมต่อ URL ของ service |
| protocol version | เวอร์ชันของโปรโตคอล |
| HTTP | โปรโตคอลสื่อสารเว็บมาตรฐาน |
| microservices | สถาปัตยกรรมแบ่งระบบเป็น service ย่อยหลายตัว |
| MongoDB | ฐานข้อมูล NoSQL |
| payment gateway API | API ระบบชำระเงิน |
| inventory agent / shipping agent | เอเจนต์จัดการสต็อก / การจัดส่ง (ไอเดียต่อยอด) |
| coordinator | ตัวประสานงานกลางระหว่างหลายเอเจนต์ |
| Vertex AI Agent Engine | บริการรันเอเจนต์บน Google Cloud แบบพร้อม scale |
| Google Cloud | คลาวด์ของ Google |
| white paper | เอกสารเชิงเทคนิคทางการ |
| retry option | ตัวเลือกลองใหม่เมื่อทำงานล้มเหลว |
| genai library | ไลบรารี AI เชิงสร้างสรรค์ของ Google |
ซับไตเติ้ลภาษาไทย
ดาวน์โหลดหรือดูซับทั้งหมด
1 00:00:00,000 --> 00:00:03,306 นี่คือวันที่ห้าของคอร์ส 5 วัน จึงเป็น 2 00:00:03,306 --> 00:00:06,791 assignment สุดท้ายของเราครับ เป็นเรื่อง 3 00:00:06,791 --> 00:00:09,292 prototype to production ครับ 4 00:00:09,292 --> 00:00:14,385 โปรดฟังพอดแคสต์สรุปซึ่งช่วยให้เข้าใจว่าหน่วยนี้มีอะไรบ้าง
เปิดดูซับไตเติ้ลทั้งหมด (268 segments)
1 00:00:00,000 --> 00:00:03,306 นี่คือวันที่ห้าของคอร์ส 5 วัน จึงเป็น 2 00:00:03,306 --> 00:00:06,791 assignment สุดท้ายของเราครับ เป็นเรื่อง 3 00:00:06,791 --> 00:00:09,292 prototype to production ครับ 4 00:00:09,292 --> 00:00:14,385 โปรดฟังพอดแคสต์สรุปซึ่งช่วยให้เข้าใจว่าหน่วยนี้มีอะไรบ้าง 5 00:00:14,385 --> 00:00:18,227 และโปรดอ่าน white paper เรื่อง prototype to 6 00:00:18,227 --> 00:00:19,324 production 7 00:00:19,324 --> 00:00:23,255 ซึ่งเป็นข้อมูลประกอบของพอดแคสต์นี้ครับ white 8 00:00:23,255 --> 00:00:24,352 paper 9 00:00:24,352 --> 00:00:29,177 ฉบับนี้เป็นคู่มือทางเทคนิคเกี่ยวกับวงจรการดำเนินงานของ 10 00:00:29,177 --> 00:00:33,287 AI agents โดยเน้นเรื่อง deployment การ scaling 11 00:00:33,287 --> 00:00:37,308 และการทำ productionization ครับ ใน assignment 12 00:00:37,308 --> 00:00:41,150 นี้เราจะสำรวจความท้าทายของการยกระบบ agentic 13 00:00:41,150 --> 00:00:43,830 จากต้นแบบสู่โซลูชันระดับองค์กร 14 00:00:43,830 --> 00:00:47,941 โดยให้ความสนใจเป็นพิเพศกับ agent-to-agent หรือ 15 00:00:47,941 --> 00:00:50,442 A2A protocol ครับ ใน codelab 16 00:00:50,442 --> 00:00:57,858 วันนี้เราจะเรียนวิธีสร้างระบบของเอเจนต์อิสระหลายตัวที่สื่อสารและร่วมมือกันได้โดยใช้ 17 00:00:57,858 --> 00:01:01,432 A2A protocol และส่วนที่เขียนว่า optional 18 00:01:01,432 --> 00:01:04,917 เราจะเรียนวิธีพาเอเจนต์จากเครื่อง local 19 00:01:04,917 --> 00:01:08,759 ของเราไปสู่ service ที่พร้อมใช้งานและ scale 20 00:01:08,759 --> 00:01:12,512 ได้ใน production โดย deploy ขึ้น Vertex AI 21 00:01:12,512 --> 00:01:16,086 Agent Engine บน Google Cloud ครับ เอาล่ะ 22 00:01:16,086 --> 00:01:19,749 เริ่มกันเลย ผมจะคลิกที่ explore เพื่อเปิด 23 00:01:19,749 --> 00:01:23,055 notebook แล้วกด copy and edit ครับ ใน 24 00:01:23,055 --> 00:01:24,842 assignment นี้ส่วน A 25 00:01:24,842 --> 00:01:28,773 เราจะเข้าใจเรื่องการสื่อสาร A2A กับ ADK ครับ 26 00:01:28,773 --> 00:01:31,990 เราจะเข้าใจวิธีสร้างระบบ multi-agent 27 00:01:31,990 --> 00:01:34,939 (ระบบหลายเอเจนต์) ที่เอเจนต์ต่างๆ 28 00:01:34,939 --> 00:01:38,691 สื่อสารและร่วมมือกันได้โดยใช้ A2A protocol 29 00:01:38,691 --> 00:01:42,623 ครับ ใน notebook นี้เราจะเข้าใจ A2A protocol 30 00:01:42,623 --> 00:01:46,197 และเมื่อไหร่ควรใช้มันเทียบกับ sub-agents 31 00:01:46,197 --> 00:01:50,307 เรียนรู้ architecture pattern ที่พบบ่อยของ A2A 32 00:01:50,307 --> 00:01:53,255 เปิดเผย ADK agent ให้เป็น service 33 00:01:53,255 --> 00:01:57,365 ใช้เอเจนต์ระยะไกล และสร้างระบบ product catalog 34 00:01:57,365 --> 00:02:00,671 integration ครับ เมื่อเราสร้างระบบ AI 35 00:02:00,671 --> 00:02:02,190 ที่ซับซ้อนมากขึ้น 36 00:02:02,190 --> 00:02:05,675 เราจะพบว่าเอเจนต์เดี่ยวทำทุกอย่างไม่ได้ 37 00:02:05,675 --> 00:02:08,534 ซึ่งเราพูดกันมาตั้งแต่วันแรกแล้ว 38 00:02:08,534 --> 00:02:11,751 คุณต้องให้เอเจนต์ร่วมมือกัน ทีมต่างๆ 39 00:02:11,751 --> 00:02:15,593 สร้างเอเจนต์ต่างๆ กัน เอเจนต์อาจใช้ภาษาหรือ 40 00:02:15,593 --> 00:02:17,112 framework ต่างกัน 41 00:02:17,112 --> 00:02:21,668 ดังนั้นเราจึงต้องมีโปรโตคอลการสื่อสารแบบมาตรฐานครับ 42 00:02:21,668 --> 00:02:25,421 จะแก้ปัญหานี้อย่างไร คำตอบคือ A2A protocol 43 00:02:25,421 --> 00:02:26,518 ครับ 44 00:02:26,518 --> 00:02:31,075 คุณสามารถตามลิงก์นี้ไปทำความเข้าใจโดยละเอียดได้ครับ 45 00:02:31,075 --> 00:02:36,704 โปรโตคอลนี้เป็นมาตรฐานที่ทำให้เอเจนต์สื่อสารกันผ่านเครือข่ายได้ 46 00:02:36,704 --> 00:02:39,116 แม้เอเจนต์จะอยู่คนละเครื่อง 47 00:02:39,116 --> 00:02:41,618 ใช้ความสามารถของกันและกันได้ 48 00:02:41,618 --> 00:02:45,817 เช่นเอเจนต์หนึ่งเรียกอีกเอเจนต์หนึ่งเหมือนเรียก 49 00:02:45,817 --> 00:02:49,749 tool ทำงานข้าม framework ได้ หมายความว่าเป็น 50 00:02:49,749 --> 00:02:52,608 language หรือ framework agnostic 51 00:02:52,608 --> 00:02:56,361 และรักษาสัญญาที่เป็นทางการ โดย agent cards 52 00:02:56,361 --> 00:03:00,292 อธิบายความสามารถของแต่ละตัวครับ architecture 53 00:03:00,292 --> 00:03:01,722 ที่พบบ่อยของ A2A 54 00:03:01,722 --> 00:03:05,474 มีประโยชน์เป็นพิเศษในสามกรณีครับ คือ cross 55 00:03:05,474 --> 00:03:08,512 framework cross language และ cross 56 00:03:08,512 --> 00:03:12,444 organization ครับ cross framework คือเอเจนต์ 57 00:03:12,444 --> 00:03:16,196 ADK สื่อสารกับ agent framework อื่นๆ cross 58 00:03:16,196 --> 00:03:20,128 language คือเอเจนต์ Python เรียกเอเจนต์ Java 59 00:03:20,128 --> 00:03:23,344 หรือ Node.js ส่วน cross organization 60 00:03:23,344 --> 00:03:27,276 หมายถึงเอเจนต์ภายในของคุณติดต่อหรือเชื่อมกับ 61 00:03:27,276 --> 00:03:31,028 service ของผู้ให้บริการภายนอกครับ notebook 62 00:03:31,028 --> 00:03:35,049 นี้สาธิตการสร้าง e-commerce integration จริงๆ 63 00:03:35,049 --> 00:03:37,998 ครับ อันดับแรกคือ product catalog 64 00:03:37,998 --> 00:03:40,857 ซึ่งเปิดเผยผ่าน A2A เป็น service 65 00:03:40,857 --> 00:03:44,341 ของผู้ให้บริการภายนอกที่ให้ข้อมูลสินค้า 66 00:03:44,341 --> 00:03:47,469 จากนั้นเรามี customer support agent 67 00:03:47,469 --> 00:03:49,077 ซึ่งเป็นฝั่งผู้ใช้ 68 00:03:49,077 --> 00:03:54,527 คือเอเจนต์ภายในของเราที่ช่วยเหลือลูกค้าโดยค้นข้อมูลสินค้าครับ 69 00:03:54,527 --> 00:03:58,816 ในบทเรียนนี้เราจะจำลองทั้งสองเอเจนต์ไว้ในเครื่อง 70 00:03:58,816 --> 00:04:01,229 local เหมือนรันบน localhost 71 00:04:01,229 --> 00:04:04,713 เพื่อการเรียนรู้ครับ ใน production จริง 72 00:04:04,713 --> 00:04:06,590 product catalog agent 73 00:04:06,590 --> 00:04:10,610 จะรันบนโครงสร้างพื้นฐานของผู้ขาย และ customer 74 00:04:10,610 --> 00:04:14,720 support agent จะรันบนโครงสร้างพื้นฐานของเราเอง 75 00:04:14,720 --> 00:04:18,830 โดยสื่อสารกันผ่านอินเทอร์เน็ตด้วย A2A protocol 76 00:04:18,830 --> 00:04:21,958 ครับ ขั้นตอนของบทเรียนนี้มีอะไรบ้าง 77 00:04:21,958 --> 00:04:26,068 บทเรียนนี้มีหกขั้นตอนครับ ขั้นแรกสร้าง product 78 00:04:26,068 --> 00:04:29,284 catalog agent จากนั้นเปิดเผยผ่าน A2A 79 00:04:29,284 --> 00:04:33,305 ซึ่งก็ส่วนนี้ แล้วเริ่ม server สร้าง customer 80 00:04:33,305 --> 00:04:35,896 support agent ทดสอบการสื่อสาร 81 00:04:35,896 --> 00:04:38,755 และเข้าใจว่าข้อมูลไหลอย่างไรครับ 82 00:04:38,755 --> 00:04:42,866 เริ่มจากส่วนแรกคือ setup ตามปกติ ไปที่ add-ons 83 00:04:42,866 --> 00:04:46,976 แล้ว secret key กด add secret เลือกแล้วรันโค้ด 84 00:04:46,976 --> 00:04:48,584 อย่างที่เห็น setup 85 00:04:48,584 --> 00:04:51,532 และการยืนยันตัวตนเสร็จสมบูรณ์ครับ 86 00:04:51,532 --> 00:04:54,302 ไปกันขั้นต่อไป ซึ่งก็คือ import 87 00:04:54,302 --> 00:04:58,412 ส่วนประกอบเฉพาะที่เราต้องใช้จาก ADK และไลบรารี 88 00:04:58,412 --> 00:05:00,825 genai ครับ อันนี้สำเร็จแล้ว 89 00:05:00,825 --> 00:05:03,684 ขั้นถัดไปคือตั้งค่า retry option 90 00:05:03,684 --> 00:05:06,990 อันนี้ก็เสร็จแล้วครับ ทีนี้ใน section 91 00:05:06,990 --> 00:05:10,832 หนึ่งสิ่งที่เราจะทำคือสร้าง product catalog 92 00:05:10,832 --> 00:05:13,066 agent ที่จะถูกเปิดเผยครับ 93 00:05:13,066 --> 00:05:16,104 คำถามแรกคือทำไมต้องเปิดเผยผ่าน A2A 94 00:05:16,104 --> 00:05:21,554 ในระบบจริงสิ่งนี้จะถูกดูแลโดยผู้ให้บริการภายนอกหรือบริษัทอื่น 95 00:05:21,554 --> 00:05:25,396 เอเจนต์ภายในของเราเอง เช่น customer support 96 00:05:25,396 --> 00:05:29,417 หรือ sales หรือ inventory ต้องการข้อมูลสินค้า 97 00:05:29,417 --> 00:05:32,901 ผู้ขายควบคุม code base ของตัวเอง เราแก้ 98 00:05:32,901 --> 00:05:35,314 implementation ของเขาไม่ได้ 99 00:05:35,314 --> 00:05:37,548 ดังนั้นการเปิดเผยผ่าน A2A 100 00:05:37,548 --> 00:05:43,981 ทำให้เอเจนต์ใดก็ตามที่ได้รับอนุญาตสามารถใช้งานได้ผ่านโปรโตคอลมาตรฐานครับ 101 00:05:43,981 --> 00:05:46,929 ด้วยเหตุนี้ product catalog agent 102 00:05:46,929 --> 00:05:48,984 จึงจะถูกเปิดเผยผ่าน A2A 103 00:05:48,984 --> 00:05:51,844 เพื่อให้เอเจนต์อื่นใช้งานได้ครับ 104 00:05:51,844 --> 00:05:55,596 ตรงนี้เรากำลังนิยาม product catalog lookup 105 00:05:55,596 --> 00:05:59,170 ครับ เรามี product info กับ product name 106 00:05:59,170 --> 00:06:03,102 มีอาร์กิวเมนต์และค่าที่คืน แล้วเรากำหนด mock 107 00:06:03,102 --> 00:06:07,212 product catalog ขึ้นมาครับ จากนั้นสร้างเอเจนต์ 108 00:06:07,212 --> 00:06:10,964 มีชื่อ มี instructions กับ description และ 109 00:06:10,964 --> 00:06:13,734 tool ที่ใช้คือ get_product_info 110 00:06:13,734 --> 00:06:17,130 ตัวที่เราเพิ่งสร้างไปครับ instructions 111 00:06:17,130 --> 00:06:19,810 คือเธอเป็นผู้เชี่ยวชาญ catalog 112 00:06:19,810 --> 00:06:22,222 สินค้าจากผู้ให้บริการภายนอก 113 00:06:22,222 --> 00:06:25,796 เมื่อถูกถามเรื่องสินค้า ให้ใช้ tool ชื่อ 114 00:06:25,796 --> 00:06:29,549 get_product_info เพื่อดึงข้อมูลจาก catalog 115 00:06:29,549 --> 00:06:33,034 เป็นต้นครับ ผมจะรันอันนี้ catalog agent 116 00:06:33,034 --> 00:06:36,250 ถูกสร้างแล้ว มันให้ข้อมูลว่าใช้ tool 117 00:06:36,250 --> 00:06:39,199 อะไรและเปิดเผยอย่างไรครับ section 118 00:06:39,199 --> 00:06:43,220 ถัดไปคือการเปิดเผย product catalog agent ผ่าน 119 00:06:43,220 --> 00:06:47,240 A2A ครับ สิ่งที่ A2A ทำตรงนี้คือเรามีฟังก์ชัน 120 00:06:47,240 --> 00:06:50,904 A2A อยู่ตัวหนึ่ง ฟังก์ชันนี้เราจะใช้ทำให้ 121 00:06:50,904 --> 00:06:52,244 product catalog 122 00:06:52,244 --> 00:06:55,282 ของเราเข้าถึงได้จากเอเจนต์อื่นครับ 123 00:06:55,282 --> 00:06:59,035 ฟังก์ชันนี้ทำอะไร มันห่อเอเจนต์ของเราไว้ใน 124 00:06:59,035 --> 00:07:03,055 server ที่เข้ากันได้กับ A2A เช่น FastAPI หรือ 125 00:07:03,055 --> 00:07:06,629 Starlette หมายความว่ามันสร้าง agent card 126 00:07:06,629 --> 00:07:10,203 ขึ้นอัตโนมัติ ที่รวมชื่อเอเจนต์ คำอธิบาย 127 00:07:10,203 --> 00:07:13,599 และเวอร์ชัน พร้อม protocol version และ 128 00:07:13,599 --> 00:07:16,726 endpoints มี input และ output modes 129 00:07:16,726 --> 00:07:19,764 และมันจะเสิร์ฟ agent card ที่ path 130 00:07:19,764 --> 00:07:23,248 มาตรฐานอย่าง well-known agent card.json 131 00:07:23,248 --> 00:07:26,197 ซึ่งเป็น path มาตรฐานของ A2A ครับ 132 00:07:26,197 --> 00:07:29,950 ดังนั้นมันจัดการรายละเอียดของ A2A protocol 133 00:07:29,950 --> 00:07:33,881 ทั้งหมด เช่น request response formatting และ 134 00:07:33,881 --> 00:07:35,936 task endpoints และอื่นๆ 135 00:07:35,936 --> 00:07:39,957 นี่คือวิธีที่ง่ายที่สุดในการเปิดเผย ADK agent 136 00:07:39,957 --> 00:07:43,709 ผ่าน A2A ครับ ต่อไปขอเล่าเรื่อง agent card 137 00:07:43,709 --> 00:07:47,462 กันหน่อยครับ agent card คืออะไร agent card 138 00:07:47,462 --> 00:07:48,802 เป็นเอกสาร JSON 139 00:07:48,802 --> 00:07:52,287 ที่ทำหน้าที่เหมือนนามบัตรของเอเจนต์ครับ 140 00:07:52,287 --> 00:07:56,218 มันอธิบายว่าเอเจนต์ทำอะไร เช่น ชื่อ คำอธิบาย 141 00:07:56,218 --> 00:08:00,060 เวอร์ชัน มีความสามารถอะไร เช่น skills tools 142 00:08:00,060 --> 00:08:04,081 functions และสื่อสารกับมันได้อย่างไร ผ่าน URL 143 00:08:04,081 --> 00:08:08,102 ผ่าน protocol version หรือผ่าน endpoints ครับ 144 00:08:08,102 --> 00:08:11,676 เอเจนต์ A2A ทุกตัวต้องเผยแพร่ agent card 145 00:08:11,676 --> 00:08:14,535 ของตัวเองที่ path มาตรฐานนี้ครับ 146 00:08:14,535 --> 00:08:16,679 ถ้าอยากเรียนรู้เพิ่มเติม 147 00:08:16,679 --> 00:08:19,449 มีเอกสารสองชุดนี้ให้อ่านได้ครับ 148 00:08:19,449 --> 00:08:23,470 ผมรันอันนี้เพื่อเตรียมเริ่ม server ครับ agent 149 00:08:23,470 --> 00:08:27,312 card จะอยู่ตรงนี้พร้อมเริ่ม server แล้วครับ 150 00:08:27,312 --> 00:08:31,154 section ถัดไปคือการเริ่ม server ของ product 151 00:08:31,154 --> 00:08:34,907 catalog agent ครับ เราจะเริ่ม agent server 152 00:08:34,907 --> 00:08:39,017 นี้ใน background โดยใช้ uvicorn เพื่อให้มันตอบ 153 00:08:39,017 --> 00:08:42,859 request จากเอเจนต์อื่นได้ครับ ทำไมต้องรันใน 154 00:08:42,859 --> 00:08:44,914 background เพราะ server 155 00:08:44,914 --> 00:08:48,488 ต้องรันค้างไว้ระหว่างที่เราสร้างและทดสอบ 156 00:08:48,488 --> 00:08:50,900 customer support agent ครับ 157 00:08:50,900 --> 00:08:54,832 นี่จำลองสถานการณ์จริงที่เอเจนต์ต่างๆ รันเป็น 158 00:08:54,832 --> 00:08:57,602 service แยกจากกัน ใน production 159 00:08:57,602 --> 00:09:02,516 ผู้ขายจะเป็นฝ่ายโฮสต์มันบนโครงสร้างพื้นฐานของเขาเองครับ 160 00:09:02,516 --> 00:09:06,358 เราจะบันทึก product catalog agent ลงไฟล์ที่ 161 00:09:06,358 --> 00:09:08,592 uvicorn สามารถ import ได้ 162 00:09:08,592 --> 00:09:12,434 ตรงนี้เราจะใส่ข้อมูลทั้งหมด get_info config 163 00:09:12,434 --> 00:09:16,097 ส่วนประกอบที่ import จาก ADK และข้อมูลของ 164 00:09:16,097 --> 00:09:20,028 catalog agent ทั้งหมด แล้วเราจะเขียน product 165 00:09:20,028 --> 00:09:23,602 agent ลงไฟล์ชั่วคราวแบบนี้ครับ แล้วเริ่ม 166 00:09:23,602 --> 00:09:27,534 uvicorn server ใน background ครับ ตัว server 167 00:09:27,534 --> 00:09:31,197 process เปิด subprocess ขึ้นมา ส่วน input 168 00:09:31,197 --> 00:09:35,129 output subprocess พวกนี้คือ print statements 169 00:09:35,129 --> 00:09:37,898 ครับ เรารอให้ server เริ่มทำงาน 170 00:09:37,898 --> 00:09:41,830 จำนวนความพยายามสูงสุดที่ให้คือ 30 ครั้ง แล้ว 171 00:09:41,830 --> 00:09:45,582 request ตอบกลับมาที่ well-known agent card 172 00:09:45,582 --> 00:09:49,514 ครับ ผมรันอันนี้ อย่างที่เห็นโค้ดของ catalog 173 00:09:49,514 --> 00:09:53,445 agent ถูกบันทึกไปที่นี่แล้วครับ ทีนี้เราจะดู 174 00:09:53,445 --> 00:09:56,572 card ที่สร้างอัตโนมัติ ฟังก์ชัน A2A 175 00:09:56,572 --> 00:10:00,236 ตัวนี้สร้าง agent card ขึ้นมาโดยอัตโนมัติ 176 00:10:00,236 --> 00:10:04,257 ซึ่งอธิบายความสามารถของ product catalog agent 177 00:10:04,257 --> 00:10:05,353 ครับ 178 00:10:05,353 --> 00:10:09,106 มันให้ข้อมูลครบทุกอย่างเกี่ยวกับความสามารถ 179 00:10:09,106 --> 00:10:11,876 พร้อมคำอธิบายของแต่ละสินค้าครับ 180 00:10:11,876 --> 00:10:14,735 ต่อไปเราจะสร้าง remote A2A agent 181 00:10:14,735 --> 00:10:18,577 ที่เชื่อมต่อกับ product catalog ครับ remote 182 00:10:18,577 --> 00:10:22,240 product catalog agent ถูกสร้างแล้ว มันคือ 183 00:10:22,240 --> 00:10:25,189 proxy ครับ customer support agent 184 00:10:25,189 --> 00:10:27,780 สามารถใช้ตัวนี้เป็น sub-agent 185 00:10:27,780 --> 00:10:31,711 ในเครื่องได้เลยครับ ทีนี้เราจะสร้าง customer 186 00:10:31,711 --> 00:10:32,873 support agent 187 00:10:32,873 --> 00:10:36,626 ซึ่งเป็นเอเจนต์แบบปกติที่เราสร้างกันทั่วไป 188 00:10:36,626 --> 00:10:40,468 โดยใช้ sub-agent หนึ่งตัวคือ remote product 189 00:10:40,468 --> 00:10:44,131 ตัวที่เราสร้างไว้ด้านบนครับ ต่อไป section 190 00:10:44,131 --> 00:10:47,080 ห้าคือการทดสอบการสื่อสาร A2A ครับ 191 00:10:47,080 --> 00:10:50,475 สิ่งที่เกิดขึ้นเบื้องหลังคือ ลูกค้าถาม 192 00:10:50,475 --> 00:10:54,585 customer support agent เรื่องสินค้าหนึ่งๆ แล้ว 193 00:10:54,585 --> 00:10:58,338 support agent รู้ตัวว่าต้องการข้อมูลสินค้า 194 00:10:58,338 --> 00:11:02,448 จึงไปที่ remote product catalog agent ซึ่งเป็น 195 00:11:02,448 --> 00:11:06,200 remote A2A agent ที่เราสร้างไว้ โดยส่ง A2A 196 00:11:06,200 --> 00:11:09,953 protocol request ไปที่ localhost ครับ แล้ว 197 00:11:09,953 --> 00:11:13,348 product catalog agent ประมวลผล request 198 00:11:13,348 --> 00:11:16,654 และตอบกลับ support agent รับ response 199 00:11:16,654 --> 00:11:18,441 นั้นแล้วดำเนินการต่อ 200 00:11:18,441 --> 00:11:22,105 ลูกค้าก็ได้คำตอบสุดท้ายครับ ตรงนี้ถ้าเห็น 201 00:11:22,105 --> 00:11:25,768 ลูกค้าถามว่าเล่าเรื่อง 15 Pro ให้ฟังหน่อย 202 00:11:25,768 --> 00:11:29,074 ยังมีสต็อกไหม เอเจนต์ตอบว่า iPhone 15 203 00:11:29,074 --> 00:11:32,648 มีสต็อกอยู่ เหลือเพียง 8 เครื่องเท่านั้น 204 00:11:32,648 --> 00:11:35,775 ราคาอยู่ที่ระดับนี้ มีความจุ 128 GB 205 00:11:35,775 --> 00:11:38,366 และเป็นเครื่องสีไทเทเนียมครับ 206 00:11:38,366 --> 00:11:41,494 คุณลองตัวอย่างเพิ่มเติมได้ครับ เช่น 207 00:11:41,494 --> 00:11:45,604 ผมกำลังหาแล็ปท็อป เปรียบเทียบ Dell กับ MacBook 208 00:11:45,604 --> 00:11:49,624 Pro ให้หน่อยได้ไหม หรืออีกอันคือ มีหูฟัง Sony 209 00:11:49,624 --> 00:11:52,752 ไหม ราคาเท่าไหร่ คุณทำแบบนี้ได้ครับ 210 00:11:52,752 --> 00:11:55,611 ตอนนี้มันให้การเปรียบเทียบมาแล้ว 211 00:11:55,611 --> 00:11:59,274 และพอถามว่ามีอันนี้ไหม มันตอบว่าขอโทษครับ 212 00:11:59,274 --> 00:12:03,563 ดูเหมือนไม่มีข้อมูลเรื่องหูฟังรุ่นนี้ในสต็อกครับ 213 00:12:03,563 --> 00:12:06,958 คุณลองตัวอย่างอื่นๆ เพิ่มเติมเองได้อีก 214 00:12:06,958 --> 00:12:10,979 โค้ดชุดนี้คัดลอกไปใช้ได้เลย เพียงเปลี่ยนคำถาม 215 00:12:10,979 --> 00:12:14,910 ผมว่าผมพลาดอันนี้ไป มันบอกว่าไม่มีใน product 216 00:12:14,910 --> 00:12:18,663 catalog ของเรา สินค้าที่มีคืออันนี้ อันนี้ 217 00:12:18,663 --> 00:12:20,450 อันนี้ และอันนี้ครับ 218 00:12:20,450 --> 00:12:24,649 คุณลองเล่นดูเองได้ถ้าอยากดูว่ามันตอบอย่างไรครับ 219 00:12:24,649 --> 00:12:26,615 อันถัดไปคือ section หก 220 00:12:26,615 --> 00:12:30,368 เรื่องทำความเข้าใจว่าเพิ่งเกิดอะไรขึ้นครับ 221 00:12:30,368 --> 00:12:34,478 ตรงนี้สิ่งที่เกิดขึ้นคือลูกค้าถามเรื่อง iPhone 222 00:12:34,478 --> 00:12:37,516 15 Pro แล้ว customer support agent 223 00:12:37,516 --> 00:12:41,179 รับคำถามและตัดสินใจว่าต้องการข้อมูลสินค้า 224 00:12:41,179 --> 00:12:45,289 support agent จึงมอบหมายงานให้ product catalog 225 00:12:45,289 --> 00:12:49,221 agent ซึ่งเป็น sub-agent ครับ จากนั้น remote 226 00:12:49,221 --> 00:12:52,259 A2A agent ในฐานะ proxy ฝั่ง client 227 00:12:52,259 --> 00:12:55,922 แปลงสิ่งนี้เป็น A2A protocol request ครับ 228 00:12:55,922 --> 00:12:59,764 สิ่งที่เกิดขึ้นตรงนี้คือ request ถูกส่งผ่าน 229 00:12:59,764 --> 00:13:01,998 HTTP ในรูปแบบ A2A request 230 00:13:01,998 --> 00:13:06,018 ตรงที่ไฮไลต์สีเหลืองอยู่นี่ครับ ทีนี้ product 231 00:13:06,018 --> 00:13:09,324 catalog agent ฝั่ง server รับ request 232 00:13:09,324 --> 00:13:13,434 นี้แล้วเรียก get_product_info เรื่อง iPhone 15 233 00:13:13,434 --> 00:13:14,531 Pro ครับ 234 00:13:14,531 --> 00:13:18,999 จากนั้นเอเจนต์นี้คืนข้อมูลสินค้าจากตรงนี้กลับไปที่ 235 00:13:18,999 --> 00:13:22,930 remote agent ผ่าน response ของ A2A ครับ แล้ว 236 00:13:22,930 --> 00:13:26,772 remote agent รับ response แล้วส่งต่อกลับให้ 237 00:13:26,772 --> 00:13:29,631 support agent ครับ support agent 238 00:13:29,631 --> 00:13:33,116 ประกอบคำตอบสุดท้ายพร้อมรายละเอียดสินค้า 239 00:13:33,116 --> 00:13:35,796 แล้วคืน response นั้นให้ลูกค้า 240 00:13:35,796 --> 00:13:40,621 ดังนั้นลูกค้าจึงได้รับคำตอบที่สมบูรณ์และมีประโยชน์ครับ 241 00:13:40,621 --> 00:13:44,553 มีการใช้งานจริงมากมายครับ เช่น microservices 242 00:13:44,553 --> 00:13:47,859 การเชื่อมต่อบริษัทอื่น cross language 243 00:13:47,859 --> 00:13:51,879 specialized teams และ cross organization ครับ 244 00:13:51,879 --> 00:13:54,560 ทั้งหมดนี้คือการใช้งานจริงครับ 245 00:13:54,560 --> 00:13:58,670 ส่วนไอเดียต่อยอดคือ ตอนนี้คุณเข้าใจพื้นฐานแล้ว 246 00:13:58,670 --> 00:14:02,780 ลองขยายตัวอย่างพวกนี้ดู เช่น เพิ่มเอเจนต์อื่นๆ 247 00:14:02,780 --> 00:14:06,622 เข้ามาอีก เช่น inventory agent และ shipping 248 00:14:06,622 --> 00:14:09,660 agent แล้วให้มีเอเจนต์ coordinator 249 00:14:09,660 --> 00:14:13,413 คุมทั้งสามตัวนี้ จากนั้นใช้แหล่งข้อมูลจริง 250 00:14:13,413 --> 00:14:17,165 แทนที่ mock product ด้วยฐานข้อมูลจริง เช่น 251 00:14:17,165 --> 00:14:21,186 MongoDB เพิ่มระบบติดตามสต็อกจริง เชื่อมต่อกับ 252 00:14:21,186 --> 00:14:24,581 payment gateway API จริงๆ ครับ เพื่อนๆ 253 00:14:24,581 --> 00:14:27,441 ทำทั้งหมดนี้ด้วยตัวเองได้เลยครับ 254 00:14:27,441 --> 00:14:31,461 จากนั้นคุณสามารถ deploy product catalog agent 255 00:14:31,461 --> 00:14:35,303 ขึ้น Agent Engine ได้ โดยอัปเดต URL ใน card 256 00:14:35,303 --> 00:14:38,877 จาก well-known ให้เป็น production server 257 00:14:38,877 --> 00:14:40,218 ที่ถูกต้องจริงๆ 258 00:14:40,218 --> 00:14:47,544 ครับ อยากรู้ว่าทำอย่างไร ใช้คู่มือ A2A เอกสารโปรโตคอล และตัวเลือก deployment อื่นๆ 259 00:14:47,544 --> 00:14:51,029 ได้เลย คุณทำได้ด้วยตัวเองครับ โดยสรุปใน 260 00:14:51,029 --> 00:14:54,514 notebook นี้เราได้เรียนรู้วิธีสร้างระบบ 261 00:14:54,514 --> 00:14:57,105 multi-agent ด้วย A2A protocol 262 00:14:57,105 --> 00:15:04,521 ซึ่งเป็นโปรโตคอลมาตรฐานสำหรับการสื่อสารระหว่างเอเจนต์กับเอเจนต์ข้ามเครือข่ายและข้าม 263 00:15:04,521 --> 00:15:07,469 framework รวมถึงการเปิดเผยเอเจนต์ 264 00:15:07,469 --> 00:15:10,775 การใช้เอเจนต์ และ use case ต่างๆ ครับ 265 00:15:10,775 --> 00:15:13,902 ยินดีด้วยครับ เราทำส่วนแรกของ Day 5 266 00:15:13,902 --> 00:15:17,298 ซึ่งเป็นวันสุดท้ายของคอร์สนี้เสร็จแล้ว 267 00:15:17,298 --> 00:15:20,425 ส่วนจะไปส่วนสุดท้ายซึ่งก็คือ Day 5B 268 00:15:20,425 --> 00:15:22,480 โปรดไปดูวิดีโอถัดไปครับ