أهلاً بك في بداية رحلة جديدة ومثيرة! لقد أمضينا الأسابيع الماضية في بناء أساس متين، بدءًا من أساسيات البرمجة بلغة بايثون، مرورًا بالتعامل مع واجهات برمجة التطبيقات (APIs)، وصولًا إلى فهم أعمق لعالم الذكاء الاصطناعي ومكونات الوكلاء. في وحدتنا الأخيرة، تعمقنا في مفهوم الذاكرة، وتعلمنا كيف نجعل وكيلنا "يتذكر" المعلومات سواء على المدى الطويل (باستخدام RAG) أو القصير (عبر تلخيص المحادثات).
الآن، حان الوقت لجمع كل هذه القطع معًا وتطبيقها في مشروع حقيقي. في هذه الوحدة، سنبني معًا "وكيلًا لإدارة الحملات البريدية" من الصفر.
في هذا الدرس الأول من المشروع، سنركز على أهم خطوة قبل كتابة أي سطر برمجي: التصميم. هدفنا اليوم هو تصميم بنية وكيل إدارة الحملات البريدية وتحديد مكوناته الأساسية. تمامًا مثلما يضع المهندس المعماري مخططًا تفصيليًا للمبنى قبل البدء في البناء، سنقوم نحن بوضع مخطط واضح لوكيلنا، لنضمن أن كل جزء يعمل بتناغم مع الأجزاء الأخرى لتحقيق الهدف المنشود.
1. ما هو "وكيل إدارة الحملات البريدية"؟ وماذا سيفعل؟
قبل أن نصمم أي شيء، دعنا نحدد المشكلة التي نريد حلها. وكيل إدارة الحملات البريدية هو برنامج ذكي مهمته أتمتة إرسال رسائل بريد إلكتروني مخصصة لمجموعة من الأشخاص.
تخيل أن لديك قائمة بـ 100 عميل محتمل وتريد إرسال بريد إلكتروني لكل منهم للتعريف بمنتج جديد. يمكنك إرسال نفس الرسالة للجميع، ولكن هذا غير فعال. الرسائل المخصصة تحقق نتائج أفضل بكثير.
هنا يأتي دور وكيلنا. بدلاً من مجرد إرسال نسخة مكررة، سيقوم وكيلنا بالمهام التالية:
- قراءة قائمة المستلمين من ملف (مثل ملف CSV أو JSON).
- فهم بيانات كل مستلم (مثل الاسم، اسم الشركة، الاهتمامات السابقة).
- استخدام نموذج لغوي كبير (LLM) لتخصيص نص البريد الإلكتروني لكل مستلم على حدة، مما يجعل الرسالة تبدو وكأنها كُتبت خصيصًا له.
- إرسال البريد الإلكتروني المخصص لكل مستلم في القائمة.
الهدف النهائي هو إعطاء الوكيل هدفًا عامًا (مثل: "أرسل حملة إطلاق المنتج الجديد إلى قائمة العملاء المحتملين")، ويقوم هو بتنفيذ جميع الخطوات اللازمة لتحقيق هذا الهدف بشكل مستقل.
2. تحديد المكونات الأساسية للوكيل
كما تعلمنا في الوحدات السابقة، يتكون أي وكيل ذكاء اصطناعي من عدة مكونات رئيسية تعمل معًا. الآن، دعنا نحدد هذه المكونات في سياق وكيلنا لإدارة البريد الإلكتروني.
للحصول على شرح تفصيلي ومُنظم لهذه المكونات، أدعوك لقراءة القسم التالي من مقال AWS الذي استعنّا به سابقًا. سيرسّخ هذا النص فهمك لكيفية ارتباط هذه الأجزاء ببعضها البعض.
ما المقصود بوكلاء الذكاء الاصطناعي؟ - شرح الوكلاء في ...
يقدم هذا القسم من مقال AWS شرحًا واضحًا للمكونات الرئيسية التي تشكل أي وكيل ذكاء اصطناعي. ركز على فهم دور كل مكون: النموذج التأسيسي (العقل)، وحدة التخطيط، وحدة الذاكرة، وتكامل الأدوات.
اقرأ القسم الذي يحمل عنوان 'ما هي المكونات الرئيسية لبنية وكيل الذكاء الاصطناعي؟'. أثناء القراءة، فكر في كيفية تطبيق كل مكون من هذه المكونات على وكيل حملات البريد الإلكتروني الذي نخطط لبنائه.
بناءً على ما قرأته وما تعلمناه سابقًا، دعنا نفصّل مكونات وكيلنا:
أ. العقل المدبر (The Brain - LLM)
هذا هو محرك التفكير في وكيلنا.
- دوره: سيكون مسؤولاً عن الجزء الأكثر ذكاءً في العملية: التخصيص.
- كيف؟ سنعطيه قالب بريد إلكتروني عام، بالإضافة إلى بيانات مستلم معين (اسمه، شركته، إلخ). سيقوم النموذج اللغوي بإعادة صياغة القالب ليصبح رسالة فريدة وموجهة لهذا الشخص تحديدًا. على سبيل المثال، قد يغير نبرة الرسالة أو يذكر تفصيلاً يتعلق بصناعة العميل.
ب. الذاكرة (Memory)
يحتاج وكيلنا إلى الوصول إلى المعلومات لتنفيذ مهمته.
- الذاكرة طويلة المدى / قاعدة المعرفة: في مشروعنا، ستكون هذه الذاكرة عبارة عن ملف يحتوي على قائمة المستلمين (مثل ملف
contacts.json). هذا هو مصدر البيانات الذي سيعمل عليه الوكيل. لن يحتاج إلى ذاكرة محادثة معقدة (مثل التي بنيناها في الدرس السابق) لأن كل بريد إلكتروني هو مهمة منفصلة. - الذاكرة قصيرة المدى: أثناء تنفيذ المهمة، سيحتاج إلى "تذكر" المستلم الذي يعمل عليه حاليًا والخطوة التي وصل إليها في خطته.
ج. الأدوات (Tools)
هذه هي "أيدي" الوكيل التي تسمح له بالتفاعل مع العالم الرقمي وإنجاز المهام. سيحتاج وكيلنا إلى أداتين رئيسيتين على الأقل:
read_contacts_file(file_path): أداة (ستكون دالة في بايثون) لقراءة ملف المستلمين وتحميل بياناتهم إلى الذاكرة. هذا يربطنا بما تعلمناه في الوحدة الثانية حول التعامل مع الملفات.send_email(to_address, subject, body): أداة للتفاعل مع خدمة بريد إلكتروني (عبر API) لإرسال الرسالة المخصصة. هذا يربطنا بما تعلمناه في الوحدة الثانية حول استخدام واجهات برمجة التطبيقات (APIs).
د. المنطق وخطة العمل (Reasoning & Plan)
هذا هو "اللاصق" الذي يربط جميع المكونات معًا. إنه يمثل دورة حياة الوكيل (Perceive-Think-Act) التي ناقشناها سابقًا. ستكون خطة وكيلنا واضحة ومباشرة:
- الإدراك (Perceive): يستقبل الوكيل الهدف من المستخدم (مثلاً: "أرسل حملة إطلاق المنتج الجديد باستخدام ملف
contacts.json"). - التفكير والتخطيط (Think/Plan): يضع الوكيل خطة عمل متسلسلة:
- "الهدف هو إرسال حملة بريدية."
- "أولاً، يجب أن أقرأ قائمة المستلمين. سأستخدم أداة
read_contacts_file." - "ثانيًا، سأمر على كل مستلم في القائمة، واحدًا تلو الآخر."
- "لكل مستلم، سأقوم بـ:
- أ. صياغة طلب (prompt) لـ "عقلي" (LLM) يحتوي على القالب وبيانات هذا المستلم.
- ب. الحصول على النص المخصص من الـ LLM.
- ج. استخدام أداة
send_emailلإرسال هذا النص إلى عنوان بريد المستلم."
- "أخيرًا، بعد الانتهاء من جميع المستلمين، سأبلغ المستخدم بأن المهمة قد اكتملت."
- التنفيذ (Act): يبدأ الوكيل في تنفيذ الخطة خطوة بخطوة، مستدعيًا الأدوات والعقل المدبر حسب الحاجة.
3. تصور بنية الوكيل
لجعل هذه البنية أكثر وضوحًا، دعنا نتخيلها في شكل مخطط سير عمل. الصورة التالية توضح وكيل ذكاء اصطناعي مشابه يعمل على تحليل رسائل Gmail وتوجيهها. وكيلنا سيتبع منطقًا مشابهًا، ولكنه سيركز على مسار واحد: التخصيص والإرسال.

بنية وكيلنا يمكن تلخيصها في المخطط البسيط التالي:
المدخلات: هدف من المستخدم (مثل اسم الحملة وملف جهات الاتصال)
↓
وكيل البريد الإلكتروني (حلقة العمل):
- استدعاء الأداة:
read_contacts_file()⬅️ (يقرأcontacts.json) - حلقة تكرارية (Loop) لكل جهة اتصال:
- التفكير: يدمج بيانات جهة الاتصال مع قالب البريد لإنشاء طلب (prompt).
- استدعاء العقل (LLM): يرسل الطلب للحصول على نص البريد المخصص.
- استدعاء الأداة:
send_email()⬅️ (يرسل البريد المخصص لجهة الاتصال الحالية).
↓
الناتج: تقرير اكتمال المهمة.
اختبر فهمك!
لنفترض أننا نريد إضافة ميزة جديدة لوكيلنا: بعد إرسال كل بريد إلكتروني، يجب على الوكيل أن يسجل في ملف log.txt اسم المستلم ووقت الإرسال.
في رأيك، هل هذه الميزة تتطلب:
- تغييرًا في العقل المدبر (LLM)؟
- إضافة أداة (Tool) جديدة؟
- تعديلاً على خطة العمل (Plan)؟
- إضافة أداة جديدة و تعديل الخطة؟
Show answer
الخيار الأفضل هو (4) إضافة أداة جديدة وتعديل الخطة.
- الأداة الجديدة: سنحتاج إلى أداة مثل
write_to_log(text)يمكنها الكتابة في ملف نصي. هذا يعود إلى ما تعلمناه عن التعامل مع الملفات. - تعديل الخطة: يجب تحديث خطة عمل الوكيل لتشمل خطوة إضافية داخل الحلقة التكرارية. بعد استدعاء أداة
send_email()بنجاح، يجب على الوكيل استدعاء الأداة الجديدةwrite_to_log()لتسجيل المعلومات.
خلاصة الدرس
لقد قمنا اليوم بإنجاز أهم خطوة في مشروعنا: وضع الأساس التصميمي.
- حددنا الهدف: بناء وكيل قادر على إرسال حملات بريد إلكتروني مخصصة.
- فصّلنا المكونات: حددنا دور كل من العقل المدبر (LLM) في التخصيص، والذاكرة (ملف جهات الاتصال)، والأدوات (قراءة الملفات وإرسال البريد).
- رسمنا الخطة: وضعنا تسلسلًا منطقيًا للخطوات التي سيتبعها الوكيل (اقرأ، فكر، خصص، أرسل، كرّر).
هذا المخطط هو بمثابة خريطة الطريق التي سنتبعها في الدروس القادمة. لقد قمنا بتحويل فكرة مجردة ("وكيل بريد إلكتروني") إلى تصميم ملموس بمكونات ومهام واضحة.
ماذا بعد؟
الآن بعد أن أصبح لدينا التصميم، نحن جاهزون للبدء في البناء الفعلي. في الدرس القادم، سننتقل من التخطيط إلى البرمجة. سنقوم بـ "تنظيم بنية الوكيل باستخدام الفئات (Classes) في بايثون" وسنكتب الهيكل الأساسي لحلقة عمل الوكيل (Perceive-Think-Act loop) التي ستكون بمثابة مركز التحكم الذي ينسق عمل جميع المكونات التي صممناها اليوم. استعد لكتابة الكود