أهلاً بك مجدداً في رحلتنا لبناء وكلاء الذكاء الاصطناعي!
في الدرس السابق، استكشفنا المفهوم النظري لـ "استدعاء الدوال" (Function Calling)، وفهمنا كيف أنه يمثل الجسر الذي يسمح لوكيلنا بالتفاعل مع العالم الحقيقي. لقد تعلمنا أن النموذج اللغوي (العقل) يمكنه "اقتراح" استخدام أداة معينة، لكنه لا ينفذها بنفسه.
اليوم، سننتقل من النظرية إلى التطبيق. هدفنا هو تحقيق المخرج التعليمي التالي: إنشاء دالة Python بسيطة يمكن للوكيل استخدامها كـ 'أداة'. سنكتب أول قطعة كود فعلية ستمنح وكيلنا قدرة جديدة. هذه الخطوة أساسية لتحويل وكيلنا من مجرد "مفكر" إلى "فاعل".
1. ما هي الدالة (Function) في بايثون؟
قبل أن نبني "أداة" للوكيل، نحتاج إلى فهم ما هي "الدالة" في البرمجة. ببساطة، الدالة هي عبارة عن كتلة من الكود المنظم والقابل لإعادة الاستخدام، مصممة لأداء مهمة محددة.
فكر فيها كأنها وصفة طبخ صغيرة:
- لها اسم (مثلاً: "وصفة الكيك").
- تتبع خطوات محددة (اخلط المكونات، ضعها في الفرن).
- في النهاية، تعطيك نتيجة (كيك جاهز).
في البرمجة، استخدام الدوال يساعدنا على:
- تنظيم الكود: بدلاً من كتابة كل شيء في ملف واحد كبير، نقسم المهام إلى دوال صغيرة وواضحة.
- إعادة الاستخدام: إذا احتجنا لتنفيذ نفس المهمة عدة مرات، نستدعي الدالة بدلاً من إعادة كتابة الكود.
للحصول على مقدمة ممتازة ومبسطة عن الدوال في بايثون، شاهد المقطع التالي.
تعلم بايثون من الصفر للمبتدئين. إنشاء وظائف او دوال في بايثون
يقدم هذا الفيديو من قناة OctuCode شرحاً واضحاً للمبتدئين حول مفهوم الدوال، لماذا نحتاجها، وكيف تساعدنا في تجنب تكرار الكود.
شاهد من بداية الفيديو حتى 01:28، ثم انتقل إلى المقطع من 06:19 إلى 09:13. ركز على فكرة "لماذا نستخدم الدوال" والمثال العملي الذي يوضح كيف توفر كتابة الكود.
2. كيفية بناء دالة بسيطة في بايثون
الآن بعد أن فهمنا أهمية الدوال، دعنا نتعلم كيفية تعريف واحدة. يتكون هيكل الدالة في بايثون من عدة أجزاء أساسية.

لتعريف دالة، نستخدم الصيغة التالية:
def function_name(parameter1, parameter2):
# الكود الذي تنفذه الدالة
# ...
return result
لنتعرف على مكوناتها:
def: كلمة مفتاحية (Keyword) تخبر بايثون أننا بصدد تعريف دالة جديدة.function_name: الاسم الذي نختاره للدالة. يجب أن يكون وصفياً (مثلcalculate_sumبدلاً منfunc1).(): الأقواس التي قد تحتوي على "المعاملات" (Parameters). المعاملات هي المدخلات التي تحتاجها الدالة لتعمل.:: النقطتان الرأسيتان اللتان تشيران إلى بداية "جسم" الدالة.- الجسم المُزاح (Indented Body): كل الأسطر التي تلي النقطتين وتأتي مع مسافة بادئة (Indentation) هي جزء من الدالة. هذا هو الكود الفعلي الذي يتم تنفيذه عند استدعاء الدالة.
return: كلمة مفتاحية اختيارية تعيد نتيجة من الدالة. هذه هي "مخرجات" الأداة التي سيستخدمها وكيل الذكاء الاصطناعي.
لتعميق فهمك لهذه البنية، نقترح عليك قراءة المادة التالية ومشاهدة مقطع الفيديو الذي يشرحها بالتفصيل.
يقدم هذا المقال من "ملاحظات خلود التقنية" شرحًا نصيًا واضحًا ومفصلاً لأساسيات إنشاء الدوال في بايثون.
اقرأ قسم "انشاء الدوال Functions في Python" وقسم "تسمية الدوال Functions في Python". ركز على فهم دور كل جزء من أجزاء تعريف الدالة (def, الاسم, الأقواس, ...إلخ) وقواعد التسمية الجيدة.
تعلم بايثون من الصفر للمبتدئين. إنشاء وظائف او دوال في بايثون
يعود هذا المقطع من قناة OctuCode ليشرح بالتفصيل كيفية كتابة الصيغة الصحيحة للدالة، ويوضح الفرق المهم بين تعريف الدالة واستدعائها.
شاهد من 01:28 إلى 06:19. انتبه جيداً لكيفية استخدام كلمة def، ومتى يتم تنفيذ الكود الذي بداخل الدالة.
3. بناء "أداة" عملية للوكيل
الآن لنطبق ما تعلمناه لبناء أول أداة حقيقية لوكيلنا. ستكون أداة بسيطة لكنها مفيدة: دالة تقوم بحساب عدد الكلمات في نص معين.
لماذا قد يحتاج الوكيل لمثل هذه الأداة؟ قد يستخدمها لتقدير طول رد المستخدم، أو لتلخيص نص طويل، أو للتأكد من أن طلباً ما يقع ضمن طول معين.
هنا هي الدالة:
def count_words(text):
"""
هذه الدالة تستقبل نصاً (string) وتعيد عدد الكلمات فيه.
"""
words = text.split() # .split() هي دالة جاهزة في بايثون تقسم النص إلى قائمة من الكلمات
number_of_words = len(words) # len() هي دالة جاهزة تحسب عدد العناصر في قائمة
return number_of_words
# --- طريقة الاستخدام ---
user_sentence = "ما هي حالة الطقس في الرياض اليوم؟"
word_count = count_words(user_sentence)
print(f"الجملة تحتوي على {word_count} كلمات.")
# سيطبع: الجملة تحتوي على 7 كلمات.
شرح الكود:
def count_words(text):: نُعرّف دالة اسمهاcount_wordsتستقبل معاملًا واحدًا اسمهtext.words = text.split(): نستخدم دالةsplit()المدمجة في بايثون لتقسيم النص عند المسافات، والنتيجة هي قائمة (List) من الكلمات.number_of_words = len(words): نستخدم دالةlen()المدمجة لحساب عدد العناصر في القائمةwords.return number_of_words: نُرجع العدد النهائي. هذه هي القيمة التي سيحصل عليها الوكيل بعد استخدام الأداة.
اختبر فهمك!
بناءً على ما تعلمته، حاول كتابة دالة بسيطة اسمها get_character_count تستقبل نصاً (text) وتعيد عدد الحروف فيه (بما في ذلك المسافات).
تلميح: دالة len() تعمل أيضاً على النصوص (strings) مباشرة.
اظهر الإجابة
def get_character_count(text):
"""
هذه الدالة تستقبل نصاً (string) وتعيد عدد الحروف فيه.
"""
return len(text)
# --- طريقة الاستخدام ---
my_text = "أهلاً بالعالم"
char_count = get_character_count(my_text)
print(f"النص يحتوي على {char_count} حرفاً.")
# سيطبع: النص يحتوي على 12 حرفاً.
في سياق وكيل الذكاء الاصطناعي، هذه الدالة تمثل "أداة" أو "إجراء" (Action) يمكن للوكيل استدعاؤه. شاهد كيف يصف هذا الفيديو القصير دالة بسيطة على أنها "إجراء" يمكن للذكاء الاصطناعي استخدامه.
Create AI Agents From Scratch With Python! (Free Course)
يوضح هذا المقطع القصير كيف أن دالة بايثون البسيطة تعتبر بمثابة "أداة" أو "إجراء" يمكن للوكيل استخدامه. على الرغم من أن الشرح باللغة الإنجليزية، إلا أن تركيزك يجب أن يكون على فكرة ربط الدالة البرمجية بمفهوم "أداة الوكيل".
شاهد من 06:11 إلى 07:01. لاحظ كيف يُعرّف المحاضر دالة بسيطة ويشير إليها على أنها "أداة يمكن للذكاء الاصطناعي استخدامها".
خلاصة الدرس
لقد قمنا بخطوة عملية كبيرة اليوم! تعلمنا أساسيات بناء "الأدوات" التي ستمنح وكيلنا قدرات حقيقية.
أهم النقاط:
- الدالة (Function) هي كتلة كود منظمة وقابلة لإعادة الاستخدام تؤدي مهمة محددة.
- لتعريف دالة نستخدم
def function_name(parameters):. - المعاملات (Parameters) هي المدخلات التي تحتاجها الدالة لتعمل.
- نستخدم
returnلإرجاع نتيجة من الدالة، وهي المخرج الذي سيستخدمه الوكيل. - لقد قمنا ببناء أول "أداة" لنا: دالة
count_words، وهي دالة بايثون بسيطة يمكن للوكيل استدعاؤها نظرياً.
ماذا بعد؟
رائع! لقد أنشأنا دالة. ولكن، كيف سيعرف "عقل" الوكيل (النموذج اللغوي) أن هذه الأداة موجودة أصلاً، وماذا تفعل، وكيف يستخدمها؟ النموذج لا يستطيع قراءة كود بايثون مباشرة.
في الدرس القادم، سنتعلم الخطوة الحاسمة التالية: تجهيز وصف الأداة لنموذج اللغة ليتمكن من فهم وظيفتها. سنحول دالتنا البرمجية إلى شيء يمكن للنموذج اللغوي "قراءته" و"فهمه" لاتخاذ قرار باستدعائها.