สร้างระบบหลายเอเจนต์ด้วย ADK, ทำให้ใช้งานได้ใน Agent Engine และเริ่มต้นใช้งานโปรโตคอล A2A

1. วัตถุประสงค์ของห้องทดลองนี้

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

สิ่งที่คุณจะได้เรียนรู้

  • ทำความเข้าใจพื้นฐานของ ADK และดูวิธีสร้างระบบแบบหลายเอเจนต์
  • ดูวิธีติดตั้งใช้งานและใช้เอเจนต์ใน GCP ได้อย่างง่ายดาย
  • ทำความเข้าใจพื้นฐานของโปรโตคอล A2A
  • ดูวิธีใช้โปรโตคอล A2A และ ADK ร่วมกันเพื่อสร้างเอเจนต์แบบเปิด

2. ก่อนเริ่มต้น

  • หากยังไม่มีโปรเจ็กต์ที่ใช้ได้ คุณจะต้องสร้างโปรเจ็กต์ใหม่ในคอนโซล GCP
  • ในแล็บนี้ เราจะใช้ GCP Cloud Shell เพื่อทำงาน เปิด Cloud Shell แล้วตั้งค่าโปรเจ็กต์โดยใช้ Cloud Shell
  • เปิด GCP Cloud Shell Editor โดยกดปุ่ม Cloud Shell Editor หากเห็นป๊อปอัป "ให้สิทธิ์ Shell" ให้คลิกเพื่อให้สิทธิ์ Cloud Shell Editor
  • คุณตรวจสอบได้ว่าโปรเจ็กต์ได้รับการตรวจสอบสิทธิ์แล้วหรือไม่โดยใช้คำสั่งต่อไปนี้
gcloud auth list
  • เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันโปรเจ็กต์
gcloud config list project
  • หากไม่ได้ตั้งค่าโปรเจ็กต์ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่า
gcloud config set project <YOUR_PROJECT_ID>
  • เราต้องเปิดใช้บริการบางอย่างเพื่อเรียกใช้แล็บนี้ เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
gcloud services enable aiplatform.googleapis.com

3. ภาพรวม: ประโยชน์ของชุดพัฒนาเอเจนต์

ชุดพัฒนาเอเจนต์มีข้อดีหลักๆ หลายประการสําหรับนักพัฒนาแอปที่สร้างแอปพลิเคชันแบบเอเจนต์ ดังนี้

  1. ระบบหลายเอเจนต์: สร้างแอปพลิเคชันแบบแยกส่วนและปรับขนาดได้โดยการรวมเอเจนต์เฉพาะทางหลายรายไว้ในลำดับชั้น เปิดใช้การประสานงานและการมอบหมายที่ซับซ้อน
  2. ระบบนิเวศของเครื่องมือที่หลากหลาย: ติดตั้งความสามารถที่หลากหลายให้กับเอเจนต์: ใช้เครื่องมือที่สร้างไว้ล่วงหน้า (การค้นหา การดำเนินการโค้ด ฯลฯ) สร้างฟังก์ชันที่กำหนดเอง ผสานรวมเครื่องมือจากเฟรมเวิร์กเอเจนต์ของบุคคลที่สาม (LangChain, CrewAI) หรือแม้แต่ใช้เอเจนต์อื่นๆ เป็นเครื่องมือ
  3. การจัดระเบียบที่ยืดหยุ่น: กำหนดเวิร์กโฟลว์โดยใช้เอเจนต์เวิร์กโฟลว์ (SequentialAgent, ParallelAgent และ LoopAgent) สำหรับไปป์ไลน์ที่คาดการณ์ได้ หรือใช้ประโยชน์จากการกำหนดเส้นทางแบบไดนามิกที่ขับเคลื่อนด้วย LLM (การโอน LlmAgent) เพื่อให้มีลักษณะการทำงานที่ปรับเปลี่ยนได้
  4. ประสบการณ์ของนักพัฒนาซอฟต์แวร์แบบผสานรวม: พัฒนา ทดสอบ และแก้ไขข้อบกพร่องในเครื่องด้วย CLI ที่มีประสิทธิภาพและ UI สำหรับนักพัฒนาซอฟต์แวร์แบบอินเทอร์แอกทีฟ ตรวจสอบเหตุการณ์ สถานะ และการดำเนินการของเอเจนต์ทีละขั้นตอน
  5. การประเมินในตัว: ประเมินประสิทธิภาพของเอเจนต์อย่างเป็นระบบโดยการประเมินทั้งคุณภาพของคำตอบสุดท้ายและเส้นทางการดำเนินการแบบทีละขั้นตอนเทียบกับกรณีทดสอบที่กำหนดไว้ล่วงหน้า
  6. พร้อมใช้งาน: สร้างคอนเทนเนอร์และติดตั้งใช้งาน Agent ได้ทุกที่ ไม่ว่าจะเรียกใช้ในเครื่อง ปรับขนาดด้วย Vertex AI Agent Engine หรือผสานรวมเข้ากับโครงสร้างพื้นฐานที่กำหนดเองโดยใช้ Cloud Run หรือ Docker

แม้ว่า SDK หรือเฟรมเวิร์กเอเจนต์ Gen AI อื่นๆ จะช่วยให้คุณค้นหาโมเดลและแม้กระทั่งเพิ่มประสิทธิภาพด้วยเครื่องมือต่างๆ ได้ แต่การประสานงานแบบไดนามิกระหว่างโมเดลหลายๆ โมเดลนั้นต้องใช้ความพยายามอย่างมากในฝั่งของคุณ

Agent Development Kit มีเฟรมเวิร์กระดับสูงกว่าเครื่องมือเหล่านี้ ซึ่งช่วยให้คุณเชื่อมต่อเอเจนต์หลายรายเข้าด้วยกันได้อย่างง่ายดายเพื่อเวิร์กโฟลว์ที่ซับซ้อนแต่ดูแลรักษาง่าย

e554e9e43aafc757.png

4. ข้อมูลเบื้องต้นเกี่ยวกับ A2A

โปรโตคอล Agent2Agent (A2A) เป็นมาตรฐานแบบเปิดที่ออกแบบมาเพื่อช่วยให้การสื่อสารและการทำงานร่วมกันระหว่างเอเจนต์ AI แบบอัตโนมัติจากเฟรมเวิร์ก ผู้ให้บริการ และโดเมนต่างๆ เป็นไปอย่างราบรื่นและปลอดภัย

  1. การทำงานร่วมกันแบบสากล: A2A ช่วยให้เอเจนต์ทำงานร่วมกันได้ไม่ว่าเทคโนโลยีพื้นฐานจะเป็นอะไรก็ตาม ซึ่งจะช่วยส่งเสริมระบบนิเวศแบบหลายเอเจนต์อย่างแท้จริง ซึ่งหมายความว่าเอเจนต์ที่สร้างโดยบริษัทต่างๆ บนแพลตฟอร์มต่างๆ สามารถสื่อสารและประสานงานกันได้
  2. การค้นพบความสามารถ: เอเจนต์สามารถโฆษณาความสามารถของตนเองได้โดยใช้ "การ์ดเอเจนต์" (เอกสาร JSON) ซึ่งอธิบายข้อมูลระบุตัวตน ฟีเจอร์ A2A ที่รองรับ ทักษะ และข้อกำหนดในการตรวจสอบสิทธิ์ ซึ่งจะช่วยให้ตัวแทนคนอื่นๆ ค้นหาและเลือกตัวแทนที่เหมาะสมที่สุดสำหรับงานที่กำหนดได้
  3. ปลอดภัยอุ่นใจเสมอ: ความปลอดภัยเป็นหลักการสำคัญ A2A มีกลไกการตรวจสอบสิทธิ์และการให้สิทธิ์ระดับองค์กร โดยใช้มาตรฐานต่างๆ เช่น HTTPS/TLS, JWT, OIDC และคีย์ API เพื่อให้มั่นใจถึงการโต้ตอบที่ปลอดภัยและปกป้องข้อมูลที่ละเอียดอ่อน
  4. ไม่ขึ้นอยู่กับรูปแบบ: โปรโตคอลรองรับรูปแบบการสื่อสารต่างๆ รวมถึงการสตรีมข้อความ เสียง และวิดีโอ ตลอดจนแบบฟอร์มแบบอินเทอร์แอกทีฟและ iframe ที่ฝัง ความยืดหยุ่นนี้ช่วยให้เอเจนต์แลกเปลี่ยนข้อมูลในรูปแบบที่เหมาะสมที่สุดสำหรับงานและผู้ใช้
  5. การจัดการงานที่มีโครงสร้าง: A2A กำหนดโปรโตคอลที่ชัดเจนสำหรับการมอบหมายงาน การตรวจสอบ และการทำให้งานเสร็จสมบูรณ์ โดยรองรับการจัดกลุ่มงานที่เกี่ยวข้องและการจัดการงานเหล่านั้นในตัวแทนต่างๆ โดยใช้รหัสงานที่ไม่ซ้ำกัน งานสามารถเปลี่ยนสถานะผ่านวงจรที่กำหนดไว้ (เช่น ส่งแล้ว กำลังดำเนินการ เสร็จแล้ว)
  6. การดำเนินการแบบทึบแสง: ฟีเจอร์สำคัญคือเอเจนต์ไม่จำเป็นต้องเปิดเผยกระบวนการให้เหตุผลภายใน หน่วยความจำ หรือเครื่องมือเฉพาะต่อเอเจนต์อื่นๆ โดยจะแสดงเฉพาะบริการที่เรียกใช้ได้เท่านั้น ซึ่งเป็นการส่งเสริมความสามารถในการแยกส่วนและความเป็นส่วนตัว
  7. สร้างขึ้นตามมาตรฐานที่มีอยู่: A2A ใช้ประโยชน์จากเทคโนโลยีเว็บที่ได้รับการยอมรับ เช่น HTTP, เหตุการณ์ที่เซิร์ฟเวอร์ส่ง (SSE) สำหรับการสตรีมแบบเรียลไทม์ และ JSON-RPC สำหรับการแลกเปลี่ยนข้อมูลที่มีโครงสร้าง ซึ่งช่วยให้ผสานรวมกับโครงสร้างพื้นฐานด้านไอทีที่มีอยู่ได้ง่ายขึ้น
  8. การสื่อสารแบบอะซิงโครนัส: โปรโตคอลได้รับการออกแบบโดยคำนึงถึงการสื่อสารแบบอะซิงโครนัสเป็นหลัก ซึ่งช่วยให้การดำเนินงานมีความยืดหยุ่นและเปิดใช้การแจ้งเตือนแบบพุชสำหรับการอัปเดตได้แม้ว่าจะไม่ได้รักษาการเชื่อมต่อไว้อย่างต่อเนื่อง

5. สถาปัตยกรรมของ Agent

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

ระบบนี้มีโครงสร้างที่ประกอบด้วยเอเจนต์หลักชื่อ image_scoring ซึ่งจะประสานงานกระบวนการทั้งหมด เอเจนต์หลักนี้มีเอเจนต์ย่อยชื่อ image_generation_scoring_agent ซึ่งมีเอเจนต์ย่อยของตัวเองสำหรับงานที่เฉพาะเจาะจงมากขึ้น ซึ่งจะสร้างความสัมพันธ์แบบลำดับชั้นที่ตัวแทนหลักมอบหมายงานให้กับตัวแทนย่อย 6e21de5b4f92669c.png รูปที่ 2: โฟลว์ของเอเจนต์โดยรวม

รายชื่อตัวแทนทั้งหมด

  1. image_scoring (ตัวแทนหลัก):
  2. วัตถุประสงค์: นี่คือเอเจนต์รูทที่จัดการเวิร์กโฟลว์โดยรวม โดยจะเรียกใช้ image_generation_scoring_agent และ checker_agent ซ้ำๆ ในลูปจนกว่าจะตรงตามเงื่อนไขการสิ้นสุด
  3. Agent ย่อย
  • image_generation_scoring_agent
  • checker_agent_instance
  1. image_generation_scoring_agent (Sub-agent ของ image_scoring):
  2. วัตถุประสงค์: ตัวแทนนี้มีหน้าที่รับผิดชอบตรรกะหลักในการสร้างและให้คะแนนรูปภาพ โดยจะเรียกใช้ลำดับของ Agent ย่อย 3 รายการเพื่อให้บรรลุเป้าหมายนี้
  3. Agent ย่อย
  • image_generation_prompt_agent
  • image_generation_agent
  • scoring_images_prompt
  1. checker_agent_instance (Sub-agent ของ image_scoring):
  2. วัตถุประสงค์: เอเจนต์นี้จะตรวจสอบว่าควรดำเนินการต่อหรือสิ้นสุดกระบวนการให้คะแนนรูปภาพ โดยจะใช้เครื่องมือ check_tool_condition เพื่อประเมินเงื่อนไขการสิ้นสุด
  3. image_generation_prompt_agent (Sub-agent ของ image_generation_scoring_agent):
  4. วัตถุประสงค์: ตัวแทนนี้เป็นผู้เชี่ยวชาญในการสร้างพรอมต์สำหรับการสร้างรูปภาพ โดยจะรับข้อความที่ป้อนและสร้างพรอมต์แบบละเอียดที่เหมาะกับโมเดลการสร้างรูปภาพ
  5. mage_generation_agent (Sub-agent ของ image_generation_scoring_agent):
  6. วัตถุประสงค์: เอเจนต์นี้เป็นผู้เชี่ยวชาญด้านการสร้างรูปภาพโดยใช้ Imagen 3 โดยจะรับพรอมต์จาก image_generation_prompt_agent แล้วสร้างรูปภาพ
  7. scoring_images_prompt (Sub-agent ของ image_generation_scoring_agent):
  8. วัตถุประสงค์: เอเจนต์นี้เป็นผู้เชี่ยวชาญในการประเมินและให้คะแนนรูปภาพตามเกณฑ์ต่างๆ โดยจะนำรูปภาพที่สร้างขึ้นมาให้คะแนน

เครื่องมือที่ตัวแทนใช้

  1. check_tool_condition:
  2. คำอธิบาย: เครื่องมือนี้จะตรวจสอบว่าตรงตามเงื่อนไขการสิ้นสุดลูปหรือไม่ หรือมีการทำซ้ำถึงจำนวนสูงสุดแล้ว หากข้อใดข้อหนึ่งเป็นจริง ระบบจะหยุดลูป
  3. ใช้โดย: checker_agent_instance
  4. generate_images:
  5. คำอธิบาย: เครื่องมือนี้สร้างรูปภาพโดยใช้โมเดล Imagen 3 นอกจากนี้ยังบันทึกรูปภาพที่สร้างขึ้นไปยังที่เก็บข้อมูล Google Cloud Storage ได้ด้วย
  6. ใช้โดย: image_generation_agent
  7. get_policy:
  8. คำอธิบาย: เครื่องมือนี้จะดึงนโยบายจากไฟล์ JSON image_generation_prompt_agent ใช้เพื่อสร้างพรอมต์การสร้างรูปภาพ และ scoring_images_prompt ใช้เพื่อให้คะแนนรูปภาพ
  9. ใช้โดย: image_generation_prompt_agent, scoring_images_prompt
  10. get_image:
  11. คำอธิบาย: เครื่องมือนี้จะโหลดอาร์ติแฟกต์รูปภาพที่สร้างขึ้นเพื่อให้สามารถให้คะแนนได้
  12. ใช้โดย: scoring_images_prompt
  13. set_score:
  14. คำอธิบาย: เครื่องมือนี้จะตั้งค่าคะแนนรวมของรูปภาพที่สร้างขึ้นในสถานะเซสชัน
  15. ใช้โดย: scoring_images_prompt

6. งานที่ 1 ติดตั้ง ADK และตั้งค่าสภาพแวดล้อม

ในแบบฝึกหัดนี้ เราจะใช้ Cloud Shell เพื่อทำงาน

  1. ใน Google Cloud Console ให้ไปที่ Vertex AI โดยค้นหาที่ด้านบนของคอนโซล
  2. คลิกเปิดใช้ API ที่แนะนำทั้งหมด

เตรียมแท็บ Cloud Shell Editor

  1. เมื่อเลือกหน้าต่าง Google Cloud Console แล้ว ให้เปิด Cloud Shell โดยกดแป้น G แล้วกดแป้น S บนแป้นพิมพ์ หรือจะคลิกปุ่ม Cloud Shell 231dc0e6754519c8.png ที่มุมขวาบนของ Google Cloud Console ก็ได้
  2. คลิกต่อไป
  3. เมื่อได้รับข้อความแจ้งให้ให้สิทธิ์ Cloud Shell ให้คลิกให้สิทธิ์
  4. ที่มุมบนขวาของแผง Cloud Shell ให้คลิกปุ่มเปิดในหน้าต่างใหม่ ปุ่มเปิดในหน้าต่างใหม่
  5. คลิกไอคอนดินสอเปิดเครื่องมือแก้ไข ( ไอคอนดินสอของโปรแกรมแก้ไขที่เปิดอยู่) ที่ด้านบนของบานหน้าต่างเพื่อดูไฟล์
  6. ที่ด้านบนของเมนูการนำทางด้านซ้าย ให้คลิกไอคอน Explorer ไอคอน Explorer เพื่อเปิด File Explorer
  7. คลิกปุ่มเปิดโฟลเดอร์
  8. ตลอดช่วงที่เหลือของแล็บนี้ คุณสามารถทำงานในหน้าต่างนี้เป็น IDE ของคุณได้โดยใช้ Cloud Shell Editor และเทอร์มินัล Cloud Shell

ดาวน์โหลดและติดตั้ง ADK และตัวอย่างโค้ดสำหรับแล็บนี้

  1. เรียกใช้คำสั่งต่อไปนี้เพื่อโคลนแหล่งที่มาที่จำเป็นจาก GitHub และติดตั้งไลบรารีที่จำเป็น
#create the project directory
mkdir imagescoring
cd imagescoring
#clone the code in the local directory
git clone https://github.com/haren-bh/multiagenthandson.git

#Create the virtual environment
python3 -m venv pythonenv
source pythonenv/bin/activate

#install google-adk and a2a sdk
python3 -m pip install google-adk==1.8.0
python3 -m pip install a2a-sdk==0.2.16
  1. เราจะใช้ Poetry เพื่อติดตั้งข้อกำหนดเพิ่มเติม
cd multiagenthandson #go to the application directory
pip install poetry poetry-plugin-export
poetry install --with deployment
  1. หากไม่มีที่เก็บข้อมูลในระบบคลาวด์ ให้สร้างที่เก็บข้อมูลใหม่ใน Google Cloud Storage นอกจากนี้ คุณยังสร้างที่เก็บข้อมูลได้โดยใช้คำสั่ง gsutil
gsutil mb gs://YOUR-UNIQUE-BUCKETNAME
  1. ในโปรแกรมแก้ไข ให้ไปที่มุมมอง -> สลับไฟล์ที่ซ่อนอยู่ และในโฟลเดอร์ image_scoring ให้สร้างไฟล์ .env ที่มีเนื้อหาต่อไปนี้ เพิ่มรายละเอียดที่จำเป็น เช่น ชื่อโปรเจ็กต์และที่เก็บข้อมูล Cloud Storage
GOOGLE_GENAI_USE_VERTEXAI=1 #1 if VERTEXAI has to be used. Can be 0 if API_KEY is specified
GOOGLE_CLOUD_PROJECT=YOUR CLOUD PROJECT NAME
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_CLOUD_STORAGE_BUCKET=YOUR BUCKET NAME  # Only required for deployment on Agent Engine
GCS_BUCKET_NAME=YOUR BUCKET NAME #Bucket for storing generated images.
SCORE_THRESHOLD=40 # Min threshold for image_score. Max Score is 50 , hence should be less than 50. 
#If the computed score is higher then loop will terminate
#MAX_ITERATIONS=5 #Max iterations for evaluating the image_score before terminating the loop.
IMAGEN_MODEL="imagen-3.0-generate-002" 
GENAI_MODEL="gemini-2.5-flash"
#AGENT_ENGINE_ID=<AGENT_ENGINE_ID> #The Agent Engine ID obtained after deploying to the agent engine.
  1. ดูโครงสร้างเอเจนต์ในซอร์สโค้ด โดยเริ่มที่ agent.py เอเจนต์นี้มีเอเจนต์รูทที่จะเชื่อมต่อกับเอเจนต์อื่นๆ
  2. กลับไปที่ไดเรกทอรีระดับบนสุด multiagenthandson ในเทอร์มินัล แล้วเรียกใช้คำสั่งต่อไปนี้เพื่อเรียกใช้ Agent ในเครื่อง
# Run the following command to run agents locally
export GCS_BUCKET_NAME=your gcs bucket name
adk web

7bb4bc5f8244c140.png รูปที่ 1

กด Ctrl+คลิก (CMD+คลิก สำหรับ MacOS) ที่ URL http:// ที่แสดงในเทอร์มินัลเพื่อเปิดไคลเอ็นต์ GUI ที่ใช้เบราว์เซอร์ของ ADK โดยควรมีลักษณะดังรูปที่ 2

  1. มาสร้างรูปภาพกัน ลองใช้พรอมต์ต่อไปนี้หรือพรอมต์ของคุณเอง
  2. ภูมิทัศน์ภูเขาอันเงียบสงบยามพระอาทิตย์ตก
  3. แมวขี่จักรยาน

99e23472f80a81f2.png รูปที่ 2

7. งานที่ 2 ทำให้ใช้งานได้กับ Agent Engine

ตอนนี้เราจะติดตั้งใช้งานเอเจนต์ใน Agent Engine Agent Engine เป็นบริการที่มีการจัดการครบวงจรสำหรับการติดตั้งใช้งานเอเจนต์ใน GCP Agent Engine เข้ากันได้กับ ADK ดังนั้นจึงสามารถนำ Agent ที่สร้างด้วย ADK ไปใช้งานใน Agent Engine ได้

  1. กำหนดตัวแปรสภาพแวดล้อมบางอย่าง
export GOOGLE_CLOUD_LOCATION='us-central1'
export GOOGLE_CLOUD_PROJECT='your project id'
  1. สร้างไฟล์ requirements.txt โดยใช้ Poetry Poetry จะใช้ pyproject.toml เพื่อสร้างไฟล์ requirements.txt หลังจากเรียกใช้คำสั่งแล้ว ให้ตรวจสอบว่าได้สร้างไฟล์ requirements.txt แล้ว
# Go to the parent folder containing pyproject.toml file
# install poetry-plugin-export
pip install poetry-plugin-export

#Create requirements.txt file
poetry export -f requirements.txt --output requirements.txt --without-hashes
  1. สร้างแพ็กเกจ เราต้องรวมแอปของเราไว้ในแพ็กเกจ Python .whl เราจะใช้บทกวีเพื่อทำสิ่งนั้น เมื่อเรียกใช้คำสั่งแล้ว ให้ตรวจสอบว่าระบบได้สร้างโฟลเดอร์ dist และมีไฟล์ .whl
# Go to the parent folder containing pyproject.toml file
#Create python package, to create whl file
poetry build
  1. ตอนนี้เราจะเตรียมสคริปต์การติดตั้งใช้งาน สคริปต์การติดตั้งใช้งานจะติดตั้งใช้งานเอเจนต์การให้คะแนนรูปภาพหรือบริการเครื่องมือเอเจนต์ โปรดเปลี่ยนเนื้อหาของ deploy.py ในโฟลเดอร์ image_scoring ดังนี้
# Change the content of the following. Look for #change this comment
import vertexai
from .agent import root_agent
import os
import glob # To easily find the wheel file

PROJECT_ID = "YOUR PROJECT ID" #change this your project
LOCATION = "us-central1" #change this
STAGING_BUCKET = "gs://YOUR BUCKET " #change this to your bucket

from vertexai import agent_engines

vertexai.init(
   project=PROJECT_ID,
   location=LOCATION,
   staging_bucket=STAGING_BUCKET,
)

remote_app = agent_engines.create(
   agent_engine=root_agent,
   requirements=open(os.path.join(os.getcwd(), "requirements.txt")).readlines()+["./dist/image_scoring-0.1.0-py3-none-any.whl"],#change this to your local location
   extra_packages=[
       "./dist/image_scoring-0.1.0-py3-none-any.whl", # change this to your location
   ]
)

print(remote_app.resource_name)
  1. ตอนนี้เราสามารถเรียกใช้สคริปต์การติดตั้งใช้งานได้แล้ว
#run deploy script from the parent folder containing deploy.py
python3 -m image_scoring.deploy

หลังจากที่ติดตั้งใช้งานแล้ว คุณควรเห็นข้อความคล้ายกับด้านล่าง 13109f2a5c5c5af9.png

รูปที่ 3

  1. ตอนนี้เรามาทดสอบเอเจนต์ที่ใช้งานจริงกัน หากต้องการทดสอบเครื่องมือ Agent ที่ติดตั้งใช้งานจากระยะไกล ให้คัดลอกตำแหน่งของ Agent จากเอาต์พุตการติดตั้งใช้งานในเทอร์มินัลก่อน ซึ่งควรมีลักษณะดังนี้ projects/85469421903/locations/us-central1/reasoningEngines/7369674597261639680
    ไปที่โฟลเดอร์ testclient เปิดไฟล์ remote_test.py แล้วแก้ไขบรรทัดต่อไปนี้
PROJECT_ID = "" #change this
LOCATION = "" #change this
STAGING_BUCKET = "" #change this

#replace the id with your own.
reasoning_engine_id="your agent engine id"

#You can replace this with your own prompt
image_prompt="A cat riding a bicycle"

#execute remote_test.py
python3 remote_test.py

8. งาน 3 สร้างเอเจนต์ A2A

ในขั้นตอนนี้ เราจะสร้างเอเจนต์ A2A อย่างง่ายโดยอิงตามเอเจนต์ที่เราสร้างขึ้นในขั้นตอนก่อนหน้า คุณสามารถเผยแพร่ตัวแทน ADK ที่มีอยู่ภายใต้โปรโตคอล A2A สิ่งสำคัญที่คุณจะได้เรียนรู้ในขั้นตอนนี้มีดังนี้

  • ดูข้อมูลพื้นฐานเกี่ยวกับโปรโตคอล A2A
  • ดูว่าโปรโตคอล ADK และ A2A ทำงานร่วมกันอย่างไร
  • ดูวิธีโต้ตอบกับโปรโตคอล A2A

ในแบบฝึกหัดนี้ เราจะใช้โค้ดในโฟลเดอร์ image_scoring_adk_a2a_server ก่อนเริ่มงาน โปรดเปลี่ยนไดเรกทอรีเป็นโฟลเดอร์นี้

สร้างการ์ดตัวแทน A2A

โปรโตคอล A2A ต้องมีการ์ดเอเจนต์ที่มีข้อมูลทั้งหมดเกี่ยวกับเอเจนต์ เช่น ความสามารถของเอเจนต์ คู่มือการใช้งานเอเจนต์ เป็นต้น เมื่อติดตั้งใช้งานเอเจนต์ A2A แล้ว คุณจะดูการ์ดเอเจนต์ได้โดยใช้ลิงก์ ".well-known/agent-card.json" ลูกค้าสามารถดูข้อมูลนี้เพื่อส่งคำขอไปยังตัวแทน

ในโฟลเดอร์ remote_a2a/image_scoring ให้ตรวจสอบว่ามีไฟล์ agents.json ที่มีเนื้อหาต่อไปนี้

{
 "name": "image_scoring",
 "description": "Agent that generates images based on user prompts and scores their adherence to the prompt.",
 "url": "http://localhost:8001/a2a/image_scoring",
 "version": "1.0.0",
 "defaultInputModes": ["text/plain"],
 "defaultOutputModes": ["image/png", "text/plain"],
 "capabilities": {
   "streaming": true,
   "functions": true
 },
 "skills": [
   {
     "id": "generate_and_score_image",
     "name": "Generate and Score Image",
     "description": "Generates an image from a given text prompt and then evaluates how well the generated image adheres to the original prompt, providing a score.",
     "tags": ["image generation", "image scoring", "evaluation", "AI art"],
     "examples": [
       "Generate an image of a futuristic city at sunset",
       "Create an image of a cat playing a piano",
       "Show me an image of a serene forest with a hidden waterfall"
     ]
   }
 ]
}

สร้างเอเจนต์ A2A

ภายในโฟลเดอร์รูท image_scoring_adk_a2a_server ให้ตรวจสอบว่ามีไฟล์ a2a_agent.py ซึ่งเป็นจุดแรกเข้าสำหรับตัวแทน a2a โดยควรมีเนื้อหาต่อไปนี้

from google.adk.agents.remote_a2a_agent import RemoteA2aAgent

root_agent = RemoteA2aAgent(
   name="image_scoring",
   description="Agent to give interesting facts.",
   agent_card="http://localhost:8001/a2a/image_scoring/.well-known/agent.json",
  
   # Optional configurations
   timeout=300.0,          # HTTP timeout (seconds)
   httpx_client=None,      # Custom HTTP client
)

เรียกใช้เอเจนต์ A2A

ตอนนี้เราก็พร้อมที่จะเรียกใช้เอเจนต์แล้ว หากต้องการเรียกใช้เอเจนต์ ให้เรียกใช้คำสั่งต่อไปนี้จากภายในโฟลเดอร์บนสุด image_scoring_adk_a2a_server

#set some environmental variables
export GOOGLE_CLOUD_PROJECT=datapipeline-372305
export GOOGLE_CLOUD_LOCATION=us-central1
export GCS_BUCKET_NAME=haren-genai-bucket

#following command runs the ADK agent as a2a agent
adk api_server --a2a --port 8001 remote_a2a

ทดสอบตัวแทน A2A

เมื่อตัวแทนทำงานแล้ว เราก็ไปทดสอบตัวแทนได้เลย ก่อนอื่น เรามาดูบัตรตัวแทนกัน

#Execute the following 
curl http://localhost:8001/a2a/image_scoring/.well-known/agent.json

การดำเนินการข้างต้นควรแสดงการ์ดเอเจนต์สำหรับเอเจนต์ A2A ซึ่งส่วนใหญ่เป็นเนื้อหาของ agent.json ที่เราสร้างในขั้นตอนก่อนหน้า

ตอนนี้มาส่งคำขอไปยัง Agent กัน เราใช้ curl เพื่อส่งคำขอไปยังตัวแทนได้

curl -X POST   http://localhost:8001/a2a/image_scoring   -H 'Content-Type: application/json'   -d '{
    "id": "uuid-123",
    "params": {
      "message": {
        "messageId": "msg-456",
        "parts": [{"text": "Create an image of a cat"}],
        "role": "user"
      }
    }
  }'

ในคำขอข้างต้น คุณสามารถเปลี่ยนพรอมต์ได้โดยเปลี่ยนบรรทัด "สร้างรูปภาพแมว" เมื่อเรียกใช้คำสั่งแล้ว คุณจะตรวจสอบรูปภาพเอาต์พุตใน Google Cloud Storage ที่ระบุได้

9. ล้างข้อมูล

ตอนนี้มาล้างข้อมูลที่เราเพิ่งสร้างกัน

  1. ลบเซิร์ฟเวอร์ Agent Engine ที่เราเพิ่งสร้าง ไปที่ Vertex AI โดยพิมพ์ Vertex AI ในแถบค้นหาของ Google Cloud Console คลิก Agent Engine ทางด้านซ้าย คุณลบเอเจนต์ได้โดยคลิกลบ c9f95963c4db0d6c.png

รูปที่ 4

  1. ลบไฟล์ใน Cloud Shell
#Execute the following to delete the files
rm -R imagescoring
  1. ลบที่เก็บข้อมูล คุณไปที่คอนโซล GCP->Cloud Storage เลือกและลบที่เก็บข้อมูลได้ afb43ad0dda70858.png