AI Architecture

২০২৬ সালের সেরা ওপেন সোর্স RAG ফ্রেমওয়ার্ক: আর্কিটেকচার ও বেঞ্চমার্ক গাইড

দ্রুত উত্তর (Quick Answer): ২০২৬ সালের প্রোডাকশন RAG-এ, LlamaIndex ডেটা পার্সিং ও হায়ারারকিক্যাল চাংকিংয়ে (Hierarchical Chunking) অবিসংবাদিত নেতা, আর LangGraph জটিল সাইক্লিক এজেন্টিক ওয়ার্কফ্লো ও স্টেট মেশিনে শীর্ষস্থান ধরে রেখেছে। Haystack 2.x দেয় সর্বনিম্ন এক্সিকিউশন লেটেন্সি (৪.৮ মিলি/সেকেন্ড) ও পরিচ্ছন্ন DAG পাইপলাইন, এবং AutoGen (AG2) মাল্টি-এজেন্ট বিতর্কের মাধ্যমে সর্বাধিক নির্ভুল RAG গ্রাউন্ডিং (বাস্তব তথ্য যাচাই) নিশ্চিত করে।

১. ভূমিকা: Agentic RAG ও RAG Grounding-এর বিবর্তন

রিট্রিভাল-অগমেন্টেড জেনারেশন (Retrieval-Augmented Generation, RAG) কাঠামোগতভাবে ব্যাপক পরিবর্তনের মধ্য দিয়ে গেছে। ২০২৩-২০২৪ সালে "সাধারণ বা Naive RAG" ছিল শিল্পের মানদণ্ড: পিডিএফ থেকে সাধারণ টেক্সট বের করা, ৫০০-টোকেনের টুকরোতে ভাগ করা, ডেন্স ভেক্টর এম্বেডিং তৈরি করে কোসাইন সিমিলারিটি দিয়ে টপ-$k$ তথ্য বের করা এবং এলএলএম-এর প্রম্পটে যুক্ত করা।

২০২৬ সালে এন্টারপ্রাইজ ব্যবহারের ক্ষেত্রে Naive RAG-এর তিনটি গুরুতর দুর্বলতা প্রকাশ পেয়েছে:

  1. অর্থগত বিচ্ছিন্নতা (Semantic Fragmentation): যথেচ্ছ চাংকিং টেবিল ও তথ্যের যৌক্তিক ধারাবাহিকতা নষ্ট করে।
  2. অনুসন্ধান নয়েজ ও শব্দভাণ্ডারের অসামঞ্জস্য: ডেন্স ভেক্টর সার্চ সুনির্দিষ্ট আইডি, কোড বা মডেল নম্বর শনাক্তে ব্যর্থ হয়।
  3. হ্যালুসিনেশন ও RAG Grounding-এর অভাব: এলএলএম উদ্ধৃত নথিপত্রে না থাকা ভুল তথ্য আত্মবিশ্বাসের সাথে উপস্থাপন করে।
+-------------------------------------------------------------------------------+
|                       NAIVE RAG বনাম AGENTIC RAG (২০২৬)                       |
+-------------------------------------------------------------------------------+
|                                                                               |
|  NAIVE RAG (স্থির, রৈখিক একমুখী প্রবাহ):                                     |
|  [ব্যবহারকারীর প্রশ্ন] ──> [ভেক্টর সার্চ (Top-K)] ──> [কনটেক্সট] ──> [LLM উত্তর]|
|                                                                               |
|  AGENTIC RAG (গতিশীল, চক্রীয়, স্ব-সংশোধনকারী স্টেট মেশিন):                   |
|  [ব্যবহারকারীর প্রশ্ন]                                                         |
|       │                                                                       |
|       ▼                                                                       |
|  [কোয়েরি বিশ্লেষণ ও রাউটিং] <────────────────────────────────────────┐       |
|       │                                                                │      |
|       ├──> [স্পার্স BM25 সূচক] ──────┐                                 │      |
|       └──> [ডেন্স HNSW ভেক্টর] ──────┴──> [রেসিপ্রোকাল র‍্যাঙ্ক ফিউশন RRF] │  |
|                                                     │                  │      |
|                                                     ▼                  │      |
|                                           [ক্রস-এনকোডার রি-র‍্যাঙ্কিং]  │      |
|                                                     │                  │      |
|                                                     ▼                  │      |
|                                           [প্রাসঙ্গিকতা মূল্যায়ন]     │      |
|                                                     │                  │      |
|                                            তথ্য কি পর্যাপ্ত?          │      |
|                                             ├── না  ──> (কোয়েরি সংশোধন) ┘    |
|                                             └── হ্যাঁ ──> [তথ্যভিত্তিক তৈরি]   |
|                                                              │                |
|                                                              ▼                |
|                                                   [বিভ্রান্তি পরীক্ষক]         |
|                                                              │                |
|                                                      তথ্য কি যাচাইকৃত?        |
|                                                       ├── পাস ──> [চূড়ান্ত]   |
|                                                       └── ব্যর্থ ──> [ওয়েব সার্চ]
+-------------------------------------------------------------------------------+

RAG গ্রাউন্ডিং (RAG Grounding) — অর্থাৎ মডেলের দেওয়া প্রতিটি দাবি উদ্ধারকৃত নথিপত্র দ্বারা প্রমাণিত কিনা তা গাণিতিক ও প্রোগ্রাম্যাটিকভাবে যাচাই করা — এন্টারপ্রাইজ এআই-এর প্রধান মূল্যায়নের মানদণ্ড হয়ে দাঁড়িয়েছে।

এই গাইডে ২০২৬ সালের শীর্ষ ৪টি ওপেন-সোর্স ফ্রেমওয়ার্ক পর্যালোচনা করা হলো:

  • LlamaIndex (v0.12+): ডেটা প্রক্রিয়াকরণ, জটিল ডকুমেন্ট পার্সিং ও প্রোপার্টি গ্রাফের জন্য শ্রেষ্ঠ ফ্রেমওয়ার্ক।
  • LangGraph / LangChain (v0.3+ / LangGraph v0.2+): চক্রীয় এজেন্ট ওয়ার্কফ্লো, স্টেট স্থায়িত্ব এবং হিউম্যান-ইন-দ্য-লুপ সমর্থিত স্টেট মেশিন রানটাইম।
  • deepset Haystack (v2.10+): অতি-উচ্চ থ্রুপুট, সর্বনিম্ন লেটেন্সি এবং সুনির্দিষ্ট টাইপ-নিরাপত্তাযুক্ত ডিটারমিনিস্টিক DAG ফ্রেমওয়ার্ক।
  • Microsoft AutoGen / AG2 (v0.4+): একাধিক এজেন্টের মধ্যে সহযোগিতামূলক বিতর্ক ও যুক্তি বিনিময়ের মাধ্যমে সত্যতা নিশ্চিতকারী মাল্টি-এজেন্ট সিস্টেম।

২. সামগ্রিক বেঞ্চমার্ক মেট্রিক্স (২০২৬ উৎপাদন ডেটা)

১০,০০০ বৈচিত্র্যময় জটিল নথিপত্রের উপর ৫০০টি বহুধাপের অনুসন্ধানের মাধ্যমে ফ্রেমওয়ার্কগুলোর কার্যক্ষমতা যাচাই করা হয়েছে।

পরীক্ষামূলক পরিবেশ: ডুয়াল AMD EPYC 9654 (১৯২ কোর, ৩৮৪ জিবি DDR5 র‍্যাম, ৪টি NVIDIA L40S 48GB GPU, NVMe PCIe Gen 5)। ভেক্টর ইঞ্জিন: Qdrant v1.13 ও Elasticsearch 8.17। এম্বেডিং মডেল: text-embedding-3-largebge-m3। রি-র‍্যাঙ্কিংয়ে ব্যবহৃত হয়েছে FlashRank এবং Cohere Rerank v3.5।

+-------------------------------------------------------------------------------------------------------------------------+
|                                    ওপেন সোর্স RAG ফ্রেমওয়ার্ক বেঞ্চমার্ক ফলাফল (২০২৬)                                    |
+-------------------+------------------+------------------+------------------+------------------+------------------+------+
| ফ্রেমওয়ার্ক ও     | মূল আর্কিটেকচার  | ফ্রেমওয়ার্ক নিজস্ব| RAG গ্রাউন্ডিং   | হাইব্রিড সার্চ   | রি-র‍্যাঙ্কিং     | ডেভ  |
| সংস্করণ           | ডিজাইন           | লেটেন্সি (p95)   | বিশ্বস্ততা (%)   | (BM25+Dense RRF) | অতিরিক্ত লেটেন্সি| এক্স |
+-------------------+------------------+------------------+------------------+------------------+------------------+------+
| LlamaIndex v0.12  | Data-Graph / Flow| 18.4 ms          | 94.2%            | নেটিভ অন্তর্নির্মিত| +14.2 ms (লোকাল) | A    |
| LangGraph v0.2    | Cyclic StateGraph| 24.6 ms          | 93.8%            | ইন্টিগ্রেশনের মাধ্যমে| +16.8 ms (লোকাল) | A-   |
| Haystack v2.10    | Explicit DAG     | 4.8 ms           | 92.6%            | নেটিভ পাইপলাইন   | +8.2 ms (লোকাল)  | A+   |
| AutoGen v0.4 (AG2)| Multi-Agent Chat | 68.2 ms          | 95.1%            | কাস্টম র‍্যাপার  | +21.4 ms (লোকাল) | B    |
+-------------------+------------------+------------------+------------------+------------------+------------------+------+

৩. ফ্রেমওয়ার্ক আর্কিটেকচার বিশ্লেষণ

১. LlamaIndex: ডেটা-কেন্দ্রিক পার্সিংয়ের শীর্ষ ফ্রেমওয়ার্ক

  • হায়ারারকিক্যাল প্যারেন্ট-চাইল্ড চাংকিং: HierarchicalNodeParser-এর মাধ্যমে ছোট চাইল্ড চাঙ্ক (১২৮ টোকেন) দিয়ে সূক্ষ্ম ভেক্টর ম্যাচিং করা হয়, কিন্তু মডেলকে সম্পূর্ণ প্যারেন্ট নোড (১০২৪ টোকেন) দেওয়া হয় যাতে কনটেক্সট হারিয়ে না যায়।
  • Property Graph Index: নলেজ গ্রাফ ও ভেক্টর এম্বেডিং যুক্ত করে জটিল সম্পর্ক ও অর্থগত অনুসন্ধান একসাথে সম্পন্ন করে।
  • ইভেন্ট-চালিত Workflows: v0.12 সংস্করণে পাইথন টাইপ হিন্ট ও @step ডেকোরেটরের মাধ্যমে আধুনিক অ্যাসিনক্রোনাস আর্কিটেকচার গ্রহণ করা হয়েছে।

২. LangGraph: চক্রীয় স্টেট মেশিন ও এজেন্ট নিয়ন্ত্রণ

  • রিডিউসার স্টেট গ্রাফ: নোডগুলো হলো পাইথন ফাংশন এবং এজগুলো ট্রানজিশন নিয়ন্ত্রণ করে। শেয়ার্ড স্টেট Pydantic স্কিমায় রিডিউসার ফাংশন দিয়ে নিরাপদভাবে আপডেট হয়।
  • চেকপয়েন্টিং ও টাইম-ট্রাভেল: PostgreSQL বা Redis-এ স্টেট সেভ থাকার কারণে কোনো নেটওয়ার্ক সমস্যা হলে সিস্টেম ঠিক আগের ধাপ থেকে কাজ শুরু করতে পারে।
  • Human-in-the-Loop: সংবেদনশীল টুল কল করার পূর্বে মানুষের অনুমোদনের জন্য ব্রেকপয়েন্ট বসানো যায়।

৩. Haystack 2.x: উচ্চ-গতির ডিটারমিনিস্টিক পাইপলাইন

  • টাইপ-নিরাপদ কম্পোনেন্ট: @component ডেকোরেটর প্রতিটি ইনপুট ও আউটপুটকে কঠোরভাবে টাইপ নির্ধারণ করে, যা পাইপলাইন তৈরির সময়েই ভুল শনাক্ত করে।
  • ন্যূনতম লেটেন্সি (p95 মাত্র ৪.৮ মি/সে): বাড়তি কোনো বিমূর্ত লেয়ার না থাকায় সিপিইউ ওভারহেড নেই বললেই চলে।
  • সুস্পষ্ট সংযোগ: কোডে ডেটা প্রবাহ স্পষ্টভাবে নির্দেশ করা থাকে (pipeline.connect(...)), যা OpenTelemetry ট্রেসিং সহজ করে।

৪. AutoGen / AG2: মাল্টি-এজেন্ট বিতর্ক ও যাচাই

  • ৯৫.১% সর্বোচ্চ গ্রাউন্ডিং বিশ্বস্ততা: রিট্রিভার, সিন্থেসাইজার এবং সমালোচক এজেন্টের পারস্পারিক বিতর্কের মাধ্যমে মিথ্যা তথ্য পুরোপুরি বাতিল হয়।
  • ডকার স্যান্ডবক্সে কোড রান: টেবিল বা গণনামূলক অনুসন্ধানে এজেন্টরা পাইথন কোড লিখে ডকারে চালিয়ে সঠিক তথ্য প্রদান করে।
  • অতিরিক্ত টোকেন ব্যয়: কথোপকথনের ধারা দীর্ঘ হওয়ায় সাধারণ পাইপলাইনের চেয়ে ৩ থেকে ৫ গুণ বেশি টোকেন খরচ হয়।

৪. চাংকিং, হাইব্রিড সার্চ ও খরচ বিশ্লেষণ

চাংকিং কৌশলের কার্যকারিতা তুলনা

+-------------------------------------------------------------------------------------------------------------------------+
|                                           চাংকিং পদ্ধতির তুলনামূলক বিশ্লেষণ                                              |
+--------------------------+--------------------+--------------------+--------------------+-------------------------------+
| চাংকিং পদ্ধতি            | অর্থগত ধারাবাহিকতা| ইনডেক্সিং গতি      | স্টোরেজ অনুপাত     | সুপারিশকৃত ফ্রেমওয়ার্ক         |
|                          | (১-১০ স্কেল)       | (পৃষ্ঠা/সেকেন্ড)   | (মূল টেক্সটের তুলনায়|                               |
+--------------------------+--------------------+--------------------+--------------------+-------------------------------+
| নির্দিষ্ট আকার (512/64) | 4.2 / 10           | 840 pages/s        | 1.1x               | Haystack DocumentSplitter     |
| গতিশীল সিম্যান্টিক       | 8.1 / 10           | 45 pages/s         | 1.3x               | LlamaIndex SemanticSplitter   |
| হায়ারারকিক্যাল প্যারেন্ট  | 9.4 / 10           | 310 pages/s        | 2.8x               | LlamaIndex HierarchicalParser |
| কোড এএসটি (AST) সিনট্যাক্স| 9.6 / 10          | 520 pages/s        | 1.2x               | LangChain RecursiveCharacter  |
+--------------------------+--------------------+--------------------+--------------------+-------------------------------+

হাইব্রিড সার্চ (BM25 + Dense) ও RRF সমীকরণ

$$RRF(d \in D) = \sum_{m \in M} \frac{1}{k + r_m(d)}$$

প্রযুক্তিগত কোড বা সুনির্দিষ্ট আইডি অনুসন্ধানে Recall@10 ডেন্স ভেক্টরের ৪১.২% থেকে হাইব্রিড সার্চ ও রি-র‍্যাঙ্কিং যুক্ত করার পর ৯৭.৯%-এ উন্নীত হয়েছে।


১ লক্ষ কোয়েরির জন্য টোকেন খরচ ও আর্থিক হিসাব

+-------------------------------------------------------------------------------------------------------------------------+
|                                    ১০০,০০০ কোয়েরির খরচ মডেল (Claude 3.5 Sonnet ভিত্তি)                                 |
+-------------------+--------------------+--------------------+--------------------+--------------------+-----------------+
| ফ্রেমওয়ার্ক       | ফ্রেমওয়ার্ক ওভারহেড| প্রাপ্ত কনটেক্সট   | মোট ইনপুট টোকেন    | প্রতি ১,০০০টি      | ১০০,০০০টি       |
|                   | টোকেন/কোয়েরি      | টোকেন/কোয়েরি      | প্রতি কোয়েরি      | কোয়েরির খরচ       | কোয়েরির মোট ব্যয়|
+-------------------+--------------------+--------------------+--------------------+--------------------+-----------------+
| Haystack 2.x      | ~85 tokens         | 1,850 tokens       | 1,935 tokens       | $5.80              | $580.50         |
| LlamaIndex        | ~240 tokens        | 1,920 tokens       | 2,160 tokens       | $6.48              | $648.00         |
| LangGraph         | ~620 tokens        | 2,100 tokens       | 2,720 tokens       | $8.16              | $816.00         |
| AutoGen           | ~1,850 tokens      | 2,400 tokens       | 4,250 tokens       | $12.75             | $1,275.00       |
+-------------------+--------------------+--------------------+--------------------+--------------------+-----------------+

৫. প্রোডাকশন পাইথন কোড উদাহরণ

১. LlamaIndex হায়ারারকিক্যাল পাইপলাইন

import os
from llama_index.core import VectorStoreIndex, StorageContext, Settings
from llama_index.core.node_parser import HierarchicalNodeParser, get_leaf_nodes
from llama_index.core.retrievers import AutoMergingRetriever
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.postprocessor import SentenceTransformerRerank
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
from llama_index.core.schema import Document

Settings.llm = OpenAI(model="gpt-4o", temperature=0.1)
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-large")

node_parser = HierarchicalNodeParser.from_defaults(chunk_sizes=[1024, 256, 128], chunk_overlap=20)
raw_docs = [Document(text="কর্পোরেট আইনি শর্তাবলী ও সম্মতি নীতিমালা...")]
nodes = node_parser.get_nodes_from_documents(raw_docs)
leaf_nodes = get_leaf_nodes(nodes)

storage_context = StorageContext.from_defaults()
storage_context.docstore.add_documents(nodes)
index = VectorStoreIndex(leaf_nodes, storage_context=storage_context)

base_retriever = index.as_retriever(similarity_top_k=25)
retriever = AutoMergingRetriever(base_retriever, storage_context=storage_context, verbose=True)
reranker = SentenceTransformerRerank(model="BAAI/bge-reranker-v2-m3", top_n=5)
query_engine = RetrieverQueryEngine.from_args(retriever=retriever, node_postprocessors=[reranker])

response = query_engine.query("ধারা ৪.২-এ বর্ণিত দায়বদ্ধতার সর্বোচ্চ সীমা কত?")
print(str(response))

২. Haystack 2.x হাইব্রিড পাইপলাইন

from haystack import Pipeline
from haystack.components.joiners import DocumentJoiner
from haystack.components.builders import PromptBuilder
from haystack.components.generators import OpenAIGenerator
from haystack_integrations.components.retrievers.qdrant import QdrantEmbeddingRetriever
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore
from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.embedders import OpenAITextEmbedder
from haystack_integrations.components.rankers.fastembed import FastembedRanker

qdrant_store = QdrantDocumentStore(host="localhost", port=6333, index="enterprise_rag")
bm25_store = InMemoryDocumentStore()

pipeline = Pipeline()
pipeline.add_component("text_embedder", OpenAITextEmbedder(model="text-embedding-3-large"))
pipeline.add_component("dense_retriever", QdrantEmbeddingRetriever(document_store=qdrant_store, top_k=20))
pipeline.add_component("sparse_retriever", InMemoryBM25Retriever(document_store=bm25_store, top_k=20))
pipeline.add_component("document_joiner", DocumentJoiner(join_mode="reciprocal_rank_fusion", top_k=25))
pipeline.add_component("reranker", FastembedRanker(model_name="ms-marco-MiniLM-L-6-v2", top_k=5))

template = """
শুধুমাত্র নিচের যাচাইকৃত তথ্যের ভিত্তিতে প্রশ্নের উত্তর দিন।
তথ্য:
{% for doc in documents %}
{{ doc.content }}
{% endfor %}
প্রশ্ন: {{ query }}
উত্তর:
"""
pipeline.add_component("prompt_builder", PromptBuilder(template=template))
pipeline.add_component("llm", OpenAIGenerator(model="gpt-4o"))

pipeline.connect("text_embedder.embedding", "dense_retriever.query_embedding")
pipeline.connect("dense_retriever.documents", "document_joiner.documents")
pipeline.connect("sparse_retriever.documents", "document_joiner.documents")
pipeline.connect("document_joiner.documents", "reranker.documents")
pipeline.connect("reranker.documents", "prompt_builder.documents")
pipeline.connect("prompt_builder.prompt", "llm.prompt")

results = pipeline.run({
    "text_embedder": {"text": "সার্ভার এসএলএ প্রতিশ্রুতি কি?"},
    "sparse_retriever": {"query": "সার্ভার এসএলএ প্রতিশ্রুতি কি?"},
    "prompt_builder": {"query": "সার্ভার এসএলএ প্রতিশ্রুতি কি?"}
})
print(results["llm"]["replies"][0])

৬. ২০২৬ সালের ফ্রেমওয়ার্ক বাছাইয়ের সিদ্ধান্ত গাইড

  • LlamaIndex বেছে নিন: যদি জটিল বিন্যাসের পিডিএফ, টেবিল পার্সিং এবং নলেজ গ্রাফ তৈরি আপনার মূল চ্যালেঞ্জ হয়।
  • LangGraph বেছে নিন: যদি ভুল হলে পুনরায় চেষ্টা করা, স্টেট সংরক্ষণ এবং মানুষের অনুমোদনের প্রয়োজন হয়।
  • Haystack 2.x বেছে নিন: যদি সর্বনিম্ন লেটেন্সি, উচ্চ গতি এবং এন্টারপ্রাইজ মাইক্রোসার্ভিস তৈরি আপনার মূল লক্ষ্য হয়।
  • AutoGen বেছে নিন: যখন অতিরিক্ত সময় এবং টোকেন খরচ মেনে নিয়ে হলেও তথ্যের ১০০% নির্ভুলতা নিশ্চিত করা আবশ্যক।
← সব নিবন্ধ
0 / 4