Retrieval-Augmented Generation — จาก Naive RAG สู่ Agentic RAG
RAG = ระบบที่ "ค้นหาข้อมูลที่เกี่ยวข้อง" ก่อน แล้วส่งให้ AI ใช้ตอบ — ลด Hallucination, ใช้ข้อมูลองค์กรจริง, อัปเดตได้โดยไม่ต้อง retrain
AI ปกติ: ถามว่า "นโยบายลาพักร้อนบริษัทเราเป็นอย่างไร?" → AI ตอบจากความรู้ทั่วไป (อาจผิด)
AI + RAG: ถามคำถามเดียวกัน → ระบบค้นหาคู่มือพนักงานบริษัท → ส่งข้อมูลที่เกี่ยวข้องให้ AI → AI ตอบจากเอกสารจริง พร้อมอ้างอิงหน้าที่มา
ประโยชน์: ไม่ต้อง train AI ใหม่ทุกครั้งที่นโยบายเปลี่ยน แค่อัปเดตเอกสารก็พอ
| ประเภท | คำอธิบาย | เหมาะกับ |
|---|---|---|
| Naive RAG | Embed → Search → Generate | Prototype, ข้อมูลน้อย |
| Advanced RAG | + Query rewriting + Reranking + Hybrid search | Production ทั่วไป |
| Modular RAG | แยก components ปรับแต่งได้ | Enterprise customization |
| Agentic RAG | AI ตัดสินใจเองว่าจะค้นอะไร/เมื่อไหร่ | งานซับซ้อน multi-hop |
| GraphRAG | ใช้ Knowledge Graph + entities | งานเชื่อมโยงข้อมูล, สืบสวน |
| Self-RAG | AI ประเมินตัวเองว่าต้องค้นเพิ่มไหม | งานที่ต้องการ accuracy สูง |
| CRAG | Corrective RAG — แก้ไขถ้าค้นผิด | ลด hallucination ในข้อมูลซับซ้อน |
ทำความสะอาดเอกสาร, split เป็น chunks ขนาดเหมาะ, ใส่ metadata (หน้า, วันที่, แหล่งที่มา) ก่อน embed
ค้นแบบ hybrid (keyword + vector), re-rank ผลลัพธ์, คืน chunks พร้อม retrieval score
บังคับ AI cite แหล่งข้อมูล, fallback เมื่อ score ต่ำ, ชี้ conflict เมื่อเอกสารขัดแย้งกัน
วัด Faithfulness, Answer Relevancy, Context Precision/Recall, latency อย่างต่อเนื่อง
ถ้า retrieval score ต่ำกว่า threshold ที่กำหนด — AI ต้องตอบ "ข้อมูลไม่เพียงพอ" แทนการเดาหรือใช้ความรู้ทั่วไป → กำหนด threshold ใน System Prompt เสมอ
GraphRAG สร้าง Knowledge Graph จากเอกสาร จับ entities (คน, สถานที่, องค์กร) และ relationships → ตอบคำถามที่ต้อง เชื่อมโยงข้อมูลหลายแหล่ง ได้ดีกว่า vector search ธรรมดา
💡 เข้าใจง่ายๆ:
| เทคนิค | ผลที่วัดได้ | วิธีทำ | ลำดับความสำคัญ |
|---|---|---|---|
| Cross-Encoder Reranking | +15–30% quality | ใช้ cross-encoder model จัดอันดับ retrieved chunks ใหม่ก่อนส่งให้ AI | ทำก่อน — ROI สูงสุด |
| Contextual Retrieval | -49% failed retrieval | Prepend 50-100 token context ให้แต่ละ chunk ก่อน embed | ทำใน Ingestion stage |
| Hybrid Search (BM25 + Vector) | +10–30% recall | ผสม keyword search + semantic search, merge ด้วย RRF | เหมาะคำถามที่มีคำเฉพาะ |
| Query Routing | -20–40% cost | AI ตัดสินใจว่าต้อง retrieve จริงหรือตอบได้เลย | ลดค่าใช้จ่ายระยะยาว |
เริ่มจาก Reranking ก่อน — ROI สูงที่สุดและ implement ง่ายที่สุด → ต่อด้วย Contextual Retrieval → แล้วค่อย Hybrid Search เมื่อต้องการ precision เพิ่ม
# RAG Answer Contract
# Domain: [ชื่อ domain]
คุณเป็นผู้ช่วย RAG สำหรับ [Domain]
คำถามผู้ใช้: {user_query}
เอกสารที่ดึงมา:
[Chunk A | source: ชื่อเอกสาร หน้า X | score: 0.XX]
{content_a}
[Chunk B | source: ชื่อเอกสาร หน้า X | score: 0.XX]
{content_b}
[Chunk C | source: ชื่อเอกสาร หน้า X | score: 0.XX]
{content_c}
กติกา:
1) ตอบเฉพาะสิ่งที่มีใน chunks — ห้ามใช้ความรู้ทั่วไป
2) ทุกข้อสรุปต้องอ้าง [Chunk ID] และ score
3) ถ้า chunks ขัดแย้งกัน → ชี้จุดขัดแย้งและระบุ chunk ที่น่าเชื่อถือกว่า
(score สูงกว่า / วันที่ใหม่กว่า)
4) ถ้า score ต่ำกว่า {threshold} → ตอบ "ข้อมูลไม่เพียงพอ
โปรดระบุคำถามเพิ่มเติม"
5) ห้ามแต่งเรื่อง สมมติ หรือเดาข้อมูลที่ไม่มีใน chunks
รูปแบบผลลัพธ์:
- คำตอบสั้น (ไม่เกิน 150 คำ)
- หลักฐานอ้างอิง: ตาราง [ข้อสรุป | Chunk ID | Score]
- ระดับความเชื่อมั่นรวม (สูง/กลาง/ต่ำ) + เหตุผล
- คำถามต่อยอดที่ควรถาม (1-2 ข้อ)
ความต่าง: RAG Answer Contract บังคับให้ AI แสดง chunk ID และ score ทุกครั้ง — ทำให้ตรวจสอบ hallucination ได้ง่ายมาก
คุณเป็นผู้ช่วย RAG สำหรับฐานระเบียบ สตช. คำถาม: "การขอหมายจับผู้ต้องหาคดีออนไลน์ต้องมีหลักฐานอะไรบ้าง?" [Chunk A | source: ระเบียบ ตร. ว่าด้วยการสอบสวน 2566 หมวด 4 ข้อ 23 | score: 0.92] "การขอหมายจับต้องมีพยานหลักฐานเพียงพอที่จะเชื่อได้ว่าผู้ต้องหากระทำผิด..." [Chunk B | source: คู่มือปฏิบัติ บก.ปอท. 2567 บทที่ 5 | score: 0.88] "หลักฐานดิจิทัลที่ใช้ประกอบคำร้อง: IP log, transaction record, device fingerprint..." [Chunk C | source: ระเบียบ ตร. ฉบับเก่า 2561 หมวด 3 | score: 0.61] "ต้องมีพยานบุคคลอย่างน้อย 2 ปาก..." (⚠️ score ต่ำ + เวอร์ชันเก่า) กติกา: (เหมือน template ด้านบน threshold = 0.75) รูปแบบผลลัพธ์: - คำตอบสั้น: [สรุปจาก Chunk A + B] - หลักฐานอ้างอิง: ตาราง [ข้อสรุป | Chunk | Score] - หมายเหตุ: Chunk C score ต่ำ (0.61) และเป็นระเบียบเก่า 2561 — แนะนำ verify กับ Chunk A ที่ใหม่กว่า - คำถามต่อยอด: "ต้องการทราบขั้นตอนการยื่นคำร้องต่อศาล หลังรวบรวมหลักฐานแล้วหรือไม่?"
Chunk C score 0.61 < threshold 0.75 — RAG ต้องแจ้งว่าข้อมูลนี้ความเชื่อมั่นต่ำและเป็นเวอร์ชันเก่า ไม่ใช่ตอบโดยไม่เตือน
| Metric | ความหมาย | เป้าหมาย | ถ้าต่ำกว่า → แก้ที่ไหน |
|---|---|---|---|
| Faithfulness | AI ตอบตาม context จริงไม่เดา | > 0.90 | แก้ Generation prompt — เพิ่ม constraint + citation |
| Answer Relevancy | คำตอบตรงกับคำถาม | > 0.85 | แก้ Retrieval — ปรับ query rewriting หรือ embedding model |
| Context Precision | chunks ที่ดึงมาเกี่ยวข้องจริง | > 0.80 | แก้ Retrieval — ลด top-k, เพิ่ม reranking |
| Context Recall | ดึง chunks ครบหรือไม่ | > 0.80 | แก้ Ingestion — chunk size, metadata, embedding |
RAG systems จำนวนมากล้มเหลวเพราะทำ Naive RAG โดยไม่ eval (ตัวเลข "70%+" ที่อ้างถึงในอุตสาหกรรมเป็นค่าประมาณการ) — กำหนด RAGAS baseline ก่อน deploy เสมอ
ถาม AI ตรงๆ ว่า: "คำตอบนี้มาจาก context ส่วนไหน? cite chunk ให้ด้วย" — ถ้า AI ทำไม่ได้ แสดงว่า System Prompt ยังไม่ strict พอ
| # | ❌ ข้อผิดพลาด | ✅ วิธีที่ถูกต้อง |
|---|---|---|
| 1 | ทำ Naive RAG (embed → search → generate) โดยไม่ eval → production fail | ทำ Advanced RAG: Query rewriting + Reranking + Hybrid search + RAGAS eval |
| 2 | ไม่มี RAG Answer Contract → AI แต่งเรื่อง ไม่อ้างอิง chunk | บังคับให้อ้างอิง chunk ID + score ทุกครั้ง พร้อม fallback rule |
| 3 | ไม่ระบุ score threshold → AI ตอบจาก chunk ที่ไม่เกี่ยวข้อง | กำหนด threshold (เช่น 0.75) และบังคับว่า score ต่ำกว่า → "ข้อมูลไม่เพียงพอ" |
| 4 | Chunk size ใหญ่เกินไป (2000+ tokens) → ข้อมูลไม่ relevant | Chunk size 300-500 tokens พร้อม 50-100 tokens overlap + prepend context |
| 5 | ไม่มี metadata ใน chunks → ไม่รู้ว่ามาจากไหน วันไหน | ใส่ metadata: source, page, date, author ก่อน embed |
| 6 | Faithfulness สูง แต่ Answer Relevancy ต่ำ → ปัญหาอยู่ที่ Retrieval | แก้ที่ Retrieval: ปรับ query rewriting, embedding model, เพิ่ม reranking |
| 7 | Deploy โดยไม่กำหนด RAGAS baseline → ไม่รู้ว่าเสื่อมลงหรือไม่ | กำหนด targets ก่อน deploy: Faithfulness > 0.90, Answer Relevancy > 0.85, Precision/Recall > 0.80 |
โจทย์: ระบบ RAG มี faithfulness สูง (0.92) แต่ answer relevancy ต่ำ (0.71) — ปัญหาอยู่ที่ stage ไหน? ควรแก้อะไรก่อน?