- การสร้าง Augmented Augmented ที่ยอดเยี่ยม (RAG)
พื้นที่เก็บข้อมูลนี้ประกอบด้วยรายการ Awesome ที่คัดสรรแล้วและข้อมูลทั่วไปเกี่ยวกับแอปพลิเคชันการดึงข้อมูล-Augmented Generation (RAG) ใน Generative AI
การดึงข้อมูล-Augmented Generation (RAG) เป็นเทคนิคใน Generative AI โดยจะดึงบริบทเพิ่มเติมจากแหล่งภายนอกเพื่อเพิ่มคุณค่าให้กับกระบวนการกำเนิดของ Large Language Models (LLM) วิธีการนี้ช่วยให้ LLM สามารถรวมข้อมูลที่ทันสมัย เฉพาะเจาะจง หรือละเอียดอ่อนที่อาจขาดไปจากข้อมูลก่อนการฝึกอบรมเพียงอย่างเดียว
เนื้อหา
- ข้อมูลทั่วไปเกี่ยวกับ RAG
- แนวทาง
- - กรอบการทำงานที่อำนวยความสะดวกให้กับ RAG
- เทคนิค
- เมตริก
- - ฐานข้อมูล
ข้อมูลทั่วไปเกี่ยวกับ RAG
ในแนวทาง RAG แบบดั้งเดิม มีการใช้กรอบงานพื้นฐานเพื่อดึงเอกสารที่เสริมสร้างบริบทของพร้อมท์ LLM เช่น ในการสอบถามเกี่ยวกับวัสดุในการต่อเติมบ้าน LLM อาจมีความรู้ทั่วไปเกี่ยวกับการปรับปรุงบ้านแต่ยังขาดรายละเอียดเฉพาะเกี่ยวกับบ้านนั้นๆ การใช้สถาปัตยกรรม RAG ช่วยให้สามารถค้นหาและเรียกค้นเอกสารที่เกี่ยวข้องได้อย่างรวดเร็ว เช่น พิมพ์เขียว เพื่อให้การตอบสนองที่ปรับแต่งได้มากขึ้น สิ่งนี้ทำให้แน่ใจได้ว่า LLM รวมข้อมูลเฉพาะเข้ากับความต้องการในการปรับปรุงใหม่ จึงช่วยเพิ่มความแม่นยำในการตอบสนอง
การใช้งาน RAG ทั่วไปเป็นไปตามขั้นตอนสำคัญเหล่านี้:
- แบ่งฐานความรู้: แบ่งคลังเอกสารออกเป็นส่วนย่อยๆ ที่สามารถจัดการได้
- สร้างการฝัง: ใช้โมเดลการฝังเพื่อแปลงชิ้นส่วนข้อความเหล่านี้เป็นการฝังเวกเตอร์ โดยจับความหมายทางความหมาย
- จัดเก็บในฐานข้อมูลเวกเตอร์: บันทึกการฝังในฐานข้อมูลเวกเตอร์ ช่วยให้สามารถดึงข้อมูลได้อย่างรวดเร็วโดยยึดตามความคล้ายคลึงกันทางความหมาย
- จัดการคำค้นหาของผู้ใช้: แปลงคำค้นหาของผู้ใช้เป็นการฝังโดยใช้โมเดลเดียวกันกับที่ใช้กับชิ้นข้อความ
- ดึงข้อมูลที่เกี่ยวข้อง: ค้นหาฐานข้อมูลเวกเตอร์สำหรับการฝังที่ใกล้เคียงกับการฝังของการสืบค้นโดยพิจารณาจากความคล้ายคลึงกันทางความหมาย
- ปรับปรุงพรอมต์: รวมส่วนข้อความที่เกี่ยวข้องมากที่สุดไว้ในพรอมต์ของ LLM เพื่อให้บริบทที่มีคุณค่าสำหรับการสร้างการตอบกลับ
- สร้างการตอบกลับ: LLM ใช้ประโยชน์จากพรอมต์เสริมเพื่อมอบการตอบกลับที่แม่นยำและปรับให้เหมาะกับการค้นหาของผู้ใช้
แนวทาง
การใช้งาน RAG มีความซับซ้อนแตกต่างกันไป ตั้งแต่การดึงเอกสารอย่างง่ายไปจนถึงเทคนิคขั้นสูงที่รวมลูปผลป้อนกลับแบบวนซ้ำและการปรับปรุงเฉพาะโดเมน แนวทางอาจรวมถึง:
- Corrective RAG (CRAG): วิธีการแก้ไขหรือปรับแต่งข้อมูลที่ดึงมาก่อนที่จะรวมเข้ากับการตอบสนองของ LLM
- การดึงข้อมูล-Augmented Fine-Tuning (RAFT): เทคนิคในการปรับแต่ง LLM โดยเฉพาะสำหรับงานการดึงข้อมูลและการสร้างที่ได้รับการปรับปรุง
- RAG แบบสะท้อนตัวเอง: โมเดลที่ปรับกลยุทธ์การดึงข้อมูลแบบไดนามิกตามผลตอบรับประสิทธิภาพของโมเดล
- RAG Fusion: เทคนิคที่ผสมผสานวิธีการดึงข้อมูลหลายวิธีเพื่อปรับปรุงการบูรณาการบริบท
- การดึงข้อมูลแบบเสริมชั่วคราว (TAR): พิจารณาข้อมูลที่ไวต่อเวลาในกระบวนการดึงข้อมูล
- Plan-then-RAG (PlanRAG): กลยุทธ์ที่เกี่ยวข้องกับขั้นตอนการวางแผนก่อนดำเนินการ RAG สำหรับงานที่ซับซ้อน
- GraphRAG: วิธีการที่มีโครงสร้างโดยใช้กราฟความรู้เพื่อการบูรณาการบริบทและการให้เหตุผลที่ได้รับการปรับปรุง
- FLARE - แนวทางที่รวมเอาการสร้างการดึงข้อมูลแบบเสริมที่ใช้งานอยู่เพื่อปรับปรุงคุณภาพการตอบสนอง
- การเรียกค้นตามบริบท - ปรับปรุงการเรียกค้นโดยการเพิ่มบริบทที่เกี่ยวข้องลงในส่วนเอกสารก่อนการเรียกค้น ซึ่งช่วยเพิ่มความเกี่ยวข้องของข้อมูลที่ดึงมาจากฐานความรู้ขนาดใหญ่
- กรอบการทำงานที่อำนวยความสะดวกให้กับ RAG
- Haystack - กรอบงานการจัดการ LLM เพื่อสร้างแอปพลิเคชัน LLM ที่ปรับแต่งได้และพร้อมสำหรับการผลิต
- LangChain - กรอบงานอเนกประสงค์สำหรับการทำงานกับ LLM
- Semantic Kernel - SDK จาก Microsoft สำหรับการพัฒนาแอปพลิเคชัน Generative AI
- LlamaIndex - กรอบงานสำหรับการเชื่อมต่อแหล่งข้อมูลแบบกำหนดเองกับ LLM
- Cognita - เฟรมเวิร์ก RAG แบบโอเพ่นซอร์สสำหรับการสร้างแอปพลิเคชันแบบแยกส่วนและพร้อมใช้งานจริง
- Verba - แอปพลิเคชันโอเพ่นซอร์สสำหรับ RAG นอกกรอบ
- Mastra - เฟรมเวิร์ก Typescript สำหรับการสร้างแอปพลิเคชัน AI
เทคนิค
การทำความสะอาดข้อมูล
- เทคนิคการล้างข้อมูล: ขั้นตอนก่อนการประมวลผลเพื่อปรับแต่งข้อมูลอินพุตและปรับปรุงประสิทธิภาพของโมเดล
พร้อมท์
- กลยุทธ์
- การแท็กและการติดฉลาก: การเพิ่มแท็กความหมายหรือป้ายกำกับเพื่อดึงข้อมูลเพื่อปรับปรุงความเกี่ยวข้อง
- เหตุผลและการดำเนินการ (ReAct) (ReAct): การบูรณาการความสามารถในการให้เหตุผลเพื่อเป็นแนวทางในการตอบสนองของ LLM ตามบริบทที่ดึงข้อมูลมา
- Chain of Thought (CoT): การส่งเสริมให้โมเดลคิดผ่านปัญหาทีละขั้นตอนก่อนที่จะให้คำตอบ
- Chain of Verification (CoVe): แจ้งให้โมเดลตรวจสอบแต่ละขั้นตอนของการให้เหตุผลเพื่อความถูกต้อง
- ความสอดคล้องในตนเอง: การสร้างเส้นทางการใช้เหตุผลหลายทางและเลือกคำตอบที่สอดคล้องกันมากที่สุด
- Zero-Shot Prompting: การออกแบบพร้อมท์ที่แนะนำโมเดลโดยไม่มีตัวอย่างใดๆ
- การแจ้งแบบไม่กี่ช็อต: ให้ตัวอย่างบางส่วนในพรอมต์เพื่อแสดงรูปแบบการตอบกลับที่ต้องการ
- การแคช
- การแคชพร้อมท์: ปรับ LLM ให้เหมาะสมโดยการจัดเก็บและนำสถานะความสนใจที่คำนวณไว้ล่วงหน้ากลับมาใช้ใหม่
ก้อน
- การตัดเป็นชิ้นขนาดคงที่
- การแบ่งข้อความออกเป็นส่วนที่มีขนาดสม่ำเสมอเพื่อการประมวลผลที่มีประสิทธิภาพ
- แบ่งข้อความออกเป็นชิ้นๆ ตามขนาดและการทับซ้อนกัน
- ตัวอย่าง: แยกตามอักขระ (LangChain)
- ตัวอย่าง: SentenceSplitter (LlamaIndex)
- การเกิดก้อนซ้ำ
- การแบ่งส่วนแบบลำดับชั้นโดยใช้อัลกอริธึมแบบเรียกซ้ำสำหรับโครงสร้างเอกสารที่ซับซ้อน
- ตัวอย่าง: แบ่งซ้ำตามอักขระ (LangChain)
- การแบ่งส่วนตามเอกสาร
- การแบ่งส่วนเอกสารตามข้อมูลเมตาหรือการจัดรูปแบบเพื่อการวิเคราะห์แบบกำหนดเป้าหมาย
- ตัวอย่าง: MarkdownHeaderTextSplitter (LangChain)
- ตัวอย่าง: จัดการการฝังรูปภาพและข้อความด้วยโมเดลเช่น OpenCLIP
- การแบ่งความหมาย
- แยกส่วนที่มีความหมายโดยยึดตามความเกี่ยวข้องทางความหมายมากกว่าขอบเขตที่กำหนด
- ก้อนตัวแทน
- วิธีการแบ่งส่วนแบบโต้ตอบโดยที่ LLM เป็นแนวทางในการแบ่งส่วน
การฝัง
- เลือกโมเดลการฝัง
- กระดานผู้นำ MTEB : สำรวจเกณฑ์มาตรฐานของ Hugging Face เพื่อประเมินการฝังโมเดล
- การฝังแบบกำหนดเอง : พัฒนาการฝังแบบปรับแต่งสำหรับโดเมนหรืองานเฉพาะเพื่อปรับปรุงประสิทธิภาพของโมเดล การฝังแบบกำหนดเองสามารถบันทึกคำศัพท์และความแตกต่างเฉพาะโดเมนได้ เทคนิคต่างๆ รวมถึงการปรับแต่งโมเดลที่ได้รับการฝึกล่วงหน้าอย่างละเอียดบนชุดข้อมูลของคุณเอง หรือการฝังการฝึกอบรมตั้งแต่เริ่มต้นโดยใช้เฟรมเวิร์ก เช่น TensorFlow หรือ PyTorch
การเรียกคืน
- วิธีการค้นหา
- เว็กเตอร์สโตร์แฟลตอินเด็กซ์
- รูปแบบการเรียกคืนที่ง่ายและมีประสิทธิภาพ
- เนื้อหาถูกทำให้เป็นเวกเตอร์และจัดเก็บเป็นเวกเตอร์เนื้อหาแบบแบน
- การดึงข้อมูลดัชนีแบบลำดับชั้น
- จำกัดข้อมูลตามลำดับชั้นให้แคบลงตามระดับต่างๆ
- ดำเนินการดึงข้อมูลตามลำดับชั้น
- คำถามสมมุติ
- ใช้เพื่อเพิ่มความคล้ายคลึงกันระหว่างกลุ่มฐานข้อมูลและการสืบค้น (เช่นเดียวกับ HyDE)
- LLM ใช้เพื่อสร้างคำถามเฉพาะสำหรับข้อความแต่ละชิ้น
- แปลงคำถามเหล่านี้เป็นการฝังเวกเตอร์
- ในระหว่างการค้นหา ให้จับคู่คำค้นหากับดัชนีเวกเตอร์คำถามนี้
- การฝังเอกสารสมมุติ (HyDE)
- ใช้เพื่อเพิ่มความคล้ายคลึงกันระหว่างกลุ่มฐานข้อมูลและการสืบค้น (เช่นเดียวกับคำถามเชิงสมมุติ)
- LLM ใช้เพื่อสร้างคำตอบสมมุติตามแบบสอบถาม
- แปลงการตอบสนองนี้เป็นการฝังเวกเตอร์
- เปรียบเทียบเวกเตอร์แบบสอบถามกับเวกเตอร์ตอบสนองสมมุติ
- การสืบค้นขนาดเล็กถึงใหญ่
- ปรับปรุงการดึงข้อมูลโดยใช้ส่วนที่เล็กกว่าสำหรับการค้นหาและส่วนที่ใหญ่ขึ้นสำหรับบริบท
- ชิ้นลูกเล็กหมายถึงชิ้นพ่อแม่ที่ใหญ่กว่า
- การจัดอันดับใหม่ : ปรับปรุงผลการค้นหาในไปป์ไลน์ RAG โดยการจัดเรียงเอกสารที่ดึงมาในตอนแรกใหม่ โดยจัดลำดับความสำคัญของเอกสารที่เกี่ยวข้องกับการสืบค้นทางความหมายมากที่สุด
เมตริก
ตัวชี้วัดการค้นหา
ตัวชี้วัดเหล่านี้ใช้เพื่อวัดความคล้ายคลึงกันระหว่างการฝัง ซึ่งเป็นสิ่งสำคัญสำหรับการประเมินว่าระบบ RAG ดึงและรวมเอกสารหรือแหล่งข้อมูลภายนอกได้อย่างมีประสิทธิภาพเพียงใด ด้วยการเลือกตัวชี้วัดความคล้ายคลึงที่เหมาะสม คุณสามารถเพิ่มประสิทธิภาพและความแม่นยำของระบบ RAG ของคุณได้ หรือคุณสามารถพัฒนาตัวชี้วัดที่กำหนดเองซึ่งปรับให้เหมาะกับโดเมนหรือกลุ่มเฉพาะของคุณเพื่อจับความแตกต่างเฉพาะโดเมนและปรับปรุงความเกี่ยวข้อง
หมายเหตุ: โดยทั่วไปความคล้ายคลึงของโคไซน์และดอทโปรดัคถือเป็นตัวชี้วัดที่มีประสิทธิภาพสูงสุดในการวัดความคล้ายคลึงกันระหว่างการฝังมิติสูง
ตัวชี้วัดการประเมินการตอบสนอง
ตัวชี้วัดเหล่านี้จะประเมินคุณภาพและความเกี่ยวข้องของคำตอบที่สร้างขึ้นจากระบบ RAG ของคุณ โดยประเมินว่าคำตอบเหล่านั้นมีความแม่นยำ เหมาะสมตามบริบท และเชื่อถือได้เพียงใด ด้วยการใช้ตัวชี้วัดการประเมินเหล่านี้ คุณจะได้รับข้อมูลเชิงลึกเกี่ยวกับประสิทธิภาพของระบบของคุณและระบุจุดที่ต้องปรับปรุง
- การทำเครื่องหมายอัตโนมัติ
- มนุษย์เป็นผู้ตัดสิน
- นางแบบเป็นผู้ตัดสิน
เครื่องมือ
เครื่องมือเหล่านี้สามารถช่วยประเมินประสิทธิภาพของระบบ RAG ของคุณได้ ตั้งแต่การติดตามความคิดเห็นของผู้ใช้ไปจนถึงการบันทึกการโต้ตอบการสืบค้น และการเปรียบเทียบตัวชี้วัดการประเมินหลายรายการในช่วงเวลาหนึ่ง
- LangFuse : เครื่องมือโอเพ่นซอร์สสำหรับการติดตามตัวชี้วัด LLM ความสามารถในการสังเกต และการจัดการที่รวดเร็ว
- Ragas : กรอบงานที่ช่วยประเมินไปป์ไลน์ RAG
- LangSmith : แพลตฟอร์มสำหรับการสร้างแอปพลิเคชัน LLM ระดับการผลิต ช่วยให้คุณสามารถติดตามและประเมินแอปพลิเคชันของคุณอย่างใกล้ชิด
- การประเมินใบหน้ากอด : เครื่องมือสำหรับการคำนวณตัวชี้วัดเช่น BLEU และ ROUGE เพื่อประเมินคุณภาพข้อความ
- น้ำหนักและอคติ : ติดตามการทดลอง บันทึกตัวชี้วัด และแสดงภาพประสิทธิภาพ
- ฐานข้อมูล
รายการด้านล่างประกอบด้วยระบบฐานข้อมูลหลายระบบที่เหมาะสำหรับแอปพลิเคชันการดึงข้อมูล Augmented Generation (RAG) ครอบคลุมกรณีการใช้งาน RAG หลากหลายรูปแบบ ซึ่งช่วยในการจัดเก็บและการดึงข้อมูลเวกเตอร์ที่มีประสิทธิภาพเพื่อสร้างการตอบสนองหรือคำแนะนำ
เกณฑ์มาตรฐาน
- การเลือกฐานข้อมูลเวกเตอร์
เอ็นจิ้นการประมวลผลและให้บริการข้อมูลแบบกระจาย:
- Apache Cassandra: ระบบจัดการฐานข้อมูล NoSQL แบบกระจาย
- MongoDB Atlas: บริการฐานข้อมูลหลายแบบจำลองที่กระจายไปทั่วโลกพร้อมการค้นหาเวกเตอร์แบบรวม
- เวสป้า: กลไกการประมวลผลและให้บริการข้อมูลขนาดใหญ่แบบโอเพ่นซอร์สที่ออกแบบมาสำหรับแอปพลิเคชันแบบเรียลไทม์
เครื่องมือค้นหาที่มีความสามารถแบบเวกเตอร์:
- Elasticsearch: ให้ความสามารถในการค้นหาเวกเตอร์พร้อมกับฟังก์ชันการค้นหาแบบดั้งเดิม
- OpenSearch: เครื่องมือค้นหาและการวิเคราะห์แบบกระจาย แยกจาก Elasticsearch
ฐานข้อมูลเวกเตอร์:
- Chroma DB: ฐานข้อมูลโอเพ่นซอร์สแบบ AI ดั้งเดิม
- Milvus: ฐานข้อมูลเวกเตอร์โอเพ่นซอร์สสำหรับแอปพลิเคชันที่ขับเคลื่อนด้วย AI
- Pinecone: ฐานข้อมูลเวกเตอร์แบบไร้เซิร์ฟเวอร์ ปรับให้เหมาะกับเวิร์กโฟลว์การเรียนรู้ของเครื่อง
- Oracle AI Vector Search: ผสานรวมความสามารถในการค้นหาเวกเตอร์ภายใน Oracle Database สำหรับการสืบค้นเชิงความหมายตามการฝังเวกเตอร์
ส่วนขยายฐานข้อมูลเชิงสัมพันธ์:
- Pgvector: ส่วนขยายโอเพ่นซอร์สสำหรับการค้นหาความคล้ายคลึงกันของเวกเตอร์ใน PostgreSQL
ระบบฐานข้อมูลอื่นๆ:
- Azure Cosmos DB: บริการฐานข้อมูลหลายรูปแบบที่กระจายไปทั่วโลกพร้อมการค้นหาเวกเตอร์แบบรวม
- Couchbase: ฐานข้อมูลคลาวด์ NoSQL แบบกระจาย
- Lantern: เครื่องมือค้นหาส่วนตัวที่คำนึงถึงความเป็นส่วนตัว
- LlamaIndex: ใช้ที่เก็บเวกเตอร์ในหน่วยความจำที่ตรงไปตรงมาเพื่อการทดลองที่รวดเร็ว
- Neo4j: ระบบจัดการฐานข้อมูลกราฟ
- Qdrant: ฐานข้อมูลเวกเตอร์โอเพ่นซอร์สที่ออกแบบมาเพื่อการค้นหาความคล้ายคลึงกัน
- Redis Stack: พื้นที่จัดเก็บโครงสร้างข้อมูลในหน่วยความจำที่ใช้เป็นฐานข้อมูล แคช และตัวกลางข้อความ
- SurrealDB: ฐานข้อมูลหลายแบบจำลองที่ปรับขนาดได้ซึ่งปรับให้เหมาะสมสำหรับข้อมูลอนุกรมเวลา
- Weaviate: เครื่องมือค้นหาเวกเตอร์แบบโอเพ่นซอร์สบนคลาวด์
ไลบรารีและเครื่องมือค้นหาเวกเตอร์:
- FAISS: ไลบรารีสำหรับการค้นหาความคล้ายคลึงกันที่มีประสิทธิภาพและการจัดกลุ่มเวกเตอร์หนาแน่น ออกแบบมาเพื่อจัดการชุดข้อมูลขนาดใหญ่และปรับให้เหมาะสมเพื่อการดึงข้อมูลเพื่อนบ้านที่ใกล้ที่สุดอย่างรวดเร็ว