বেসিক RAG বাস্তবায়ন: ধাপে ধাপে টিউটোরিয়াল

নতুনদের উপযোগী এই টিউটোরিয়ালে একটি বেসিক RAG বাস্তবায়ন কীভাবে কাজ করে তা ব্যাখ্যা করা হয়েছে, সেরা অনুশীলনগুলো আলোচনা করা হয়েছে, এবং Python, ChromaDB ও Perplexity-এর এমবেডিং ও ল্যাঙ্গুয়েজ মডেল ব্যবহার করে একটি কার্যকর কমান্ড-লাইন RAG সিস্টেম তৈরির প্রতিটি ধাপ দেখানো হয়েছে।

Basic RAG implementation process diagram: the interface sends input to the orchestrator, which retrieves data from a vector database, builds the input context for the LLM, and returns the output to the interface.

RAG আধুনিক LLM-ভিত্তিক অবকাঠামোর একটি অপরিহার্য উপাদান। AI মডেলগুলোকে বাহ্যিক ডেটা অ্যাক্সেসের সুযোগ দিয়ে এটি হ্যালুসিনেশন ও অসম্পূর্ণ ট্রেনিং ডেটার মতো সমস্যা মোকাবিলায় সাহায্য করে। এর ফলে কোম্পানিগুলো সংবেদনশীল বা মালিকানাধীন তথ্যসমৃদ্ধ অভ্যন্তরীণ নলেজ বেসও ব্যবহার করতে পারে।

RAG বাস্তবায়ন অত্যন্ত জটিল হতে পারে। তবে একটি বেসিক RAG সিস্টেম তৈরি করা আশ্চর্যজনকভাবে সহজ। নতুনদের জন্য একটি সহজ আর্কিটেকচার তৈরি করলে বাস্তবে RAG কীভাবে কাজ করে তা স্পষ্ট হয় এবং পরবর্তী পরীক্ষা-নিরীক্ষার জন্য একটি সূচনাবিন্দু পাওয়া যায়।

এই নিবন্ধে আমরা একটি বেসিক RAG বাস্তবায়নের রূপরেখা তুলে ধরব, সেরা অনুশীলনগুলো আলোচনা করব, এবং তারপর Python, ChromaDB এবং এমবেডিং ও উত্তর তৈরির জন্য Perplexity-এর দুটি মডেল ব্যবহার করে একটি কার্যকর সিস্টেম তৈরি করব।

বেসিক RAG বাস্তবায়নের প্রক্রিয়া: একটি সার্বিক ধারণা

একটি বেসিক RAG সিস্টেমের তিনটি প্রধান উপাদান রয়েছে: একটি অর্কেস্ট্রেটর, একটি তথ্যের উৎস এবং একটি LLM। একটি সাধারণ ওয়ার্কফ্লোতে ব্যবহারকারী একটি প্রম্পট লেখেন, এবং সংযুক্ত যেকোনো তথ্যের উৎসে অনুসন্ধানের জন্য অর্কেস্ট্রেটর সেটি পরিবর্তন করে। এরপর সংগৃহীত তথ্য মূল ইনপুট কনটেক্সটে যোগ করে LLM-এ পাঠানো হয়, যাতে একটি উত্তর তৈরি করা যায়।

আপনার RAG বাস্তবায়ন তৈরির সময় এই ধাপগুলো বিবেচনায় রাখতে হবে:

  1. ইনডেক্সিং ও এমবেডিং: এই পর্যায়ে আপনার ডকুমেন্টগুলোকে এমন একটি তথ্যের উৎসে রূপান্তর করা হয়, যেখানে অর্কেস্ট্রেটর অনুসন্ধান চালাতে পারে। এটি করার সবচেয়ে প্রচলিত উপায়গুলোর একটি হলো অনুসন্ধানযোগ্য একটি ভেক্টর ইনডেক্স তৈরি করা। আপনার ডকুমেন্টের চাঙ্ক বা খণ্ডগুলোকে এমবেডিং-এ রূপান্তর করতে আমরা Perplexity-এর একটি ডেডিকেটেড মডেল ব্যবহার করব। এরপর আমরা জনপ্রিয় ওপেন-সোর্স ভেক্টর ডেটাবেস ChromaDB-তে এমবেডিংগুলো সংরক্ষণ করব।
  2. অর্কেস্ট্রেশন: এটি সেই অ্যাপ্লিকেশন, যা বাহ্যিক তথ্যের উৎস (আমাদের ক্ষেত্রে একটি ভেক্টর ডেটাবেস) এবং LLM-এর মাঝখানে অবস্থান করে। অর্কেস্ট্রেটর হিসেবে কাজ করার জন্য আমরা একটি সহজ Python স্ক্রিপ্ট তৈরি করব।
  3. রিট্রিভাল ও জেনারেশন: ব্যবহারকারী যখন চ্যাট ইন্টারফেসের মাধ্যমে কোনো প্রশ্ন করেন, অর্কেস্ট্রেটর সেটি গ্রহণ করে একটি ভেক্টর সার্চ চালাবে এবং সম্প্রসারিত ইনপুট LLM-এ পাঠাবে। আলাদা কোনো ফ্রন্টএন্ড তৈরি না করে আমরা আমাদের Python অর্কেস্ট্রেটরের সঙ্গে যোগাযোগের জন্য কমান্ড লাইন প্রম্পট ব্যবহার করব।

সেরা অনুশীলন: কোন বিষয়গুলো একটি RAG বাস্তবায়নকে কার্যকর করে তোলে?

RAG আর্কিটেকচারের একাধিক ধরন রয়েছে, এবং ব্যবহারের ক্ষেত্রভেদে ভিন্ন ভিন্ন পদ্ধতির প্রয়োজন হয়। তবে কিছু সেরা অনুশীলন সব ক্ষেত্রেই প্রযোজ্য, যা নির্ভুল, সাশ্রয়ী, স্কেলযোগ্য ও রক্ষণাবেক্ষণযোগ্য সিস্টেম নিশ্চিত করে।

নিচের সেরা অনুশীলনগুলো সব ধরনের RAG বাস্তবায়নের ক্ষেত্রে প্রযোজ্য:

  • একটি পরিচ্ছন্ন ইনজেশন পাইপলাইন নিশ্চিত করুন: ইনডেক্সিংয়ের আগে আপনার সোর্স ডেটা যতটা সম্ভব পরিচ্ছন্ন হওয়া উচিত। এছাড়া আপনার কনটেন্টের উপযোগী একটি এমবেডিং মডেল ব্যবহার করা উচিত।
  • হাইব্রিড সার্চ ব্যবহার করুন: ভেক্টর ডেটাবেস সার্চ, API-ভিত্তিক ওয়েব সার্চ, নলেজ গ্রাফ ট্রাভার্সাল, কিওয়ার্ড সার্চ বা অন্য যেকোনো পদ্ধতিই হোক না কেন, সেরা রিট্রিভাল পদ্ধতি ব্যবহারের ক্ষেত্রভেদে ভিন্ন হয়। খরচ কমিয়ে রাখতে সঠিক সমন্বয় বেছে নেওয়া গুরুত্বপূর্ণ।
  • আপনার সিস্টেম মূল্যায়ন করুন: বাস্তবায়নের পর তিনটি মূল মানদণ্ডে আপনার সিস্টেম মূল্যায়ন করা উচিত: নির্ভুলতা, প্রাসঙ্গিকতা এবং লেটেন্সি। নির্ভুলতা বলতে তথ্যগত সঠিকতা, প্রাসঙ্গিকতা বলতে ব্যবহারকারীর কোয়েরির ক্ষেত্রে সংগৃহীত তথ্যের উপযোগিতা, এবং লেটেন্সি বলতে কত দ্রুত তথ্য সংগ্রহ করা হয় তা বোঝায়।
  • তথ্য নিরাপদে পরিচালনা করুন: আপনার RAG সিস্টেম যদি ব্যক্তিগত অভ্যন্তরীণ তথ্যের ওপর নির্ভর করে, তাহলে নিশ্চিত করুন যে তা নিরাপদে সংরক্ষিত আছে এবং সিস্টেম ইন্টারফেসে অ্যাক্সেস নিয়ন্ত্রিত রয়েছে। API কী কখনোই শেয়ার করা উচিত নয়।

বেসিক RAG বাস্তবায়ন: ৭ ধাপের টিউটোরিয়াল

এই টিউটোরিয়ালে আমরা একটি কমান্ড-লাইন অ্যাপ্লিকেশন তৈরি করব, যা একটিমাত্র ডকুমেন্ট সম্পর্কে প্রশ্নের উত্তর দেয়। আমরা Python, ChromaDB এবং Perplexity API ব্যবহার করব।

এর লক্ষ্য প্রোডাকশন-উপযোগী কোনো RAG সিস্টেম তৈরি করা নয়। বরং এটি নতুনদের উপযোগী একটি টিউটোরিয়াল, যার উদ্দেশ্য বাস্তবে একটি প্রাথমিক RAG আর্কিটেকচার কীভাবে কাজ করে তা তুলে ধরা।

ধাপ ১: সফটওয়্যার ইনস্টল করুন

নিশ্চিত করুন যে আপনার কম্পিউটারে নিচের সফটওয়্যারগুলো ইনস্টল করা আছে এবং আপনার একটি Perplexity API অ্যাকাউন্ট রয়েছে:

  • Python: এটি সেই প্রোগ্রামিং ভাষা, যা দিয়ে আমরা অর্কেস্ট্রেটর তৈরি করব। এই অর্কেস্ট্রেটর এমবেডিং মডেল, ChromaDB এবং Perplexity-এর মধ্যে ডেটার প্রবাহ সমন্বয় করবে।
  • Visual Studio: আমরা কোড এডিটর হিসেবে Visual Studio ব্যবহার করব। ইনস্টল করার পর Extensions প্যানেল খুলুন এবং Python এক্সটেনশন ডাউনলোড করুন।
  • Perplexity API অ্যাকাউন্ট: Perplexity এমবেডিং মডেল (যা আপনার ডেটাকে ভেক্টর এমবেডিং-এ রূপান্তর করে) এবং সম্প্রসারিত প্রম্পট প্রক্রিয়া করার LLM—দুটিই সরবরাহ করবে। এর জন্য পেইড অ্যাকাউন্টের প্রয়োজন নেই, তবে সামান্য কিছু ক্রেডিট খরচ হবে।

ধাপ ২: একটি প্রজেক্ট ফোল্ডার তৈরি করুন

প্রথমে rag-project নামে একটি ফোল্ডার তৈরি করুন এবং File > Open Folder নির্বাচন করে সেটি VS Code-এ খুলুন। এরপর Terminal > New Terminal-এর মাধ্যমে ইন্টিগ্রেটেড টার্মিনাল খুলুন।

একটি ভার্চুয়াল Python এনভায়রনমেন্ট তৈরি করতে নিচের কমান্ডটি লিখুন:

bash
py -3.12 -m venv .venv

এখন আপনাকে চারটি Python লাইব্রেরি ইনস্টল করতে হবে: perplexityai, chromadb, python-dotenv এবং numpy। Perplexity SDK-এর মাধ্যমে আপনি API ব্যবহার করে Perplexity-এর মডেলগুলোর সঙ্গে সংযোগ করতে পারবেন। ChromaDB ভেক্টর ডেটাবেস তৈরি করে এবং এটি লোকালি চলবে। Python-dotenv একটি লোকাল ফাইল থেকে আপনার API কী নিরাপদে লোড করে, আর ইনজেশন প্রক্রিয়ার সময় NumPy প্রয়োজন হয়।

নিচের কমান্ড দিয়ে এগুলো ইনস্টল করুন:

bash
.\.venv\Scripts\python.exe -m pip install perplexityai chromadb python-dotenv numpy

ধাপ ৩: আপনার ফাইলগুলো সেট আপ করুন

rag-project-এ (প্রজেক্ট রুট) নিচের ফাইলগুলো যোগ করতে Explorer সাইডবারে New File… নির্বাচন করুন:

  • index.py: এটি সেই অ্যাপ্লিকেশন, যা আপনার ডকুমেন্ট ইনডেক্স করবে। আরও টেক্সট যোগ করতে আপনি এটি আবার চালাতে পারেন।
  • rag.py: এটি সেই Python অ্যাপ্লিকেশন, যা অর্কেস্ট্রেটর হিসেবে কাজ করবে।
  • document.txt: এতে সেই ডকুমেন্টেশন থাকবে, যা আপনি একটি ভেক্টর ডেটাবেসে রূপান্তর করবেন।
  • .env: এখানে আপনি আপনার Perplexity API কী রাখবেন।

.env-এ নিচের অংশটি লিখুন:

plaintext
PERPLEXITY_API_KEY=your_api_key_here

your_api_key_here-এর জায়গায় আপনার আসল কী বসান। এ জন্য আপনাকে Perplexity API Console-এর হোম ড্যাশবোর্ডে গিয়ে Create an API key নির্বাচন করতে হবে। এই API কী গোপন রাখুন।

আমরা দুটি মডেল ব্যবহার করব: ChromaDB-তে আপলোড করার আগে আমাদের ডকুমেন্টেশন এমবেড করতে Perplexity-এর pplx-embed-v1-0.6b, এবং সংগৃহীত তথ্য প্রক্রিয়া করতে GPT-5.6-Luna (Perplexity-এর API-এর মাধ্যমে অ্যাক্সেস করা)।

document.txt-এ সেই টেক্সট যোগ করুন, যা আপনার RAG পাইপলাইন সংগ্রহ করবে। হাতের কাছে কোনো ডকুমেন্ট না থাকলে এই টিউটোরিয়ালের জন্য Project Gutenberg থেকে উইলিয়াম ব্লেকের Songs of Innocence and of Experience ব্যবহার করুন। এটি পাবলিক ডোমেইনে থাকা একটি ছোট ও সহজবোধ্য লেখা।

ধাপ ৪: ইনডেক্সিং প্রোগ্রাম লিখুন

নিচের কোডটি কপি করে index.py-এ পেস্ট করুন। প্রতিটি উপশিরোনামে পরবর্তী কোড অংশটি কী করে তার সংক্ষিপ্ত ব্যাখ্যা দেওয়া আছে। এই প্রোগ্রামটি Perplexity-এর এমবেডিং মডেল pplx-embed-v1-0.6b এবং NumPy লাইব্রেরি ব্যবহার করে আপনার সোর্স ম্যাটেরিয়ালকে ভেক্টর এমবেডিং-এ রূপান্তর করবে এবং সেগুলো একটি ChromaDB ডেটাবেসে সংরক্ষণ করবে।

প্রোগ্রামটি যা করে:

  1. document.txt খোলে।
  2. টেক্সটকে পরস্পর ওভারল্যাপ করা চাঙ্কে ভাগ করে।
  3. সেই চাঙ্কগুলো Perplexity-এর pplx-embed-v1-0.6b এমবেডিং মডেলে পাঠায়।
  4. কম্পিউটিং ফাংশনের Python লাইব্রেরি NumPy ব্যবহার করে ফেরত আসা ভেক্টরগুলো ডিকোড ও নরমালাইজ করে।
  5. ভেক্টর ও মূল চাঙ্কগুলো একটি ChromaDB ডেটাবেসে সংরক্ষণ করে (এটি আপনার প্রজেক্ট ডিরেক্টরিতে দেখতে পাবেন)।

এটি এমনভাবে সেট আপ করা হয়েছে, যাতে প্রতিবার চালানোর সময় আপনার ডকুমেন্ট নতুন করে ইনডেক্স না হয়। আপনি document.txt-এ নতুন তথ্য যোগ করলে এটি শুধু নতুন টেক্সট এমবেড করবে।

python
from pathlib import Path from collections import defaultdict, deque from hashlib import sha256 import base64 import numpy as np import chromadb from dotenv import load_dotenv from perplexity import Perplexity # 1. Connect to Perplexity and ChromaDB load_dotenv() ai = Perplexity() db = chromadb.PersistentClient(path="./rag_database_perplexity") collection = db.get_or_create_collection( name="documents", metadata={"hnsw:space": "cosine"} ) # Convert Perplexity's encoded embeddings into numerical vectors def decode_embedding(encoded): vector = np.frombuffer(base64.b64decode(encoded), dtype=np.int8).astype(np.float32) norm = np.linalg.norm(vector) if norm == 0: raise ValueError("Received a zero-length embedding vector.") return (vector / norm).tolist() # 2. Read the document and split it into chunks text = Path("document.txt").read_text(encoding="utf-8") words = text.split() chunk_size = 180 overlap = 30 step = chunk_size - overlap chunks = [" ".join(words[i:i + chunk_size]) for i in range(0, len(words), step)] if not chunks: raise ValueError("document.txt is empty.") # 3. Retrieve the chunks already stored in ChromaDB existing = collection.get(include=["documents"]) stored_chunks = defaultdict(deque) existing_ids = set(existing["ids"]) for chunk_id, document in zip(existing["ids"], existing["documents"]): stored_chunks[document].append(chunk_id) # 4. Identify unchanged and new chunks new_chunks = [] new_ids = [] kept_ids = set() unchanged = 0 for chunk in chunks: if stored_chunks[chunk]: chunk_id = stored_chunks[chunk].popleft() kept_ids.add(chunk_id) unchanged += 1 else: chunk_hash = sha256(chunk.encode("utf-8")).hexdigest() chunk_id = f"chunk-{chunk_hash}" suffix = 1 while chunk_id in existing_ids or chunk_id in kept_ids or chunk_id in new_ids: chunk_id = f"chunk-{chunk_hash}-{suffix}" suffix += 1 new_chunks.append(chunk) new_ids.append(chunk_id) kept_ids.add(chunk_id) # 5. Generate embeddings in batches of up to 100 chunks batch_size = 100 for i in range(0, len(new_chunks), batch_size): batch_chunks = new_chunks[i:i + batch_size] batch_ids = new_ids[i:i + batch_size] embeddings = ai.embeddings.create( model="pplx-embed-v1-0.6b", input=batch_chunks, encoding_format="base64_int8" ) vectors = [decode_embedding(item.embedding) for item in embeddings.data] # 6. Store each batch in ChromaDB collection.upsert( ids=batch_ids, documents=batch_chunks, embeddings=vectors ) print(f"Indexed batch {(i // batch_size) + 1}") # 7. Remove outdated chunks old_ids = [chunk_id for chunk_id in existing["ids"] if chunk_id not in kept_ids] if old_ids: collection.delete(ids=old_ids) # 8. Display indexing results print("Indexing complete!") print("Unchanged chunks:", unchanged) print("New or modified chunks:", len(new_chunks)) print("Removed chunks:", len(old_ids)) print("Total stored chunks:", collection.count())

ধাপ ৫. RAG সিস্টেমের জন্য অর্কেস্ট্রেটর লিখুন

নিচের কোডটি কপি করে rag.py-এ পেস্ট করুন। এটি একটি সম্পূর্ণ কিন্তু ন্যূনতম RAG বাস্তবায়ন, যা Perplexity SDK এবং ChromaDB-এর লোকাল ভেক্টর ডেটাবেস ফাংশনালিটি ব্যবহার করে।

প্রোগ্রামটি চালালে যা ঘটবে:

  1. Perplexity এবং আপনার নতুন ChromaDB ডেটাবেসের সঙ্গে সংযোগ স্থাপন করে।
  2. ডেটাবেসে ইনডেক্স করা ডকুমেন্ট আছে কি না তা যাচাই করে।
  3. ব্যবহারকারীর কাছ থেকে একটি প্রশ্ন গ্রহণ করে।
  4. প্রশ্নটি Perplexity-এর এমবেডিং মডেলে পাঠায়।
  5. NumPy ব্যবহার করে প্রাপ্ত এমবেডিং ডিকোড ও নরমালাইজ করে।
  6. সবচেয়ে সাদৃশ্যপূর্ণ তিনটি ডকুমেন্ট চাঙ্কের জন্য ChromaDB-তে অনুসন্ধান করে।
  7. সংগৃহীত চাঙ্ক এবং ব্যবহারকারীর প্রশ্ন নিয়ে একটি প্রম্পট তৈরি করে।
  8. Perplexity-এর Agent API-এর মাধ্যমে প্রম্পটটি GPT-5.6 Luna-তে পাঠায়।
  9. উত্তর প্রদর্শন করে এবং পরবর্তী প্রশ্নের জন্য অপেক্ষা করে।
python
import base64 import numpy as np import chromadb from dotenv import load_dotenv from perplexity import Perplexity # 1. Connect to Perplexity and the existing ChromaDB database load_dotenv() ai = Perplexity() db = chromadb.PersistentClient(path="./rag_database_perplexity") collection = db.get_collection("documents") # Convert Perplexity's encoded embeddings into numerical vectors def decode_embedding(encoded): vector = np.frombuffer(base64.b64decode(encoded), dtype=np.int8).astype(np.float32) norm = np.linalg.norm(vector) if norm == 0: raise ValueError("Received a zero-length embedding vector.") return (vector / norm).tolist() # 2. Check that the database contains indexed documents count = collection.count() if count == 0: raise ValueError("The database is empty. Run index.py first.") print("Connected to existing ChromaDB database.") print("Stored chunks:", count) # 3. Accept questions from the user while True: question = input("\nAsk a question (or type exit): ") if question.lower().strip() == "exit": break if not question.strip(): continue # 4. Convert the question into a Perplexity embedding question_response = ai.embeddings.create( model="pplx-embed-v1-0.6b", input=[question], encoding_format="base64_int8" ) question_vector = decode_embedding(question_response.data[0].embedding) # 5. Retrieve the most similar document chunks from ChromaDB results = collection.query( query_embeddings=[question_vector], n_results=min(3, count) ) context = "\n\n".join(results["documents"][0]) # 6. Construct a prompt and send it to the fixed LLM response = ai.responses.create( model="openai/gpt-5.6-luna", instructions=( "Answer using only the supplied document excerpts. " "Do not use external information. " "If the answer is not present, say you don't know." ), input=f"Document excerpts:\n{context}\n\nQuestion: {question}" ) # 7. Display the answer print("\nAnswer:\n", response.output_text)

ধাপ ৬: অ্যাপ্লিকেশনগুলো চালান

document.txt-এর কনটেন্ট এমবেড করতে VS Code PowerShell টার্মিনালে নিচের কমান্ডটি লিখুন:

bash
.\.venv\Scripts\python.exe index.py

আপনার ডকুমেন্ট সফলভাবে ইনডেক্স হলে আপনি এর মতো একটি আউটপুট দেখতে পাবেন:

plaintext
Indexing complete! Unchanged chunks: 0 New or modified chunks: 58 Removed chunks: 0 Total stored chunks: 58

এবার মূল অর্কেস্ট্রেটর অ্যাপ্লিকেশনটি চালানোর পালা। এই কমান্ডটি লিখুন:

bash
.\.venv\Scripts\python.exe rag.py

এটি সফলভাবে চললে আপনি নিচের অংশটি দেখতে পাবেন:

plaintext
Connected to existing ChromaDB database. Stored chunks: 58 Ask a question (or type exit):

এখন আপনি এমন প্রশ্ন করতে পারবেন, যার উত্তর আপনার তৈরি করা ভেক্টর ডেটাবেস থেকে নেওয়া হবে, যেমন:

plaintext
Ask a question (or type exit): What animals does William Blake talk about? Answer: The excerpts mention sheep, lambs, birds, beasts, wolves, tigers, and a lion.

ধাপ ৭: আপনি কী তৈরি করেছেন তা বুঝুন

আপনার তৈরি সিস্টেমে প্রতিটি RAG আর্কিটেকচারে থাকা দুটি মূল পাইপলাইন রয়েছে: একটি ইনডেক্সিং বা “ইনজেশন” পাইপলাইন এবং একটি রিট্রিভাল ও জেনারেশন পাইপলাইন।

আপনার বেসিক RAG বাস্তবায়ন এখন নিচের সবকিছু করে:

  • ভেক্টর স্টোরেজ: আপনার নলেজ ফাইলের ভিত্তিতে এমবেডিংগুলো আপনার লোকাল এনভায়রনমেন্টের ChromaDB ডেটাবেসে সংরক্ষিত হয়।
  • ইনক্রিমেন্টাল ইনডেক্সিং: অপরিবর্তিত ডকুমেন্ট চাঙ্কগুলো আবার এমবেড করা হয় না, এবং আপনি যখন খুশি ডকুমেন্ট আপডেট করতে পারেন।
  • সিমান্টিক রিট্রিভাল: ChromaDB ভেক্টর সাদৃশ্যের ভিত্তিতে চাঙ্কগুলো সংগ্রহ করে (অর্কেস্ট্রেটরের মাধ্যমে শুরু হয়)।
  • উৎসনির্ভর উত্তর তৈরি: LLM সংগৃহীত অনুচ্ছেদগুলো কনটেক্সট হিসেবে গ্রহণ করে এবং সেগুলো উত্তরে অন্তর্ভুক্ত করে।
  • স্বতন্ত্র ইনডেক্সিং ও কোয়েরি: আপনার নলেজ ফাইলের সম্পূর্ণ টেক্সট পুনরায় প্রক্রিয়া না করেই আপনি প্রশ্ন করতে পারবেন।
  • API-ভিত্তিক মডেল সংযোগ: সব উত্তর আপনার মেশিনে চলা কোনো মডেলের বদলে Perplexity-এর মাধ্যমে GPT-5.6 Luna ব্যবহার করে তৈরি হয়।

পরবর্তী ধাপ: এই বাস্তবায়নকে কীভাবে আরও এগিয়ে নেবেন

এই টিউটোরিয়ালের লক্ষ্য একটি সহজ, বেসিক বাস্তবায়ন তৈরি করা। এতে আধুনিক সিস্টেমে থাকা RAG আর্কিটেকচারের কিছু মূল উপাদান অন্তর্ভুক্ত রয়েছে। আপনি আরও এগোতে চাইলে নানা উপায়ে এর ওপর ভিত্তি করে কাজ করতে পারেন।

আপনার বাস্তবায়নের পরিসর বাড়ানোর জন্য কিছু ধারণা:

  • LangChain নিয়ে পরীক্ষা করুন: LangChain সবচেয়ে জনপ্রিয় ওপেন-সোর্স অর্কেস্ট্রেশন ফ্রেমওয়ার্কগুলোর একটি। এতে জটিল RAG পাইপলাইন চালাতে সক্ষম অ্যাপ তৈরির জন্য আগে থেকে তৈরি কম্পোনেন্ট রয়েছে।
  • সার্চ ফাংশনালিটি সম্প্রসারণ করুন: ডেনস ভেক্টর সার্চের সঙ্গে BM25-এর মতো লেক্সিক্যাল (কিওয়ার্ড) সার্চ যুক্ত করুন। Perplexity Search API-এর মাধ্যমে ওয়েব সার্চ যোগ করলে আপনি সাম্প্রতিক ডেটার ভিত্তিতেও উত্তর দিতে পারবেন।
  • একটি রির‍্যাঙ্কিং মডেল যোগ করুন: এমন একটি রির‍্যাঙ্কিং মডেল যুক্ত করুন, যা প্রাথমিক প্রম্পটের সাপেক্ষে সংগৃহীত অনুচ্ছেদগুলোর র‍্যাঙ্ক নির্ধারণ করে এবং LLM-কে দেওয়া ইনপুট কনটেক্সটে অন্তর্ভুক্ত করার জন্য সবচেয়ে প্রাসঙ্গিকগুলো বেছে নেয়।
  • একটি অ্যাডাপটিভ RAG সিস্টেম তৈরি করুন: একটি মডুলার RAG সিস্টেমে কোন রিট্রিভাল পদ্ধতি ব্যবহার করা হবে তা নির্ধারণ করতে অ্যাডাপটিভ RAG একটি LLM অথবা একটি ক্লাসিফায়ার (অর্কেস্ট্রেটরের ভেতরের একটি কম্পোনেন্ট) ব্যবহার করে। আরও উন্নত RAG বাস্তবায়ন সম্পর্কে জানার জন্য এমন একটি সিস্টেম তৈরি করা একটি ভালো উপায়।

এগুলো জটিল শোনালেও মনে রাখবেন, Perplexity-এর মতো মূলধারার AI প্ল্যাটফর্মগুলো উন্নত কোডিং সহায়তা দিতে পারে। ব্যক্তিগত প্রজেক্ট ও পরীক্ষা-নিরীক্ষার জন্য এগুলো চমৎকার, এবং খরচও তুলনামূলকভাবে কম রাখা যায়।

দ্রষ্টব্য: এই টিউটোরিয়ালে GPT-5.6 Luna ব্যবহার করা হয়েছে। মডেলের প্রাপ্যতা পরিবর্তন হতে পারে, তাই আপনাকে API কলটি আপডেট করতে হতে পারে।