1. مقدمة
نظرة عامة
يعلّمك هذا المختبر كيفية تنسيق الأنظمة المعقّدة والمتعدّدة الوكلاء باستخدام مجموعة أدوات تطوير الوكلاء من Google (Google ADK). ستنتقل من تسلسل الوكلاء البسيط إلى إنشاء مهام سير عمل تعاونية ومؤتمتة.
ما ستنشئه
ستنشئ نظامَين مختلفَين يستندان إلى عدّة وكلاء:
- وكيل بسيط للتخطيط للسفر يتعلّم نقل المحادثات بين وكيل "تبادل الأفكار" ووكيل "التخطيط لزيارة المعالم السياحية"
- مولّد أكثر تقدّمًا لاقتراحات الأفلام يستخدم "غرفة كتابة" من الوكلاء الآليين (مثل باحث وكاتب سيناريو وناقد) للعمل معًا في حلقة مكررة لإنشاء حبكة فيلم كاملة
أهداف الدورة التعليمية
- كيفية إنشاء علاقات بين حساب رئيسي وحسابات فرعية
- كيفية كتابة البيانات في الجلسة
stateمن إحدى الأدوات - كيفية القراءة من
stateباستخدام نماذج المفاتيح (مثل{my_key?}). - كيفية استخدام
SequentialAgentلمهام سير العمل المفصّلة - كيفية استخدام
LoopAgentلإنشاء دورات تحسين متكرّرة - كيفية استخدام
ParallelAgentلتنفيذ مهام مستقلة في الوقت نفسه
2. الأنظمة المتعددة الوكلاء
تتيح حزمة تطوير الوكلاء (ADK) للمطوّرين الحصول على سلوكيات أكثر موثوقية وتطوّرًا ومتعددة الخطوات من النماذج التوليدية. بدلاً من طلب معقّد واحد، تتيح لك "مجموعة أدوات تطوير التطبيقات" إنشاء سلسلة من الوكلاء المتعدّدين والأبسط الذين يتعاونون في حلّ مشكلة ما من خلال تقسيم العمل.
يتميّز هذا الأسلوب بعدة مزايا مقارنةً باستخدام طلب واحد وشامل:
- تصميم أبسط: من الأسهل تصميم وتنظيم سلسلة من العملاء الصغار المتخصصين بدلاً من تصميم طلب كبير ومعقّد.
- الموثوقية: تكون الوكلاء المتخصّصون أكثر موثوقية في مهامهم المحدّدة من وكيل واحد كبير ومعقّد.
- سهولة الصيانة: من الأسهل إصلاح أو تحسين وكيل صغير ومتخصّص بدون إتلاف أجزاء أخرى من النظام.
- التصميم المعياري: يمكن بسهولة إعادة استخدام الوكلاء المصمَّمين لسير عمل واحد في عمليات أخرى.
شجرة الوكلاء الهرمية

في "مجموعة أدوات Android"، يمكنك تنظيم البرامج في بنية شجرية. يُعدّ هذا التسلسل الهرمي أساسيًا للتحكّم في سير المحادثة، لأنّه يحدّد الموظّف الذي يمكنه "نقل" المحادثة إلى موظّف آخر. ويجعل ذلك سلوك النظام أكثر قابلية للتوقّع وأسهل في تصحيح الأخطاء. تشمل المزايا ما يلي:
- تصميم سهل الاستخدام: تم استلهام البنية من الفرق في العالم الحقيقي، ما يسهّل فهمها.
- التحكّم في التدفق: يمنحك التسلسل الهرمي تحكّمًا دقيقًا في تفويض المهام، ما يساعد في تصحيح الأخطاء. على سبيل المثال، تضمن بنية الشجرة استدعاء عامل كتابة التقارير الصحيح، حتى إذا كان لديك عاملان يتضمّنان أوصافًا متشابهة.
تبدأ البنية بأكملها بـ root_agent. يعمل هذا العنصر كـ عنصر رئيسي ويمكن أن يتضمّن عنصرًا فرعيًا واحدًا أو أكثر، ويمكن أن تكون العناصر الفرعية بدورها عناصر رئيسية لعناصر فرعية أخرى، ما يؤدي إلى تكوين الشجرة.
3- إعداد المشروع
حساب Google
إذا لم يكن لديك حساب شخصي على Google، عليك إنشاء حساب على Google.
استخدام حساب شخصي بدلاً من حساب تابع للعمل أو تديره مؤسسة تعليمية
تسجيل الدخول إلى Google Cloud Console
سجِّل الدخول إلى Google Cloud Console باستخدام حساب Google شخصي.
تفعيل الفوترة
تحصيل قيمة رصيد Google Cloud بقيمة 5 دولار أمريكي (اختياري)
لإجراء ورشة العمل هذه، تحتاج إلى حساب فوترة يتضمّن بعض الرصيد. إذا كنت تخطّط لاستخدام نظام الفوترة الخاص بك، يمكنك تخطّي هذه الخطوة.
- انقر على هذا الرابط وسجِّل الدخول باستخدام حساب Google شخصي.سيظهر لك ما يلي:

- انقر على الزر انقر هنا للوصول إلى رصيدك.سينقلك هذا الزر إلى صفحة لإعداد ملف الفوترة

- انقر على تأكيد.
أنت مرتبط الآن بحساب فوترة تجريبي على Google Cloud Platform.

إعداد حساب فوترة شخصي
إذا أعددت الفوترة باستخدام أرصدة Google Cloud، يمكنك تخطّي هذه الخطوة.
لإعداد حساب فوترة شخصي، يُرجى الانتقال إلى هنا لتفعيل الفوترة في Cloud Console.
ملاحظات:
- يجب أن تكلّف إكمال هذا المختبر أقل من دولار أمريكي واحد من موارد السحابة الإلكترونية.
- يمكنك اتّباع الخطوات في نهاية هذا المختبر لحذف الموارد وتجنُّب المزيد من الرسوم.
- يمكن للمستخدمين الجدد الاستفادة من الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
إنشاء مشروع (اختياري)
إذا لم يكن لديك مشروع حالي تريد استخدامه لهذا التصنيف، يمكنك إنشاء مشروع جديد هنا.
4. فتح Cloud Shell Editor
- انقر على هذا الرابط للانتقال مباشرةً إلى محرّر Cloud Shell
- إذا طُلب منك منح الإذن في أي وقت اليوم، انقر على منح الإذن للمتابعة.

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

- في الوحدة الطرفية، اضبط مشروعك باستخدام الأمر التالي:
gcloud config set project [PROJECT_ID]- مثال:
gcloud config set project lab-project-id-example - إذا تعذّر عليك تذكُّر معرّف مشروعك، يمكنك إدراج جميع معرّفات المشاريع باستخدام:
gcloud projects list
- مثال:
- من المفترض أن تظهر لك هذه الرسالة:
Updated property [core/project].
5- تفعيل واجهات برمجة التطبيقات
لاستخدام Vertex AI API والتفاعل مع نموذج Gemini، عليك تفعيل Vertex AI API في مشروعك على Google Cloud.
- في الوحدة الطرفية، فعِّل واجهة برمجة التطبيقات:
gcloud services enable aiplatform.googleapis.com
في ما يلي الأقسام المعدَّلة التي تستبدل عملية إنشاء الملف يدويًا بتعليمات لاستنساخ مستودع GitHub وتثبيت التبعيات.
مقدمة عن حزمة تطوير البرامج (SDK) لخدمة Vertex AI في Python
للتفاعل مع النماذج المستضافة على Vertex AI من تطبيق Python، عليك استخدام حزمة تطوير البرامج (SDK) الخاصة بمنصة Vertex AI للغة Python. تُبسّط حزمة تطوير البرامج هذه عملية إرسال الطلبات وتحديد مَعلمات النموذج وتلقّي الردود بدون الحاجة إلى التعامل مع تعقيدات طلبات واجهة برمجة التطبيقات الأساسية مباشرةً.
يمكنك العثور على مستندات شاملة حول حزمة تطوير البرامج (SDK) الخاصة بـ Vertex AI في Python هنا: مقدمة عن حزمة تطوير البرامج (SDK) الخاصة بـ Vertex AI في Python | Google Cloud.
6. إعداد بيئة المشروع
إنشاء نسخة طبق الأصل من المستودع
- في وحدة التحكّم، استنسِخ المستودع الذي يحتوي على ملفات البداية.
لا تنسخ العلامةgit clone --depth 1 https://github.com/GoogleCloudPlatform/devrel-demos.git--depth 1سوى أحدث إصدار، ما يجعل العملية أسرع. - في الوحدة الطرفية، انتقِل إلى دليل العمل الصحيح لهذا الدرس التطبيقي.
cd devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems
تفعيل بيئة افتراضية
- في وحدة التحكّم، أنشئ بيئة افتراضية وفعّلها باستخدام
uv:uv venv source .venv/bin/activate - في وحدة التحكّم، ثبِّت
google-adkوالعناصر التابعة الأخرى من ملفrequirements.txt:uv pip install -r requirements.txt
مراجعة بنية الملف
بعد إنشاء جميع ملفاتك، افتح المجلد adk_multiagent_systems في المستكشف للاطّلاع على البنية الكاملة.
- في قائمة "محرّر Cloud Shell"، اختَر ملف > فتح مجلد....

- في المربّع الذي يظهر، أضِف معلومات المجلد التالية بعد اسم المستخدم:
devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems/. انقر على حسنًا.
من المفترض أن يظهر بالشكل التالي:
- سيتم إعادة تحميل لوحة "المستكشف" على اليمين. من المفترض أن تظهر لك الآن بنية مشروعك الكاملة، مع الدليلَين الفرعيَين
parent_and_subagentsوworkflow_agents، لتكون جاهزًا للخطوات التالية.
إعداد المتغيرات البيئية
- أنت حاليًا في دليل
adk_multiagent_systems. في وحدة التحكّم، أنشئ ملف.envلتخزين متغيرات البيئة:cloudshell edit .env - الصِق ما يلي في ملف
.envالذي يفتح في المحرِّر:GOOGLE_GENAI_USE_VERTEXAI=TRUE GOOGLE_CLOUD_PROJECT="[YOUR-PROJECT-ID]" GOOGLE_CLOUD_LOCATION=global MODEL="gemini-2.5-flash" - استبدِل
[YOUR-PROJECT-ID]برقم تعريف مشروع Google Cloud الفعلي. (مثلاًPROJECT_ID = "google-cloud-labs")
إذا لم تتمكّن من تذكُّر رقم تعريف مشروعك، نفِّذ الأمر التالي في الوحدة الطرفية. ستظهر لك قائمة بجميع مشاريعك وأرقام تعريفها.gcloud projects list - في نافذة الأوامر، انسخ ملف
.envهذا إلى أدلة الوكلاء الفرعيين حتى يتمكّنوا أيضًا من الوصول إلى المتغيرات: يجب أن تبدو بنية الملف الآن على النحو التالي:cp .env parent_and_subagents/.env cp .env workflow_agents/.env
7. استكشاف عمليات النقل بين الوكيل الرئيسي والوكيل الفرعي والوكلاء النظراء
تبدأ المحادثة دائمًا بـ root_agent. تستخدم وكالة رئيسية بشكلٍ تلقائي description الوكالات الفرعية لتحديد الوقت المناسب لنقل المحادثة. يمكنك أيضًا توجيه عمليات النقل هذه بشكل صريح في instruction الخاص بالوكيل الرئيسي باستخدام name الخاص بالوكلاء الفرعيين.
لنجرّب ذلك.
- في "محرِّر Cloud Shell"، افتح
adk_multiagent_systems/parent_and_subagents/agent.py. لاحظ الوكلاء الثلاثة في ملفagent.py:root_agent(الاسمsteering): يطرح على المستخدم سؤالاً لتحديد الوكيل الفرعي الذي سيتم نقل المحادثة إليه. في البداية، يعتمد فقط علىdescriptionالوكلاء الفرعيين.travel_brainstormer: تساعد المستخدم في استلهام أفكار بشأن الوجهات.-
attractions_planner: تساعد المستخدم في إعداد قائمة بالأنشطة التي يمكنه ممارستها في بلد معيّن.
- اجعل
travel_brainstormerوattractions_plannerبرنامجَين وكيلَين لـroot_agentمن خلال إضافة السطر التالي إلى عملية إنشاءroot_agent:sub_agents=[travel_brainstormer, attractions_planner] - في نافذة الأوامر، يمكنك الدردشة مع وكيلك:
cd ~/devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems adk run parent_and_subagents - في طلب
[user]:في الوحدة الطرفية، اكتب: مثال على الناتج (قد يختلف الناتج الذي يظهر على جهازك قليلاً):hello[steering]: Hi there! Do you already have a country in mind for your trip, or would you like some help deciding where to go?
- الآن، أخبر الوكيل في الوحدة الطرفية:
مثال على الناتج (قد يختلف الناتج الذي يظهر على جهازك قليلاً):I could use some help deciding. لاحظ العلامة[travel_brainstormer]: Okay! To give you the best recommendations, I need to understand what you're looking for in a trip. ...
[travel_brainstormer]. تم نقل عنصر التحكّمroot_agentاستنادًا إلىdescriptionالخاص بالوكيل الفرعي فقط. - في موجه الأوامر
user:في وحدة التحكم الطرفية، اكتبexitواضغط على ENTER لإنهاء المحادثة. - لنكن أكثر وضوحًا الآن. في
agent.py، أضِف ما يلي إلىinstructionفيroot_agent:If they need help deciding, send them to 'travel_brainstormer'. If they know what country they'd like to visit, send them to the 'attractions_planner'. - في الوحدة الطرفية، شغِّل الوكيل مرة أخرى:
adk run parent_and_subagents - في طلب
[user]:في الوحدة الطرفية، اكتب:hello - يمكنك الردّ بما يلي:
مثال على الناتج (قد يختلف الناتج الذي يظهر على جهازك قليلاً):I would like to go to Japan. لاحظ عملية النقل إلى[attractions_planner]: Okay, I can help you with that! Here are some popular attractions in Japan: ...
attractions_planner، كما هو موضّح في التعليمات الجديدة. - الردّ الآن:
مثال على الناتج (قد يختلف الناتج الذي يظهر على جهازك قليلاً):Actually I don't know what country to visit. يُرجى العلم أنّه تم نقلك إلى[travel_brainstormer]: Okay! I can help you brainstorm some countries for travel...
travel_brainstormer، وهو نظير لـattractions_planner. يتم السماح بذلك تلقائيًا. - في طلب المستخدم، اكتب
exitلإنهاء الجلسة.
ملخّص
في هذا القسم، تعرّفت على أساسيات التسلسل الهرمي للوكلاء ومسار المحادثة:
- تبدأ المحادثة دائمًا بـ
root_agent. - يمكن أن يحوّل وكيل رئيسي المحادثة تلقائيًا إلى وكيل فرعي استنادًا إلى
description. - يمكنك التحكّم في هذا المسار بشكلٍ صريح من خلال منح الوالد
instructionإذن النقل إلى وكيل فرعي من خلالname. - بشكلٍ تلقائي، يمكن للوكلاء النقل إلى وكلاء
peer(الوكلاء الفرعيون في التسلسل الهرمي).
8. استخدام حالة الجلسة لتخزين المعلومات واسترجاعها
تحتوي كل محادثة في "حزمة تطوير التطبيقات" على Session، والذي يتضمّن قاموسًا لحالة الجلسة. يمكن لجميع الوكلاء الوصول إلى هذه الحالة، ما يجعلها الطريقة المثالية لنقل المعلومات بين الوكلاء أو الاحتفاظ بالبيانات (مثل قائمة) طوال المحادثة.
لاستكشاف كيفية إضافة بيانات إلى الحالة وقراءتها:
- الرجوع إلى الملف
adk_multiagent_systems/parent_and_subagents/agent.py - الصِق تعريف الدالة التالي بعد العنوان
# Tools: في هذا الرمز، لاحظ ما يلي:def save_attractions_to_state( tool_context: ToolContext, attractions: List[str] ) -> dict[str, str]: """Saves the list of attractions to state["attractions"]. Args: attractions [str]: a list of strings to add to the list of attractions Returns: None """ # Load existing attractions from state. If none exist, start an empty list existing_attractions = tool_context.state.get("attractions", []) # Update the 'attractions' key with a combo of old and new lists. # When the tool is run, ADK will create an event and make # corresponding updates in the session's state. tool_context.state["attractions"] = existing_attractions + attractions # A best practice for tools is to return a status message in a return dict return {"status": "success"}- تتلقّى الدالة
tool_context: ToolContext. هذا العنصر هو بوابتك إلى الجلسة. - يقرأ السطر
tool_context.state["attractions"] = ...ويكتب مباشرةً في قاموس حالة الجلسة. يتولّى حزمة تطوير التطبيقات بقية المهام.
- تتلقّى الدالة
- أضِف الأداة إلى الوكيل
attractions_plannerمن خلال إضافة المَعلمةtools:tools=[save_attractions_to_state] - أضِف نقاطًا إلى
instructionالحالية الخاصة بعميلattractions_planner:- When they reply, use your tool to save their selected attraction and then provide more possible attractions. - If they ask to view the list, provide a bulleted list of { attractions? } and then suggest some more. - شغِّل واجهة مستخدم الويب الخاصة بـ "حزمة تطوير الوكيل" باستخدام الأمر التالي في الوحدة الطرفية:
الناتجadk webINFO: Started server process [2434] INFO: Waiting for application startup. +-------------------------------------------------------+ | ADK Web Server started | | | | For local testing, access at http://localhost:8000. | +-------------------------------------------------------+ INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) - في نافذة Cloud Shell، انقر على الزر معاينة الويب، ثم اختَر تغيير المنفذ لعرض واجهة الويب في علامة تبويب جديدة.

- أدخِل رقم المنفذ 8000 وانقر على تغيير ومعاينة. سيتم فتح علامة تبويب متصفّح جديدة تحتوي على واجهة مستخدم ADK Dev.

- من القائمة المنسدلة اختيار وكيل على يمين الصفحة، اختَر
parent_and_subagents. - ابدأ المحادثة بـ:
hello - بعد أن يرحّب بك الوكيل، يمكنك الردّ بما يلي:
من المفترض أن تتم إعادة توجيهك إلىI'd like to go to Egypt.attractions_plannerوتزويدك بقائمة بأماكن الجذب السياحي. - اختَر مَعلمًا سياحيًا، مثل:
I'll go to the Sphinx - من المفترض أن تتلقّى ردًا مشابهًا لما يلي: حسنًا، لقد حفظتُ "أبو الهول" في قائمتك...
- انقر على مربّع أدوات الردّ (المميّز بعلامة اختيار) لعرض الحدث الذي تم إنشاؤه من ردّ الأداة.
لاحظ أنّه يتضمّن حقل الإجراءات الذي يتضمّنstateDeltaيصف التغييرات في الحالة. - الردّ باقتراح آخر من قائمة الوكيل
- في قائمة التنقّل على يمين الصفحة، انقر على "X" للخروج من التركيز على الحدث الذي فحصته سابقًا.
- في الشريط الجانبي الأيمن، انقر على علامة التبويب الحالة. يمكنك الآن الاطّلاع على مصفوفة
attractionsفي حالة الجلسة، والتي من المفترض أن تحتوي على كلا العنصرَين المحدّدَين.
- أرسِل الرسالة التالية إلى الموظّف:
من المفترض أن يقرأ الوكيل الآن من الحالة ويعرض قائمتك.What is on my list? - عند الانتهاء من تجربة الوكيل، أغلق علامة تبويب متصفّح الويب واضغط على CTRL + C في "وحدة Cloud Shell الطرفية" لإيقاف الخادم.
ملخّص القسم
في هذا القسم، تعرّفت على كيفية استخدام حالة Session لمشاركة البيانات:
- لكتابة الحالة: يمكنك الكتابة إلى قاموس الحالة من داخل إحدى الأدوات باستخدام الكائن
tool_context.state(مثلاًtool_context.state["my_list"] = [...]). - لقراءة الحالة: يمكنك إدخال بيانات الحالة مباشرةً في
instructionالخاص بأحد العملاء باستخدام نماذج المفاتيح (مثلHere is your list: {my_list?}). - فحص الحالة: يمكنك مراقبة حالة الجلسة مباشرةً في واجهة مستخدم ADK Dev باستخدام علامة التبويب "الحالة".
9- وكلاء سير العمل
حتى الآن، رأيت كيف يحوّل وكيل رئيسي المحادثة إلى وكيل فرعي ثم ينتظر رد المستخدم. تختلف برامج وكيل سير العمل عن غيرها، فهي تنفّذ برامج الوكيل الفرعية واحدة تلو الأخرى في سير عمل آلي، بدون انتظار إدخال المستخدم.
هذه الميزة مثالية للمهام الآلية المتعددة الخطوات، مثل مسار "التخطيط والتنفيذ" أو "الصياغة والمراجعة". توفّر "حزمة تطوير التطبيقات" ثلاثة وكلاء مدمجين لسير العمل لإدارة ذلك:
SequentialAgentLoopAgentParallelAgent
سيركّز الجزء المتبقي من هذا الدرس التطبيقي على إنشاء نظام متعدد الوكلاء باستخدام وكلاء سير العمل الثلاثة هؤلاء.
ستنشئ وكيلاً يطوّر مستندًا ترويجيًا لفيلم جديد عن شخصية تاريخية. ستتولّى هذه البرامج إجراء الأبحاث والكتابة بشكل متكرّر وإنشاء التقارير.
في النهاية، سيبدو نظامك على النحو التالي:

ستنشئ هذا النظام خطوة بخطوة، بدءًا من أبسط سير عمل.
10. إنشاء نظام متعدد الوكلاء باستخدام SequentialAgent
SequentialAgent هو وكيل سير عمل ينفّذ الوكلاء الفرعيين في تسلسل خطي بسيط. يتم تشغيل كل وكيل في قائمة sub_agents واحدًا تلو الآخر، بالترتيب. هذا الخيار مثالي لخطوط الإنتاج التي يجب تنفيذ المهام فيها بترتيب معيّن، مثل وكيل اقتراح الأفلام الذي ستنشئه الآن.
سيكون الإصدار الأول منظَّمًا على النحو التالي:

- سيرحّب
root_agent(greeter) بالمستخدم ويحصل على موضوع الفيلم. - سيتم بعد ذلك نقلها إلى
SequentialAgentباسمfilm_concept_team، والذي سيتم فيه ما يلي:- تشغيل
researcherللحصول على حقائق من ويكيبيديا - شغِّل وكيل
screenwriterلاستخدام هذه الحقائق في كتابة حبكة. - شغِّل وكيل
file_writerلحفظ الرسم البياني النهائي في ملف.
- تشغيل
لننفّذها.
- في محرِّر Cloud Shell، افتح
adk_multiagent_systems/workflow_agents/agent.py.
اطّلِع على ملف تعريف هذا الوكيل. بما أنّه يجب تحديد الوكلاء الفرعيين قبل إمكانية تعيينهم لوكيل رئيسي، لقراءة الملف بترتيب سير المحادثة، يمكنك قراءة الوكلاء من أسفل الملف إلى أعلاه. - لاحظ الأداة
append_to_state. تتيح دالة المساعدة هذه للوكلاء إلحاق البيانات بقائمة في حالة الجلسة، وهي الطريقة التي ستمرر بها الدالتانresearcherوscreenwriterعملهما. - جرِّب الوكيل. في وحدة التحكّم، شغِّل واجهة الويب مع تفعيل إعادة التحميل المباشر:
cd ~/devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems adk web --reload_agents - في نافذة Cloud Shell، انقر على الزر معاينة الويب، ثم اختَر تغيير المنفذ لعرض واجهة الويب في علامة تبويب جديدة.

- أدخِل رقم المنفذ 8000 وانقر على تغيير ومعاينة. سيتم فتح علامة تبويب متصفّح جديدة تحتوي على واجهة مستخدم ADK Dev.

- من القائمة المنسدلة اختيار وكيل، اختَر
workflow_agents. - ابدأ المحادثة بـ:
hello. سيردّ عليك الوكيلgreeter. - عندما يُطلب منك ذلك، أدخِل اسم شخصية تاريخية. يمكنك استخدام أحد هذه الخيارات أو خيارك الخاص:
- تشانغ تشونغجينغ
- هبة فاروق
- ماركوس أوريليوس
- سيتولّى
SequentialAgentالآن عملية التحديث. لن تظهر لك أي رسائل وسيطة. سيتم تشغيلresearcherوscreenwriterوfile_writerواحدًا تلو الآخر. لن يردّ الوكيل إلا بعد اكتمال التسلسل بأكمله.
إذا تعذّر ذلك، يمكنك النقر على + جلسة جديدة في أعلى يسار الصفحة وإعادة المحاولة. - بعد أن يؤكّد الوكيل أنّه تمّت كتابة الملف، ابحث عن ملف
.txtالجديد وافتحه في الدليلmovie_pitchesفي Cloud Shell Editor للاطّلاع على الناتج. - في واجهة مستخدم المطوّر في "حزمة تطوير التطبيقات"، انقر على رمز آخر وكيل في سجلّ المحادثات لفتح عرض الأحداث.
- يعرض عرض الأحداث رسمًا بيانيًا مرئيًا لشجرة الوكيل. يمكنك الاطّلاع على الطريقة التي استدعت بها
greeterالدالةfilm_concept_team، والتي استدعت بدورها كلًا من العناصر الفرعية بالترتيب.
- يمكنك النقر على علامتَي التبويب الطلب والردّ لأي وكيل في الرسم البياني لفحص البيانات الدقيقة التي تم تمريرها، بما في ذلك حالة الجلسة.
ملخّص القسم
في هذا القسم، تعرّفت على كيفية استخدام وكيل سير العمل:
- ينفّذ
SequentialAgentوكيلاته الفرعية واحدة تلو الأخرى، بالترتيب، بدون انتظار إدخال المستخدم بين الخطوات. - هذا "سير عمل" لأنّ المستخدم يتحدث إلى
root_agent، الذي يسلّم العمل إلىSequentialAgentلإكماله. - تستخدم البرامج الفرعية في التسلسل حالة الجلسة (مثل
{ PLOT_OUTLINE? }) للوصول إلى عمل العملاء السابقين. - يمكنك استخدام الرسم البياني للأحداث في واجهة مستخدم المطوّر لتصوُّر سير العمل الكامل من وكيل إلى وكيل وتصحيح أخطائه.
11. إضافة LoopAgent للعمل التكراري
LoopAgent هو وكيل سير عمل يشغّل الوكلاء الفرعيين بالتسلسل ثم يكرّر العملية بدءًا من البداية. تستمر هذه "الحلقة" إلى أن يتم استيفاء شرط معيّن، مثل الوصول إلى عدد max_iterations أو استدعاء وكيل فرعي للأداة المضمّنة exit_loop.
وهي مفيدة للمهام التي تتطلب تحسينًا متكررًا. ستضيف هذا LoopAgent لإنشاء "غرفة كاتب" لوكيلك المسؤول عن عرض فكرة الفيلم. يتيح ذلك لـ "researcher" و"screenwriter" و"critic" الجديدة العمل في حلقة، ما يؤدي إلى تحسين الحبكة في كل مرة إلى أن تقرّر "critic" أنّها جاهزة. يساعد ذلك أيضًا البرنامج على التعامل مع طلبات المستخدمين الأقل وضوحًا (مثل "طبيب قديم") من خلال السماح له بالبحث عن فكرة وتحسينها.

لإجراء هذه التغييرات، اتّبِع الخطوات التالية:
- في
adk_multiagent_systems/workflow_agents/agent.py، أضِف عملية الاستيراد الخاصة بـexit_loop(بالقرب من عمليات الاستيراد الأخرى الخاصة بـgoogle.adk):from google.adk.tools import exit_loop - أضِف وكيل
criticجديدًا. سيراجع هذا الوكيل الحبكة. إذا كانت جيدة، سيتم استدعاءexit_loop. إذا لم يكن الأمر كذلك، يضيف ملاحظات إلى الحالة في التكرار التالي.
ألصِق تعريف الوكيل التالي ضمن القسم# Agents:critic = Agent( name="critic", model=model_name, description="Reviews the outline so that it can be improved.", instruction=""" INSTRUCTIONS: Consider these questions about the PLOT_OUTLINE: - Does it meet a satisfying three-act cinematic structure? - Do the characters' struggles seem engaging? - Does it feel grounded in a real time period in history? - Does it sufficiently incorporate historical details from the RESEARCH? If the PLOT_OUTLINE does a good job with these questions, exit the writing loop with your 'exit_loop' tool. If significant improvements can be made, use the 'append_to_state' tool to add your feedback to the field 'CRITICAL_FEEDBACK'. Explain your decision and briefly summarize the feedback you have provided. PLOT_OUTLINE: { PLOT_OUTLINE? } RESEARCH: { research? } """, before_model_callback=log_query_to_model, after_model_callback=log_model_response, tools=[append_to_state, exit_loop] ) - أنشئ
writers_roomLoopAgent. سيحتوي هذا المتغير على الوكلاء الثلاثة الذين سيعملون في الحلقة.
ألصِق الرمز التالي أعلى تعريف وكيلfilm_concept_team:writers_room = LoopAgent( name="writers_room", description="Iterates through research and writing to improve a movie plot outline.", sub_agents=[ researcher, screenwriter, critic ], max_iterations=5, ) - عدِّل
film_concept_teamSequentialAgentلاستخدام حلقةwriters_roomالجديدة. استبدِلresearcherوscreenwriterبعاملwriters_roomواحد.استبدِل تعريفfilm_concept_teamالحالي بما يلي:film_concept_team = SequentialAgent( name="film_concept_team", description="Write a film plot outline and save it as a text file.", sub_agents=[ writers_room, file_writer ], ) - ارجع إلى علامة التبويب "واجهة مستخدم المطوّر في حزمة تطوير التطبيقات" (ADK) وانقر على + جلسة جديدة في أعلى يسار الصفحة.
- ابدأ محادثة جديدة مع:
hello - عندما يُطلب منك ذلك، قدِّم للموظف موضوعًا أوسع هذه المرة. في ما يلي بعض الأفكار:
- مصمّم صناعي صنع منتجات للجميع
- رسّام خرائط
- ذلك الرجل الذي جعل المحاصيل تنتج المزيد من الطعام
- عند اكتمال التكرار الحلقي، سيكتب الوكيل الملف. راجِع الملف الذي تم إنشاؤه في الدليل
adk_multiagent_systems/movie_pitches. - افحص الرسم البياني للأحداث في واجهة مستخدم المطوّرين للاطّلاع على بنية الحلقة.
ملخّص القسم
في هذا القسم، تعرّفت على كيفية استخدام LoopAgent:
LoopAgentهو وكيل سير عمل يكرّر تسلسل الوكلاء الفرعيين، ما يؤدي إلى إنشاء "حلقة داخلية" للمهام المتكررة.- تستخدم الوكالات داخل حلقة التكرار حالة الجلسة لتمرير العمل (مثل،
PLOT_OUTLINE) والملاحظات (مثلCRITICAL_FEEDBACK) في كل تمريرة لاحقة. - يمكن إيقاف الحلقة عن طريق بلوغ الحدّ
max_iterationsأو من خلال وكيل يستدعي الأداةexit_loop.
12. استخدام ParallelAgent لتنفيذ عملية "التوزيع والتجميع"
ParallelAgent هو وكيل سير عمل ينفّذ جميع الوكلاء الفرعيين في الوقت نفسه (بشكل متزامن). ويكون ذلك مفيدًا للمهام التي يمكن تقسيمها إلى مهام فرعية مستقلة، مثل تنفيذ مهمتَي بحث مختلفتَين.
ستستخدم ParallelAgent لإنشاء "فريق ما قبل الإنتاج" الذي يعمل بالتوازي. سيبحث أحد المساعدين في إمكانية تحقيق إيرادات كبيرة في شباك التذاكر، بينما يتبادل مساعد آخر الأفكار حول اختيار الممثلين في الوقت نفسه. يُطلق على هذا غالبًا اسم نمط "التوزيع والتجميع": يوزّع ParallelAgent العمل، ثم يجمع وكيل لاحق (file_writer) النتائج.

سيكون مسار وكيلك النهائي على النحو التالي:
- يبدأ
greeter(المستند الجذر) المحادثة. - يتم تحويلها إلى
film_concept_team(SequentialAgent)، والتي يتم تشغيلها:writers_room(LoopAgent) لإنشاء الرسم البيانيpreproduction_team(ParallelAgent) الجديد للبحث عن إيرادات شباك التذاكر وفريق التمثيل في الوقت نفسه- انقر على
file_writerلجمع كل النتائج وحفظ الملف.
لإجراء هذه التغييرات، اتّبِع الخطوات التالية:
- في
adk_multiagent_systems/workflow_agents/agent.py، الصِقParallelAgentالجديد والوكلاء الفرعيين ضمن العنوان# Agents.box_office_researcher = Agent( name="box_office_researcher", model=model_name, description="Considers the box office potential of this film", instruction=""" PLOT_OUTLINE: { PLOT_OUTLINE? } INSTRUCTIONS: Write a report on the box office potential of a movie like that described in PLOT_OUTLINE based on the reported box office performance of other recent films. """, output_key="box_office_report" ) casting_agent = Agent( name="casting_agent", model=model_name, description="Generates casting ideas for this film", instruction=""" PLOT_OUTLINE: { PLOT_OUTLINE? } INSTRUCTIONS: Generate ideas for casting for the characters described in PLOT_OUTLINE by suggesting actors who have received positive feedback from critics and/or fans when they have played similar roles. """, output_key="casting_report" ) preproduction_team = ParallelAgent( name="preproduction_team", sub_agents=[ box_office_researcher, casting_agent ] ) - عدِّل قائمة
film_concept_teamSequentialAgentsub_agentsلتضمينpreproduction_teamالجديد (بينwriters_roomوfile_writer).استبدِل تعريفfilm_concept_teamالحالي بما يلي:film_concept_team = SequentialAgent( name="film_concept_team", description="Write a film plot outline and save it as a text file.", sub_agents=[ writers_room, preproduction_team, file_writer ], ) - عدِّل
file_writerوكيلinstructionلكي "يجمع" التقارير الجديدة من الحالة ويضيفها إلى الملف.
استبدِل السلسلةinstructionالخاصة بـfile_writerبما يلي:instruction=""" INSTRUCTIONS: - Create a marketable, contemporary movie title suggestion for the movie described in the PLOT_OUTLINE. If a title has been suggested in PLOT_OUTLINE, you can use it, or replace it with a better one. - Use your 'write_file' tool to create a new txt file with the following arguments: - for a filename, use the movie title - Write to the 'movie_pitches' directory. - For the 'content' to write, include: - The PLOT_OUTLINE - The BOX_OFFICE_REPORT - The CASTING_REPORT PLOT_OUTLINE: { PLOT_OUTLINE? } BOX_OFFICE_REPORT: { box_office_report? } CASTING_REPORT: { casting_report? } """, - ارجع إلى علامة التبويب "واجهة مستخدم ADK Dev" وانقر على + جلسة جديدة.
- اضغط على
helloلبدء المحادثة. - عندما يُطلب منك ذلك، أدخِل فكرة جديدة لشخصية. في ما يلي بعض الأفكار:
- تلك الممثلة التي اخترعت تكنولوجيا شبكة Wi-Fi
- طاهٍ مثير
- الجهات الفاعلة الرئيسية في معارض المعرض العالمي
- عندما يكمل العامل عمله، افحص الملف النهائي في الدليل
adk_multiagent_systems/movie_pitches. من المفترض أن يحتوي الآن على الحبكة وتقرير شباك التذاكر وتقرير اختيار الممثلين في مستند واحد.
ملخّص القسم
في هذا القسم، تعرّفت على كيفية استخدام ParallelAgent:
- تنفّذ مهمة
ParallelAgent"التوزيع" جميع المهام الفرعية في الوقت نفسه، بدلاً من تنفيذها بالتسلسل. - ويكون هذا الإجراء فعّالاً للغاية في تنفيذ المهام التي لا تعتمد على بعضها البعض (مثل البحث عن موضوعَين مختلفَين).
- يتم "جمع" نتائج البرامج الوكيلة المتوازية بواسطة برنامج وكيل لاحق. يتم ذلك من خلال جعل البرامج المساعدة المتوازية تحفظ عملها في حالة الجلسة (باستخدام
output_key)، وجعل برنامج مساعد نهائي (مثلfile_writer) يقرأ هذه المفاتيح.
13. وكلاء سير العمل المخصّصون
عندما لا تكون وكلاء سير العمل المحدّدين مسبقًا في SequentialAgent وLoopAgent وParallelAgent كافية لتلبية احتياجاتك، يوفّر لك CustomAgent المرونة اللازمة لتنفيذ منطق جديد لسير العمل.
يمكنك تحديد أنماط للتحكّم في التدفق أو التنفيذ الشرطي أو إدارة الحالة بين الوكلاء الفرعيين. ويفيد ذلك في مهام سير العمل المعقّدة أو عمليات التنسيق التي تتضمّن حالات أو دمج منطق نشاط تجاري مخصّص في طبقة التنسيق الخاصة بالإطار.
لا يتناول هذا الدرس التطبيقي كيفية إنشاء CustomAgent، ولكن من الجيد معرفة أنّه متاح إذا احتجت إليه.
14. تهانينا!
لقد أنشأت بنجاح نظامًا معقّدًا متعدد العملاء باستخدام حزمة تطوير العملاء (ADK) من Google. لقد انتقلت من علاقة بسيطة بين وكيل رئيسي ووكيل ثانوي إلى تنسيق عمليات سير عمل معقّدة ومبرمَجة يمكنها البحث والكتابة وتحسين مشروع إبداعي.
ملخّص
في هذا الدرس التطبيقي، نفّذت ما يلي:
- وكلاء منظَّمون في شجرة هرمية مع علاقات بين الوكيل الرئيسي والوكلاء الفرعيين
- عمليات النقل من وكيل إلى آخر الخاضعة للتحكّم، سواء تلقائيًا (باستخدام
description) أو بشكل صريح (باستخدامinstruction) - استخدِم أداة لكتابة البيانات في قاموس
tool_context.state. - استخدام نماذج المفاتيح (مثل
{ PLOT_OUTLINE? }) لقراءة حالة الجلسة وتوجيه طلب أحد العملاء. - تم تنفيذ
SequentialAgentلإنشاء سير عمل بسيط خطوة بخطوة (البحث -> الكتابة -> الحفظ). - استخدام
LoopAgentمع وكيلcriticوأداةexit_loopلإنشاء دورة تحسين تكرارية - استخدام
ParallelAgentلتنفيذ مهام مستقلة بالتوازي (مثل البحث عن الممثلين والإيرادات)
مواصلة التجربة
هناك العديد من الطرق للاستفادة من المعلومات التي تعلّمتها. وفي ما يلي بعض الأفكار:
- إضافة المزيد من الوكلاء: حاوِل إضافة وكيل جديد إلى
preproduction_teamParallelAgent. على سبيل المثال، يمكنك إنشاءmarketing_agentيكتب جملة ترويجية للفيلم استنادًا إلىPLOT_OUTLINE. - إضافة المزيد من الأدوات: يمكنك منح وكيل
researcherالمزيد من الأدوات. يمكنك إنشاء أداة تستخدم إحدى واجهات برمجة التطبيقات في "بحث Google" للعثور على معلومات غير متوفرة على Wikipedia. - الاستكشاف
CustomAgent: ذكر المختبرCustomAgentلعمليات سير العمل التي لا تتناسب مع النماذج العادية. جرِّب إنشاء برنامج، على سبيل المثال، يشغّل وكيلاً بشكل مشروط فقط إذا كان مفتاح معيّن متوفّرًا في حالة الجلسة.