1. สิ่งที่คุณจะได้เรียนรู้
ยินดีต้อนรับสู่ ADK Master Class - การเดินทางสู่ระบบหลายเอเจนต์
คุณกำลังจะก้าวเข้าสู่โลกที่น่าตื่นเต้นของ AI Agent ลืมแชทบอทแบบง่ายๆ ที่ตอบคำถามเท่านั้นไปได้เลย เรากำลังเจาะลึกAgent Development Kit (ADK)เพื่อสร้างระบบอัตโนมัติที่ซับซ้อนซึ่งสามารถให้เหตุผล วางแผน และใช้เครื่องมือเพื่อทำงานที่ซับซ้อนให้สำเร็จ
เมื่อจบบทแนะนำนี้ คุณจะทำสิ่งต่อไปนี้ได้
- สร้าง AI Agent ตัวแรก: สร้าง Agent ที่ทำงานได้อย่างเต็มรูปแบบตั้งแต่ต้นจนจบ ซึ่งสามารถทำความเข้าใจความต้องการของผู้ใช้ ใช้เครื่องมือต่างๆ เช่น Google Search และสร้างคำตอบที่มีรายละเอียดและเป็นประโยชน์
- เชี่ยวชาญเครื่องมือที่กำหนดเอง: ปลดล็อกศักยภาพที่แท้จริงของเอเจนต์ด้วยการเชื่อมต่อเอเจนต์กับฟังก์ชันและ API ที่กำหนดเองของคุณเอง คุณจะสอนเอเจนต์ให้ดึงข้อมูลแบบเรียลไทม์ เช่น พยากรณ์อากาศสด
- สร้างระบบแบบหลายเอเจนต์: เรียนรู้รูปแบบ "Agent-as-a-Tool" ซึ่งเป็นแนวคิดที่ปฏิวัติวงการที่ Agent จะมอบหมายงานให้ Agent อื่นๆ ที่มีความเชี่ยวชาญเฉพาะทาง ทำให้เกิดทีมผู้เชี่ยวชาญด้าน AI ที่ทำงานร่วมกัน
- จัดระเบียบเวิร์กโฟลว์ที่ซับซ้อน: ทำได้มากกว่าการมอบหมายงานแบบง่ายๆ และเชี่ยวชาญรูปแบบขั้นสูง เช่น เราเตอร์, เชนแบบลำดับ, ลูป และการดำเนินการแบบขนาน เพื่อสร้างแอปพลิเคชันที่แข็งแกร่ง มีประสิทธิภาพ และอัจฉริยะ ซึ่งสามารถจัดการคำขอได้เกือบทุกคำขอ
- ให้ Agent มีความจำ: ทำความเข้าใจบทบาทสำคัญของหน่วยความจำในการสนทนา ซึ่งช่วยให้ Agent จัดการคำถามติดตามผล เรียนรู้จากความคิดเห็น และจัดการงานแบบหลายขั้นตอนได้อย่างราบรื่น
มาเริ่มกันเลย 🚀
2. ตั้งค่าคีย์ GCP และ Gemini API
การตั้งค่าโปรเจ็กต์ GCP และคีย์ Gemini API
หากต้องการขับเคลื่อนเอเจนต์ AI เราต้องมี 2 สิ่ง ได้แก่ โปรเจ็กต์ Google Cloud เพื่อเป็นรากฐาน และคีย์ Gemini API เพื่อเข้าถึงโมเดลอันทรงพลังของ Google
ขั้นตอนที่ 1: เปิดใช้บัญชีสำหรับการเรียกเก็บเงิน
- การอ้างสิทธิ์บัญชีการเรียกเก็บเงินพร้อมเครดิต 5 ดอลลาร์ คุณจะต้องใช้เครดิตนี้ในการติดตั้งใช้งาน โปรดตรวจสอบบัญชี gmail
ขั้นตอนที่ 2: สร้างโปรเจ็กต์ GCP ใหม่
- ไปที่ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่

- ไปที่ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่
- เปิดแผงด้านซ้าย คลิก
Billingแล้วตรวจสอบว่าบัญชีสำหรับการเรียกเก็บเงินลิงก์กับบัญชี gcp นี้หรือไม่

หากเห็นหน้านี้ ให้ตรวจสอบ manage billing account เลือก Google Cloud Trial One และลิงก์กับบัญชีดังกล่าว
ขั้นตอนที่ 3: สร้างคีย์ Gemini API
คุณต้องมีคีย์ก่อนจึงจะรักษาความปลอดภัยของคีย์ได้
- ไปที่ Google AI Studio
- ลงชื่อเข้าใช้ด้วยบัญชี Gmail
- คลิกปุ่ม "รับคีย์ API" ซึ่งมักจะอยู่ในแผงการนำทางด้านซ้ายมือหรือที่มุมขวาบน
- ในกล่องโต้ตอบ "คีย์ API" ให้คลิก "สร้างคีย์ API ในโปรเจ็กต์ใหม่"

- เลือกโปรเจ็กต์ใหม่ที่คุณสร้างขึ้นซึ่งมีการตั้งค่าบัญชีสำหรับการเรียกเก็บเงิน

- ระบบจะสร้างคีย์ API ใหม่ให้คุณ คัดลอกคีย์นี้ทันทีและเก็บไว้ในที่ปลอดภัยชั่วคราว (เช่น เครื่องมือจัดการรหัสผ่านหรือโน้ตที่ปลอดภัย) ค่านี้เป็นค่าที่คุณจะใช้ในขั้นตอนถัดไป
3. เซสชันที่ 1: Agent ตัวแรกของคุณด้วย Runner
มาเริ่มที่พื้นฐานกันก่อน ในที่นี้ เราจะสร้าง Agent อย่างง่ายตัวแรกคือ day_trip_agent จุดประสงค์ของเอเจนต์นี้คือการสร้างแผนการเดินทางแบบเต็มวันตามคำขอของผู้ใช้ รวมถึงการพิจารณางบประมาณ ตัวอย่างนี้จะแนะนำคอมโพเนนต์หลัก 3 อย่างของการโต้ตอบกับเอเจนต์ใน ADK
- เอเจนต์: มันสมองหลักของปฏิบัติการ โดยกำหนดจากคำสั่ง (บุคลิกภาพและภารกิจ) โมเดล AI ที่ใช้ (เช่น Gemini) และเครื่องมือที่เข้าถึงได้
- เซสชัน: หน่วยความจำของบทสนทนา โดยจะจัดเก็บประวัติการโต้ตอบ (ข้อความของผู้ใช้และการตอบกลับของเอเจนต์) เพื่อให้การสนทนาต่อเนื่อง
- Runner: เครื่องมือที่ดำเนินการงาน โดยจะใช้ Agent และเซสชัน ประมวลผลคําค้นหาใหม่ของผู้ใช้ และจัดระเบียบขั้นตอนเพื่อสร้างคําตอบ
➡️ ตำแหน่งของฟีเจอร์ใน Notebook
👉 ซึ่งสอดคล้องกับเซลล์ในส่วนตอนที่ 1: เอเจนต์ตัวแรกของคุณ - จีนี่ผู้ช่วยวางแผนการเดินทางแบบไปเช้าเย็นกลับ 🧞🌟
- คำจำกัดความของเอเจนต์: มองหาฟังก์ชัน
create_day_trip_agent()ส่วนนี้คือส่วนที่กำหนด Agent สังเกตสตริงคำสั่งโดยละเอียด ซึ่งเป็นพรอมต์ที่บอก Agent ว่าควรมีลักษณะการทำงานอย่างไร นอกจากนี้ เรายังมอบเครื่องมือแรกให้แก่ AI นั่นคือ Google Search - ฟังก์ชันตัวช่วย: ฟังก์ชันตัวช่วย
run_agent_query()มีคำจำกัดความอยู่ที่นี่ เราจะใช้ยูทิลิตี้นี้ตลอดทั้ง Notebook เพื่อลดความซับซ้อนในการเรียกใช้การค้นหา - การทดสอบ: ฟังก์ชัน
run_day_trip_genie()จะจำลองผู้ใช้ที่ขอทริปแบบไปเช้าเย็นกลับที่ "ราคาไม่แพง" และ "ผ่อนคลาย" เอเจนต์จะใช้คำสั่งและเครื่องมือ Google Search เพื่อค้นหาสถานที่ที่เหมาะสมและสร้างแผนการเดินทางในรูปแบบมาร์กดาวน์
➡️ การดำเนินการ: ตรวจสอบพรอมต์คำสั่งสำหรับ day_trip_agent ดูว่าคำขอทริป "ราคาไม่แพง" ในคำค้นหาทดสอบเกี่ยวข้องกับหลักเกณฑ์ของเอเจนต์ที่ระบุว่า "คำนึงถึงงบประมาณ" โดยตรงอย่างไร
4. เซสชันที่ 2: เครื่องมือที่กำหนดเอง 🛠️
แม้ว่า Google Search จะมีประสิทธิภาพ แต่ศักยภาพที่แท้จริงของเอเจนต์ AI จะปลดล็อกได้เมื่อคุณเชื่อมต่อเอเจนต์กับแหล่งข้อมูล, API หรือตรรกะที่กำหนดเองของคุณเอง ในส่วนนี้ เราจะสร้างเครื่องมือที่กำหนดเองจากฟังก์ชัน Python แบบง่าย
ส่วนที่สำคัญที่สุดของเครื่องมือฟังก์ชันคือ Docstring ADK จะแยกวิเคราะห์ Docstring โดยอัตโนมัติเพื่อทำความเข้าใจว่าเครื่องมือทำอะไร รับพารามิเตอร์ใด (Args) และส่งคืนอะไร (Returns) โมเดลภาษาขนาดใหญ่ (LLM) จะอ่านคำอธิบายนี้เพื่อตัดสินใจว่าจะใช้เครื่องมือเมื่อใดและอย่างไร
➡️ ตำแหน่งของฟีเจอร์ใน Notebook
👉 ซึ่งสอดคล้องกับเซลล์ในส่วน2.1 เครื่องมือฟังก์ชันแบบง่าย: การเรียก API สภาพอากาศแบบเรียลไทม์ 🌟
- คำจำกัดความของเครื่องมือ: ฟังก์ชัน
get_live_weather_forecast(location: str)คือหัวใจหลักของเครื่องมือที่กำหนดเอง โดยจะรับชื่อเมือง เรียกใช้ API ของกรมอุตุนิยมวิทยาแบบสาธารณะ และแสดงผลพจนานุกรมที่มีอุณหภูมิและการพยากรณ์ - คำจำกัดความของ Agent: ระบบจะสร้าง weather_agent และติดตั้งเครื่องมือใหม่ของเราโดยส่ง
tools=[get_live_weather_forecast]ระหว่างการเริ่มต้น คำสั่งของเอเจนต์ระบุอย่างชัดเจนให้ใช้เครื่องมือนี้ก่อนแนะนำกิจกรรมกลางแจ้ง - การทดสอบ: คำค้นหา "ฉันอยากไปเดินป่าแถวทะเลสาบทาโฮ อากาศเป็นยังไง" จะทริกเกอร์เอเจนต์ให้ใช้เครื่องมือ
get_live_weather_forecastโดยตรงเนื่องจากคำสั่งกำหนดให้ใช้
➡️ การดำเนินการ: อ่านสตริงเอกสารสำหรับฟังก์ชัน get_live_weather_forecast และวิธีการสำหรับ weather_agent โปรดทราบว่าทั้ง 2 อย่างนี้มีความสัมพันธ์กันโดยตรง
5. เซสชันที่ 3: เอเจนต์ในฐานะเครื่องมือ 🧑🍳
ทำไมต้องสร้างเอเจนต์แบบโมโนลิธตัวเดียวในเมื่อสร้างทีมผู้เชี่ยวชาญได้ รูปแบบ Agent-as-a-Tool เป็นวิธีที่มีประสิทธิภาพในการสร้างระบบที่ซับซ้อนซึ่งเอเจนต์หลัก (มักเรียกว่า Orchestrator หรือ Router) จะมอบหมายงานให้กับเอเจนต์อื่นๆ ที่มีความเฉพาะเจาะจงมากกว่า
รูปแบบนี้ช่วยให้คุณสร้าง Agent แบบโมดูลที่นำกลับมาใช้ใหม่ได้ เช่น คุณอาจมีเอเจนต์ที่เชี่ยวชาญด้านการค้นหาฐานข้อมูล เอเจนต์อีกรายที่เชี่ยวชาญด้านการเขียนเชิงสร้างสรรค์ และเอเจนต์ที่ 3 ที่ทำหน้าที่เป็นเจ้าหน้าที่อำนวยความสะดวกที่เป็นมิตร หน้าที่ของผู้ประสานงานคือการทำความเข้าใจคำขอของผู้ใช้และส่งต่อไปยังผู้เชี่ยวชาญที่เหมาะสม
➡️ ตำแหน่งของฟีเจอร์ใน Notebook
👉 ซึ่งสอดคล้องกับเซลล์ในส่วน 2.2 Agent ในฐานะเครื่องมือ: การปรึกษาผู้เชี่ยวชาญ 🧑🍳🌟
ตัวอย่างนี้สร้างระบบ Agent ที่ซับซ้อนหลายชั้น
- ผู้เชี่ยวชาญ:
- food_critic_agent: เอเจนต์ที่มีความเชี่ยวชาญสูงซึ่งให้คำแนะนำเกี่ยวกับร้านอาหารเท่านั้น
- db_agent: เอเจนต์จำลองที่แสร้งว่าค้นหาข้อมูลโรงแรมในฐานข้อมูล
- concierge_agent: ตัวแทนระดับกลางที่ทำหน้าที่เป็นคอนเซียร์จที่สุภาพ ที่สำคัญคือมี
food_critic_agentเป็นเครื่องมือของตัวเอง
- Orchestrator (
trip_data_concierge_agent): นี่คือเอเจนต์ระดับบนสุดที่ผู้ใช้โต้ตอบด้วย คำสั่งของโมเดลทำให้โมเดลกลายเป็น "ผู้วางแผนการเดินทางหลัก" และโมเดลมีเครื่องมือ 2 อย่างที่เรียกเอเจนต์อื่นๆ ได้ ดังนี้- call_db_agent: ฟังก์ชันที่เรียกใช้
db_agent - call_concierge_agent: ฟังก์ชันที่เรียกใช้
concierge_agent
- call_db_agent: ฟังก์ชันที่เรียกใช้
- โฟลว์: การทดสอบที่ทำงานใน
run_trip_data_concierge()แสดงให้เห็นถึงห่วงโซ่การมอบสิทธิ์ทั้งหมด- ผู้ใช้ขอโรงแรมและร้านอาหารใกล้เคียงจากตัวจัดสรร
- คำสั่งของ Orchestrator บอกให้ใช้เครื่องมือ
call_db_agentเพื่อรับข้อมูลโรงแรมก่อน - จากนั้น Orchestrator จะใช้
call_concierge_agentเครื่องมือเพื่อรับคำแนะนำ - เมื่อได้รับคำขอ
concierge_agentจะใช้เครื่องมือของตัวเอง ซึ่งก็คือfood_critic_agentเพื่อหาไอเดียร้านอาหาร
ระบบจะส่งคำตอบของนักวิจารณ์อาหารกลับไปให้เจ้าหน้าที่อำนวยความสะดวก ซึ่งจะจัดรูปแบบคำตอบอย่างสุภาพและส่งกลับไปให้ผู้ประสานงาน จากนั้นผู้ประสานงานจะนำคำตอบไปแสดงต่อผู้ใช้
➡️ การดำเนินการ: ติดตามโฟลว์การดำเนินการในการทดสอบภายใต้ run_trip_data_concierge() สังเกตว่าTOOL CALLED ที่พิมพ์ออกมาแสดงห่วงโซ่การมอบสิทธิ์จากผู้ประสานงานลงไปจนถึงผู้เชี่ยวชาญอย่างไร นี่คือลำดับชั้นการบังคับบัญชา
6. เซสชันที่ 4: หน่วยความจำของเอเจนต์ 🧠
เอเจนต์อัจฉริยะอย่างแท้จริงต้องทำได้มากกว่าการตอบคำถามแบบครั้งเดียว โดยจะต้องจดจำการสนทนา เข้าใจบริบท และปรับตัวตามความคิดเห็น ซึ่งทำได้ผ่านการจัดการเซสชันที่เหมาะสม "ตัวแทนแบบวนซ้ำ" คือตัวแทนที่อยู่ในลูปการสนทนาอย่างต่อเนื่องซึ่งขับเคลื่อนโดยหน่วยความจำของตัวแทน
เมื่อใช้ออบเจ็กต์เซสชันเดียวกันสำหรับการค้นหาหลายรายการที่ต่อเนื่องกัน เอเจนต์จะ "เห็น" ประวัติการสนทนาทั้งหมด ซึ่งช่วยให้โมเดลจัดการคำถามติดตาม แก้ไขตัวเองตามความคิดเห็น และวางแผนงานแบบหลายขั้นตอนได้
➡️ ตำแหน่งของฟีเจอร์ใน Notebook
👉 ซึ่งสอดคล้องกับเซลล์ในส่วนส่วนที่ 3: เอเจนต์ที่มีหน่วยความจำ - เครื่องมือวางแผนแบบปรับเปลี่ยนได้ 🗺️ 🌟
- คำจำกัดความของ Agent: ฟังก์ชัน
create_multi_day_trip_agent()กำหนด Agent ที่ออกแบบมาเพื่อวางแผนการเดินทางแบบค่อยเป็นค่อยไป คำแนะนำของโมเดลนี้เน้นการจดจำบริบท การจัดการความคิดเห็น และการวางแผนทีละวัน
สถานการณ์ 3a: เอเจนต์ที่มีหน่วยความจำ (✅)
การทดสอบนี้จะทำงานในฟังก์ชัน run_adaptive_memory_demonstration()
- ระบบจะสร้าง
trip_sessionเพียงครั้งเดียวและนำกลับมาใช้ซ้ำใน 3 เทิร์นติดต่อกัน - เทิร์นที่ 1: ผู้ใช้เริ่มวางแผนการเดินทาง 2 วัน
- เทิร์นที่ 2: ผู้ใช้แสดงความคิดเห็น ("ฉันไม่ได้ชอบปราสาทมากนัก") เนื่องจากเอเจนต์มีหน่วยความจำของเทิร์นที่ 1 จึงเข้าใจว่าควรเปลี่ยนส่วนใดของแผนและเสนอทางเลือกอื่น
- เทิร์นที่ 3: ผู้ใช้ยืนยันการเปลี่ยนแปลงและขอขั้นตอนถัดไป เอเจนต์จะจดจำทุกอย่างและวางแผนวันที่ 2 ต่อ
สถานการณ์ 3b: เอเจนต์ที่ไม่มีหน่วยความจำ (❌)
การทดสอบนี้จะทำงานในฟังก์ชัน run_memory_failure_demonstration()
ซึ่งแสดงให้เห็นถึงความสำคัญของการจัดการเซสชันด้วยการจงใจทำผิดพลาด ระบบจะสร้างเซสชันใหม่สำหรับแต่ละรอบ
- เทิร์นที่ 1: ผู้ใช้เริ่มการเดินทางใน session_one ตัวแทนตอบกลับอย่างถูกต้อง
- เทิร์นที่ 2: ผู้ใช้ขอวางแผนวันที่ 2 แต่ระบบจะส่งคำค้นหาใน session_two ใหม่ เนื่องจากเซสชันใหม่นี้ไม่มีประวัติ ตัวแทนจึงสับสน มันเป็นโรคความจำเสื่อม และไม่ทราบว่ากำลังวางแผนการเดินทางใด
การดำเนินการ: เปรียบเทียบคำตอบของตัวแทนใน run_adaptive_memory_demonstration() และ run_memory_failure_demonstration() แนวคิดที่สำคัญที่สุดใน Notebook คือการสนทนาต่อเนื่อง 1 รายการต้องใช้เซสชันต่อเนื่อง 1 รายการ
7. เซสชันที่ 5: ตัวแทนเราเตอร์ 🚏
ตัวแทน 1 คนทำได้เพียงบางอย่างเท่านั้น เราต้องมีทีมตัวแทนผู้เชี่ยวชาญเพื่อจัดการคำขอของผู้ใช้ที่ซับซ้อนอย่างแท้จริง แต่เราจะทราบได้อย่างไรว่าควรใช้เอเจนต์ใดสำหรับการค้นหาที่กำหนด ซึ่ง Router Agent จะเข้ามาช่วยในเรื่องนี้
Router Agent จะทำหน้าที่เป็นเอเจนต์ "หลัก" หรือตัวส่ง โดยมีจุดประสงค์เพียงอย่างเดียวคือการวิเคราะห์คำค้นหาของผู้ใช้ที่เข้ามาและตัดสินใจว่าเอเจนต์ผู้เชี่ยวชาญ (หรือเวิร์กโฟลว์ของเอเจนต์) ใดที่เหมาะกับงานมากที่สุด โดยจะไม่ตอบคำค้นหาด้วยตัวเอง แต่จะส่งคำค้นหาไปยังเอเจนต์ปลายทางที่ถูกต้อง
ตัวอย่างเช่น คำค้นหาเกี่ยวกับ "ซูชิที่ดีที่สุด" ควรไปที่ foodie_agent ส่วนคำถามเกี่ยวกับ "คอนเสิร์ตสุดสัปดาห์นี้" ควรได้รับการจัดการโดย weekend_guide_agent
➡️ วิธีค้นหาใน Notebook
👉 แนวคิดนี้เป็นหัวใจสำคัญของ Notebook ทั้งหมด แต่จะมีการแนะนำเป็นครั้งแรกในส่วนที่ 1: ความวุ่นวายของหลายเอเจนต์ - เวิร์กโฟลว์แบบลำดับ 🧠→🤖→🤖 🌟
- คำจำกัดความของ Agent: เซลล์โค้ดจะกำหนด Agent ผู้เชี่ยวชาญหลายราย (day_trip_agent, foodie_agent, transportation_agent) และที่สำคัญที่สุดคือ router_agent โปรดใส่ใจกับพรอมต์คำสั่งสำหรับ router_agent อย่างใกล้ชิด เนื่องจากมีการระบุอย่างชัดเจนว่าให้แสดงเฉพาะชื่อของเอเจนต์ที่ดีที่สุดสำหรับงานนั้นๆ
- ตรรกะการดำเนินการ: ฟังก์ชัน run_sequential_app แสดงวิธีเรียกใช้ router_agent ก่อนเพื่อรับการตัดสินใจ (chosen_route) แล้วใช้การตัดสินใจนั้นในบล็อก
if/elifเพื่อเรียกใช้เอเจนต์ผู้เชี่ยวชาญที่เหมาะสม
8. เซสชันที่ 6: SequentialAgent ⛓️
บางงานต้องทำหลายขั้นตอนตามลำดับที่เฉพาะเจาะจง เช่น "หาร้านซูชิที่ดีที่สุดในพาโลอัลโตให้หน่อย แล้วบอกวิธีเดินทางไปที่นั่นด้วย" กระบวนการนี้มี 2 ขั้นตอน ขั้นแรกคือค้นหาร้านอาหาร และขั้นที่สองคือขอเส้นทาง
ADK มีวิธีที่สะอาดและมีประสิทธิภาพในการจัดการเรื่องนี้ด้วย SequentialAgent นี่คือ Agent เวิร์กโฟลว์พิเศษที่เรียกใช้รายการ Agent ย่อยตามลำดับที่กำหนดไว้ล่วงหน้า
ความมหัศจรรย์อยู่ที่สถานะที่แชร์ เอาต์พุตของเอเจนต์หนึ่งในลำดับจะบันทึกลงในพจนานุกรมสถานะที่แชร์โดยอัตโนมัติ จากนั้นจะใช้เป็นอินพุตสำหรับเอเจนต์ถัดไป ซึ่งช่วยให้ไม่ต้องใช้โค้ดที่ซับซ้อนด้วยตนเองเพื่อส่งข้อมูลระหว่างขั้นตอนต่างๆ
➡️ คุณจะดูข้อมูลนี้ใน Notebook ได้ที่ใด
👉 เราจะพูดถึงเรื่องนี้ในส่วนที่ 2 (วิถี ADK): ความวุ่นวายของหลายเอเจนต์ด้วย SequentialAgent 🧠→⛓️→🤖 🌟
- การปรับโครงสร้าง Agent: ในเซลล์โค้ดแรกของส่วนนี้ ให้สังเกตการเปลี่ยนแปลงที่สำคัญใน
foodie_agentและtransportation_agent- ตอนนี้
foodie_agentมีoutput_key="destination"แล้ว ซึ่งจะบอกให้ ADK บันทึกคำตอบสุดท้ายลงในตัวแปรชื่อdestinationในสถานะที่แชร์ - ตอนนี้
transportation_agentมีตัวยึดตำแหน่ง{destination}ในพรอมต์คำสั่งแล้ว ADK จะแทรกค่าจากสถานะที่แชร์ลงในตัวยึดตำแหน่งนี้โดยอัตโนมัติ
- ตอนนี้
- การกำหนดเวิร์กโฟลว์:
find_and_navigate_agentได้รับการกำหนดเป็น SequentialAgent โดยตั้งค่า sub_agents เป็น [foodie_agent,transportation_agent] เพื่อให้มั่นใจว่าเอเจนต์จะทำงานตามลำดับที่กำหนด - การดำเนินการที่ง่ายขึ้น: ดูฟังก์ชัน
run_sequential_appในส่วนนี้ ตรรกะที่ซับซ้อนของif/elifหายไปแล้ว ตอนนี้find_and_navigate_agentจะถือเป็นหน่วยที่เรียกใช้ได้หน่วยเดียว และ ADK จะจัดการขั้นตอนตามลำดับภายในโดยอัตโนมัติ
9. เซสชันที่ 7: LoopAgent 🔁
ปัญหาบางอย่างไม่ได้มีวิธีแก้ที่ตรงไปตรงมาและทำได้ในครั้งเดียว บางครั้งเราต้องเสนอวิธีแก้ปัญหา วิพากษ์วิจารณ์ และปรับปรุงวิธีแก้ปัญหาจนกว่าจะตรงตามข้อจำกัดที่เฉพาะเจาะจง
โดย ADK มี LoopAgent สำหรับการดำเนินการนี้ Agent เวิร์กโฟลว์นี้จะเรียกใช้ลำดับของ Agent ย่อยซ้ำๆ จนกว่าจะเป็นไปตามเงื่อนไขที่เฉพาะเจาะจง ซึ่งเหมาะอย่างยิ่งสำหรับการสร้าง Agent ที่ "สมบูรณ์แบบ" ซึ่งสามารถวางแผน วิจารณ์ และปรับปรุงงานของตนเองได้
แผนภาพแสดงPlanner Agentการสร้างแผนก่อน จากนั้นเราจะป้อน LoopAgent Critic Agent ตรวจสอบแผน หากไม่สมบูรณ์ Refiner Agent จะสร้างเวอร์ชันใหม่และวนซ้ำ หากแผนดี Refiner Agent จะเรียกใช้เครื่องมือ exit_loop และระบบจะแสดงแผนสุดท้ายที่ผ่านการตรวจสอบแล้ว
➡️ วิธีค้นหาใน Notebook
👉 อธิบายไว้ในการทำซ้ำไอเดียด้วย LoopAgent 🧠→🔁→🤖 🌟
- Agent หลัก: เวิร์กโฟลว์ใช้
planner_agent,critic_agentและrefiner_agent - คำจำกัดความของลูป:
refinement_loopจะกำหนดเป็น LoopAgent ที่จัดระเบียบcritic_agentและrefiner_agentรวมถึงsets max_iterations=3 - เงื่อนไขการออก: ลูปจะสิ้นสุดเมื่อ
critic_agentอนุมัติแผน ซึ่งจะทำให้refiner_agentเรียกใช้เครื่องมือexit_loopที่กำหนดเอง
10. เซสชันที่ 8: ParallelAgent ⚡️
ประสิทธิภาพเป็นสิ่งสำคัญ หากผู้ใช้ขอข้อมูลหลายรายการที่ไม่เกี่ยวข้องพร้อมกัน การค้นหาข้อมูลเหล่านี้ทีละรายการจะช้า
ParallelAgent คือวิธีแก้ปัญหา Agent เวิร์กโฟลว์นี้จะเรียกใช้รายการ Agent ย่อยพร้อมกัน เมื่อดำเนินการแบบขนานทั้งหมดเสร็จแล้ว ระบบจะรวบรวมผลลัพธ์และสังเคราะห์เป็นคำตอบที่ครอบคลุมเพียงคำตอบเดียว
แผนภาพนี้แสดงParallelAgentการใช้คำค้นหาเดียวและแยกงานออกเป็น 3 เส้นทางที่ทำงานพร้อมกัน museum_finder, concert_finder และ restaurant_finder จะทำงานพร้อมกัน เมื่อทั้ง 3 อย่างเสร็จสิ้นแล้ว ระบบจะรวมผลลัพธ์แต่ละรายการ (บันทึกไว้ในสถานะที่แชร์) และส่งไปยังตัวแทนการสังเคราะห์ขั้นสุดท้าย ซึ่งจะรวมผลลัพธ์เหล่านั้นเป็นคำตอบเดียว
➡️ คุณจะดูข้อมูลนี้ใน Notebook ได้ที่ใด
👉 เวิร์กโฟลว์นี้มีรายละเอียดอยู่ในส่วนParallel Power with ParallelAgent 🧠→⚡️→🤖🤖🤖 🌟
- ตัวแทนผู้เชี่ยวชาญ: มีตัวแทนผู้เชี่ยวชาญ 3 คน โดยแต่ละคนจะมี output_key ที่ไม่ซ้ำกัน (เช่น museum_result)
- เวิร์กโฟลว์แบบขนาน: ระบบจะกำหนดให้ parallel_research_agent เป็น ParallelAgent โดยมี Finder Agent ทั้ง 3 รายการเป็น sub_agents
- ขั้นตอนการสังเคราะห์: หลังจากขั้นตอนแบบคู่ขนานแล้ว synthesis_agent ขั้นสุดท้ายจะรวบรวมข้อมูลทั้งหมดจากสถานะที่แชร์โดยใช้ตัวยึดตำแหน่ง (
{museum_result},{concert_result}ฯลฯ) เพื่อจัดรูปแบบสรุปที่กระชับ
11. ภาคผนวก: เว็บ ADK - 🍎 สำหรับ Mac/Linux
คู่มือนี้จะแนะนำขั้นตอนการตั้งค่าและเรียกใช้เอเจนต์การวางแผนการเดินทางแบบไปเช้าเย็นกลับของ ADK ในเครื่องของคุณ
ข้อกำหนดเบื้องต้น
- Python 3.8 ขึ้นไป
- Python 3.9 ขึ้นไป: ติดตั้ง google-adk==1.5.0 (เวอร์ชันล่าสุดที่มีฟีเจอร์ครบถ้วน)
- Python 3.8: ติดตั้ง google-adk==0.3.0 (เวอร์ชันที่เข้ากันได้)
- คีย์ Google AI Studio API
- การเชื่อมต่ออินเทอร์เน็ต
ขั้นตอนที่ 1: โคลนที่เก็บ
เปิดเทอร์มินัลแล้วเรียกใช้คำสั่งต่อไปนี้
git clone https://github.com/cuppibla/ADK_Basic.git
cd ADK_Basic
ขั้นตอนที่ 2: ตั้งค่าสภาพแวดล้อมเสมือนและติดตั้งการอ้างอิง
ตัวเลือก A: การตั้งค่าอัตโนมัติ (แนะนำ)
# Run the setup script
chmod +x setup_venv.sh
./setup_venv.sh
ตัวเลือก ข: การตั้งค่าด้วยตนเอง
# Create virtual environment
python3 -m venv .adk_env
# Activate virtual environment
source .adk_env/bin/activate
# Install dependencies
pip install --upgrade pip
pip install -r requirements.txt
ขั้นตอนที่ 3: 🔥 สำคัญ - สร้างตัวแปรสภาพแวดล้อม
⚠️ อย่าข้ามขั้นตอนนี้ สร้างไฟล์ .env ในไดเรกทอรี agent/ ดังนี้
# Create the .env file
touch agent/.env
# Open it in your default text editor
open agent/.env
เพิ่มบรรทัดต่อไปนี้ลงในไฟล์
GOOGLE_GENAI_USE_VERTEXAI=FALSE
GOOGLE_API_KEY=your_actual_api_key_here
🚨 สำคัญ: แทนที่ your_actual_api_key_here ด้วยคีย์ API จริงของคุณ
ขั้นตอนที่ 4: เปิดใช้งานสภาพแวดล้อมเสมือน (หากยังไม่ได้เปิดใช้งาน)
source .adk_env/bin/activate
คุณควรเห็น (.adk_env) ที่จุดเริ่มต้นของพรอมต์เทอร์มินัล
ขั้นตอนที่ 5: เรียกใช้เว็บอินเทอร์เฟซของ ADK
adk web
ขั้นตอนที่ 6: เปิดเบราว์เซอร์
- เปิดเบราว์เซอร์ แล้วไปที่ URL ที่แสดงในเทอร์มินัล (โดยปกติคือ
http://localhost:8000) - เลือก
agentในเมนูแบบเลื่อนลงด้านซ้ายบน - เริ่มแชทกับตัวแทนวางแผนทริปแบบไปเช้าเย็นกลับได้เลย
คุณจะเห็นการสนทนาในลักษณะต่อไปนี้ 
การปิดใช้งานสภาพแวดล้อม
เมื่อทำงานกับโปรเจ็กต์เสร็จแล้ว ให้ทำดังนี้
deactivate
คำสั่งนี้ทำงานเหมือนกันทั้งใน Mac/Linux และ Windows คุณจะเห็นว่าคำนำหน้า (.adk_env) หายไปจากพรอมต์เทอร์มินัล
การแก้ปัญหาเกี่ยวกับ Mac
- ไม่พบ Python: ใช้
python3แทนpython - สิทธิ์ถูกปฏิเสธ: เรียกใช้
chmod +x setup_venv.shก่อนเรียกใช้สคริปต์
12. ภาคผนวก: ADK Web - 🪟 สำหรับผู้ใช้ Windows
คู่มือนี้จะแนะนำขั้นตอนการตั้งค่าและเรียกใช้เอเจนต์การวางแผนการเดินทางแบบไปเช้าเย็นกลับของ ADK ในเครื่องของคุณ
ข้อกำหนดเบื้องต้น
- Python 3.8 ขึ้นไป
- Python 3.9 ขึ้นไป: ติดตั้ง google-adk==1.5.0 (เวอร์ชันล่าสุดที่มีฟีเจอร์ครบถ้วน)
- Python 3.8: ติดตั้ง google-adk==0.3.0 (เวอร์ชันที่เข้ากันได้)
- คีย์ Google AI Studio API
- การเชื่อมต่ออินเทอร์เน็ต
ขั้นตอนที่ 1: โคลนที่เก็บ
เปิด Command Prompt หรือ PowerShell แล้วเรียกใช้คำสั่งต่อไปนี้
git clone https://github.com/cuppibla/ADK_Basic.git
cd ADK_Basic
ขั้นตอนที่ 2: ตั้งค่าสภาพแวดล้อมเสมือนและติดตั้งการอ้างอิง
ตัวเลือก A: การตั้งค่าอัตโนมัติ (แนะนำ)
# Run the setup script in Command Prompt
setup_venv.bat
ตัวเลือก ข: การตั้งค่าด้วยตนเอง
สำหรับ Command Prompt
# Create virtual environment
python -m venv .adk_env
# Activate virtual environment
.adk_env\Scripts\activate
# Install dependencies
pip install --upgrade pip
pip install -r requirements.txt
สำหรับ PowerShell:
# Create virtual environment
python -m venv .adk_env
# Activate virtual environment
.adk_env\Scripts\Activate.ps1
# Install dependencies
pip install --upgrade pip
pip install -r requirements.txt
ขั้นตอนที่ 3: 🔥 สำคัญ - สร้างตัวแปรสภาพแวดล้อม
⚠️ อย่าข้ามขั้นตอนนี้ สร้างไฟล์ .env ในไดเรกทอรี agent/ ดังนี้
# Create the .env file
type nul > agent\.env
# Open it in Notepad
notepad agent\.env
เพิ่มบรรทัดต่อไปนี้ลงในไฟล์
GOOGLE_GENAI_USE_VERTEXAI=FALSE
GOOGLE_API_KEY=your_actual_api_key_here
🚨 สำคัญ: แทนที่ your_actual_api_key_here ด้วยคีย์ API จริงของคุณ
ขั้นตอนที่ 4: เปิดใช้งานสภาพแวดล้อมเสมือน (หากยังไม่ได้เปิดใช้งาน)
Command Prompt:
.adk_env\Scripts\activate
PowerShell:
.adk_env\Scripts\Activate.ps1
คุณควรเห็น (.adk_env) ที่จุดเริ่มต้นของพรอมต์
ขั้นตอนที่ 5: เรียกใช้เว็บอินเทอร์เฟซของ ADK
adk web
ขั้นตอนที่ 6: เปิดเบราว์เซอร์
- เปิดเบราว์เซอร์ แล้วไปที่ URL ที่แสดงในเทอร์มินัล (โดยปกติคือ
http://localhost:8000) - เลือก
agentในเมนูแบบเลื่อนลงด้านซ้ายบน - เริ่มแชทกับตัวแทนวางแผนทริปแบบไปเช้าเย็นกลับได้เลย
การแก้ปัญหาใน Windows
- ข้อผิดพลาดเกี่ยวกับนโยบายการดำเนินการของ PowerShell: เรียกใช้
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
คุณจะเห็นการสนทนาในลักษณะต่อไปนี้ 
การปิดใช้งานสภาพแวดล้อม
เมื่อทำงานกับโปรเจ็กต์เสร็จแล้ว ให้ทำดังนี้
deactivate
คำสั่งนี้ทำงานเหมือนกันทั้งใน Mac/Linux และ Windows คุณจะเห็นว่าคำนำหน้า (.adk_env) หายไปจากพรอมต์เทอร์มินัล