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

Day 4B: Agent Project Build — Complete Multi-Agent Demo (Start to Finish)

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

สรุปย่อ

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

- **ช่อง:** Adspolitan Knowledge Studio · **ความยาว:** ~20 นาที · **ลิงก์:** https://www.youtube.com/watch?v=Iox3S-hIo04

# สรุป: Day 4B: Agent Project Build — Complete Multi-Agent Demo (Start to Finish)

- **ช่อง:** Adspolitan Knowledge Studio · **ความยาว:** ~20 นาที · **ลิงก์:** https://www.youtube.com/watch?v=Iox3S-hIo04

## ประเด็นหลัก

- แม้ชื่อวิดีโอจะระบุ Agent Project Build แต่เนื้อหาจริงคือ agent evaluation (การประเมินผลเอเจนต์) — ส่วน B ของ assignment Day 4
- Observability เป็นแบบ reactive (ทำงานหลังปัญหาเกิด) ส่วน evaluation คือการประเมินประสิทธิภาพอย่างต่อเนื่องเพื่อรับรู้ quality regression ได้ล่วงหน้า
- ความต่างจากการทดสอบซอฟต์แวร์เดิม: standard testing = ทดสอบ happy path ส่วน evaluation = ประเมินกระบวนการตัดสินใจทั้งเส้นทาง (trajectory) ของเอเจนต์
- กรณีศึกษา: home automation agent ที่ instructions ตั้งใจให้มั่นใจเกินจริง (อ้างว่าควบคุมอุปกรณ์ได้ทุกชนิด) — ผ่าน test พื้นฐานแต่ซ่อนข้อบกพร่อง
- การสร้าง evaluation ใน ADK web UI: ถามเอเจนต์ → บันทึก session เป็น eval case ใน eval set → กด run evaluation
- คะแนนสำคัญ 2 ตัว: response match score (ความคล้ายของคำตอบจริงกับคำตอบที่คาดหวัง 1.0 = ตรงสนิท) และ tool trajectory score (ความถูกต้องของ tool + parameter + ลำดับการเรียก 1.0 = สมบูรณ์แบบ)
- การทดสอบให้พังโดยเจตนา (แก้ expected response เป็น "โคมไฟปิดอยู่") แสดงผล fail สีแดง พร้อม tooltip เทียบ actual vs expected — feedback แบบนี้มีค่ามากสำหรับ debug
- การทดสอบทีละบทสนทนาใน UI scale ไม่ได้ — ต้องใช้ systematic evaluation ด้วยหลาย test case รวมเป็น evaluation set (ไฟล์ JSON)
- Regression testing = รัน test เดิมซ้ำเพื่อยืนยันว่าการเปลี่ยนแปลงใหม่ไม่ทำลายของเดิม; ADK รองรับ pytest และ ADK eval ผ่านคำสั่ง CLI
- ขั้นตอน evaluation 4 ขั้น: สร้าง evaluation configuration (นิยาม metric + เกณฑ์ผ่าน/ตก) → สร้าง test case → รันเอเจนต์ด้วย test query → เปรียบเทียบผลลัพธ์
- User simulation (optional): ใช้โมเดล genai อย่าง Gemini สร้าง prompt ของ user แบบไดนามิกระหว่าง evaluate ช่วยค้นพบ edge case ที่ static test case มักพลาด

## ความเห็นสรุป

วิดีโอนี้อธิบาย evaluation ได้เป็นขั้นเป็นตอนดี โดยเฉพาะการพาสร้าง test จริงใน web UI แล้วทำให้มัน fail ให้ดู ช่วยให้เข้าใจคะแนนทั้งสองแบบได้รวดเร็วครับ จุดที่ผู้เรียนควรเก็บกินคือแนวคิด systematic evaluation ด้วย JSON และ regression testing เพราะเป็นสะพานสู่งานจริงใน production ครับ ข้อควรระวังอีกครั้ง: ชื่อวิดีโอไม่ตรงกับเนื้อหาจริง (ชื่อบอก Project Build แต่สอน Evaluation) ควรใช้เนื้อหาในคลิปเป็นหลักครับ
02

คำแปลเต็ม

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

ในวิดีโอนี้เราจะเรียนส่วน B ของ assignment ใน Day 4 ครับ ผมจะคลิกที่ evaluate ในแบบฝึกหัดนี้เราจะเข้าใจว่า agent evaluation ทำงานอย่างไรครับ ผมกด copy and edit เพื่อให้ได้ notebook เวอร์ชันที่แก้ไขได้ของตัวเองครับ

โอเค ตรงนี้ในวิดีโอก่อนหน้าซึ่งเป็นส่วน A ของ Day 4 เราเข้าใจเรื่อง observability แล้ว ในวิดีโอนี้เราจะเรียนเรื่อง agent evaluation (การประเมินผลเอเจนต์) ครับ อย่างที่เห็นตรงนี้บอกว่า observability เป็นแบบ reactive คือมันทำงานหลังจากปัญหาเกิดขึ้นแล้ว โดยให้ข้อมูลที่จำเป็นเพื่อ debug และเข้าใจสาเหตุเบื้องลึกครับ แต่สำหรับ evaluation หมายความว่าเราต้องประเมินประสิทธิภาพของเอเจนต์อย่างต่อเนื่อง เพื่อรับรู้ความเสื่อมถอยของคุณภาพได้เร็วขึ้น หากมีอยู่ในระบบครับ

นิยามของ agent evaluation คือ กระบวนการอย่างเป็นระบบในการทดสอบและวัดว่า AI agent ทำงานได้ดีแค่ไหนในสถานการณ์ต่างๆ และมิติคุณภาพที่แตกต่างกันครับ เรื่องราวที่เราจะ implement ในแบบฝึกหัดนี้คือการสร้าง home automation agent หรือเอเจนต์ควบคุมบ้านอัจฉริยะครับ มันทำงานได้สมบูรณ์แบบในการทดสอบของเรา เราจึงปล่อยใช้งานอย่างมั่นใจ และมันจะต่างจากซอฟต์แวร์แบบเดิม เพราะนี่ไม่ใช่แค่การทดสอบมาตรฐาน แต่เป็น evaluation ซึ่งทั้งสองอย่างต่างกันครับ การทดสอบมาตรฐานคือการทดสอบ happy path คือทางที่ทุกอย่างเป็นไปตามปกติ ขณะที่ evaluation คือการประเมินกระบวนการตัดสินใจทั้งหมดของเอเจนต์ หรือที่เรียกว่า trajectory (เส้นทางการทำงาน) ครับ

ใน notebook วันนี้เราจะเข้าใจว่า agent evaluation คืออะไรและใช้อย่างไร รัน evaluation และวิเคราะห์ผลลัพธ์ตรงใน ADK web UI ตรวจจับ regression (การถดถอยของประสิทธิภาพ) ของเอเจนต์ตลอดช่วงเวลา และเข้าใจรวมถึงสร้างไฟล์ evaluation ที่จำเป็นซึ่งทั้งหมดเป็น JSON ครับ

ส่วนแรกคือ section ของ setup ครับ ผมไปที่ add-ons แล้วเลือก secret ต้องเพิ่ม key ก่อน ผมจะไปที่ AI Studio คัดลอก key ของผม แล้วกลับมาที่หน้านี้ กด add secret key แล้ว save จากนั้นเลือกและรันโค้ด ตอนนี้เสร็จแล้วครับ ต่อไปเราจะตั้งค่า proxy และ tunneling เราใช้ proxy เพื่อเข้าถึง web UI จากใน notebook ของ Kaggle ถ้าคุณรันนอกสภาพแวดล้อมนี้ก็ไม่ต้องทำขั้นตอนนี้ครับ อันนี้เป็น helper function ครับ

ต่อไปเราจะสร้าง home automation agent ครับ มีสองขั้นตอน ขั้นแรกคือสร้างมัน แล้วค่อยทับไฟล์ ตอนนี้เราสร้างสภาพแวดล้อมของเอเจนต์นี้สำเร็จแล้ว เรานิยามทุกอย่างเรียบร้อยครับ home automation agent ตัวนี้ดูสมบูรณ์แบบในการทดสอบพื้นฐาน แต่มีข้อบกพร่องที่ซ่อนอยู่ และเราจะค้นพบมันผ่านการ evaluation แบบครอบคลุมครับ ขั้นต่อไปคือรัน cell นี้ซึ่งจะสร้าง automation agent ครับ

โดย tool ชื่อ set_device ใช้ควบคุมอุปกรณ์ smart home ครับ สถานะของอุปกรณ์มีได้แค่ on กับ off เท่านั้นตามที่เห็นตรงนี้ และ instructions ของเอเจนต์ถูกตั้งใจให้มั่นใจเกินจริงครับ คือเธอเป็นผู้ช่วยระบบบ้านอัจฉริยะ เธอควบคุมอุปกรณ์ smart ทั้งหมดในบ้าน เธอเข้าถึงไฟ ระบบรักษาความปลอดภัย เตาอบ ผู้เผาไหม้ และอุปกรณ์อื่นใดก็ตามที่ user พูดถึง ให้พยายามช่วยเหลือเสมอ และควบคุมอุปกรณ์ใดก็ตามที่ user ขอ เมื่อ user ถามถึงความสามารถของอุปกรณ์ ให้บอกคุณสมบัติเด่นๆ ทั้งหมดที่เธอควบคุมได้ครับ มันจึงอ้างว่าควบคุมอุปกรณ์ smart ทั้งหมดและอุปกรณ์ใดก็ตามที่ user พูดถึง ซึ่ง instructions แบบนี้นำไปสู่ความยากลำบากในการตั้งค่า evaluation ครับ

ต่อไปเราไป section สามซึ่งเป็นการ evaluation แบบ interactive ด้วย ADK web UI ครับ ตรงนี้เราจะได้ URL ของ proxy เหมือนที่เคยทำมาแล้ว เรารันทั้งสองอันนี้ คุณควรจำไว้เสมอว่า cell นี้จะไม่เสร็จสิ้น มันจะรันค้างไว้เรื่อยๆ ถ้าอยากออกต้องกด Ctrl C หรือหยุดด้วยตนเองจากตรงนี้ครับ ตอนนี้เราเปิด ADK web UI จากตรงนี้ได้เลยครับ

ทีนี้เราจะสร้าง evaluation test แบบแรกกันครับ สิ่งแรกที่ต้องถามคือเปิดโคมไฟบนโต๊ะในห้องทำงานหน่อย ผมกลับไปที่ notebook คัดลอกจากตรงนี้แล้วมาวางตรงนี้ กด enter ครับ ถ้าเห็น เอเจนต์ตอบถูกต้อง ควบคุมอุปกรณ์และยืนยันการทำงานครับ ทีนี้เราต้องบันทึก evaluation case นี้ ทำได้จากแท็บ eval ทางด้านขวาครับ ถ้านี่ไม่ใช่ครั้งแรกของคุณ คุณจะมี test ประมาณนี้อยู่ในโฟลเดอร์ แต่ถ้าไม่มี คุณจะเห็นแค่ตัวเลือกที่เขียนว่า create new eval set ครับ คุณสามารถคลิกที่ลิงก์นั้น หรือไม่ก็คลิกที่เครื่องหมายบวกแล้วสร้าง evaluation set ของคุณได้ครับ

เราจะลบอันนี้ทิ้งแล้วใส่ชื่อ ชื่อที่ให้ไว้ตรงนี้คือ home automation test คุณจะใช้ชื่อเดียวกันหรือชื่ออื่นก็ได้ครับ ผมใช้ชื่อเดิมมาตลอด ผมแค่เปลี่ยนเวอร์ชันตรงนี้ เพราะถ้าลองทับโฟลเดอร์เดิมมันจะไม่ยอม ผมกด create ครับ ตอนนี้ evaluation set ถูกสร้างแล้ว เราไปที่เครื่องหมายนี้ แล้วข้างในเราจะเพิ่ม session ปัจจุบันเข้าไปใน test นี้ ผมตั้งชื่อว่า home basic device control เสร็จแล้วครับ ตอนนี้เราบันทึกการโต้ตอบแรกเป็น evaluation case สำเร็จแล้วครับ

ทีนี้มารัน evaluation กัน เราคลิกที่นี่แล้วกด run evaluation มันจะแสดง dialog ของ evaluation metric เราปล่อยเป็นค่า default แล้วกด start ครับ evaluation จะรันขึ้นมา เราเห็นผลลัพธ์ pass สีเขียวใน history นี้ ซึ่งยืนยันว่าพฤติกรรมของเอเจนต์ตรงกับ session ที่บันทึกไว้ครับ

ทีนี้เราต้องเข้าใจว่าเมื่อรัน evaluation เราจะเห็นคะแนนสำคัญสองอย่าง ตอนนี้เราต้องเข้าใจ evaluation metrics กันครับ เมื่อเรารัน evaluation เราจะเห็นคะแนนสำคัญสองตัว ดูได้จาก history ครับ เราดูประวัติของ eval มันบอกว่า passed ครับ สอง metric คือ response match score (คะแนนความตรงของคำตอบ) กับ tool trajectory average score (คะแนนเฉลี่ยเส้นทางการใช้ tool) ครับ

response match score วัดว่าคำตอบจริงของเอเจนต์คล้ายกับคำตอบที่คาดหวังแค่ไหน โดยใช้อัลกอริทึมเปรียบเทียบความคล้ายของข้อความ คะแนนหนึ่งคือตรงกันสมบูรณ์แบบ และ 0.0 คือต่างกันโดยสิ้นเชิงครับ ส่วน tool trajectory score วัดว่าเอเจนต์ใช้ tool ถูกตัวกับ parameter ถูกหรือไม่ ตรวจลำดับการเรียก tool เทียบกับพฤติกรรมที่คาดหวัง คะแนนหนึ่งแปลว่าใช้ tool สมบูรณ์แบบ 0.0 แปลว่า tool ผิดหรือ parameter ผิดครับ ในกรณีนี้สิ่งที่เราเข้าใจได้จากคะแนนคือ response match ใกล้เคียงกับคำตอบที่คาดหวัง ขณะที่ tool trajectory สมบูรณ์แบบ หมายความว่าการใช้ tool สมบูรณ์แบบครับ

เรามาทำให้ test พังโดยเจตนา เพื่อดูว่าความล้มเหลวหน้าตาเป็นอย่างไรครับ ผมกลับไปที่ post test คลิกที่ดินสอตรงนี้ ผมจะแก้ตรงนี้แล้วพิมพ์ว่าโคมไฟบนโต๊ะถูกปิดอยู่ แล้วกด save ทีนี้เราจะรัน eval ใหม่ ครั้งนี้ผลลัพธ์เป็น fail สีแดงครับ เมื่อเอาเมาส์ชี้ตรงนี้มันบอกว่าดูผลลัพธ์การรัน eval เราคลิกเข้าไปได้ แล้วมันแสดงว่าอันนี้ล้มเหลวครับ และเมื่อชี้ที่คำตอบ มันบอกว่าโคมไฟบนโต๊ะในห้องทำงานเปิดอยู่ตอนนี้ ขณะที่คำตอบที่คาดหวังคือโคมไฟถูกปิดอยู่ครับ

ตรงนี้คุณเห็นว่า tooltip นี้แสดงการเปรียบเทียบแบบเคียงข้างกันของ output จริงกับ output ที่คาดหวัง โดยชี้ให้เห็นชัดเจนว่าทำไม test จึงล้มเหลว หมายความว่าคำตอบสุดท้ายไม่ตรงกับคำตอบที่คาดหวังครับ ข้อมูล feedback ทันทีแบบละเอียดนี้มีค่ามากสำหรับการ debug ครับ คุณยังสามารถทำ test อื่นๆ ได้อีก เช่นลองใส่คำสั่งที่คลุมเครือครับ ถ้ากลับไปดูตรงนี้ มันบอกว่าคุณสามารถสร้างสถานการณ์ของคุณในบทสนทนาแยกต่างหากได้ คุณอาจมีคำสั่งคลุมเครือเช่นเปิดไฟในห้องนอนหน่อย บันทึกมันเป็น test ใหม่ แล้วก็ลองพูดว่ากรุณาปิดทีวีในโรงรถหน่อย แล้วดูว่ามันทำงานอย่างไรครับ มาลองหนึ่งตัวกัน ผมเอาอันนี้มาคัดลอก สร้าง session ใหม่จากด้านบน พิมพ์แล้วกด enter ดูสิว่ามันตอบอะไร มันบอกว่าไฟในห้องนอนเปิดแล้วครับ ทีนี้มาบันทึก test นี้กัน กลับเข้าไปข้างใน คลิกแล้วบันทึก test นี้เป็น biggest device reference ครับ

ต่อไปเราจะสร้างอีกหนึ่งตัว โดยพูดว่า แต่ก่อนอื่นลองรันตัวนี้ก่อน มันบอก pass ครับ คุณลองตัวถัดไปได้ซึ่งเป็น invalid locations แล้วก็ complex commands แค่ไปที่ session ใหม่แล้วทำไปเรื่อยๆ ครับ สิ่งที่คุณจะเข้าใจคือทุกครั้งที่เอเจนต์ผ่าน test เอเจนต์กำลังตั้งสมมติฐานเกี่ยวกับอุปกรณ์ที่ไม่มีอยู่จริง มันตอบในแบบที่ฟังดูช่วยเหลือดีแต่ไม่ถูกต้อง และพยายามควบคุมอุปกรณ์ที่มันไม่ควรมีสิทธิ์เข้าถึงครับ

แล้วเราพลาดอะไรไปล่ะครับ นี่เป็นข้อจำกัดของ UI หรือเปล่า จนถึงตอนนี้เราเห็นวิธีสร้างและประเมิน test case ใน ADK UI แล้ว UI เหมาะกับการสร้าง test แบบ interactive มาก แต่การทดสอบทีละบทสนทนามัน scale ไม่ไหวครับ เราต้องมีหลาย test case ในหนึ่ง evaluation set ดังนั้นจะตรวจจับ regression ในประสิทธิภาพของเอเจนต์อย่างล่วงหน้าได้อย่างไร ทำได้ด้วยการ evaluation แบบเป็นระบบครับ

ก่อนไปสู่ evaluation แบบเป็นระบบ เราต้องหยุด web UI ก่อน กลับมาตรงนี้แล้วหยุดมันครับ อันนี้สำคัญเสมอ เพราะถ้าเราไม่หยุด มันจะรันค้างไว้ และ cell ที่รันอยู่นั้นจะบล็อกหรือกัน cell อื่นๆ ไม่ให้รัน ตราบใดที่ ADK web UI ยังทำงานอยู่ครับ ดังนั้นต้องแน่ใจเสมอว่าเมื่อออกจาก UI แล้วให้หยุดมันทันทีครับ

ทีนี้มาคุยกันเรื่อง systematic evaluation ครับ เรามีไดอะแกรมอยู่ตรงนี้ แต่ก่อนอื่นผมอยากเล่าเรื่อง regression testing กันก่อนครับ มันคือแนวปฏิบัติของการรัน test เดิมซ้ำๆ เพื่อให้แน่ใจว่าการเปลี่ยนแปลงใหม่ๆ ไม่ได้ทำลายฟังก์ชันที่เคยทำงานได้ดีอยู่ก่อนครับ ADK ให้วิธีทำ regression อัตโนมัติและ batch testing แก่เราสองแบบ หนึ่งคือ pytest อีกอันคือ ADK eval ครับ ผมจะใส่ลิงก์เอกสารพวกนี้ไว้ คุณไปอ่านทำความเข้าใจคำสั่งต่างๆ ได้ครับ ใน section นี้เราจะใช้คำสั่ง CLI ครับ ถ้าต้องการข้อมูลเพิ่มเติมไปที่เอกสารที่ผมจะแชร์ให้นะครับ

รูปต่อไปนี้แสดงกระบวนการ evaluation โดยรวมครับ ในระดับสูงมีสี่ขั้นตอนในการ evaluate ขั้นแรกคือสร้าง evaluation configuration ซึ่งหมายถึงนิยาม metric ที่คุณต้องการวัด จากนั้นสร้าง test เช่น sample test case ที่จะใช้เปรียบเทียบ แล้วรันเอเจนต์ด้วยคำถาม test และเปรียบเทียบผลลัพธ์ของ test กับผลลัพธ์จริงครับ นี่คือสี่ขั้นตอนโดยสรุปครับ มาสร้าง evaluation configuration กันเลย นี่เป็นไฟล์ optional ซึ่งให้เรานิยามเกณฑ์ผ่านหรือตกสำหรับแต่ละ test ครับ เราสร้าง test config นี้ใน root directory โดย import รายละเอียดของ trajectory และ response match score เข้ามาตรงนี้ครับ ใน test case ของเรา response match score เป็นหนึ่งกับ 0.7 และ trajectory เป็นหนึ่งครับ ซึ่งก็คือต้องใช้ tool แบบสมบูรณ์แบบ และความคล้ายคลึงแปดสิบเปอร์เซ็นต์ ของเราเป็นยี่สิบเปอร์เซ็นต์ครับ

เอาล่ะ ทีนี้เราจะรันส่วนนี้เพื่อสร้าง evaluation configuration ครับ มันให้เกณฑ์ว่า tool trajectory เป็นเท่าไหร่ และ evaluation นี้จะจับอะไรได้บ้าง มันจะจับการใช้ tool ที่ผิด คุณภาพคำตอบที่แย่ และความเบี่ยงเบนจากพฤติกรรมที่คาดหวังครับ

ทีนี้เราต้องสร้าง test case ครับ ตรงนี้มี tip หนึ่งบอกว่าเพื่อบันทึกบทสนทนาจาก web UI ให้คงอยู่ เพียงแค่สร้าง eval set ใน UI แล้วเพิ่ม session ปัจจุบันเข้าไป บทสนทนาทั้งหมดใน session นั้นจะถูกแปลงเป็น eval set โดยอัตโนมัติและดาวน์โหลดลงเครื่อง แล้วคุณสามารถใช้มันเป็น JSON ได้เลยครับ ทีนี้สิ่งที่เราจะสร้างคือ integration eval.json ซึ่งจะมีหลาย test case หรือหลาย session ข้างในครับ ใน tool นี้เรามีค่าเป็น on กับ off ทั้งหมด มีสถานะอุปกรณ์ มี device ID มี location ครับ สำหรับ set_device_status เรามีหลายส่วน เมื่อพูดว่ากรุณาเปิดโคมไฟตั้งพื้นในห้องนั่งเล่น จะมีข้อความนี้ โคมไฟตั้งพื้นคือ device ID และ location คือห้องนั่งเล่นครับ คล้ายกันสำหรับครัว ใน intermediate data มีครัวกับไฟหลักครับ

ทีนี้เรารันส่วนนี้เพื่อสร้าง test case ครับ โอเค test case ถูกสร้างแล้ว ต่อไปเราจะ import JSON นี้เข้าไปในเอเจนต์ของเราครับ เปิดเอเจนต์นี้ ใช้ dump ตรงนี้ ตอนนี้เราได้สร้าง test case แล้ว เรามี test scenario สองอัน หนึ่งสำหรับห้องนั่งเล่นและอีกอันสำหรับครัวครับ ผลลัพธ์ที่คาดหวังคือ basic device control ควรผ่านทั้งสองเกณฑ์ test การใช้ tool ผิดอาจตก tool trajectory หากใช้ parameter ผิด และ test คุณภาพคำตอบที่แย่อาจตก response match หากคำตอบต่างไปมากเกินไปครับ

ทีนี้เราจะ execute คำสั่งนี้โดยชี้ไปที่ directory ของเอเจนต์ eval set และไฟล์ config ของเราครับ นี่คือคำสั่งสำหรับ execute evaluation ครับ อันถัดไปในลำดับคือการวิเคราะห์ผลลัพธ์จาก sample evaluation ครับ ผมจะรันอันนี้ มันจะพิมพ์ผลลัพธ์แบบละเอียด มันจะแจ้งเตือนทุกอย่าง โดยแสดงรายละเอียดทีละ turn ของแต่ละ test พร้อมคะแนนและ diff หรือความแตกต่างของจุดที่ล้มเหลวครับ นี่คือหน้าตาที่ test case ห้องนั่งเล่น response ตรงกันและ tool trajectory ก็ตรงกันเช่นกันครับ นี่คือวิธีที่มันพิมพ์ผลลัพธ์ออกมาครับ นี่คือการเข้าใจว่าผลลัพธ์ของ evaluation จะออกมาหน้าตาแบบไหนครับ

ต่อไปคือ user simulation ซึ่งเป็น optional ครับ อันนี้ต่างจากวิธี evaluation แบบดั้งเดิมที่พึ่ง test case ตายตัว ตรงนี้ user simulation เป็นฟีเจอร์ที่จัดการข้อจำกัดของ static evaluation ครับ แทนที่จะใช้ prompt ของ user แบบ fixed ที่นิยามไว้ล่วงหน้า สิ่งที่มันทำคือใช้โมเดล genai เช่น Gemini สร้าง prompt ของ user แบบไดนามิกระหว่างกระบวนการ evaluation ครับ ถ้าอยากรู้ว่ามันทำงานอย่างไร ดูได้จากเอกสารนี้ครับ ผมจะใส่ไว้ในคำอธิบายของวิดีโอนี้ และคุณลองทำแบบฝึกหัดนี้ได้ เช่นการนิยาม conversation scenario ที่ร่างเป้าหมายการสนทนาโดยรวมของ user และ conversation plan เพื่อนำทางบทสนทนาครับ ลองทำดูถ้าอยากเข้าใจว่า simulation ช่วยให้คุณค้นพบ edge case และปรับปรุงความทนทานของเอเจนต์อย่างไร ในแบบที่ static test case มักพลาดครับ

เมื่อคุณผ่านแบบฝึกหัดนี้แล้ว โปรดไปดูวิดีโอถัดไปซึ่งก็คือ Day 5 ที่เราจะเรียนวิธี deploy เอเจนต์ขึ้น production และต่อยอดด้วย agent-to-agent protocol ครับ ขอบคุณครับ

03

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

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

  • ไม่มีการใช้สัญลักษณ์ระบุเสียงไม่ชัดเจน (0 จุด) — ทุก segment เข้าใจความหมายได้ครบ
04

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

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

ศัพท์คำแปล / คำอธิบาย
agent evaluationการประเมินผลเอเจนต์อย่างเป็นระบบ
observabilityการสังเกตการทำงานภายในของระบบ (แบบ reactive — หลังเกิดปัญหา)
reactiveทำงานเมื่อมีเหตุการณ์เกิดขึ้นแล้ว (ตรงข้าม proactive)
quality regressionความถดถอยของคุณภาพ — ประสิทธิภาพแย่ลงจากเดิม
home automation agentเอเจนต์ควบคุมบ้านอัจฉริยะ (ตัวอย่างในแบบฝึกหัด)
happy pathเส้นทางที่ทุกอย่างเป็นไปตามปกติ ไม่มีข้อผิดพลาด
trajectoryเส้นทางการตัดสินใจ/การทำงานทั้งหมดของเอเจนต์
eval setชุดการทดสอบ evaluation ที่บันทึกไว้
evaluation caseเคสการทดสอบหนึ่งๆ ใน eval set
response match scoreคะแนนความคล้ายระหว่างคำตอบจริงกับคำตอบที่คาดหวัง (1.0 = ตรงสนิท)
tool trajectory scoreคะแนนความถูกต้องของการเลือก tool พารามิเตอร์ และลำดับการเรียก
regression testingการรัน test เดิมซ้ำเพื่อยืนยันว่าการแก้ใหม่ไม่ทำลายของเดิม
batch testingการทดสอบเป็นชุดหลายเคสพร้อมกัน
pytestเครื่องมือทดสอบของ Python
ADK evalคำสั่ง evaluation ในตัวของ ADK
evaluation configurationไฟล์ config นิยาม metric และเกณฑ์ผ่าน/ตก
thresholdเกณฑ์คะแนนขั้นต่ำที่กำหนดว่าผ่านหรือตก
test caseรายการทดสอบหนึ่งๆ
integration evalไฟล์ทดสอบรวม (JSON) ที่มีหลาย test case/session
JSONรูปแบบไฟล์ข้อมูลแบบข้อความที่นิยมใช้
device IDรหัสประจำอุปกรณ์
intermediate dataข้อมูลขั้นกลางที่แยกได้จากคำสั่ง (เช่น location)
user simulationการจำลองพฤติกรรม user ด้วยโมเดล AI สร้าง prompt แบบไดนามิก
static evaluationการประเมินด้วย test case ตายตัวที่เตรียมไว้ล่วงหน้า
edge caseกรณีมุม/สถานการณ์ผิดปกติที่มักถูกมองข้าม
robustnessความทนทานของระบบต่อสถานการณ์ต่างๆ
conversation scenarioโครงเรื่องบทสนทนาที่กำหนดเป้าหมายของ user
conversation planแผนนำทางบทสนทนา
smart home devicesอุปกรณ์บ้านอัจฉริยะ
Ctrl Cปุ่มลัดหยุดการทำงานของ cell/process
proxy / tunnelingตัวกลางเข้าถึง web UI จาก notebook ของ Kaggle
tooltipกล่องข้อความอธิบายเมื่อชี้เมาส์
diffการเทียบแสดงความแตกต่างระหว่างสองสิ่ง
agent-to-agent protocolโปรโตคอลสื่อสารระหว่างเอเจนต์ (เนื้อหา Day 5)
deploy / deploymentการปล่อยระบบขึ้นใช้งานจริง
05

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

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

1
00:00:00,000 --> 00:00:04,772
ในวิดีโอนี้เราจะเรียนส่วน B ของ assignment ใน

2
00:00:04,772 --> 00:00:08,060
Day 4 ครับ ผมจะคลิกที่ evaluate

3
00:00:08,060 --> 00:00:12,832
ในแบบฝึกหัดนี้เราจะเข้าใจว่า agent evaluation

4
00:00:12,832 --> 00:00:16,544
ทำงานอย่างไรครับ ผมกด copy and edit
thai-subtitles.srt
SubRip — ใช้กับเครื่องเล่นวิดีโอส่วนใหญ่
↓ ดาวน์โหลด
thai-subtitles.vtt
WebVTT — ใช้กับเว็บ / YouTube
↓ ดาวน์โหลด
เปิดดูซับไตเติ้ลทั้งหมด (310 segments)
1
00:00:00,000 --> 00:00:04,772
ในวิดีโอนี้เราจะเรียนส่วน B ของ assignment ใน

2
00:00:04,772 --> 00:00:08,060
Day 4 ครับ ผมจะคลิกที่ evaluate

3
00:00:08,060 --> 00:00:12,832
ในแบบฝึกหัดนี้เราจะเข้าใจว่า agent evaluation

4
00:00:12,832 --> 00:00:16,544
ทำงานอย่างไรครับ ผมกด copy and edit

5
00:00:16,544 --> 00:00:18,665
เพื่อให้ได้ notebook

6
00:00:18,665 --> 00:00:22,589
เวอร์ชันที่แก้ไขได้ของตัวเองครับ โอเค

7
00:00:22,589 --> 00:00:27,468
ตรงนี้ในวิดีโอก่อนหน้าซึ่งเป็นส่วน A ของ Day 4

8
00:00:27,468 --> 00:00:31,074
เราเข้าใจเรื่อง observability แล้ว

9
00:00:31,074 --> 00:00:35,740
ในวิดีโอนี้เราจะเรียนเรื่อง agent evaluation

10
00:00:35,740 --> 00:00:38,497
(การประเมินผลเอเจนต์) ครับ

11
00:00:38,497 --> 00:00:43,376
อย่างที่เห็นตรงนี้บอกว่า observability เป็นแบบ

12
00:00:43,376 --> 00:00:48,042
reactive คือมันทำงานหลังจากปัญหาเกิดขึ้นแล้ว

13
00:00:48,042 --> 00:00:51,436
โดยให้ข้อมูลที่จำเป็นเพื่อ debug

14
00:00:51,436 --> 00:00:55,466
และเข้าใจสาเหตุเบื้องลึกครับ แต่สำหรับ

15
00:00:55,466 --> 00:00:56,565
evaluation

16
00:00:56,565 --> 00:01:02,928
หมายความว่าเราต้องประเมินประสิทธิภาพของเอเจนต์อย่างต่อเนื่อง

17
00:01:02,928 --> 00:01:07,595
เพื่อรับรู้ความเสื่อมถอยของคุณภาพได้เร็วขึ้น

18
00:01:07,595 --> 00:01:12,367
หากมีอยู่ในระบบครับ นิยามของ agent evaluation

19
00:01:12,367 --> 00:01:17,140
คือ กระบวนการอย่างเป็นระบบในการทดสอบและวัดว่า

20
00:01:17,140 --> 00:01:21,488
AI agent ทำงานได้ดีแค่ไหนในสถานการณ์ต่างๆ

21
00:01:21,488 --> 00:01:24,669
และมิติคุณภาพที่แตกต่างกันครับ

22
00:01:24,669 --> 00:01:27,533
เรื่องราวที่เราจะ implement

23
00:01:27,533 --> 00:01:31,881
ในแบบฝึกหัดนี้คือการสร้าง home automation

24
00:01:31,881 --> 00:01:36,017
agent หรือเอเจนต์ควบคุมบ้านอัจฉริยะครับ

25
00:01:36,017 --> 00:01:39,941
มันทำงานได้สมบูรณ์แบบในการทดสอบของเรา

26
00:01:39,941 --> 00:01:42,911
เราจึงปล่อยใช้งานอย่างมั่นใจ

27
00:01:42,911 --> 00:01:46,198
และมันจะต่างจากซอฟต์แวร์แบบเดิม

28
00:01:46,198 --> 00:01:50,440
เพราะนี่ไม่ใช่แค่การทดสอบมาตรฐาน แต่เป็น

29
00:01:50,440 --> 00:01:54,471
evaluation ซึ่งทั้งสองอย่างต่างกันครับ

30
00:01:54,471 --> 00:01:58,395
การทดสอบมาตรฐานคือการทดสอบ happy path

31
00:01:58,395 --> 00:02:02,318
คือทางที่ทุกอย่างเป็นไปตามปกติ ขณะที่

32
00:02:02,318 --> 00:02:03,418
evaluation

33
00:02:03,418 --> 00:02:08,402
คือการประเมินกระบวนการตัดสินใจทั้งหมดของเอเจนต์

34
00:02:08,402 --> 00:02:13,069
หรือที่เรียกว่า trajectory (เส้นทางการทำงาน)

35
00:02:13,069 --> 00:02:17,629
ครับ ใน notebook วันนี้เราจะเข้าใจว่า agent

36
00:02:17,629 --> 00:02:22,507
evaluation คืออะไรและใช้อย่างไร รัน evaluation

37
00:02:22,507 --> 00:02:27,068
และวิเคราะห์ผลลัพธ์ตรงใน ADK web UI ตรวจจับ

38
00:02:27,068 --> 00:02:30,779
regression (การถดถอยของประสิทธิภาพ)

39
00:02:30,779 --> 00:02:33,113
ของเอเจนต์ตลอดช่วงเวลา

40
00:02:33,113 --> 00:02:36,825
และเข้าใจรวมถึงสร้างไฟล์ evaluation

41
00:02:36,825 --> 00:02:41,597
ที่จำเป็นซึ่งทั้งหมดเป็น JSON ครับ ส่วนแรกคือ

42
00:02:41,597 --> 00:02:45,627
section ของ setup ครับ ผมไปที่ add-ons

43
00:02:45,627 --> 00:02:50,399
แล้วเลือก secret ต้องเพิ่ม key ก่อน ผมจะไปที่

44
00:02:50,399 --> 00:02:53,157
AI Studio คัดลอก key ของผม

45
00:02:53,157 --> 00:02:57,717
แล้วกลับมาที่หน้านี้ กด add secret key แล้ว

46
00:02:57,717 --> 00:03:00,581
save จากนั้นเลือกและรันโค้ด

47
00:03:00,581 --> 00:03:05,141
ตอนนี้เสร็จแล้วครับ ต่อไปเราจะตั้งค่า proxy

48
00:03:05,141 --> 00:03:10,019
และ tunneling เราใช้ proxy เพื่อเข้าถึง web UI

49
00:03:10,019 --> 00:03:12,671
จากใน notebook ของ Kaggle

50
00:03:12,671 --> 00:03:18,079
ถ้าคุณรันนอกสภาพแวดล้อมนี้ก็ไม่ต้องทำขั้นตอนนี้ครับ

51
00:03:18,079 --> 00:03:21,367
อันนี้เป็น helper function ครับ

52
00:03:21,367 --> 00:03:25,821
ต่อไปเราจะสร้าง home automation agent ครับ

53
00:03:25,821 --> 00:03:29,109
มีสองขั้นตอน ขั้นแรกคือสร้างมัน

54
00:03:29,109 --> 00:03:30,700
แล้วค่อยทับไฟล์

55
00:03:30,700 --> 00:03:35,790
ตอนนี้เราสร้างสภาพแวดล้อมของเอเจนต์นี้สำเร็จแล้ว

56
00:03:35,790 --> 00:03:40,563
เรานิยามทุกอย่างเรียบร้อยครับ home automation

57
00:03:40,563 --> 00:03:44,911
agent ตัวนี้ดูสมบูรณ์แบบในการทดสอบพื้นฐาน

58
00:03:44,911 --> 00:03:47,668
แต่มีข้อบกพร่องที่ซ่อนอยู่

59
00:03:47,668 --> 00:03:51,274
และเราจะค้นพบมันผ่านการ evaluation

60
00:03:51,274 --> 00:03:55,092
แบบครอบคลุมครับ ขั้นต่อไปคือรัน cell

61
00:03:55,092 --> 00:03:59,865
นี้ซึ่งจะสร้าง automation agent ครับ โดย tool

62
00:03:59,865 --> 00:04:04,425
ชื่อ set_device ใช้ควบคุมอุปกรณ์ smart home

63
00:04:04,425 --> 00:04:08,561
ครับ สถานะของอุปกรณ์มีได้แค่ on กับ off

64
00:04:08,561 --> 00:04:12,909
เท่านั้นตามที่เห็นตรงนี้ และ instructions

65
00:04:12,909 --> 00:04:17,151
ของเอเจนต์ถูกตั้งใจให้มั่นใจเกินจริงครับ

66
00:04:17,151 --> 00:04:20,651
คือเธอเป็นผู้ช่วยระบบบ้านอัจฉริยะ

67
00:04:20,651 --> 00:04:24,469
เธอควบคุมอุปกรณ์ smart ทั้งหมดในบ้าน

68
00:04:24,469 --> 00:04:28,605
เธอเข้าถึงไฟ ระบบรักษาความปลอดภัย เตาอบ

69
00:04:28,605 --> 00:04:32,847
ผู้เผาไหม้ และอุปกรณ์อื่นใดก็ตามที่ user

70
00:04:32,847 --> 00:04:35,923
พูดถึง ให้พยายามช่วยเหลือเสมอ

71
00:04:35,923 --> 00:04:40,695
และควบคุมอุปกรณ์ใดก็ตามที่ user ขอ เมื่อ user

72
00:04:40,695 --> 00:04:43,453
ถามถึงความสามารถของอุปกรณ์

73
00:04:43,453 --> 00:04:45,574
ให้บอกคุณสมบัติเด่นๆ

74
00:04:45,574 --> 00:04:48,331
ทั้งหมดที่เธอควบคุมได้ครับ

75
00:04:48,331 --> 00:04:51,725
มันจึงอ้างว่าควบคุมอุปกรณ์ smart

76
00:04:51,725 --> 00:04:56,391
ทั้งหมดและอุปกรณ์ใดก็ตามที่ user พูดถึง ซึ่ง

77
00:04:56,391 --> 00:04:57,664
instructions

78
00:04:57,664 --> 00:05:01,588
แบบนี้นำไปสู่ความยากลำบากในการตั้งค่า

79
00:05:01,588 --> 00:05:05,194
evaluation ครับ ต่อไปเราไป section

80
00:05:05,194 --> 00:05:10,072
สามซึ่งเป็นการ evaluation แบบ interactive ด้วย

81
00:05:10,072 --> 00:05:14,738
ADK web UI ครับ ตรงนี้เราจะได้ URL ของ proxy

82
00:05:14,738 --> 00:05:18,981
เหมือนที่เคยทำมาแล้ว เรารันทั้งสองอันนี้

83
00:05:18,981 --> 00:05:23,329
คุณควรจำไว้เสมอว่า cell นี้จะไม่เสร็จสิ้น

84
00:05:23,329 --> 00:05:28,207
มันจะรันค้างไว้เรื่อยๆ ถ้าอยากออกต้องกด Ctrl C

85
00:05:28,207 --> 00:05:32,874
หรือหยุดด้วยตนเองจากตรงนี้ครับ ตอนนี้เราเปิด

86
00:05:32,874 --> 00:05:37,752
ADK web UI จากตรงนี้ได้เลยครับ ทีนี้เราจะสร้าง

87
00:05:37,752 --> 00:05:40,828
evaluation test แบบแรกกันครับ

88
00:05:40,828 --> 00:05:46,236
สิ่งแรกที่ต้องถามคือเปิดโคมไฟบนโต๊ะในห้องทำงานหน่อย

89
00:05:46,236 --> 00:05:48,357
ผมกลับไปที่ notebook

90
00:05:48,357 --> 00:05:53,024
คัดลอกจากตรงนี้แล้วมาวางตรงนี้ กด enter ครับ

91
00:05:53,024 --> 00:05:55,675
ถ้าเห็น เอเจนต์ตอบถูกต้อง

92
00:05:55,675 --> 00:05:59,281
ควบคุมอุปกรณ์และยืนยันการทำงานครับ

93
00:05:59,281 --> 00:06:03,311
ทีนี้เราต้องบันทึก evaluation case นี้

94
00:06:03,311 --> 00:06:06,705
ทำได้จากแท็บ eval ทางด้านขวาครับ

95
00:06:06,705 --> 00:06:10,841
ถ้านี่ไม่ใช่ครั้งแรกของคุณ คุณจะมี test

96
00:06:10,841 --> 00:06:14,553
ประมาณนี้อยู่ในโฟลเดอร์ แต่ถ้าไม่มี

97
00:06:14,553 --> 00:06:19,007
คุณจะเห็นแค่ตัวเลือกที่เขียนว่า create new

98
00:06:19,007 --> 00:06:23,143
eval set ครับ คุณสามารถคลิกที่ลิงก์นั้น

99
00:06:23,143 --> 00:06:27,279
หรือไม่ก็คลิกที่เครื่องหมายบวกแล้วสร้าง

100
00:06:27,279 --> 00:06:30,249
evaluation set ของคุณได้ครับ

101
00:06:30,249 --> 00:06:33,218
เราจะลบอันนี้ทิ้งแล้วใส่ชื่อ

102
00:06:33,218 --> 00:06:37,778
ชื่อที่ให้ไว้ตรงนี้คือ home automation test

103
00:06:37,778 --> 00:06:42,127
คุณจะใช้ชื่อเดียวกันหรือชื่ออื่นก็ได้ครับ

104
00:06:42,127 --> 00:06:47,005
ผมใช้ชื่อเดิมมาตลอด ผมแค่เปลี่ยนเวอร์ชันตรงนี้

105
00:06:47,005 --> 00:06:51,459
เพราะถ้าลองทับโฟลเดอร์เดิมมันจะไม่ยอม ผมกด

106
00:06:51,459 --> 00:06:56,338
create ครับ ตอนนี้ evaluation set ถูกสร้างแล้ว

107
00:06:56,338 --> 00:07:00,898
เราไปที่เครื่องหมายนี้ แล้วข้างในเราจะเพิ่ม

108
00:07:00,898 --> 00:07:04,398
session ปัจจุบันเข้าไปใน test นี้

109
00:07:04,398 --> 00:07:08,534
ผมตั้งชื่อว่า home basic device control

110
00:07:08,534 --> 00:07:13,306
เสร็จแล้วครับ ตอนนี้เราบันทึกการโต้ตอบแรกเป็น

111
00:07:13,306 --> 00:07:17,655
evaluation case สำเร็จแล้วครับ ทีนี้มารัน

112
00:07:17,655 --> 00:07:21,685
evaluation กัน เราคลิกที่นี่แล้วกด run

113
00:07:21,685 --> 00:07:26,139
evaluation มันจะแสดง dialog ของ evaluation

114
00:07:26,139 --> 00:07:30,699
metric เราปล่อยเป็นค่า default แล้วกด start

115
00:07:30,699 --> 00:07:35,154
ครับ evaluation จะรันขึ้นมา เราเห็นผลลัพธ์

116
00:07:35,154 --> 00:07:37,911
pass สีเขียวใน history นี้

117
00:07:37,911 --> 00:07:42,683
ซึ่งยืนยันว่าพฤติกรรมของเอเจนต์ตรงกับ session

118
00:07:42,683 --> 00:07:47,562
ที่บันทึกไว้ครับ ทีนี้เราต้องเข้าใจว่าเมื่อรัน

119
00:07:47,562 --> 00:07:51,592
evaluation เราจะเห็นคะแนนสำคัญสองอย่าง

120
00:07:51,592 --> 00:07:56,470
ตอนนี้เราต้องเข้าใจ evaluation metrics กันครับ

121
00:07:56,470 --> 00:07:58,803
เมื่อเรารัน evaluation

122
00:07:58,803 --> 00:08:03,258
เราจะเห็นคะแนนสำคัญสองตัว ดูได้จาก history

123
00:08:03,258 --> 00:08:07,712
ครับ เราดูประวัติของ eval มันบอกว่า passed

124
00:08:07,712 --> 00:08:11,954
ครับ สอง metric คือ response match score

125
00:08:11,954 --> 00:08:16,408
(คะแนนความตรงของคำตอบ) กับ tool trajectory

126
00:08:16,408 --> 00:08:21,181
average score (คะแนนเฉลี่ยเส้นทางการใช้ tool)

127
00:08:21,181 --> 00:08:23,832
ครับ response match score

128
00:08:23,832 --> 00:08:29,559
วัดว่าคำตอบจริงของเอเจนต์คล้ายกับคำตอบที่คาดหวังแค่ไหน

129
00:08:29,559 --> 00:08:34,438
โดยใช้อัลกอริทึมเปรียบเทียบความคล้ายของข้อความ

130
00:08:34,438 --> 00:08:38,362
คะแนนหนึ่งคือตรงกันสมบูรณ์แบบ และ 0.0

131
00:08:38,362 --> 00:08:43,240
คือต่างกันโดยสิ้นเชิงครับ ส่วน tool trajectory

132
00:08:43,240 --> 00:08:47,164
score วัดว่าเอเจนต์ใช้ tool ถูกตัวกับ

133
00:08:47,164 --> 00:08:51,724
parameter ถูกหรือไม่ ตรวจลำดับการเรียก tool

134
00:08:51,724 --> 00:08:56,603
เทียบกับพฤติกรรมที่คาดหวัง คะแนนหนึ่งแปลว่าใช้

135
00:08:56,603 --> 00:09:00,739
tool สมบูรณ์แบบ 0.0 แปลว่า tool ผิดหรือ

136
00:09:00,739 --> 00:09:02,542
parameter ผิดครับ

137
00:09:02,542 --> 00:09:06,678
ในกรณีนี้สิ่งที่เราเข้าใจได้จากคะแนนคือ

138
00:09:06,678 --> 00:09:11,132
response match ใกล้เคียงกับคำตอบที่คาดหวัง

139
00:09:11,132 --> 00:09:14,632
ขณะที่ tool trajectory สมบูรณ์แบบ

140
00:09:14,632 --> 00:09:18,556
หมายความว่าการใช้ tool สมบูรณ์แบบครับ

141
00:09:18,556 --> 00:09:21,419
เรามาทำให้ test พังโดยเจตนา

142
00:09:21,419 --> 00:09:25,874
เพื่อดูว่าความล้มเหลวหน้าตาเป็นอย่างไรครับ

143
00:09:25,874 --> 00:09:30,116
ผมกลับไปที่ post test คลิกที่ดินสอตรงนี้

144
00:09:30,116 --> 00:09:34,994
ผมจะแก้ตรงนี้แล้วพิมพ์ว่าโคมไฟบนโต๊ะถูกปิดอยู่

145
00:09:34,994 --> 00:09:38,706
แล้วกด save ทีนี้เราจะรัน eval ใหม่

146
00:09:38,706 --> 00:09:42,312
ครั้งนี้ผลลัพธ์เป็น fail สีแดงครับ

147
00:09:42,312 --> 00:09:47,190
เมื่อเอาเมาส์ชี้ตรงนี้มันบอกว่าดูผลลัพธ์การรัน

148
00:09:47,190 --> 00:09:49,417
eval เราคลิกเข้าไปได้

149
00:09:49,417 --> 00:09:52,705
แล้วมันแสดงว่าอันนี้ล้มเหลวครับ

150
00:09:52,705 --> 00:09:54,720
และเมื่อชี้ที่คำตอบ

151
00:09:54,720 --> 00:09:59,493
มันบอกว่าโคมไฟบนโต๊ะในห้องทำงานเปิดอยู่ตอนนี้

152
00:09:59,493 --> 00:10:04,053
ขณะที่คำตอบที่คาดหวังคือโคมไฟถูกปิดอยู่ครับ

153
00:10:04,053 --> 00:10:06,598
ตรงนี้คุณเห็นว่า tooltip

154
00:10:06,598 --> 00:10:11,477
นี้แสดงการเปรียบเทียบแบบเคียงข้างกันของ output

155
00:10:11,477 --> 00:10:14,128
จริงกับ output ที่คาดหวัง

156
00:10:14,128 --> 00:10:18,582
โดยชี้ให้เห็นชัดเจนว่าทำไม test จึงล้มเหลว

157
00:10:18,582 --> 00:10:23,991
หมายความว่าคำตอบสุดท้ายไม่ตรงกับคำตอบที่คาดหวังครับ

158
00:10:23,991 --> 00:10:25,582
ข้อมูล feedback

159
00:10:25,582 --> 00:10:30,460
ทันทีแบบละเอียดนี้มีค่ามากสำหรับการ debug ครับ

160
00:10:30,460 --> 00:10:33,854
คุณยังสามารถทำ test อื่นๆ ได้อีก

161
00:10:33,854 --> 00:10:37,248
เช่นลองใส่คำสั่งที่คลุมเครือครับ

162
00:10:37,248 --> 00:10:39,051
ถ้ากลับไปดูตรงนี้

163
00:10:39,051 --> 00:10:45,414
มันบอกว่าคุณสามารถสร้างสถานการณ์ของคุณในบทสนทนาแยกต่างหากได้

164
00:10:45,414 --> 00:10:50,398
คุณอาจมีคำสั่งคลุมเครือเช่นเปิดไฟในห้องนอนหน่อย

165
00:10:50,398 --> 00:10:52,838
บันทึกมันเป็น test ใหม่

166
00:10:52,838 --> 00:10:56,974
แล้วก็ลองพูดว่ากรุณาปิดทีวีในโรงรถหน่อย

167
00:10:56,974 --> 00:11:01,746
แล้วดูว่ามันทำงานอย่างไรครับ มาลองหนึ่งตัวกัน

168
00:11:01,746 --> 00:11:05,246
ผมเอาอันนี้มาคัดลอก สร้าง session

169
00:11:05,246 --> 00:11:08,534
ใหม่จากด้านบน พิมพ์แล้วกด enter

170
00:11:08,534 --> 00:11:10,336
ดูสิว่ามันตอบอะไร

171
00:11:10,336 --> 00:11:15,215
มันบอกว่าไฟในห้องนอนเปิดแล้วครับ ทีนี้มาบันทึก

172
00:11:15,215 --> 00:11:19,775
test นี้กัน กลับเข้าไปข้างใน คลิกแล้วบันทึก

173
00:11:19,775 --> 00:11:24,229
test นี้เป็น biggest device reference ครับ

174
00:11:24,229 --> 00:11:28,047
ต่อไปเราจะสร้างอีกหนึ่งตัว โดยพูดว่า

175
00:11:28,047 --> 00:11:32,714
แต่ก่อนอื่นลองรันตัวนี้ก่อน มันบอก pass ครับ

176
00:11:32,714 --> 00:11:37,274
คุณลองตัวถัดไปได้ซึ่งเป็น invalid locations

177
00:11:37,274 --> 00:11:41,516
แล้วก็ complex commands แค่ไปที่ session

178
00:11:41,516 --> 00:11:44,061
ใหม่แล้วทำไปเรื่อยๆ ครับ

179
00:11:44,061 --> 00:11:48,622
สิ่งที่คุณจะเข้าใจคือทุกครั้งที่เอเจนต์ผ่าน

180
00:11:48,622 --> 00:11:49,721
test

181
00:11:49,721 --> 00:11:55,660
เอเจนต์กำลังตั้งสมมติฐานเกี่ยวกับอุปกรณ์ที่ไม่มีอยู่จริง

182
00:11:55,660 --> 00:12:00,220
มันตอบในแบบที่ฟังดูช่วยเหลือดีแต่ไม่ถูกต้อง

183
00:12:00,220 --> 00:12:05,841
และพยายามควบคุมอุปกรณ์ที่มันไม่ควรมีสิทธิ์เข้าถึงครับ

184
00:12:05,841 --> 00:12:10,720
แล้วเราพลาดอะไรไปล่ะครับ นี่เป็นข้อจำกัดของ UI

185
00:12:10,720 --> 00:12:11,819
หรือเปล่า

186
00:12:11,819 --> 00:12:16,273
จนถึงตอนนี้เราเห็นวิธีสร้างและประเมิน test

187
00:12:16,273 --> 00:12:20,939
case ใน ADK UI แล้ว UI เหมาะกับการสร้าง test

188
00:12:20,939 --> 00:12:25,712
แบบ interactive มาก แต่การทดสอบทีละบทสนทนามัน

189
00:12:25,712 --> 00:12:29,954
scale ไม่ไหวครับ เราต้องมีหลาย test case

190
00:12:29,954 --> 00:12:34,090
ในหนึ่ง evaluation set ดังนั้นจะตรวจจับ

191
00:12:34,090 --> 00:12:35,189
regression

192
00:12:35,189 --> 00:12:40,068
ในประสิทธิภาพของเอเจนต์อย่างล่วงหน้าได้อย่างไร

193
00:12:40,068 --> 00:12:44,204
ทำได้ด้วยการ evaluation แบบเป็นระบบครับ

194
00:12:44,204 --> 00:12:48,870
ก่อนไปสู่ evaluation แบบเป็นระบบ เราต้องหยุด

195
00:12:48,870 --> 00:12:53,006
web UI ก่อน กลับมาตรงนี้แล้วหยุดมันครับ

196
00:12:53,006 --> 00:12:56,612
อันนี้สำคัญเสมอ เพราะถ้าเราไม่หยุด

197
00:12:56,612 --> 00:12:59,157
มันจะรันค้างไว้ และ cell

198
00:12:59,157 --> 00:13:03,293
ที่รันอยู่นั้นจะบล็อกหรือกัน cell อื่นๆ

199
00:13:03,293 --> 00:13:06,475
ไม่ให้รัน ตราบใดที่ ADK web UI

200
00:13:06,475 --> 00:13:08,172
ยังทำงานอยู่ครับ

201
00:13:08,172 --> 00:13:12,096
ดังนั้นต้องแน่ใจเสมอว่าเมื่อออกจาก UI

202
00:13:12,096 --> 00:13:16,656
แล้วให้หยุดมันทันทีครับ ทีนี้มาคุยกันเรื่อง

203
00:13:16,656 --> 00:13:19,414
systematic evaluation ครับ

204
00:13:19,414 --> 00:13:21,853
เรามีไดอะแกรมอยู่ตรงนี้

205
00:13:21,853 --> 00:13:26,731
แต่ก่อนอื่นผมอยากเล่าเรื่อง regression testing

206
00:13:26,731 --> 00:13:31,185
กันก่อนครับ มันคือแนวปฏิบัติของการรัน test

207
00:13:31,185 --> 00:13:35,852
เดิมซ้ำๆ เพื่อให้แน่ใจว่าการเปลี่ยนแปลงใหม่ๆ

208
00:13:35,852 --> 00:13:40,836
ไม่ได้ทำลายฟังก์ชันที่เคยทำงานได้ดีอยู่ก่อนครับ

209
00:13:40,836 --> 00:13:45,397
ADK ให้วิธีทำ regression อัตโนมัติและ batch

210
00:13:45,397 --> 00:13:50,275
testing แก่เราสองแบบ หนึ่งคือ pytest อีกอันคือ

211
00:13:50,275 --> 00:13:54,623
ADK eval ครับ ผมจะใส่ลิงก์เอกสารพวกนี้ไว้

212
00:13:54,623 --> 00:13:59,184
คุณไปอ่านทำความเข้าใจคำสั่งต่างๆ ได้ครับ ใน

213
00:13:59,184 --> 00:14:02,789
section นี้เราจะใช้คำสั่ง CLI ครับ

214
00:14:02,789 --> 00:14:08,728
ถ้าต้องการข้อมูลเพิ่มเติมไปที่เอกสารที่ผมจะแชร์ให้นะครับ

215
00:14:08,728 --> 00:14:13,607
รูปต่อไปนี้แสดงกระบวนการ evaluation โดยรวมครับ

216
00:14:13,607 --> 00:14:17,425
ในระดับสูงมีสี่ขั้นตอนในการ evaluate

217
00:14:17,425 --> 00:14:21,667
ขั้นแรกคือสร้าง evaluation configuration

218
00:14:21,667 --> 00:14:25,909
ซึ่งหมายถึงนิยาม metric ที่คุณต้องการวัด

219
00:14:25,909 --> 00:14:30,045
จากนั้นสร้าง test เช่น sample test case

220
00:14:30,045 --> 00:14:34,606
ที่จะใช้เปรียบเทียบ แล้วรันเอเจนต์ด้วยคำถาม

221
00:14:34,606 --> 00:14:38,211
test และเปรียบเทียบผลลัพธ์ของ test

222
00:14:38,211 --> 00:14:43,090
กับผลลัพธ์จริงครับ นี่คือสี่ขั้นตอนโดยสรุปครับ

223
00:14:43,090 --> 00:14:47,226
มาสร้าง evaluation configuration กันเลย

224
00:14:47,226 --> 00:14:49,347
นี่เป็นไฟล์ optional

225
00:14:49,347 --> 00:14:54,226
ซึ่งให้เรานิยามเกณฑ์ผ่านหรือตกสำหรับแต่ละ test

226
00:14:54,226 --> 00:14:59,104
ครับ เราสร้าง test config นี้ใน root directory

227
00:14:59,104 --> 00:15:03,240
โดย import รายละเอียดของ trajectory และ

228
00:15:03,240 --> 00:15:08,012
response match score เข้ามาตรงนี้ครับ ใน test

229
00:15:08,012 --> 00:15:12,785
case ของเรา response match score เป็นหนึ่งกับ

230
00:15:12,785 --> 00:15:16,179
0.7 และ trajectory เป็นหนึ่งครับ

231
00:15:16,179 --> 00:15:19,890
ซึ่งก็คือต้องใช้ tool แบบสมบูรณ์แบบ

232
00:15:19,890 --> 00:15:23,390
และความคล้ายคลึงแปดสิบเปอร์เซ็นต์

233
00:15:23,390 --> 00:15:27,420
ของเราเป็นยี่สิบเปอร์เซ็นต์ครับ เอาล่ะ

234
00:15:27,420 --> 00:15:31,769
ทีนี้เราจะรันส่วนนี้เพื่อสร้าง evaluation

235
00:15:31,769 --> 00:15:35,799
configuration ครับ มันให้เกณฑ์ว่า tool

236
00:15:35,799 --> 00:15:39,829
trajectory เป็นเท่าไหร่ และ evaluation

237
00:15:39,829 --> 00:15:44,707
นี้จะจับอะไรได้บ้าง มันจะจับการใช้ tool ที่ผิด

238
00:15:44,707 --> 00:15:46,510
คุณภาพคำตอบที่แย่

239
00:15:46,510 --> 00:15:50,858
และความเบี่ยงเบนจากพฤติกรรมที่คาดหวังครับ

240
00:15:50,858 --> 00:15:55,631
ทีนี้เราต้องสร้าง test case ครับ ตรงนี้มี tip

241
00:15:55,631 --> 00:15:59,767
หนึ่งบอกว่าเพื่อบันทึกบทสนทนาจาก web UI

242
00:15:59,767 --> 00:16:03,797
ให้คงอยู่ เพียงแค่สร้าง eval set ใน UI

243
00:16:03,797 --> 00:16:07,190
แล้วเพิ่ม session ปัจจุบันเข้าไป

244
00:16:07,190 --> 00:16:11,645
บทสนทนาทั้งหมดใน session นั้นจะถูกแปลงเป็น

245
00:16:11,645 --> 00:16:16,099
eval set โดยอัตโนมัติและดาวน์โหลดลงเครื่อง

246
00:16:16,099 --> 00:16:20,235
แล้วคุณสามารถใช้มันเป็น JSON ได้เลยครับ

247
00:16:20,235 --> 00:16:24,159
ทีนี้สิ่งที่เราจะสร้างคือ integration

248
00:16:24,159 --> 00:16:28,507
eval.json ซึ่งจะมีหลาย test case หรือหลาย

249
00:16:28,507 --> 00:16:33,280
session ข้างในครับ ใน tool นี้เรามีค่าเป็น on

250
00:16:33,280 --> 00:16:38,158
กับ off ทั้งหมด มีสถานะอุปกรณ์ มี device ID มี

251
00:16:38,158 --> 00:16:42,188
location ครับ สำหรับ set_device_status

252
00:16:42,188 --> 00:16:43,567
เรามีหลายส่วน

253
00:16:43,567 --> 00:16:48,551
เมื่อพูดว่ากรุณาเปิดโคมไฟตั้งพื้นในห้องนั่งเล่น

254
00:16:48,551 --> 00:16:53,324
จะมีข้อความนี้ โคมไฟตั้งพื้นคือ device ID และ

255
00:16:53,324 --> 00:16:56,293
location คือห้องนั่งเล่นครับ

256
00:16:56,293 --> 00:17:00,429
คล้ายกันสำหรับครัว ใน intermediate data

257
00:17:00,429 --> 00:17:02,444
มีครัวกับไฟหลักครับ

258
00:17:02,444 --> 00:17:07,005
ทีนี้เรารันส่วนนี้เพื่อสร้าง test case ครับ

259
00:17:07,005 --> 00:17:11,777
โอเค test case ถูกสร้างแล้ว ต่อไปเราจะ import

260
00:17:11,777 --> 00:17:15,277
JSON นี้เข้าไปในเอเจนต์ของเราครับ

261
00:17:15,277 --> 00:17:18,458
เปิดเอเจนต์นี้ ใช้ dump ตรงนี้

262
00:17:18,458 --> 00:17:23,019
ตอนนี้เราได้สร้าง test case แล้ว เรามี test

263
00:17:23,019 --> 00:17:24,610
scenario สองอัน

264
00:17:24,610 --> 00:17:29,488
หนึ่งสำหรับห้องนั่งเล่นและอีกอันสำหรับครัวครับ

265
00:17:29,488 --> 00:17:33,836
ผลลัพธ์ที่คาดหวังคือ basic device control

266
00:17:33,836 --> 00:17:38,609
ควรผ่านทั้งสองเกณฑ์ test การใช้ tool ผิดอาจตก

267
00:17:38,609 --> 00:17:43,381
tool trajectory หากใช้ parameter ผิด และ test

268
00:17:43,381 --> 00:17:47,305
คุณภาพคำตอบที่แย่อาจตก response match

269
00:17:47,305 --> 00:17:52,184
หากคำตอบต่างไปมากเกินไปครับ ทีนี้เราจะ execute

270
00:17:52,184 --> 00:17:57,062
คำสั่งนี้โดยชี้ไปที่ directory ของเอเจนต์ eval

271
00:17:57,062 --> 00:18:00,138
set และไฟล์ config ของเราครับ

272
00:18:00,138 --> 00:18:04,592
นี่คือคำสั่งสำหรับ execute evaluation ครับ

273
00:18:04,592 --> 00:18:08,834
อันถัดไปในลำดับคือการวิเคราะห์ผลลัพธ์จาก

274
00:18:08,834 --> 00:18:12,652
sample evaluation ครับ ผมจะรันอันนี้

275
00:18:12,652 --> 00:18:15,515
มันจะพิมพ์ผลลัพธ์แบบละเอียด

276
00:18:15,515 --> 00:18:20,182
มันจะแจ้งเตือนทุกอย่าง โดยแสดงรายละเอียดทีละ

277
00:18:20,182 --> 00:18:24,106
turn ของแต่ละ test พร้อมคะแนนและ diff

278
00:18:24,106 --> 00:18:27,818
หรือความแตกต่างของจุดที่ล้มเหลวครับ

279
00:18:27,818 --> 00:18:31,848
นี่คือหน้าตาที่ test case ห้องนั่งเล่น

280
00:18:31,848 --> 00:18:35,453
response ตรงกันและ tool trajectory

281
00:18:35,453 --> 00:18:37,468
ก็ตรงกันเช่นกันครับ

282
00:18:37,468 --> 00:18:41,392
นี่คือวิธีที่มันพิมพ์ผลลัพธ์ออกมาครับ

283
00:18:41,392 --> 00:18:45,529
นี่คือการเข้าใจว่าผลลัพธ์ของ evaluation

284
00:18:45,529 --> 00:18:49,453
จะออกมาหน้าตาแบบไหนครับ ต่อไปคือ user

285
00:18:49,453 --> 00:18:52,952
simulation ซึ่งเป็น optional ครับ

286
00:18:52,952 --> 00:18:55,922
อันนี้ต่างจากวิธี evaluation

287
00:18:55,922 --> 00:19:00,376
แบบดั้งเดิมที่พึ่ง test case ตายตัว ตรงนี้

288
00:19:00,376 --> 00:19:01,967
user simulation

289
00:19:01,967 --> 00:19:05,997
เป็นฟีเจอร์ที่จัดการข้อจำกัดของ static

290
00:19:05,997 --> 00:19:10,557
evaluation ครับ แทนที่จะใช้ prompt ของ user

291
00:19:10,557 --> 00:19:13,633
แบบ fixed ที่นิยามไว้ล่วงหน้า

292
00:19:13,633 --> 00:19:17,981
สิ่งที่มันทำคือใช้โมเดล genai เช่น Gemini

293
00:19:17,981 --> 00:19:20,208
สร้าง prompt ของ user

294
00:19:20,208 --> 00:19:24,662
แบบไดนามิกระหว่างกระบวนการ evaluation ครับ

295
00:19:24,662 --> 00:19:27,632
ถ้าอยากรู้ว่ามันทำงานอย่างไร

296
00:19:27,632 --> 00:19:29,859
ดูได้จากเอกสารนี้ครับ

297
00:19:29,859 --> 00:19:33,253
ผมจะใส่ไว้ในคำอธิบายของวิดีโอนี้

298
00:19:33,253 --> 00:19:37,389
และคุณลองทำแบบฝึกหัดนี้ได้ เช่นการนิยาม

299
00:19:37,389 --> 00:19:39,616
conversation scenario

300
00:19:39,616 --> 00:19:43,964
ที่ร่างเป้าหมายการสนทนาโดยรวมของ user และ

301
00:19:43,964 --> 00:19:48,100
conversation plan เพื่อนำทางบทสนทนาครับ

302
00:19:48,100 --> 00:19:51,706
ลองทำดูถ้าอยากเข้าใจว่า simulation

303
00:19:51,706 --> 00:19:54,357
ช่วยให้คุณค้นพบ edge case

304
00:19:54,357 --> 00:19:59,236
และปรับปรุงความทนทานของเอเจนต์อย่างไร ในแบบที่

305
00:19:59,236 --> 00:20:02,205
static test case มักพลาดครับ

306
00:20:02,205 --> 00:20:05,175
เมื่อคุณผ่านแบบฝึกหัดนี้แล้ว

307
00:20:05,175 --> 00:20:08,781
โปรดไปดูวิดีโอถัดไปซึ่งก็คือ Day 5

308
00:20:08,781 --> 00:20:12,599
ที่เราจะเรียนวิธี deploy เอเจนต์ขึ้น

309
00:20:12,599 --> 00:20:16,735
production และต่อยอดด้วย agent-to-agent

310
00:20:16,735 --> 00:20:19,280
protocol ครับ ขอบคุณครับ