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

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

หากเห็นหน้านี้ ให้ตรวจสอบ manage billing account เลือก Google Cloud Trial One และลิงก์กับบัญชีดังกล่าว
ขั้นตอนที่ 3: คัดลอกรหัสโปรเจ็กต์
- ไปที่ console.cloud.google.com
- คลิกเมนูแบบเลื่อนลงของตัวเลือกโปรเจ็กต์ที่ด้านบนของหน้า
- คลิกแท็บ "ทั้งหมด" (เนื่องจากโปรเจ็กต์ใหม่อาจยังไม่ปรากฏใน "ล่าสุด")
- เลือกรหัสโปรเจ็กต์ที่คุณเพิ่งสร้าง

3. เซสชันที่ 1: Agent ตัวแรกของคุณด้วย Runner
มาเริ่มที่พื้นฐานกันก่อน ในที่นี้ เราจะสร้าง Agent อย่างง่ายตัวแรกคือ day_trip_agent จุดประสงค์ของเอเจนต์นี้คือการสร้างแผนการเดินทางแบบเต็มวันตามคำขอของผู้ใช้ รวมถึงการพิจารณางบประมาณ ตัวอย่างนี้จะแนะนำคอมโพเนนต์หลัก 3 อย่างของการโต้ตอบกับเอเจนต์ใน ADK
- Agent: มันสมองหลักของปฏิบัติการ โดยจะกำหนดจากคำสั่ง (บุคลิกภาพและภารกิจ) โมเดล AI ที่ใช้ (เช่น Gemini) และเครื่องมือที่เข้าถึงได้
- เซสชัน: หน่วยความจำของบทสนทนา โดยจะจัดเก็บประวัติการโต้ตอบ (ข้อความของผู้ใช้และการตอบกลับของเอเจนต์) เพื่อให้การสนทนาต่อเนื่อง
- Runner: เครื่องมือที่ดำเนินการงาน โดยจะใช้ Agent และเซสชัน ประมวลผลคำค้นหาของผู้ใช้ใหม่ และจัดลำดับขั้นตอนเพื่อสร้างคำตอบ
➡️ ตำแหน่งของฟีเจอร์ใน Notebook
👉 ซึ่งสอดคล้องกับเซลล์ในส่วนตอนที่ 1: เอเจนต์ตัวแรกของคุณ - จินนี่วางแผนการเดินทางแบบไปเช้าเย็นกลับ 🧞🌟
- คำจำกัดความของเอเจนต์: มองหาฟังก์ชัน
create_day_trip_agent()ส่วนนี้คือส่วนที่กำหนด Agent โปรดสังเกตสตริงคำสั่งโดยละเอียด ซึ่งเป็นพรอมต์ที่บอก Agent ว่าควรมีลักษณะการทำงานอย่างไร นอกจากนี้ เรายังมอบเครื่องมือแรกให้แก่ AI นั่นคือ Google Search - ฟังก์ชันตัวช่วย: ฟังก์ชันตัวช่วย
run_agent_query()มีคำจำกัดความอยู่ที่นี่ เราจะใช้ยูทิลิตี้นี้ตลอดทั้ง Notebook เพื่อลดความซับซ้อนในการเรียกใช้การค้นหา - การทดสอบ: ฟังก์ชัน
run_day_trip_genie()จะจำลองผู้ใช้ที่ขอทริปแบบไปเช้าเย็นกลับที่ "ราคาไม่แพง" และ "ผ่อนคลาย" Agent จะใช้คำสั่งและเครื่องมือ Google Search เพื่อค้นหาสถานที่ที่เหมาะสมและสร้างแผนการเดินทางในรูปแบบมาร์กดาวน์
➡️ การดำเนินการ: ตรวจสอบพรอมต์คำสั่งสำหรับ day_trip_agent ดูว่าคำขอทริป "ราคาไม่แพง" ในคำค้นหาทดสอบเกี่ยวข้องกับหลักเกณฑ์ของเอเจนต์ที่ระบุว่า "คำนึงถึงงบประมาณ" โดยตรงอย่างไร
4. เซสชันที่ 2: เครื่องมือที่กำหนดเอง 🛠️
แม้ว่า Google Search จะมีประสิทธิภาพ แต่ศักยภาพที่แท้จริงของ AI Agent จะปลดล็อกได้เมื่อคุณเชื่อมต่อเอเจนต์กับแหล่งข้อมูล, API หรือตรรกะที่กำหนดเองของคุณเอง ในส่วนนี้ เราจะสร้างเครื่องมือที่กำหนดเองจากฟังก์ชัน Python แบบง่าย
ส่วนที่สำคัญที่สุดของเครื่องมือฟังก์ชันคือ Docstring ADK จะแยกวิเคราะห์สตริงเอกสารโดยอัตโนมัติเพื่อทำความเข้าใจว่าเครื่องมือทำอะไร รับพารามิเตอร์ใด (Args) และส่งคืนอะไร (Returns) โมเดลภาษาขนาดใหญ่ (LLM) จะอ่านคำอธิบายนี้เพื่อตัดสินใจว่าจะใช้เครื่องมือเมื่อใดและอย่างไร
➡️ ตำแหน่งของฟีเจอร์ใน Notebook
ซึ่งสอดคล้องกับเซลล์ในส่วน2.1 เครื่องมือฟังก์ชันแบบง่าย: การเรียก Weather API แบบเรียลไทม์ 🌟
- คำจำกัดความของเครื่องมือ: ฟังก์ชัน
get_live_weather_forecast(location: str)คือหัวใจหลักของเครื่องมือที่กำหนดเอง โดยจะรับชื่อเมือง เรียกใช้ API สาธารณะของกรมอุตุนิยมวิทยา และแสดงผลพจนานุกรมที่มีอุณหภูมิและการพยากรณ์ - คำจำกัดความของเอเจนต์: ระบบจะสร้าง weather_agent และติดตั้งเครื่องมือใหม่ของเราโดยส่ง
tools=[get_live_weather_forecast]ระหว่างการเริ่มต้น คำสั่งของเอเจนต์ระบุอย่างชัดเจนให้ใช้เครื่องมือนี้ก่อนแนะนำกิจกรรมกลางแจ้ง - การทดสอบ: คำค้นหา "ฉันอยากไปเดินป่าแถวทะเลสาบทาโฮ อากาศเป็นยังไง" จะทริกเกอร์เอเจนต์ให้ใช้เครื่องมือ
get_live_weather_forecastโดยตรงเนื่องจากคำสั่งกำหนดให้ใช้
➡️ การดำเนินการ: อ่านสตริงเอกสารสำหรับฟังก์ชัน get_live_weather_forecast และคำสั่งสำหรับ weather_agent โปรดทราบว่าทั้ง 2 อย่างนี้มีความสัมพันธ์กันโดยตรง
5. เซสชันที่ 3: เอเจนต์ในฐานะเครื่องมือ 🧑🍳
ทำไมต้องสร้าง Agent แบบโมโนลิธตัวเดียวในเมื่อคุณสร้างทีมผู้เชี่ยวชาญได้ รูปแบบ Agent-as-a-Tool เป็นวิธีที่มีประสิทธิภาพในการสร้างระบบที่ซับซ้อนซึ่งเอเจนต์หลัก (มักเรียกว่า Orchestrator หรือ Router) จะมอบหมายงานให้กับเอเจนต์อื่นๆ ที่มีความเฉพาะเจาะจงมากกว่า
รูปแบบนี้ช่วยให้คุณสร้าง Agent แบบโมดูลที่นำกลับมาใช้ใหม่ได้ เช่น คุณอาจมีเอเจนต์ที่เชี่ยวชาญด้านการค้นหาฐานข้อมูล เอเจนต์อีกรายที่เชี่ยวชาญด้านการเขียนเชิงสร้างสรรค์ และเอเจนต์ที่ 3 ที่ทำหน้าที่เป็นเจ้าหน้าที่อำนวยความสะดวกที่เป็นมิตร หน้าที่ของผู้ประสานงานคือการทำความเข้าใจคำขอของผู้ใช้และส่งต่อไปยังผู้เชี่ยวชาญที่เหมาะสม
➡️ ตำแหน่งของฟีเจอร์ใน Notebook
👉 ซึ่งสอดคล้องกับเซลล์ในส่วน 2.2 ตัวแทนในฐานะเครื่องมือ: การปรึกษาผู้เชี่ยวชาญ 🧑🍳🌟
ตัวอย่างนี้สร้างระบบ 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: หน่วยความจำของเอเจนต์ 🧠
เอเจนต์อัจฉริยะอย่างแท้จริงต้องทำได้มากกว่าการตอบคำถามแบบครั้งเดียว โดยจะต้องจดจำการสนทนา เข้าใจบริบท และปรับตามความคิดเห็น ซึ่งทำได้ผ่านการจัดการเซสชันที่เหมาะสม "Loop Agent" คือเอเจนต์ที่ทำงานในลูปการสนทนาอย่างต่อเนื่องโดยใช้หน่วยความจำของตัวเอง
เมื่อใช้ออบเจ็กต์เซสชันเดียวกันสำหรับการค้นหาหลายรายการที่ต่อเนื่องกัน เอเจนต์จะ "เห็น" ประวัติการสนทนาทั้งหมด ซึ่งช่วยให้จัดการคำถามติดตาม แก้ไขตัวเองตามความคิดเห็น และวางแผนงานแบบหลายขั้นตอนได้
➡️ ตำแหน่งของฟีเจอร์ใน Notebook
👉 ซึ่งสอดคล้องกับเซลล์ในส่วนส่วนที่ 3: เอเจนต์ที่มีหน่วยความจำ - เครื่องมือวางแผนแบบปรับเปลี่ยนได้ 🗺️ 🌟
- คำจำกัดความของ Agent: ฟังก์ชัน
create_multi_day_trip_agent()กำหนด Agent ที่ออกแบบมาเพื่อวางแผนการเดินทางแบบค่อยเป็นค่อยไป คำแนะนำของโมเดลนี้เน้นการจดจำบริบท การจัดการความคิดเห็น และการวางแผนทีละวัน
สถานการณ์ที่ 3ก: เอเจนต์ที่มีหน่วยความจำ (✅)
การทดสอบนี้จะทำงานในฟังก์ชัน 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 จะทำหน้าที่เป็น 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 นี่คือเอเจนต์เวิร์กโฟลว์พิเศษที่เรียกใช้รายการเอเจนต์ย่อยตามลำดับที่กำหนดไว้ล่วงหน้า
ความมหัศจรรย์อยู่ที่สถานะที่แชร์ เอาต์พุตของเอเจนต์หนึ่งในลำดับจะบันทึกลงในพจนานุกรมสถานะที่แชร์โดยอัตโนมัติ จากนั้นจะใช้เป็นอินพุตสำหรับเอเจนต์ถัดไป ซึ่งช่วยให้ไม่ต้องใช้โค้ดที่ซับซ้อนด้วยตนเองเพื่อส่งข้อมูลระหว่างขั้นตอนต่างๆ
➡️ วิธีค้นหาใน 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 - คำจำกัดความของ Loop:
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 Web - 🍎 สำหรับ Mac/Linux
คู่มือนี้จะแนะนำการตั้งค่าและการเรียกใช้ Agent วางแผนการเดินทางแบบไปเช้าเย็นกลับของ ADK ในเครื่องของคุณ
ข้อกำหนดเบื้องต้น
- Python 3.8 ขึ้นไป
- Python 3.9 ขึ้นไป: ติดตั้ง google-adk==1.5.0 (เวอร์ชันล่าสุดที่มีฟีเจอร์ครบถ้วน)
- Python 3.8: ติดตั้ง google-adk==0.3.0 (เวอร์ชันที่เข้ากันได้)
- คีย์ API ของ Google AI Studio
- การเชื่อมต่ออินเทอร์เน็ต
ขั้นตอนที่ 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
คู่มือนี้จะแนะนำการตั้งค่าและการเรียกใช้ Agent วางแผนการเดินทางแบบไปเช้าเย็นกลับของ ADK ในเครื่องของคุณ
ข้อกำหนดเบื้องต้น
- Python 3.8 ขึ้นไป
- Python 3.9 ขึ้นไป: ติดตั้ง google-adk==1.5.0 (เวอร์ชันล่าสุดที่มีฟีเจอร์ครบถ้วน)
- Python 3.8: ติดตั้ง google-adk==0.3.0 (เวอร์ชันที่เข้ากันได้)
- คีย์ API ของ Google AI Studio
- การเชื่อมต่ออินเทอร์เน็ต
ขั้นตอนที่ 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) หายไปจากพรอมต์เทอร์มินัล