Day 1A: Intro to AI Agents — Complete Beginner Breakdown (Google x Kaggle Intensive)
สรุปย่อ
ประเด็นสำคัญจากวิดีโอ
- **ช่อง:** Adspolitan Knowledge Studio · **ความยาว:** ~23 นาที · **ลิงก์:** https://www.youtube.com/watch?v=F6PYMo6VAFs
# สรุป: Day 1A: Intro to AI Agents — Complete Beginner Breakdown (Google x Kaggle Intensive) - **ช่อง:** Adspolitan Knowledge Studio · **ความยาว:** ~23 นาที · **ลิงก์:** https://www.youtube.com/watch?v=F6PYMo6VAFs ## ประเด็นหลัก - งาน Day 1 มี 2 ขั้นเตรียม: ฟังพอดแคสต์สรุปเนื้อหา และอ่าน white paper เรื่อง Introduction to Agents แต่ถ้ายังไม่ได้ทำก็ไม่กระทบการทำ codelab - ต้องยืนยันเบอร์โทรศัพท์ในบัญชี Kaggle ก่อน ไม่อย่างนั้นจะรันโค้ดใน codelab ไม่ได้เลย - codelab มี 2 แบบฝึกหัด: สร้าง agent ตัวแรก และสร้างระบบ multi-agent — วิดีโอนี้โฟกัสข้อแรก ส่วน multi-agent แยกไปวิดีโอถัดไป - ADK (Agent Development Kit) ขับเคลื่อนด้วย Gemini และให้ agent ใช้ Google Search ตอบคำถามด้วยข้อมูลล่าสุดได้ - codelab ที่สองยังสอนการสร้างทีม agent เฉพาะทาง และ architectural patterns แบบ sequential, parallel และ loop - ต้องกด "Copy & Edit" เพื่อสร้างสำเนา Kaggle Notebook ที่แก้ไขได้ก่อนเริ่มทำงาน - API key สร้างใน Google AI Studio แนะนำให้สร้าง project ใหม่เองเพื่อความคุ้นเคย และห้ามแชร์ key ให้ใครเด็ดขาด - secret ใน Notebook เป็นแบบ case-sensitive และต้องติ๊ก attach ให้ถูกต้อง ไม่งั้นขั้นตอน authenticate จะ error - retry option จัดการ transient error อย่าง rate limit ด้วย exponential backoff (5 ครั้ง, ตัวคูณ 7, delay เริ่มต้น 1 วินาที) - ความต่างหลัก: model ตอบกลับด้วยข้อความ แต่ agent คิด-ลงมือ-สังเกตผล (think, act, observe) เหมือน Siri - agent ประกอบด้วย name, description, model (Gemini 2.5 Flash), instruction และ tools (Google Search) - runner ทำหน้าที่เป็น orchestrator จัดการ session และการตอบกลับของ agent - ขั้นสุดท้าย generate sample agent แล้วรันผ่าน web interface ที่เปิดเป็นหน้าแชทคุยกับ agent ได้ ## ความเห็นสรุป วิดีโอนี้เหมาะกับผู้เริ่มต้นมากครับ เพราะอธิบายตั้งแต่พื้นฐานว่า agent ต่างจาก model อย่างไร แล้วพาทำทีละขั้นจนได้ agent ตัวแรกที่ค้นข้อมูลจริงผ่าน Google Search ครับ แม้คำบรรยายต้นฉบับจะถอดเสียงเพี้ยนหลายจุด แต่เนื้อหาหลักยังติดตามได้ครบและทำตามได้จริงครับ
คำแปลเต็ม
แปลตามบทสนทนาต้นฉบับ ปรับเป็นภาษาไทยธรรมชาติ
สวัสดีทุกคน ยินดีต้อนรับกลับสู่ช่องอีกครั้งครับ ในวิดีโอนี้เราจะไปทำแบบฝึกหัดของ Day 1 ของคอร์สนี้กันครับ งานของ Day 1 ประกอบด้วยขั้นตอนที่ต้องทำให้ครบดังนี้ครับ
ขั้นแรกคือฟังพอดแคสต์ตอนสรุปเนื้อหา ซึ่งสร้างโดย [ฟังไม่ชัด] และขั้นที่สองคืออ่าน white paper (เอกสารวิชาการ) เรื่อง Introduction to Agents ซึ่งเป็นภาคเสริมให้เข้าใจพอดแคสต์แบบลึกขึ้นครับ สองสื่อนี้ให้ข้อมูลและประโยชน์มาก ผมจึงแนะนำให้ไปฟังและอ่านด้วยตัวเองครับ แต่ถ้าใครยังไม่ได้ทำก็ไม่เป็นไรเลยครับ จะไม่กระทบการทำ codelab (ห้องทดลองเขียนโค้ด) ของคุณแน่นอน เพราะเราจะไล่ทำ codelab ไปด้วยกันทีละขั้น และผมจะอธิบายโค้ดทุก snippet ให้ฟังแบบละเอียด คุณจึงไม่ต้องกังวลว่าจะขาดความเข้าใจเพราะไม่ได้ไปผ่านเนื้อหาเหล่านั้นครับ แต่ถึงอย่างนั้นเมื่อจบซีรีส์แล้ว ผมก็ยังแนะนำให้กลับไปอ่านบทความและฟังพอดแคสต์ของคอร์สอีกครั้งนะครับ ในที่นี้ผมจะกดติ๊กข้อ 1 กับ 2 ไปก่อน เพราะทำเสร็จจากทางผมแล้วครับ
อีกเรื่องที่อยากย้ำคือ ขอให้ทุกคนยืนยันเบอร์โทรศัพท์ในบัญชี Kaggle ให้เรียบร้อยด้วยนะครับ ไม่อย่างนั้นคุณจะรันโค้ด snippet ใด ๆ ไม่ได้เลย ระบบจะโยน error ออกมาครับ การยืนยันเบอร์จึงจำเป็นสำหรับ codelab มาก ๆ ครับ ทางผมทำขั้นตอนนี้สำเร็จเรียบร้อยแล้วครับ
ใน codelab นี้เรามีแบบฝึกหัด 2 อย่างครับ อย่างแรกคือเราจะสร้าง agent ตัวแรกของเรา แล้วอย่างที่สองคือสร้างระบบ multi-agent (ระบบหลายเอเจนต์) ตัวแรก ทั้งสองอย่างใช้ ADK ซึ่งก็คือ Agent Development Kit (ชุดเครื่องมือพัฒนาเอเจนต์) ที่ขับเคลื่อนด้วย Gemini และทำให้ agent มีความสามารถใช้ Google Search ตอบคำถามด้วยข้อมูลที่อัปเดตล่าสุดได้ครับ
ใน codelab ที่สอง จุดที่น่าสนใจคือ มันไม่ได้ช่วยแค่ให้เราสร้างระบบ multi-agent เท่านั้น แต่ยังสอนวิธีสร้างทีมของ agent เฉพาะทาง (specialized agents) และโชว์ pattern ทางสถาปัตยกรรม (architectural patterns) ที่มีให้เลือกใช้ เช่น sequential, parallel, loop [ฟังไม่ชัด] ครับ เพื่อให้เนื้อหาในวิดีโอง่ายและกระชับ ในวิดีโอนี้เราจะโฟกัสที่การสร้าง agent ตัวแรกก่อน แล้วจะมีวิดีโอต่อยอดอีกหนึ่งตอน สำหรับการสร้างระบบ multi-agent พร้อมสำรวจ pattern ทางสถาปัตยกรรมต่าง ๆ ที่เกี่ยวข้องกันครับ
งั้นไม่รอช้า เราไปเริ่มสร้าง agent ตัวแรกกันเลย โดยคลิกที่ลิงก์แรกคือคำว่า build ครับ ลิงก์นี้จะพาเราไปที่ Kaggle Notebook (สมุดบันทึกโค้ดบน Kaggle) ซึ่งระบุว่าเป็นวันแรก หัวข้อ From Prompt to Action ครับ นี่คือ Notebook ที่เราจะใช้ทำงานตลอดทั้งคอร์สนี้ครับ ตอนนี้มันยังแก้ไขไม่ได้ เราต้องสร้างสำเนาของตัวเองที่แก้ได้ โดยคลิกที่ปุ่ม Edit my copy ที่มุมขวาบนด้านขวามือครับ ระบบจะเปิดสำเนาที่แก้ไขได้ให้เราครับ บางครั้งขั้นตอนนี้ใช้เวลาสักหน่อย เพราะมีผู้เข้าร่วมจำนวนมากกำลังใช้ Notebook เดียวกันอยู่พร้อมกัน คุณอาจเจอปัญหานี้ได้ ให้รอสักครู่แล้วลองใหม่อีกครั้ง ก็น่าจะแก้ปัญหาได้ครับ
ใน Notebook นี้ มีหลายขั้นตอนที่เราจะไล่ทำไปด้วยกันครับ ขั้นแรกคือติดตั้ง ADK จากนั้น configure API key (กุญแจเรียกใช้ API) เพื่อใช้เครื่องมือของ Gemini เราจะสร้าง API key กันใน Google AI Studio หวังว่าทุกคนสมัครบัญชีไว้แล้วนะครับ ถัดไปเราจะสร้าง agent อย่างง่ายหนึ่งตัว แล้วรัน agent นั้น ดูมันเรียกใช้ tool สำหรับ Google Search เพื่อตอบคำถามหนึ่งข้อ หรือมากกว่านั้นก็ได้ จะถามสัก 4-5 คำถามก็ย่อมได้ครับ และยังมีอีกขั้นหนึ่ง คือเราจะรัน agent ใน Notebook นี้ แล้วเราจะรัน agent ใน web interface (หน้าเว็บแบบมีช่องแชท) ด้วย นับเป็นอีกขั้นตอนหนึ่งที่ใช้เวลาไม่กี่นาทีครับ
งั้นเริ่มกันเลยครับ ในส่วนติดตั้ง เราไม่ต้องติดตั้ง Agent Development Kit เองครับ เพราะถ้าเราใช้สภาพแวดล้อมของ Notebook ตัว Notebook จะมี library นี้ติดตั้งไว้ให้แล้วแบบสำเร็จรูป เราจึงไม่ต้องติดตั้ง package ใด ๆ เลยครับ แต่ถ้าคุณใช้ environment ส่วนตัวของคุณเองในการเขียน คุณอาจต้องรันคำสั่งติดตั้งนี้ครับ
ขั้นถัดไปคือสร้าง API key ครับ เราต้องสร้างมันใน Google AI Studio ที่หน้า API ครับ ถ้าคุณทำครั้งแรก คุณจะเห็น project เริ่มต้น (default project) หนึ่งตัว และคุณใช้ตัวนี้ทำแบบฝึกหัดได้ถ้าต้องการครับ อย่างไรก็ตาม ผมแนะนำให้ลองสร้าง project ใหม่ขึ้นมาเองสักตัว เพื่อได้ประสบการณ์และความเข้าใจครับ และขอย้ำว่าอย่าแชร์ API key กับใครเด็ดขาด เพราะมันคือกุญแจลับของคุณครับ คุณจะเห็นปุ่มที่หน้านี้ กดที่ปุ่มนั้นแล้วจะมี dialog box เด้งขึ้นมาให้เลือก project ครับ ทางผมมี project อยู่แล้วหลายตัว แต่ถ้าคุณทำครั้งแรกเพื่อคอร์สนี้ ผมจะสร้าง project ใหม่ให้ดูเป็นตัวอย่างครับ เมื่อสร้างเสร็จแล้ว คุณจะเห็นว่ามันถูกแสดงขึ้นมาในรายการ พร้อมระบุชนิดของ project ที่เชื่อมโยงกันครับ ตอนนี้เราได้สร้างสำเร็จแล้ว ให้กลับไปที่ Notebook ครับ
ขั้นต่อมา ผมต้องเพิ่ม secret (ข้อมูลลับ) เข้าไปครับ คลิกที่ส่วน Secrets แล้วเลือก project ที่เราสร้างไว้ครับ ระวังด้วยนะครับ ชื่อของ secret นั้นมีผลตามตัวพิมพ์ใหญ่-เล็ก (case-sensitive) จากนั้นกดบันทึกได้เลยครับ อีกเรื่องที่ต้องสังเกตคือ ถ้าคุณไม่ได้ติ๊กกล่อง check นี้ไว้ แล้วรันโค้ดส่วนการยืนยันตัวตน ผลลัพธ์ที่พิมพ์ออกมาจะไม่ถูกต้องครับ ลองดูกันครับ ผมจะเอาเครื่องหมายติ๊กออกแล้วรันด้วย Shift+Enter ตอนนี้ผมคาดหวังว่าจะเกิด error ขึ้น เพราะการยืนยันตัวตนจะไม่สำเร็จตามที่คาดไว้ครับ วิธีแก้ error นี้คือกลับมาเลือกติ๊กกล่องนั้นใหม่ แล้วรันอีกครั้ง การตั้งค่าก็จะเรียบร้อยครับ
ขั้นถัดไปคือ import ส่วนประกอบต่าง ๆ ครับ ส่วนประกอบเหล่านี้มาจาก ADK และ library ของ generative AI ครับ คุณจะเห็นว่ามี Agent ซึ่งเป็นคลาสของ agent ที่เรา import จาก google และเรา import search tool ซึ่งเป็นเครื่องมือค้นหาเข้ามาด้วยครับ การรันส่วนนี้ปกติจะใช้เวลาสักครู่ เพราะระบบกำลัง import ทุกอย่างเข้ามาครับ
ขั้นต่อมาคือการ define function ครับ ถ้าคุณรัน snippet นี้นอกสภาพแวดล้อมของ Kaggle คุณไม่จำเป็นต้องทำขั้นนี้เลยครับ ขั้นนี้มีไว้เฉพาะสำหรับ Kaggle Notebook ครับ กดตกลงไป แล้ว output ควรจะขึ้นว่า helper functions defined ครับ คุณจะเห็นข้อความยืนยันว่าฟังก์ชันถูก define แล้วครับ
ขั้นถัดไปคือ configure retry option (ตัวเลือกการลองใหม่) ครับ retry option คืออะไรกัน? นี่คือสิ่งที่เราทำเสมอเมื่อทำงานกับ LLM (โมเดลภาษาขนาดใหญ่) ครับ เพราะส่วนใหญ่เรามักจะเจอปัญหาชั่วคราว (transient issue) เช่น rate limit (ข้อจำกัดจำนวน request) หรือ service ใช้งานไม่ได้ชั่วคราว เหมือนที่บางเว็บไซต์อาจล่มไปช่วงหนึ่งแล้วกลับมาใช้ได้อีกครั้ง อย่างกับ LLM ก็เช่นกันครับ retry option จะลองส่ง request ใหม่ให้อัตโนมัติและจัดการกับความล้มเหลวเองครับ เราจะมี snippet ซึ่งสั่งให้ LLM ลองส่ง request ใหม่ด้วยรูปแบบ exponential backoff (การหน่วงเวลาทบต้นแบบเอกซ์โพเนนเชียล) ครับ
ตรงจุดนี้ผมไม่เห็นมีข้อความ print ออกมา ผมจะเพิ่มคำสั่ง print เข้าไปเพื่อความชัดเจนครับ เมื่อรันเสร็จ ก็จะมีข้อความยืนยันขึ้นมาครับ มาดูความหมายของค่าที่ตั้งไว้กันครับ ตัวเลขที่เห็นคือจำนวนครั้งของการ retry ซึ่งเรากำหนดไว้ที่ 5 ครั้งครับ ส่วนตัวคูณของ exponential backoff กำหนดไว้ที่ 7 เท่าของ delay ครับ initial delay (ดีเลย์เริ่มต้น) คือ 1 วินาที หมายความว่าก่อนเริ่มลองครั้งแรก ระบบจะรอ 1 วินาทีก่อน ให้เวลาเว็บไซต์หรือ service กลับมาใช้งานได้ภายใน 1 วินาที ไม่เช่นนั้นจะเริ่ม retry ต่อไป โดยมีจำนวนสูงสุด 5 ครั้ง ที่ระยะห่างเพิ่มขึ้นแบบเอกซ์โพเนนเชียลที่ตัวคูณ 7 ครับ แล้วสถานการณ์แบบไหนที่ควร retry กัน? นี่คือ HTTP code ที่เราระบุไว้ครับ ถ้าคุณมี code เพิ่มเติมที่ต้องการ ก็เพิ่มเข้าไปได้เลย นี่คือเงื่อนไขที่บอกว่าในสถานการณ์ใด LLM ควรจะลองส่ง request ใหม่ครับ
ต่อมาถึงส่วนสำคัญคือการสร้าง agent ตัวแรกของเราครับ ก่อนจะสร้าง agent เรามาทำความเข้าใจสั้น ๆ กันก่อนว่า agent กับ model ต่างกันอย่างไรครับ สำหรับ model อย่าง Gemini สิ่งที่เกิดขึ้นก็คือ ผู้ใช้ส่ง prompt เข้ามา แล้ว Gemini ส่งข้อความ (text response) กลับไป เป็นการทำงานตรงไปตรงมาครับ แต่สำหรับ agent แล้ว AI มีความสามารถในการคิด ลงมือทำ และสังเกตผล (think, act, observe) ครับ เมื่อผู้ใช้ส่ง prompt เข้ามา agent จะคิดวิเคราะห์ prompt นั้น เข้าใจว่าควรเรียกใช้ tool ตัวไหนหรือไปที่ไหนเพื่อหาคำตอบที่ใช่ นั่นคือการลงมือทำ (action) ของมัน และเมื่อ tool ตอบกลับมาพร้อมข้อมูล agent จะสังเกตข้อมูลนั้น คัดกรองและจัดระเบียบ แล้วนำเสนอเป็นคำตอบสุดท้ายให้ผู้ใช้ครับ นี่คือความต่างระหว่าง model กับ agent ครับ model คือสิ่งที่ตอบกลับมาด้วยข้อความ ส่วน agent คือสิ่งที่ตอบกลับมาด้วยการให้บริการเหมือน Siri ที่คุณขอให้ Siri ตั้งงานให้ได้ครับ นั่นคือความต่างพื้นฐานครับ
ตอนนี้มา define agent ของเรากันครับ agent ทุกตัวจะมี property หลักดังนี้ คือ description, model, instruction และ tools ครับ root agent (agent หลัก) ทุกตัวควรมี name หรือชื่อ, description หรือคำอธิบาย, model ที่ใช้ข้างใน พร้อมกับ retry config เพื่อให้ agent ลองใหม่ได้เมื่อเกิดความล้มเหลวครับ ส่วน name นั้นมีประโยชน์กับระบบครับ model ที่เราใช้คือ Gemini โดยเวอร์ชันคือ Gemini 2.5 Flash ครับ เรายังใส่ retry option เข้าไปด้วย เพื่อที่ว่าถ้ามีความล่าช้าหรือเจอปัญหา rate limit agent ก็จะลองใหม่ให้เองครับ เรา define ชื่อเรียบร้อยแล้ว
ต่อมาที่ description ครับ description มีไว้เพื่อให้พวกเราเข้าใจว่า agent ตัวนี้เป็น agent เกี่ยวกับอะไร ในที่นี้คือ agent อย่างง่ายที่ตอบคำถามทั่วไปได้ครับ ส่วน instruction เป็นสิ่งที่ให้ agent เข้าใจว่าตัวเองควรทำอะไร ข้อความในส่วนนี้ระบุว่าคุณเป็นผู้ช่วยที่เป็นประโยชน์ ให้ใช้ Google Search หาข้อมูลปัจจุบัน ดังนั้นเราจึงกำหนด tool เป็น search ครับ ด้วย instruction นี้ คำถามใด ๆ ที่ถูกถามเข้ามา agent จะไปที่ search tool ค้นหาข้อมูลนั้น แล้วตอบกลับพร้อมข้อมูลที่หาได้ครับ เมื่อ define agent เสร็จ ลองรัน cell นี้ ระบบจะแจ้งว่า agent ถูก define แล้วครับ
ต่อไปเราจะรัน agent ตัวนี้ครับ ในการรัน agent เราต้องมีสิ่งที่เรียกว่า runner ครับ ซึ่งเป็น orchestrator (ตัวประสานงานหลัก) หรือ central component ภายใน ADK ครับ มันจัดการบทสนทนา ข้อความต่าง ๆ ทั้งหมด และดูแลการตอบกลับของ agent ครับ เราจะสร้าง runner แบบ in-memory ขึ้นมา แล้วบอกให้มันใช้ agent ของเราครับ เมื่อรันเสร็จ runner ก็ถูกสร้างขึ้นมาเรียบร้อยครับ
ตอนนี้เราจะเรียกใช้ agent ของเราครับ เราส่ง prompt เข้าไปโดยใช้ snippet นี้ครับ คุณเห็น response ซึ่งเท่ากับผลจากการ run และในเครื่องหมายคำพูดคู่ เราใส่คำถามได้หลายคำถาม จะถามอะไรก็ได้ตามต้องการครับ โดย default แล้วคำถามคือ ADK ของ Google คืออะไร และ SDK นั้นเป็นภาษาอะไรครับ คลิกรันแล้วดูว่ามันตอบอย่างไรครับ
ระบบแจ้งว่าเป็น session ใหม่ แสดง debug session ID คำถามของผู้ใช้คือข้อความนี้ และผู้ช่วยที่เป็นประโยชน์ก็ตอบกลับมาแบบนี้ครับ มันตอบว่า ADK เป็นเครื่องมือ open source ที่ออกแบบมาเพื่อทำให้การสร้าง deployment และ orchestration ของเอเจนต์ AI และระบบต่าง ๆ ง่ายขึ้น พร้อมข้อมูลในลักษณะนี้ครับ แล้วสำหรับคำถามที่สอง มันก็ตอบเกี่ยวกับ ADK ได้อย่างดีครับ
ทีนี้มันแนะนำด้วยว่าทำไมคุณไม่ลองถามคำถามของตัวเองดูล่ะครับ เช่น ถามว่าอากาศเป็นอย่างไร โดยเปลี่ยนคำถามเป็น what's the weather ครับ ระบบแจ้งว่า continue session คือเป็นการต่อใน session เดิมที่เพิ่งเริ่มไปครับ คำถามคืออากาศเป็นอย่างไร และคำตอบคือสภาพอากาศปัจจุบันเป็นแบบนี้ครับ นับเป็นคำตอบที่ดีมากครับ มันบอกว่าที่เหลือของวันพฤหัสบดีคาดว่าจะมีเมฆมาก วันศุกร์คาดว่าจะมีฝนลงเล็กน้อย และพยากรณ์ว่าวันเสาร์จะมีฝนครับ เราจึงเห็นภาพการทำงานของมันได้ดีมากครับ ผมมีคำถามจากทางผมเองอีกสองสามข้อ ลองรันดูครับ
เชิญชวนให้คุณลองเล่นกับ agent ของคุณเองโดยตั้งคำถามที่แตกต่างกันไป แล้วดูว่าคุณจะเรียนรู้อะไรได้บ้าง หรือคุณจะตรวจสอบว่าคำตอบถูกต้องหรือไม่ก็ย่อมได้ครับ
ต่อมาถึงขั้นตอนสุดท้ายของแบบฝึกหัดนี้ คือการสร้าง web interface ครับ หน้าตาจะประมาณนี้ครับ ขั้นแรกเราต้อง generate sample agent (agent ตัวอย่าง) ของเราก่อน โดยรันโค้ดนี้ครับ มันจะสร้างโฟลเดอร์ sample agent ซึ่งบรรจุไฟล์ทั้งหมด รวมถึงไฟล์ agent.py กับ environment และอื่น ๆ ครับ ตอนนี้กำลังรันอยู่ และนี่คือช่วงที่คุณจะเห็น agent ถูกสร้างและแสดงขึ้นมาครับ
ต่อมารันคำสั่งถัดไปครับ จะเห็นสถานะว่ากำลังรัน เมื่อรันเสร็จ ระบบจะแจ้งว่าพร้อมใช้งานแล้วครับ เมื่อทุกอย่างเรียบร้อย มันจะพาเราไปที่หน้าเว็บหน้าหนึ่ง ซึ่งเปิดมาแล้วเราสามารถเลือก agent และทดลองถามคำถามผ่านหน้านี้ได้เลยครับ ผมลองถามคำถามดูแล้วก็ตอบกลับมาเป็นที่น่าพอใจครับ
ผมคิดว่าผมพอใจกับ agent ตัวนี้แล้ว และหวังว่าคุณก็จะพอใจเช่นกันนะครับ ขอให้ทุกคนลองทำตามดูครับ วิดีโอนี้จะจบลงเพียงเท่านี้ ขอบคุณที่รับชมครับ
หมายเหตุการแปล
ความโปร่งใสเกี่ยวกับความไม่แน่นอนในต้นฉบับ
- ## จุดที่ใช้สัญลักษณ์ฟังไม่ชัด (2 จุด)
- "which is created by not then" — ชื่อผู้สร้างพอดแคสต์ถอดมาเป็น "not then" ไม่สามารถระบุตัวตนได้ จึงใส่ [ฟังไม่ชัด] หลังคำว่า "สร้างโดย" โดยไม่เดาชื่อ
- "sequential parallel loop uh which has critical and retrieval" — คำหลัง loop ถอดมาเป็น "critical and retrieval" ไม่ชัดว่าหมายถึง pattern ใด (น่าจะ pipeline กับ retrieval-based) จึงใส่ [ฟังไม่ชัด] ต่อท้ายและคงชื่อ pattern ที่ชัดเจน (sequential/parallel/loop) ไว้
อภิธานศัพท์เทคนิค
คำศัพท์และชื่อผลิตภัณฑ์ที่คงรูปภาษาอังกฤษ
| ศัพท์ | คำแปล / คำอธิบาย |
|---|---|
| ADK (Agent Development Kit) | ชุดเครื่องมือพัฒนาเอเจนต์ของ Google ขับเคลื่อนด้วย Gemini |
| AI agent | เอเจนต์ AI — โปรแกรม AI ที่คิด ลงมือทำ และสังเกตผลได้ |
| multi-agent system | ระบบที่มีเอเจนต์หลายตัวทำงานร่วมกัน |
| specialized agents | ทีมเอเจนต์เฉพาะทางที่แบ่งหน้าที่กันทำงาน |
| architectural pattern | รูปแบบสถาปัตยกรรมการจัดวางเอเจนต์ เช่น sequential/parallel/loop |
| sequential / parallel / loop | ทำงานตามลำดับ / ขนานกัน / วนซ้ำ |
| Kaggle Notebook | สมุดบันทึกโค้ดออนไลน์บน Kaggle |
| Edit my copy | ปุ่มสร้างสำเนา Notebook ที่แก้ไขได้ของตัวเอง |
| white paper | เอกสารวิชาการเชิงลึกของคอร์ส |
| podcast | รายการเสียงสรุปเนื้อหาประกอบคอร์ส |
| codelab | ห้องทดลองเขียนโค้ดแบบทำตามทีละขั้น |
| API key | กุญแจสำหรับยืนยันตัวตนและเรียกใช้ API |
| secret | ข้อมูลลับที่ผูกกับ Notebook เพื่อเก็บ API key อย่างปลอดภัย |
| case-sensitive | มีผลตามตัวพิมพ์ใหญ่-เล็ก |
| Google AI Studio | เครื่องมือของ Google สำหรับสร้างและจัดการ API key |
| project | โปรเจกต์ใน Google AI Studio ที่ใช้จัดการการเข้าถึง API |
| Gemini | โมเดล AI ตระกูล Gemini ของ Google |
| Gemini 2.5 Flash | เวอร์ชันโมเดลที่ใช้สร้าง agent ในแบบฝึกหัดนี้ |
| LLM | Large Language Model — โมเดลภาษาขนาดใหญ่ |
| transient issue | ปัญหาชั่วคราวที่หายเอง เช่น network ขัดข้องเป็นพัก ๆ |
| rate limit | ข้อจำกัดจำนวน request ต่อช่วงเวลา |
| retry option | ตัวเลือกให้ระบบลองส่ง request ใหม่อัตโนมัติเมื่อล้มเหลว |
| exponential backoff | การหน่วงเวลาระหว่างการ retry ให้เพิ่มขึ้นแบบทบต้น |
| initial delay | ระยะเวลารอก่อนการลองครั้งแรก |
| HTTP code | รหัสสถานะ HTTP ที่ใช้กำหนดเงื่อนไขการ retry |
| think, act, observe | คิด ลงมือทำ สังเกตผล — วงจรการทำงานของ agent |
| prompt | คำสั่ง/คำถามที่ผู้ใช้ส่งให้ AI |
| instruction | คำสั่งระบบที่บอก agent ว่าต้องทำอะไร |
| description | คำอธิบายว่า agent ตัวนี้ทำอะไร (มีไว้ให้คนอ่าน) |
| tools | เครื่องมือที่ agent เรียกใช้ได้ เช่น Google Search |
| root agent | agent หลักของระบบ |
| runner | ตัวประสานงานหลักใน ADK จัดการ session และการตอบกลับ |
| orchestrator | ตัวประสานงานกลางที่คุมการทำงานทั้งหมด |
| session | บทสนทนาหนึ่งรอบระหว่างผู้ใช้กับ agent |
| web interface | หน้าเว็บสำหรับคุยกับ agent ผ่านเบราว์เซอร์ |
| sample agent | โฟลเดอร์ agent ตัวอย่างที่ generate จากโค้ด |
| agent.py | ไฟล์หลักที่เก็บนิยามของ agent |
| open source | ซอฟต์แวร์เปิดที่เปิดโค้ดให้ใช้ได้ฟรี |
| deployment | การนำระบบขึ้นไปใช้งานจริง |
| orchestration | การประสานงานให้ส่วนต่าง ๆ ทำงานเข้ากัน |
| Shift+Enter | ปุ่มลัดรัน cell ใน Notebook |
ซับไตเติ้ลภาษาไทย
ดาวน์โหลดหรือดูซับทั้งหมด
1 00:00:00,000 --> 00:00:01,422 สวัสดีทุกคน 2 00:00:01,422 --> 00:00:05,946 ยินดีต้อนรับกลับสู่ช่องอีกครั้งครับ 3 00:00:05,946 --> 00:00:10,857 ในวิดีโอนี้เราจะไปทำแบบฝึกหัดของ Day 1 4 00:00:10,857 --> 00:00:14,864 ของคอร์สนี้กันครับ งานของ Day 1
เปิดดูซับไตเติ้ลทั้งหมด (290 segments)
1 00:00:00,000 --> 00:00:01,422 สวัสดีทุกคน 2 00:00:01,422 --> 00:00:05,946 ยินดีต้อนรับกลับสู่ช่องอีกครั้งครับ 3 00:00:05,946 --> 00:00:10,857 ในวิดีโอนี้เราจะไปทำแบบฝึกหัดของ Day 1 4 00:00:10,857 --> 00:00:14,864 ของคอร์สนี้กันครับ งานของ Day 1 5 00:00:14,864 --> 00:00:20,293 ประกอบด้วยขั้นตอนที่ต้องทำให้ครบดังนี้ครับ 6 00:00:20,293 --> 00:00:24,817 ขั้นแรกคือฟังพอดแคสต์ตอนสรุปเนื้อหา 7 00:00:24,817 --> 00:00:30,634 ซึ่งสร้างโดย [ฟังไม่ชัด] และขั้นที่สองคืออ่าน 8 00:00:30,634 --> 00:00:35,028 white paper (เอกสารวิชาการ) เรื่อง 9 00:00:35,028 --> 00:00:37,872 Introduction to Agents 10 00:00:37,872 --> 00:00:43,947 ซึ่งเป็นภาคเสริมให้เข้าใจพอดแคสต์แบบลึกขึ้นครับ 11 00:00:43,947 --> 00:00:48,212 สองสื่อนี้ให้ข้อมูลและประโยชน์มาก 12 00:00:48,212 --> 00:00:53,253 ผมจึงแนะนำให้ไปฟังและอ่านด้วยตัวเองครับ 13 00:00:53,253 --> 00:00:58,165 แต่ถ้าใครยังไม่ได้ทำก็ไม่เป็นไรเลยครับ 14 00:00:58,165 --> 00:01:03,852 จะไม่กระทบการทำ codelab (ห้องทดลองเขียนโค้ด) 15 00:01:03,852 --> 00:01:08,506 ของคุณแน่นอน เพราะเราจะไล่ทำ codelab 16 00:01:08,506 --> 00:01:14,451 ไปด้วยกันทีละขั้น และผมจะอธิบายโค้ดทุก snippet 17 00:01:14,451 --> 00:01:16,519 ให้ฟังแบบละเอียด 18 00:01:16,519 --> 00:01:25,955 คุณจึงไม่ต้องกังวลว่าจะขาดความเข้าใจเพราะไม่ได้ไปผ่านเนื้อหาเหล่านั้นครับ 19 00:01:25,955 --> 00:01:30,091 แต่ถึงอย่างนั้นเมื่อจบซีรีส์แล้ว 20 00:01:30,091 --> 00:01:38,751 ผมก็ยังแนะนำให้กลับไปอ่านบทความและฟังพอดแคสต์ของคอร์สอีกครั้งนะครับ 21 00:01:38,751 --> 00:01:43,405 ในที่นี้ผมจะกดติ๊กข้อ 1 กับ 2 ไปก่อน 22 00:01:43,405 --> 00:01:47,024 เพราะทำเสร็จจากทางผมแล้วครับ 23 00:01:47,024 --> 00:01:49,867 อีกเรื่องที่อยากย้ำคือ 24 00:01:49,867 --> 00:01:55,425 ขอให้ทุกคนยืนยันเบอร์โทรศัพท์ในบัญชี Kaggle 25 00:01:55,425 --> 00:01:58,269 ให้เรียบร้อยด้วยนะครับ 26 00:01:58,269 --> 00:02:03,052 ไม่อย่างนั้นคุณจะรันโค้ด snippet ใด ๆ 27 00:02:03,052 --> 00:02:13,263 ไม่ได้เลย ระบบจะโยน error ออกมาครับ การยืนยันเบอร์จึงจำเป็นสำหรับ codelab มาก ๆ 28 00:02:13,263 --> 00:02:19,079 ครับ ทางผมทำขั้นตอนนี้สำเร็จเรียบร้อยแล้วครับ 29 00:02:19,079 --> 00:02:24,249 ใน codelab นี้เรามีแบบฝึกหัด 2 อย่างครับ 30 00:02:24,249 --> 00:02:29,420 อย่างแรกคือเราจะสร้าง agent ตัวแรกของเรา 31 00:02:29,420 --> 00:02:34,461 แล้วอย่างที่สองคือสร้างระบบ multi-agent 32 00:02:34,461 --> 00:02:40,148 (ระบบหลายเอเจนต์) ตัวแรก ทั้งสองอย่างใช้ ADK 33 00:02:40,148 --> 00:02:44,155 ซึ่งก็คือ Agent Development Kit 34 00:02:44,155 --> 00:02:49,971 (ชุดเครื่องมือพัฒนาเอเจนต์) ที่ขับเคลื่อนด้วย 35 00:02:49,971 --> 00:02:55,659 Gemini และทำให้ agent มีความสามารถใช้ Google 36 00:02:55,659 --> 00:02:56,757 Search 37 00:02:56,757 --> 00:03:02,315 ตอบคำถามด้วยข้อมูลที่อัปเดตล่าสุดได้ครับ ใน 38 00:03:02,315 --> 00:03:06,322 codelab ที่สอง จุดที่น่าสนใจคือ 39 00:03:06,322 --> 00:03:11,880 มันไม่ได้ช่วยแค่ให้เราสร้างระบบ multi-agent 40 00:03:11,880 --> 00:03:16,921 เท่านั้น แต่ยังสอนวิธีสร้างทีมของ agent 41 00:03:16,921 --> 00:03:22,738 เฉพาะทาง (specialized agents) และโชว์ pattern 42 00:03:22,738 --> 00:03:27,779 ทางสถาปัตยกรรม (architectural patterns) 43 00:03:27,779 --> 00:03:33,337 ที่มีให้เลือกใช้ เช่น sequential, parallel, 44 00:03:33,337 --> 00:03:36,051 loop [ฟังไม่ชัด] ครับ 45 00:03:36,051 --> 00:03:40,704 เพื่อให้เนื้อหาในวิดีโอง่ายและกระชับ 46 00:03:40,704 --> 00:03:45,616 ในวิดีโอนี้เราจะโฟกัสที่การสร้าง agent 47 00:03:45,616 --> 00:03:51,045 ตัวแรกก่อน แล้วจะมีวิดีโอต่อยอดอีกหนึ่งตอน 48 00:03:51,045 --> 00:03:56,344 สำหรับการสร้างระบบ multi-agent พร้อมสำรวจ 49 00:03:56,344 --> 00:03:59,963 pattern ทางสถาปัตยกรรมต่าง ๆ 50 00:03:59,963 --> 00:04:04,229 ที่เกี่ยวข้องกันครับ งั้นไม่รอช้า 51 00:04:04,229 --> 00:04:08,623 เราไปเริ่มสร้าง agent ตัวแรกกันเลย 52 00:04:08,623 --> 00:04:13,406 โดยคลิกที่ลิงก์แรกคือคำว่า build ครับ 53 00:04:13,406 --> 00:04:18,059 ลิงก์นี้จะพาเราไปที่ Kaggle Notebook 54 00:04:18,059 --> 00:04:21,290 (สมุดบันทึกโค้ดบน Kaggle) 55 00:04:21,290 --> 00:04:26,848 ซึ่งระบุว่าเป็นวันแรก หัวข้อ From Prompt to 56 00:04:26,848 --> 00:04:30,338 Action ครับ นี่คือ Notebook 57 00:04:30,338 --> 00:04:34,992 ที่เราจะใช้ทำงานตลอดทั้งคอร์สนี้ครับ 58 00:04:34,992 --> 00:04:37,964 ตอนนี้มันยังแก้ไขไม่ได้ 59 00:04:37,964 --> 00:04:42,488 เราต้องสร้างสำเนาของตัวเองที่แก้ได้ 60 00:04:42,488 --> 00:04:45,978 โดยคลิกที่ปุ่ม Edit my copy 61 00:04:45,978 --> 00:04:49,210 ที่มุมขวาบนด้านขวามือครับ 62 00:04:49,210 --> 00:04:53,863 ระบบจะเปิดสำเนาที่แก้ไขได้ให้เราครับ 63 00:04:53,863 --> 00:04:58,128 บางครั้งขั้นตอนนี้ใช้เวลาสักหน่อย 64 00:04:58,128 --> 00:05:03,686 เพราะมีผู้เข้าร่วมจำนวนมากกำลังใช้ Notebook 65 00:05:03,686 --> 00:05:08,986 เดียวกันอยู่พร้อมกัน คุณอาจเจอปัญหานี้ได้ 66 00:05:08,986 --> 00:05:12,993 ให้รอสักครู่แล้วลองใหม่อีกครั้ง 67 00:05:12,993 --> 00:05:17,904 ก็น่าจะแก้ปัญหาได้ครับ ใน Notebook นี้ 68 00:05:17,904 --> 00:05:22,945 มีหลายขั้นตอนที่เราจะไล่ทำไปด้วยกันครับ 69 00:05:22,945 --> 00:05:28,503 ขั้นแรกคือติดตั้ง ADK จากนั้น configure API 70 00:05:28,503 --> 00:05:34,320 key (กุญแจเรียกใช้ API) เพื่อใช้เครื่องมือของ 71 00:05:34,320 --> 00:05:39,619 Gemini เราจะสร้าง API key กันใน Google AI 72 00:05:39,619 --> 00:05:45,048 Studio หวังว่าทุกคนสมัครบัญชีไว้แล้วนะครับ 73 00:05:45,048 --> 00:05:50,089 ถัดไปเราจะสร้าง agent อย่างง่ายหนึ่งตัว 74 00:05:50,089 --> 00:05:55,776 แล้วรัน agent นั้น ดูมันเรียกใช้ tool สำหรับ 75 00:05:55,776 --> 00:06:00,300 Google Search เพื่อตอบคำถามหนึ่งข้อ 76 00:06:00,300 --> 00:06:04,566 หรือมากกว่านั้นก็ได้ จะถามสัก 4-5 77 00:06:04,566 --> 00:06:09,607 คำถามก็ย่อมได้ครับ และยังมีอีกขั้นหนึ่ง 78 00:06:09,607 --> 00:06:15,553 คือเราจะรัน agent ใน Notebook นี้ แล้วเราจะรัน 79 00:06:15,553 --> 00:06:21,369 agent ใน web interface (หน้าเว็บแบบมีช่องแชท) 80 00:06:21,369 --> 00:06:22,468 ด้วย 81 00:06:22,468 --> 00:06:28,413 นับเป็นอีกขั้นตอนหนึ่งที่ใช้เวลาไม่กี่นาทีครับ 82 00:06:28,413 --> 00:06:32,679 งั้นเริ่มกันเลยครับ ในส่วนติดตั้ง 83 00:06:32,679 --> 00:06:37,720 เราไม่ต้องติดตั้ง Agent Development Kit 84 00:06:37,720 --> 00:06:43,536 เองครับ เพราะถ้าเราใช้สภาพแวดล้อมของ Notebook 85 00:06:43,536 --> 00:06:46,768 ตัว Notebook จะมี library 86 00:06:46,768 --> 00:06:50,904 นี้ติดตั้งไว้ให้แล้วแบบสำเร็จรูป 87 00:06:50,904 --> 00:06:56,203 เราจึงไม่ต้องติดตั้ง package ใด ๆ เลยครับ 88 00:06:56,203 --> 00:06:59,305 แต่ถ้าคุณใช้ environment 89 00:06:59,305 --> 00:07:02,666 ส่วนตัวของคุณเองในการเขียน 90 00:07:02,666 --> 00:07:06,932 คุณอาจต้องรันคำสั่งติดตั้งนี้ครับ 91 00:07:06,932 --> 00:07:10,809 ขั้นถัดไปคือสร้าง API key ครับ 92 00:07:10,809 --> 00:07:16,755 เราต้องสร้างมันใน Google AI Studio ที่หน้า API 93 00:07:16,755 --> 00:07:21,796 ครับ ถ้าคุณทำครั้งแรก คุณจะเห็น project 94 00:07:21,796 --> 00:07:26,320 เริ่มต้น (default project) หนึ่งตัว 95 00:07:26,320 --> 00:07:31,878 และคุณใช้ตัวนี้ทำแบบฝึกหัดได้ถ้าต้องการครับ 96 00:07:31,878 --> 00:07:36,919 อย่างไรก็ตาม ผมแนะนำให้ลองสร้าง project 97 00:07:36,919 --> 00:07:39,375 ใหม่ขึ้นมาเองสักตัว 98 00:07:39,375 --> 00:07:43,899 เพื่อได้ประสบการณ์และความเข้าใจครับ 99 00:07:43,899 --> 00:07:49,198 และขอย้ำว่าอย่าแชร์ API key กับใครเด็ดขาด 100 00:07:49,198 --> 00:07:52,947 เพราะมันคือกุญแจลับของคุณครับ 101 00:07:52,947 --> 00:07:58,763 คุณจะเห็นปุ่มที่หน้านี้ กดที่ปุ่มนั้นแล้วจะมี 102 00:07:58,763 --> 00:08:04,192 dialog box เด้งขึ้นมาให้เลือก project ครับ 103 00:08:04,192 --> 00:08:08,199 ทางผมมี project อยู่แล้วหลายตัว 104 00:08:08,199 --> 00:08:13,628 แต่ถ้าคุณทำครั้งแรกเพื่อคอร์สนี้ ผมจะสร้าง 105 00:08:13,628 --> 00:08:17,893 project ใหม่ให้ดูเป็นตัวอย่างครับ 106 00:08:17,893 --> 00:08:20,349 เมื่อสร้างเสร็จแล้ว 107 00:08:20,349 --> 00:08:25,002 คุณจะเห็นว่ามันถูกแสดงขึ้นมาในรายการ 108 00:08:25,002 --> 00:08:30,689 พร้อมระบุชนิดของ project ที่เชื่อมโยงกันครับ 109 00:08:30,689 --> 00:08:35,860 ตอนนี้เราได้สร้างสำเร็จแล้ว ให้กลับไปที่ 110 00:08:35,860 --> 00:08:41,288 Notebook ครับ ขั้นต่อมา ผมต้องเพิ่ม secret 111 00:08:41,288 --> 00:08:46,717 (ข้อมูลลับ) เข้าไปครับ คลิกที่ส่วน Secrets 112 00:08:46,717 --> 00:08:51,370 แล้วเลือก project ที่เราสร้างไว้ครับ 113 00:08:51,370 --> 00:08:55,248 ระวังด้วยนะครับ ชื่อของ secret 114 00:08:55,248 --> 00:09:01,064 นั้นมีผลตามตัวพิมพ์ใหญ่-เล็ก (case-sensitive) 115 00:09:01,064 --> 00:09:04,296 จากนั้นกดบันทึกได้เลยครับ 116 00:09:04,296 --> 00:09:07,527 อีกเรื่องที่ต้องสังเกตคือ 117 00:09:07,527 --> 00:09:11,922 ถ้าคุณไม่ได้ติ๊กกล่อง check นี้ไว้ 118 00:09:11,922 --> 00:09:15,670 แล้วรันโค้ดส่วนการยืนยันตัวตน 119 00:09:15,670 --> 00:09:20,324 ผลลัพธ์ที่พิมพ์ออกมาจะไม่ถูกต้องครับ 120 00:09:20,324 --> 00:09:21,875 ลองดูกันครับ 121 00:09:21,875 --> 00:09:26,528 ผมจะเอาเครื่องหมายติ๊กออกแล้วรันด้วย 122 00:09:26,528 --> 00:09:31,957 Shift+Enter ตอนนี้ผมคาดหวังว่าจะเกิด error 123 00:09:31,957 --> 00:09:33,055 ขึ้น 124 00:09:33,055 --> 00:09:39,001 เพราะการยืนยันตัวตนจะไม่สำเร็จตามที่คาดไว้ครับ 125 00:09:39,001 --> 00:09:40,681 วิธีแก้ error 126 00:09:40,681 --> 00:09:45,076 นี้คือกลับมาเลือกติ๊กกล่องนั้นใหม่ 127 00:09:45,076 --> 00:09:50,634 แล้วรันอีกครั้ง การตั้งค่าก็จะเรียบร้อยครับ 128 00:09:50,634 --> 00:09:55,933 ขั้นถัดไปคือ import ส่วนประกอบต่าง ๆ ครับ 129 00:09:55,933 --> 00:10:01,491 ส่วนประกอบเหล่านี้มาจาก ADK และ library ของ 130 00:10:01,491 --> 00:10:06,532 generative AI ครับ คุณจะเห็นว่ามี Agent 131 00:10:06,532 --> 00:10:12,478 ซึ่งเป็นคลาสของ agent ที่เรา import จาก google 132 00:10:12,478 --> 00:10:15,709 และเรา import search tool 133 00:10:15,709 --> 00:10:20,492 ซึ่งเป็นเครื่องมือค้นหาเข้ามาด้วยครับ 134 00:10:20,492 --> 00:10:24,757 การรันส่วนนี้ปกติจะใช้เวลาสักครู่ 135 00:10:24,757 --> 00:10:29,928 เพราะระบบกำลัง import ทุกอย่างเข้ามาครับ 136 00:10:29,928 --> 00:10:35,873 ขั้นต่อมาคือการ define function ครับ ถ้าคุณรัน 137 00:10:35,873 --> 00:10:40,397 snippet นี้นอกสภาพแวดล้อมของ Kaggle 138 00:10:40,397 --> 00:10:44,533 คุณไม่จำเป็นต้องทำขั้นนี้เลยครับ 139 00:10:44,533 --> 00:10:50,221 ขั้นนี้มีไว้เฉพาะสำหรับ Kaggle Notebook ครับ 140 00:10:50,221 --> 00:10:55,391 กดตกลงไป แล้ว output ควรจะขึ้นว่า helper 141 00:10:55,391 --> 00:10:58,235 functions defined ครับ 142 00:10:58,235 --> 00:11:03,793 คุณจะเห็นข้อความยืนยันว่าฟังก์ชันถูก define 143 00:11:03,793 --> 00:11:09,480 แล้วครับ ขั้นถัดไปคือ configure retry option 144 00:11:09,480 --> 00:11:14,392 (ตัวเลือกการลองใหม่) ครับ retry option 145 00:11:14,392 --> 00:11:15,813 คืออะไรกัน? 146 00:11:15,813 --> 00:11:20,854 นี่คือสิ่งที่เราทำเสมอเมื่อทำงานกับ LLM 147 00:11:20,854 --> 00:11:23,957 (โมเดลภาษาขนาดใหญ่) ครับ 148 00:11:23,957 --> 00:11:28,739 เพราะส่วนใหญ่เรามักจะเจอปัญหาชั่วคราว 149 00:11:28,739 --> 00:11:33,004 (transient issue) เช่น rate limit 150 00:11:33,004 --> 00:11:37,658 (ข้อจำกัดจำนวน request) หรือ service 151 00:11:37,658 --> 00:11:40,243 ใช้งานไม่ได้ชั่วคราว 152 00:11:40,243 --> 00:11:48,127 เหมือนที่บางเว็บไซต์อาจล่มไปช่วงหนึ่งแล้วกลับมาใช้ได้อีกครั้ง 153 00:11:48,127 --> 00:11:53,168 อย่างกับ LLM ก็เช่นกันครับ retry option 154 00:11:53,168 --> 00:11:55,236 จะลองส่ง request 155 00:11:55,236 --> 00:12:01,182 ใหม่ให้อัตโนมัติและจัดการกับความล้มเหลวเองครับ 156 00:12:01,182 --> 00:12:07,128 เราจะมี snippet ซึ่งสั่งให้ LLM ลองส่ง request 157 00:12:07,128 --> 00:12:11,523 ใหม่ด้วยรูปแบบ exponential backoff 158 00:12:11,523 --> 00:12:16,951 (การหน่วงเวลาทบต้นแบบเอกซ์โพเนนเชียล) ครับ 159 00:12:16,951 --> 00:12:21,992 ตรงจุดนี้ผมไม่เห็นมีข้อความ print ออกมา 160 00:12:21,992 --> 00:12:24,707 ผมจะเพิ่มคำสั่ง print 161 00:12:24,707 --> 00:12:29,748 เข้าไปเพื่อความชัดเจนครับ เมื่อรันเสร็จ 162 00:12:29,748 --> 00:12:33,496 ก็จะมีข้อความยืนยันขึ้นมาครับ 163 00:12:33,496 --> 00:12:38,020 มาดูความหมายของค่าที่ตั้งไว้กันครับ 164 00:12:38,020 --> 00:12:42,932 ตัวเลขที่เห็นคือจำนวนครั้งของการ retry 165 00:12:42,932 --> 00:12:48,619 ซึ่งเรากำหนดไว้ที่ 5 ครั้งครับ ส่วนตัวคูณของ 166 00:12:48,619 --> 00:12:53,919 exponential backoff กำหนดไว้ที่ 7 เท่าของ 167 00:12:53,919 --> 00:12:59,735 delay ครับ initial delay (ดีเลย์เริ่มต้น) คือ 168 00:12:59,735 --> 00:13:04,905 1 วินาที หมายความว่าก่อนเริ่มลองครั้งแรก 169 00:13:04,905 --> 00:13:10,205 ระบบจะรอ 1 วินาทีก่อน ให้เวลาเว็บไซต์หรือ 170 00:13:10,205 --> 00:13:14,987 service กลับมาใช้งานได้ภายใน 1 วินาที 171 00:13:14,987 --> 00:13:18,865 ไม่เช่นนั้นจะเริ่ม retry ต่อไป 172 00:13:18,865 --> 00:13:21,967 โดยมีจำนวนสูงสุด 5 ครั้ง 173 00:13:21,967 --> 00:13:28,042 ที่ระยะห่างเพิ่มขึ้นแบบเอกซ์โพเนนเชียลที่ตัวคูณ 174 00:13:28,042 --> 00:13:33,600 7 ครับ แล้วสถานการณ์แบบไหนที่ควร retry กัน? 175 00:13:33,600 --> 00:13:39,158 นี่คือ HTTP code ที่เราระบุไว้ครับ ถ้าคุณมี 176 00:13:39,158 --> 00:13:44,845 code เพิ่มเติมที่ต้องการ ก็เพิ่มเข้าไปได้เลย 177 00:13:44,845 --> 00:13:50,016 นี่คือเงื่อนไขที่บอกว่าในสถานการณ์ใด LLM 178 00:13:50,016 --> 00:13:53,635 ควรจะลองส่ง request ใหม่ครับ 179 00:13:53,635 --> 00:13:58,029 ต่อมาถึงส่วนสำคัญคือการสร้าง agent 180 00:13:58,029 --> 00:14:02,424 ตัวแรกของเราครับ ก่อนจะสร้าง agent 181 00:14:02,424 --> 00:14:08,111 เรามาทำความเข้าใจสั้น ๆ กันก่อนว่า agent กับ 182 00:14:08,111 --> 00:14:13,669 model ต่างกันอย่างไรครับ สำหรับ model อย่าง 183 00:14:13,669 --> 00:14:19,357 Gemini สิ่งที่เกิดขึ้นก็คือ ผู้ใช้ส่ง prompt 184 00:14:19,357 --> 00:14:25,173 เข้ามา แล้ว Gemini ส่งข้อความ (text response) 185 00:14:25,173 --> 00:14:30,731 กลับไป เป็นการทำงานตรงไปตรงมาครับ แต่สำหรับ 186 00:14:30,731 --> 00:14:36,160 agent แล้ว AI มีความสามารถในการคิด ลงมือทำ 187 00:14:36,160 --> 00:14:41,072 และสังเกตผล (think, act, observe) ครับ 188 00:14:41,072 --> 00:14:45,466 เมื่อผู้ใช้ส่ง prompt เข้ามา agent 189 00:14:45,466 --> 00:14:48,827 จะคิดวิเคราะห์ prompt นั้น 190 00:14:48,827 --> 00:14:52,058 เข้าใจว่าควรเรียกใช้ tool 191 00:14:52,058 --> 00:14:56,712 ตัวไหนหรือไปที่ไหนเพื่อหาคำตอบที่ใช่ 192 00:14:56,712 --> 00:15:02,140 นั่นคือการลงมือทำ (action) ของมัน และเมื่อ 193 00:15:02,140 --> 00:15:06,147 tool ตอบกลับมาพร้อมข้อมูล agent 194 00:15:06,147 --> 00:15:11,188 จะสังเกตข้อมูลนั้น คัดกรองและจัดระเบียบ 195 00:15:11,188 --> 00:15:16,229 แล้วนำเสนอเป็นคำตอบสุดท้ายให้ผู้ใช้ครับ 196 00:15:16,229 --> 00:15:21,658 นี่คือความต่างระหว่าง model กับ agent ครับ 197 00:15:21,658 --> 00:15:26,957 model คือสิ่งที่ตอบกลับมาด้วยข้อความ ส่วน 198 00:15:26,957 --> 00:15:28,056 agent 199 00:15:28,056 --> 00:15:34,002 คือสิ่งที่ตอบกลับมาด้วยการให้บริการเหมือน Siri 200 00:15:34,002 --> 00:15:38,396 ที่คุณขอให้ Siri ตั้งงานให้ได้ครับ 201 00:15:38,396 --> 00:15:43,825 นั่นคือความต่างพื้นฐานครับ ตอนนี้มา define 202 00:15:43,825 --> 00:15:49,642 agent ของเรากันครับ agent ทุกตัวจะมี property 203 00:15:49,642 --> 00:15:54,036 หลักดังนี้ คือ description, model, 204 00:15:54,036 --> 00:16:03,989 instruction และ tools ครับ root agent (agent หลัก) ทุกตัวควรมี name หรือชื่อ, 205 00:16:03,989 --> 00:16:09,676 description หรือคำอธิบาย, model ที่ใช้ข้างใน 206 00:16:09,676 --> 00:16:14,329 พร้อมกับ retry config เพื่อให้ agent 207 00:16:14,329 --> 00:16:20,017 ลองใหม่ได้เมื่อเกิดความล้มเหลวครับ ส่วน name 208 00:16:20,017 --> 00:16:25,704 นั้นมีประโยชน์กับระบบครับ model ที่เราใช้คือ 209 00:16:25,704 --> 00:16:31,262 Gemini โดยเวอร์ชันคือ Gemini 2.5 Flash ครับ 210 00:16:31,262 --> 00:16:35,527 เรายังใส่ retry option เข้าไปด้วย 211 00:16:35,527 --> 00:16:41,085 เพื่อที่ว่าถ้ามีความล่าช้าหรือเจอปัญหา rate 212 00:16:41,085 --> 00:16:46,773 limit agent ก็จะลองใหม่ให้เองครับ เรา define 213 00:16:46,773 --> 00:16:52,331 ชื่อเรียบร้อยแล้ว ต่อมาที่ description ครับ 214 00:16:52,331 --> 00:16:58,276 description มีไว้เพื่อให้พวกเราเข้าใจว่า agent 215 00:16:58,276 --> 00:17:03,705 ตัวนี้เป็น agent เกี่ยวกับอะไร ในที่นี้คือ 216 00:17:03,705 --> 00:17:09,392 agent อย่างง่ายที่ตอบคำถามทั่วไปได้ครับ ส่วน 217 00:17:09,392 --> 00:17:13,529 instruction เป็นสิ่งที่ให้ agent 218 00:17:13,529 --> 00:17:16,631 เข้าใจว่าตัวเองควรทำอะไร 219 00:17:16,631 --> 00:17:23,352 ข้อความในส่วนนี้ระบุว่าคุณเป็นผู้ช่วยที่เป็นประโยชน์ 220 00:17:23,352 --> 00:17:28,135 ให้ใช้ Google Search หาข้อมูลปัจจุบัน 221 00:17:28,135 --> 00:17:33,951 ดังนั้นเราจึงกำหนด tool เป็น search ครับ ด้วย 222 00:17:33,951 --> 00:17:39,251 instruction นี้ คำถามใด ๆ ที่ถูกถามเข้ามา 223 00:17:39,251 --> 00:17:44,550 agent จะไปที่ search tool ค้นหาข้อมูลนั้น 224 00:17:44,550 --> 00:17:49,720 แล้วตอบกลับพร้อมข้อมูลที่หาได้ครับ เมื่อ 225 00:17:49,720 --> 00:17:54,115 define agent เสร็จ ลองรัน cell นี้ 226 00:17:54,115 --> 00:17:59,156 ระบบจะแจ้งว่า agent ถูก define แล้วครับ 227 00:17:59,156 --> 00:18:04,972 ต่อไปเราจะรัน agent ตัวนี้ครับ ในการรัน agent 228 00:18:04,972 --> 00:18:10,789 เราต้องมีสิ่งที่เรียกว่า runner ครับ ซึ่งเป็น 229 00:18:10,789 --> 00:18:16,476 orchestrator (ตัวประสานงานหลัก) หรือ central 230 00:18:16,476 --> 00:18:21,776 component ภายใน ADK ครับ มันจัดการบทสนทนา 231 00:18:21,776 --> 00:18:27,204 ข้อความต่าง ๆ ทั้งหมด และดูแลการตอบกลับของ 232 00:18:27,204 --> 00:18:32,633 agent ครับ เราจะสร้าง runner แบบ in-memory 233 00:18:32,633 --> 00:18:37,803 ขึ้นมา แล้วบอกให้มันใช้ agent ของเราครับ 234 00:18:37,803 --> 00:18:40,389 เมื่อรันเสร็จ runner 235 00:18:40,389 --> 00:18:44,137 ก็ถูกสร้างขึ้นมาเรียบร้อยครับ 236 00:18:44,137 --> 00:18:49,695 ตอนนี้เราจะเรียกใช้ agent ของเราครับ เราส่ง 237 00:18:49,695 --> 00:18:55,253 prompt เข้าไปโดยใช้ snippet นี้ครับ คุณเห็น 238 00:18:55,253 --> 00:18:59,389 response ซึ่งเท่ากับผลจากการ run 239 00:18:59,389 --> 00:19:02,491 และในเครื่องหมายคำพูดคู่ 240 00:19:02,491 --> 00:19:05,464 เราใส่คำถามได้หลายคำถาม 241 00:19:05,464 --> 00:19:10,634 จะถามอะไรก็ได้ตามต้องการครับ โดย default 242 00:19:10,634 --> 00:19:16,192 แล้วคำถามคือ ADK ของ Google คืออะไร และ SDK 243 00:19:16,192 --> 00:19:18,778 นั้นเป็นภาษาอะไรครับ 244 00:19:18,778 --> 00:19:23,043 คลิกรันแล้วดูว่ามันตอบอย่างไรครับ 245 00:19:23,043 --> 00:19:28,084 ระบบแจ้งว่าเป็น session ใหม่ แสดง debug 246 00:19:28,084 --> 00:19:32,996 session ID คำถามของผู้ใช้คือข้อความนี้ 247 00:19:32,996 --> 00:19:38,941 และผู้ช่วยที่เป็นประโยชน์ก็ตอบกลับมาแบบนี้ครับ 248 00:19:38,941 --> 00:19:44,112 มันตอบว่า ADK เป็นเครื่องมือ open source 249 00:19:44,112 --> 00:19:49,799 ที่ออกแบบมาเพื่อทำให้การสร้าง deployment และ 250 00:19:49,799 --> 00:19:55,098 orchestration ของเอเจนต์ AI และระบบต่าง ๆ 251 00:19:55,098 --> 00:19:59,622 ง่ายขึ้น พร้อมข้อมูลในลักษณะนี้ครับ 252 00:19:59,622 --> 00:20:05,180 แล้วสำหรับคำถามที่สอง มันก็ตอบเกี่ยวกับ ADK 253 00:20:05,180 --> 00:20:06,990 ได้อย่างดีครับ 254 00:20:06,990 --> 00:20:14,616 ทีนี้มันแนะนำด้วยว่าทำไมคุณไม่ลองถามคำถามของตัวเองดูล่ะครับ 255 00:20:14,616 --> 00:20:18,106 เช่น ถามว่าอากาศเป็นอย่างไร 256 00:20:18,106 --> 00:20:23,664 โดยเปลี่ยนคำถามเป็น what's the weather ครับ 257 00:20:23,664 --> 00:20:29,351 ระบบแจ้งว่า continue session คือเป็นการต่อใน 258 00:20:29,351 --> 00:20:33,358 session เดิมที่เพิ่งเริ่มไปครับ 259 00:20:33,358 --> 00:20:36,460 คำถามคืออากาศเป็นอย่างไร 260 00:20:36,460 --> 00:20:41,889 และคำตอบคือสภาพอากาศปัจจุบันเป็นแบบนี้ครับ 261 00:20:41,889 --> 00:20:44,991 นับเป็นคำตอบที่ดีมากครับ 262 00:20:44,991 --> 00:20:51,066 มันบอกว่าที่เหลือของวันพฤหัสบดีคาดว่าจะมีเมฆมาก 263 00:20:51,066 --> 00:20:54,944 วันศุกร์คาดว่าจะมีฝนลงเล็กน้อย 264 00:20:54,944 --> 00:20:58,951 และพยากรณ์ว่าวันเสาร์จะมีฝนครับ 265 00:20:58,951 --> 00:21:03,992 เราจึงเห็นภาพการทำงานของมันได้ดีมากครับ 266 00:21:03,992 --> 00:21:09,808 ผมมีคำถามจากทางผมเองอีกสองสามข้อ ลองรันดูครับ 267 00:21:09,808 --> 00:21:13,557 เชิญชวนให้คุณลองเล่นกับ agent 268 00:21:13,557 --> 00:21:18,210 ของคุณเองโดยตั้งคำถามที่แตกต่างกันไป 269 00:21:18,210 --> 00:21:22,475 แล้วดูว่าคุณจะเรียนรู้อะไรได้บ้าง 270 00:21:22,475 --> 00:21:29,067 หรือคุณจะตรวจสอบว่าคำตอบถูกต้องหรือไม่ก็ย่อมได้ครับ 271 00:21:29,067 --> 00:21:33,850 ต่อมาถึงขั้นตอนสุดท้ายของแบบฝึกหัดนี้ 272 00:21:33,850 --> 00:21:37,728 คือการสร้าง web interface ครับ 273 00:21:37,728 --> 00:21:43,544 หน้าตาจะประมาณนี้ครับ ขั้นแรกเราต้อง generate 274 00:21:43,544 --> 00:21:48,714 sample agent (agent ตัวอย่าง) ของเราก่อน 275 00:21:48,714 --> 00:21:54,272 โดยรันโค้ดนี้ครับ มันจะสร้างโฟลเดอร์ sample 276 00:21:54,272 --> 00:22:00,218 agent ซึ่งบรรจุไฟล์ทั้งหมด รวมถึงไฟล์ agent.py 277 00:22:00,218 --> 00:22:04,096 กับ environment และอื่น ๆ ครับ 278 00:22:04,096 --> 00:22:09,783 ตอนนี้กำลังรันอยู่ และนี่คือช่วงที่คุณจะเห็น 279 00:22:09,783 --> 00:22:13,790 agent ถูกสร้างและแสดงขึ้นมาครับ 280 00:22:13,790 --> 00:22:19,736 ต่อมารันคำสั่งถัดไปครับ จะเห็นสถานะว่ากำลังรัน 281 00:22:19,736 --> 00:22:25,681 เมื่อรันเสร็จ ระบบจะแจ้งว่าพร้อมใช้งานแล้วครับ 282 00:22:25,681 --> 00:22:28,525 เมื่อทุกอย่างเรียบร้อย 283 00:22:28,525 --> 00:22:32,661 มันจะพาเราไปที่หน้าเว็บหน้าหนึ่ง 284 00:22:32,661 --> 00:22:37,056 ซึ่งเปิดมาแล้วเราสามารถเลือก agent 285 00:22:37,056 --> 00:22:41,838 และทดลองถามคำถามผ่านหน้านี้ได้เลยครับ 286 00:22:41,838 --> 00:22:48,043 ผมลองถามคำถามดูแล้วก็ตอบกลับมาเป็นที่น่าพอใจครับ 287 00:22:48,043 --> 00:22:52,437 ผมคิดว่าผมพอใจกับ agent ตัวนี้แล้ว 288 00:22:52,437 --> 00:22:56,832 และหวังว่าคุณก็จะพอใจเช่นกันนะครับ 289 00:22:56,832 --> 00:22:59,934 ขอให้ทุกคนลองทำตามดูครับ 290 00:22:59,934 --> 00:23:05,880 วิดีโอนี้จะจบลงเพียงเท่านี้ ขอบคุณที่รับชมครับ