โครงการดึงข้อมูล-เพิ่มรุ่น (RAG)
If this project helps you, consider buying me a coffee ☕. Your support helps me keep contributing to the open-source community!
แพลตฟอร์มอย่างเป็นทางการของ bRAGAI จะเปิดตัวเร็วๆ นี้ เข้าร่วมรายชื่อผู้รอเพื่อเป็นหนึ่งในผู้ใช้งานกลุ่มแรกๆ!
พื้นที่เก็บข้อมูลนี้มีการสำรวจอย่างครอบคลุมของการเรียกข้อมูล-Augmented Generation (RAG) สำหรับแอปพลิเคชันต่างๆ สมุดบันทึกแต่ละเครื่องให้คำแนะนำโดยละเอียดและลงมือปฏิบัติจริงในการตั้งค่าและทดลองใช้ RAG ตั้งแต่ระดับเบื้องต้นไปจนถึงการใช้งานขั้นสูง รวมถึงการสร้าง RAG แบบสืบค้นหลายรายการและแบบกำหนดเอง
โครงสร้างโครงการ
หากคุณต้องการข้ามไปที่มันโดยตรง ลองดูไฟล์ full_basic_rag.ipynb
-> ไฟล์นี้จะให้โค้ดเริ่มต้นสำเร็จรูปของแชทบอท RAG ที่ปรับแต่งได้อย่างเต็มที่
ตรวจสอบให้แน่ใจว่าได้เรียกใช้ไฟล์ของคุณในสภาพแวดล้อมเสมือนจริง (ส่วนชำระเงิน Get Started
)
สมุดบันทึกต่อไปนี้สามารถพบได้ภายใต้ไดเร็กทอรี tutorial_notebooks/
[1]_rag_setup_overview.ipynb
สมุดบันทึกเบื้องต้นนี้ให้ภาพรวมของสถาปัตยกรรม RAG และการตั้งค่าพื้นฐาน สมุดบันทึกเดินผ่าน:
- การตั้งค่าสภาพแวดล้อม : การกำหนดค่าสภาพแวดล้อม การติดตั้งไลบรารีที่จำเป็น และการตั้งค่า API
- การโหลดข้อมูลเบื้องต้น : ตัวโหลดเอกสารพื้นฐานและวิธีการประมวลผลข้อมูลล่วงหน้า
- Embedding Generation : การสร้าง Embedding โดยใช้โมเดลต่างๆ รวมถึงการ Embedding ของ OpenAI
- Vector Store : การตั้งค่าที่เก็บเวกเตอร์ (ChromaDB/Pinecone) เพื่อการค้นหาความคล้ายคลึงกันที่มีประสิทธิภาพ
- ไปป์ไลน์ RAG พื้นฐาน : การสร้างไปป์ไลน์การดึงข้อมูลและการสร้างอย่างง่ายเพื่อใช้เป็นพื้นฐาน
[2]_rag_with_multi_query.ipynb
สมุดบันทึกนี้สร้างจากพื้นฐาน โดยจะแนะนำเทคนิคการสืบค้นหลายรายการในไปป์ไลน์ RAG โดยสำรวจ:
- การตั้งค่าหลายแบบสอบถาม : การกำหนดค่าหลายแบบสอบถามเพื่อกระจายการสืบค้น
- เทคนิคการฝังขั้นสูง : ใช้แบบจำลองการฝังหลายแบบเพื่อปรับแต่งการดึงข้อมูล
- ไปป์ไลน์พร้อม Multi-Querying : การใช้การจัดการหลายแบบสอบถามเพื่อปรับปรุงความเกี่ยวข้องในการสร้างการตอบสนอง
- การเปรียบเทียบและการวิเคราะห์ : การเปรียบเทียบผลลัพธ์กับไปป์ไลน์แบบสอบถามเดี่ยวและการวิเคราะห์การปรับปรุงประสิทธิภาพ
[3]_rag_routing_and_query_struction.ipynb
สมุดบันทึกนี้จะเจาะลึกยิ่งขึ้นในการปรับแต่งไปป์ไลน์ RAG ครอบคลุมถึง:
- การกำหนดเส้นทางแบบลอจิคัล: ใช้การกำหนดเส้นทางตามฟังก์ชันเพื่อจัดประเภทการสืบค้นของผู้ใช้ไปยังแหล่งข้อมูลที่เหมาะสมตามภาษาการเขียนโปรแกรม
- การกำหนดเส้นทางความหมาย: ใช้การฝังและความคล้ายคลึงโคไซน์เพื่อส่งคำถามไปยังพรอมต์ทางคณิตศาสตร์หรือฟิสิกส์ เพื่อเพิ่มความแม่นยำในการตอบสนอง
- โครงสร้างการค้นหาสำหรับตัวกรองข้อมูลเมตา: กำหนดโครงสร้างการค้นหาที่มีโครงสร้างสำหรับข้อมูลเมตาบทแนะนำของ YouTube เปิดใช้งานการกรองขั้นสูง (เช่น ตามจำนวนการดู วันที่เผยแพร่)
- การแจ้งการค้นหาที่มีโครงสร้าง: ใช้ประโยชน์จากการแจ้งเตือน LLM เพื่อสร้างการสืบค้นฐานข้อมูลสำหรับการดึงเนื้อหาที่เกี่ยวข้องตามการป้อนข้อมูลของผู้ใช้
- การบูรณาการกับ Vector Stores: เชื่อมโยงการสืบค้นที่มีโครงสร้างไปยังร้านค้าเวกเตอร์เพื่อการดึงข้อมูลที่มีประสิทธิภาพ
[4]_rag_indexing_and_advanced_retrieval.ipynb
ต่อจากการปรับแต่งครั้งก่อน สมุดบันทึกนี้จะสำรวจ:
- คำนำเรื่องการแยกชิ้นส่วนเอกสาร: ชี้ไปที่แหล่งข้อมูลภายนอกสำหรับเทคนิคการแยกชิ้นส่วนเอกสาร
- การทำดัชนีการแสดงหลายตัวแทน: ตั้งค่าโครงสร้างดัชนีการแสดงเวกเตอร์หลายรายการสำหรับการจัดการเอกสารที่มีการฝังและการนำเสนอที่แตกต่างกัน
- ที่เก็บข้อมูลในหน่วยความจำสำหรับข้อมูลสรุป: ใช้ InMemoryByteStore เพื่อจัดเก็บเอกสารสรุปควบคู่ไปกับเอกสารหลัก ช่วยให้สามารถดึงข้อมูลได้อย่างมีประสิทธิภาพ
- การตั้งค่า MultiVectorRetriever: รวมการแสดงเวกเตอร์หลายรายการเพื่อดึงเอกสารที่เกี่ยวข้องตามคำค้นหาของผู้ใช้
- การใช้งาน RAPTOR: สำรวจ RAPTOR ซึ่งเป็นโมเดลการจัดทำดัชนีและการดึงข้อมูลขั้นสูง ซึ่งเชื่อมโยงกับแหล่งข้อมูลเชิงลึก
- การบูรณาการ ColBERT: สาธิตการจัดทำดัชนีและการดึงข้อมูลเวกเตอร์ระดับโทเค็นที่ใช้ ColBERT ซึ่งรวบรวมความหมายตามบริบทในระดับที่ละเอียด
- ตัวอย่าง Wikipedia ด้วย ColBERT: ดึงข้อมูลเกี่ยวกับ Hayao Miyazaki โดยใช้แบบจำลองการดึงข้อมูล ColBERT เพื่อสาธิต
[5]_rag_retrieval_and_reranking.ipynb
สมุดบันทึกขั้นสุดท้ายนี้รวบรวมส่วนประกอบของระบบ RAG โดยเน้นที่ความสามารถในการขยายขนาดและการเพิ่มประสิทธิภาพ:
- การโหลดและการแยกเอกสาร: โหลดและจัดเอกสารเป็นชิ้น ๆ สำหรับการจัดทำดัชนี และจัดเตรียมเอกสารสำหรับการจัดเก็บเวกเตอร์
- การสร้างคำค้นหาหลายคำด้วย RAG-Fusion: ใช้วิธีการแบบพร้อมท์เพื่อสร้างคำค้นหาหลายคำจากคำถามที่ป้อนเพียงคำถามเดียว
- Reciprocal Rank Fusion (RRF): ใช้ RRF เพื่อจัดอันดับรายการดึงข้อมูลหลายรายการใหม่ โดยรวมผลลัพธ์เข้าด้วยกันเพื่อปรับปรุงความเกี่ยวข้อง
- การตั้งค่ารีทรีฟเวอร์และ RAG Chain: สร้างเชนการดึงข้อมูลสำหรับการตอบคำถาม โดยใช้การจัดอันดับแบบผสมและเชน RAG เพื่อดึงข้อมูลที่เกี่ยวข้องตามบริบท
- การจัดอันดับซ้ำของ Cohere: สาธิตการจัดอันดับใหม่ด้วยแบบจำลองของ Cohere สำหรับการบีบอัดและปรับแต่งบริบทเพิ่มเติม
- CRAG และการดึงข้อมูล Self-RAG: สำรวจวิธีการดึงข้อมูลขั้นสูง เช่น CRAG และ Self-RAG พร้อมลิงก์ไปยังตัวอย่าง
- การสำรวจผลกระทบจากบริบทแบบยาว: ลิงก์ไปยังแหล่งข้อมูลที่อธิบายผลกระทบของการดึงข้อมูลบริบทแบบยาวในโมเดล RAG
เริ่มต้นใช้งาน
ข้อกำหนดเบื้องต้น: Python 3.11.7 (แนะนำ)
โคลนพื้นที่เก็บข้อมูล :
git clone https://github.com/bRAGAI/bRAG-langchain.git
cd bRAG-langchain
สร้างสภาพแวดล้อมเสมือนจริง
python -m venv venv
source venv/bin/activate
ติดตั้งการขึ้นต่อกัน : ตรวจสอบให้แน่ใจว่าได้ติดตั้งแพ็คเกจที่จำเป็นซึ่งแสดงอยู่ใน requirements.txt
pip install -r requirements.txt
เรียกใช้ Notebooks : เริ่มต้นด้วย [1]_rag_setup_overview.ipynb
เพื่อทำความคุ้นเคยกับกระบวนการตั้งค่า ดำเนินการตามลำดับผ่านสมุดบันทึกอื่นๆ เพื่อสร้างและทดลองกับแนวคิด RAG ขั้นสูงเพิ่มเติม
ตั้งค่าตัวแปรสภาพแวดล้อม :
ลำดับสมุดบันทึก : เพื่อติดตามโครงการในลักษณะที่มีโครงสร้าง:
เริ่มต้นด้วย [1]_rag_setup_overview.ipynb
ดำเนินการต่อด้วย [2]_rag_with_multi_query.ipynb
จากนั้นไปที่ [3]_rag_routing_and_query_construction.ipynb
ดำเนินการต่อด้วย [4]_rag_indexing_and_advanced_retrieval.ipynb
จบด้วย [5]_rag_retrieval_and_reranking.ipynb
การใช้งาน
หลังจากตั้งค่าสภาพแวดล้อมและรันสมุดบันทึกตามลำดับ คุณสามารถ:
การทดลองกับรุ่นดึงข้อมูล-Augmented : ใช้การตั้งค่าพื้นฐานใน [1]_rag_setup_overview.ipynb
เพื่อทำความเข้าใจพื้นฐานของ RAG
ใช้การสืบค้นหลายรายการ : เรียนรู้วิธีปรับปรุงความเกี่ยวข้องของการตอบสนองโดยแนะนำเทคนิคการสืบค้นหลายรายการใน [2]_rag_with_multi_query.ipynb
สมุดบันทึกที่เข้ามา (อยู่ระหว่างดำเนินการ)
- ความแม่นยำของบริบทด้วย RAGAS + LangSmith
- คำแนะนำเกี่ยวกับการใช้ RAGAS และ LangSmith เพื่อประเมินความแม่นยำของบริบท ความเกี่ยวข้อง และความแม่นยำในการตอบสนองใน RAG
- กำลังปรับใช้แอปพลิเคชัน RAG
- คำแนะนำเกี่ยวกับวิธีการปรับใช้แอปพลิเคชัน RAG ของคุณ
The notebooks and visual diagrams were inspired by Lance Martin's LangChain Tutorial.