هندسة الأوامر (Prompt Engineering) داخل الكود: قوالب النصوص المتغيرة (F-Strings)


هندسة الأوامر (Prompt Engineering) داخل الكود: قوالب النصوص المتغيرة (F-Strings)

ماذا سنتعلم اليوم؟

سنتعمق في كيفية بناء أوامر ديناميكية وفعالة للنماذج اللغوية الكبيرة (LLMs) باستخدام قوالب النصوص المتغيرة (F-Strings) في بايثون، مع التركيز على تنظيم الأوامر داخل الكود.

الخطوة 1: الأساسيات - تعريف متغيرات الأمر (Prompt Variables)

في هذه الخطوة، سنقوم بتعريف المتغيرات الأساسية التي ستشكل جزءاً من أمرنا للنموذج اللغوي. هذه المتغيرات هي المدخلات الديناميكية التي تتغير بناءً على سياق الاستخدام.

# تعريف متغيرات ديناميكية ستستخدم في الأمر
product_name = "هاتف ذكي X"
features = ["شاشة OLED", "كاميرا 108MP", "بطارية تدوم طويلاً"]
use_case = "التصوير الفوتوغرافي الاحترافي"

# يمكن أن تكون هذه المتغيرات ناتجة عن مدخلات المستخدم أو استرجاع من قاعدة بيانات
user_preference = "تصميم أنيق"

شرح الكود: هنا نقوم بإنشاء متغيرات بسيطة تمثل البيانات التي سنمررها للأمر، مثل اسم المنتج وميزاته وحالة الاستخدام المفضلة.

الخطوة 2: بناء الأمر باستخدام F-Strings

باستخدام قوالب النصوص المتغيرة (F-Strings)، سنقوم بدمج هذه المتغيرات بسلاسة لإنشاء أمر متكامل وواضح للنموذج اللغوي.

ملاحظة تقنية: F-Strings في بايثون (من الإصدار 3.6 فصاعداً) توفر طريقة موجزة وواضحة لتضمين تعبيرات بايثون داخل السلاسل النصية، مما يجعلها مثالية لهندسة الأوامر الديناميكية.
# بناء الأمر باستخدام F-String
prompt_template = f"""
أنت مساعد تسويقي خبير. قم بصياغة وصف جذاب ومقنع لمنتج.

اسم المنتج: {product_name}
الميزات الرئيسية: {', '.join(features)}
الاستخدام المقترح: {use_case}
ميزة إضافية يهتم بها المستخدم: {user_preference}

الهدف: إبراز الفوائد الرئيسية للمستخدم مع التركيز على الميزة الإضافية.
اجعل الوصف قصيراً ومباشراً، لا يتجاوز 100 كلمة.
"""

# طباعة الأمر الناتج للتحقق
print("--- الأمر الجاهز للنموذج اللغوي ---")
print(prompt_template)

شرح الكود: نستخدم F-String لتضمين قيم المتغيرات مباشرة داخل نص الأمر، مما يجعله ديناميكياً. لاحظ كيف قمنا بدمج قائمة features باستخدام ', '.join().

الخطوة 3: دمج الأمر مع نموذج لغوي (مفهومي باستخدام LangChain)

لإظهار كيفية استخدام الأمر، سنقوم بمحاكاة إرساله إلى نموذج لغوي كبير باستخدام مفاهيم LangChain. في التطبيقات الحقيقية، ستقوم هنا باستدعاء واجهة برمجة تطبيقات (API) لنموذج مثل OpenAI GPT أو أي نموذج آخر.

# (افتراضي) استيراد المكونات الضرورية من LangChain
# from langchain_core.prompts import ChatPromptTemplate
# from langchain_community.llms import OpenAI

# محاكاة لإنشاء قالب أمر مع LangChain (مفهومي)
# في الواقع، يمكنك تمرير الـ F-String مباشرة إلى LLM أو بناء قالب أكثر تعقيداً

# تمثيل الأمر كقالب في LangChain (مفهومي)
# prompt = ChatPromptTemplate.from_template(prompt_template)

# محاكاة لنموذج لغوي كبير (LLM)
class MockLLM:
    def invoke(self, prompt_text):
        print(f"\n--- محاكاة استدعاء النموذج اللغوي ---")
        print(f"الأمر المرسل: {prompt_text[:100]}...") # عرض جزء من الأمر
        # محاكاة استجابة النموذج
        return f"استجابة محاكاة من النموذج لـ '{product_name}':\n" \
               f"اكتشف {product_name}، رفيقك الأمثل للتصوير الاحترافي. " \
               f"بكاميرا 108MP وشاشة OLED مذهلة، ستلتقط لحظاتك بدقة وجمال لا مثيل لهما. " \
               f"تصميمه الأنيق يجعله قطعة فنية في يدك. " \
               f"بطاريته تدوم طويلاً لتواكب إبداعك طوال اليوم."

# إنشاء مثيل للنموذج المحاكي
llm = MockLLM()

# إرسال الأمر إلى النموذج والحصول على الاستجابة
response = llm.invoke(prompt_template)

print("\n--- استجابة النموذج اللغوي ---")
print(response)

شرح الكود: هنا نرى كيف يمكن استخدام الأمر الجاهز مع كائن MockLLM (الذي يحاكي نموذجاً لغوياً) لإرساله والحصول على استجابة. هذا يوضح المفهوم الأساسي للدمج.

ملاحظة تقنية: LangChain هو إطار عمل قوي لتطوير تطبيقات مدعومة بالنماذج اللغوية، ويسهل إدارة الأوامر (Prompts) والتعامل مع النماذج المختلفة بشكل منظم.

الكود النهائي الكامل

هذا هو السكربت الكامل الذي يجمع الخطوات السابقة:

# هندسة الأوامر (Prompt Engineering) داخل الكود: قوالب النصوص المتغيرة (F-Strings)

# الخطوة 1: تعريف متغيرات الأمر (Prompt Variables)
# تعريف متغيرات ديناميكية ستستخدم في الأمر
product_name = "هاتف ذكي X"
features = ["شاشة OLED", "كاميرا 108MP", "بطارية تدوم طويلاً"]
use_case = "التصوير الفوتوغرافي الاحترافي"
user_preference = "تصميم أنيق" # يمكن أن تكون ناتجة عن مدخلات المستخدم

# الخطوة 2: بناء الأمر باستخدام F-Strings
# بناء الأمر باستخدام F-String لإنشاء أمر ديناميكي للنموذج اللغوي
prompt_template = f"""
أنت مساعد تسويقي خبير. قم بصياغة وصف جذاب ومقنع لمنتج.

اسم المنتج: {product_name}
الميزات الرئيسية: {', '.join(features)}
الاستخدام المقترح: {use_case}
ميزة إضافية يهتم بها المستخدم: {user_preference}

الهدف: إبراز الفوائد الرئيسية للمستخدم مع التركيز على الميزة الإضافية.
اجعل الوصف قصيراً ومباشراً، لا يتجاوز 100 كلمة.
"""

# طباعة الأمر الناتج للتحقق
print("--- الأمر الجاهز للنموذج اللغوي ---")
print(prompt_template)

# الخطوة 3: دمج الأمر مع نموذج لغوي (مفهومي باستخدام LangChain)
# محاكاة لنموذج لغوي كبير (LLM) لإظهار كيفية استخدام الأمر
class MockLLM:
    def invoke(self, prompt_text):
        print(f"\n--- محاكاة استدعاء النموذج اللغوي ---")
        print(f"الأمر المرسل (جزء منه): {prompt_text[:100]}...") # عرض جزء من الأمر
        # محاكاة استجابة النموذج بناءً على الأمر
        return f"استجابة محاكاة من النموذج لـ '{product_name}':\n" \
               f"اكتشف {product_name}، رفيقك الأمثل للتصوير الاحترافي. " \
               f"بكاميرا 108MP وشاشة OLED مذهلة، ستلتقط لحظاتك بدقة وجمال لا مثيل لهما. " \
               f"تصميمه الأنيق يجعله قطعة فنية في يدك. " \
               f"بطاريته تدوم طويلاً لتواكب إبداعك طوال اليوم."

# إنشاء مثيل للنموذج المحاكي
llm = MockLLM()

# إرسال الأمر إلى النموذج والحصول على الاستجابة
response = llm.invoke(prompt_template)

print("\n--- استجابة النموذج اللغوي ---")
print(response)

النتيجة المتوقعة

عند تشغيل السكربت، ستحصل على أمر منسق وجاهز للاستخدام مع نموذج لغوي، بالإضافة إلى استجابة محاكاة من النموذج (أو استجابة حقيقية إذا تم ربطه بنموذج فعلي). على سبيل المثال، قد ترى شيئاً مشابهاً لما يلي:

--- الأمر الجاهز للنموذج اللغوي ---
أنت مساعد تسويقي خبير. قم بصياغة وصف جذاب ومقنع لمنتج.

اسم المنتج: هاتف ذكي X
الميزات الرئيسية: شاشة OLED, كاميرا 108MP, بطارية تدوم طويلاً
الاستخدام المقترح: التصوير الفوتوغرافي الاحترافي
ميزة إضافية يهتم بها المستخدم: تصميم أنيق

الهدف: إبراز الفوائد الرئيسية للمستخدم مع التركيز على الميزة الإضافية.
اجعل الوصف قصيراً ومباشراً، لا يتجاوز 100 كلمة.

--- محاكاة استدعاء النموذج اللغوي ---
الأمر المرسل (جزء منه): أنت مساعد تسويقي خبير. قم بصياغة وصف جذاب ومقنع لمنتج.

اسم المنتج: هاتف ذكي X
الم...

--- استجابة النموذج اللغوي ---
استجابة محاكاة من النموذج لـ 'هاتف ذكي X':
اكتشف هاتف ذكي X، رفيقك الأمثل للتصوير الاحترافي. بكاميرا 108MP وشاشة OLED مذهلة، ستلتقط لحظاتك بدقة وجمال لا مثيل لهما. تصميمه الأنيق يجعله قطعة فنية في يدك. بطاريته تدوم طويلاً لتواكب إبداعك طوال اليوم.

أو، في حال الربط بنموذج حقيقي، ستكون الاستجابة هي النص الذي يولده النموذج بناءً على الأمر المقدم.