สรุปสั้น
- RAG (Retrieval-Augmented Generation) คือให้ AI ค้นข้อมูลที่เกี่ยวข้องก่อน แล้วค่อยเอามาประกอบการตอบ
- แก้ 3 ปัญหาหลักของ AI: ไม่รู้ข้อมูลใหม่, ไม่รู้ข้อมูลภายในของเรา, และชอบแต่งคำตอบขึ้นมาเอง
- เปรียบเหมือน สอบแบบเปิดหนังสือ แทนที่จะให้ท่องจำทุกอย่าง
- คุณภาพของ RAG ขึ้นกับ ขั้นค้นหา มากกว่าตัวโมเดล ถ้าค้นเจอผิด ต่อให้โมเดลเก่งแค่ไหนก็ตอบผิด
ปัญหาที่ RAG เข้ามาแก้
โมเดลภาษา (LLM) รู้เฉพาะสิ่งที่เคยเห็นตอนฝึก จึงมีข้อจำกัด 3 อย่าง
- ข้อมูลตัดจบ ณ วันหนึ่ง: ไม่รู้เรื่องที่เกิดหลังจากนั้น
- ไม่รู้ข้อมูลส่วนตัวหรือข้อมูลภายในองค์กร: เช่น คู่มือพนักงาน, เอกสารสินค้า, โน้ตของเราเอง
- ตอบมั่นใจแม้ไม่รู้จริง (hallucination): ถ้าไม่มีข้อมูล ก็อาจแต่งคำตอบที่ฟังดูน่าเชื่อขึ้นมา
RAG แก้ด้วยการหยิบข้อมูลที่ถูกต้องไปวางตรงหน้าโมเดล ก่อน ให้มันตอบ
RAG ทำงานยังไง
แบ่งเป็น 2 ช่วง: เตรียมข้อมูล (ทำล่วงหน้าครั้งเดียว) และ ตอบคำถาม (ทำทุกครั้งที่มีคนถาม)
flowchart LR subgraph prep["เตรียมข้อมูล (ทำล่วงหน้า)"] A[เอกสาร] --> B[หั่นเป็นชิ้นเล็ก] B --> C[แปลงเป็นตัวเลขความหมาย] C --> D[(คลังค้นหา)] end subgraph ask["ตอบคำถาม (ทุกครั้ง)"] Q[คำถาม] --> E[ค้นชิ้นที่เกี่ยวข้อง] D --> E E --> F[แนบชิ้นข้อมูล + คำถาม ส่งให้ AI] F --> G[คำตอบพร้อมที่มา] end
ช่วงที่ 1: เตรียมข้อมูล
- หั่นเอกสาร (chunking): ตัดเอกสารยาว ๆ เป็นชิ้นละไม่กี่ย่อหน้า เพราะเราต้องการส่งให้ AI เฉพาะส่วนที่เกี่ยวข้อง ไม่ใช่ทั้งเล่ม
- แปลงเป็นตัวเลขความหมาย (embedding): แปลงแต่ละชิ้นเป็นชุดตัวเลขที่แทน “ความหมาย” ข้อความที่ความหมายใกล้กันจะได้ตัวเลขใกล้กัน แม้ใช้คำคนละคำ เช่น “ลาป่วย” กับ “หยุดงานเพราะไม่สบาย”
- เก็บลงคลังค้นหา (vector database): ฐานข้อมูลที่ถนัดหาชุดตัวเลขที่ใกล้กันได้เร็ว
ช่วงที่ 2: ตอบคำถาม
- แปลงคำถามเป็นตัวเลขความหมายแบบเดียวกัน
- ค้นหาชิ้นเอกสารที่ความหมายใกล้คำถามที่สุด มักเอามาไม่กี่ชิ้น
- ประกอบ prompt ประมาณว่า “จงตอบคำถามโดยใช้ข้อมูลต่อไปนี้เท่านั้น: [ชิ้นเอกสาร] คำถาม: [คำถาม]”
- AI ตอบจากข้อมูลที่แนบให้ และอ้างอิงได้ว่ามาจากเอกสารไหน
RAG เทียบกับทางเลือกอื่น
| วิธี | หลักการ | เหมาะกับ | ข้อจำกัด |
|---|---|---|---|
| RAG | ค้นแล้วแนบข้อมูลตอนถาม | ข้อมูลเยอะ เปลี่ยนบ่อย ต้องอ้างที่มา | ต้องดูแลระบบค้นหา |
| ใส่เอกสารทั้งหมดใน prompt | แนบทุกอย่างไปเลย | เอกสารน้อย พอดีกับขนาด context | แพงและช้าเมื่อข้อมูลเยอะ |
| Fine-tuning | ฝึกโมเดลเพิ่ม | ปรับสไตล์ รูปแบบ หรือทักษะเฉพาะทาง | ไม่เหมาะกับการยัดข้อเท็จจริงที่เปลี่ยนบ่อย |
กฎง่าย ๆ
อยากให้ AI รู้ ข้อมูลใหม่ → ใช้ RAG
อยากให้ AI ทำตัว แบบใหม่ (สไตล์ รูปแบบคำตอบ) → ลอง prompt ก่อน ค่อยพิจารณา fine-tuning
เอกสารน้อยจนใส่ใน prompt ได้หมด → ใส่ไปเลย ไม่ต้องทำ RAG
จุดที่มักพลาด
- หั่นชิ้นไม่ดี: ชิ้นเล็กไปจนขาดบริบท (“เขา” หมายถึงใคร?) หรือใหญ่ไปจนมีเรื่องอื่นปน
- ค้นเจอแต่ไม่ตรง: การค้นด้วยความหมายอย่างเดียวอาจพลาดคำเฉพาะ เช่น รหัสสินค้าหรือชื่อเฉพาะ
- ข้อมูลในคลังเก่า: แก้เอกสารต้นทางแล้ว แต่ลืมอัปเดตคลังค้นหา
- ไม่ได้สั่งให้ตอบว่าไม่รู้: ถ้าค้นไม่เจอ AI อาจกลับไปเดาเอง ควรสั่งชัด ๆ ว่า “ถ้าไม่มีในข้อมูล ให้ตอบว่าไม่ทราบ”
เทคนิคทำให้ RAG แม่นขึ้น
- ค้นแบบผสม (hybrid search): ใช้ทั้งค้นด้วยความหมายและค้นด้วยคีย์เวิร์ดแบบดั้งเดิม ได้ทั้งความเข้าใจและความตรงตัว
- จัดอันดับซ้ำ (reranking): ค้นมาเยอะ ๆ ก่อน แล้วใช้โมเดลอีกตัวคัดเฉพาะชิ้นที่ตรงที่สุด
- เติมบริบทให้แต่ละชิ้น: แปะคำอธิบายสั้น ๆ ว่าชิ้นนี้มาจากเอกสารไหน ส่วนไหน ก่อนเก็บลงคลัง (Anthropic เรียกว่า Contextual Retrieval)
- กรองด้วยข้อมูลประกอบ (metadata): เช่น ค้นเฉพาะเอกสารปีนี้ หรือเฉพาะแผนกที่เกี่ยวข้อง
- ให้อ้างที่มาทุกครั้ง: ผู้ใช้ตรวจสอบได้ และเราจับได้ง่ายเมื่อระบบค้นผิด
ตัวอย่างการใช้งานจริง
- แชตบอตตอบคำถามจากคู่มือสินค้าหรือ FAQ ของบริษัท
- ผู้ช่วยค้นเอกสารภายใน เช่น นโยบาย HR หรือเอกสารเทคนิค
- ถามตอบจากโน้ตส่วนตัว เช่น เอาโน้ตในสวนความรู้นี้ไปทำ RAG ก็ได้
แหล่งอ้างอิง
- Lewis et al. (2020), Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks: งานวิจัยที่ตั้งชื่อ RAG · https://arxiv.org/abs/2005.11401
- Anthropic (2024), Introducing Contextual Retrieval · https://www.anthropic.com/news/contextual-retrieval