1. مقدمة
يركّز هذا المختبر على تنفيذ خدمة وكيل العميل ونشرها. ستستخدم مجموعة أدوات تطوير الوكيل (ADK) لإنشاء وكيل يعمل بالذكاء الاصطناعي ويستخدم أدوات عن بُعد، مثل خادم MCP الذي تم إنشاؤه في التجربة 1. مبدأ التصميم الأساسي الذي تم توضيحه هو فصل الاهتمامات، حيث تتواصل طبقة استدلال مميزة (الوكيل) مع طبقة أدوات مميزة (خادم MCP) من خلال واجهة برمجة تطبيقات آمنة.
في التمرين العملي 1، أنشأت خادم MCP يوفّر بيانات عن الحيوانات في حديقة حيوانات وهمية للنماذج اللغوية الكبيرة، مثلاً عند استخدام Gemini CLI. في هذا الدرس التطبيقي، سننشئ وكيلًا لتقديم جولات إرشادية في حديقة الحيوانات الوهمية. سيستخدم الوكيل خادم MCP نفسه من المختبر 1 للوصول إلى تفاصيل حول حيوانات حديقة الحيوان، كما سيستخدم ويكيبيديا لتقديم أفضل تجربة دليل سياحي.
أخيرًا، سننشر وكيل مرشد الجولات على Google Cloud Run، ليتمكّن جميع زوّار حديقة الحيوانات من الوصول إليه بدلاً من تشغيله محليًا فقط.
المتطلبات الأساسية
- خادم MCP قيد التشغيل على Cloud Run أو عنوان URL للخدمة المرتبط به
- مشروع على Google Cloud تم تفعيل الفوترة فيه
ما ستتعلمه
- كيفية تنظيم مشروع Python لنشر ADK
- كيفية تنفيذ وكيل يستخدم أدوات باستخدام google-adk
- كيفية ربط وكيل بخادم MCP بعيد لمجموعة أدواته
- كيفية نشر تطبيق Python كحاوية بدون خادم على Cloud Run
- كيفية ضبط مصادقة آمنة بين الخدمات باستخدام أدوار إدارة الهوية وإمكانية الوصول
- كيفية حذف موارد Cloud لتجنُّب تحمّل تكاليف مستقبلية
المتطلبات
- حساب Google Cloud ومشروع Google Cloud
- متصفّح ويب، مثل Chrome
2. لماذا يجب النشر على Cloud Run؟
Cloud Run هو خيار رائع لاستضافة وكلاء ADK لأنّه نظام أساسي بدون خادم، ما يعني أنّه يمكنك التركيز على الرمز البرمجي وليس على إدارة البنية الأساسية. نتولّى نحن العمليات التشغيلية نيابةً عنك.
يمكنك التفكير في الأمر على أنّه متجر مؤقت: لا يتم فتحه واستخدام الموارد إلا عند وصول العملاء (الطلبات). وعندما لا يكون هناك عملاء، يتم إغلاقه بالكامل، ولن تدفع مقابل متجر فارغ.
الميزات الأساسية
تشغيل الحاويات في أي مكان:
- يمكنك إحضار حاوية (صورة Docker) تحتوي على تطبيقك.
- ويشغّلها Cloud Run على البنية الأساسية من Google.
- لا داعي للقلق بشأن تصحيح نظام التشغيل أو إعداد الآلة الافتراضية أو توسيع نطاقها.
التدرّج التلقائي:
- إذا لم يكن هناك أي مستخدمين لتطبيقك → يتم تشغيل 0 مثيل (تدفع 0 دولار أمريكي عندما يكون التطبيق غير نشط).
- إذا وصل إلى 1,000 طلب، سيتم إنشاء العدد المطلوب من النسخ.
عدم الاحتفاظ بالحالة تلقائيًا:
- يمكن أن ينتقل كل طلب إلى نسخة مختلفة.
- إذا كنت بحاجة إلى تخزين الحالة، استخدِم خدمة خارجية مثل Cloud SQL أو Firestore أو Redis.
التوافق مع أي لغة أو إطار عمل:
- طالما أنّ التطبيق يعمل في حاوية Linux، لا يهمّ Cloud Run ما إذا كان مكتوبًا بلغة Python أو Go أو Node.js أو Java أو .Net.
الدفع مقابل الاستخدام:
- يتم تحصيل الرسوم مقابل كل طلب بالإضافة إلى وقت الحوسبة (بحدّ أدنى 100 ملي ثانية).
- لن تدفع مقابل الموارد غير المستخدَمة كما هو الحال مع الآلة الافتراضية التقليدية.
3- الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
- معرّف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف مشروعك (يُشار إليه عادةً باسم
PROJECT_ID
). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك ومعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع، تستخدمها بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير، إن وُجدت أي تكلفة على الإطلاق. لإيقاف الموارد وتجنُّب تحمّل تكاليف تتجاوز هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
انتقِل إلى محرّر Cloud Shell
إذا لم تظهر الوحدة الطرفية في أسفل الشاشة، افتحها باتّباع الخطوات التالية:
- انقر على Terminal.
- انقر على نافذة طرفية جديدة.
في الوحدة الطرفية، اضبط مشروعك باستخدام هذا الأمر. إذا أكملت التمرين العملي 1، تأكَّد من استخدام رقم تعريف المشروع نفسه:
gcloud config set project [YOUR-PROJECT-ID]
إذا لم تتمكّن من تذكُّر رقم تعريف مشروعك، يمكنك إدراج جميع أرقام تعريف المشاريع باستخدام:
gcloud projects list | awk '/PROJECT_ID/{print $2}'
4. إذا طُلب منك منح الإذن، انقر على منح الإذن للمتابعة.
5- من المفترض أن تظهر لك هذه الرسالة:
Updated property [core/project].
If you see a `WARNING` and are asked `Do you want to continue (Y/n)?`,
then you have likely entered the project ID incorrectly. Press `n`,
press `Enter`, and try to run the `gcloud config set project` command again.
4. قبل البدء
تفعيل واجهات برمجة التطبيقات وضبط متغيرات البيئة
فعِّل جميع الخدمات اللازمة:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
aiplatform.googleapis.com \
compute.googleapis.com
الناتج المتوقّع
Operation "operations/acat.p2-[GUID]" finished successfully.
اضبط منطقتك التلقائية لاستخدام نماذج التضمين في Vertex AI. مزيد من المعلومات حول المواقع الجغرافية التي تتوفّر فيها Vertex AI في المثال الذي نستخدمه، تكون المنطقة europe-west1.
gcloud config set compute/region europe-west1
5- تنزيل حزمة تطوير التطبيقات (ADK) وتثبيتها وإنشاء مجلد مشروع
أنشئ أدلة المشروع.
ينشئ هذا الأمر مجلدًا رئيسيًا للدرس التطبيقي يحتوي على الرمز المصدري للوكيل.
cd && mkdir zoo_guide_agent && cd zoo_guide_agent
أنشئ بيئة افتراضية.
python3 -m venv .venv
تفعيل البيئة الافتراضية
source .venv/bin/activate
أنشئ ملف requirements.txt
. يسرد هذا الملف مكتبات Python التي يحتاجها برنامجك. ينشئ الأمر التالي الملف ويملأه.
cloudshell edit requirements.txt
google-adk==1.12.0
langchain-community
wikipedia
يجب تنفيذ الأمر من دليل مشروعك الرئيسي، zoo_guide_agent
.
pip install -r requirements.txt
اضبط المتغيّرات لمشروعك ومنطقتك ومستخدمك الحاليين. هذه طريقة أكثر فعالية لتنفيذ هذه الأوامر.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_REGION=$(gcloud config get-value compute/region)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
export SERVICE_ACCOUNT="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com"
أنشئ ملف .env
وافتحه للمصادقة على الوكيل في الدليل zoo_guide_agent
.
cloudshell edit .env
سيفتح الأمر cloudshell edit الملف .env
في المحرِّر أعلى الوحدة الطرفية. أدخِل ما يلي في ملف .env
ثم ارجع إلى الوحدة الطرفية.
MODEL="gemini-2.5-flash"
SERVICE_ACCOUNT="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com"
إضافة عنوان URL لخادم MCP إذا أكملت التمرين العملي 1، اتّبِع الخطوات التالية لاستخدام خادم MCP الذي أنشأته في التمرين العملي 1:
- منح إذن هوية خدمة Cloud Run لاستدعاء خادم MCP البعيد
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SERVICE_ACCOUNT" \
--role="roles/run.invoker"
- احفظ عنوان URL لخادم MCP من Lab 1 في متغيّر بيئة.
echo -e "\nMCP_SERVER_URL=https://zoo-mcp-server-${PROJECT_NUMBER}.europe-west1.run.app/mcp/" >> .env
إذا كنت تستخدم رابط خادم MCP عامًا، نفِّذ ما يلي، واستبدِل PROJECT_NUMBER
بالمعلومات المقدَّمة.
echo -e "\nMCP_SERVER_URL=https://zoo-mcp-server-${PROJECT_NUMBER}.europe-west1.run.app/mcp/" >> .env
6. إنشاء سير عمل الوكيل
إنشاء ملف init.py
أنشِئ ملف init.py. يُعلم هذا الملف لغة Python أنّ دليل zoo_guide_agent هو حزمة.
cloudshell edit __init__.py
يفتح الأمر أعلاه محرِّر الرموز البرمجية. أضِف الرمز التالي إلى __init__.py
:
from . import agent
إنشاء ملف agent.py الرئيسي
أنشئ ملف agent.py الرئيسي. ينشئ هذا الأمر ملف Python ويلصق فيه الرمز الكامل لنظامك المستند إلى عدّة وكلاء.
cloudshell edit agent.py
الخطوة 1: عمليات الاستيراد والإعداد الأولي
تستورد هذه المجموعة الأولى جميع المكتبات الضرورية من "حزمة تطوير التطبيقات" وGoogle Cloud. يتم أيضًا إعداد التسجيل وتحميل متغيّرات البيئة من ملف .env
، وهو أمر بالغ الأهمية للوصول إلى نموذجك وعنوان URL الخاص بالخادم.
أضِف الرمز التالي إلى ملف 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.mcp_tool.mcp_toolset import MCPToolset, StreamableHTTPConnectionParams
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")
الخطوة 2: تحديد الأدوات (إمكانات الوكيل)
تعتمد جودة الوكيل على الأدوات التي يمكنه استخدامها. في هذا القسم، نحدّد جميع الإمكانات التي سيتمتّع بها برنامجنا، بما في ذلك وظيفة مخصّصة لحفظ البيانات، و"أداة MCP" التي تتصل بخادم MCP الآمن بالإضافة إلى "أداة Wikipedia".
أضِف الرمز التالي إلى أسفل ملف 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 MCP Tool to connect to the Zoo MCP server
mcp_server_url = os.getenv("MCP_SERVER_URL")
if not mcp_server_url:
raise ValueError("The environment variable MCP_SERVER_URL is not set.")
def get_id_token():
"""Get an ID token to authenticate with the MCP server."""
target_url = os.getenv("MCP_SERVER_URL")
audience = target_url.split('/mcp/')[0]
request = google.auth.transport.requests.Request()
id_token = google.oauth2.id_token.fetch_id_token(request, audience)
return id_token
"""
# Use this code if you are using the public MCP Server and comment out the code below defining mcp_tools
mcp_tools = MCPToolset(
connection_params=StreamableHTTPConnectionParams(
url=mcp_server_url
)
)
"""
mcp_tools = MCPToolset(
connection_params=StreamableHTTPConnectionParams(
url=mcp_server_url,
headers={
"Authorization": f"Bearer {get_id_token()}",
},
),
)
# Configuring the Wikipedia Tool
wikipedia_tool = LangchainTool(
tool=WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
)
شرح الأدوات الثلاث
add_prompt_to_state
📝
تتذكّر هذه الأداة طلبات زوّار حديقة الحيوان. عندما يسأل أحد الزوّار "أين توجد الأسود؟"، تحفظ هذه الأداة هذا السؤال المحدّد في ذاكرة الوكيل لكي تعرف الوكلاء الآخرين في سير العمل ما يجب البحث عنه.
الطريقة: هي دالة Python تكتب طلب الزائر في قاموس tool_context.state
المشترَك. يمثّل سياق الأداة ذاكرة الوكيل القصيرة المدى لمحادثة واحدة. يمكن للوكيل التالي في سير العمل قراءة البيانات التي حفظها الوكيل السابق في الحالة.
MCPToolset
🦁
يُستخدَم هذا الإعداد لربط وكيل دليل الجولات بخادم MCP الخاص بحديقة الحيوانات الذي تم إنشاؤه في التمرين العملي 1. يتضمّن هذا الخادم أدوات خاصة للبحث عن معلومات محدّدة حول حيواناتنا، مثل اسمها وعمرها ومكان إقامتها.
الطريقة: يتم الاتصال بشكل آمن بعنوان URL الخاص بالخادم الخاص بحديقة الحيوانات. يستخدم get_id_token
للحصول تلقائيًا على "بطاقة مفتاح" آمنة (رمز مميّز لمعرّف حساب الخدمة) لإثبات هويته والحصول على إذن الوصول.
LangchainTool
🌍
يمنح هذا الإجراء وكيل دليل الجولات المعرفة العامة بالعالم. عندما يطرح زائر سؤالاً غير متوفّر في قاعدة بيانات حديقة الحيوانات، مثل "ماذا تأكل الأسود في البرية؟"، تتيح هذه الأداة للوكيل البحث عن الإجابة على Wikipedia.
الطريقة: يعمل كأداة ربط، ما يسمح للوكيل باستخدام أداة WikipediaQueryRun المُنشأة مسبقًا من مكتبة LangChain.
المصادر:
الخطوة 3: تحديد "الوكلاء المتخصّصون"
بعد ذلك، سنحدّد وكيل الباحث ووكيل تنسيق الردود. يُعدّ الباحث الآلي "العقل" الذي يوجّه عملياتنا. يستقبل هذا الوكيل طلب المستخدم من State
المشترَكة، ويفحص أدواتها الفعّالة (أداة خادم MCP في Zoo وأداة Wikipedia)، ويقرّر الأدوات التي سيستخدمها للعثور على الإجابة.
مهمة وكيل تنسيق الردود هي العرض. ولا تستخدم أي أدوات للعثور على معلومات جديدة. بدلاً من ذلك، تأخذ هذه الأداة البيانات الأولية التي جمعها وكيل Researcher (التي تم تمريرها عبر الحالة) وتستخدم مهارات اللغة في النموذج اللغوي الكبير لتحويلها إلى ردّ سهل ومناسب للمحادثة.
أضِف الرمز التالي إلى أسفل agent.py
:
# 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=[
mcp_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 }}
"""
)
الخطوة 4: وكيل سير العمل
يعمل وكيل سير العمل كمدير "المكتب الخلفي" لجولة حديقة الحيوانات. يأخذ هذا المكوّن طلب البحث ويضمن أن يؤدي الوكيلان اللذان حدّدناهما أعلاه وظائفهما بالترتيب الصحيح: البحث أولاً، ثم التنسيق. يؤدي ذلك إلى إنشاء عملية يمكن توقّعها وموثوقة للإجابة عن سؤال أحد الزوّار.
طريقة عملها: هي SequentialAgent
، وهو نوع خاص من البرامج لا يفكّر بنفسه. مهمتها الوحيدة هي تشغيل قائمة من sub_agents
(الباحث والمنسّق) في تسلسل ثابت، مع تمرير الذاكرة المشتركة تلقائيًا من أحدهما إلى الآخر.
أضِف مجموعة الرموز هذه إلى أسفل agent.py
:
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
، ويستخدمه إطار عمل ADK كنقطة بداية لجميع المحادثات الجديدة. ويتمثل دورها الأساسي في تنسيق العملية بشكل عام. يعمل هذا الدور كعنصر تحكّم أولي، ويدير الجولة الأولى من المحادثة.
أضِف مجموعة الرموز النهائية هذه إلى أسفل agent.py
:
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]
)
اكتمل الآن ملف agent.py
. من خلال إنشاء النظام بهذه الطريقة، يمكنك معرفة الدور المحدد لكل مكوّن، أي الأدوات ووكلاء العاملين ووكلاء المديرين، في إنشاء النظام النهائي الذكي. والآن، سنتحدّث عن عملية النشر.
7. تجهيز التطبيق للنشر
بعد إعداد بيئتك المحلية، تكون الخطوة التالية هي تجهيز مشروعك على Google Cloud للنشر. يتضمّن ذلك إجراء فحص نهائي لبنية ملف الوكيل للتأكّد من توافقه مع أمر النشر. والأهم من ذلك، عليك ضبط إذن IAM مهم يسمح لخدمة Cloud Run التي تم نشرها بالتصرّف نيابةً عنك واستدعاء نماذج Vertex AI. يضمن إكمال هذه الخطوة أنّ بيئة السحابة الإلكترونية جاهزة لتشغيل البرنامج بنجاح.
حمِّل المتغيرات في جلسة shell من خلال تنفيذ الأمر source.
source .env
امنح حساب الخدمة دور "مستخدم 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"
8. نشر الوكيل باستخدام واجهة سطر الأوامر (CLI) الخاصة بـ ADK
بعد أن يصبح الرمز البرمجي المحلي جاهزًا ومشروع Google Cloud معدًا، حان وقت نشر الوكيل. ستستخدِم الأمر adk deploy cloud_run
، وهو أداة سهلة الاستخدام تعمل على أتمتة سير عمل النشر بالكامل. تتضمّن هذه الأوامر الفردية تجميع الرمز البرمجي وإنشاء صورة حاوية وتحميلها إلى Artifact Registry وتشغيل الخدمة على Cloud Run، ما يتيح الوصول إليها على الويب.
إنشاء ملف .gcloudignore
لتقليل وقت النشر، نريد إنشاء ملف .gcloudignore
. نفِّذ الأوامر التالية لتنفيذ ذلك.
cloudshell edit .gcloudignore
سيفتح الأمر cloudshell edit الملف .gcloudignore
في المحرِّر أعلى الوحدة الطرفية. اكتب ما يلي في الملف واحفظه. بعد ذلك، ارجع إلى الوحدة الطرفية لتنفيذ أوامر النشر في القسم التالي.
.venv/
نشر
نفِّذ الأوامر التالية لنشر وكيلك.
# Run the deployment command
adk deploy cloud_run \
--project=$PROJECT_ID \
--region=europe-west1 \
--service_name=zoo-tour-guide \
--with_ui \
.
gcloud run services update zoo-tour-guide \
--region=europe-west1 \
--update-labels=dev-tutorial=codelab-adk
قبول الإشعارات
قد يُطلب منك تنفيذ ما يلي:
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 هذا للمهمة التالية.
9- اختبار الوكيل الذي تم نشره
بعد أن يصبح وكيلك متاحًا على 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?"
شرح حول مسار الوكيل
يعمل نظامك كفريق ذكي يتألف من عدّة وكلاء. تتم إدارة العملية من خلال تسلسل واضح لضمان تدفق سلس وفعّال من سؤال المستخدم إلى الإجابة النهائية التفصيلية.
1. موظف الاستقبال في حديقة الحيوانات (مكتب الاستقبال)
تبدأ العملية بأكملها مع وكيل الترحيب.
مهمتها: بدء المحادثة وتتمثل تعليماتها في الترحيب بالمستخدم وسؤاله عن الحيوان الذي يريد معرفة معلومات عنه.
الأداة: عندما يردّ المستخدم، تستخدم أداة Greeter add_prompt_to_state لالتقاط كلماته بالضبط (مثلاً، أريد معلومات عن الأسود") وحفظها في ذاكرة النظام.
التسليم: بعد حفظ الطلب، يتم على الفور نقل عناصر التحكّم إلى الوكيل الفرعي tour_guide_workflow.
2- الباحث الشامل (الباحث المتميّز)
هذه هي الخطوة الأولى في سير العمل الرئيسي و "عقل" العملية. بدلاً من فريق كبير، لديك الآن وكيل واحد يتمتّع بمهارات عالية ويمكنه الوصول إلى جميع المعلومات المتاحة.
مهمتها: تحليل سؤال المستخدم ووضع خطة ذكية. تستفيد هذه الميزة من قدرة النموذج اللغوي الفعّالة على استخدام الأدوات لتحديد ما إذا كان بحاجة إلى:
- بيانات داخلية من سجلات حديقة الحيوانات (عبر خادم MCP)
- معلومات عامة من الويب (عبر Wikipedia API)
- أو كلاهما للأسئلة المعقّدة.
الإجراء الذي تتّخذه: تنفّذ الأداة(الأدوات) اللازمة لجمع جميع البيانات الأولية المطلوبة. على سبيل المثال، إذا طُرح السؤال "كم تبلغ أعمار الأسود وماذا تأكل في البرية؟"، سيتم استدعاء خادم MCP للحصول على الأعمار وأداة Wikipedia للحصول على معلومات حول النظام الغذائي.
3. أداة تنسيق الردود (المقدِّم)
بعد أن يجمع Comprehensive Researcher كل الحقائق، يكون هذا هو الوكيل النهائي الذي سيتم تشغيله.
مهمته: تقديم جولة في حديقة الحيوانات بأسلوب ودود تأخذ هذه العملية البيانات الأولية (التي يمكن أن تكون من مصدر واحد أو كلا المصدرين) وتعدّلها.
الإجراء الذي يتخذه: يجمع كل المعلومات في إجابة واحدة متماسكة وجذابة. وبعد اتّباع تعليماته، يعرض أولاً معلومات عن حديقة الحيوانات المحدّدة، ثم يضيف الحقائق العامة المثيرة للاهتمام.
النتيجة النهائية: النص الذي ينشئه هذا الوكيل هو الإجابة الكاملة والمفصّلة التي يراها المستخدم في نافذة المحادثة.
إذا كنت مهتمًا بمعرفة المزيد حول إنشاء وكلاء، يمكنك الاطّلاع على الموارد التالية:
10. تنظيف البيئة
gcloud run services delete zoo-tour-guide --region=europe-west1 --quiet
gcloud artifacts repositories delete cloud-run-source-deploy --location=europe-west1 --quiet
11. تهانينا
تهانينا على إكمال هذا الدرس العملي.
المواضيع التي تناولناها
- كيفية تنظيم مشروع Python لنشره باستخدام واجهة سطر الأوامر في "حزمة تطوير التطبيقات"
- كيفية تنفيذ سير عمل متعدد الوكلاء باستخدام SequentialAgent وParallelAgent
- كيفية الاتصال بخادم MCP بعيد باستخدام MCPToolset لاستخدام أدواته
- كيفية تحسين البيانات الداخلية من خلال دمج أدوات خارجية، مثل واجهة برمجة التطبيقات الخاصة بموقع Wikipedia
- كيفية نشر وكيل كحاوية بدون خادم على Cloud Run باستخدام الأمر adk deploy
12. استطلاع
إخراج: