بنية LangChain وتجريداتها الأساسية
تعرّفوا إلى نموذج مكوّنات LangChain، بما في ذلك LLMs وChatModels وPromptTemplates وOutputParsers وRunnables، وكيفية تركيبها في pipelines.
بنية LangChain وتجريداتها الأساسية درس مجاني في AI Engineering Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Engineering Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.
ما هي LangChain فعلًا
LangChain هو إطار عمل لبناء تطبيقات مدعومة بنماذج اللغة. وبدلًا من كتابة استدعاءات API الخام وكود الربط بنفسك، يوفر LangChain مكوّنات قابلة لإعادة الاستخدام تتصل ببعضها لتكوين مسارات معالجة. كما يدعم مزودين متعددين لـ LLM (OpenAI وAnthropic وCohere والنماذج المحلية) من خلال واجهة موحّدة، ولذلك لا يتطلب تبديل المزودين سوى تغييرات طفيفة في الكود.
نظرة عامة على نموذج المكوّنات
ينظم LangChain لبناته الأساسية ضمن فئات مميزة من المكوّنات. وتغلّف LLMs وChatModels مزودي النماذج. وتتولى PromptTemplates إدارة إنشاء المطالبات الديناميكية. وتحول OutputParsers نص النموذج الخام إلى كائنات Python منظمة. أما Runnables فهي الواجهة العامة التي تربط كل شيء في مسارات قابلة للتركيب.
LLMs في مقابل ChatModels
يميز LangChain بين واجهتين للنماذج. يتلقى LLM مطالبة نصية ويعيد إكمالًا نصيًا — وهو أسلوب إكمال النصوص الأقدم. أما ChatModel فيتلقى قائمة من الرسائل (النظام، والمستخدم، والذكاء الاصطناعي) ويعيد كائن رسالة. تُعد نماذج OpenAI وAnthropic وGemini الحديثة كلها ChatModels. ينبغي تفضيل ChatModel في التطبيقات الجديدة.
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
llm = ChatOpenAI(model='gpt-4o-mini')
response = llm.invoke([
SystemMessage(content='You are a helpful assistant.'),
HumanMessage(content='What is LangChain?')
])
print(response.content)PromptTemplates: المطالبات الديناميكية
يتيح لك PromptTemplate تعريف مطالبة تتضمن متغيرات نائبة تُملأ وقت التشغيل. ويؤدي ChatPromptTemplate الوظيفة نفسها للمطالبات التي تتبع نمط المحادثة وتضم رسائل متعددة. تفصل القوالب بين بنية المطالبة وقيم وقت التشغيل، مما يجعل المطالبات قابلة لإعادة الاستخدام والاختبار وسهلة الإدارة باستخدام أنظمة التحكم في الإصدارات.
from langchain_core.prompts import ChatPromptTemplate
template = ChatPromptTemplate.from_messages([
('system', 'You are an expert in {domain}.'),
('human', 'Explain {concept} in simple terms.')
])
# Fill in variables at runtime
messages = template.invoke({'domain': 'machine learning', 'concept': 'embeddings'})
print(messages)OutputParsers: تشكيل مخرجات النموذج
تحوّل OutputParsers المخرجات النصية الخام من النموذج إلى أنواع Python منظمة. يستخرج StrOutputParser سلسلة المحتوى فقط. ويحلل JsonOutputParser تنسيق JSON. أما PydanticOutputParser فيتحقق من صحة البيانات وفق مخطط Pydantic. كما تنشئ المحللات تعليمات للتنسيق يمكنك إدراجها في المطالبات لتوجيه النموذج نحو التنسيق المتوقع.
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
from pydantic import BaseModel
class MovieReview(BaseModel):
title: str
rating: int
summary: str
parser = JsonOutputParser(pydantic_object=MovieReview)
# parser.get_format_instructions() returns JSON schema instructions
print(parser.get_format_instructions()[:200])واجهة Runnable
يطبّق كل مكوّن في LangChain واجهة Runnable، التي تحدد ثلاث طرائق أساسية: invoke() للاستدعاءات الفردية المتزامنة، وstream() للبث رمزًا تلو الآخر، وbatch() لمعالجة مدخلات متعددة بالتوازي. وبما أن كل مكوّن هو Runnable، يمكن تركيبها جميعًا بطريقة موحّدة باستخدام عامل الأنبوب.
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model='gpt-4o-mini')
# Single call
result = llm.invoke('What is 2+2?')
# Streaming tokens
for chunk in llm.stream('Tell me a joke.'):
print(chunk.content, end='', flush=True)
# Batch processing
results = llm.batch(['What is Paris?', 'What is Rome?'])التركيب باستخدام عامل الأنبوب
يُعد عامل الأنبوب (|) صياغة مختصرة لإنشاء كائنات RunnableSequence. عند كتابة prompt | llm | parser، ينشئ LangChain سلسلة يتدفق فيها خرج كل خطوة إلى دخل الخطوة التالية. يشكّل هذا جوهر LCEL — لغة تعبيرات LangChain — ويستبدل فئات السلاسل القديمة والمطوّلة.
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_template('Summarize this in one sentence: {text}')
llm = ChatOpenAI(model='gpt-4o-mini')
parser = StrOutputParser()
# Chain composed with pipe operator
chain = prompt | llm | parser
result = chain.invoke({'text': 'LangChain is a framework for LLM applications...'})
print(result)محملات المستندات ومجزئات النصوص
بالنسبة إلى تطبيقات RAG، يوفر LangChain Document Loaders التي تقرأ الملفات بتنسيقات متنوعة (PDF وWord وHTML وCSV) وتعيد قائمة من كائنات Document التي تحتوي على الحقلين page_content وmetadata. ثم تقسم Text Splitters المستندات الطويلة إلى أجزاء أصغر مناسبة للتضمين والاسترجاع.
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
loader = PyPDFLoader('report.pdf')
docs = loader.load() # List of Document objects
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50
)
chunks = splitter.split_documents(docs)
print(f'Split {len(docs)} pages into {len(chunks)} chunks')مخازن المتجهات بصفتها Runnables
يغلّف LangChain قواعد بيانات المتجهات (Chroma وPinecone وpgvector) في كائنات VectorStore التي تعرض طريقة similarity_search(). يمكنك تحويل أي VectorStore إلى Runnable من نوع Retriever باستخدام .as_retriever()، مما يتيح تركيبه في سلاسل LCEL. يتلقى المسترجع سلسلة استعلام ويعيد المستندات الأعلى صلة، وعددها k.
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(chunks, embeddings)
# Convert to Retriever Runnable
retriever = vectorstore.as_retriever(
search_type='similarity',
search_kwargs={'k': 5}
)
results = retriever.invoke('How does LangChain work?')
for doc in results:
print(doc.page_content[:100])عمليات الاستدعاء وقابلية الرصد
يتيح لك نظام callback في LangChain التفاعل مع كل حدث أثناء تنفيذ السلسلة: عند بدء LLM، وعند بث الرموز، وعند انتهاء السلسلة، وعند استدعاء أداة. تتضمن عمليات الاستدعاء المدمجة StdOutCallbackHandler لتسجيل المخرجات في وحدة التحكم. أما عمليات التكامل التابعة لجهات خارجية، مثل LangSmith، فتتصل تلقائيًا عبر متغيرات البيئة، وتلتقط آثار التنفيذ الكاملة دون إجراء تغييرات على الشيفرة.
from langchain.callbacks import StdOutCallbackHandler
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model='gpt-4o-mini',
callbacks=[StdOutCallbackHandler()]
)
# Now every call logs input/output automatically
# Or enable LangSmith tracing globally:
import os
os.environ['LANGCHAIN_TRACING_V2'] = 'true'
os.environ['LANGCHAIN_API_KEY'] = 'your-key'الذاكرة والحالة في السلاسل
تكون سلاسل LangChain، افتراضيًا، عديمة الحالة — إذ يكون كل استدعاء مستقلًا. ولإضافة ذاكرة محادثة، تغلّف السلسلة بمكوّن ذاكرة يخزّن سجل المحادثة ويدرجه. تُعد RunnableWithMessageHistory الطريقة الأصلية في LCEL لإضافة الذاكرة، إذ تتلقى دالة get_session_history التي تحمّل السجل حسب معرّف الجلسة.
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_community.chat_message_histories import ChatMessageHistory
store = {} # session_id -> ChatMessageHistory
def get_session_history(session_id: str):
if session_id not in store:
store[session_id] = ChatMessageHistory()
return store[session_id]
with_history = RunnableWithMessageHistory(chain, get_session_history)
response = with_history.invoke(
{'input': 'Hi, my name is Alice'},
config={'configurable': {'session_id': 'user-1'}}
)اختبار سريع
اختبر مدى فهمك لبنية LangChain والتجريدات الأساسية فيها.
<p>تعلمت في هذا الدرس أن <strong>نموذج مكوّنات LangChain</strong> ينظم LLMs وPromptTemplates وOutputParsers وRetrievers بصفتها Runnables ذات واجهة موحّدة، وأن <strong>عامل الأنبوب (|)</strong> يركّب Runnables في سلاسل متتابعة عبر LCEL، وأن <strong>عمليات الاستدعاء</strong> تتيح رصد كل خطوة دون تغيير منطق الأعمال. بعد ذلك، سنستكشف بناء السلاسل باستخدام LCEL بمزيد من التفصيل.</p>
في هذا الدرس تعلّمتُم أن نموذج مكوّنات LangChain ينظّم LLMs وPromptTemplates وOutputParsers وRetrievers بوصفها Runnables ذات واجهة موحّدة، وأن عامل الأنبوب (|) يؤلّف Runnables في سلاسل متتابعة باستخدام LCEL، وأن عمليات الاستدعاء الراجعة (callbacks) تتيح الرصد في كل خطوة من دون تغيير منطق الأعمال. بعد ذلك سنستكشف بالتفصيل كيفية إنشاء السلاسل باستخدام LCEL.
تعلم Python مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «بنية LangChain وتجريداتها الأساسية» مجاني؟
نعم — نص درس «بنية LangChain وتجريداتها الأساسية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Engineering Academy، انتقل إلى CoddyKit PRO. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.
ماذا ستتعلم في «بنية LangChain وتجريداتها الأساسية»؟
تعرّفوا إلى نموذج مكوّنات LangChain، بما في ذلك LLMs وChatModels وPromptTemplates وOutputParsers وRunnables، وكيفية تركيبها في pipelines. تتمرن على AI Engineering Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Engineering Academy؟
لا تُشترط خبرة سابقة. AI Engineering Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «بنية LangChain وتجريداتها الأساسية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Engineering Academy هذا؟
نعم. كل درس في AI Engineering Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- بنية LangChain وتجريداتها الأساسية
- بناء السلاسل باستخدام LCEL
- السلاسل المتفرعة والمتوازية
- بث المخرجات في LangChain