1- مقدمة
يركّز هذا المختبر على تنفيذ خدمة وكيل العميل ونشرها. ستستخدم حزمة تطوير الوكيل (ADK) لإنشاء وكيل يعمل بالذكاء الاصطناعي ويستخدم الأدوات.
في هذا التمرين العملي، سننشئ وكيل حديقة حيوانات يستخدم ويكيبيديا للإجابة عن الأسئلة حول الحيوانات.

أخيرًا، سننشر وكيل دليل الجولات على Cloud Run من Google، بدلاً من تشغيله محليًا فقط.
المتطلبات الأساسية
- مشروع Google Cloud تم تفعيل الفوترة فيه
أهداف الدورة التعليمية
- كيفية تنظيم مشروع Python لنشر حزمة تطوير التطبيقات
- كيفية تنفيذ وكيل يستخدم أدوات باستخدام google-adk
- كيفية نشر تطبيق Python كحاوية بدون خادم على Cloud Run
- كيفية ضبط مصادقة آمنة بين الخدمات باستخدام أدوار إدارة الهوية وإمكانية الوصول
- كيفية حذف موارد Cloud لتجنُّب تحمّل تكاليف مستقبلية
المتطلبات
- حساب Google Cloud ومشروع Google Cloud
- متصفّح ويب، مثل Chrome
2. لماذا يجب النشر على Cloud Run؟
Cloud Run هو خيار رائع لاستضافة وكلاء ADK لأنّه نظام أساسي بدون خادم، ما يعني أنّه يمكنك التركيز على الرمز البرمجي وليس على إدارة البنية الأساسية. نتولّى نحن العمليات التشغيلية نيابةً عنك.
يمكنك التفكير في الأمر على أنّه متجر مؤقت: لا يفتح ويستخدم الموارد إلا عند وصول العملاء (الطلبات). وعندما لا يكون هناك عملاء، يتم إغلاقه بالكامل، ولن تدفع مقابل متجر فارغ.
الميزات الرئيسية
تشغيل الحاويات في أي مكان:
- يمكنك إحضار حاوية (صورة Docker) تحتوي على تطبيقك.
- وتشغِّل Cloud Run هذه الحاويات على البنية الأساسية من Google.
- لا داعي للقلق بشأن تصحيح نظام التشغيل أو إعداد الآلة الافتراضية أو توسيع نطاقها.
التدرّج التلقائي:
- إذا لم يكن هناك أي مستخدمين لتطبيقك → يتم تشغيل 0 مثيل (يتم تقليل عدد المثيلات إلى صفر، ما يجعله فعالاً من حيث التكلفة).
- إذا وصل إلى 1,000 طلب، سيتم إنشاء العدد المطلوب من النسخ.
عدم الاحتفاظ بالحالة تلقائيًا:
- يمكن أن ينتقل كل طلب إلى نسخة مختلفة.
- إذا كنت بحاجة إلى تخزين الحالة، استخدِم خدمة خارجية مثل Cloud SQL أو Firestore أو Memorystore.
التوافق مع أي لغة أو إطار عمل:
- طالما أنّ التطبيق يعمل في حاوية Linux، لا يهمّ Cloud Run ما إذا كان مكتوبًا بلغة Python أو Go أو Node.js أو Java أو .Net.
الدفع مقابل الاستخدام:
- الفوترة المستندة إلى الطلبات: تتم فوترة كل طلب بالإضافة إلى وقت الحساب (بحدّ أدنى 100 ملي ثانية).
- الفوترة المستندة إلى المثيل: يتم تحصيل الرسوم عن مدة بقاء المثيل بالكامل (بدون رسوم لكل طلب).
3- إعداد المشروع
حساب Google
إذا لم يكن لديك حساب شخصي على Google، عليك إنشاء حساب على Google.
استخدام حساب شخصي بدلاً من حساب تابع للعمل أو تديره مؤسسة تعليمية
تسجيل الدخول إلى Google Cloud Console
سجِّل الدخول إلى Google Cloud Console باستخدام حساب Google شخصي.
تفعيل الفوترة
إعداد حساب فوترة شخصي
إذا أعددت الفوترة باستخدام أرصدة Google Cloud، يمكنك تخطّي هذه الخطوة.
لإعداد حساب فوترة شخصي، يُرجى الانتقال إلى هنا لتفعيل الفوترة في Cloud Console.
ملاحظات:
- يجب أن تكلّف إكمال هذا المختبر أقل من دولار أمريكي واحد من موارد السحابة الإلكترونية.
- يمكنك اتّباع الخطوات في نهاية هذا المختبر لحذف الموارد وتجنُّب المزيد من الرسوم.
- يكون المستخدمون الجدد مؤهّلين للاستفادة من الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
إنشاء مشروع (اختياري)
إذا لم يكن لديك مشروع حالي تريد استخدامه في هذا المختبر، يمكنك إنشاء مشروع جديد هنا.
4. فتح Cloud Shell Editor
- انقر على هذا الرابط للانتقال مباشرةً إلى محرّر Cloud Shell
- إذا طُلب منك منح الإذن في أي وقت اليوم، انقر على منح الإذن للمتابعة.

- إذا لم تظهر المحطة الطرفية في أسفل الشاشة، افتحها باتّباع الخطوات التالية:
- انقر على عرض.
- انقر على Terminal

5- تفعيل واجهات برمجة التطبيقات
لاستخدام Cloud Run وArtifact Registry وCloud Build وVertex AI وCompute Engine، عليك تفعيل واجهات برمجة التطبيقات الخاصة بها في مشروعك على Google Cloud.
- في وحدة التحكّم، فعِّل واجهات برمجة التطبيقات:
عند انتهاء تشغيل هذا الأمر، من المفترض أن تظهر لك نتيجة مثل ما يلي:gcloud services enable \ run.googleapis.com \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ aiplatform.googleapis.com \ compute.googleapis.comOperation "operations/acat.p2-[GUID]" finished successfully.
لمحة عن واجهات برمجة التطبيقات
- تتيح لك واجهة Cloud Run Admin API (
run.googleapis.com) تشغيل خدمات الواجهة الأمامية والخلفية أو مهام الدفعات أو المواقع الإلكترونية في بيئة مُدارة بالكامل. تتولّى هذه الخدمة البنية الأساسية لنشر تطبيقاتك المحفوظة في حاويات وتوسيع نطاقها. - توفّر Artifact Registry API (
artifactregistry.googleapis.com) مستودعًا آمنًا وخاصًا لتخزين صور الحاويات. وهي تمثّل تطوّر Container Registry وتتكامل بسلاسة مع Cloud Run وCloud Build. - واجهة برمجة التطبيقات Cloud Build (
cloudbuild.googleapis.com) هي منصة CI/CD بدون خادم تنفّذ عمليات الإنشاء على بنية Google Cloud الأساسية. يُستخدَم لإنشاء صورة الحاوية في السحابة الإلكترونية من ملف Dockerfile. - تتيح Vertex AI API (
aiplatform.googleapis.com) لتطبيقك الذي تم نشره التواصل مع نماذج Gemini لتنفيذ مهام الذكاء الاصطناعي الأساسية. توفّر هذه المنصة واجهة برمجة تطبيقات موحّدة لجميع خدمات الذكاء الاصطناعي من Google Cloud. - توفّر Compute Engine API (
compute.googleapis.com) أجهزة افتراضية آمنة وقابلة للتخصيص تعمل على بنية Google التحتية. على الرغم من أنّ Cloud Run مُدارة، غالبًا ما تكون واجهة برمجة التطبيقات Compute Engine مطلوبة كعنصر أساسي للعديد من موارد الشبكات والحوسبة.
6. إعداد بيئة التطوير
إنشاء الدليل
- في وحدة التحكّم، أنشئ دليل المشروع والأدلة الفرعية اللازمة:
cd && mkdir zoo_guide_agent && cd zoo_guide_agent - في الوحدة الطرفية، نفِّذ الأمر التالي لفتح الدليل
zoo_guide_agentفي مستكشف "محرِّر Cloud Shell":cloudshell open-workspace ~/zoo_guide_agent - سيتم إعادة تحميل لوحة "المستكشف" على اليمين. من المفترض أن يظهر لك الآن الدليل الذي أنشأته.
إعداد مشروعك
- في الوحدة الطرفية، اضبط مشروعك باستخدام الأمر التالي:
مثال:gcloud config set project [PROJECT_ID]gcloud config set project lab-project-id-example
- من المفترض أن تظهر لك هذه الرسالة:
Updated property [core/project].
متطلبات التثبيت
- نفِّذ الأمر التالي في الوحدة الطرفية لإنشاء ملف
requirements.txt.cloudshell edit requirements.txt - أضِف ما يلي إلى ملف
requirements.txtالذي تم إنشاؤه حديثًاgoogle-adk==1.14.0 langchain-community==0.3.27 wikipedia==1.4.0 - في وحدة التحكّم، أنشئ بيئة افتراضية وفعّلها باستخدام uv. يضمن ذلك عدم تعارض تبعيات مشروعك مع لغة Python في النظام.
uv venv source .venv/bin/activate - ثبِّت الحِزم المطلوبة في بيئتك الافتراضية في نافذة الأوامر.
uv pip install -r requirements.txt
إعداد المتغيرات البيئية
- استخدِم الأمر التالي في الوحدة الطرفية لإنشاء الملف
.env.# 1. Set the variables in your terminal first PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)") SA_NAME=lab2-cr-service # 2. Create the .env file using those variables cat <<EOF > .env PROJECT_ID=$PROJECT_ID PROJECT_NUMBER=$PROJECT_NUMBER SA_NAME=$SA_NAME SERVICE_ACCOUNT=${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com MODEL="gemini-2.5-flash" EOF
7. إنشاء سير عمل الوكيل
إنشاء ملف __init__.py
- أنشئ ملف init.py من خلال تنفيذ ما يلي في الوحدة الطرفية:
يُعلم هذا الملف لغة Python أنّ دليل zoo_guide_agent هو حزمة.cloudshell edit __init__.py - أضِف الرمز التالي إلى ملف
__init__.pyالجديد:from . import agent
إنشاء ملف agent.py
- أنشئ ملف
agent.pyالرئيسي عن طريق لصق الأمر التالي في النافذة الطرفية.cloudshell edit agent.py - عمليات الاستيراد والإعداد الأوّلي: أضِف الرمز التالي إلى ملف
agent.pyالفارغ حاليًا: يستدعي هذا الجزء الأول من ملفimport os import logging import google.cloud.logging from dotenv import load_dotenv from google.adk import Agent from google.adk.agents import SequentialAgent from google.adk.tools.tool_context import ToolContext from google.adk.tools.langchain_tool import LangchainTool from langchain_community.tools import WikipediaQueryRun from langchain_community.utilities import WikipediaAPIWrapper import google.auth import google.auth.transport.requests import google.oauth2.id_token # --- Setup Logging and Environment --- cloud_logging_client = google.cloud.logging.Client() cloud_logging_client.setup_logging() load_dotenv() model_name = os.getenv("MODEL")agent.pyجميع المكتبات الضرورية من ADK وGoogle Cloud. يتم أيضًا إعداد التسجيل وتحميل متغيّرات البيئة من ملف.env، وهو أمر بالغ الأهمية للوصول إلى عنوان URL الخاص بالنموذج والخادم. - تحديد الأدوات: لا يمكن أن يكون الوكيل أفضل من الأدوات التي يمكنه استخدامها. أضِف الرمز التالي إلى أسفل
agent.pyلتحديد الأدوات: شرح الأدوات# Greet user and save their prompt def add_prompt_to_state( tool_context: ToolContext, prompt: str ) -> dict[str, str]: """Saves the user's initial prompt to the state.""" tool_context.state["PROMPT"] = prompt logging.info(f"[State updated] Added to PROMPT: {prompt}") return {"status": "success"} # Configuring the Wikipedia Tool wikipedia_tool = LangchainTool( tool=WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper()) )add_prompt_to_state📝: تتذكّر هذه الأداة الأسئلة التي يطرحها زائر حديقة الحيوانات. عندما يسأل أحد الزوّار "أين الأسود؟"، تحفظ هذه الأداة هذا السؤال المحدّد في ذاكرة الوكيل لكي تعرف الوكلاء الآخرين في سير العمل ما يجب البحث عنه.
الطريقة: هي دالة Python تكتب طلب الزائر في قاموسtool_context.stateالمشترَك. يمثّل سياق الأداة ذاكرة الوكيل القصيرة المدى لمحادثة واحدة. يمكن للوكيل التالي في سير العمل قراءة البيانات التي حفظها الوكيل السابق في الحالة.-
LangchainTool🌍: يزوّد هذا الخيار وكيل دليل الجولات بمعلومات عامة حول العالم. عندما يطرح زائر سؤالاً غير متوفّر في قاعدة بيانات حديقة الحيوانات، مثل "ماذا تأكل الأسود في البرية؟"، تتيح هذه الأداة للموظف البحث عن الإجابة على Wikipedia.
طريقة العمل: يعمل كأداة ربط، ما يسمح للوكيل باستخدام أداة WikipediaQueryRun الجاهزة من مكتبة LangChain.
- تحديد وكلاء Specialist: أضِف الرمز التالي إلى أسفل
agent.pyلتحديد الوكيلَينcomprehensive_researcherوresponse_formatter:# 1. Researcher Agent comprehensive_researcher = Agent( name="comprehensive_researcher", model=model_name, description="The primary researcher that can access both internal zoo data and external knowledge from Wikipedia.", instruction=""" You are a helpful research assistant. Your goal is to fully answer the user's PROMPT. You have access to two tools: 1. A tool for getting specific data about animals AT OUR ZOO (names, ages, locations). 2. A tool for searching Wikipedia for general knowledge (facts, lifespan, diet, habitat). First, analyze the user's PROMPT. - If the prompt can be answered by only one tool, use that tool. - If the prompt is complex and requires information from both the zoo's database AND Wikipedia, you MUST use both tools to gather all necessary information. - Synthesize the results from the tool(s) you use into preliminary data outputs. PROMPT: { PROMPT } """, tools=[ wikipedia_tool ], output_key="research_data" # A key to store the combined findings ) # 2. Response Formatter Agent response_formatter = Agent( name="response_formatter", model=model_name, description="Synthesizes all information into a friendly, readable response.", instruction=""" You are the friendly voice of the Zoo Tour Guide. Your task is to take the RESEARCH_DATA and present it to the user in a complete and helpful answer. - First, present the specific information from the zoo (like names, ages, and where to find them). - Then, add the interesting general facts from the research. - If some information is missing, just present the information you have. - Be conversational and engaging. RESEARCH_DATA: { research_data } """ )- إنّ وكيل
comprehensive_researcherهو "العقل" الذي يوجّه عملياتنا. تتلقّى هذه الأداة طلب المستخدم منStateالمشتركة، وتفحصه، ثم تحدّد الطلبات التي يجب استخدامها للعثور على الإجابة. - دور الوكيل
response_formatterهو تقديم العروض. تأخذ هذه الأداة البيانات الأولية التي جمعها وكيل Researcher (التي تم تمريرها عبر الحالة) وتستخدم مهارات اللغة في النموذج اللغوي الكبير لتحويلها إلى ردّ سهل ومناسب للمحادثة.
- إنّ وكيل
- تحديد وكيل سير العمل: أضِف مجموعة الرموز البرمجية هذه إلى أسفل
agent.pyلتحديد الوكيل التسلسليtour_guide_workflow: يعمل وكيل سير العمل كمدير "المكتب الخلفي" لجولة حديقة الحيوانات. يأخذ هذا المكوّن طلب البحث ويضمن أن ينفّذ الوكيلان المحدّدان أعلاه مهامهما بالترتيب الصحيح: البحث أولاً، ثم التنسيق. يؤدي ذلك إلى إنشاء عملية يمكن توقّعها وموثوقة للإجابة عن سؤال أحد الزوّار.tour_guide_workflow = SequentialAgent( name="tour_guide_workflow", description="The main workflow for handling a user's request about an animal.", sub_agents=[ comprehensive_researcher, # Step 1: Gather all data response_formatter, # Step 2: Format the final response ] )
طريقة عملها: هيSequentialAgent، أي نوع خاص من البرامج التي لا تفكّر بنفسها. مهمته الوحيدة هي تشغيل قائمةsub_agents(الباحث والمنسّق) بتسلسل ثابت، مع نقل الذاكرة المشتركة تلقائيًا من أحدهما إلى الآخر. - تجميع سير العمل الرئيسي: أضِف مجموعة الرموز النهائية هذه إلى أسفل
agent.pyلتحديدroot_agent: يستخدم إطار عمل مجموعة أدوات تطوير التطبيقات (ADK)root_agent = Agent( name="greeter", model=model_name, description="The main entry point for the Zoo Tour Guide.", instruction=""" - Let the user know you will help them learn about the animals we have in the zoo. - When the user responds, use the 'add_prompt_to_state' tool to save their response. After using the tool, transfer control to the 'tour_guide_workflow' agent. """, tools=[add_prompt_to_state], sub_agents=[tour_guide_workflow] )root_agentكنقطة بداية لجميع المحادثات الجديدة. ويتمثل دورها الأساسي في تنسيق العملية بشكل عام. يعمل هذا الإجراء كعنصر تحكّم أولي، ويدير الجولة الأولى من المحادثة.

ملف agent.py الكامل
اكتمل الآن ملف agent.py. من خلال إنشاء النظام بهذه الطريقة، يمكنك معرفة الدور المحدّد لكل مكوّن، أي الأدوات ووكلاء العاملين ووكلاء المديرين، في إنشاء النظام النهائي الذكي.
يجب أن يبدو الملف الكامل على النحو التالي:
import os
import logging
import google.cloud.logging
from dotenv import load_dotenv
from google.adk import Agent
from google.adk.agents import SequentialAgent
from google.adk.tools.tool_context import ToolContext
from google.adk.tools.langchain_tool import LangchainTool
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper
import google.auth
import google.auth.transport.requests
import google.oauth2.id_token
# --- Setup Logging and Environment ---
cloud_logging_client = google.cloud.logging.Client()
cloud_logging_client.setup_logging()
load_dotenv()
model_name = os.getenv("MODEL")
# Greet user and save their prompt
def add_prompt_to_state(
tool_context: ToolContext, prompt: str
) -> dict[str, str]:
"""Saves the user's initial prompt to the state."""
tool_context.state["PROMPT"] = prompt
logging.info(f"[State updated] Added to PROMPT: {prompt}")
return {"status": "success"}
# Configuring the Wikipedia Tool
wikipedia_tool = LangchainTool(
tool=WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
)
# 1. Researcher Agent
comprehensive_researcher = Agent(
name="comprehensive_researcher",
model=model_name,
description="The primary researcher that can access both internal zoo data and external knowledge from Wikipedia.",
instruction="""
You are a helpful research assistant. Your goal is to fully answer the user's PROMPT.
You have access to two tools:
1. A tool for getting specific data about animals AT OUR ZOO (names, ages, locations).
2. A tool for searching Wikipedia for general knowledge (facts, lifespan, diet, habitat).
First, analyze the user's PROMPT.
- If the prompt can be answered by only one tool, use that tool.
- If the prompt is complex and requires information from both the zoo's database AND Wikipedia,
you MUST use both tools to gather all necessary information.
- Synthesize the results from the tool(s) you use into preliminary data outputs.
PROMPT:
{ PROMPT }
""",
tools=[
wikipedia_tool
],
output_key="research_data" # A key to store the combined findings
)
# 2. Response Formatter Agent
response_formatter = Agent(
name="response_formatter",
model=model_name,
description="Synthesizes all information into a friendly, readable response.",
instruction="""
You are the friendly voice of the Zoo Tour Guide. Your task is to take the
RESEARCH_DATA and present it to the user in a complete and helpful answer.
- First, present the specific information from the zoo (like names, ages, and where to find them).
- Then, add the interesting general facts from the research.
- If some information is missing, just present the information you have.
- Be conversational and engaging.
RESEARCH_DATA:
{ research_data }
"""
)
tour_guide_workflow = SequentialAgent(
name="tour_guide_workflow",
description="The main workflow for handling a user's request about an animal.",
sub_agents=[
comprehensive_researcher, # Step 1: Gather all data
response_formatter, # Step 2: Format the final response
]
)
root_agent = Agent(
name="greeter",
model=model_name,
description="The main entry point for the Zoo Tour Guide.",
instruction="""
- Let the user know you will help them learn about the animals we have in the zoo.
- When the user responds, use the 'add_prompt_to_state' tool to save their response.
After using the tool, transfer control to the 'tour_guide_workflow' agent.
""",
tools=[add_prompt_to_state],
sub_agents=[tour_guide_workflow]
)
بعد ذلك، سنتحدّث عن عملية النشر.
8. تجهيز التطبيق للنشر
التحقّق من البنية النهائية
قبل النشر، تأكَّد من أنّ دليل مشروعك يحتوي على الملفات الصحيحة.
- تأكَّد من أنّ مجلد
zoo_guide_agentيبدو على النحو التالي:zoo_guide_agent/ ├── .env ├── __init__.py ├── agent.py └── requirements.txt
إعداد أذونات إدارة الهوية وإمكانية الوصول
بعد أن يصبح الرمز البرمجي المحلي جاهزًا، تكون الخطوة التالية هي إعداد الهوية التي سيستخدمها وكيلك في السحابة الإلكترونية.
- في وحدة التحكّم، حمِّل المتغيّرات في جلسة shell.
source .env - أنشئ حساب خدمة مخصّصًا لخدمة Cloud Run لكي يكون لديها إذن محدّد خاص بها. ألصِق ما يلي في الوحدة الطرفية:
من خلال إنشاء هوية مخصّصة لهذا التطبيق تحديدًا، يمكنك التأكّد من أنّ الوكيل لديه الأذونات التي يحتاجها فقط، بدلاً من استخدام حساب تلقائي لديه إذن وصول واسع النطاق.gcloud iam service-accounts create ${SA_NAME} \ --display-name="Service Account for lab 2 " - امنح حساب الخدمة دور "مستخدم Vertex AI"، ما يمنحه الإذن باستدعاء نماذج Google.
# Grant the "Vertex AI User" role to your service account gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$SERVICE_ACCOUNT" \ --role="roles/aiplatform.user"
9- نشر الوكيل باستخدام واجهة سطر الأوامر (CLI) الخاصة بـ ADK
بعد أن يصبح الرمز البرمجي المحلي جاهزًا ومشروع Google Cloud معدًا، حان الوقت لنشر الوكيل. ستستخدِم الأمر adk deploy cloud_run، وهو أداة سهلة الاستخدام تعمل على أتمتة سير عمل النشر بالكامل. يؤدي هذا الأمر الفردي إلى تجميع الرمز البرمجي وإنشاء صورة حاوية وإرسالها إلى Artifact Registry وتشغيل الخدمة على Cloud Run، ما يتيح الوصول إليها على الويب.
- نفِّذ الأمر التالي في الوحدة الطرفية لنشر برنامجك.
يتيح لك الأمر# Run the deployment command uvx --from google-adk \ adk deploy cloud_run \ --project=$PROJECT_ID \ --region=europe-west1 \ --service_name=zoo-tour-guide \ --with_ui \ . \ -- \ --labels=dev-tutorial=codelab-adk \ --service-account=$SERVICE_ACCOUNTuvxتشغيل أدوات سطر الأوامر المنشورة كحِزم Python بدون الحاجة إلى تثبيت هذه الأدوات على مستوى العالم. - إذا ظهرت لك الرسالة التالية:
إذا كان الأمر كذلك، اكتبDeploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [europe-west1] will be created. Do you want to continue (Y/n)?
Yواضغط على ENTER. - إذا ظهرت لك الرسالة التالية:
اكتبAllow unauthenticated invocations to [your-service-name] (y/N)?.
yواضغط على ENTER. يتيح ذلك عمليات استدعاء غير مصادَق عليها لهذا المختبر لتسهيل الاختبار. عند التنفيذ بنجاح، سيوفّر الأمر عنوان URL لخدمة Cloud Run التي تم نشرها. (سيبدو على النحو التالي:https://zoo-tour-guide-123456789.europe-west1.run.app). - انسخ عنوان URL لخدمة Cloud Run التي تم نشرها للمَهمّة التالية.
10. اختبار الوكيل الذي تم نشره
بعد أن يصبح وكيلك متاحًا على Cloud Run، ستجري اختبارًا للتأكّد من أنّ عملية النشر تمت بنجاح وأنّ الوكيل يعمل على النحو المتوقّع. ستستخدم عنوان URL العام للخدمة (على سبيل المثال، https://zoo-tour-guide-123456789.europe-west1.run.app/) للوصول إلى واجهة الويب الخاصة بـ ADK والتفاعل مع الوكيل.
- افتح عنوان URL لخدمة Cloud Run العامة في متصفّح الويب. بما أنّك استخدَمت
--with_ui flag، من المفترض أن تظهر لك واجهة مستخدم المطوّر في "حزمة تطوير التطبيقات". - فعِّل
Token Streamingفي أعلى يسار الشاشة.
يمكنك الآن التفاعل مع وكيل Zoo. - اكتب
helloواضغط على Enter لبدء محادثة جديدة. - راقِب النتيجة. يجب أن يستجيب الوكيل بسرعة مع رسالة الترحيب، والتي ستكون على النحو التالي:
"Hello! I'm your Zoo Tour Guide. I can help you learn about the amazing animals we have here. What would you like to know or explore today?"
- اطرح على الوكيل أسئلة مثل:
Where can I find the polar bears in the zoo and what is their diet?

شرح "مسار الوكلاء"
يعمل نظامك كفريق ذكي متعدّد الوكلاء. تتم إدارة العملية من خلال تسلسل واضح لضمان تدفق سلس وفعّال من سؤال المستخدم إلى الإجابة النهائية التفصيلية.
1- موظف الاستقبال في حديقة الحيوانات (مكتب الاستقبال)
تبدأ العملية بأكملها مع موظف الاستقبال.
- مهمتها: بدء المحادثة وتتمثل تعليماتها في الترحيب بالمستخدم وسؤاله عن الحيوان الذي يريد التعرّف عليه.
- الأداة: عندما يردّ المستخدم، تستخدم أداة Greeter add_prompt_to_state لالتقاط كلماته بالضبط (مثلاً، أريد معلومات عن الأسود") وحفظها في ذاكرة النظام.
- التسليم: بعد حفظ الطلب، يتم على الفور نقل عناصر التحكّم إلى الوكيل الفرعي tour_guide_workflow.
2. الباحث الشامل (الباحث الفائق)
هذه هي الخطوة الأولى في سير العمل الرئيسي و "عقل" العملية. بدلاً من فريق كبير، أصبح لديك الآن وكيل واحد يتمتّع بمهارات عالية ويمكنه الوصول إلى جميع المعلومات المتاحة.
- مهمة الأداة: تحليل سؤال المستخدم ووضع خطة ذكية. تستخدم هذه الميزة إمكانية استخدام الأدوات في النموذج اللغوي لتحديد ما إذا كانت بحاجة إلى:
- المعرفة العامة من الويب (عبر Wikipedia API)
- أو كلاهما للأسئلة المعقّدة.
3- أداة تنسيق الردود (المُقدِّم)
بعد أن يجمع Comprehensive Researcher كل الحقائق، يكون هذا هو الوكيل النهائي الذي سيتم تشغيله.
- مهمته: تقديم جولة في حديقة الحيوانات بأسلوب ودود تأخذ هذه العملية البيانات الأولية (التي يمكن أن تكون من مصدر واحد أو كلا المصدرين) وتعدّلها.
- الإجراء الذي تتخذه: تعمل هذه الميزة على تجميع كل المعلومات في إجابة واحدة متماسكة وجذابة. وبعد اتّباع تعليماته، يعرض أولاً معلومات عن حديقة الحيوانات المحدّدة، ثم يضيف الحقائق العامة المثيرة للاهتمام.
- النتيجة النهائية: النص الذي ينشئه هذا الوكيل هو الإجابة الكاملة والمفصّلة التي يراها المستخدم في نافذة المحادثة.
إذا كنت مهتمًا بمعرفة المزيد حول إنشاء وكلاء، يمكنك الاطّلاع على الموارد التالية:
11. تنظيف البيئة
لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، احذف المشروع الذي يحتوي على الموارد أو احتفظ بالمشروع واحذف الموارد الفردية.
حذف خدمات وصور Cloud Run
إذا كنت تريد الاحتفاظ بمشروع Google Cloud ولكنك تريد إزالة الموارد المحدّدة التي تم إنشاؤها في هذا المختبر، عليك حذف كل من الخدمة قيد التشغيل وصورة الحاوية المخزّنة في السجلّ.
- نفِّذ الأوامر التالية في الوحدة الطرفية:
gcloud run services delete zoo-tour-guide --region=europe-west1 --quiet gcloud artifacts repositories delete cloud-run-source-deploy --location=europe-west1 --quiet
حذف المشروع (اختياري)
إذا أنشأت مشروعًا جديدًا خصيصًا لهذا المختبر ولا تخطّط لاستخدامه مرة أخرى، فإنّ أسهل طريقة لتنظيفه هي حذف المشروع بأكمله. يضمن ذلك إزالة جميع الموارد (بما في ذلك حساب الخدمة وأي عناصر مخفية من إصدارات التطبيق) بالكامل.
- في الوحدة الطرفية، شغِّل الأمر التالي (استبدِل [YOUR_PROJECT_ID] برقم تعريف مشروعك الفعلي)
gcloud projects delete $PROJECT_ID
12. تهانينا
لقد نجحت في إنشاء تطبيق ذكاء اصطناعي متعدد الوكلاء ونشره على Google Cloud.
ملخّص
في هذا التمرين العملي، انتقلت من دليل فارغ إلى خدمة ذكاء اصطناعي مباشرة ومتاحة للجميع. في ما يلي نظرة على ما أنشأته:
- إنشاء فريق متخصص: بدلاً من استخدام ذكاء اصطناعي عام، أنشأت "باحثًا" للعثور على الحقائق و "منسّقًا" لتحسين الإجابة.
- منحتهم أدوات: ربطت وكلاءك بالعالم الخارجي باستخدام واجهة برمجة التطبيقات الخاصة بموقع Wikipedia.
- تم إطلاق التطبيق: أخذت رمز Python المحلي ونشرته كحاوية بلا خادم على Cloud Run، مع تأمينها باستخدام حساب خدمة مخصّص.
المواضيع التي تناولناها
- كيفية تنظيم مشروع Python لنشره باستخدام ADK
- كيفية تنفيذ سير عمل متعدد الوكلاء باستخدام
[SequentialAgent](https://google.github.io/adk-docs/agents/workflow-agents/sequential-agents/) - كيفية دمج أدوات خارجية، مثل واجهة برمجة التطبيقات الخاصة بموقع Wikipedia
- كيفية نشر وكيل إلى Cloud Run باستخدام الأمر
adk deploy
13. استطلاع
إخراج: