RAG คืออะไร Retrieval-Augmented Generation อธิบายง่ายๆ
RAG (retrieval-augmented generation) คือวิธีทำให้โมเดลภาษาขนาดใหญ่ตอบคำถามโดยใช้ข้อมูลของคุณเอง เมื่อมีคนถามคำถาม แอปของคุณจะค้นหาในเอกสารเพื่อหาข้อความที่เกี่ยวข้องที่สุดก่อน แล้วส่งข้อความเหล่านั้นให้โมเดลพร้อมกับคำถาม โมเดลจะเขียนคำตอบจากข้อความนั้น แทนที่จะพึ่งพาแค่สิ่งที่มันเรียนรู้มาโดยบังเอิญระหว่างการฝึก
ทำไม RAG จึงสำคัญเมื่อสร้างด้วย AI
โมเดลภาษาขนาดใหญ่รู้เรื่องโลกโดยทั่วไปค่อนข้างมาก แต่ไม่รู้อะไรเกี่ยวกับธุรกิจของคุณเลย เช่น ราคา นโยบาย คู่มือสินค้า หรือคำร้องฝ่ายสนับสนุนเมื่อสัปดาห์ที่แล้ว นอกจากนี้ยังมีวันตัดข้อมูลการฝึก จึงไม่รู้เรื่องที่เพิ่งเกิดขึ้น ถ้าคุณถามไป มันอาจตอบอย่างมั่นใจ ฟังดูน่าเชื่อ แต่ผิด
มีตัวเลือกกว้างๆ สามแบบในการแก้ปัญหานี้:
| แนวทาง | สิ่งที่ทำ | เหมาะกับ |
|---|---|---|
| ใส่ทุกอย่างลงใน prompt | ส่งเอกสารทั้งหมดพร้อมทุกคำถาม | ข้อความปริมาณน้อย เช่นไม่กี่หน้า |
| RAG | ค้นหาในเอกสาร ส่งเฉพาะส่วนที่เกี่ยวข้อง | คอลเลกชันที่ใหญ่ขึ้นหรือเปลี่ยนแปลงบ่อย เช่น ศูนย์ช่วยเหลือ คู่มือ โน้ต |
| Fine-tuning | ฝึกโมเดลเพิ่มด้วยตัวอย่าง | น้ำเสียง รูปแบบ และงานที่ทำซ้ำ ไม่ใช่ข้อเท็จจริงที่เปลี่ยนแปลง |
โมเดลสมัยใหม่รับ prompt ที่ยาวได้ ดังนั้นสำหรับ FAQ สั้นๆ ตัวเลือกแรกมักใช้ได้ดี RAG มีประโยชน์เมื่อข้อความมีมากจนไม่อยากส่งทั้งหมดทุกครั้ง เพราะทุกคำที่ส่งมีค่าใช้จ่ายและเวลา (ดู LLM API คิดค่าบริการอย่างไร)
หากคุณกำลังสร้างฟีเจอร์ "แชตกับเอกสารของเรา" ผู้ช่วยฝ่ายสนับสนุน หรือเครื่องมือความรู้ภายในองค์กร เกือบแน่นอนว่าคุณกำลังสร้าง RAG ในรูปแบบใดรูปแบบหนึ่งอยู่
ตัวอย่างในชีวิตประจำวัน
ลองนึกถึงการสอบแบบเปิดตำรา นักเรียนที่ต้องตอบจากความจำอาจจำผิดหรือเดาไปเรื่อย แต่นักเรียนที่เปิดไปหน้าที่ถูกต้องก่อน อ่าน แล้วจึงตอบ จะน่าเชื่อถือกว่ามาก ตราบใดที่หาหน้าที่ถูกต้องเจอ
- นักเรียน คือโมเดลภาษา
- ตำรา คือเอกสารของคุณ
- การเปิดไปหน้าที่ถูกต้อง คือการค้นคืนข้อมูล (retrieval)
- การเขียนคำตอบจากหน้าเหล่านั้น คือการสร้างคำตอบ (generation)
RAG คือเวอร์ชันเปิดตำรา และเช่นเดียวกับการสอบ คุณภาพของคำตอบขึ้นอยู่กับว่าพบหน้าที่ถูกต้องหรือไม่
RAG ทำงานอย่างไร ทีละขั้น
การตั้งค่า RAG ทั่วไปมีสองระยะ
เตรียมเอกสารของคุณ (ทำล่วงหน้า):
- รวบรวม วัสดุต้นฉบับ เช่น บทความช่วยเหลือ PDF นโยบาย ข้อมูลสินค้า
- แบ่ง chunk: แบ่งเอกสารยาวเป็นชิ้นเล็กๆ มักเป็นไม่กี่ย่อหน้าต่อชิ้น เพื่อให้การค้นหาคืนค่าเฉพาะส่วนที่เกี่ยวข้อง
- ทำ embed แต่ละ chunk: ส่งไปยังโมเดล embedding ซึ่งแปลงข้อความเป็น embedding คือรายการตัวเลขยาวๆ ที่จับความหมายของข้อความไว้ ข้อความที่พูดถึงเรื่องคล้ายกันจะมีตัวเลขคล้ายกัน
- จัดเก็บ chunk และ embedding ของมันในฐานข้อมูลที่ค้นหาตามความคล้ายได้ (มักเรียกว่า vector database หรือ vector index)
ตอบคำถาม (ทำทุกครั้งที่มีการถาม):
- ทำ embed คำถาม ด้วยโมเดล embedding ตัวเดียวกัน
- ค้นคืน chunk ที่ embedding ของมันใกล้กับคำถามที่สุด เช่น ห้าอันดับแรก
- สร้าง prompt: คำสั่ง chunk ที่ค้นคืนมา และคำถาม
- สร้างคำตอบ: โมเดลภาษาเขียนคำตอบจาก chunk เหล่านั้น และควรอ้างอิงว่าใช้ chunk ไหน
การค้นหาตามความหมายคือสิ่งที่ทำให้วิธีนี้ได้ผล คำถามเรื่อง "ขอเงินคืน" สามารถพบ chunk ชื่อ "นโยบายการคืนเงิน" ได้ แม้สองอย่างนี้จะไม่มีคำเหมือนกันเลย
ตัวอย่างประกอบ: ผู้ช่วยฝ่ายช่วยเหลือของยิม
สมมติว่ายิมแห่งหนึ่งมีบทความช่วยเหลือ 40 บทความ และต้องการแชตบอตผู้ช่วยบนเว็บไซต์ สมาชิกถามว่า "ฉันหยุดสมาชิกชั่วคราวตอนเดินทางได้ไหม"
แอปทำ embed คำถาม และค้นคืนสาม chunk ที่ใกล้ที่สุด หนึ่งในนั้นเขียนว่า:
การระงับสมาชิก: สมาชิกแบบรายเดือนสามารถระงับสมาชิกได้สูงสุด
2 เดือนต่อปี ยื่นคำขอที่เคาน์เตอร์หรือในแอปอย่างน้อย 7 วัน
ก่อนวันที่เริ่มระงับ
prompt ที่ส่งให้โมเดลจะหน้าตาประมาณนี้:
คุณคือผู้ช่วยฝ่ายช่วยเหลือของ Northside Gym
ตอบจากแหล่งข้อมูลด้านล่างเท่านั้น หากคำตอบไม่มีอยู่ในนั้น
ให้บอกว่าไม่ทราบ และแนะนำให้ติดต่อเคาน์เตอร์
ระบุด้วยว่าใช้แหล่งข้อมูลใด
[แหล่งที่ 1: การระงับสมาชิก] สมาชิกแบบรายเดือนสามารถระงับ...
[แหล่งที่ 2: การยกเลิกสมาชิก] ...
[แหล่งที่ 3: บัตรผู้เยี่ยม] ...
คำถาม: ฉันหยุดสมาชิกชั่วคราวตอนเดินทางได้ไหม
และโมเดลตอบว่า: "ได้ครับ สมาชิกแบบรายเดือนสามารถระงับสมาชิกได้สูงสุดสองเดือนต่อปี ยื่นคำขอที่เคาน์เตอร์หรือในแอปอย่างน้อย 7 วันก่อนวันที่เริ่มระงับ (แหล่งที่มา: การระงับสมาชิก)"
ยิมนี้ไม่ได้ฝึกอะไรใหม่เลย เมื่อเปลี่ยนนโยบายการระงับ ก็แค่อัปเดตบทความ แอปทำ embed chunk นั้นใหม่ และคำตอบถัดไปก็จะสะท้อนการเปลี่ยนแปลงนั้น
คำศัพท์สำคัญ
| คำศัพท์ | ความหมาย |
|---|---|
| LLM | Large language model คือ AI ที่เขียนคำตอบ ดู LLM คืออะไร |
| Embedding | รายการตัวเลขที่แทนความหมายของข้อความชิ้นหนึ่ง |
| Embedding model | โมเดลที่สร้าง embedding มักแยกจากโมเดลแชต และถูกกว่ามาก |
| Chunk | ส่วนหนึ่งของเอกสาร มีขนาดที่สามารถค้นคืนได้ด้วยตัวเอง |
| Vector database / vector search | ที่เก็บข้อมูลที่ค้นหารายการที่มี embedding คล้ายกันได้ ฐานข้อมูลทั่วไปบางตัวก็มีฟีเจอร์นี้ เช่น Postgres ผ่านส่วนขยาย pgvector |
| Top-k | จำนวน chunk ที่ค้นคืนต่อคำถาม |
| Hybrid search | การรวมการค้นหาตามความหมายกับการค้นหาด้วยคีย์เวิร์ดแบบปกติ ช่วยกับคำเฉพาะเจาะจง เช่น รหัสสินค้า |
| Context window | ปริมาณข้อความสูงสุดที่โมเดลรับได้ในคำขอเดียว |
| Grounding / citations | การผูกคำตอบเข้ากับแหล่งข้อมูลที่ค้นคืนมาโดยเฉพาะและแสดงให้เห็น |
ความเข้าใจผิดที่พบบ่อย
- "RAG ฝึกโมเดลด้วยข้อมูลของฉัน" ไม่ใช่ ตัวโมเดลไม่เปลี่ยนแปลงเลย มันแค่อ่านข้อความเพิ่มตอนถามคำถาม
- "RAG หมายความว่าไม่มี hallucination อีกแล้ว" หมายความว่ามีน้อยลง หากการค้นคืนพลาด chunk ที่ถูกต้อง หรือคำตอบไม่มีในเอกสาร โมเดลก็ยังอาจเดาได้ ให้สั่งให้มันพูดว่า "ไม่ทราบ" และทดสอบด้วยคำถามที่คุณรู้คำตอบอยู่แล้ว
- "ฉันต้องใช้ vector database พิเศษ" มักไม่จำเป็น สำหรับข้อมูลปริมาณไม่มาก ส่วนขยาย vector บนฐานข้อมูลที่คุณมีอยู่แล้ว หรือแม้แต่การค้นหาด้วยคีย์เวิร์ดธรรมดา ก็อาจเพียงพอ
- "chunk ใหญ่ดีกว่า" ใหญ่เกินไปจะส่งข้อความที่ไม่เกี่ยวข้องจำนวนมาก (ค่าใช้จ่ายสูงขึ้นและสับสนมากขึ้น) เล็กเกินไป chunk จะเสียบริบทที่ทำให้มันมีความหมาย ควรคาดว่าต้องปรับ
- "อัปโหลดทุกอย่างไปเลย" เอกสารที่ล้าสมัย ซ้ำซ้อน หรือขัดแย้งกันจะให้คำตอบที่ขัดแย้งกัน การทำความสะอาดวัสดุต้นฉบับมักเป็นการปรับปรุงที่ได้ผลที่สุด
- "ทุกคนดูเอกสารไหนก็ได้" เป็นจริงเฉพาะเมื่อคุณสร้างแบบนั้น หากเอกสารบางชิ้นเป็นส่วนตัวสำหรับผู้ใช้บางคน การค้นหาต้องกรองตามผู้ที่ถาม มิฉะนั้นผู้ช่วยอาจอ้างข้อมูลของลูกค้าคนหนึ่งให้อีกคนได้
ค่าใช้จ่าย
ฟีเจอร์ RAG มักมีค่าใช้จ่ายที่เกิดขึ้นต่อเนื่องสามส่วน: การทำ embed เอกสาร (น้อย และส่วนใหญ่ทำครั้งเดียว) การทำ embed คำถามแต่ละข้อ (เล็กน้อยมาก) และการเรียกโมเดลภาษา (ค่าใช้จ่ายหลัก ซึ่งเพิ่มขึ้นตามจำนวน chunk ที่ส่ง) บวกกับพื้นที่จัดเก็บใน ฐานข้อมูล ของคุณ ผู้ให้บริการ AI จะเรียกเก็บค่าใช้จ่ายเหล่านี้กับบัญชีของคุณเอง ดังนั้นควรตั้งวงเงินใช้จ่ายไว้ที่นั่น
สิ่งที่ควรถามเครื่องมือสร้างแอปด้วย AI
- "ก่อนสร้าง RAG ช่วยตรวจว่า: เนื้อหาของเราเล็กพอที่จะใส่ลงใน prompt ได้เลยหรือไม่"
- "แบ่งบทความช่วยเหลือเป็น chunk ละไม่กี่ย่อหน้า เก็บชื่อและลิงก์แหล่งที่มาของแต่ละ chunk และเก็บ embedding ในฐานข้อมูลของเรา"
- "ใช้ hybrid search คือการค้นหาตามความหมายบวกคีย์เวิร์ด เพื่อให้รหัสสินค้ายังจับคู่ได้"
- "สั่งให้โมเดลตอบจากแหล่งที่ค้นคืนเท่านั้น บอกเมื่อไม่ทราบ และแสดงแหล่งที่มาใต้แต่ละคำตอบ"
- "ค้นหาเฉพาะเอกสารที่ผู้ใช้ที่ล็อกอินอยู่มีสิทธิ์เห็นเท่านั้น"
- "ทำ embed เอกสารใหม่อัตโนมัติทุกครั้งที่มีการแก้ไข"
- "เก็บ API key ของผู้ให้บริการ AI ไว้บนเซิร์ฟเวอร์ในฐานะ secret อย่าใส่ไว้ในเบราว์เซอร์"
- "บันทึกทุกคำถาม chunk ที่ค้นคืนมา และคำตอบ เพื่อให้ฉันตรวจคำตอบที่ไม่ดีได้"
RAG ใน Mythex
Mythex ไม่ได้มีผลิตภัณฑ์ knowledge base หรือ RAG สำเร็จรูป สิ่งที่ทำคือเขียนโค้ดสำหรับระบบนี้ไว้ในแอปของคุณ: คุณนำเอกสารและ API key ของผู้ให้บริการ AI ของคุณมาเอง เก็บเป็น project secret และเอเจนต์จะสร้างส่วนการค้นคืนและแชต โดยใช้ ฐานข้อมูล Postgres ของโปรเจกต์เพื่อจัดเก็บ การใช้งานผู้ให้บริการจะเรียกเก็บกับบัญชีผู้ให้บริการของคุณ ไม่ใช่เครดิต Mythex เอกสารแนะนำให้เริ่มจากฟีเจอร์ AI แบบง่ายหนึ่งอย่าง แล้วค่อยเพิ่ม RAG เมื่อทำงานได้แล้ว ดู การสร้างแอป AI และคู่มือของเราเรื่อง การสร้างแอปแชตบอต AI และ การเพิ่มฟีเจอร์ AI ให้แอปของคุณ
คำถาม
RAG คืออะไรแบบง่ายๆ
RAG (retrieval-augmented generation) คือวิธีทำให้โมเดล AI ตอบจากข้อมูลของคุณเอง ก่อนที่โมเดลจะตอบ แอปของคุณจะค้นหาในเอกสารเพื่อหาข้อความที่เกี่ยวข้องกับคำถาม แล้วใส่ไว้ใน prompt ดังนั้นคำตอบจึงอิงจากข้อความเหล่านั้น ไม่ได้อิงแค่สิ่งที่โมเดลเรียนรู้มาตอนฝึกเท่านั้น
RAG เอาข้อมูลของฉันไปฝึก AI ไหม
ไม่ได้ RAG ไม่ได้เปลี่ยนตัวโมเดลเลย มันค้นหาข้อความที่เกี่ยวข้องในขณะที่มีคนถามคำถาม แล้วส่งให้โมเดลพร้อมกับคำถาม หากคุณอัปเดตเอกสาร คำตอบถัดไปก็ใช้เวอร์ชันใหม่ได้ทันที
RAG เหมือนกับ fine-tuning ไหม
ไม่เหมือนกัน Fine-tuning เปลี่ยนพฤติกรรมของโมเดลด้วยการฝึกเพิ่มจากตัวอย่าง ซึ่งช้ากว่าและเหมาะกับสไตล์หรือรูปแบบมากกว่า ส่วน RAG ให้ข้อเท็จจริงแก่โมเดลให้อ่านตอนถามคำถาม ซึ่งเหมาะกับความรู้ที่เปลี่ยนบ่อยหรือต้องอ้างอิงให้ตรงทุกคำ
RAG หยุด AI hallucination ได้ไหม
ช่วยลดได้ แต่ไม่ได้กำจัดให้หมดไป หากการค้นหาพบข้อความที่ไม่ถูกต้อง หรือคำตอบไม่มีอยู่ในเอกสารของคุณ โมเดลก็ยังอาจเดาได้ แอป RAG ที่ดีจะบอกโมเดลให้พูดออกมาเมื่อไม่รู้ และแสดงแหล่งข้อมูลที่ใช้