ماذا سنتعلم اليوم؟ سندخل عالم هندسة الذكاء الاصطناعي التوليدي، ونفهم برمجياً كيف تعمل نماذج اللغة الكبيرة (LLMs) من خلال بناء مثال عملي بسيط باستخدام مكتبة LangChain وواجهة OpenAI API.
الخطوة 1: تهيئة البيئة وتجهيز النموذج
في هذه الخطوة الأولى، نقوم بتهيئة بيئة العمل الخاصة بنا. نبدأ باستيراد المكتبات الضرورية: os للتعامل مع متغيرات البيئة و ChatOpenAI من مكتبة LangChain لاستدعاء نماذج OpenAI. الأهم هو تعيين مفتاح API الخاص بـ OpenAI. يجب استبدال "YOUR_OPENAI_API_KEY" بمفتاحك الحقيقي. ثم نقوم بإنشاء كائن ChatOpenAI، محددين النموذج (gpt-3.5-turbo) ودرجة الحرارة (temperature) التي تتحكم في مدى عشوائية الاستجابات. قيمة 0.7 تعطي توازنًا جيدًا بين الإبداع والدقة.
import os
from langchain_openai import ChatOpenAI
# تعيين مفتاح API الخاص بـ OpenAI كمتغير بيئة.
# يُفضل دائمًا عدم تضمين المفاتيح مباشرة في الكود لأسباب أمنية.
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
# تهيئة نموذج اللغة الكبير (LLM) الذي سنستخدمه.
# نستخدم هنا نموذج gpt-3.5-turbo من OpenAI.
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
print("تم تهيئة نموذج LLM بنجاح.")
ملاحظة تقنية: متغير temperature في نماذج LLMs يحدد مستوى "الإبداع" أو "العشوائية" في الاستجابات. قيمة 0 تجعل النموذج حتمياً (يُعطي نفس الإجابة للمدخل نفسه)، بينما القيم الأعلى تزيد من التنوع والابتكار في المخرجات.
الخطوة 2: بناء سلسلة الأوامر (Prompt Chain)
هنا نقوم بتصميم قالب الأمر (Prompt Template) الذي سيتم استخدامه لتوجيه النموذج. قالب الأمر هو في الأساس سلسلة نصية تحتوي على "متغيرات" (مثل {topic} و {concept}) سيتم ملؤها لاحقًا بمدخلات المستخدم. هذا يسمح لنا بإنشاء أوامر ديناميكية دون الحاجة إلى إعادة كتابة الأمر بالكامل في كل مرة. PromptTemplate من LangChain يساعد في إدارة هذه العملية بفعالية.
from langchain.prompts import PromptTemplate
# تعريف قالب الأمر (Prompt Template) الذي سيستخدمه النموذج.
# 'topic' و 'concept' هما المتغيرات التي سيتم تمريرها إلى القالب.
template = """أنت مساعد خبير في مجال {topic}.
اشرح مفهوم {concept} بالتفصيل مع أمثلة.
تأكد من أن الشرح واضح ومناسب للمبتدئين."""
# إنشاء كائن PromptTemplate من القالب المعرف.
prompt = PromptTemplate(
input_variables=["topic", "concept"],
template=template
)
print("تم بناء قالب الأمر بنجاح.")
# يمكننا رؤية كيف سيبدو الأمر بعد تعبئة المتغيرات
# print(prompt.format(topic="هندسة البرمجيات", concept="التصميم المعماري"))
ملاحظة تقنية: PromptTemplate هي أداة أساسية في LangChain لإنشاء أوامر ديناميكية. بدلاً من إرسال نص ثابت إلى LLM، تسمح لك بتحديد بنية الأمر وتحديد الأماكن التي يمكن للمستخدم إدخال البيانات فيها. هذا يعزز قابلية إعادة الاستخدام ويقلل من الأخطاء.
الخطوة 3: استدعاء النموذج ومعالجة الاستجابة
في هذه الخطوة الحاسمة، نربط النموذج الذي هيأناه في الخطوة الأولى مع قالب الأمر الذي أنشأناه في الخطوة الثانية باستخدام LLMChain. هذا الكائن chain هو الآن كيان متكامل يمكنه أخذ المدخلات، تنسيقها في الأمر الصحيح، إرسالها إلى LLM، ثم معالجة الاستجابة. نحدد المدخلات الفعلية (topic و concept) ثم نستدعي chain.invoke() لتشغيل العملية والحصول على الإجابة من النموذج.
from langchain.chains import LLMChain
# إنشاء سلسلة (Chain) تجمع بين النموذج (LLM) وقالب الأمر (Prompt).
# هذه السلسلة مسؤولة عن أخذ المدخلات، وتنسيق الأمر، وإرساله إلى النموذج، واستقبال الاستجابة.
chain = LLMChain(llm=llm, prompt=prompt)
# تحديد المدخلات التي سيتم تمريرها إلى السلسلة.
input_data = {"topic": "الذكاء الاصطناعي", "concept": "التعلم العميق"}
# تشغيل السلسلة والحصول على الاستجابة.
# هنا يتم استدعاء النموذج فعليًا مع الأمر المنسق.
response = chain.invoke(input_data)
# طباعة الاستجابة.
print("\n--- الاستجابة من النموذج ---")
print(response['text'])
ملاحظة تقنية:LLMChainهي أبسط أنواع السلاسل في LangChain. إنها تأخذ نموذج LLM وقالب أمر، وتستخدمهما معًا لإنشاء استجابة. توجد سلاسل أكثر تعقيدًا (مثلSequentialChainأوRetrievalQAChain) تسمح بتسلسلات عمليات متعددة، ودمج مصادر بيانات خارجية، وغيرها من المهام المتقدمة.
الكود النهائي الكامل
import os
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# الخطوة 1: تهيئة البيئة وتجهيز النموذج
# تعيين مفتاح API الخاص بـ OpenAI كمتغير بيئة.
# يُفضل دائمًا عدم تضمين المفاتيح مباشرة في الكود لأسباب أمنية.
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY" # استبدل بمفتاحك الحقيقي
# تهيئة نموذج اللغة الكبير (LLM) الذي سنستخدمه.
# نستخدم هنا نموذج gpt-3.5-turbo من OpenAI.
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
print("تم تهيئة نموذج LLM بنجاح.")
# الخطوة 2: بناء سلسلة الأوامر (Prompt Chain)
# تعريف قالب الأمر (Prompt Template) الذي سيستخدمه النموذج.
# 'topic' و 'concept' هما المتغيرات التي سيتم تمريرها إلى القالب.
template = """أنت مساعد خبير في مجال {topic}.
اشرح مفهوم {concept} بالتفصيل مع أمثلة.
تأكد من أن الشرح واضح ومناسب للمبتدئين."""
# إنشاء كائن PromptTemplate من القالب المعرف.
prompt = PromptTemplate(
input_variables=["topic", "concept"],
template=template
)
print("تم بناء قالب الأمر بنجاح.")
# الخطوة 3: استدعاء النموذج ومعالجة الاستجابة
# إنشاء سلسلة (Chain) تجمع بين النموذج (LLM) وقالب الأمر (Prompt).
# هذه السلسلة مسؤولة عن أخذ المدخلات، وتنسيق الأمر، وإرساله إلى النموذج، واستقبال الاستجابة.
chain = LLMChain(llm=llm, prompt=prompt)
# تحديد المدخلات التي سيتم تمريرها إلى السلسلة.
input_data = {"topic": "الذكاء الاصطناعي", "concept": "التعلم العميق"}
# تشغيل السلسلة والحصول على الاستجابة.
# هنا يتم استدعاء النموذج فعليًا مع الأمر المنسق.
response = chain.invoke(input_data)
# طباعة الاستجابة.
print("\n--- الاستجابة من النموذج ---")
print(response['text'])
النتيجة المتوقعة
عند تشغيل السكربت، سيقوم أولاً بطباعة رسائل تأكيد لتهيئة النموذج وبناء قالب الأمر. ثم، سيتصل بواجهة OpenAI API (باستخدام LangChain) ويرسل الأمر المنسق. سيعود النموذج باستجابة نصية تشرح "التعلم العميق" في سياق "الذكاء الاصطناعي" بطريقة مفصلة ومناسبة للمبتدئين، مع أمثلة. ستظهر هذه الاستجابة مطبوعة على الشاشة تحت عنوان "--- الاستجابة من النموذج ---".