𝗪𝗵𝘆 𝗠𝘆 𝗥𝗔𝗚 𝗔𝗽𝗽 𝗛𝗮𝗹𝗹𝘂𝗰𝗶𝗻𝗮𝘁𝗲𝗱 𝗔𝗻𝗱 𝗛𝗼𝘄 𝗜 𝗙𝗶𝘅𝗲𝗱 𝗜𝘁
ครั้งหนึ่งผมเคยสาธิต RAG support bot ให้เพื่อนร่วมงานดู
บอทบอกเธอว่านโยบายการคืนเงินของเราคือ 30 วัน
แต่นโยบายจริงๆ ของเราคือ 14 วัน
บอทไม่ได้บอกว่ามันไม่แน่ใจ แต่มันกลับสร้างคำตอบขึ้นมาเองด้วยความมั่นใจเต็มเปี่ยม
RAG ควรจะช่วยหยุดอาการ Hallucination ได้ แต่การตั้งค่าของผมกลับแค่ย้ายปัญหาไปที่อื่นเท่านั้น
ผมแก้ไขเรื่องนี้ได้โดยทำตาม 5 ขั้นตอนดังนี้
- ปรับปรุงกลยุทธ์การทำ Chunking
เมื่อก่อนผมใช้วิธีแบ่งเอกสารตามจำนวนตัวอักษร ซึ่งเป็นความผิดพลาด
หนึ่ง Chunk มักจะมีหลายหัวข้อปนกัน เช่น เรื่องการจัดส่งและการคืนสินค้า ทำให้โมเดลนำข้อมูลเหล่านี้มาผสมกันจนกลายเป็นคำตอบที่ผิด
วิธีแก้ไข: ผมเปลี่ยนมาใช้ semantic chunking โดยแบ่งข้อความตามหัวข้อ (headings) และย่อหน้า (paragraphs) แทน
- เลิกเชื่อถือแค่ค่า Similarity Score เพียงอย่างเดียว
ตัว Retriever ของผมดึง 3 Chunk แรกออกมาโดยอิงจากค่า cosine similarity
ความคล้ายคลึง (Similar) ไม่ได้แปลว่าความเกี่ยวข้อง (Relevant) เสมอไป Chunk หนึ่งอาจจะดูคล้ายกับคำถาม แต่ไม่มีคำตอบอยู่ในนั้นเลยก็ได้
วิธีแก้ไข: ผมเพิ่มขั้นตอน reranking ด้วย cross-encoder ซึ่งช่วยให้ผมรู้ว่าเมื่อไหร่ที่ระบบไม่มีข้อมูลจริงอยู่เลย
- อนุญาตให้โมเดล "ตอบไม่ได้"
Prompt เก่าของผมบอกแค่ว่า: จงใช้บริบท (context) เพื่อตอบคำถาม
หากในบริบทไม่มีคำตอบ โมเดลก็จะเติมช่องว่างด้วยการเดาเอาเอง
วิธีแก้ไข: ผมเพิ่มคำสั่งโดยตรงลงไปว่า "หากไม่มีคำตอบในบริบท ให้ตอบว่าไม่ทราบ" เพียงแค่นี้ก็ช่วยหยุดอาการ Hallucination ส่วนใหญ่ได้แล้ว
- กำหนดเกณฑ์การดึงข้อมูล (Retrieval Threshold)
บางครั้งเมื่อการดึงข้อมูลล้มเหลว โมเดลจะใช้ความรู้ทั่วไปมาตอบ ผมเคยหวังว่าแค่ใช้ Prompt อย่างเดียวก็พอ แต่ความหวังไม่ใช่กลยุทธ์ที่ดี
วิธีแก้ไข: ผมเพิ่มการตัดคะแนน (score cutoff) หากคะแนนการดึงข้อมูลต่ำเกินไป ระบบจะส่งคำตอบสำรอง (fallback response) ออกมาแทน ซึ่งหมายความว่าถ้าไม่มีบริบท ก็จะไม่มีการตอบคำถาม
- ทดสอบเพื่อหาจุดที่ล้มเหลว ไม่ใช่แค่ทดสอบความสำเร็จ
เมื่อก่อนผมทดสอบเฉพาะคำถามง่ายๆ โดยละเลยคำถามที่กำกวมหรือข้อมูลที่ขาดหายไป
วิธีแก้ไข: ผมสร้างชุดข้อมูลประเมินผล (evaluation set) ที่เป็น "คำถามดัก" (trap questions) ซึ่งเป็นกรณีที่ไม่มีคำตอบอยู่ในข้อมูล การรันการทดสอบเหล่านี้เป็นประจำจะช่วยให้เห็นชัดเจนว่าระบบของคุณพังตรงไหน
RAG ไม่ได้กำจัดอาการ Hallucination ให้หมดไป แต่มันทำให้เราควบคุมมันได้
บอทของผมยังไม่รู้ทุกรายละเอียด แต่ตอนนี้มันยอมรับเมื่อมันไม่แน่ใจ ซึ่งนั่นทำให้มันสามารถนำไปใช้งานจริงได้
Source: https://dev.to/pallavi_sharma_10c1a6f1da/why-my-rag-app-kept-hallucinating-and-how-i-fixed-it-3i10
Optional learning community: https://t.me/GyaanSetuAi