- AI
- RAG
- วิศวกรรม
RAG สำหรับการสนับสนุนลูกค้า: ทำอย่างไรให้คำตอบของ AI แม่นยำจริง
LLM ล้วน ๆ มักแต่งคำตอบที่ฟังดูน่าเชื่อขึ้นมาเอง การสร้างที่เสริมด้วยการค้นคืน (RAG) ทำให้ AI ตอบโดยอิงเนื้อหาของคุณเอง นี่คือวิธีที่ AskAIs ทำทีละขั้นตอน
ทีม AskAIs
อ่าน 7 นาที
ถาม LLM ล้วน ๆ ว่า “จะรีเซ็ตรหัสผ่านได้อย่างไร?” แล้วคุณจะได้คำตอบที่ฟังดูน่าเชื่อ แต่น่าจะผิด: ปุ่มคนละปุ่ม ขั้นตอนคนละแบบ URL คนละที่ RAG (การสร้างที่เสริมด้วยการค้นคืน) แก้ปัญหานี้ด้วยการใส่ช่วงข้อความที่ถูกต้องจากเนื้อหาของคุณเองลงในพรอมต์ก่อนที่โมเดลจะตอบ
ภาพรวมของไปป์ไลน์
สามขั้นตอน: นำเข้า ค้นคืน และสร้างคำตอบ
1. นำเข้า
- อัปโหลดไฟล์ PDF, DOCX, TXT, Markdown, CSV หรือ JSON รวบรวมข้อมูลจากเว็บไซต์ของคุณ หรือเพิ่มคู่คำถาม-คำตอบในหน้า Training
- เวิร์กเกอร์จะดึงข้อความออกมาและแบ่งเป็นช่วงข้อความยาวประมาณ 2,000 อักขระ (ราว 500 token) โดยซ้อนทับกัน 200 อักขระ คู่คำถาม-คำตอบแต่ละคู่จะเป็นหนึ่งช่วงข้อความ
- แต่ละช่วงข้อความจะถูกสร้าง embedding ด้วย
text-embedding-3-small(1,536 มิติ) - ช่วงข้อความจัดเก็บใน PostgreSQL พร้อมส่วนขยาย
pgvectorและดัชนี HNSW สำหรับ cosine distance
2. ค้นคืน
เมื่อข้อความของผู้เยี่ยมชมต้องใช้ข้อเท็จจริง เราจะสร้าง embedding จากข้อความล่าสุดของผู้เยี่ยมชม แล้วค้นหาด้วย cosine distance ในช่วงข้อความของพื้นที่ทำงาน คำทักทายและการคุยเล่นจะข้ามขั้นตอนนี้ คิวรีแบบย่อ:
-- Simplified. The real query also checks that the document is
-- ready, enabled, in date and visible on the visitor's platform.
SELECT c.id, c.content,
1 - (c.embedding <=> $1::vector) AS similarity
FROM knowledge_chunks c
WHERE c.tenant_id = $2
ORDER BY c.embedding <=> $1::vector
LIMIT $3; -- 3 × top-K candidates, re-ranked afterwardsเราดึงช่วงข้อความตัวเลือกมาเป็นสามเท่าของจำนวนที่ต้องใช้ จัดอันดับใหม่ ตัดรายการที่ต่ำกว่าเกณฑ์ความคล้าย (ประมาณ 0.3) เก็บไว้ไม่เกินสองช่วงข้อความต่อเอกสาร แล้วส่งห้าช่วงแรก (ค่าเริ่มต้น) ให้โมเดล
3. สร้างคำตอบ
ช่วงข้อความจะถูกต่อท้าย system prompt ภายในส่วนอ้างอิงที่มีขอบเขตกำกับชัดเจน โมเดลได้รับคำสั่งให้ถือว่าส่วนนั้นเป็นข้อมูล ไม่ใช่คำสั่ง ให้ใช้เฉพาะข้อมูลอ้างอิงที่ตอบคำถามได้ และไม่แต่งข้อเท็จจริงเกี่ยวกับผลิตภัณฑ์ที่ไม่มีอยู่ในนั้น
หากผู้เยี่ยมชมถามข้อเท็จจริงเกี่ยวกับผลิตภัณฑ์แต่ไม่พบข้อมูลที่เกี่ยวข้อง ระบบจะไม่เรียกโมเดลเลย: ผู้เยี่ยมชมจะได้รับแจ้งว่าไม่มีข้อมูลนั้น และแชทจะส่งต่อให้คน เว้นแต่จะปิดการส่งต่ออัตโนมัติไว้
ลดต้นทุน
สามสิ่งที่ช่วยให้ฐานความรู้ขนาดใหญ่มีต้นทุนที่รับได้:
- แคช embedding: ข้อความค้นหาเดียวกันจะได้ embedding เดียวกัน คีย์แคชคือชื่อโมเดลรวมกับแฮช SHA-1 ของข้อความ เก็บไว้ใน Redis เป็นเวลา 24 ชั่วโมง
- การแคชพรอมต์: สำหรับโมเดล Claude คำขอจะขอให้ Anthropic แคชพรอมต์ไว้ และ OpenAI จะแคชพรอมต์ยาวโดยอัตโนมัติ ส่วนอ้างอิงเปลี่ยนไปทุกครั้งที่ตอบ ส่วนที่ได้ประโยชน์จึงเป็นส่วนคงที่ของพรอมต์เป็นหลัก
- การข้ามตามเกณฑ์: หากไม่มีช่วงข้อความใดผ่านเกณฑ์ ก็จะไม่มีอะไรถูกเพิ่มลงในพรอมต์
เมื่อ RAG ยังไม่พอ
RAG ตอบคำถามแบบ “ทำอย่างไร…?” ได้ดี แต่ตอบ “คำสั่งซื้อของฉันอยู่ที่ไหน?” ไม่ได้ เพราะข้อมูลนั้นไม่ได้อยู่ในเอกสารของคุณ
สำหรับกรณีนี้ AskAIs มี Custom tools: คุณอธิบายเอนด์พอยต์ HTTP ในระบบของคุณเอง เช่น คำสั่งซื้อ การจอง หรือสต็อกสินค้า แล้ว AI จะเรียกใช้ได้ระหว่างเขียนคำตอบ คำถามทั่วไปตอบจากความรู้ของคุณ คำถามเฉพาะบุคคลตอบจากระบบของคุณ และที่เหลือส่งต่อให้ทีมของคุณ