الذكاء الاصطناعي

LangChain، بناء تطبيقات AI بسرعة

دليل عملي لـLangChain: الأداة الأشهر لبناء تطبيقات LLM، مع أمثلة كود، Chains، Agents، LangGraph.

فريق مقالات، قسم التقنية ٤ سبتمبر ٢٠٢٦ 8 دقيقة قراءة

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

هل أفادك هذا المقال؟

كن أول من يقيّم

الأسئلة الشائعة

إطار عمل مفتوح المصدر (Python + JavaScript) لبناء تطبيقات LLM. أُنشئ 2022 من قِبل Harrison Chase. **الأشهر عالمياً** لـLLM Development. يوفّر: تكامل مع كل النماذج (OpenAI, Anthropic, Google, DeepSeek)، RAG، Agents، Chains، Memory. **مجاني**. الشركة الأمّ تحصل على تمويل من عقود Enterprise.
أبرزها: **يوحّد** الوصول لنماذج مختلفة (تبديل من GPT إلى Claude بسطر واحد)، **مكتبات جاهزة** للـRAG، Agents، **مجتمع ضخم** (100K+ GitHub stars)، **توثيق ممتاز**، **إنتاجي** (LangSmith للـMonitoring، LangServe للـDeployment).
**LangChain**: شامل، Chains، Agents، RAG، Memory، Tools. **LlamaIndex**: متخصّص في RAG وData indexing. **الاستخدام**: LangChain للتطبيقات المتنوّعة، LlamaIndex للـRAG المعقّد. **يمكن دمجهما**. LangChain الأشمل، LlamaIndex الأعمق في مجاله.
امتداد LangChain (2024) لبناء **Agentic Workflows**. يستخدم Graph structure، كل عقدة تفعل شيئاً، الحواف تحدّد المسار. **الأنسب لـ**: multi-step reasoning، وكلاء يستخدمون أدوات متعدّدة، workflows معقّدة. الأشهر في الوكلاء المتقدّمة.
متوسّط الصعوبة. **يحتاج**: Python أساسي، فهم LLMs، معرفة APIs. **إذا مبتدئ**: ابدأ بـChatGPT + Custom GPTs. **إذا مطوّر**: LangChain في أسبوع. **بدائل أبسط**: OpenAI Assistants API، Anthropic Tool Use، أقلّ مرونة، أسهل.
منصّة LangChain للـobservability والتقييم. تُتيح: (1) **Debug** التطبيقات، (2) **Monitor** الاستخدام والأداء، (3) **Evaluate** الجودة (Automated + Human)، (4) **Prompt Management**، (5) **Cost Tracking**. **مجانياً بحدود، مدفوع للـEnterprise**.
أبرزها: استدعاء واحد بسيط لـChatGPT (استخدم requests أو OpenAI SDK)، تطبيق صغير جدّاً، تحتاج نموذجاً واحداً فقط ولا تخطّط للتبديل، استخدام مؤسّسي حسّاس (LangChain overhead كبير أحياناً).

مقالات ذات صلة

نشرة مقالات الأسبوعية

اشترك تصلك أحدث المقالات + مختارات نادرة كل أحد. بلا سبام، ألغي الاشتراك بضغطة.

لا نشارك بريدك مع أي طرف ثالث. راجع سياسة الخصوصية.

التعليقات

بريدك لن يظهر ولن يُرسل إليه شيء — يُستخدم فقط لمنع الإزعاج.

لا تعليقات بعد — كن أول من يكتب.