Part ০৪
RAG আর Knowledge System
Production RAG-এর পেছনের দশটি বিষয়ের citation-সহ রেফারেন্স: chunking, vector database, hybrid search, query transformation, multi-hop আর agentic retrieval, GraphRAG, reranking, metadata filtering, document parsing, আর multimodal retrieval। প্রতিটি section তিন ভাবে লেখা: engineer-এর ভার্সন (diagram, code, গবেষণার ফলাফল), সাধারণ পাঠকের ভার্সন (সহজ ভাষায়, উপমা দিয়ে), আর বাংলা ব্যাখ্যা। প্রতিটি টপিকের শেষে বাংলা ব্যাখ্যাও আছে।
১০টি section · ৬৮টি source · তিনভাবে ব্যাখ্যা
01
Chunking: fixed, semantic, structural আর late chunking
Retrieval কাজ করে document-এর টুকরো নিয়ে, পুরো document নিয়ে নয়। তাই লেখাটা কীভাবে কাটবেন, তার উপরই ঠিক হয় retriever কী ফেরত দিতে পারবে। Chunk বেশি বড় হলে উত্তর বাড়তি লেখার ভিড়ে হারিয়ে যায়। বেশি ছোট হলে বাক্যটির অর্থ যে context দিয়েছিল, তা চলে যায়। এখানে চার ধরন আছে: fixed-size (overlap আর recursive separator-সহ), structural (header আর বাক্য), semantic (embedding দিয়ে ঠিক করা ভাঙার জায়গা) আর late chunking (transformer-এর পরে ভাঙা)। সাথে Anthropic-এর contextual retrieval, যা প্রতিটি chunk-এর আগে একটি ব্যাখ্যা জুড়ে হারানো context ফিরিয়ে আনে।[1][2]
অনুশীলন · ১টি task
যেকোনো free AI chat খোলো: ChatGPT · Claude · Gemini
অনুশীলন কীভাবে করবে
- নতুন chat মানে একদম নতুন কথোপকথন, আগের কোনো history নেই। ChatGPT, Claude বা Gemini-তে New chat-এ click করো। সাধারণত এটা উপরে বাঁ দিকে থাকে।
- একই chat মানে: যে chat খোলা আছে, সেখানেই লিখতে থাকো। আগে যা পাঠিয়েছ, AI তা মনে রাখে।
- Prompt ব্যবহার করতে: Copy-তে click করো, chat-এর message box-এ click করো, paste করো (Ctrl+V, বা phone-এ চেপে ধরে রাখো), তারপর Enter চাপো।
- AI-এর উত্তর প্রতিবার একটু আলাদা হয়। তোমার উত্তর example-এর সাথে হুবহু মিলতে হবে না। একই ধারণা আছে কি না, সেটা দেখো।
- শুধু বানানো data ব্যবহার করো। নিজের বা অন্যের ব্যক্তিগত তথ্য chat-এ paste করবে না।
Task ১
দেখো, ভুল জায়গায় কাটলে উত্তর কীভাবে নষ্ট হয়
এটা কেন দরকার
তুমি যখন একটা support chatbot বানাবে, তোমার document ছোট ছোট টুকরো করে কাটা হবে, যাকে chunk বলে। কাটাটা যদি কোনো তথ্যের মাঝখানে পড়ে, bot ভুল উত্তর দিতে পারে, বা কোনো উত্তরই দিতে পারবে না।
ধাপ ১
নতুন chatএই prompt টা copy করো, chat-এ paste করে Enter চাপো। এখানে AI-কে একটা chunk দেওয়া হয়েছে, যেটা বাক্যের মাঝখানে কাটা।
Prompt তুমি একটা support bot। শুধু নিচের chunk দেখে প্রশ্নের উত্তর দাও। chunk-এ উত্তর না থাকলে লেখো "যথেষ্ট তথ্য নেই"। Chunk (প্রতি 90 অক্ষর পরপর কাটা, এটা 2 নম্বর chunk): "দিনের মধ্যে। Pro plan-এর customer-রা 30 দিনের মধ্যে refund চাইতে পারবে। Refund মূল payment method-এ 5 কর্মদিবসে ফেরত দেওয়া হয়।" প্রশ্ন: Basic plan-এর customer-রা কত দিনের মধ্যে refund চাইতে পারবে?
তুমি দেখবে: বেশিরভাগ chat লিখবে যথেষ্ট তথ্য নেই, কারণ Basic plan-এর সংখ্যাটা নেই। কয়েকটা model ভুল করে 30 বলতে পারে।
Example উত্তর
যথেষ্ট তথ্য নেই
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ২
নতুন chatএই prompt টা copy করো, paste করে Enter চাপো। এবার chunk-টা বাক্যের শেষে কাটা।
Prompt তুমি একটা support bot। শুধু নিচের chunk দেখে প্রশ্নের উত্তর দাও। chunk-এ উত্তর না থাকলে লেখো "যথেষ্ট তথ্য নেই"। Chunk (বাক্যের শেষে কাটা): "Zentro Cloud Refund Policy. Basic plan-এর customer-রা কেনার 14 দিনের মধ্যে পুরো refund চাইতে পারবে। Pro plan-এর customer-রা 30 দিনের মধ্যে refund চাইতে পারবে।" প্রশ্ন: Basic plan-এর customer-রা কত দিনের মধ্যে refund চাইতে পারবে?
তুমি দেখবে: 14 দিন। পুরো তথ্যটা একটা chunk-এর ভেতরেই আছে।
Example উত্তর
Basic plan-এর customer-রা 14 দিনের মধ্যে refund চাইতে পারবে।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ৩
একই chatধাপ ১-এর chunk-টা আবার দেখো। কোন কোন শব্দ সেখানে নেই, লিখে রাখো।
তুমি দেখবে: chunk-টা শুরু হয়েছে দিনের মধ্যে দিয়ে। সংখ্যা 14 আর Basic plan শব্দ দুটো নেই।
এইমাত্র কী হলো
একটা chatbot তোমার পুরো document পড়ে না। সে ছোট টুকরো, মানে chunk, খোঁজে, আর সবচেয়ে ভালো কয়েকটা AI-কে পাঠায়। fixed-size cutter নির্দিষ্ট সংখ্যক অক্ষর পরপর কাটে, তথ্যের মাঝখানে হলেও। এখানে কাটায় 14 হারিয়ে গেছে, তাই AI উত্তর দিতে পারেনি। যে cutter বাক্যের শেষে থামে, সে তথ্যটা পুরো রাখে।
কাজ শেষ, যখন তোমার কাছে দুটো উত্তর আছে: একটাতে 14 সংখ্যা নেই, আরেকটাতে 14 দিন আছে।
নিজেকে যাচাই করোপুরো policy document-এ থাকা সত্ত্বেও ধাপ ১ কেন ব্যর্থ হলো?উত্তর দেখো
cutter বাক্যটা ভেঙে ফেলেছে, তাই সংখ্যা আর plan-এর নাম আলাদা chunk-এ চলে গেছে। search শুধু একটা chunk AI-কে পাঠিয়েছে। যে cutter বাক্যের শেষে কাটে, সে তথ্যটা এক টুকরোতেই রাখে।
ভিডিও দেখো · ৩টি
The 5 Levels Of Text Splitting For Retrieval Greg Kamradt
Semantic Chunking - 3 Methods for Better RAG James Briggs
Late chunking improves context recall in RAG pipelines Weaviate vector database
02
Vector database: Qdrant, Pinecone, Weaviate, pgvector, Chroma, Milvus-এর তুলনা
Vector database embedding জমা রাখে, আর “জমানো কোন vector-গুলো এটির সবচেয়ে কাছে?” — এই প্রশ্নের উত্তর দেয়, প্রতিটি row-র সাথে তুলনা না করেই। লক্ষ লক্ষ vector-এ exact search খুব ধীর, তাই এসব system একটি approximate nearest neighbour (ANN) index বানায়, সবচেয়ে বেশি HNSW graph।[6] জনপ্রিয় ছয়টি option-এর মূল ধারণা প্রায় এক। পার্থক্য deployment model, index-এর বিকল্প, hybrid search-এর সাপোর্ট আর tenant আলাদা রাখার উপায়ে। নিচের feature table শুধু আমার পড়া vendor documentation থেকে বানানো। “কখন কোনটা বাছবেন” পরামর্শটা আমার নিজের সংশ্লেষণ, আর সেটা সেভাবেই লেখা আছে।
অনুশীলন · ১টি task
যেকোনো free AI chat খোলো: ChatGPT · Claude · Gemini
অনুশীলন কীভাবে করবে
- নতুন chat মানে একদম নতুন কথোপকথন, আগের কোনো history নেই। ChatGPT, Claude বা Gemini-তে New chat-এ click করো। সাধারণত এটা উপরে বাঁ দিকে থাকে।
- একই chat মানে: যে chat খোলা আছে, সেখানেই লিখতে থাকো। আগে যা পাঠিয়েছ, AI তা মনে রাখে।
- Prompt ব্যবহার করতে: Copy-তে click করো, chat-এর message box-এ click করো, paste করো (Ctrl+V, বা phone-এ চেপে ধরে রাখো), তারপর Enter চাপো।
- AI-এর উত্তর প্রতিবার একটু আলাদা হয়। তোমার উত্তর example-এর সাথে হুবহু মিলতে হবে না। একই ধারণা আছে কি না, সেটা দেখো।
- শুধু বানানো data ব্যবহার করো। নিজের বা অন্যের ব্যক্তিগত তথ্য chat-এ paste করবে না।
Task ১
তিন রকমে সবচেয়ে কাছের point খোঁজো
এটা কেন দরকার
তুমি যখন document search বানাবে, প্রতিটা text একটা সংখ্যার তালিকা (vector) হয়ে যাবে, আর vector database সবচেয়ে কাছেরগুলো খুঁজে দেবে। কাছে মাপার কোন উপায় বেছে নিলে, সেটা বদলে দিতে পারে কোন document ফিরে আসবে।
ধাপ ১
নতুন chatএই prompt টা copy করো, chat-এ paste করে Enter চাপো। তিনটা measure-এর প্রতিটায় সবচেয়ে কাছের point কোনটা, লিখে রাখো।
Prompt এখানে 5টা point আছে, (x, y) আকারে: P1 = (2, 2) P2 = (10, 9) P3 = (1, 0.5) P4 = (0, 3) P5 = (-1, -1) query point হলো q = (1, 1)। প্রতিটা point-এর জন্য তিনটা সংখ্যা হিসাব করো: (a) q থেকে L2 distance (সরল রেখার দূরত্ব; যত ছোট, তত কাছে) (b) q-এর সাথে cosine similarity (দিক কতটা কাছাকাছি; যত বড়, তত কাছে) (c) q-এর সাথে dot product (দিক আর দৈর্ঘ্য মেশানো; যত বড়, তত কাছে) দশমিকের পর 3 ঘর দিয়ে একটা table দেখাও। তারপর তিনটার প্রতিটার জন্য সবচেয়ে কাছের point-এর নাম বলো।
তুমি দেখবে: 5 সারির একটা table। L2 অনুযায়ী সবচেয়ে কাছে P3, cosine অনুযায়ী P1, আর dot product অনুযায়ী P2। অর্থাৎ তিনটা আলাদা winner।
Example উত্তর
Point | L2 | Cosine | Dot P1 | 1.414 | 1.000 | 4.000 P2 | 12.042 | 0.999 | 19.000 P3 | 0.500 | 0.949 | 1.500 P4 | 2.236 | 0.707 | 3.000 P5 | 2.828 | -1.000 | -2.000 L2 অনুযায়ী সবচেয়ে কাছে: P3। cosine অনুযায়ী: P1। dot product অনুযায়ী: P2।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ২
একই chatএই prompt টা copy করো, paste করে Enter চাপো। প্রতিটা measure-এ সবচেয়ে কাছের point আবার লিখে রাখো।
Prompt এবার প্রতিটা point-কে তার নিজের দৈর্ঘ্য দিয়ে ভাগ করো, যাতে প্রতিটা point-এর দৈর্ঘ্য 1 হয়। q-এর সাথেও একই করো। তারপর L2 distance, cosine similarity আর dot product দিয়ে table আবার বানাও, দশমিকের পর 3 ঘর দিয়ে। তিনটার প্রতিটার জন্য সবচেয়ে কাছের point-এর নাম বলো।
তুমি দেখবে: এবার তিনটা measure-ই একই point বাছবে, P1। table-এ P1 আর P2-এর সংখ্যা কাছাকাছি।
Example উত্তর
Point | L2 | Cosine | Dot P1 | 0.000 | 1.000 | 1.000 P2 | 0.053 | 0.999 | 0.999 P3 | 0.320 | 0.949 | 0.949 P4 | 0.765 | 0.707 | 0.707 P5 | 2.000 | -1.000 | -1.000 এখন তিনটা measure-ই একই point বেছেছে: P1।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
এইমাত্র কী হলো
প্রতিটা measure-এর নিজের মতো করে কাছে বোঝার উপায় আছে। L2 হলো সরল রেখার দূরত্ব, cosine শুধু দিক দেখে, আর dot product দৈর্ঘ্যকেও গুরুত্ব দেয়। P2 অনেক দূরে কিন্তু লম্বা, তাই শুধু dot product তাকে বাছে। প্রতিটা point-কে দৈর্ঘ্য 1-এ নামিয়ে আনলে তিনটা measure-ই একমত হয়।
কাজ শেষ, যখন তোমার কাছে ধাপ ১-এর 3টা আলাদা winner আর ধাপ ২-এর 1টা একই winner আছে।
নিজেকে যাচাই করোতোমার embedding model (যে model text থেকে vector বানায়) cosine similarity দিয়ে train করা। vector database-এ কোন measure ব্যবহার করবে?উত্তর দেখো
cosine ব্যবহার করবে, বা দৈর্ঘ্য 1-এ নামানো vector-এ dot product, কারণ দুটোর ranking একই। L2 বা সাধারণ dot product দৈর্ঘ্য দেখে বেছে ফেলতে পারে, তখন database আলাদা document ফেরত দেবে।
ভিডিও দেখো · ৩টি
Vector databases are so hot right now. WTF are they? Fireship
Qdrant Essentials | Fast Vector Search with Qdrant HNSW Indexing Qdrant Vector Search
The Weaviate Vector Database — Bring AI-native applications to life. CMU Database Group
03
Hybrid search (BM25 + vector) আর reciprocal rank fusion
Keyword search (BM25) আর embedding search উল্টো উল্টো জায়গায় ব্যর্থ হয়। BM25-এর জন্য query-র ঠিক শব্দগুলো লেখায় থাকতে হয়। Dense vector আবার বিরল identifier, নাম আর code ঝাপসা করে ফেলতে পারে। Hybrid search দুটোই চালিয়ে ফলাফল মিলিয়ে দেয়। সবচেয়ে প্রচলিত মেলানোর উপায় reciprocal rank fusion (RRF): এটা কাঁচা score দেখে না, শুধু প্রতিটি তালিকায় document-এর ranking মিলিয়ে নেয়।[16] সমস্যাটা হলো, দুই retriever-এর score আলাদা মাপের, আর rank-ভিত্তিক fusion ঠিক এই সমস্যাটাই এড়িয়ে যায়।
অনুশীলন · ১টি task
যেকোনো free AI chat খোলো: ChatGPT · Claude · Gemini
অনুশীলন কীভাবে করবে
- নতুন chat মানে একদম নতুন কথোপকথন, আগের কোনো history নেই। ChatGPT, Claude বা Gemini-তে New chat-এ click করো। সাধারণত এটা উপরে বাঁ দিকে থাকে।
- একই chat মানে: যে chat খোলা আছে, সেখানেই লিখতে থাকো। আগে যা পাঠিয়েছ, AI তা মনে রাখে।
- Prompt ব্যবহার করতে: Copy-তে click করো, chat-এর message box-এ click করো, paste করো (Ctrl+V, বা phone-এ চেপে ধরে রাখো), তারপর Enter চাপো।
- AI-এর উত্তর প্রতিবার একটু আলাদা হয়। তোমার উত্তর example-এর সাথে হুবহু মিলতে হবে না। একই ধারণা আছে কি না, সেটা দেখো।
- শুধু বানানো data ব্যবহার করো। নিজের বা অন্যের ব্যক্তিগত তথ্য chat-এ paste করবে না।
Task ১
RRF দিয়ে দুটো search list মেলাও
এটা কেন দরকার
তুমি যখন help centre-এর জন্য search বানাবে, keyword search আর অর্থ দিয়ে search, দুটো আলাদা ranked list দেবে। তোমাকে দুটোকে এক list-এ মেলাতে হবে, আর মেলানোর নিয়মই ঠিক করে user আগে কী দেখবে।
ধাপ ১
নতুন chatএই prompt টা copy করো, chat-এ paste করে Enter চাপো। k = 60 আর k = 2-এর জন্য সবার উপরের document কোনটা, লিখে রাখো।
Prompt Reciprocal rank fusion (RRF) ranked list মেলানোর একটা উপায়। প্রতিটা document এই score পায়: যতগুলো list-এ document-টা আছে, প্রতিটার জন্য 1 / (k + rank) যোগ করো। Rank 1 মানে সবচেয়ে ভালো জায়গা। List 1, keyword search (সেরা আগে): A, B, E, C, G List 2, অর্থ দিয়ে search (সেরা আগে): D, G, B, F, A A থেকে G পর্যন্ত প্রতিটা document-এর score দুইবার হিসাব করো: একবার k = 60 দিয়ে, একবার k = 2 দিয়ে। দশমিকের পর 4 ঘর দিয়ে একটা table দেখাও। তারপর প্রতিটা k-এর জন্য চূড়ান্ত ranking দাও। দুটো document-এর score সমান হলে সেটা বলো।
তুমি দেখবে: 7 সারির একটা table। k = 60 হলে সবার উপরে B। k = 2 হলে সবার উপরে A। C আর F-এর score সমান, তারা একদম নিচে।
Example উত্তর
Doc | k=60 | k=2 A | 0.0318 | 0.4762 B | 0.0320 | 0.4500 C | 0.0156 | 0.1667 D | 0.0164 | 0.3333 E | 0.0159 | 0.2000 F | 0.0156 | 0.1667 G | 0.0315 | 0.3929 k=60 ranking: B, A, G, D, E, তারপর C আর F সমান। k=2 ranking: A, B, G, D, E, তারপর C আর F সমান।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ২
একই chatএই prompt টা copy করো, paste করে Enter চাপো। কোন search winner ঠিক করেছে, লিখে রাখো।
Prompt একটা search system 3টা document-কে এই score দিয়েছে। Keyword score (BM25): X = 14.2, Y = 9.8, Z = 2.1 অর্থের score (cosine): X = 0.61, Y = 0.83, Z = 0.88 প্রতিটা document-এর দুটো score যোগ করো, আর যোগফল দিয়ে ranking বানাও। দুটো search-এর মধ্যে কোনটা winner ঠিক করেছে? এই দুটো score যোগ করা কেন ঠিক নয়? ranking-এর পরে 3টা ছোট বাক্যে উত্তর দাও।
তুমি দেখবে: যোগফল X = 14.81, Y = 10.63, Z = 2.98। X জেতে, কারণ keyword score cosine score-এর চেয়ে অনেক বড়।
Example উত্তর
যোগফল অনুযায়ী ranking: X = 14.81, Y = 10.63, Z = 2.98। Keyword search winner ঠিক করেছে। তার score বড়, তাই cosine score প্রায় কোনো কাজেই লাগেনি। cosine বলছে Z সেরা, কিন্তু Z শেষে। দুটো score-এর scale আলাদা, তাই যোগ করা ঠিক নয়।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
এইমাত্র কী হলো
RRF একটা document-কে score দেয় প্রতিটা list-এ তার জায়গা দেখে, raw score দেখে নয়: 1 / (k + জায়গা)। k = 60 হলে যে document দুই list-এই উপরের দিকে (B), সে জেতে। k = 2 হলে প্রথম জায়গার দাম অনেক বেশি, তাই A জেতে। বিভিন্ন search tool আলাদা k ব্যবহার করে (Elasticsearch 60, Qdrant 2), তাই একই list থেকে আলাদা order আসতে পারে।
কাজ শেষ, যখন তোমার কাছে দুটো ranking আছে: k = 60 হলে B প্রথম, আর k = 2 হলে A প্রথম।
নিজেকে যাচাই করোRRF কেন raw score না নিয়ে প্রতিটা list-এ জায়গা ব্যবহার করে?উত্তর দেখো
Keyword score আর অর্থের score-এর scale আলাদা, তাই যোগ করা ঠিক নয়: বড় সংখ্যাই জিতে যায়। জায়গার scale সব list-এ একই।
ভিডিও দেখো · ৩টি
Hybrid Search Finds What Vectors Miss (RAG) Shane | LLM Implementation
Understanding Reciprocal Rank Fusion in Hybrid Search [Advanced RAG] TechViz - The Data Science Guy
Build your own Hybrid Search Abhishek Thakur
04
Query rewriting, expansion আর HyDE
User-এর query ছোট, অস্পষ্ট, আর উত্তর-দেওয়া document-এর ভাষা থেকে আলাদা। Query transformation retrieval-এর আগে একটি ধাপ বসায়, যা query-কে নতুন করে লেখে, বড় করে, একাধিক করে, এমনকি “উত্তর দিয়েও” ফেলে, যাতে retriever মেলানোর জন্য ভালো একটি string (বা vector) পায়। পরিচিত ধরনগুলো: HyDE[23], step-back prompting[24], Query2doc[25], RAG-Fusion[26] আর Rewrite-Retrieve-Read[27]। প্রতিটিতে একটি বাড়তি LLM call লাগে (latency আর খরচ), বিনিময়ে সঠিক chunk candidate-এর মধ্যে আসার সম্ভাবনা বাড়ে।
অনুশীলন · ১টি task
যেকোনো free AI chat খোলো: ChatGPT · Claude · Gemini
অনুশীলন কীভাবে করবে
- নতুন chat মানে একদম নতুন কথোপকথন, আগের কোনো history নেই। ChatGPT, Claude বা Gemini-তে New chat-এ click করো। সাধারণত এটা উপরে বাঁ দিকে থাকে।
- একই chat মানে: যে chat খোলা আছে, সেখানেই লিখতে থাকো। আগে যা পাঠিয়েছ, AI তা মনে রাখে।
- Prompt ব্যবহার করতে: Copy-তে click করো, chat-এর message box-এ click করো, paste করো (Ctrl+V, বা phone-এ চেপে ধরে রাখো), তারপর Enter চাপো।
- AI-এর উত্তর প্রতিবার একটু আলাদা হয়। তোমার উত্তর example-এর সাথে হুবহু মিলতে হবে না। একই ধারণা আছে কি না, সেটা দেখো।
- শুধু বানানো data ব্যবহার করো। নিজের বা অন্যের ব্যক্তিগত তথ্য chat-এ paste করবে না।
Task ১
বানানো একটা উত্তর দিয়ে search করো
এটা কেন দরকার
তুমি যখন একটা help-centre chatbot বানাবে, user অস্পষ্ট প্রশ্ন লিখবে, যেমন it keeps saying not allowed। help article-এ লেখা থাকবে অন্য শব্দ, যেমন permission denied, তাই keyword search সেগুলো মিস করে।
ধাপ ১
নতুন chatএই prompt টা copy করো, chat-এ paste করে Enter চাপো। কোন document জেতে, লিখে রাখো। এই prompt টা English-এ রাখা হয়েছে, কারণ এখানে English শব্দ মেলানো হবে।
Prompt You are a keyword search engine. Score each document by the number of different words it shares with the query. Ignore these small words: a, an, the, it, I, you, your, is, are, was, to, on, in, of, for, with, and, or, if, when, that, this, there, no. Show the shared words and the count for each document. Then name the best document. Query: "it keeps saying not allowed when I push" D1: Fixing HTTP 403 Forbidden on git push. Your access token lacks write permission. Create a new personal access token with the repo scope. D2: How to push a new branch. Run git push origin branch-name. If the terminal keeps saying there is no upstream, use --set-upstream. D3: Branch protection rules block direct pushes to main. Permission is denied for everyone except admins. Open a pull request instead. D4: Cleaning up old branches. Delete merged branches with git branch -d.
তুমি দেখবে: D2 জেতে, 3টা মেলা শব্দ নিয়ে (push, keeps, saying)। D1-এ আছে 1টা, আর D3 ও D4-এ 0। D2 শুধু push করা শেখায়, error ঠিক করা শেখায় না।
Example উত্তর
Shared words: D1: push = 1 D2: keeps, push, saying = 3 D3: none = 0 D4: none = 0 Best document: D2
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ২
নতুন chatএই prompt টা copy করো, paste করে Enter চাপো। তারপর AI যে passage লেখে, সেটা copy করো। এই prompt টা English-এ রাখা হয়েছে, কারণ এখানে English শব্দ মেলানো হবে।
Prompt Write a short passage (3 sentences) that could appear in a help-centre article answering this question: "it keeps saying not allowed when I push". The passage may contain guesses. Do not add a title or a comment.
তুমি দেখবে: 3 বাক্যের একটা passage, যেখানে permission, denied, forbidden, বা token-এর মতো শব্দ আছে।
Example উত্তর
If you see 'permission denied' or '403 Forbidden' when you push, your access token may not have write permission. The branch may also be protected, so direct pushes are blocked. Create a new token with the repo scope, or open a pull request instead.
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ৩
নতুন chatএই prompt টা copy করো। brackets-এর ভেতরের লেখাটা ধাপ ২-এর passage দিয়ে বদলাও। paste করে Enter চাপো। এই prompt টা English-এ রাখা হয়েছে, কারণ এখানে English শব্দ মেলানো হবে।
Prompt You are a keyword search engine. Score each document by the number of different words it shares with the query. Ignore these small words: a, an, the, it, I, you, your, is, are, was, to, on, in, of, for, with, and, or, if, when, that, this, there, no. Show the shared words and the count for each document. Then name the best document. Query: "[PASTE YOUR PASSAGE HERE]" D1: Fixing HTTP 403 Forbidden on git push. Your access token lacks write permission. Create a new personal access token with the repo scope. D2: How to push a new branch. Run git push origin branch-name. If the terminal keeps saying there is no upstream, use --set-upstream. D3: Branch protection rules block direct pushes to main. Permission is denied for everyone except admins. Open a pull request instead. D4: Cleaning up old branches. Delete merged branches with git branch -d.
তুমি দেখবে: এবার D1 বা D3 জেতে, আর D2 পিছিয়ে যায়। নিচের example passage-এ D1-এর 11টা, D3-এর 9টা, আর D2-এর 3টা মেলা শব্দ।
Example উত্তর
Shared words: D1: 403, access, create, forbidden, new, permission, push, repo, scope, token, write = 11 D2: branch, new, push = 3 D3: branch, denied, direct, instead, open, permission, pull, pushes, request = 9 D4: branch = 1 Best document: D1
তোমার উত্তরের ভাষা একটু আলাদা হবে।
এইমাত্র কী হলো
ছোট, অস্পষ্ট প্রশ্ন আর আসল উত্তর প্রায়ই আলাদা শব্দ ব্যবহার করে। HyDE-তে (বানানো উত্তর দিয়ে search) AI আগে একটা নকল উত্তর লেখে, আর তুমি প্রশ্নের বদলে সেই লেখা দিয়ে search করো। নকল উত্তরে ভুল details থাকতে পারে। কিন্তু সে সেই শব্দগুলো ব্যবহার করে যা আসল উত্তরে থাকে, যেমন permission আর denied, তাই D2-এর বদলে D1 আর D3 পাওয়া যায়।
কাজ শেষ, যখন তোমার কাছে দুটো winner আছে: মূল প্রশ্নে D2, আর বানানো passage-এ D1 বা D3।
নিজেকে যাচাই করোবানানো একটা উত্তর কেন মূল প্রশ্নের চেয়ে ভালো document খুঁজে পায়?উত্তর দেখো
বানানো উত্তরটা আসল উত্তরের ধরন আর শব্দে লেখা, তাই ছোট অস্পষ্ট প্রশ্নের চেয়ে সে সঠিক document-এর সাথে ভালো মেলে। তাতে ভুল details থাকতে পারে, কারণ search-এর শুধু শব্দ দরকার, তথ্য নয়।
ভিডিও দেখো · ৩টি
05
Multi-hop retrieval আর agentic retrieval
কিছু প্রশ্নের উত্তর একবার retrieval করে মেলে না: দ্বিতীয় search নির্ভর করে প্রথমটি কী পেল তার উপর। HotpotQA-র মতো multi-hop benchmark ঠিক এটাই পরীক্ষা করে (Wikipedia থেকে 113k প্রশ্ন-উত্তরের জোড়া, যেগুলোর জন্য একাধিক document নিয়ে reasoning লাগে, আর প্রতিটির সাথে বাক্য-স্তরের সহায়ক তথ্য আছে)।[28] Agentic retrieval-এ model নিজেই ঠিক করে retrieve করবে কি না, কী খুঁজবে, ফলাফল যথেষ্ট ভালো কি না, আর কখন থামবে। এর দাম: বেশি LLM call, বেশি latency, আর system debug করা কঠিন।
অনুশীলন · ১টি task
যেকোনো free AI chat খোলো: ChatGPT · Claude · Gemini
অনুশীলন কীভাবে করবে
- নতুন chat মানে একদম নতুন কথোপকথন, আগের কোনো history নেই। ChatGPT, Claude বা Gemini-তে New chat-এ click করো। সাধারণত এটা উপরে বাঁ দিকে থাকে।
- একই chat মানে: যে chat খোলা আছে, সেখানেই লিখতে থাকো। আগে যা পাঠিয়েছ, AI তা মনে রাখে।
- Prompt ব্যবহার করতে: Copy-তে click করো, chat-এর message box-এ click করো, paste করো (Ctrl+V, বা phone-এ চেপে ধরে রাখো), তারপর Enter চাপো।
- AI-এর উত্তর প্রতিবার একটু আলাদা হয়। তোমার উত্তর example-এর সাথে হুবহু মিলতে হবে না। একই ধারণা আছে কি না, সেটা দেখো।
- শুধু বানানো data ব্যবহার করো। নিজের বা অন্যের ব্যক্তিগত তথ্য chat-এ paste করবে না।
Task ১
AI agent-এর search tool সেজে দেখো
এটা কেন দরকার
তুমি যখন একটা research agent বানাবে, কিছু প্রশ্নের জন্য কয়েকবার search লাগবে, আর প্রতিটা search আগের result-এর উপর নির্ভর করে। agent-কে এটাও জানতে হবে কখন থামতে হবে।
ধাপ ১
নতুন chatএই prompt টা copy করো, chat-এ paste করে Enter চাপো। search-এর উত্তর এখনই দিও না।
Prompt তুমি একজন research agent। তুমি একটা tool ব্যবহার করতে পারো। Tool: search(query) company wiki থেকে একটা ছোট text ফেরত দেয়। নিয়ম: - শুধু একটা লাইনে উত্তর দাও: হয় SEARCH: <তোমার query> অথবা FINAL: <তোমার উত্তর>। - সর্বোচ্চ 4বার search করতে পারবে। - শুধু search result-এর তথ্য ব্যবহার করবে। অনুমান করবে না। প্রশ্ন: Kestrel payment API যে team বানিয়েছে, তার manager কোন শহরে কাজ করেন?
তুমি দেখবে: একটা লাইন, যেটা
SEARCH:দিয়ে শুরু, যেমন SEARCH: Kestrel payment API team। এখনইFINAL:লেখা উচিত নয়, কারণ সে কোনো তথ্য জানে না।Example উত্তর
SEARCH: Kestrel payment API কোন team বানিয়েছে?
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ২
একই chatএখন তুমি search tool। এই লাইনটা copy করো, paste করে Enter চাপো।
Prompt Search result: Kestrel payment API 2023 সালে Ledger team বানিয়েছে।
তুমি দেখবে: team-এর নাম দিয়ে নতুন একটা search, যেমন SEARCH: Ledger team-এর manager কে?
Example উত্তর
SEARCH: Ledger team-এর manager কে?
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ৩
একই chatএই লাইনটা copy করো, paste করে Enter চাপো।
Prompt Search result: Ledger team-এর manager Amina Rahman।
তুমি দেখবে: manager-এর নাম দিয়ে তৃতীয় একটা search, যেমন SEARCH: Amina Rahman কোন শহরে কাজ করেন?
Example উত্তর
SEARCH: Amina Rahman কোন শহরে কাজ করেন?
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ৪
একই chatএই লাইনটা copy করো, paste করে Enter চাপো। AI কয়বার search করল, গুনে রাখো।
Prompt Search result: Amina Rahman Chattogram office-এ কাজ করেন।
তুমি দেখবে:
FINAL:দিয়ে শহরের নাম Chattogram। AI মোট 3বার search করেছে।Example উত্তর
FINAL: Chattogram
তোমার উত্তরের ভাষা একটু আলাদা হবে।
এইমাত্র কী হলো
একটা search দিয়ে এই প্রশ্নের উত্তর পাওয়া যেত না। প্রতিটা search-এর আগের search থেকে একটা তথ্য লেগেছে: আগে team, তারপর manager, তারপর শহর। এরকম প্রশ্নকে বলে multi-hop। agentic retrieval-এ AI নিজেই ঠিক করে পরের search কী হবে, আর কখন থামবে। এর দাম হলো বেশি AI call।
কাজ শেষ, যখন 3টা search-এর পর তোমার কাছে একটা FINAL: উত্তর আছে, Chattogram।
নিজেকে যাচাই করোএকটা মাত্র search এই প্রশ্নের ভালো উত্তর কেন দিতে পারে না?উত্তর দেখো
দ্বিতীয় আর তৃতীয় search-এর যে তথ্য লাগে, তা আগের search-গুলোই পেয়েছে, তাই একটা query-তে সব তথ্য থাকে না। AI-কে প্রতিবার পরের search ঠিক করতে হয়, আর তাতে বেশি AI call লাগে।
ভিডিও দেখো · ৩টি
Agentic RAG: An End-to-End Open Source Framework Weaviate vector database
Agentic RAG Explained DataStax Developers
Self-Corrective RAG with LangGraph - Agentic RAG Tutorial Coding Crash Courses
06
Reranking-এ ফলাফল সাজানো: Cohere, BGE, Voyage
প্রথম ধাপের retrieval (BM25, dense vector, বা দুটোই) বিশাল corpus-এ দ্রুত চলার জন্য বানানো। তাই সে প্রতিটি document-এর score দেয় query আর document একসাথে না দেখেই। Reranker দ্বিতীয় ধাপের model, যে দুটো একসাথে দেখে: ছোট candidate তালিকা নিয়ে আরও নিখুঁত relevance score দিয়ে সেটা নতুন করে সাজায়। Sentence-Transformers এটাকেই সুপারিশ করা pattern হিসেবে লিখেছে: bi-encoder top-k candidate retrieve করে, তারপর cross-encoder তাদের re-rank করে।[43] Hosted option-এর মধ্যে আছে Cohere Rerank আর Voyage reranker, আর open weight-এর মধ্যে BAAI-র BGE reranker।[44][45][46]
অনুশীলন · ১টি task
যেকোনো free AI chat খোলো: ChatGPT · Claude · Gemini
অনুশীলন কীভাবে করবে
- নতুন chat মানে একদম নতুন কথোপকথন, আগের কোনো history নেই। ChatGPT, Claude বা Gemini-তে New chat-এ click করো। সাধারণত এটা উপরে বাঁ দিকে থাকে।
- একই chat মানে: যে chat খোলা আছে, সেখানেই লিখতে থাকো। আগে যা পাঠিয়েছ, AI তা মনে রাখে।
- Prompt ব্যবহার করতে: Copy-তে click করো, chat-এর message box-এ click করো, paste করো (Ctrl+V, বা phone-এ চেপে ধরে রাখো), তারপর Enter চাপো।
- AI-এর উত্তর প্রতিবার একটু আলাদা হয়। তোমার উত্তর example-এর সাথে হুবহু মিলতে হবে না। একই ধারণা আছে কি না, সেটা দেখো।
- শুধু বানানো data ব্যবহার করো। নিজের বা অন্যের ব্যক্তিগত তথ্য chat-এ paste করবে না।
Task ১
AI দিয়ে search result নতুন করে সাজাও
এটা কেন দরকার
তুমি যখন help-centre search বানাবে, প্রথম search দ্রুত হলেও প্রায়ই ভুল passage উপরে রাখে। reranker হলো দ্বিতীয় একটা AI ধাপ, যে প্রশ্নটা আর প্রতিটা passage একসাথে পড়ে নতুন করে সাজায়।
ধাপ ১
নতুন chatএই prompt টা copy করো, chat-এ paste করে Enter চাপো। prompt-এর order-এর সাথে নতুন order মেলাও।
Prompt তুমি একটা reranker। নিচের query আর 6টা passage পড়ো। passage-গুলো সাজানো আছে keyword search যে order-এ দিয়েছে সেভাবে। প্রতিটা passage-কে query-র জন্য 0 থেকে 10 পর্যন্ত একটা relevance score দাও, সাথে 1 বাক্যে কারণ। তারপর নতুন order দাও, সেরা আগে। Query: কোর্সটা খারাপ হলে কি আমি টাকা ফেরত পাব? 1. আমাদের কোর্সের review খুব ভালো, আর শেখার পেছনে তুমি যে টাকা খরচ করো তা সার্থক হয়। 2. কোর্সের website বন্ধ থাকলে 24 ঘণ্টার মধ্যে আমাদের জানাও। 3. Refund policy: সন্তুষ্ট না হলে 30 দিনের মধ্যে refund চাইতে পারবে। আমরা পুরো টাকা তোমার card-এ ফেরত দিই। 4. কোর্সের দামে tax ধরা আছে। অন্য bank থেকে টাকা পাঠাতে 2 দিন লাগে। 5. Refund পেতে receipt বা order number লাগে। 6. খারাপ আবহাওয়ায় সামনাসামনি ক্লাস দেরি হতে পারে।
তুমি দেখবে: 3 নম্বর passage (refund policy) একদম উপরে চলে আসে। 5 নম্বর মাঝারি score পায়। 1, 2, 4, আর 6 কম score পায়।
Example উত্তর
1. Score 2। কোর্সের প্রশংসা আছে, কিন্তু refund-এর কথা নেই। 2. Score 1। এটা website-এর সমস্যা নিয়ে। 3. Score 10। এখানে বলা আছে 30 দিনে পুরো refund পাওয়া যায়। 4. Score 2। এটা দাম আর bank transfer নিয়ে। 5. Score 6। এটা refund নিয়ে, কিন্তু শুধু কী লাগবে সেটুকু বলে। 6. Score 0। এটা আবহাওয়া নিয়ে। নতুন order: 3, 5, 1, 4, 2, 6
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ২
নতুন chatএই prompt টা copy করো, paste করে Enter চাপো। এখানে একই list-এর শুধু top 2 passage আছে।
Prompt তুমি একটা reranker। নিচের query আর 2টা passage পড়ো। এগুলো প্রথম search-এর top 2 result। প্রতিটা passage-কে query-র জন্য 0 থেকে 10 পর্যন্ত একটা relevance score দাও, সাথে 1 বাক্যে কারণ। তারপর বলো এই 2টা passage দিয়ে query-র উত্তর দেওয়া যায় কি না। Query: কোর্সটা খারাপ হলে কি আমি টাকা ফেরত পাব? 1. আমাদের কোর্সের review খুব ভালো, আর শেখার পেছনে তুমি যে টাকা খরচ করো তা সার্থক হয়। 2. কোর্সের website বন্ধ থাকলে 24 ঘণ্টার মধ্যে আমাদের জানাও।
তুমি দেখবে: দুটো score-ই কম, আর AI বলে এই passage-গুলো যথেষ্ট নয়। refund policy list-এ নেই।
Example উত্তর
1. Score 2। কোর্সের প্রশংসা আছে, কিন্তু টাকা ফেরত পাওয়ার কথা নেই। 2. Score 1। এটা website-এর সমস্যা নিয়ে। এই 2টা passage যথেষ্ট নয়। কোনোটাই refund নিয়ে কথা বলে না।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
এইমাত্র কী হলো
প্রথম search মিলিয়েছে আলাদা আলাদা শব্দ, যেমন টাকা আর কোর্স। reranker প্রশ্ন আর প্রতিটা passage একসাথে পড়ে, তাই সে বোঝে 3 নম্বর passage-ই আসল উত্তর। কিন্তু reranker শুধু যে passage পায়, সেগুলোই নতুন করে সাজাতে পারে। ধাপ ২-এ সঠিক passage list-এ ছিল না, তাই কোনো reranker তাকে খুঁজে পেত না।
কাজ শেষ, যখন তোমার কাছে 3 নম্বর passage উপরে থাকা একটা নতুন order আছে, আর 2টা passage-এর list-এর জন্য একটা কম-score উত্তর আছে।
নিজেকে যাচাই করোreranker কী করতে পারে, আর কী পারে না?উত্তর দেখো
সে যে passage পায়, সেগুলো নতুন করে সাজিয়ে সেরাটা উপরে আনতে পারে, কারণ সে প্রশ্ন আর passage একসাথে পড়ে। প্রথম search যে passage ফেরত দেয়নি, তাকে সে খুঁজে বের করতে পারে না।
ভিডিও দেখো · ৩টি
07
Metadata filtering আর structured retrieval
আসল প্রশ্নে অর্থের সাথে শর্তও মেশানো থাকে: “2025 সালে enterprise customer-দের refund policy” বা “2000-এর পরের, rating 8-এর বেশি science-fiction সিনেমা”। শুধু vector similarity দিয়ে year > 2000 জোর করে খাটানো যায় না। তাই production retrieval প্রতিটি chunk-এ metadata জুড়ে তার উপর filter করে। আর গোনা বা মোট বের করার প্রশ্ন হলে কাজটা database-কে দিয়ে দেয়। কঠিন দিকটা হলো, filter approximate nearest-neighbour (ANN) index-এর সাথে ভালোভাবে কাজ করে না, আর প্রতিটি vector database এটা আলাদা ভাবে সামলায়।[50][51]
অনুশীলন · ১টি task
যেকোনো free AI chat খোলো: ChatGPT · Claude · Gemini
অনুশীলন কীভাবে করবে
- নতুন chat মানে একদম নতুন কথোপকথন, আগের কোনো history নেই। ChatGPT, Claude বা Gemini-তে New chat-এ click করো। সাধারণত এটা উপরে বাঁ দিকে থাকে।
- একই chat মানে: যে chat খোলা আছে, সেখানেই লিখতে থাকো। আগে যা পাঠিয়েছ, AI তা মনে রাখে।
- Prompt ব্যবহার করতে: Copy-তে click করো, chat-এর message box-এ click করো, paste করো (Ctrl+V, বা phone-এ চেপে ধরে রাখো), তারপর Enter চাপো।
- AI-এর উত্তর প্রতিবার একটু আলাদা হয়। তোমার উত্তর example-এর সাথে হুবহু মিলতে হবে না। একই ধারণা আছে কি না, সেটা দেখো।
- শুধু বানানো data ব্যবহার করো। নিজের বা অন্যের ব্যক্তিগত তথ্য chat-এ paste করবে না।
Task ১
Search-এর আগে নাকি পরে filter করবে
এটা কেন দরকার
তুমি যখন movie বা product search বানাবে, user নিয়ম দেবে, যেমন 2000 সালের পরে বা 500 টাকার কম। তোমার system নিয়মটা ভুল সময়ে লাগালে কিছুই ফেরত আসতে পারে না, আর পেছনের AI অনুমান করা শুরু করতে পারে।
ধাপ ১
নতুন chatএই prompt টা copy করো, chat-এ paste করে Enter চাপো। প্রতিটা method কয়টা result দেয়, লিখে রাখো।
Prompt একটা movie search "space survival" query-র জন্য প্রতিটা movie-কে similarity score দিয়েছে। user চায় 2000 সালের পরের সেরা 3টা movie। Catalog (title, year, rating, similarity): Orbit Lost, 1998, 8.4, 0.92 Red Dust, 1995, 7.9, 0.90 Moon Base Zero, 1999, 8.1, 0.88 Silent Ship, 2004, 8.6, 0.80 Star Harbor, 2012, 7.2, 0.78 Lunar Mail, 2016, 8.3, 0.75 Deep Orbit, 2019, 8.8, 0.70 Dust Planet, 2001, 6.9, 0.66 Method 1 (post-filter): আগে similarity অনুযায়ী top 3 নাও, তারপর যে movie-র year 2000 বা তার আগের, সেগুলো বাদ দাও। Method 2 (pre-filter): আগে year 2000 বা তার আগের movie বাদ দাও, তারপর similarity অনুযায়ী top 3 নাও। প্রতিটা method-এর result দেখাও। প্রতিটা method কয়টা result দেয়, বলো।
তুমি দেখবে: Method 1 দেয় 0টা result। Method 2 দেয় 3টা result: Silent Ship, Star Harbor, আর Lunar Mail।
Example উত্তর
Method 1 (post-filter): similarity অনুযায়ী top 3 হলো Orbit Lost (1998), Red Dust (1995), আর Moon Base Zero (1999)। তিনটাই 2000 বা তার আগের, তাই সবগুলো বাদ গেছে। Result: 0টা movie। Method 2 (pre-filter): 2000-এর পরের movie: Silent Ship (0.80), Star Harbor (0.78), Lunar Mail (0.75), Deep Orbit (0.70), Dust Planet (0.66)। top 3 হলো Silent Ship, Star Harbor, আর Lunar Mail। Result: 3টা movie।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ২
একই chatএই prompt টা copy করো, paste করে Enter চাপো। search result খালি থাকলে bot কী বলে, দেখো।
Prompt এখন তুমি support bot। শুধু Method 1-এর result দেখে user-কে উত্তর দাও। কোনো result না থাকলে user-কে কী হয়েছে বলো। User: 2000 সালের পরে বানানো একটা space survival movie recommend করো।
তুমি দেখবে: ভালো bot বলে সে কোনো মিল-থাকা movie পায়নি। দুর্বল bot নিজের মনে থাকা একটা movie-র নাম বলে দিতে পারে, যেটা বানানো উত্তর।
Example উত্তর
দুঃখিত, search-এ 2000 সালের পরের কোনো space survival movie পাওয়া যায়নি, তাই এখন কোনোটা recommend করতে পারছি না।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ৩
একই chatএই prompt টা copy করো, paste করে Enter চাপো। উত্তরটা ধাপ ২-এর সাথে মেলাও।
Prompt একই user-কে আবার উত্তর দাও, এবার শুধু Method 2-এর result দেখে।
তুমি দেখবে: একটা আসল recommendation, সম্ভবত Silent Ship (2004), কারণ তার similarity সবচেয়ে বেশি।
Example উত্তর
আমি Silent Ship (2004) recommend করছি। এটা space survival-এর সবচেয়ে কাছের মিল, আর এর rating 8.6।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
এইমাত্র কী হলো
post-filter আগে search করে, পরে item বাদ দেয়। সেরা মিলগুলো নিয়মে না টিকলে কিছুই থাকে না। pre-filter আগে item বাদ দেয়, তারপর top 3 নেয়, তাই 3টা থাকলে 3টাই পাওয়া যায়। খালি list বিপজ্জনক, কারণ পেছনের AI অনুমান করতে পারে। result কত ভালো দেখাচ্ছে শুধু তা নয়, কয়টা এসেছে সেটাও দেখো।
কাজ শেষ, যখন তোমার কাছে Method 1-এর 0টা result, Method 2-এর 3টা result, আর bot-এর দুটো আলাদা উত্তর আছে।
নিজেকে যাচাই করোRAG system-এ post-filter থেকে খালি result list কেন বিপজ্জনক?উত্তর দেখো
search filter-এর আগেই top item নিয়ে নিয়েছে, তাই যেগুলো নিয়ম মানে সেগুলো list-এ কখনো ছিলই না। তখন AI-এর হাতে কিছু থাকে না, আর সে অনুমান করতে পারে। pre-filter নিয়ম-মানা item ফেরত দেয়, তাই শুধু score নয়, result-এর সংখ্যাও দেখো।
ভিডিও দেখো · ২টি
Qdrant Essentials | Combine Search & Filtering with Qdrant Filterable HNSW Qdrant Vector Search
Qdrant Payload Filtering in Python: Search Vectors with Metadata Conditions Professor Py: AI Foundations
08
GraphRAG আর knowledge-graph দিয়ে শক্তিবৃদ্ধি
Vector search এমন chunk ফেরত দেয় যা দেখতে query-র মতো। কিন্তু “এই dataset-এর মূল বিষয়গুলো কী?” — এমন “global” প্রশ্নে সে হোঁচট খায়, কারণ কোনো একটি chunk-ই এর উত্তর দেয় না। Microsoft-এর GraphRAG এটাকে query-কেন্দ্রিক summarization হিসেবে দেখে: একটি LLM entity knowledge graph বানায়, সম্পর্কিত entity-র দলগুলোর (community) summary আগে থেকেই তৈরি করে রাখে, আর query-র সময় সেই summary থেকে আংশিক উত্তর জুড়ে দেয়।[37] হালকা ধরনগুলো (LightRAG[38], HippoRAG[39]) আর graph-database tooling (Neo4j[40]) একই ফাঁক পূরণ করতে চায়, তবে খরচের হিসাব আলাদা।
অনুশীলন · ১টি task
যেকোনো free AI chat খোলো: ChatGPT · Claude · Gemini
অনুশীলন কীভাবে করবে
- নতুন chat মানে একদম নতুন কথোপকথন, আগের কোনো history নেই। ChatGPT, Claude বা Gemini-তে New chat-এ click করো। সাধারণত এটা উপরে বাঁ দিকে থাকে।
- একই chat মানে: যে chat খোলা আছে, সেখানেই লিখতে থাকো। আগে যা পাঠিয়েছ, AI তা মনে রাখে।
- Prompt ব্যবহার করতে: Copy-তে click করো, chat-এর message box-এ click করো, paste করো (Ctrl+V, বা phone-এ চেপে ধরে রাখো), তারপর Enter চাপো।
- AI-এর উত্তর প্রতিবার একটু আলাদা হয়। তোমার উত্তর example-এর সাথে হুবহু মিলতে হবে না। একই ধারণা আছে কি না, সেটা দেখো।
- শুধু বানানো data ব্যবহার করো। নিজের বা অন্যের ব্যক্তিগত তথ্য chat-এ paste করবে না।
Task ১
AI দিয়ে একটা ছোট knowledge graph বানাও
এটা কেন দরকার
তুমি যখন অনেক document-এর উপর একটা chatbot বানাবে, user বড় প্রশ্ন করবে, যেমন প্রধান ঝুঁকিগুলো কী? কোনো একটা text-এর টুকরো এর উত্তর দেয় না। GraphRAG আগে তথ্যের একটা map বানায়, তারপর map থেকে উত্তর দেয়।
ধাপ ১
নতুন chatএই prompt টা copy করো, chat-এ paste করে Enter চাপো। লাইনগুলো পড়ো। একই জিনিস দুই নামে এসেছে কি না দেখো।
Prompt text-টা পড়ো, আর জিনিসগুলো (entity) এবং তারা কীভাবে যুক্ত (relation) তার তালিকা করো। শুধু এই format-এর লাইন লেখো: Entity A -> relation -> Entity B। আর কিছু লিখবে না। Text: Dhaka Plant motor housing বানায়। Chattogram Plant gearbox বানায়। Delta Steel, Dhaka Plant-কে steel সরবরাহ করে। Delta Steel Ltd.-ও Chattogram Plant-কে steel সরবরাহ করে। Orion Bolts শুধু Dhaka Plant-কে bolt সরবরাহ করে। Nova Paints, Chattogram Plant-কে paint সরবরাহ করে। দুটো plant-ই বাস নির্মাতা Rahim Motors-কে মাল পাঠায়। জুন মাসে Delta Steel-এ strike হওয়ায় দুই plant-এই সরবরাহ দেরি হয়। Orion Bolts-এর মালিক Karim Holdings, যারা Nova Paints-এরও মালিক।
তুমি দেখবে: প্রায় 10 থেকে 12টা লাইন, যেমন Delta Steel -> supplies steel to -> Dhaka Plant। কিছু model Delta Steel আর Delta Steel Ltd.-কে দুটো আলাদা জিনিস ধরে। সেটা ভুল।
Example উত্তর
Dhaka Plant -> makes -> motor housing Chattogram Plant -> makes -> gearbox Delta Steel -> supplies steel to -> Dhaka Plant Delta Steel -> supplies steel to -> Chattogram Plant Orion Bolts -> supplies bolts to -> Dhaka Plant Nova Paints -> supplies paint to -> Chattogram Plant Dhaka Plant -> ships to -> Rahim Motors Chattogram Plant -> ships to -> Rahim Motors Delta Steel -> had a strike in -> June Karim Holdings -> owns -> Orion Bolts Karim Holdings -> owns -> Nova Paints
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ২
একই chatএই prompt টা copy করো, paste করে Enter চাপো। কয়টা community পেলে, লিখে রাখো।
Prompt এবার entity-গুলোকে ঘনিষ্ঠভাবে যুক্ত community-তে ভাগ করো। প্রতিটা community-কে একটা নাম আর এক বাক্যের summary দাও। শুধু community-গুলো লেখো।
তুমি দেখবে: 2 থেকে 4টা group, প্রতিটার একটা নাম আর এক বাক্য, যেমন Delta Steel সরবরাহ আর Karim Holdings group।
Example উত্তর
1. Delta Steel সরবরাহ: Delta Steel দুই plant-কেই steel দেয়, আর জুনের strike দুটোকেই দেরি করিয়েছে। 2. Karim Holdings group: Karim Holdings মালিক Orion Bolts আর Nova Paints-এর, যারা bolt আর paint সরবরাহ করে। 3. Plant আর customer: Dhaka Plant আর Chattogram Plant দুটোই Rahim Motors-কে মাল পাঠায়।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ৩
একই chatএই prompt টা copy করো, paste করে Enter চাপো। উত্তরটা ধাপ ১-এর text-এর সাথে মেলাও।
Prompt শুধু উপরের community summary-গুলো দেখে 3 বাক্যে এই প্রশ্নের উত্তর দাও: এই পুরো supplier network-এর প্রধান ঝুঁকি আর theme কী কী?
তুমি দেখবে: theme নিয়ে 3 বাক্য, যেমন দুই plant-এর জন্য একটাই steel supplier, দুই supplier-এর একটাই মালিক, আর একটাই customer। text-এর কোনো একটা বাক্য এটা বলে না।
Example উত্তর
Network-টা Delta Steel-এর উপর নির্ভরশীল, যে দুই plant-কেই steel দেয়, আর তার জুনের strike দুটোকেই দেরি করিয়েছে। Karim Holdings আরও দুই supplier-এর মালিক, তাই সেখানে একটা সমস্যা হলে bolt আর paint দুটোই আটকে যেতে পারে। দুই plant-ই একটা customer Rahim Motors-কে মাল পাঠায়, তাই দেরি তার কাছেও পৌঁছায়।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
এইমাত্র কী হলো
তুমি হাতে হাতে GraphRAG-এর প্রথম দুটো অংশ বানিয়েছ। প্রথমে AI text থেকে একটা knowledge graph বানিয়েছে (জিনিস আর তাদের মধ্যে যোগ)। তারপর graph-টাকে community-তে ভাগ করে প্রতিটার summary লিখেছে। শেষ উত্তরটা এসেছে এই summary থেকে, তাই সে এমন theme বলতে পেরেছে যা কোনো একটা বাক্যে নেই।
কাজ শেষ, যখন তোমার কাছে যোগের একটা তালিকা, 2 থেকে 4টা community summary, আর পুরো network নিয়ে 3 বাক্যের একটা উত্তর আছে।
নিজেকে যাচাই করোuser প্রশ্ন করার আগেই GraphRAG কেন community summary লেখে, আর এর খরচ কী?উত্তর দেখো
প্রধান theme কী? ধরনের বড় প্রশ্নের জন্য text-এর একটা মাত্র টুকরো মেলে না, তাই GraphRAG আগেই যুক্ত group-গুলোর summary লিখে রাখে, আর সেখান থেকে উত্তর দেয়। খরচ হলো অনেক AI call, আর graph-এ ভুল (নাম বাদ পড়া বা মিশে যাওয়া) পরের সব উত্তর খারাপ করে।
ভিডিও দেখো · ২টি
From Local to Global: A Graph RAG Approach to Query-Focused Summarization Natural Language Processing Interest Group
RAG with a Neo4j Knowledge Graph: How it Works and How to Set It Up Neo4j
09
Document parsing pipeline: Unstructured, LlamaParse, Docling-এর পরিচয়
RAG system ততটাই ভালো, index করা text যতটা ভালো। অথচ company-র বেশিরভাগ জ্ঞান থাকে PDF, scan, slide deck আর spreadsheet-এ, পরিষ্কার string-এ নয়। Parsing pipeline এই file-গুলোকে structured element-এ (heading, paragraph, table, figure) বদলায়, তারপর Markdown বা JSON-এ, যাতে chunker সেটাকে বুদ্ধি করে ভাঙতে পারে। তিনটি বহুল ব্যবহৃত option: Docling (IBM Research, MIT license)[58], open-source Unstructured partitioner[59] আর LlamaIndex-এর LlamaParse[60]।
অনুশীলন · ১টি task
যেকোনো free AI chat খোলো: ChatGPT · Claude · Gemini
অনুশীলন কীভাবে করবে
- নতুন chat মানে একদম নতুন কথোপকথন, আগের কোনো history নেই। ChatGPT, Claude বা Gemini-তে New chat-এ click করো। সাধারণত এটা উপরে বাঁ দিকে থাকে।
- একই chat মানে: যে chat খোলা আছে, সেখানেই লিখতে থাকো। আগে যা পাঠিয়েছ, AI তা মনে রাখে।
- Prompt ব্যবহার করতে: Copy-তে click করো, chat-এর message box-এ click করো, paste করো (Ctrl+V, বা phone-এ চেপে ধরে রাখো), তারপর Enter চাপো।
- AI-এর উত্তর প্রতিবার একটু আলাদা হয়। তোমার উত্তর example-এর সাথে হুবহু মিলতে হবে না। একই ধারণা আছে কি না, সেটা দেখো।
- শুধু বানানো data ব্যবহার করো। নিজের বা অন্যের ব্যক্তিগত তথ্য chat-এ paste করবে না।
Task ১
AI-কে ভাঙা page text খাওয়াও
এটা কেন দরকার
তুমি যখন PDF-এর উপর একটা chatbot বানাবে, একটা parser আগে প্রতিটা page-কে text বানায়। parser যদি দুই column মিশিয়ে ফেলে, বা scan-এ কোনো text না পায়, chatbot ভাঙা text নিয়ে কাজ করবে।
ধাপ ১
নতুন chatএই prompt টা copy করো, chat-এ paste করে Enter চাপো। text-টা এসেছে দুই column-এর একটা page থেকে, যেটা লাইন ধরে ধরে পড়া হয়েছে। উত্তরটা লিখে রাখো। এই prompt টা English-এ রাখা হয়েছে, কারণ এখানে English text-এর শব্দের ক্রম নিয়ে পরীক্ষা হচ্ছে।
Prompt Answer the question using ONLY the extracted page text below. If you are not sure, say what is unclear. Extracted text: "Basic costs 8 USD a Basic allows 3 month. Pro costs 25 users. Pro allows USD a month. The free 20 users. Extra users trial lasts 14 days. cost 2 USD each." Question: How many users does the Pro plan allow, and how much does an extra user cost?
তুমি দেখবে: ভালো model বের করে ফেলে 20 users আর 2 USD, বা বলে text-টা গোলমেলে। দুর্বল model ভুল করে 25 users বলতে পারে।
Example উত্তর
The text looks mixed up. It seems to say Pro allows 20 users, and extra users cost 2 USD each. I am not fully sure, because the words are out of order.
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ২
নতুন chatএই prompt টা copy করো, paste করে Enter চাপো। এটা একই page, শুধু column-গুলো ঠিক order-এ পড়া হয়েছে। এই prompt টা English-এ রাখা হয়েছে, কারণ এখানে English text-এর শব্দের ক্রম নিয়ে পরীক্ষা হচ্ছে।
Prompt Answer the question using ONLY the extracted page text below. If you are not sure, say what is unclear. Extracted text (Markdown): "## Pricing Basic costs 8 USD a month. Pro costs 25 USD a month. The free trial lasts 14 days. ## Limits Basic allows 3 users. Pro allows 20 users. Extra users cost 2 USD each." Question: How many users does the Pro plan allow, and how much does an extra user cost?
তুমি দেখবে: পরিষ্কার উত্তর: 20 users আর 2 USD। heading থাকায় কাঠামো সহজ।
Example উত্তর
The Pro plan allows 20 users. An extra user costs 2 USD.
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ৩
নতুন chatএই prompt টা copy করো, paste করে Enter চাপো। এটা একটা scan করা page, যেখানে parser কোনো text পায়নি। এই prompt টা English-এ রাখা হয়েছে, কারণ এখানে English text-এর শব্দের ক্রম নিয়ে পরীক্ষা হচ্ছে।
Prompt Answer the question using ONLY the extracted page text below. If you are not sure, say what is unclear. Extracted text: "" Question: How many users does the Pro plan allow, and how much does an extra user cost?
তুমি দেখবে: ভালো model বলে text খালি, তাই সে উত্তর দিতে পারছে না।
Example উত্তর
The extracted text is empty, so I cannot answer. Please give me the page text.
তোমার উত্তরের ভাষা একটু আলাদা হবে।
এইমাত্র কী হলো
chatbot শুধু সেই text ব্যবহার করতে পারে যা parser (যে tool ফাইল পড়ে) তাকে দেয়। column মিশে গেলে শব্দগুলো ভুল order-এ আসে, তাই AI ভুল সংখ্যা বলতে পারে। scan-এ parser কিছুই পায় না, যদি না সে OCR (ছবি থেকে লেখা পড়ার tool) ব্যবহার করে। ব্যবহারের আগে সবসময় parser-এর output দেখে নাও।
কাজ শেষ, যখন তোমার কাছে 3টা উত্তর আছে: একটা সতর্ক বা ভুল, একটা ঠিক (20 users, 2 USD), আর একটা text নেই।
নিজেকে যাচাই করোRAG system-এর text-কে chunk-এ কাটার আগে কেন parser-এর output খালি বা অদ্ভুত কি না দেখা উচিত?উত্তর দেখো
system শুধু সেটাই জমা রাখতে পারে যা parser পেয়েছে। scan খালি text দেয়, আর সাধারণ reader column মিশিয়ে ফেলতে পারে, তাই খারাপ parse পরে খারাপ উত্তর দেয়। খালি output আছে কি না দেখো, OCR বা layout বোঝে এমন parser দিয়ে আবার চালাও, আর multi-column page চোখে দেখে নাও।
ভিডিও দেখো · ৩টি
10
Multimodal RAG: ছবি, table, chart
উত্তর কোনো chart, scan করা table বা slide-এ থাকলে শুধু text-ভিত্তিক RAG অন্ধ হয়ে যায়। Multimodal RAG এই জিনিসগুলোকে খোঁজার যোগ্য রাখে। তিনটি বড় নকশা আছে: সবকিছুকে text বানিয়ে ফেলা, ছবিকে সরাসরি একটি shared vector space-এ embed করা, অথবা late interaction দিয়ে পাতার ছবি retrieve করে vision-সক্ষম model-কে পড়তে দেওয়া।[63][62]
অনুশীলন · ১টি task
যেকোনো free AI chat খোলো: ChatGPT · Claude · Gemini
অনুশীলন কীভাবে করবে
- নতুন chat মানে একদম নতুন কথোপকথন, আগের কোনো history নেই। ChatGPT, Claude বা Gemini-তে New chat-এ click করো। সাধারণত এটা উপরে বাঁ দিকে থাকে।
- একই chat মানে: যে chat খোলা আছে, সেখানেই লিখতে থাকো। আগে যা পাঠিয়েছ, AI তা মনে রাখে।
- Prompt ব্যবহার করতে: Copy-তে click করো, chat-এর message box-এ click করো, paste করো (Ctrl+V, বা phone-এ চেপে ধরে রাখো), তারপর Enter চাপো।
- AI-এর উত্তর প্রতিবার একটু আলাদা হয়। তোমার উত্তর example-এর সাথে হুবহু মিলতে হবে না। একই ধারণা আছে কি না, সেটা দেখো।
- শুধু বানানো data ব্যবহার করো। নিজের বা অন্যের ব্যক্তিগত তথ্য chat-এ paste করবে না।
Task ১
Summary দিয়ে search করো, raw table থেকে উত্তর দাও
এটা কেন দরকার
তুমি যখন table আর chart-ওয়ালা report-এর উপর একটা chatbot বানাবে, search-এর জন্য প্রায়ই প্রতিটা table-এর একটা ছোট AI summary রাখবে। summary সেই একটা details বাদ দিয়ে দিতে পারে, যেটা user জিজ্ঞেস করে।
ধাপ ১
নতুন chatএই prompt টা copy করো, chat-এ paste করে Enter চাপো। তারপর AI যে একটা বাক্য লেখে, সেটা copy করো।
Prompt এই table-টার একটা মাত্র বাক্যে summary লেখো, যাতে সেটা search index-এ রাখা যায়। শুধু বাক্যটা লেখো। Table: শাখা অনুযায়ী ত্রৈমাসিক revenue (লাখ টাকা) Branch | Q1 | Q2 | Q3 | Q4 Dhaka | 42 | 45 | 51 | 60 Chattogram | 30 | 28 | 35 | 41 Sylhet | 18 | 22 | 19 | 27 Rajshahi | 15 | 16 | 21 | 24
তুমি দেখবে: সাধারণ trend নিয়ে একটা বাক্য, যেমন Dhaka এগিয়ে আর revenue বাড়ছে। সম্ভবত কোনো কমার কথা থাকবে না।
Example উত্তর
Dhaka প্রতিটা quarter-এ সবচেয়ে বেশি revenue করেছে, 42 থেকে বেড়ে 60 লাখ টাকা হয়েছে, আর চারটা branch-ই বছরজুড়ে বেড়েছে।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ২
নতুন chatএই prompt টা copy করো। brackets-এর ভেতরের লেখাটা ধাপ ১-এর summary দিয়ে বদলাও। paste করে Enter চাপো।
Prompt শুধু নিচের text দেখে প্রশ্নের উত্তর দাও। text-এ উত্তর না থাকলে লেখো "text-এ উত্তর নেই"। Text: "[এখানে তোমার summary paste করো]" প্রশ্ন: কোন branch-এর revenue Q2 থেকে Q3-তে কমেছে, আর কত লাখ টাকা কমেছে?
তুমি দেখবে: বেশিরভাগ chat লেখে text-এ উত্তর নেই। কয়েকটা একটা branch অনুমান করে বসে, যেটা আরও খারাপ।
Example উত্তর
text-এ উত্তর নেই
তোমার উত্তরের ভাষা একটু আলাদা হবে।
ধাপ ৩
নতুন chatএই prompt টা copy করো, paste করে Enter চাপো। এবার AI summary না পেয়ে raw table পাচ্ছে।
Prompt শুধু নিচের table দেখে প্রশ্নের উত্তর দাও। table-এ উত্তর না থাকলে লেখো "table-এ উত্তর নেই"। Table: শাখা অনুযায়ী ত্রৈমাসিক revenue (লাখ টাকা) Branch | Q1 | Q2 | Q3 | Q4 Dhaka | 42 | 45 | 51 | 60 Chattogram | 30 | 28 | 35 | 41 Sylhet | 18 | 22 | 19 | 27 Rajshahi | 15 | 16 | 21 | 24 প্রশ্ন: কোন branch-এর revenue Q2 থেকে Q3-তে কমেছে, আর কত লাখ টাকা কমেছে?
তুমি দেখবে: Sylhet, 3 লাখ টাকা কমেছে (22 থেকে 19)। শুধু এই branch-এই revenue কমেছে।
Example উত্তর
Sylhet। Q2-তে এর revenue ছিল 22 লাখ টাকা, Q3-তে হয়েছে 19 লাখ টাকা, মানে 3 লাখ টাকা কমেছে।
তোমার উত্তরের ভাষা একটু আলাদা হবে।
এইমাত্র কী হলো
search শুধু সেটাই দেখে যা summary-তে লেখা আছে। summary সাধারণ trend নিয়ে কথা বলেছে, তাই Sylhet-এর ছোট কমাটা হারিয়ে গেছে, আর AI-এর কাছে উত্তর দেওয়ার মতো কিছু ছিল না। সমাধান হলো summary দিয়ে search করা, কিন্তু উত্তর লেখার সময় AI-কে raw table দেওয়া। তখন সে প্রতিটা সংখ্যা পড়তে পারে।
কাজ শেষ, যখন তোমার কাছে দুটো উত্তর আছে: summary থেকে text-এ উত্তর নেই, আর table থেকে Sylhet, 3 লাখ টাকা।
নিজেকে যাচাই করোsummary দিয়ে search করলেও কেন raw table বা ছবির link রেখে দিতে হয়?উত্তর দেখো
search শুধু সেটাই খুঁজে পায় যা summary-তে আছে, তাই বাদ পড়া details খুঁজে পাওয়া বা তার উত্তর দেওয়া যায় না। raw table উত্তর দেওয়ার ধাপে গেলে AI ঠিক সংখ্যাগুলো পড়তে পারে।
ভিডিও দেখো · ৩টি
তথ্যসূত্র
Sources
সব citation মূল paper (arXiv), vendor-এর docs (OpenAI, Anthropic, Google) বা official team blog-এ যায়। প্রতিটি পাতা খুলে citation-এর তথ্য যাচাই করা হয়েছে।
- [1]Günther, Mohr, Williams, Wang, Xiao, "Late Chunking: Contextual Chunk Embeddings Using Long-Context Embedding Models" — arXiv, 2024
- [2]Anthropic, "Introducing Contextual Retrieval" — Anthropic, 2024
- [3]LangChain, "RecursiveCharacterTextSplitter" — LangChain documentation
- [4]LlamaIndex, "Node Parser Modules" — LlamaIndex documentation
- [5]LangChain, "MarkdownHeaderTextSplitter" — LangChain documentation
- [6]Malkov, Yashunin, "Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs" — arXiv, 2016 (final 2018)
- [7]Weaviate, "Vector index" — Weaviate documentation
- [8]Andrew Kane, "pgvector" — GitHub README
- [9]Milvus, "Index types" — Milvus documentation
- [10]Qdrant, "qdrant/qdrant" — GitHub repository
- [11]Qdrant, "Overview" — Qdrant documentation
- [12]Pinecone, "Get started: overview" — Pinecone documentation
- [13]Weaviate, "Hybrid search" — Weaviate documentation
- [14]Chroma, "Introduction" — Chroma documentation
- [15]Milvus, "Overview" — Milvus documentation
- [16]Cormack, Clarke, Buettcher, "Reciprocal rank fusion outperforms Condorcet and individual rank learning methods" — SIGIR 2009, pp. 758-759
- [17]Robertson, Zaragoza, "The Probabilistic Relevance Framework: BM25 and Beyond" — Foundations and Trends in Information Retrieval, 2009
- [18]SPLADE (sparse neural retrieval with term expansion) — paper summary, Hugging Face Papers (arXiv 2107.05720)
- [19]Elastic, "Reciprocal rank fusion" — Elasticsearch Reference 8.17
- [20]OpenSearch, "Introducing reciprocal rank fusion for hybrid search" — OpenSearch blog, 2025
- [21]Qdrant, "Hybrid queries" — Qdrant documentation
- [22]Pinecone, "Hybrid search" — Pinecone documentation
- [23]Gao, Ma, Lin, Callan, "Precise Zero-Shot Dense Retrieval without Relevance Labels" (HyDE) — arXiv 2212.10496, 2022
- [24]Zheng, Mishra, Chen et al., "Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models" — Google DeepMind, ICLR 2024
- [25]Wang, Yang, Wei, "Query2doc: Query Expansion with Large Language Models" — Microsoft Research, EMNLP 2023
- [26]Rackauckas, "RAG-Fusion: a New Take on Retrieval-Augmented Generation" — arXiv 2402.03367, 2024
- [27]Ma, Gong, He, Zhao, Duan, "Query Rewriting for Retrieval-Augmented Large Language Models" — EMNLP 2023
- [28]Yang et al., "HotpotQA: A Dataset for Diverse, Explainable Multi-hop Question Answering" — EMNLP 2018
- [29]Khot, Sabharwal, Trivedi, Balasubramanian, "Interleaving Retrieval with Chain-of-Thought Reasoning for Knowledge-Intensive Multi-Step Questions" — 2022/2023
- [30]Yao et al., "ReAct: Synergizing Reasoning and Acting in Language Models" — 2022
- [31]Asai, Wu, Wang, Sil, Hajishirzi, "Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection" — 2023
- [32]Yan, Gu, Zhu, Ling, "Corrective Retrieval Augmented Generation" — 2024
- [33]Jeong, Baek, Cho, Hwang, Park, "Adaptive-RAG: Learning to Adapt Retrieval-Augmented LLMs through Question Complexity" — NAACL 2024
- [34]Anthropic, "Building effective agents" — Anthropic Engineering, 2024
- [35]OpenAI, "File search" — OpenAI API guides
- [36]Anthropic, "How we built our multi-agent research system" — Anthropic Engineering, 2025
- [37]Edge et al., "From Local to Global: A Graph RAG Approach to Query-Focused Summarization" — Microsoft, 2024
- [38]Guo, Xia, Yu, Ao, Huang, "LightRAG: Simple and Fast Retrieval-Augmented Generation" — 2024
- [39]Gutierrez, Shu, Gu, Yasunaga, Su, "HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models" — 2024
- [40]Neo4j, "neo4j-graphrag Python package" — Neo4j documentation
- [41]Microsoft, "GraphRAG" — documentation
- [42]Microsoft, "graphrag" — GitHub repository README
- [43]Sentence-Transformers, "Cross-Encoder Applications" — SBERT documentation
- [44]Cohere, "Rerank API reference (v2)" — Cohere documentation
- [45]Voyage AI, "Rerankers" — Voyage AI documentation
- [46]BAAI, "bge-reranker-v2-m3" — Hugging Face model card
- [47]BAAI, "Reranking" tutorial — BGE documentation
- [48]Khattab & Zaharia, "ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT" — SIGIR, 2020 (arXiv 2004.12832)
- [49]Cohere, "Rerank v3.5" — Cohere changelog
- [50]Qdrant, "Vector search filtering" — Qdrant documentation
- [51]Weaviate, "Filtering" — Weaviate documentation (concepts)
- [52]Qdrant, "Pre-filtering vs post-filtering" — Qdrant blog
- [53]Elastic, "Filtered kNN search" — Elasticsearch documentation
- [54]Pinecone, "Filter by metadata" — Pinecone documentation
- [55]Elastic Search Labs, "Self-querying retrievers with Elasticsearch" — Elastic blog
- [56]Yu et al., "Spider: A Large-Scale Human-Labeled Dataset for Complex and Cross-Domain Semantic Parsing and Text-to-SQL Task" — EMNLP, 2018
- [57]Patel et al., "ACORN: Performant and Predicate-Agnostic Search Over Vector Embeddings and Structured Data" — arXiv 2403.04871, 2024
- [58]Auer, Lysak, Nassar, Dolfi et al., "Docling Technical Report" — arXiv, 2024
- [59]Unstructured, "Partitioning" (open-source core functionality) — Unstructured docs
- [60]LlamaIndex, "LlamaParse: Parse" — LlamaIndex developer docs
- [61]IBM Research / LF AI & Data, "Docling documentation" — docling-project, 2025
- [62]Faysse et al., "ColPali: Efficient Document Retrieval with Vision Language Models" — ICLR 2025 (arXiv 2024)
- [63]LangChain, "Multi-modal RAG (semi-structured)" — LangChain blog
- [64]Radford et al., "Learning Transferable Visual Models From Natural Language Supervision (CLIP)" — arXiv, 2021
- [65]Voyage AI, "Multimodal embeddings" — Voyage AI docs
- [66]Cohere, "Embed" — Cohere docs
- [67]Jina AI, "Embeddings" — Jina AI
- [68]Guo, Ren, Xu, Zhang, Huang, "RAG-Anything" — arXiv, 2025