📚 সমস্ত অধ্যায় দেখুন
অধ্যায়/ফেজ 6 · Phase 6 · GenAI Advanced
6.6৩০ মিনিট পড়া42 / 68

RAG System তৈরি করা

RAG

Retrieval + generation pipeline।

Hook — LLM + তোমার Knowledge

LLM সব জানে না — তোমার কোম্পানির document, latest news, private data — কিছুই জানে না। Fine-tuning ব্যয়বহুল আর slow। RAG (Retrieval-Augmented Generation) এর সমাধান: প্রশ্নের আগে relevant document খুঁজে এনে LLM কে context হিসেবে দেওয়া।

RAG Pipeline

  • ১. Indexing — document load → chunk → embed → vector DB এ save।
  • ২. Retrieval — user query embed → similar chunk top-K retrieve।
  • ৩. Generation — chunk + query → LLM → grounded answer।

Chunking Strategy

  • Fixed size — ৫০০-১০০০ token, ১০-২০% overlap।
  • Semantic — paragraph/section boundary।
  • Recursive — markdown header aware।
  • Sentence-window — sentence center, context expand।

Embedding & Vector DB

  • Embedding models — text-embedding-3-large (OpenAI), bge-large, e5, jina, nomic।
  • Vector DB — Pinecone, Weaviate, Qdrant, Chroma, pgvector।
  • Distance — cosine similarity সাধারণ।

Code — Minimal RAG (LangChain)

rag_chain.py
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.prompts import ChatPromptTemplate

# 1. Load & chunk
docs = PyPDFLoader("handbook.pdf").load()
chunks = RecursiveCharacterTextSplitter(
    chunk_size=800, chunk_overlap=120).split_documents(docs)

# 2. Embed & index
vs = Chroma.from_documents(chunks, OpenAIEmbeddings(model="text-embedding-3-small"))
retriever = vs.as_retriever(search_kwargs={"k": 4})

# 3. Generate
prompt = ChatPromptTemplate.from_template("""
শুধু নিচের context ব্যবহার করে উত্তর দাও। জানা না থাকলে বলো 'জানি না'।
Context: {context}
Question: {question}
Answer (Bangla):""")
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

def ask(q):
    ctx = "\n\n".join(d.page_content for d in retriever.invoke(q))
    return llm.invoke(prompt.format(context=ctx, question=q)).content

print(ask("Leave policy কী?"))

Advanced RAG

  • Hybrid Search — BM25 (keyword) + dense (semantic)।
  • Reranker — cross-encoder (Cohere Rerank, bge-reranker) দিয়ে top-K refine।
  • Multi-Query — query rewrite করে multiple search।
  • HyDE — hypothetical answer embed করে search।
  • Parent-Document Retrieval — small chunk search, large chunk context।
  • Agentic RAG — LLM নিজেই tool call করে।
  • GraphRAG — knowledge graph + LLM।

Evaluation

  • Retrieval — Recall@K, MRR, nDCG।
  • Generation — Faithfulness, Answer Relevance, Context Precision (RAGAS)।
  • End-to-end — LLM-as-judge, human eval।

Common Mistakes

  • Chunk size ভুল — খুব ছোট/বড়।
  • Metadata filter ব্যবহার না করা।
  • Reranker skip করা — quality অনেক বাড়ে।
  • Source citation না দেখানো — trust হারায়।
  • Eval pipeline না থাকা।

Summary

এক নজরে

RAG = Index → Retrieve → Generate। Chunking + Embedding + Hybrid + Rerank + Eval = production-grade knowledge assistant।