สรุปสั้น

  • RAG (Retrieval-Augmented Generation) คือให้ AI ค้นข้อมูลที่เกี่ยวข้องก่อน แล้วค่อยเอามาประกอบการตอบ
  • แก้ 3 ปัญหาหลักของ AI: ไม่รู้ข้อมูลใหม่, ไม่รู้ข้อมูลภายในของเรา, และชอบแต่งคำตอบขึ้นมาเอง
  • เปรียบเหมือน สอบแบบเปิดหนังสือ แทนที่จะให้ท่องจำทุกอย่าง
  • คุณภาพของ RAG ขึ้นกับ ขั้นค้นหา มากกว่าตัวโมเดล ถ้าค้นเจอผิด ต่อให้โมเดลเก่งแค่ไหนก็ตอบผิด

ปัญหาที่ RAG เข้ามาแก้

โมเดลภาษา (LLM) รู้เฉพาะสิ่งที่เคยเห็นตอนฝึก จึงมีข้อจำกัด 3 อย่าง

  1. ข้อมูลตัดจบ ณ วันหนึ่ง: ไม่รู้เรื่องที่เกิดหลังจากนั้น
  2. ไม่รู้ข้อมูลส่วนตัวหรือข้อมูลภายในองค์กร: เช่น คู่มือพนักงาน, เอกสารสินค้า, โน้ตของเราเอง
  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: ตอบคำถาม

  1. แปลงคำถามเป็นตัวเลขความหมายแบบเดียวกัน
  2. ค้นหาชิ้นเอกสารที่ความหมายใกล้คำถามที่สุด มักเอามาไม่กี่ชิ้น
  3. ประกอบ prompt ประมาณว่า “จงตอบคำถามโดยใช้ข้อมูลต่อไปนี้เท่านั้น: [ชิ้นเอกสาร] คำถาม: [คำถาม]”
  4. 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 ก็ได้

แหล่งอ้างอิง