LangChain، بناء تطبيقات AI بسرعة
دليل عملي لـLangChain: الأداة الأشهر لبناء تطبيقات LLM، مع أمثلة كود، Chains، Agents، LangGraph.
LangChain الأداة الأشهر عالمياً لبناء تطبيقات AI. من Prototype إلى Production، يُوفّر إطار العمل. هذا الدليل شامل، نظري + عملي.
الخلفية
التأسيس: أكتوبر 2022 المؤسّس: Harrison Chase النوع: Open Source (MIT License) الشركة الأمّ: LangChain, Inc. التمويل: 25 مليون$ (Sequoia، Benchmark) GitHub Stars: 100,000+ (2026)
الرؤية:
- توحيد تطوير LLM Applications
- تسريع الوصول من فكرة إلى منتج
- دعم كل النماذج والأدوات
لماذا LangChain
المشكلة قبل LangChain
كل نموذج له API مختلف:
- OpenAI:
openai.ChatCompletion.create(...) - Anthropic:
anthropic.messages.create(...) - Google:
genai.GenerativeModel.generate_content(...)
التبديل بين النماذج = إعادة كتابة كثير.
بناء RAG = عشرات المكوّنات (تقطيع، Embeddings، Vector DB، Retrieval، LLM call).
الحلّ
LangChain يوحّد:
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
# نفس الواجهة
gpt = ChatOpenAI(model="gpt-5")
claude = ChatAnthropic(model="claude-sonnet-4-7")
# نفس الاستخدام
gpt.invoke("مرحبا")
claude.invoke("مرحبا")
سطر واحد للتبديل.
البنية الأساسية
المكوّنات الرئيسية
1) LLMs / Chat Models:
- الواجهة الموحّدة للنماذج
- GPT، Claude، Gemini، Llama، DeepSeek، Mistral، إلخ
2) Prompts:
- Prompt Templates
- Few-Shot Examples
- Chat Prompts
3) Chains:
- تسلسل خطوات
- مثال: prompt → LLM → parse output
4) Memory:
- حفظ سياق المحادثات
- Short-term، Long-term
5) Retrievers:
- الاسترجاع من مصادر (RAG)
- Vector Stores، Search APIs
6) Agents:
- LLM يقرّر ما يفعل
- استخدام أدوات (tools)
7) Callbacks:
- Logging، Streaming، Monitoring
مكوّنات إضافية
8) Document Loaders:
- تحميل PDFs، Word، HTML، APIs
- 100+ loader مدعوم
9) Text Splitters:
- تقطيع النصوص للـRAG
- بذكاء (يحفظ السياق)
10) Embeddings:
- تحويل نصّ إلى vectors
- OpenAI، Cohere، Hugging Face، إلخ
11) Vector Stores:
- تخزين واسترجاع vectors
- Pinecone، Weaviate، Chroma، PGVector
12) Output Parsers:
- تحويل مخرج LLM لصيغة منظّمة
- JSON، Pydantic، إلخ
البدء العملي
التثبيت
pip install langchain langchain-openai
للـintegrations المحدّدة:
pip install langchain-anthropic
pip install langchain-google-genai
pip install langchain-community # كل شيء
أوّل مثال
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-5-mini",
api_key="sk-...",
temperature=0.7
)
response = llm.invoke("ما عاصمة السعودية؟")
print(response.content)
# "عاصمة المملكة العربية السعودية هي الرياض."
مع Prompt Template
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "أنت مساعد ذكيّ يجيب بالعربية الفصحى."),
("human", "{question}")
])
chain = prompt | llm
response = chain.invoke({"question": "ما أكبر مدن السعودية؟"})
print(response.content)
LangChain Expression Language (LCEL)
LCEL = طريقة تركيب مكوّنات LangChain بأسلوب Pipe.
from langchain_core.output_parsers import StrOutputParser
chain = prompt | llm | StrOutputParser()
# chain الآن تُخرج نصّاً مباشرة (بلا كائن)
answer = chain.invoke({"question": "..."})
الفائدة: قابل للـStream، Parallel، Batch.
RAG مع LangChain
مثال كامل
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
# 1. تحميل PDFs
loader = PyPDFLoader("company_handbook.pdf")
docs = loader.load()
# 2. تقطيع
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=100
)
splits = text_splitter.split_documents(docs)
# 3. تخزين في Vector DB
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(splits, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})
# 4. Prompt
template = """أجب على السؤال بناءً على السياق التالي فقط.
إذا لم تجد الإجابة، قل "لا أعرف من المصادر المتاحة".
السياق:
{context}
السؤال: {question}
الجواب:"""
prompt = ChatPromptTemplate.from_template(template)
# 5. LLM
llm = ChatOpenAI(model="gpt-5-mini")
# 6. Chain كامل
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# 7. الاستعلام
answer = rag_chain.invoke("ما مدّة الإجازة السنوية؟")
print(answer)
هذا RAG كامل في 40 سطراً.
Agents
Agent = LLM يقرّر ما يفعل بناءً على الحالة.
مثال Agent
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
from langchain_openai import ChatOpenAI
# 1. تعريف الأدوات
def calculator(expression: str) -> str:
"""يحسب تعبير رياضي"""
try:
return str(eval(expression))
except:
return "خطأ في الحساب"
def search_wikipedia(query: str) -> str:
"""يبحث في Wikipedia"""
# تنفيذ حقيقي بمكتبة
return f"نتائج بحث عن {query}"
tools = [
Tool(name="Calculator", func=calculator, description="لحسابات رياضية"),
Tool(name="Wikipedia", func=search_wikipedia, description="للبحث في Wikipedia")
]
# 2. Prompt
from langchain import hub
prompt = hub.pull("hwchase17/react")
# 3. Agent
llm = ChatOpenAI(model="gpt-5")
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 4. استخدام
result = agent_executor.invoke({
"input": "ما ناتج ضرب 234 في 567؟ ثمّ اشرح لي في Wikipedia عن الرياضيات"
})
Agent يقرّر: "أحتاج Calculator أوّلاً، ثمّ Wikipedia".
LangGraph، Agentic Workflows
LangGraph (2024) = المستقبل الجديد لـAgents:
لماذا LangGraph
Agents التقليدية:
- خطية (سؤال → إجابة)
- صعبة التحكّم
- Debugging صعب
LangGraph:
- Graph structure، عقد وحواف
- حالة موحّدة (State)
- تحكّم دقيق
- قابل للتصحيح
مثال بسيط
from langgraph.graph import StateGraph, END
from typing import TypedDict
class State(TypedDict):
question: str
thought: str
answer: str
def think(state: State) -> State:
state["thought"] = f"فكّر في: {state['question']}"
return state
def answer(state: State) -> State:
state["answer"] = f"جواب: {state['thought']}"
return state
# بناء Graph
workflow = StateGraph(State)
workflow.add_node("think", think)
workflow.add_node("answer", answer)
workflow.set_entry_point("think")
workflow.add_edge("think", "answer")
workflow.add_edge("answer", END)
# تنفيذ
app = workflow.compile()
result = app.invoke({"question": "ما 2+2؟"})
print(result)
استخدامات LangGraph
- Multi-agent systems (وكلاء يتعاونون)
- Human-in-the-Loop (توقّف للتأكيد)
- Complex workflows (فروع، حلقات)
- Long-running tasks (يستطيع الاستئناف)
Memory
أنواع الذاكرة
1) ConversationBufferMemory:
- تحفظ كل المحادثة
- بسيط لكن يستهلك سياقاً
2) ConversationSummaryMemory:
- يلخّص المحادثة القديمة
- يوفّر توكنات
3) ConversationBufferWindowMemory:
- تحفظ آخر K رسائل فقط
4) VectorStoreRetrieverMemory:
- تحفظ في Vector DB، تسترجع الأهمّ
- للمحادثات الطويلة جدّاً
مثال
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
memory = ConversationBufferMemory()
llm = ChatOpenAI(model="gpt-5-mini")
conversation = ConversationChain(llm=llm, memory=memory)
conversation.predict(input="مرحبا، اسمي أحمد")
conversation.predict(input="ما اسمي؟")
# الجواب: "اسمك أحمد"
LangSmith
منصّة LangChain للـObservability:
الميّزات
1) Tracing:
- كل تنفيذ يُسجَّل
- خطوة خطوة
- Debug بسيط
2) Prompt Management:
- Version control للـPrompts
- A/B Testing
3) Evaluation:
- Automated tests
- Human review
- Metrics
4) Monitoring:
- Costs
- Latency
- Errors
5) Datasets:
- بناء datasets للاختبار
- Iterations
الإعداد
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "ls_..."
# الآن كل تنفيذ يُسجَّل في LangSmith
الأسعار:
- Free: 5000 traces/شهر
- Pro: 39$/شهر (أعلى حدود)
- Enterprise: مخصّص
LangServe
لنشر تطبيقات LangChain كـAPIs:
from fastapi import FastAPI
from langserve import add_routes
app = FastAPI()
add_routes(app, my_chain, path="/my-chain")
# uvicorn main:app
# الآن API جاهز على /my-chain
الأثر: من prototype إلى Production في دقائق.
أنماط استخدام
1) Chatbot
from langchain.chains import ConversationChain
chatbot = ConversationChain(llm=llm, memory=memory)
2) Q&A على مستندات
# مثال RAG أعلاه
3) SQL Query Generation
from langchain_community.utilities import SQLDatabase
from langchain.chains import create_sql_query_chain
db = SQLDatabase.from_uri("postgresql://...")
chain = create_sql_query_chain(llm, db)
query = chain.invoke({"question": "كم عميلاً في السعودية؟"})
4) Content Generation
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template(
"اكتب مقال 500 كلمة عن {topic}"
)
chain = prompt | llm | StrOutputParser()
article = chain.invoke({"topic": "الطاقة المتجدّدة"})
5) Extraction
from langchain_core.pydantic_v1 import BaseModel
class Person(BaseModel):
name: str
age: int
email: str
structured_llm = llm.with_structured_output(Person)
result = structured_llm.invoke(
"استخرج: أحمد، 30 سنة، ahmed@example.com"
)
# Person(name='أحمد', age=30, email='ahmed@example.com')
LangChain في العربية
التحدّيات
- معظم Prompts الافتراضية بالإنجليزية
- بعض الـChains لا تعمل جيّداً بالعربية
- Embedding models للعربية أقلّ نضجاً
الحلول
1) Prompts بالعربية:
prompt = ChatPromptTemplate.from_template(
"أنت مساعد ذكيّ. أجب بالعربية الفصحى.\n\nالسؤال: {question}"
)
2) Embeddings للعربية:
- Cohere Embed Multilingual (تدعم العربية جيّداً)
- BGE-M3 (مفتوح)
- BAAI/bge-m3
3) اختبار عبر لغات:
- تأكّد أنّ chain يعمل بالعربية قبل الإطلاق
LangChain vs البدائل
vs LlamaIndex
| المعيار | LangChain | LlamaIndex | |---|---|---| | الشمول | أشمل | متخصّص | | RAG | جيّد | الأعمق | | Agents | قوي | جيّد | | التوثيق | ممتاز | ممتاز | | المجتمع | أكبر | كبير |
النتيجة: LangChain للتنوّع، LlamaIndex للـRAG المعقّد.
vs OpenAI Assistants API
| المعيار | LangChain | OpenAI Assistants | |---|---|---| | النماذج | متعدّدة | OpenAI فقط | | التعقيد | متوسّط | أبسط | | المرونة | كاملة | محدودة | | الأنسب لـ | تطبيقات مخصّصة | prototypes سريعة |
vs Anthropic Tool Use
- Tool Use مدمج في Claude
- بسيط للاستخدامات الأساسية
- LangChain أشمل لتطبيقات معقّدة
vs بناء من الصفر
- LangChain يوفّر وقتاً كثيراً
- لكن قد يكون overhead لتطبيقات بسيطة
- قاعدة: إذا تحتاج ميّزة واحدة، اكتبها بنفسك. لتطبيق كامل، استخدم LangChain.
متى LangChain
استخدمه إذا
- تبني تطبيقاً كامل الميّزات (RAG + Agents + Memory)
- تستخدم أكثر من نموذج
- تحتاج تكاملات جاهزة (Vector DBs، APIs)
- تخطّط للـScale (LangSmith، LangServe)
لا تستخدمه إذا
- استدعاء بسيط لـLLM
- نموذج واحد ثابت
- تحتاج تحكّماً منخفض المستوى تماماً
- Enterprise حسّاس (قد تُفضّل بناء داخلي)
المستقبل
الاتّجاهات
LangGraph تسود:
- بناء وكلاء أعمق
- Multi-agent systems
Agent Standards:
- MCP (Model Context Protocol) من Anthropic
- LangChain يدعم
Enterprise Adoption:
- شركات كبرى تتبنّى
- LangChain Business يكبر
Community:
- 100,000+ نجمة تكبر
- Contributions مستمرّة
نصائح للمطوّر السعودي
1) ابدأ بسيطاً
- لا تحاول تعلّم LangGraph من اليوم الأوّل
- ابدأ بـLCEL
2) استخدم Ollama محلياً
from langchain_community.llms import Ollama
llm = Ollama(model="llama3.2")
مجاناً، خصوصية كاملة.
3) LangSmith Free
- 5000 traces/شهر
- كافٍ للتعلّم
4) اقرأ Cookbooks
- LangChain Cookbook: أمثلة كاملة
- الأنسب للتعلّم العملي
5) الشراكة مع Cursor
- Cursor + LangChain = سرعة تطوير هائلة
المصادر الرسمية
اقرأ أيضاً: RAG، التعزيز بالاسترجاع · OpenAI API، دليل البدء · MCP، بروتوكول سياق النموذج · Fine-tuning و LoRA
هل أفادك هذا المقال؟
الأسئلة الشائعة
مقالات ذات صلة
الذكاء الاصطناعي العام (AGI): هل قريب؟ الجدل الكامل
شرح لجدل AGI، ما هو تعريفه الحقيقي، آراء Sam Altman و Demis Hassabis و Yann LeCun و Gary Marcus، الاختبارات المقترحة، والتوقّعات الواقعية للوصول إليه.
AGI و Superintelligence، النقاش الحقيقي بلا خيال
شرح تفصيلي للذكاء العام (AGI) والذكاء الفائق (ASI): التعاريف، المتفائلون، المتحفّظون، ماذا يعني للحياة اليومية.
مصنّعو رقائق الذكاء الاصطناعي، NVIDIA، AMD، TSMC، Intel
دليل لصناعة رقائق AI: NVIDIA، AMD، Intel، Broadcom، TSMC، Samsung، الحصص، الحرب الجيوسياسية، والسعودية.
نشرة مقالات الأسبوعية
اشترك تصلك أحدث المقالات + مختارات نادرة كل أحد. بلا سبام، ألغي الاشتراك بضغطة.
لا نشارك بريدك مع أي طرف ثالث. راجع سياسة الخصوصية.