إنتقل إلى المحتوى الرئيسي

الفصل 1: LangChain لـ RAG

نظرة عامة على LangChain​

يوفّر LangChain لبنات بناء لخطوط أنابيب RAG:

  • محمّلات الوثائق ومقسّماتها
  • Embeddings وvector stores
  • مسترجعات وchains
  • LCEL للتركيب

سلسلة RAG أساسية​

from langchain.chat_models import ChatOpenAI
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA

# Setup
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(documents, embeddings)
llm = ChatOpenAI(model="gpt-4")

# Create chain
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever()
)

# Query
response = qa_chain.invoke("What is RAG?")
print(response["result"])

LCEL (LangChain Expression Language)​

مقاربة حديثة قابلة للتركيب:

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

# Define prompt
prompt = ChatPromptTemplate.from_template("""
Answer the question based on the context:

Context: {context}
Question: {question}

Answer:""")

# Build chain with LCEL
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)

# Use
response = chain.invoke("What is RAG?")

أنواع السلاسل​

النوعالوصفحالة الاستخدام
stuffوضع كل الوثائق في الـ promptسياقات صغيرة
map_reduceمعالجة الوثائق منفصلة ثم الدمجمجموعات بيانات كبيرة
refineتحسين الإجابة تكراريًااستعلامات معقّدة
map_rerankالتقييم واختيار الأفضلإجابات متعددة

إضافة الذاكرة​

from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain

memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)

chain = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=retriever,
memory=memory
)

# Maintains conversation context
chain.invoke({"question": "What is RAG?"})
chain.invoke({"question": "What are its benefits?"}) # Remembers context

الخطوات التالية​

تابع إلى الفصل 2: LlamaIndex.