ไอเดีย #80: แชตบอตตอบคำถามจากเอกสารบริษัท (RAG)
พนักงานใหม่ถามเรื่องเดิมซ้ำทุกเดือน: ลาพักร้อนต้องแจ้งล่วงหน้ากี่วัน เบิกค่าเดินทางใช้ฟอร์มไหน ระเบียบจัดซื้อข้อไหนว่าอย่างไร คำตอบมีอยู่ในเอกสารหลายสิบไฟล์ แต่ไม่มีใครอยากเปิดอ่าน ไอเดียนี้คือแชตบอตที่ตอบคำถามจากเอกสารของบริษัทเองด้วยเทคนิค RAG (Retrieval-Augmented Generation) จุดสำคัญคือทุกคำตอบต้องบอกได้ว่ามาจากเอกสารไหน หน้าไหน
ใครจะใช้
- พนักงาน — ถามคำถามเป็นภาษาธรรมชาติ ได้คำตอบพร้อมแหล่งอ้างอิง
- เจ้าของเอกสาร (HR, บัญชี, IT) — อัปโหลดและอัปเดตเอกสาร ตรวจคำถามที่บอตตอบไม่ได้
- ผู้ดูแลระบบ — กำหนดสิทธิ์ว่าใครเข้าถึงเอกสารกลุ่มไหน ดูสถิติการใช้งาน
ฟีเจอร์ขั้นต่ำ (MVP)
- อัปโหลด PDF, Word, ข้อความ แล้วแปลงเป็นข้อความ ตัดเป็นชิ้น (chunk) พร้อมเก็บเลขหน้า
- สร้าง embedding ของแต่ละ chunk เก็บใน PostgreSQL ด้วย pgvector
- เมื่อมีคำถาม ค้นหา chunk ที่เกี่ยวข้อง (ผสม vector search กับ keyword search) แล้วส่งให้ language model สรุปคำตอบ
- คำตอบแสดงแหล่งอ้างอิง (ชื่อเอกสาร หน้า ข้อความต้นฉบับ) คลิกเปิดดูได้
- ถ้าค้นไม่เจอข้อมูลที่เกี่ยวข้อง ให้ตอบว่าไม่พบในเอกสาร แทนการเดา
- กรองผลค้นหาตามสิทธิ์ของผู้ถาม ก่อนส่งเข้า model
- ปุ่มให้คะแนนคำตอบ (มีประโยชน์/ไม่มีประโยชน์) และบันทึกคำถามที่ตอบไม่ได้ ให้เจ้าของเอกสารตรวจ
ต่อยอดได้อีก
- ใช้งานผ่าน LINE OA หรือแชตภายในองค์กร
- Re-ranking ผลค้นหาให้แม่นขึ้น
- เตือนเมื่อเอกสารมีหลายเวอร์ชันขัดกัน
- ชุดคำถามทดสอบ (evaluation set) สำหรับวัดคุณภาพหลังปรับระบบ
โครงข้อมูลตั้งต้น
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE doc_chunk (
id BIGSERIAL PRIMARY KEY,
document_id INT NOT NULL,
page_no INT,
content TEXT NOT NULL,
embedding VECTOR(1024) -- ขนาดตาม model ที่เลือก
);
ตารางอื่น: document (ชื่อ, ไฟล์, access_group, version, status), chat_session, chat_message (คำถาม คำตอบ chunk ที่อ้างอิง feedback), access_group และ user_group
ระดับความยาก และสิ่งที่จะได้เรียนรู้
ปานกลางถึงท้าทาย — ทำให้ "ใช้ได้" ไม่ยาก ทำให้ "แม่น" ยากกว่ามาก
- เทคนิคการตัด chunk ภาษาไทยให้ไม่ขาดกลางประโยค
- hybrid search: vector + full-text
- เขียน prompt ให้ตอบจากบริบทที่ให้เท่านั้นและอ้างอิงแหล่ง
- วัดผลคุณภาพคำตอบอย่างเป็นระบบ
ข้อควรระวัง
- AI ตอบผิดได้แม้มีเอกสารอ้างอิง ต้องบอกผู้ใช้ให้ตรวจกับต้นฉบับเสมอ และเรื่องสำคัญ (กฎหมาย การเงิน) ให้ยืนยันกับเจ้าหน้าที่
- ถ้าส่งเอกสารไปยัง AI ภายนอก ต้องตรวจนโยบายการเก็บข้อมูลของผู้ให้บริการ และอย่าใส่ข้อมูลส่วนบุคคลโดยไม่จำเป็น (PDPA)
- ระวัง prompt injection จากเนื้อหาในเอกสาร และอย่าให้ผู้ใช้เห็นข้อมูลจากเอกสารที่ตัวเองไม่มีสิทธิ์
ใครเคยลองทำ RAG กับเอกสารภาษาไทยบ้างครับ ตัด chunk แบบไหนแล้วได้ผลดีที่สุด? และคุณเลือกรัน embedding model เองในเครื่อง หรือเรียกผ่าน API ด้วยเหตุผลอะไร มาแลกเปลี่ยนกัน ใครทำแล้วเอาผลการทดสอบมาแชร์ในกระทู้ได้เลย