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. ภาพรวม: ประโยชน์ของชุดพัฒนาเอเจนต์
ชุดพัฒนาเอเจนต์มีข้อดีหลักๆ หลายประการสําหรับนักพัฒนาแอปที่สร้างแอปพลิเคชันแบบเอเจนต์ ดังนี้
- ระบบหลายเอเจนต์: สร้างแอปพลิเคชันแบบแยกส่วนและปรับขนาดได้โดยการรวมเอเจนต์เฉพาะทางหลายรายไว้ในลำดับชั้น เปิดใช้การประสานงานและการมอบหมายที่ซับซ้อน
- ระบบนิเวศของเครื่องมือที่หลากหลาย: ติดตั้งความสามารถที่หลากหลายให้กับเอเจนต์: ใช้เครื่องมือที่สร้างไว้ล่วงหน้า (การค้นหา การดำเนินการโค้ด ฯลฯ) สร้างฟังก์ชันที่กำหนดเอง ผสานรวมเครื่องมือจากเฟรมเวิร์กเอเจนต์ของบุคคลที่สาม (LangChain, CrewAI) หรือแม้แต่ใช้เอเจนต์อื่นๆ เป็นเครื่องมือ
- การจัดระเบียบที่ยืดหยุ่น: กำหนดเวิร์กโฟลว์โดยใช้เอเจนต์เวิร์กโฟลว์ (
SequentialAgent
,ParallelAgent
และLoopAgent
) สำหรับไปป์ไลน์ที่คาดการณ์ได้ หรือใช้ประโยชน์จากการกำหนดเส้นทางแบบไดนามิกที่ขับเคลื่อนด้วย LLM (การโอนLlmAgent
) เพื่อให้มีลักษณะการทำงานที่ปรับเปลี่ยนได้ - ประสบการณ์ของนักพัฒนาซอฟต์แวร์แบบผสานรวม: พัฒนา ทดสอบ และแก้ไขข้อบกพร่องในเครื่องด้วย CLI ที่มีประสิทธิภาพและ UI สำหรับนักพัฒนาซอฟต์แวร์แบบอินเทอร์แอกทีฟ ตรวจสอบเหตุการณ์ สถานะ และการดำเนินการของเอเจนต์ทีละขั้นตอน
- การประเมินในตัว: ประเมินประสิทธิภาพของเอเจนต์อย่างเป็นระบบโดยการประเมินทั้งคุณภาพของคำตอบสุดท้ายและเส้นทางการดำเนินการแบบทีละขั้นตอนเทียบกับกรณีทดสอบที่กำหนดไว้ล่วงหน้า
- พร้อมใช้งาน: สร้างคอนเทนเนอร์และติดตั้งใช้งาน Agent ได้ทุกที่ ไม่ว่าจะเรียกใช้ในเครื่อง ปรับขนาดด้วย Vertex AI Agent Engine หรือผสานรวมเข้ากับโครงสร้างพื้นฐานที่กำหนดเองโดยใช้ Cloud Run หรือ Docker
แม้ว่า SDK หรือเฟรมเวิร์กเอเจนต์ Gen AI อื่นๆ จะช่วยให้คุณค้นหาโมเดลและแม้กระทั่งเพิ่มประสิทธิภาพด้วยเครื่องมือต่างๆ ได้ แต่การประสานงานแบบไดนามิกระหว่างโมเดลหลายๆ โมเดลนั้นต้องใช้ความพยายามอย่างมากในฝั่งของคุณ
Agent Development Kit มีเฟรมเวิร์กระดับสูงกว่าเครื่องมือเหล่านี้ ซึ่งช่วยให้คุณเชื่อมต่อเอเจนต์หลายรายเข้าด้วยกันได้อย่างง่ายดายเพื่อเวิร์กโฟลว์ที่ซับซ้อนแต่ดูแลรักษาง่าย
4. ข้อมูลเบื้องต้นเกี่ยวกับ A2A
โปรโตคอล Agent2Agent (A2A) เป็นมาตรฐานแบบเปิดที่ออกแบบมาเพื่อช่วยให้การสื่อสารและการทำงานร่วมกันระหว่างเอเจนต์ AI แบบอัตโนมัติจากเฟรมเวิร์ก ผู้ให้บริการ และโดเมนต่างๆ เป็นไปอย่างราบรื่นและปลอดภัย
- การทำงานร่วมกันแบบสากล: A2A ช่วยให้เอเจนต์ทำงานร่วมกันได้ไม่ว่าเทคโนโลยีพื้นฐานจะเป็นอะไรก็ตาม ซึ่งจะช่วยส่งเสริมระบบนิเวศแบบหลายเอเจนต์อย่างแท้จริง ซึ่งหมายความว่าเอเจนต์ที่สร้างโดยบริษัทต่างๆ บนแพลตฟอร์มต่างๆ สามารถสื่อสารและประสานงานกันได้
- การค้นพบความสามารถ: เอเจนต์สามารถโฆษณาความสามารถของตนเองได้โดยใช้ "การ์ดเอเจนต์" (เอกสาร JSON) ซึ่งอธิบายข้อมูลระบุตัวตน ฟีเจอร์ A2A ที่รองรับ ทักษะ และข้อกำหนดในการตรวจสอบสิทธิ์ ซึ่งจะช่วยให้ตัวแทนคนอื่นๆ ค้นหาและเลือกตัวแทนที่เหมาะสมที่สุดสำหรับงานที่กำหนดได้
- ปลอดภัยอุ่นใจเสมอ: ความปลอดภัยเป็นหลักการสำคัญ A2A มีกลไกการตรวจสอบสิทธิ์และการให้สิทธิ์ระดับองค์กร โดยใช้มาตรฐานต่างๆ เช่น HTTPS/TLS, JWT, OIDC และคีย์ API เพื่อให้มั่นใจถึงการโต้ตอบที่ปลอดภัยและปกป้องข้อมูลที่ละเอียดอ่อน
- ไม่ขึ้นอยู่กับรูปแบบ: โปรโตคอลรองรับรูปแบบการสื่อสารต่างๆ รวมถึงการสตรีมข้อความ เสียง และวิดีโอ ตลอดจนแบบฟอร์มแบบอินเทอร์แอกทีฟและ iframe ที่ฝัง ความยืดหยุ่นนี้ช่วยให้เอเจนต์แลกเปลี่ยนข้อมูลในรูปแบบที่เหมาะสมที่สุดสำหรับงานและผู้ใช้
- การจัดการงานที่มีโครงสร้าง: A2A กำหนดโปรโตคอลที่ชัดเจนสำหรับการมอบหมายงาน การตรวจสอบ และการทำให้งานเสร็จสมบูรณ์ โดยรองรับการจัดกลุ่มงานที่เกี่ยวข้องและการจัดการงานเหล่านั้นในตัวแทนต่างๆ โดยใช้รหัสงานที่ไม่ซ้ำกัน งานสามารถเปลี่ยนสถานะผ่านวงจรที่กำหนดไว้ (เช่น ส่งแล้ว กำลังดำเนินการ เสร็จแล้ว)
- การดำเนินการแบบทึบแสง: ฟีเจอร์สำคัญคือเอเจนต์ไม่จำเป็นต้องเปิดเผยกระบวนการให้เหตุผลภายใน หน่วยความจำ หรือเครื่องมือเฉพาะต่อเอเจนต์อื่นๆ โดยจะแสดงเฉพาะบริการที่เรียกใช้ได้เท่านั้น ซึ่งเป็นการส่งเสริมความสามารถในการแยกส่วนและความเป็นส่วนตัว
- สร้างขึ้นตามมาตรฐานที่มีอยู่: A2A ใช้ประโยชน์จากเทคโนโลยีเว็บที่ได้รับการยอมรับ เช่น HTTP, เหตุการณ์ที่เซิร์ฟเวอร์ส่ง (SSE) สำหรับการสตรีมแบบเรียลไทม์ และ JSON-RPC สำหรับการแลกเปลี่ยนข้อมูลที่มีโครงสร้าง ซึ่งช่วยให้ผสานรวมกับโครงสร้างพื้นฐานด้านไอทีที่มีอยู่ได้ง่ายขึ้น
- การสื่อสารแบบอะซิงโครนัส: โปรโตคอลได้รับการออกแบบโดยคำนึงถึงการสื่อสารแบบอะซิงโครนัสเป็นหลัก ซึ่งช่วยให้การดำเนินงานมีความยืดหยุ่นและเปิดใช้การแจ้งเตือนแบบพุชสำหรับการอัปเดตได้แม้ว่าจะไม่ได้รักษาการเชื่อมต่อไว้อย่างต่อเนื่อง
5. สถาปัตยกรรมของ Agent
ในแล็บนี้ คุณจะได้สร้างแอปพลิเคชันแบบหลายเอเจนต์ที่จะสร้างรูปภาพตามข้อกำหนดของคุณและประเมินรูปภาพก่อนที่จะนำเสนอให้คุณ
ระบบนี้มีโครงสร้างที่ประกอบด้วยเอเจนต์หลักชื่อ image_scoring ซึ่งจะประสานงานกระบวนการทั้งหมด เอเจนต์หลักนี้มีเอเจนต์ย่อยชื่อ image_generation_scoring_agent ซึ่งมีเอเจนต์ย่อยของตัวเองสำหรับงานที่เฉพาะเจาะจงมากขึ้น ซึ่งจะสร้างความสัมพันธ์แบบลำดับชั้นที่ตัวแทนหลักมอบหมายงานให้กับตัวแทนย่อย รูปที่ 2: โฟลว์ของเอเจนต์โดยรวม
รายชื่อตัวแทนทั้งหมด
- image_scoring (ตัวแทนหลัก):
- วัตถุประสงค์: นี่คือเอเจนต์รูทที่จัดการเวิร์กโฟลว์โดยรวม โดยจะเรียกใช้ image_generation_scoring_agent และ checker_agent ซ้ำๆ ในลูปจนกว่าจะตรงตามเงื่อนไขการสิ้นสุด
- Agent ย่อย
- image_generation_scoring_agent
- checker_agent_instance
- image_generation_scoring_agent (Sub-agent ของ image_scoring):
- วัตถุประสงค์: ตัวแทนนี้มีหน้าที่รับผิดชอบตรรกะหลักในการสร้างและให้คะแนนรูปภาพ โดยจะเรียกใช้ลำดับของ Agent ย่อย 3 รายการเพื่อให้บรรลุเป้าหมายนี้
- Agent ย่อย
- image_generation_prompt_agent
- image_generation_agent
- scoring_images_prompt
- checker_agent_instance (Sub-agent ของ image_scoring):
- วัตถุประสงค์: เอเจนต์นี้จะตรวจสอบว่าควรดำเนินการต่อหรือสิ้นสุดกระบวนการให้คะแนนรูปภาพ โดยจะใช้เครื่องมือ check_tool_condition เพื่อประเมินเงื่อนไขการสิ้นสุด
- image_generation_prompt_agent (Sub-agent ของ image_generation_scoring_agent):
- วัตถุประสงค์: ตัวแทนนี้เป็นผู้เชี่ยวชาญในการสร้างพรอมต์สำหรับการสร้างรูปภาพ โดยจะรับข้อความที่ป้อนและสร้างพรอมต์แบบละเอียดที่เหมาะกับโมเดลการสร้างรูปภาพ
- mage_generation_agent (Sub-agent ของ image_generation_scoring_agent):
- วัตถุประสงค์: เอเจนต์นี้เป็นผู้เชี่ยวชาญด้านการสร้างรูปภาพโดยใช้ Imagen 3 โดยจะรับพรอมต์จาก image_generation_prompt_agent แล้วสร้างรูปภาพ
- scoring_images_prompt (Sub-agent ของ image_generation_scoring_agent):
- วัตถุประสงค์: เอเจนต์นี้เป็นผู้เชี่ยวชาญในการประเมินและให้คะแนนรูปภาพตามเกณฑ์ต่างๆ โดยจะนำรูปภาพที่สร้างขึ้นมาให้คะแนน
เครื่องมือที่ตัวแทนใช้
- check_tool_condition:
- คำอธิบาย: เครื่องมือนี้จะตรวจสอบว่าตรงตามเงื่อนไขการสิ้นสุดลูปหรือไม่ หรือมีการทำซ้ำถึงจำนวนสูงสุดแล้ว หากข้อใดข้อหนึ่งเป็นจริง ระบบจะหยุดลูป
- ใช้โดย: checker_agent_instance
- generate_images:
- คำอธิบาย: เครื่องมือนี้สร้างรูปภาพโดยใช้โมเดล Imagen 3 นอกจากนี้ยังบันทึกรูปภาพที่สร้างขึ้นไปยังที่เก็บข้อมูล Google Cloud Storage ได้ด้วย
- ใช้โดย: image_generation_agent
- get_policy:
- คำอธิบาย: เครื่องมือนี้จะดึงนโยบายจากไฟล์ JSON image_generation_prompt_agent ใช้เพื่อสร้างพรอมต์การสร้างรูปภาพ และ scoring_images_prompt ใช้เพื่อให้คะแนนรูปภาพ
- ใช้โดย: image_generation_prompt_agent, scoring_images_prompt
- get_image:
- คำอธิบาย: เครื่องมือนี้จะโหลดอาร์ติแฟกต์รูปภาพที่สร้างขึ้นเพื่อให้สามารถให้คะแนนได้
- ใช้โดย: scoring_images_prompt
- set_score:
- คำอธิบาย: เครื่องมือนี้จะตั้งค่าคะแนนรวมของรูปภาพที่สร้างขึ้นในสถานะเซสชัน
- ใช้โดย: scoring_images_prompt
6. งานที่ 1 ติดตั้ง ADK และตั้งค่าสภาพแวดล้อม
ในแบบฝึกหัดนี้ เราจะใช้ Cloud Shell เพื่อทำงาน
เปิดใช้ API ที่ Vertex AI แนะนำ
- ใน Google Cloud Console ให้ไปที่ Vertex AI โดยค้นหาที่ด้านบนของคอนโซล
- คลิกเปิดใช้ API ที่แนะนำทั้งหมด
เตรียมแท็บ Cloud Shell Editor
- เมื่อเลือกหน้าต่าง Google Cloud Console แล้ว ให้เปิด Cloud Shell โดยกดแป้น G แล้วกดแป้น S บนแป้นพิมพ์ หรือจะคลิกปุ่ม Cloud Shell
ที่มุมขวาบนของ Google Cloud Console ก็ได้
- คลิกต่อไป
- เมื่อได้รับข้อความแจ้งให้ให้สิทธิ์ Cloud Shell ให้คลิกให้สิทธิ์
- ที่มุมบนขวาของแผง Cloud Shell ให้คลิกปุ่มเปิดในหน้าต่างใหม่
- คลิกไอคอนดินสอเปิดเครื่องมือแก้ไข (
) ที่ด้านบนของบานหน้าต่างเพื่อดูไฟล์
- ที่ด้านบนของเมนูการนำทางด้านซ้าย ให้คลิกไอคอน Explorer
เพื่อเปิด File Explorer
- คลิกปุ่มเปิดโฟลเดอร์
- ตลอดช่วงที่เหลือของแล็บนี้ คุณสามารถทำงานในหน้าต่างนี้เป็น IDE ของคุณได้โดยใช้ Cloud Shell Editor และเทอร์มินัล Cloud Shell
ดาวน์โหลดและติดตั้ง ADK และตัวอย่างโค้ดสำหรับแล็บนี้
- เรียกใช้คำสั่งต่อไปนี้เพื่อโคลนแหล่งที่มาที่จำเป็นจาก 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
- เราจะใช้ Poetry เพื่อติดตั้งข้อกำหนดเพิ่มเติม
cd multiagenthandson #go to the application directory pip install poetry poetry-plugin-export poetry install --with deployment
- หากไม่มีที่เก็บข้อมูลในระบบคลาวด์ ให้สร้างที่เก็บข้อมูลใหม่ใน Google Cloud Storage นอกจากนี้ คุณยังสร้างที่เก็บข้อมูลได้โดยใช้คำสั่ง gsutil
gsutil mb gs://YOUR-UNIQUE-BUCKETNAME
- ในโปรแกรมแก้ไข ให้ไปที่มุมมอง -> สลับไฟล์ที่ซ่อนอยู่ และในโฟลเดอร์ 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.
- ดูโครงสร้างเอเจนต์ในซอร์สโค้ด โดยเริ่มที่ agent.py เอเจนต์นี้มีเอเจนต์รูทที่จะเชื่อมต่อกับเอเจนต์อื่นๆ
- กลับไปที่ไดเรกทอรีระดับบนสุด multiagenthandson ในเทอร์มินัล แล้วเรียกใช้คำสั่งต่อไปนี้เพื่อเรียกใช้ Agent ในเครื่อง
# Run the following command to run agents locally export GCS_BUCKET_NAME=your gcs bucket name adk web
รูปที่ 1
กด Ctrl+คลิก (CMD+คลิก สำหรับ MacOS) ที่ URL http:// ที่แสดงในเทอร์มินัลเพื่อเปิดไคลเอ็นต์ GUI ที่ใช้เบราว์เซอร์ของ ADK โดยควรมีลักษณะดังรูปที่ 2
- มาสร้างรูปภาพกัน ลองใช้พรอมต์ต่อไปนี้หรือพรอมต์ของคุณเอง
- ภูมิทัศน์ภูเขาอันเงียบสงบยามพระอาทิตย์ตก
- แมวขี่จักรยาน
รูปที่ 2
7. งานที่ 2 ทำให้ใช้งานได้กับ Agent Engine
ตอนนี้เราจะติดตั้งใช้งานเอเจนต์ใน Agent Engine Agent Engine เป็นบริการที่มีการจัดการครบวงจรสำหรับการติดตั้งใช้งานเอเจนต์ใน GCP Agent Engine เข้ากันได้กับ ADK ดังนั้นจึงสามารถนำ Agent ที่สร้างด้วย ADK ไปใช้งานใน Agent Engine ได้
- กำหนดตัวแปรสภาพแวดล้อมบางอย่าง
export GOOGLE_CLOUD_LOCATION='us-central1' export GOOGLE_CLOUD_PROJECT='your project id'
- สร้างไฟล์ 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
- สร้างแพ็กเกจ เราต้องรวมแอปของเราไว้ในแพ็กเกจ Python .whl เราจะใช้บทกวีเพื่อทำสิ่งนั้น เมื่อเรียกใช้คำสั่งแล้ว ให้ตรวจสอบว่าระบบได้สร้างโฟลเดอร์ dist และมีไฟล์ .whl
# Go to the parent folder containing pyproject.toml file #Create python package, to create whl file poetry build
- ตอนนี้เราจะเตรียมสคริปต์การติดตั้งใช้งาน สคริปต์การติดตั้งใช้งานจะติดตั้งใช้งานเอเจนต์การให้คะแนนรูปภาพหรือบริการเครื่องมือเอเจนต์ โปรดเปลี่ยนเนื้อหาของ 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)
- ตอนนี้เราสามารถเรียกใช้สคริปต์การติดตั้งใช้งานได้แล้ว
#run deploy script from the parent folder containing deploy.py python3 -m image_scoring.deploy
หลังจากที่ติดตั้งใช้งานแล้ว คุณควรเห็นข้อความคล้ายกับด้านล่าง
รูปที่ 3
- ตอนนี้เรามาทดสอบเอเจนต์ที่ใช้งานจริงกัน หากต้องการทดสอบเครื่องมือ 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. ล้างข้อมูล
ตอนนี้มาล้างข้อมูลที่เราเพิ่งสร้างกัน
- ลบเซิร์ฟเวอร์ Agent Engine ที่เราเพิ่งสร้าง ไปที่ Vertex AI โดยพิมพ์ Vertex AI ในแถบค้นหาของ Google Cloud Console คลิก Agent Engine ทางด้านซ้าย คุณลบเอเจนต์ได้โดยคลิกลบ
รูปที่ 4
- ลบไฟล์ใน Cloud Shell
#Execute the following to delete the files rm -R imagescoring
- ลบที่เก็บข้อมูล คุณไปที่คอนโซล GCP->Cloud Storage เลือกและลบที่เก็บข้อมูลได้