AI Agents · درس

بناء سلسلة RAG من البداية إلى النهاية

اجمع المكونات: loader -> splitter -> embeddings -> vector store -> retriever -> prompt -> model.

الدرس 4 من 415 خطوة

بناء سلسلة RAG من البداية إلى النهاية درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

هدف المشروع

اجمعوا بين المحمّلات والمقسّمات ومخازن المتجهات وLCEL لإنشاء سلسلة RAG كاملة تشبه ما يُستخدم في الإنتاج.

Step 1: Load and Chunk

from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

loader = PyPDFLoader('handbook.pdf')
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=100)
chunks = splitter.split_documents(docs)
print(f'{len(chunks)} chunks loaded')

Step 2: Embed and Store

from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma

embeddings = OpenAIEmbeddings(model='text-embedding-3-small')
store = Chroma.from_documents(
    chunks,
    embeddings,
    persist_directory='./handbook_db'
)

Step 3: Set Up Retriever

retriever = store.as_retriever(
    search_type='similarity',
    search_kwargs={'k': 4}
)

Step 4: Define the Prompt

from langchain.prompts import ChatPromptTemplate

rag_prompt = ChatPromptTemplate.from_template('''
You are a helpful assistant. Use the context below to answer.
If the answer is not in the context, say you do not know.
Cite sources like [1], [2].

Context:
{context}

Question: {question}

Answer:
''')

Step 5: Format Documents Helper

def format_docs(docs):
    return '\n\n'.join(
        f'[{i+1}] (source: {d.metadata.get("source", "?")}, page {d.metadata.get("page", "?")})\n{d.page_content}'
        for i, d in enumerate(docs)
    )

from types import SimpleNamespace
docs = [
    SimpleNamespace(metadata={'source': 'handbook.pdf', 'page': 3}, page_content='Vacation policy details.'),
    SimpleNamespace(metadata={'source': 'handbook.pdf', 'page': 5}, page_content='Sick leave details.'),
]
print(format_docs(docs))

Step 6: Assemble the LCEL Chain

from langchain_core.runnables import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser
from langchain_openai import ChatOpenAI

model = ChatOpenAI(model='gpt-4o-mini', temperature=0)

rag_chain = (
    {'context': retriever | format_docs, 'question': RunnablePassthrough()}
    | rag_prompt
    | model
    | StrOutputParser()
)

Step 7: Invoke

answer = rag_chain.invoke('What is our refund policy?')
print(answer)

Step 8: Stream the Answer

for chunk in rag_chain.stream('What is our refund policy?'):
    print(chunk, end='', flush=True)

الخطوة 9: إرجاع المصادر بشكل منفصل

قد تحتاجون أحيانًا إلى تضمين كل من الإجابة والمستندات المسترجعة في المخرجات:

from langchain_core.runnables import RunnableParallel

rag_with_sources = RunnableParallel(
    context=retriever,
    answer=rag_chain
)

result = rag_with_sources.invoke('What is our refund policy?')
print(result['answer'])
for doc in result['context']:
    print(doc.metadata)

الخطوة 10: RAG للمحادثات

أضيفوا استرجاعًا يراعي سجل المحادثة — وأعيدوا صياغة أسئلة المتابعة بصيغة مستقلة قبل الاسترجاع:

from langchain.chains import create_history_aware_retriever
# 'And what about XL sizes?' -> 'What is the refund policy for XL sizes?'

الخطوة 11: تقييم السلسلة

يسجل تكامل LangSmith كل استدعاء للسلسلة. ويمكنكم إنشاء مجموعات بيانات من الاستخدام الفعلي وإجراء التقييمات.

اعتبارات الإنتاج

  • ثبّتوا إصدارات النماذج
  • اضبطوا max_tokens
  • أضيفوا تتبع استخدام الرموز
  • طبّقوا إعادة المحاولة باستخدام نموذج احتياطي
  • خزّنوا التضمينات مؤقتًا، فهي حتمية أصلًا في OpenAI
  • أضيفوا Langfuse أو LangSmith لإنشاء آثار التتبع

الغرض من format_docs

لماذا نستخدم مساعد format_docs بين المسترجع والمطالبة؟

مراجعة

لقد بنيتم سلسلة RAG كاملة باستخدام LCEL. ويمكن توسيع هذا الهيكل ليصبح مناسبًا للإنتاج بإضافة التحسينات المذكورة أعلاه.

البدء مجانًا

تعلم AI Agents مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
60
الدروس
239

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

هل درس «بناء سلسلة RAG من البداية إلى النهاية» مجاني؟

نعم — نص درس «بناء سلسلة RAG من البداية إلى النهاية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.

ماذا ستتعلم في «بناء سلسلة RAG من البداية إلى النهاية»؟

اجمع المكونات: loader -> splitter -> embeddings -> vector store -> retriever -> prompt -> model. تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟

لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «بناء سلسلة RAG من البداية إلى النهاية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟

نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بنية LangChain: النماذج والمطالبات والسلاسل
  2. أدوات التحميل والتقسيم ومخازن المتجهات
  3. LCEL (لغة تعبيرات LangChain)
  4. بناء سلسلة RAG من البداية إلى النهاية
← العودة إلى AI Agents