1. สิ่งที่คุณจะได้เรียนรู้
ยินดีต้อนรับสู่ ADK Master Class - เส้นทางสู่ระบบหลายเอเจนต์
คุณกำลังจะก้าวเข้าสู่โลกที่น่าตื่นเต้นของ AI Agent ลืมแชทบ็อตแบบง่ายๆ ที่ตอบคำถามเท่านั้นไปได้เลย เรากำลังเจาะลึกAgent Development Kit (ADK)
เพื่อสร้างระบบอัตโนมัติที่ซับซ้อนซึ่งสามารถให้เหตุผล วางแผน และใช้เครื่องมือเพื่อทำงานที่ซับซ้อนให้สำเร็จ
เมื่อจบบทแนะนำนี้ คุณจะทำสิ่งต่อไปนี้ได้
- สร้าง AI Agent ตัวแรก: สร้าง Agent ที่ทำงานได้อย่างเต็มรูปแบบตั้งแต่ต้นจนจบ ซึ่งสามารถทำความเข้าใจความต้องการของผู้ใช้ ใช้เครื่องมือต่างๆ เช่น Google Search และสร้างคำตอบที่มีรายละเอียดและเป็นประโยชน์
- เชี่ยวชาญเครื่องมือที่กำหนดเอง: ปลดล็อกศักยภาพที่แท้จริงของเอเจนต์ด้วยการเชื่อมต่อเอเจนต์กับฟังก์ชันและ API ที่กำหนดเองของคุณ คุณจะสอนเอเจนต์ให้ดึงข้อมูลแบบเรียลไทม์ เช่น พยากรณ์อากาศล่าสุด
- สร้างระบบแบบหลายเอเจนต์: เรียนรู้รูปแบบ "เอเจนต์ในฐานะเครื่องมือ" ซึ่งเป็นแนวคิดที่ปฏิวัติวงการที่เอเจนต์มอบหมายงานให้เอเจนต์เฉพาะทางอื่นๆ ซึ่งเป็นการสร้างทีมผู้เชี่ยวชาญด้าน AI ที่ทำงานร่วมกัน
- จัดระเบียบเวิร์กโฟลว์ที่ซับซ้อน: ทำได้มากกว่าการมอบหมายงานแบบง่ายๆ และเชี่ยวชาญรูปแบบขั้นสูง เช่น เราเตอร์, เชนแบบลำดับ, ลูป และการดำเนินการแบบขนาน เพื่อสร้างแอปพลิเคชันที่มีประสิทธิภาพ มีประสิทธิภาพ และชาญฉลาดที่สามารถจัดการคำขอได้เกือบทุกคำขอ
- ให้ความทรงจำแก่เอเจนต์: ทำความเข้าใจบทบาทที่สำคัญของหน่วยความจำในการสนทนา ซึ่งช่วยให้เอเจนต์จัดการคำถามติดตามผล เรียนรู้จากความคิดเห็น และจัดการงานแบบหลายขั้นตอนได้อย่างราบรื่น
มาเริ่มกันเลย 🚀
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 : https://aistudio.google.com/
- ลงชื่อเข้าใช้ด้วยบัญชี Gmail
- คลิกปุ่ม "รับคีย์ API" ซึ่งมักจะอยู่ในแผงการนำทางด้านซ้ายมือหรือที่มุมขวาบน
- ในกล่องโต้ตอบ "คีย์ API" ให้คลิก "สร้างคีย์ API ในโปรเจ็กต์ใหม่"
- เลือกโปรเจ็กต์ใหม่ที่คุณสร้างขึ้นซึ่งมีการตั้งค่าบัญชีสำหรับการเรียกเก็บเงิน
- ระบบจะสร้างคีย์ API ใหม่ให้คุณ คัดลอกคีย์นี้ทันทีและเก็บไว้ในที่ปลอดภัยชั่วคราว (เช่น เครื่องมือจัดการรหัสผ่านหรือโน้ตที่ปลอดภัย) ค่านี้เป็นค่าที่คุณจะใช้ในขั้นตอนถัดไป
3. เซสชันที่ 1: เอเจนต์ตัวแรกของคุณด้วย Runner
มาเริ่มที่พื้นฐานกันก่อน ในที่นี้ เราจะสร้างเอเจนต์อย่างง่ายตัวแรก นั่นคือ day_trip_agent
จุดประสงค์ของเอเจนต์นี้คือการสร้างแผนการเดินทางแบบเต็มวันตามคำขอของผู้ใช้ รวมถึงการพิจารณางบประมาณ ตัวอย่างนี้จะแนะนำคอมโพเนนต์หลัก 3 อย่างของการโต้ตอบของเอเจนต์ใน ADK
- เอเจนต์: มันสมองหลักของการดำเนินการ โดยกำหนดจากคำสั่ง (บุคลิกภาพและภารกิจ) โมเดล AI ที่ใช้ (เช่น Gemini) และเครื่องมือที่เข้าถึงได้
- เซสชัน: หน่วยความจำของบทสนทนา โดยจะจัดเก็บประวัติการโต้ตอบ (ข้อความของผู้ใช้และการตอบกลับของตัวแทน) เพื่อให้การสนทนาต่อเนื่อง
- Runner: เครื่องมือที่ดำเนินการงาน โดยจะใช้ Agent และเซสชัน ประมวลผลคำค้นหาของผู้ใช้ใหม่ และจัดลำดับขั้นตอนเพื่อสร้างคำตอบ
➡️ ตำแหน่งของฟีเจอร์ใน Notebook
👉 ซึ่งสอดคล้องกับเซลล์ในส่วนตอนที่ 1: เอเจนต์ตัวแรกของคุณ - จีนี่ทริปแบบไปเช้าเย็นกลับ 🧞🌟
- คำจำกัดความของเอเจนต์: มองหาฟังก์ชัน
create_day_trip_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 สาธารณะของกรมอุตุนิยมวิทยา และแสดงผลพจนานุกรมที่มีอุณหภูมิและการพยากรณ์ - คำจำกัดความของเอเจนต์: เราสร้างและติดตั้งเครื่องมือใหม่ให้กับ 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 ทำหน้าที่มอบหมายงานให้กับเอเจนต์อื่นๆ ที่มีความเฉพาะเจาะจงมากกว่า
รูปแบบนี้ช่วยให้คุณสร้างเอเจนต์แบบโมดูลที่นำกลับมาใช้ใหม่ได้ เช่น คุณอาจมีเอเจนต์ที่เชี่ยวชาญในการค้นหาฐานข้อมูล เอเจนต์อีกรายที่เชี่ยวชาญด้านการเขียนเชิงสร้างสรรค์ และเอเจนต์รายที่ 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: หน่วยความจำของเอเจนต์ 🧠
เอเจนต์อัจฉริยะอย่างแท้จริงต้องทำได้มากกว่าการตอบคำถามแบบครั้งเดียว โดยจะต้องจดจำการสนทนา เข้าใจบริบท และปรับตัวตามความคิดเห็น ซึ่งทำได้ผ่านการจัดการเซสชันที่เหมาะสม "ตัวแทนแบบวนซ้ำ" คือตัวแทนที่อยู่ในลูปการสนทนาอย่างต่อเนื่องซึ่งขับเคลื่อนโดยหน่วยความจำของตัวแทน
เมื่อใช้ออบเจ็กต์เซสชันเดียวกันสำหรับการค้นหาหลายรายการที่ต่อเนื่องกัน เอเจนต์จะ "เห็น" ประวัติการสนทนาทั้งหมด ซึ่งช่วยให้โมเดลจัดการกับคำถามติดตาม แก้ไขตัวเองตามความคิดเห็น และวางแผนงานแบบหลายขั้นตอนได้
➡️ ตำแหน่งของฟีเจอร์ใน Notebook
👉 ซึ่งสอดคล้องกับเซลล์ในส่วนส่วนที่ 3: เอเจนต์ที่มีหน่วยความจำ - เครื่องมือวางแผนแบบปรับเปลี่ยนได้ 🗺️ 🌟
- คำจำกัดความของ Agent: ฟังก์ชัน
create_multi_day_trip_agent()
จะกำหนด Agent ที่ออกแบบมาเพื่อวางแผนการเดินทางแบบค่อยเป็นค่อยไป คำแนะนำของโมเดลนี้เน้นการจดจำบริบท การจัดการความคิดเห็น และการวางแผนทีละวัน
สถานการณ์ 3a: เอเจนต์ที่มีหน่วยความจำ (✅)
การทดสอบนี้จะทำงานในฟังก์ชัน run_adaptive_memory_demonstration()
- ระบบจะสร้าง
trip_session
เดียวและนำกลับมาใช้ซ้ำเป็นเวลา 3 เทิร์นติดต่อกัน - เทิร์นที่ 1: ผู้ใช้เริ่มวางแผนการเดินทาง 2 วัน
- เทิร์นที่ 2: ผู้ใช้แสดงความคิดเห็น ("ฉันไม่ค่อยชอบปราสาท") เนื่องจากเอเจนต์มีหน่วยความจำของเทิร์นที่ 1 จึงเข้าใจว่าควรเปลี่ยนแผนส่วนใดและเสนอทางเลือกอื่น
- เทิร์นที่ 3: ผู้ใช้ยืนยันการเปลี่ยนแปลงและขอขั้นตอนถัดไป เอเจนต์จะจดจำทุกอย่างและวางแผนวันที่ 2 ต่อ
สถานการณ์ 3b: Agent ที่ไม่มีหน่วยความจำ (❌)
การทดสอบนี้จะทำงานในฟังก์ชัน 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: ความวุ่นวายของหลายเอเจนต์ - เวิร์กโฟลว์แบบลำดับ 🧠→🤖→🤖 🌟
- คำจำกัดความของเอเจนต์: เซลล์โค้ดจะกำหนดเอเจนต์ผู้เชี่ยวชาญหลายราย (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 Web - 🍎 สำหรับ Mac/Linux
คู่มือนี้จะแนะนำขั้นตอนการตั้งค่าและเรียกใช้เอเจนต์วางแผนการเดินทางแบบไปเช้าเย็นกลับของ 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: ตั้งค่าสภาพแวดล้อมเสมือนและติดตั้งการอ้างอิง
ตัวเลือก ก: การตั้งค่าอัตโนมัติ (แนะนำ)
# 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 (เวอร์ชันที่เข้ากันได้)
- คีย์ API ของ Google AI Studio
- การเชื่อมต่ออินเทอร์เน็ต
ขั้นตอนที่ 1: โคลนที่เก็บ
เปิด Command Prompt หรือ PowerShell แล้วเรียกใช้คำสั่งต่อไปนี้
git clone https://github.com/cuppibla/ADK_Basic.git
cd ADK_Basic
ขั้นตอนที่ 2: ตั้งค่าสภาพแวดล้อมเสมือนและติดตั้งการอ้างอิง
ตัวเลือก ก: การตั้งค่าอัตโนมัติ (แนะนำ)
# 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)
หายไปจากพรอมต์เทอร์มินัล