RAG patterns — الگوهای RAG
الگوهای RAG (به انگلیسی: RAG Patterns) — مجموعهای از رویکردهای معماری و روششناختی برای ساخت سیستمهای Retrieval-Augmented Generation (RAG) هستند. این الگوها برای حل مشکلات بنیادین مدلهای زبانی بزرگ (LLM)، از جمله توهمزایی، قدیمی شدن دانش و کمبود تخصص حوزهای، از طریق یکپارچهسازی LLM با منابع داده خارجی و در دسترس بهصورت پویا طراحی شدهاند[1]. تکامل RAG مسیری از pipeline های خطی ساده تا سیستمهای ماژولار و عاملمحور پیچیده را طی کرده است[2].
الگوهای اصلی RAG
با پیشرفت این فناوری، الگوهای متعددی از RAG پدید آمدهاند که هر یک مسائل خاصی را حل میکنند و دارای مصالحههای خاص خود میان کیفیت، سرعت و هزینه هستند.
- Classic RAG (RAG کلاسیک) — رویکرد پایهای که در آن درخواست کاربر برای جستجوی قطعههای (chunk) مرتبط در پایگاه داده برداری وکتورایز میشود؛ chunk های یافتشده به همراه سؤال به LLM داده میشوند تا پاسخ تولید شود[1].
- Multi‑Query RAG (درخواستهای چندگانه) — LLM چندین نسخه بازنویسیشده/دقیقتر از درخواست اصلی تولید میکند؛ جستجو برای همه نسخهها انجام میشود و نتایج ادغام میگردند که این امر جامعیت (recall) را افزایش میدهد[3].
- HyDE (Hypothetical Document Expansion) — برای غلبه بر «شکاف معنایی» میان درخواست کوتاه و اسناد بلند. LLM ابتدا یک سند-پاسخ «فرضی» تولید میکند، سپس embedding آن برای جستجو استفاده میشود که اغلب کیفیت بازیابی را بهبود میبخشد[4].
- Hybrid Retrieval (جستجوی ترکیبی) — ترکیب جستجوی معنایی (برداری) و واژگانی (BM25). طرحهای ترکیبی به استاندارد سیستمهای تولیدی تبدیل شدهاند: جستجوی برداری تطابقهای معنایی را پوشش میدهد و BM25 اصطلاحات دقیق، شناسهها و اختصارات را مییابد؛ نتایج از طریق fusion ادغام میشوند[5][6][7].
- Re‑ranking (رتبهبندی مجدد) — فرآیندی دو مرحلهای: یک retriever سریع مجموعهای از کاندیداها (مثلاً top‑100) را برمیگرداند، سپس یک cross-encoder (یا reranker دیگری) ارتباط را محاسبه مجدد کرده و بهترینها (مثلاً top‑5) را برای LLM انتخاب میکند[8][9].
- Query Routing (مسیریابی درخواست) — در سیستمهایی با چندین منبع داده ناهمگن (ایندکسها/پایگاههای داده/API های مختلف)، درخواست توسط یک router (انتخابگر LLM یا دستهبند) به بهترین منبع هدایت میشود؛ شامل استراتژیهای fallback نیز میشود[10].
- Agentic/Web RAG (RAG عاملمحور) — LLM بهعنوان عامل عمل میکند: سؤالات پیچیده را تجزیه میکند، تکرارها را برنامهریزی کرده و از ابزارها (جستجوی برداری، جستجوی وب) با بازخورد استفاده میکند. پیادهسازی رایج — پارادایم ReAct است[11]؛ برای جمعآوری وبمحور و استناددهی اجباری به WebGPT مراجعه کنید[12].
پارادایمهای مرتبط و در حال توسعه
- GraphRAG (RAG گرافمحور) — از گراف دانش بهعنوان منبع و مکانیزم انتخاب زمینه استفاده میکند؛ جستجو از طریق ساختار روابط میان موجودیتها و متن صورت میگیرد و قابلیت تفسیر و کیفیت را در سؤالات چندگامه افزایش میدهد[13][14].
- MM‑RAG (RAG چندوجهی) — کار با متن و منابع بصری (اسکنها/نمودارها/جداول). مثال: VisRAG رویکرد بازیابی و تولید مبتنی بر VLM را روی اسناد چندوجهی نشان میدهد[15].
- Packaging & Context Handling (بستهبندی زمینه) — روشهای یکپارچهسازی chunk های یافتشده در prompt: Stuff، Map‑Reduce، Refine، Tree‑of‑Chunks (RAPTOR)[16].
جدول مقایسهای الگوها
| الگو | چه زمانی استفاده شود | تأثیر بر کیفیت | هزینه / تأخیر | ریسکها و محدودیتها |
|---|---|---|---|---|
| Classic RAG | PoC و Q&A ساده روی پایگاه داده همگن | سطح پایه؛ بهشدت به embedding ها وابسته است[1] | پایین | حساسیت به نحوه بیان؛ ریسک زمینه نامرتبط |
| Hybrid Retrieval | در اکثر سناریوهای تولیدی؛ کدها/اختصارات/شناسههای زیاد | جامعیت را افزایش میدهد؛ اصطلاحات دقیق را پوشش میدهد[5][6][7] | پایین/متوسط | تنظیم وزنهای fusion؛ دو ایندکس |
| Re‑ranking | هنگامی که دقت بالا حیاتی است | افزایش قابل توجه precision در top‑k[8][9] | متوسط/بالا | تأخیر/هزینه اضافی |
| Multi‑Query | درخواستهای کوتاه/چندوجهی | recall را افزایش میدهد[3] | متوسط | بازنویسیهای اضافی/پر سر و صدا |
| HyDE | درخواستهای کوتاه/مبهم با «شکاف معنایی» زیاد | کیفیت بازیابی zero‑shot را بهبود میدهد[4] | متوسط | به کیفیت متن «فرضی» وابسته است |
| Query Routing | چندین منبع (پایگاه اسناد، SQL، API، وب) | ارتباط را از طریق منبع صحیح افزایش میدهد[10] | متوسط | خطای مسیریابی = شکست جستجو |
| Agentic/Web RAG | درخواستهای پیچیده، پژوهشی، چندمرحلهای | مسائل فراتر از pipeline خطی را حل میکند[11][12] | بالا | پیچیدگی، ریسک حلقه بینهایت؛ نیاز به guardrail دارد |
پیادهسازی عملی و معماری
مراحل پیادهسازی
- Proof of Concept (PoC): با Classic RAG روی مجموعه داده محدود اما نماینده شروع کنید تا کیفیت embedding ها و بازیابی پایه را بررسی کنید[1].
- Minimum Viable Product (MVP): Hybrid Retrieval و Re‑ranking را بهعنوان بهترین نسبت «تلاش/اثر» پیادهسازی کنید[5][8].
- Production: تبدیلهای درخواست (HyDE، Multi‑Query) و در صورت نیاز Query Routing را اضافه کنید؛ observability (ثبت لاگ بازیابی/رتبهبندی مجدد/پاسخها) و A/B testing را راهاندازی کنید[3][10].
اجزای کلیدی
- Chunking (تقطیع): یکی از بحرانیترین عوامل کیفیت است. اندازه ثابت ساده اغلب واحدهای معنایی را از هم میبرد. استفاده از splitter های ساختارمحور (بر اساس markup) یا بازگشتی (پاراگراف → جمله → کلمه) توصیه میشود[17][18].
- Embedding ها و metadata: به همراه هر chunk، document_id، صفحه/بخش، عنوان و تاریخها را ذخیره کنید؛ این برای فیلترسازی و استناددهی صحیح به منابع ضروری است.
- بازیابی ترکیبی و rerank: از BM25+برداری با fusion (یا RRF) استفاده کنید، سپس یک cross-encoder برای رتبهبندی مجدد در مجموعه کوچکی از کاندیداها بهکار بگیرید[5][6][8].
- بستهبندی زمینه: برای corpus های بلند، Map‑Reduce، Refine یا Tree‑of‑Chunks را انتخاب کنید[16][18].
اشتباهات رایج (الگوهای ضد)
- فقط جستجوی برداری بدون BM25 ← شکست در کدها/شناسهها/اختصارات[5][7].
- chunk خیلی بزرگ/کوچک ← از دست دادن زمینه یا «پخش شدن» embedding[17].
- عدم استفاده از rerank در محیط تولیدی ← LLM زمینه پر سر و صدا دریافت میکند[8].
- عدم وجود observability و ردیابی منابع ← امکان بررسی علت خطاها وجود ندارد (به ارزیابی RAG مراجعه کنید).
ارزیابی کیفیت و معیارها
ارزیابی در سطح retriever (آفلاین) و end‑to‑end (تولید) انجام میشود.
معیارهای retriever
- Hit Rate، Recall@k، MRR — پوشش و موقعیت اسناد مرتبط.
- Context Precision & Recall — میزان خلوص زمینه استخراجشده از «سر و صدا» و پوشش همه موارد لازم (پیادهسازیشده در RAGAS)[19].
معیارهای generator (end‑to‑end)
- Faithfulness / Groundedness — انطباق پاسخ با زمینه ارائهشده.
- Answer Relevancy (ارتباط پاسخ) — انطباق با سؤال اصلی.
برای خودکارسازی معیارها از framework های متنباز استفاده میشود: RAGAS، TruLens (RAG triad: context relevance, groundedness, answer relevance)، DeepEval[20][21].
همچنین ببینید
- Retrieval-Augmented Generation (RAG)
- پایگاههای داده برداری
- Embedding
- عامل هوش مصنوعی
- GraphRAG
- MM-RAG
- ارزیابی و benchmark های LLM
منابع
- Lewis, P., Perez, E., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS. arXiv:2005.11401.
- Fan, W., Ding, Y., et al. (2024). A Survey on RAG Meeting LLMs: Towards Retrieval-Augmented Large Language Models. KDD. DOI:10.1145/3637528.3671470; arXiv:2405.06211.
- Gao, L., Ma, X., Lin, J., Callan, J. (2023). Precise Zero‑Shot Dense Retrieval without Relevance Labels (HyDE). ACL 2023. ACL Anthology; arXiv:2212.10496.
- Nogueira, R., Cho, K. (2019). Passage Re‑ranking with BERT. arXiv:1901.04085.
- Weaviate Docs. Hybrid search (BM25+Vector). [۱].
- Qdrant Docs. Hybrid Queries. [۲].
- Milvus Docs. Full‑Text Search / Hybrid Search. [۳] / [۴].
- LangChain Docs. MultiQueryRetriever. [۵].
- Cohere Docs. Rerank — best practices. [۶].
- LlamaIndex Docs. Routing (query routers/selectors). [۷].
- Yao, S., et al. (2023). ReAct: Synergizing Reasoning and Acting in Language Models. ICLR. arXiv:2210.03629.
- Nakano, R., et al. (2021). WebGPT: Browser‑assisted question‑answering with human feedback. arXiv:2112.09332.
- Microsoft Research Blog. GraphRAG: Unlocking LLM discovery on narrative private data. (2024). [۸].
- Microsoft Research. Project GraphRAG. (2024). [۹].
- Yu, S., et al. (2024). VisRAG: Vision‑based Retrieval‑augmented Generation on Multi‑modality Documents. arXiv:2410.10594.
- Sarthi, P., et al. (2024). RAPTOR: Recursive Abstractive Processing for Tree‑Organized Retrieval. arXiv:2401.18059.
- Es, S., et al. (2024). RAGAs: Automated Evaluation of Retrieval Augmented Generation. EACL (Demo). [۱۰].
- TruLens Docs. RAG Triad. [۱۱].
- DeepEval (GitHub). The LLM Evaluation Framework. [۱۲].
- LangChain Docs. RecursiveCharacterTextSplitter. [۱۳].
- LlamaIndex Docs. HierarchicalNodeParser; Response Synthesis (Tree/Refine). [۱۴]; [۱۵].
یادداشتها
- ↑ 1.0 1.1 1.2 1.3 Lewis, P., Perez, E., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS. arXiv:2005.11401.
- ↑ Fan, W., Ding, Y., et al. (2024). A Survey on RAG Meeting LLMs: Towards Retrieval-Augmented Large Language Models. KDD. DOI:10.1145/3637528.3671470; arXiv:2405.06211.
- ↑ 3.0 3.1 3.2 LangChain Docs. MultiQueryRetriever. https://python.langchain.com/docs/how_to/MultiQueryRetriever/
- ↑ 4.0 4.1 Gao, L., Ma, X., Lin, J., Callan, J. (2023). Precise Zero‑Shot Dense Retrieval without Relevance Labels. ACL 2023. arXiv:2212.10496; ACL Anthology: 2023.acl‑long.99.
- ↑ 5.0 5.1 5.2 5.3 5.4 Weaviate Docs. Hybrid search (BM25+Vector). https://docs.weaviate.io/weaviate/concepts/search/hybrid-search
- ↑ 6.0 6.1 6.2 Qdrant Docs. Hybrid Queries. https://qdrant.tech/documentation/concepts/hybrid-queries/
- ↑ 7.0 7.1 7.2 Milvus Docs. Full‑Text Search и Hybrid Search. https://milvus.io/docs/full-text-search.md; https://milvus.io/docs/hybrid_search_with_milvus.md
- ↑ 8.0 8.1 8.2 8.3 8.4 Nogueira, R., Cho, K. (2019). Passage Re‑ranking with BERT. arXiv:1901.04085.
- ↑ 9.0 9.1 Cohere Docs. Rerank — best practices. https://docs.cohere.com/docs/reranking-best-practices
- ↑ 10.0 10.1 10.2 LlamaIndex Docs. Routing (query routers/selectors). https://docs.llamaindex.ai/en/stable/module_guides/querying/router/
- ↑ 11.0 11.1 Yao, S., et al. (2023). ReAct: Synergizing Reasoning and Acting in Language Models. ICLR 2023. arXiv:2210.03629.
- ↑ 12.0 12.1 Nakano, R., et al. (2021). WebGPT: Browser‑assisted question‑answering with human feedback. arXiv:2112.09332.
- ↑ Microsoft Research Blog. GraphRAG: Unlocking LLM discovery on narrative private data. 2024. https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
- ↑ Microsoft Research. Project GraphRAG. https://www.microsoft.com/en-us/research/project/graphrag/
- ↑ Yu, S., et al. (2024). VisRAG: Vision‑based Retrieval‑augmented Generation on Multi‑modality Documents. arXiv:2410.10594; OpenReview: zG459X3Xge.
- ↑ 16.0 16.1 Sarthi, P., et al. (2024). RAPTOR: Recursive Abstractive Processing for Tree‑Organized Retrieval. arXiv:2401.18059.
- ↑ 17.0 17.1 LangChain Docs. RecursiveCharacterTextSplitter. https://python.langchain.com/docs/how_to/recursive_text_splitter/
- ↑ 18.0 18.1 LlamaIndex Docs. HierarchicalNodeParser и Tree Summarization. https://docs.llamaindex.ai/en/stable/api/llama_index.core.node_parser.HierarchicalNodeParser.html; https://docs.llamaindex.ai/en/stable/examples/low_level/response_synthesis/
- ↑ Es, S., et al. (2024). RAGAs: Automated Evaluation of Retrieval Augmented Generation. EACL (Demo). https://aclanthology.org/2024.eacl-demo.16/
- ↑ TruLens Docs. RAG Triad. https://www.trulens.org/getting_started/core_concepts/rag_triad/
- ↑ DeepEval (GitHub). https://github.com/confident-ai/deepeval