หลักสูตรเร่งรัดเกี่ยวกับ ADK - จากผู้เริ่มต้นสู่ผู้เชี่ยวชาญ

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 แล้วสร้างโปรเจ็กต์ใหม่

สร้างบัญชี GCP ใหม่

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

ลิงก์บัญชีสำหรับการเรียกเก็บเงินกับบัญชี gcp

หากเห็นหน้านี้ ให้ตรวจสอบ manage billing account เลือก Google Cloud Trial One และลิงก์กับบัญชี

ขั้นตอนที่ 3: สร้างคีย์ Gemini API

คุณต้องมีคีย์ก่อนจึงจะรักษาความปลอดภัยของคีย์ได้

  • ไปที่ Google AI Studio : https://aistudio.google.com/
  • ลงชื่อเข้าใช้ด้วยบัญชี Gmail
  • คลิกปุ่ม "รับคีย์ API" ซึ่งมักจะอยู่ในแผงการนำทางด้านซ้ายมือหรือที่มุมขวาบน
  • ในกล่องโต้ตอบ "คีย์ API" ให้คลิก "สร้างคีย์ API ในโปรเจ็กต์ใหม่" สร้างคีย์ API ในโปรเจ็กต์ใหม่
  • เลือกโปรเจ็กต์ใหม่ที่คุณสร้างขึ้นซึ่งมีการตั้งค่าบัญชีสำหรับการเรียกเก็บเงิน เลือกโปรเจ็กต์ใหม่
  • ระบบจะสร้างคีย์ API ใหม่ให้คุณ คัดลอกคีย์นี้ทันทีและเก็บไว้ในที่ปลอดภัยชั่วคราว (เช่น เครื่องมือจัดการรหัสผ่านหรือโน้ตที่ปลอดภัย) ค่านี้เป็นค่าที่คุณจะใช้ในขั้นตอนถัดไป

3. เซสชันที่ 1: เอเจนต์ตัวแรกของคุณด้วย Runner

roadmap1

มาเริ่มที่พื้นฐานกันก่อน ในที่นี้ เราจะสร้างเอเจนต์อย่างง่ายตัวแรก นั่นคือ 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: เครื่องมือที่กำหนดเอง 🛠️

roadmap2

แม้ว่า Google Search จะมีประสิทธิภาพ แต่ศักยภาพที่แท้จริงของเอเจนต์ AI จะปลดล็อกได้เมื่อคุณเชื่อมต่อเอเจนต์กับแหล่งข้อมูล, API หรือตรรกะที่กำหนดเองของคุณเอง ในส่วนนี้ เราจะสร้างเครื่องมือที่กำหนดเองจากฟังก์ชัน Python แบบง่าย

ส่วนที่สำคัญที่สุดของเครื่องมือฟังก์ชันคือ Docstring ADK จะแยกวิเคราะห์ Docstring โดยอัตโนมัติเพื่อทำความเข้าใจว่าเครื่องมือทำอะไร รับพารามิเตอร์ใด (Args) และส่งคืนอะไร (Returns) โมเดลภาษาขนาดใหญ่ (LLM) จะอ่านคำอธิบายนี้เพื่อตัดสินใจว่าจะใช้เครื่องมือเมื่อใดและอย่างไร

➡️ ตำแหน่งของฟีเจอร์ใน Notebook

👉 ซึ่งสอดคล้องกับเซลล์ในส่วน2.1 เครื่องมือฟังก์ชันแบบง่าย: การเรียก API สภาพอากาศแบบเรียลไทม์ 🌟

เครื่องมือ adk

  • คำจำกัดความของเครื่องมือ: ฟังก์ชัน 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: เอเจนต์ในฐานะเครื่องมือ 🧑‍🍳

roadmap3

ทำไมต้องสร้างเอเจนต์แบบโมโนลิธตัวเดียวในเมื่อสร้างทีมผู้เชี่ยวชาญได้ 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
  • โฟลว์: การทดสอบที่ทำงานใน 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: หน่วยความจำของเอเจนต์ 🧠

roadmap4

เอเจนต์อัจฉริยะอย่างแท้จริงต้องทำได้มากกว่าการตอบคำถามแบบครั้งเดียว โดยจะต้องจดจำการสนทนา เข้าใจบริบท และปรับตัวตามความคิดเห็น ซึ่งทำได้ผ่านการจัดการเซสชันที่เหมาะสม "ตัวแทนแบบวนซ้ำ" คือตัวแทนที่อยู่ในลูปการสนทนาอย่างต่อเนื่องซึ่งขับเคลื่อนโดยหน่วยความจำของตัวแทน

เมื่อใช้ออบเจ็กต์เซสชันเดียวกันสำหรับการค้นหาหลายรายการที่ต่อเนื่องกัน เอเจนต์จะ "เห็น" ประวัติการสนทนาทั้งหมด ซึ่งช่วยให้โมเดลจัดการกับคำถามติดตาม แก้ไขตัวเองตามความคิดเห็น และวางแผนงานแบบหลายขั้นตอนได้

➡️ ตำแหน่งของฟีเจอร์ใน Notebook

👉 ซึ่งสอดคล้องกับเซลล์ในส่วนส่วนที่ 3: เอเจนต์ที่มีหน่วยความจำ - เครื่องมือวางแผนแบบปรับเปลี่ยนได้ 🗺️ 🌟

หน่วยความจำของ Agent

  • คำจำกัดความของ 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: ตัวแทนเราเตอร์ 🚏

roadmap5

ตัวแทน 1 คนทำได้เพียงบางอย่างเท่านั้น เราต้องมีทีมตัวแทนผู้เชี่ยวชาญเพื่อจัดการคำขอของผู้ใช้ที่ซับซ้อนอย่างแท้จริง แต่เราจะทราบได้อย่างไรว่าควรใช้เอเจนต์ใดสำหรับการค้นหาที่กำหนด ซึ่ง Router Agent จะเข้ามาช่วยในส่วนนี้

Router Agent จะทำหน้าที่เป็นเอเจนต์ "หลัก" หรือผู้จัดส่ง โดยมีจุดประสงค์เพียงอย่างเดียวคือการวิเคราะห์คำค้นหาของผู้ใช้ที่เข้ามาและตัดสินใจว่าเอเจนต์ผู้เชี่ยวชาญ (หรือเวิร์กโฟลว์ของเอเจนต์) ใดที่เหมาะกับงานมากที่สุด โดยจะไม่ตอบคำค้นหาด้วยตัวเอง แต่จะส่งคำค้นหาไปยังตัวแทนปลายทางที่ถูกต้อง

เช่น คำถามเกี่ยวกับ "ซูชิที่ดีที่สุด" ควรส่งไปยัง foodie_agent ส่วนคำถามเกี่ยวกับ "คอนเสิร์ตสุดสัปดาห์นี้" ควรส่งไปยัง weekend_guide_agent

➡️ คุณจะดูข้อมูลนี้ใน Notebook ได้ที่ใด

👉 แนวคิดนี้เป็นหัวใจสำคัญของ Notebook ทั้งหมด แต่จะมีการแนะนำเป็นครั้งแรกในส่วนที่ 1: ความวุ่นวายของหลายเอเจนต์ - เวิร์กโฟลว์แบบลำดับ 🧠→🤖→🤖 🌟

Router Agent

  • คำจำกัดความของเอเจนต์: เซลล์โค้ดจะกำหนดเอเจนต์ผู้เชี่ยวชาญหลายราย (day_trip_agent, foodie_agent, transportation_agent) และที่สำคัญที่สุดคือ router_agent โปรดใส่ใจกับพรอมต์คำสั่งสำหรับ router_agent อย่างใกล้ชิด เนื่องจากมีการระบุอย่างชัดเจนว่าให้แสดงเฉพาะชื่อของเอเจนต์ที่ดีที่สุดสำหรับงานนั้นๆ
  • ตรรกะการดำเนินการ: ฟังก์ชัน run_sequential_app แสดงให้เห็นวิธีเรียกใช้ router_agent ก่อนเพื่อรับการตัดสินใจ (chosen_route) แล้วใช้การตัดสินใจนั้นในบล็อก if/elif เพื่อเรียกใช้เอเจนต์ผู้เชี่ยวชาญที่เหมาะสม

8. เซสชัน 6: SequentialAgent ⛓️

roadmap6

บางงานต้องทำหลายขั้นตอนตามลำดับที่เฉพาะเจาะจง เช่น "หาร้านซูชิที่ดีที่สุดในพาโลอัลโตให้หน่อย แล้วบอกวิธีเดินทางไปที่นั่นด้วย" กระบวนการนี้มี 2 ขั้นตอน ขั้นแรกคือค้นหาร้านอาหาร และขั้นที่สองคือขอเส้นทาง

ADK มีวิธีที่สะอาดและมีประสิทธิภาพในการจัดการเรื่องนี้ด้วย SequentialAgent นี่คือ Agent เวิร์กโฟลว์พิเศษที่เรียกใช้รายการ Agent ย่อยตามลำดับที่กำหนดไว้ล่วงหน้า

ความมหัศจรรย์อยู่ที่สถานะที่แชร์ ระบบจะบันทึกเอาต์พุตของเอเจนต์หนึ่งในลำดับไปยังพจนานุกรมสถานะที่แชร์โดยอัตโนมัติ จากนั้นจะใช้เป็นอินพุตสำหรับเอเจนต์ถัดไป ซึ่งช่วยให้ไม่ต้องใช้โค้ดที่ซับซ้อนซึ่งต้องเขียนด้วยตนเองเพื่อส่งข้อมูลระหว่างขั้นตอน

➡️ คุณจะดูข้อมูลนี้ใน Notebook ได้ที่ใด

👉 เราจะพูดถึงเรื่องนี้ในส่วนที่ 2 (วิถี ADK): ความวุ่นวายของหลายเอเจนต์ด้วย SequentialAgent 🧠→⛓️→🤖 🌟

Sequential Agent

  • การปรับโครงสร้าง 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 🔁

roadmap7

ปัญหาบางอย่างไม่ได้มีวิธีแก้ที่ตรงไปตรงมาและทำได้ในครั้งเดียว บางครั้งเราต้องเสนอวิธีแก้ปัญหา วิพากษ์วิจารณ์ และปรับปรุงวิธีแก้ปัญหาดังกล่าวจนกว่าจะตรงตามข้อจำกัดที่เฉพาะเจาะจง

ด้วยเหตุนี้ ADK จึงมี LoopAgent Agent เวิร์กโฟลว์นี้จะเรียกใช้ลำดับของ Agent ย่อยซ้ำๆ จนกว่าจะตรงตามเงื่อนไขที่เฉพาะเจาะจง ซึ่งเหมาะอย่างยิ่งสำหรับการสร้าง Agent ที่ "สมบูรณ์แบบ" ซึ่งสามารถวางแผน วิจารณ์ และปรับปรุงงานของตนเองได้

แผนภาพแสดงPlanner Agentการสร้างแผนก่อน จากนั้นเราจะเข้าสู่ LoopAgent Critic Agent จะตรวจสอบแพ็กเกจ หากไม่สมบูรณ์ Refiner Agent จะสร้างเวอร์ชันใหม่และวนซ้ำ หากแผนดี Refiner Agent จะเรียกใช้เครื่องมือ exit_loop และระบบจะแสดงแผนสุดท้ายที่ผ่านการตรวจสอบแล้ว

ตัวแทน 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 ⚡️

roadmap8

ประสิทธิภาพคือกุญแจสำคัญ หากผู้ใช้ขอข้อมูลหลายรายการที่ไม่เกี่ยวข้องพร้อมกัน การค้นหาข้อมูลเหล่านี้ทีละรายการจะช้า

ParallelAgent คือวิธีแก้ปัญหา Agent เวิร์กโฟลว์นี้จะเรียกใช้รายการ Agent ย่อยพร้อมกัน เมื่อดำเนินการแบบขนานทั้งหมดเสร็จแล้ว คุณจะรวบรวมผลลัพธ์และสังเคราะห์เป็นคำตอบที่ครอบคลุมเพียงคำตอบเดียวได้

แผนภาพนี้แสดงParallelAgentการใช้คำค้นหาเดียวและแยกงานออกเป็น 3 เส้นทางที่ทำงานพร้อมกัน museum_finder, concert_finder และ restaurant_finder จะทำงานพร้อมกัน เมื่อทั้ง 3 อย่างเสร็จสิ้นแล้ว ระบบจะรวมผลลัพธ์ของแต่ละอย่าง (บันทึกไว้ในสถานะที่แชร์) และส่งไปยังตัวแทนการสังเคราะห์ขั้นสุดท้าย ซึ่งจะรวมผลลัพธ์เหล่านั้นเป็นคำตอบเดียว

➡️ คุณจะดูข้อมูลนี้ใน Notebook ได้ที่ใด

👉 เวิร์กโฟลว์นี้มีรายละเอียดอยู่ในส่วนParallel Power with ParallelAgent 🧠→⚡️→🤖🤖🤖 🌟

Parallel Agent

  • ตัวแทนผู้เชี่ยวชาญ: มีการกำหนดตัวแทนผู้เชี่ยวชาญ 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

roadmap9

คู่มือนี้จะแนะนำขั้นตอนการตั้งค่าและเรียกใช้เอเจนต์วางแผนการเดินทางแบบไปเช้าเย็นกลับของ 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: เปิดเบราว์เซอร์

  1. เปิดเบราว์เซอร์ แล้วไปที่ URL ที่แสดงในเทอร์มินัล (โดยปกติคือ http://localhost:8000)
  2. เลือก agent ในเมนูแบบเลื่อนลงด้านซ้ายบน
  3. เริ่มแชทกับตัวแทนวางแผนทริปแบบไปเช้าเย็นกลับได้เลย

คุณจะเห็นการสนทนาในลักษณะต่อไปนี้ ตัวอย่าง UI เว็บของ ADK

การปิดใช้งานสภาพแวดล้อม

เมื่อทำงานกับโปรเจ็กต์เสร็จแล้ว ให้ทำดังนี้

deactivate

คำสั่งนี้ทำงานเหมือนกันทั้งใน Mac/Linux และ Windows คุณจะเห็นว่าคำนำหน้า (.adk_env) หายไปจากพรอมต์เทอร์มินัล

การแก้ปัญหาเกี่ยวกับ Mac

  • ไม่พบ Python: ใช้ python3 แทน python
  • สิทธิ์ถูกปฏิเสธ: เรียกใช้ chmod +x setup_venv.sh ก่อนเรียกใช้สคริปต์

12. ภาคผนวก: ADK Web - 🪟 สำหรับผู้ใช้ Windows

roadmap9

คู่มือนี้จะแนะนำขั้นตอนการตั้งค่าและเรียกใช้เอเจนต์วางแผนการเดินทางแบบไปเช้าเย็นกลับของ 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: เปิดเบราว์เซอร์

  1. เปิดเบราว์เซอร์ แล้วไปที่ URL ที่แสดงในเทอร์มินัล (โดยปกติคือ http://localhost:8000)
  2. เลือก agent ในเมนูแบบเลื่อนลงด้านซ้ายบน
  3. เริ่มแชทกับตัวแทนวางแผนทริปแบบไปเช้าเย็นกลับได้เลย

การแก้ปัญหาใน Windows

  • ข้อผิดพลาดเกี่ยวกับนโยบายการดำเนินการ PowerShell: เรียกใช้ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

คุณจะเห็นการสนทนาในลักษณะต่อไปนี้ ตัวอย่าง UI เว็บของ ADK

การปิดใช้งานสภาพแวดล้อม

เมื่อทำงานกับโปรเจ็กต์เสร็จแล้ว ให้ทำดังนี้

deactivate

คำสั่งนี้ทำงานเหมือนกันทั้งใน Mac/Linux และ Windows คุณจะเห็นว่าคำนำหน้า (.adk_env) หายไปจากพรอมต์เทอร์มินัล