บทที่ 2 · AI เข้าใจความหมายยังไง หน้า 9/12 ~4 นาที

RAG: ให้ AI เปิดเอกสารก่อนตอบ

กลับมาที่น้องเฟิร์นฝ่าย HR ตอนต้นบท ผู้ช่วย AI หาเอกสาร "วันหยุดประจำปี" เจอทั้งที่พิมพ์ว่า "ลาพักร้อน" ได้ยังไง

เทคนิคนี้ชื่อ แร็ก (Retrieval-Augmented Generation, RAG)เทคนิคค้นเอกสารที่เกี่ยวข้องด้วย embedding แล้วแนบให้ AI อ่านก่อนตอบ เหมือนสอบแบบเปิดหนังสือดูคำศัพท์ทั้งหมด (Retrieval-Augmented Generation) ทำงาน 5 ขั้น:

  1. หั่นเอกสารเป็นชิ้นเล็กๆ เรียกว่า ชิ้นเอกสาร (chunk)ท่อนสั้นๆ ที่หั่นออกมาจากเอกสารยาว เพื่อให้ค้นและแนบเข้า prompt ได้พอดีดูคำศัพท์ทั้งหมด
  2. แปลงแต่ละ chunk เป็น เอ็มเบดดิง (embedding)การแปลงคำหรือข้อความเป็นชุดตัวเลข (เวกเตอร์) ข้อความที่ความหมายใกล้กันจะได้ตัวเลขใกล้กันดูคำศัพท์ทั้งหมด เก็บไว้ล่วงหน้า
  3. พอมีคำถาม แปลงคำถามเป็น embedding ด้วย
  4. การค้นคืน (retrieval)ขั้นตอนหาชิ้นเอกสารที่ความหมายใกล้คำถามที่สุด มักใช้ cosine similarity ของ embeddingดูคำศัพท์ทั้งหมด chunk ที่ cosine สูงสุด k ชิ้น
  5. แนบ chunk เหล่านั้นเข้าไปใน prompt แล้วสั่งว่า "ตอบจากเอกสารนี้"
ขั้นตอน RAGหั่นเอกสารเป็นชิ้น แปลงเป็น embedding แปลงคำถามเป็น embedding หาชิ้นที่ cosine สูงสุด แนบเข้า prompt ให้ AI อ่านก่อนตอบ1 หั่นเอกสารchunk2 embeddingทุก chunk3 คำถาม→ embedding4 ค้นหาcosine สูงสุด5 แนบเข้า promptAI อ่านก่อนตอบ

ลองเล่นด้วยคำถาม "ลาพักร้อนได้กี่วัน" กับเอกสาร 3 ชิ้น เลื่อน k แล้วดู prompt ที่ประกอบเสร็จด้านล่าง

RAG: หาเอกสารที่ใกล้คำถามที่สุด

เลื่อน k เพื่อเลือกว่าจะดึงกี่ชิ้น (chunk) ไปแนบให้ AI อ่านก่อนตอบ

คำถาม

“ลาพักร้อนได้กี่วัน”

embedding = (0.70, 0.70)
  1. #1Chunk A✔ ดึงเข้า prompt

    วันหยุดประจำปี: พนักงานมีสิทธิ์ 10 วันต่อปี

    cos = 0.9899(0.80, 0.60)
  2. #2Chunk B— ไม่ได้ใช้

    สวัสดิการลาป่วย: ลาได้ตามจริง แนบใบรับรองแพทย์เมื่อเกิน 2 วัน

    cos = 0.7746(0.10, 0.99)
  3. #3Chunk C— ไม่ได้ใช้

    เมนูโรงอาหารประจำสัปดาห์

    cos = 0.1414(−0.60, 0.80)

prompt ที่ส่งให้ AI จริง

ตอบจากเอกสารด้านล่างเท่านั้น ถ้าไม่มีข้อมูลให้ตอบว่าไม่ทราบ

บริบท:
- วันหยุดประจำปี: พนักงานมีสิทธิ์ 10 วันต่อปี
คำถาม: ลาพักร้อนได้กี่วัน
cosine ระหว่างคำถาม “ลาพักร้อนได้กี่วัน” กับแต่ละ chunk (ตารางตัวเลขสำหรับโปรแกรมอ่านหน้าจอ)
chunkเวกเตอร์cosineอันดับดึงเมื่อ k = 1
A: วันหยุดประจำปี: พนักงานมีสิทธิ์ 10 วันต่อปี(0.80, 0.60)0.98991✔ ดึง
B: สวัสดิการลาป่วย: ลาได้ตามจริง แนบใบรับรองแพทย์เมื่อเกิน 2 วัน(0.10, 0.99)0.77462✘ ไม่ดึง
C: เมนูโรงอาหารประจำสัปดาห์(−0.60, 0.80)0.14143✘ ไม่ดึง

คำถามชวนคิด

เลือกตอบถ้าตั้ง k = 1 chunk ไหนจะถูกดึงไปแนบใน prompt?
ดูเฉลยข้อนี้

คำตอบ: A — วันหยุดประจำปี

A มี cosine กับคำถามสูงสุด (0.9899) แม้ไม่มีคำว่า "ลาพักร้อน" สักคำ เพราะความหมายใกล้กัน

ทำไมช่วยได้? ในบทที่ 1 เราเห็นว่า อาการมั่ว (hallucination)เมื่อ AI ตอบข้อมูลที่ไม่จริงอย่างมั่นใจ เพราะมันถูกฝึกให้เขียนสิ่งที่ฟังดูน่าจะใช่ ไม่ใช่สิ่งที่จริงดูคำศัพท์ทั้งหมด เกิดเพราะโมเดลเดาคำที่ "ฟังดูน่าจะใช่" เมื่อไม่มีข้อมูลจริง RAG ยื่นข้อมูลจริงให้ก่อน มันจึงเดาจากเอกสาร ไม่ใช่จากความจำลางๆ

RAG = ค้นเอกสารที่ความหมายใกล้คำถามที่สุดด้วย embedding แล้วยื่นให้ AI อ่านก่อนตอบ

มังคุด มาสคอตมังคุด

มังคุด

เหมือนสอบแบบเปิดหนังสือ!