ในการพัฒนา RAG app (Retrieval Augmented Generation) นั้น
หนึ่งในขั้นตอนที่มีปัญหามากที่สุดคือ Retrieval
หรือการดึงข้อมูลที่จำเป็นหรือเกี่ยวข้องนั่นเอง
โดยเทคนิคพื้นฐานมีขั้นตอนดัวนี้
- Split หรือ chunking ข้อมูลด้วยเทคนิคต่าง ๆ เช่น fix-size, document และ section เป็นต้น
- ทำการ embedding ข้อมูลที่ถูกแบ่งไว้ มาเป็น vector จากนั้นจัดเก็บใน Vector Database
- ทำการค้นหาแบบ semantic + keyword search ต่อไป
ซึ่งเหมาะสำหรับการการค้นหาข้อมูลที่ชัดเจน
เช่นข้อมูลเป็น transaction-based หรือพวก log ต่าง ๆ
แต่ไม่เหมาะสมกับข้อมูลพวกเอกสารที่เยอะ ๆ มีหลายหน้า
และมี structure ของข้อมูลด้วย
ผลที่ตามมาคือ เราทำการแบ่งข้อมูลเป็นชิ้นเล็ก ๆ ออกมา
ส่งผลให้ความสัมพันธ์ของข้อมูลสูญเสียไป
ทำให้ผลลัพธ์เกิดข้อผิดพลาดได้สูงมาก ๆ
สำหรับวิธีการแบบเดิม ๆ
ดังนั้นหนึ่งในแนวทางการแก้ไขปัญหานี้คือ PageIndex
โดยที่ PageIndex จะมีขั้นตอนการทำงาน 2 ขั้นตอน
- สร้าง index ของเอกสาร ในรูปแบบของ tree โดยใช้ LLM model อ่านเอกสารเพื่อสร้างโครงสร้างของข้อมูลออกมาให้
- ทำการค้นหาแบบ reasoning-based ตามโครงสร้างของข้อมูล ซึ่งเป็นการค้นหาที่เลียนแบบการค้นหาแบบมนุษย์นั่นเอง

เพื่อความสนุกมาลองเขียน code เพื่อใช้งาน PageIndex กันดีกว่า
โดยสามารถใช้งานผ่าน
- API/MCP ของทาง PageIndex.AI ได้เลย เพียงสมัครและไปสร้าง API Key มาใช้งาน (ใช้ฟรี มี limit)
- ใช้ผ่าน PageIndex library
ใน blog นี้เพื่อความสบายจะใช้แบบแรก
โดยใน PageIndex.ai จะมี dashboard สำหรับดูโครงสร้างของ document ของเราให้เลย
จะได้เห้นภาพชัดเจนว่าการสร้าง index ในรูปแบบ tree เป็นอย่างไร ?
ผลของการทำงานแสดงได้ dashboard ดังนี้
ทำการอ่านทุก ๆ หน้า และแบ่งตามหัวข้อ
และทำการแปลงเป็น Markdown ให้อีกด้วย

หรือทำการอ่านเอกสารในรูปแบบของ tree ออกมา
จากนั้นทำการค้นหาข้อมูลใน tree และทำงานร่วมกับ LLM นั่นเอง
ทำการกำหนด output format ตามที่ต้องการ ดังนี้
ผลการค้นหาเป็นดังนี้
เมื่อได้ node ที่ต้องการแล้ว
ก็ทำการดึงข้อมูลในแต่ละ node ออกมา
จากนั้นจึงนำข้อมูลไปใส่ใน context ของ RAG app ต่อไป
เพื่อทำการสร้างหรือ generate ผลออกมา
เป็นอีกแนวทางที่น่าสนใจ
ลองศึกษาและใช้งานกันดู