RAG patterns (TH)
RAG-паттерны (อังกฤษ: RAG Patterns) — คือชุดของแนวทางสถาปัตยกรรมและระเบียบวิธีสำหรับการสร้างระบบ Retrieval-Augmented Generation (RAG) รูปแบบเหล่านี้ได้รับการออกแบบมาเพื่อแก้ปัญหาพื้นฐานของโมเดลภาษาขนาดใหญ่ (LLM) เช่น การสร้างข้อมูลเท็จ (hallucination) ความล้าสมัยของความรู้ และการขาดความเฉพาะเจาะจงในโดเมน โดยบูรณาการ LLM เข้ากับแหล่งข้อมูลภายนอกที่เข้าถึงได้แบบไดนามิก[1] วิวัฒนาการของ RAG ได้ดำเนินมาจากไปป์ไลน์เชิงเส้นแบบง่ายไปสู่ระบบโมดูลาร์และระบบเอเจนต์ที่ซับซ้อน[2]
รูปแบบหลักของ RAG
ด้วยการพัฒนาของเทคโนโลยี จึงได้เกิด RAG-паттерны หลายรูปแบบ โดยแต่ละรูปแบบแก้ปัญหาเฉพาะเจาะจงและมีการแลกเปลี่ยนระหว่างคุณภาพ ความเร็ว และต้นทุนที่แตกต่างกัน
- Classic RAG (RAG แบบคลาสสิก) — แนวทางพื้นฐาน โดยคำค้นหาของผู้ใช้จะถูกแปลงเป็น vector เพื่อค้นหาส่วนข้อมูล (chunk) ที่เกี่ยวข้องในฐานข้อมูล vector; chunk ที่พบจะถูกส่งเข้า LLM พร้อมกับคำถามเพื่อสร้างคำตอบ[1]
- Multi‑Query RAG (การค้นหาหลายคำค้น) — LLM สร้างตัวแปรคำค้นหาที่ถูกกำหนดใหม่หรือขยายความหลายรูปแบบจากคำค้นหาต้นฉบับ; การค้นหาจะดำเนินการตามตัวแปรทั้งหมดและรวมผลลัพธ์เข้าด้วยกัน ซึ่งช่วยเพิ่มความครอบคลุม (recall)[3]
- HyDE (Hypothetical Document Expansion) — สำหรับการเอาชนะ "ช่องว่างทางความหมาย" ระหว่างคำค้นหาสั้นและเอกสารยาว LLM จะสร้างเอกสาร "สมมุติ" เป็นคำตอบก่อน จากนั้น embedding ของเอกสารนั้นจะถูกใช้ในการค้นหา ซึ่งมักช่วยปรับปรุงคุณภาพการดึงข้อมูล[4]
- Hybrid Retrieval (การค้นหาแบบผสม) — การรวมการค้นหาเชิงความหมาย (vector) และการค้นหาเชิงคำ (BM25) รูปแบบผสมได้กลายเป็นมาตรฐานสำหรับระบบในระดับ production: การค้นหา vector ครอบคลุมความสอดคล้องเชิงความหมาย ขณะที่ BM25 ค้นพบคำที่แม่นยำ/ID/ตัวย่อ; ผลลัพธ์จะถูกรวมด้วย fusion[5][6][7]
- Re‑ranking (การจัดอันดับเพิ่มเติม) — กระบวนการสองขั้นตอน: ตัวดึงข้อมูลที่รวดเร็วจะส่งชุดตัวเลือก (เช่น top-100) จากนั้น cross-encoder (หรือตัว rerank อื่น) จะคำนวณความเกี่ยวข้องใหม่และคัดเลือกตัวเลือกที่ดีที่สุด (เช่น top-5) สำหรับ LLM[8][9]
- Query Routing (การกำหนดเส้นทางคำค้นหา) — ในระบบที่มีแหล่งข้อมูลหลายแหล่งที่แตกต่างกัน (index/ฐานข้อมูล/API ต่างๆ) คำค้นหาจะถูกส่งไปยังแหล่งข้อมูลที่ดีที่สุดโดยใช้ router (LLM-selector หรือ classifier); รวมถึง fallback strategy[10]
- Agentic/Web RAG (RAG แบบเอเจนต์) — LLM ทำหน้าที่เป็นเอเจนต์: แยกย่อยคำถามที่ซับซ้อน วางแผนการทำซ้ำ และใช้เครื่องมือ (การค้นหา vector, การค้นหาบนเว็บ) พร้อมการตอบรับ การนำไปใช้งานทั่วไปคือกระบวนทัศน์ ReAct[11]; สำหรับการรวบรวมข้อมูลบนเว็บและการอ้างอิงที่บังคับ โปรดดู WebGPT[12]
กระบวนทัศน์ที่เกี่ยวข้องและกำลังพัฒนา
- GraphRAG (RAG แบบกราฟ) — ใช้กราฟความรู้เป็นแหล่งข้อมูลและกลไกการเลือก context; การค้นหาดำเนินการตามโครงสร้างความสัมพันธ์ระหว่าง entity และข้อความ ซึ่งเพิ่มความสามารถในการตีความและคุณภาพสำหรับคำถาม multi-hop[13][14]
- MM‑RAG (RAG แบบหลายโมดัล) — การทำงานกับแหล่งข้อมูลข้อความและภาพ (สแกน/ไดอะแกรม/ตาราง) ตัวอย่าง: VisRAG แสดงให้เห็นการดึงข้อมูลและการสร้างที่เน้น VLM บนเอกสารหลายโมดัล[15]
- Packaging & Context Handling (การบรรจุ context) — วิธีการบูรณาการ chunk ที่พบเข้าใน prompt: Stuff, Map‑Reduce, Refine, Tree‑of‑Chunks (RAPTOR)[16]
ตารางเปรียบเทียบรูปแบบ
| รูปแบบ | เมื่อใดควรนำไปใช้ | ผลกระทบต่อคุณภาพ | ต้นทุน / ความหน่วง | ความเสี่ยงและข้อจำกัด |
|---|---|---|---|---|
| Classic RAG | PoC และ Q&A แบบง่ายบนฐานข้อมูลที่เป็นเนื้อเดียวกัน | ระดับพื้นฐาน; ขึ้นอยู่กับ embedding อย่างมาก[1] | ต่ำ | ความไวต่อการกำหนดคำ; ความเสี่ยงของ context ที่ไม่เกี่ยวข้อง |
| Hybrid Retrieval | ส่วนใหญ่ในสถานการณ์ production; มีโค้ด/ตัวย่อ/ID จำนวนมาก | เพิ่มความครอบคลุม; ครอบคลุมคำที่แม่นยำ[5][6][7] | ต่ำ/ปานกลาง | การปรับน้ำหนัก fusion; สอง index |
| Re‑ranking | สำคัญเมื่อต้องการความแม่นยำสูง | เพิ่ม precision บน top-k อย่างมีนัยสำคัญ[8][9] | ปานกลาง/สูง | ความหน่วง/ต้นทุนเพิ่มเติม |
| Multi‑Query | คำค้นหาสั้น/หลายแง่มุม | เพิ่ม recall[3] | ปานกลาง | การกำหนดใหม่ที่ซ้ำซ้อน/มีสัญญาณรบกวน |
| HyDE | คำค้นหาสั้น/คลุมเครือที่มี "ช่องว่างทางความหมาย" ขนาดใหญ่ | ปรับปรุงคุณภาพการดึงข้อมูล zero‑shot[4] | ปานกลาง | ขึ้นอยู่กับคุณภาพของข้อความ "สมมุติ" |
| Query Routing | แหล่งข้อมูลหลายแหล่ง (ฐานเอกสาร, SQL, API, เว็บ) | เพิ่มความเกี่ยวข้องด้วยการเลือกแหล่งข้อมูลที่ถูกต้อง[10] | ปานกลาง | ข้อผิดพลาดในการกำหนดเส้นทาง = การค้นหาล้มเหลว |
| Agentic/Web RAG | คำค้นหาที่ซับซ้อน เชิงสืบค้น หลายขั้นตอน | แก้ปัญหาที่อยู่นอกเหนือไปป์ไลน์เชิงเส้น[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 (การบันทึก log การดึงข้อมูล/rerank/คำตอบ) และการทดสอบ A/B[3][10]
องค์ประกอบหลัก
- Chunking (การแบ่งส่วนข้อมูล): หนึ่งในปัจจัยที่วิกฤตที่สุดสำหรับคุณภาพ การแบ่งขนาดคงที่แบบไร้เดียงสามักจะทำลายหน่วยความหมาย แนะนำให้ใช้ splitter ที่เน้นโครงสร้าง (ตาม markup) หรือแบบ recursive (ย่อหน้า → ประโยค → คำ)[17][18]
- Embedding และ metadata: จัดเก็บ document_id, หน้า/ส่วน, หัวข้อ, วันที่ พร้อมกับแต่ละ chunk; สิ่งนี้จำเป็นสำหรับการกรองและการอ้างอิงแหล่งที่มาอย่างถูกต้อง
- Hybrid retrieval และ rerank: ใช้ BM25+vector พร้อม fusion (หรือ RRF) จากนั้น cross-encoder สำหรับการจัดอันดับใหม่บนกลุ่มตัวเลือกขนาดเล็ก[5][6][8]
- การบรรจุ context: เลือก Map‑Reduce, Refine หรือ Tree‑of‑Chunks สำหรับคลังข้อมูลขนาดใหญ่[16][18]
ข้อผิดพลาดทั่วไป (anti-pattern)
- เฉพาะการค้นหา vector โดยไม่มี BM25 → ล้มเหลวกับโค้ด/ID/ตัวย่อ[5][7]
- Chunk ที่ใหญ่/เล็กเกินไป → สูญเสีย context หรือ embedding "เจือจาง"[17]
- ไม่มี rerank ใน production → LLM ได้รับ context ที่มีสัญญาณรบกวน[8]
- ไม่มี observability และการติดตามแหล่งที่มา → ไม่สามารถวิเคราะห์สาเหตุของข้อผิดพลาด (ดูการประเมิน RAG)
การประเมินคุณภาพและ metric
การประเมินดำเนินการในระดับ retrieval (offline) และ end‑to‑end (การสร้าง)
Metric ของ retriever
- Hit Rate, Recall@k, MRR — ความครอบคลุมและตำแหน่งของเอกสารที่เกี่ยวข้อง
- Context Precision & Recall — ความสะอาดของ context ที่ดึงออกมาจาก "สัญญาณรบกวน" และความครอบคลุมทุกสิ่งที่จำเป็น (นำไปใช้งานใน RAGAS)[19]
Metric ของ generator (end‑to‑end)
- Faithfulness / Groundedness — ความสอดคล้องของคำตอบกับ context ที่ให้ไว้
- Answer Relevancy (ความเกี่ยวข้องของคำตอบ) — ความสอดคล้องกับคำถามต้นฉบับ
สำหรับการทำ metric อัตโนมัติ จะใช้ open-source framework ได้แก่: RAGAS, TruLens (RAG triad: context relevance, groundedness, answer relevance), DeepEval[20][21]
ดูเพิ่มเติม
- Retrieval-Augmented Generation (RAG)
- ฐานข้อมูล vector
- Embedding
- AI-agent
- 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). [1].
- Qdrant Docs. Hybrid Queries. [2].
- Milvus Docs. Full‑Text Search / Hybrid Search. [3] / [4].
- LangChain Docs. MultiQueryRetriever. [5].
- Cohere Docs. Rerank — best practices. [6].
- LlamaIndex Docs. Routing (query routers/selectors). [7].
- 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). [8].
- Microsoft Research. Project GraphRAG. (2024). [9].
- 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). [10].
- TruLens Docs. RAG Triad. [11].
- DeepEval (GitHub). The LLM Evaluation Framework. [12].
- LangChain Docs. RecursiveCharacterTextSplitter. [13].
- LlamaIndex Docs. HierarchicalNodeParser; Response Synthesis (Tree/Refine). [14]; [15].
หมายเหตุ
- ↑ 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