মূল লেখায় যাও
AI Engineering
English

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 ভুল উত্তর দিতে পারে, বা কোনো উত্তরই দিতে পারবে না।

  1. ধাপ ১
    নতুন 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 উত্তর
    যথেষ্ট তথ্য নেই

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    নতুন 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 চাইতে পারবে।

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  3. ধাপ ৩
    একই 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 বাক্যের শেষে কাটে, সে তথ্যটা এক টুকরোতেই রাখে।

আরেকটু কঠিন করে দেখোধাপ ২-এর chunk-এর প্রথম বাক্যটা বদলে লেখো কোম্পানি দাম বাড়িয়েছে। তারপর জিজ্ঞেস করো এটা কোন কোম্পানির কথা? এরপর একদম উপরে Zentro Cloud-এর refund policy থেকে। লাইনটা যোগ করে আবার জিজ্ঞেস করো। কী বদলালো?

ভিডিও দেখো · ৩টি

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 ফিরে আসবে।

  1. ধাপ ১
    নতুন 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।

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    একই 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 ফেরত দেবে।

আরেকটু কঠিন করে দেখোধাপ ১-এ ফিরে গিয়ে q বদলে (3, 3) করো, আর আবার চালাও। কোন winner বদলায়, আর কোনগুলো একই থাকে? কেন?

ভিডিও দেখো · ৩টি

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 আগে কী দেখবে।

  1. ধাপ ১
    নতুন 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 সমান।

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    একই 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-এ একই।

আরেকটু কঠিন করে দেখোAI-কে বলো তৃতীয় একটা list যোগ করতে, সবচেয়ে নতুন আগে: B, E, A, C, D, F, G, আর k = 60 দিয়ে আবার হিসাব করতে। এবার কোন document জেতে?

ভিডিও দেখো · ৩টি

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 সেগুলো মিস করে।

  1. ধাপ ১
    নতুন 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

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    নতুন 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.

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  3. ধাপ ৩
    নতুন 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-এর শুধু শব্দ দরকার, তথ্য নয়।

আরেকটু কঠিন করে দেখোনতুন chat-এ AI-কে ধাপ ১-এর query-টার তিনটা আলাদা rewrite বানাতে বলো। প্রতিটা rewrite দিয়ে keyword search চালাও। সবার top document কি এক?

ভিডিও দেখো · ৩টি

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-কে এটাও জানতে হবে কখন থামতে হবে।

  1. ধাপ ১
    নতুন 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 বানিয়েছে?

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    একই 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 কে?

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  3. ধাপ ৩
    একই chat

    এই লাইনটা copy করো, paste করে Enter চাপো।

    Prompt
    Search result: Ledger team-এর manager Amina Rahman।

    তুমি দেখবে: manager-এর নাম দিয়ে তৃতীয় একটা search, যেমন SEARCH: Amina Rahman কোন শহরে কাজ করেন?

    Example উত্তর
    SEARCH: Amina Rahman কোন শহরে কাজ করেন?

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  4. ধাপ ৪
    একই 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 লাগে।

আরেকটু কঠিন করে দেখোনতুন chat-এ ধাপ ১-এর prompt দিয়ে শুরু করো, কিন্তু নিয়মটা বদলে লেখো সর্বোচ্চ 2বার search করতে পারবে। আবার tool সাজো। সময়মতো শেষ করতে না পারলে AI কী করে? তুমি কি এটাই চাও?

ভিডিও দেখো · ৩টি

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 একসাথে পড়ে নতুন করে সাজায়।

  1. ধাপ ১
    নতুন 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

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    নতুন 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 ফেরত দেয়নি, তাকে সে খুঁজে বের করতে পারে না।

আরেকটু কঠিন করে দেখোনতুন chat-এ ধাপ ১-এর prompt-এর শেষে সপ্তম একটা passage যোগ করো: 7. টাকা ফেরতের অনুরোধ billing বিভাগ দেখে। AI তাকে কোথায় বসায়? তার score কি ন্যায্য?

ভিডিও দেখো · ৩টি

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 অনুমান করা শুরু করতে পারে।

  1. ধাপ ১
    নতুন 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।

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    একই 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 করতে পারছি না।

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  3. ধাপ ৩
    একই 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-এর সংখ্যাও দেখো।

আরেকটু কঠিন করে দেখোAI-কে বলো: এই অনুরোধটাকে query আর filter key সহ JSON করো: 2000-এর পরের sci-fi movie, rating 8-এর বেশি। কোন অংশ query-তে যায়, আর কোনটা filter-এ?

ভিডিও দেখো · ২টি

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 থেকে উত্তর দেয়।

  1. ধাপ ১
    নতুন 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

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    একই 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-কে মাল পাঠায়।

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  3. ধাপ ৩
    একই 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-এ ভুল (নাম বাদ পড়া বা মিশে যাওয়া) পরের সব উত্তর খারাপ করে।

আরেকটু কঠিন করে দেখোনতুন chat খোলো। ধাপ ১-এর text-এর শুধু প্রথম দুটো বাক্য পাঠাও, আর ধাপ ৩-এর প্রশ্নটা করো। উত্তর কতটা খারাপ হলো, আর কেন?

ভিডিও দেখো · ২টি

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 নিয়ে কাজ করবে।

  1. ধাপ ১
    নতুন 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.

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    নতুন 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.

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  3. ধাপ ৩
    নতুন 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 চোখে দেখে নাও।

আরেকটু কঠিন করে দেখোনতুন chat-এ ধাপ ১-এর ভাঙা text নিজে 3 সারির একটা Markdown table হিসেবে লেখো (Basic, Pro, Free trial)। একই প্রশ্ন করো। কাঠামো কতটা সাহায্য করল?

ভিডিও দেখো · ৩টি

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 জিজ্ঞেস করে।

  1. ধাপ ১
    নতুন 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-ই বছরজুড়ে বেড়েছে।

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  2. ধাপ ২
    নতুন chat

    এই prompt টা copy করো। brackets-এর ভেতরের লেখাটা ধাপ ১-এর summary দিয়ে বদলাও। paste করে Enter চাপো।

    Prompt
    শুধু নিচের text দেখে প্রশ্নের উত্তর দাও। text-এ উত্তর না থাকলে লেখো "text-এ উত্তর নেই"।
    
    Text: "[এখানে তোমার summary paste করো]"
    
    প্রশ্ন: কোন branch-এর revenue Q2 থেকে Q3-তে কমেছে, আর কত লাখ টাকা কমেছে?

    তুমি দেখবে: বেশিরভাগ chat লেখে text-এ উত্তর নেই। কয়েকটা একটা branch অনুমান করে বসে, যেটা আরও খারাপ।

    Example উত্তর
    text-এ উত্তর নেই

    তোমার উত্তরের ভাষা একটু আলাদা হবে।

  3. ধাপ ৩
    নতুন 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 ঠিক সংখ্যাগুলো পড়তে পারে।

আরেকটু কঠিন করে দেখোতোমার chat-এ image upload করা গেলে table-এর একটা screenshot নিয়ে ছবি দিয়ে একই প্রশ্ন করো। উত্তরটা ধাপ ৩-এর সাথে মেলাও। image upload করা না গেলে এটা বাদ দাও।

ভিডিও দেখো · ৩টি

তথ্যসূত্র

Sources

সব citation মূল paper (arXiv), vendor-এর docs (OpenAI, Anthropic, Google) বা official team blog-এ যায়। প্রতিটি পাতা খুলে citation-এর তথ্য যাচাই করা হয়েছে।

  1. [1]Günther, Mohr, Williams, Wang, Xiao, "Late Chunking: Contextual Chunk Embeddings Using Long-Context Embedding Models" — arXiv, 2024
  2. [2]Anthropic, "Introducing Contextual Retrieval" — Anthropic, 2024
  3. [3]LangChain, "RecursiveCharacterTextSplitter" — LangChain documentation
  4. [4]LlamaIndex, "Node Parser Modules" — LlamaIndex documentation
  5. [5]LangChain, "MarkdownHeaderTextSplitter" — LangChain documentation
  6. [6]Malkov, Yashunin, "Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs" — arXiv, 2016 (final 2018)
  7. [7]Weaviate, "Vector index" — Weaviate documentation
  8. [8]Andrew Kane, "pgvector" — GitHub README
  9. [9]Milvus, "Index types" — Milvus documentation
  10. [10]Qdrant, "qdrant/qdrant" — GitHub repository
  11. [11]Qdrant, "Overview" — Qdrant documentation
  12. [12]Pinecone, "Get started: overview" — Pinecone documentation
  13. [13]Weaviate, "Hybrid search" — Weaviate documentation
  14. [14]Chroma, "Introduction" — Chroma documentation
  15. [15]Milvus, "Overview" — Milvus documentation
  16. [16]Cormack, Clarke, Buettcher, "Reciprocal rank fusion outperforms Condorcet and individual rank learning methods" — SIGIR 2009, pp. 758-759
  17. [17]Robertson, Zaragoza, "The Probabilistic Relevance Framework: BM25 and Beyond" — Foundations and Trends in Information Retrieval, 2009
  18. [18]SPLADE (sparse neural retrieval with term expansion) — paper summary, Hugging Face Papers (arXiv 2107.05720)
  19. [19]Elastic, "Reciprocal rank fusion" — Elasticsearch Reference 8.17
  20. [20]OpenSearch, "Introducing reciprocal rank fusion for hybrid search" — OpenSearch blog, 2025
  21. [21]Qdrant, "Hybrid queries" — Qdrant documentation
  22. [22]Pinecone, "Hybrid search" — Pinecone documentation
  23. [23]Gao, Ma, Lin, Callan, "Precise Zero-Shot Dense Retrieval without Relevance Labels" (HyDE) — arXiv 2212.10496, 2022
  24. [24]Zheng, Mishra, Chen et al., "Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models" — Google DeepMind, ICLR 2024
  25. [25]Wang, Yang, Wei, "Query2doc: Query Expansion with Large Language Models" — Microsoft Research, EMNLP 2023
  26. [26]Rackauckas, "RAG-Fusion: a New Take on Retrieval-Augmented Generation" — arXiv 2402.03367, 2024
  27. [27]Ma, Gong, He, Zhao, Duan, "Query Rewriting for Retrieval-Augmented Large Language Models" — EMNLP 2023
  28. [28]Yang et al., "HotpotQA: A Dataset for Diverse, Explainable Multi-hop Question Answering" — EMNLP 2018
  29. [29]Khot, Sabharwal, Trivedi, Balasubramanian, "Interleaving Retrieval with Chain-of-Thought Reasoning for Knowledge-Intensive Multi-Step Questions" — 2022/2023
  30. [30]Yao et al., "ReAct: Synergizing Reasoning and Acting in Language Models" — 2022
  31. [31]Asai, Wu, Wang, Sil, Hajishirzi, "Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection" — 2023
  32. [32]Yan, Gu, Zhu, Ling, "Corrective Retrieval Augmented Generation" — 2024
  33. [33]Jeong, Baek, Cho, Hwang, Park, "Adaptive-RAG: Learning to Adapt Retrieval-Augmented LLMs through Question Complexity" — NAACL 2024
  34. [34]Anthropic, "Building effective agents" — Anthropic Engineering, 2024
  35. [35]OpenAI, "File search" — OpenAI API guides
  36. [36]Anthropic, "How we built our multi-agent research system" — Anthropic Engineering, 2025
  37. [37]Edge et al., "From Local to Global: A Graph RAG Approach to Query-Focused Summarization" — Microsoft, 2024
  38. [38]Guo, Xia, Yu, Ao, Huang, "LightRAG: Simple and Fast Retrieval-Augmented Generation" — 2024
  39. [39]Gutierrez, Shu, Gu, Yasunaga, Su, "HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models" — 2024
  40. [40]Neo4j, "neo4j-graphrag Python package" — Neo4j documentation
  41. [41]Microsoft, "GraphRAG" — documentation
  42. [42]Microsoft, "graphrag" — GitHub repository README
  43. [43]Sentence-Transformers, "Cross-Encoder Applications" — SBERT documentation
  44. [44]Cohere, "Rerank API reference (v2)" — Cohere documentation
  45. [45]Voyage AI, "Rerankers" — Voyage AI documentation
  46. [46]BAAI, "bge-reranker-v2-m3" — Hugging Face model card
  47. [47]BAAI, "Reranking" tutorial — BGE documentation
  48. [48]Khattab & Zaharia, "ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT" — SIGIR, 2020 (arXiv 2004.12832)
  49. [49]Cohere, "Rerank v3.5" — Cohere changelog
  50. [50]Qdrant, "Vector search filtering" — Qdrant documentation
  51. [51]Weaviate, "Filtering" — Weaviate documentation (concepts)
  52. [52]Qdrant, "Pre-filtering vs post-filtering" — Qdrant blog
  53. [53]Elastic, "Filtered kNN search" — Elasticsearch documentation
  54. [54]Pinecone, "Filter by metadata" — Pinecone documentation
  55. [55]Elastic Search Labs, "Self-querying retrievers with Elasticsearch" — Elastic blog
  56. [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. [57]Patel et al., "ACORN: Performant and Predicate-Agnostic Search Over Vector Embeddings and Structured Data" — arXiv 2403.04871, 2024
  58. [58]Auer, Lysak, Nassar, Dolfi et al., "Docling Technical Report" — arXiv, 2024
  59. [59]Unstructured, "Partitioning" (open-source core functionality) — Unstructured docs
  60. [60]LlamaIndex, "LlamaParse: Parse" — LlamaIndex developer docs
  61. [61]IBM Research / LF AI & Data, "Docling documentation" — docling-project, 2025
  62. [62]Faysse et al., "ColPali: Efficient Document Retrieval with Vision Language Models" — ICLR 2025 (arXiv 2024)
  63. [63]LangChain, "Multi-modal RAG (semi-structured)" — LangChain blog
  64. [64]Radford et al., "Learning Transferable Visual Models From Natural Language Supervision (CLIP)" — arXiv, 2021
  65. [65]Voyage AI, "Multimodal embeddings" — Voyage AI docs
  66. [66]Cohere, "Embed" — Cohere docs
  67. [67]Jina AI, "Embeddings" — Jina AI
  68. [68]Guo, Ren, Xu, Zhang, Huang, "RAG-Anything" — arXiv, 2025