เฟส 1: การนำเข้าเอกสาร (Document Ingestion)
ระบบ RAG ส่วนใหญ่มักจะล้มเหลวก่อนที่จะได้เริ่มทำงานเสียอีก
คุณอาจคิดว่าการสร้างระบบ RAG นั้นง่ายๆ แค่ผู้ใช้คนหนึ่งอัปโหลด PDF คุณก็สร้าง embeddings แล้วก็ได้คำตอบออกมา
นั่นคือความเข้าใจที่ผิด
ระหว่างปุ่มอัปโหลดไปจนถึงฐานข้อมูลเวกเตอร์ (vector database) มีขั้นตอนสำคัญถึง 15 ขั้นตอน หากคุณข้ามขั้นตอนใดขั้นตอนหนึ่งไป ระบบของคุณอาจให้คำตอบที่ผิดพลาดหรือทำให้คุณเสียเงินโดยเปล่าประโยชน์
นี่คือโรดแมปสำหรับการนำเข้าเอกสารในระดับโปรดักชัน (production-grade):
• File Hashing: อย่าทำ hashing ที่ชื่อไฟล์ ให้ทำที่เนื้อหาไฟล์จริงๆ เท่านั้น วิธีนี้จะช่วยป้องกันไม่ให้ระบบของคุณประมวลผลไฟล์เดิมซ้ำสองหากมีการเปลี่ยนชื่อไฟล์
• Smart Parsing: เลือกใช้เครื่องมือให้เหมาะสมกับงาน
- ข้อความทั่วไป: pdf-parse (ฟรี)
- เนื้อหาแบบผสม: Unstructured (สมดุล)
- ตารางหรือเลย์เอาต์ที่ซับซ้อน: LlamaParse (คุณภาพสูง)
- แบบฟอร์มระดับองค์กร: Azure Document Intelligence (ดีที่สุดสำหรับไฟล์สแกน)
• Text Cleaning: กำจัดขยะทิ้งไป หัวกระดาษ (headers), ท้ายกระดาษ (footers), ลายน้ำ (watermarks) และเลขหน้า สิ่งเหล่านี้คือสัญญาณรบกวน (noise) หากคุณทำ embedding คำว่า "Confidential" ในทุกหน้า AI ของคุณจะเข้าใจว่าทุกคำตอบคือความลับ
• Metadata Extraction: เพิ่มบริบท เช่น แผนก, ส่วนงาน หรือเวอร์ชัน สิ่งนี้จะช่วยให้ระบบของคุณค้นหาเอกสารที่ถูกต้องได้โดยไม่ต้องค้นหาจากทุกอย่าง
• Smart Chunking: นี่คือส่วนที่สำคัญที่สุด
- ขนาด: ตั้งเป้าไว้ที่ 1,000 ถึง 1,500 tokens
- การซ้อนทับ (Overlap): ใช้การซ้อนทับกัน 200 tokens เพื่อรักษาบริบทไว้
- ขอบเขต: อย่าตัดประโยคกลางคัน
• Chunk Hashing and Deduplication: ทำ hashing ทุก chunk เมื่อไฟล์มีการเปลี่ยนแปลง ให้เปรียบเทียบ hash ใหม่กับ hash เดิม
• Incremental Ingestion: อย่าทำ re-embed ใหม่ทั้งหมด หากเอกสาร 1,000 หน้ามีการเปลี่ยนแปลงเพียงหน้าเดียว ให้ทำ embedding เฉพาะ chunk ใหม่หน้านั้นเท่านั้น วิธีนี้จะช่วยประหยัดค่าใช้จ่าย API ได้มหาศาล
ความแตกต่างระหว่างโปรเจกต์งานอดิเรกกับระบบที่ใช้งานจริง (production system) คือสิ่งที่คุณทำก่อนจะถึงขั้นตอนการทำ embedding
ระบบที่ไม่ได้มาตรฐานจะทำ re-embed ใหม่ทั้งหมดทุกครั้ง ส่วนระบบที่ชาญฉลาดจะประมวลผลเฉพาะสิ่งที่เปลี่ยนแปลงเท่านั้น
เลิกสร้างงานแบบลวกๆ แล้วหันมาสร้างรากฐานที่แข็งแกร่งแทน
Source: https://dev.to/surajrkhonde/phase-1-document-ingestion-the-hidden-complexity-before-embeddings-4d32
Optional learning community: https://t.me/GyaanSetuAi
