โครงการนี้มีจุดมุ่งหมายเพื่อสร้างเครื่องมือแนะนำการใช้ประโยชน์จากสถาปัตยกรรมการดึงข้อมูลการเรียกคืนตัวแทน (RAG) ตัวแทนเพื่อให้คำแนะนำที่ตระหนักถึงบริบทตามคำค้นหาของผู้ใช้ MVP มุ่งเน้นไปที่โมดูลาร์และความสามารถในการปรับขนาดในขณะที่ใช้เทคโนโลยีโอเพนซอร์ซเพื่อประสิทธิภาพด้านต้นทุน
โครงสร้าง codebase ที่เสนอ:
ragsearch/
├── __init__.py
├── retrieval/
│ ├── __init__.py
│ ├── structured.py # For databases (e.g., DuckDB,sqlLite,MongoDB)
│ ├── unstructured.py # For document loaders (e.g., PDF, Word, HTML)
│ ├── base.py # Abstract base class
├── generation/
│ ├── __init__.py
│ ├── langchain.py # LangChain-based generation
│ ├── llamaindex.py # LlamaIndex-based generation
│ ├── base.py # Abstract base class
├── fusion/
│ ├── __init__.py
│ ├── simple_fusion.py # Simple query-context fusion
│ ├── attention.py # Advanced fusion strategies
│ ├── base.py # Abstract base class
├── reranking/
│ ├── __init__.py # Factory for reranking components
│ ├── bm25_reranker.py # Reranking based on BM25 scores
│ ├── neural_reranker.py # Reranking with neural models
│ ├── base.py # Abstract base class
├── llms/
│ ├── __init__.py # Factory for LLMs
│ ├── openai.py # OpenAI wrapper
│ ├── cohere.py # Cohere wrapper
│ ├── huggingface.py # HuggingFace wrapper
│ ├── base.py # Abstract base class
├── utils/
│ ├── __init__.py
│ ├── logger.py # Logging utilities
│ ├── config.py # Configuration utilities
│ ├── data.py # Data utilities
│ ├── metrics.py # Evaluation metrics
├── tests/
│ ├── __init__.py
│ ├── test_retrieval.py
│ ├── test_generation.py
│ ├── test_fusion.py
│ ├── test_reranking.py
│ ├── test_llms.py
├── main.py # Main entry point
├── config.yaml # Configuration file
├── README.md # Project documentation
├── RAG.md # Documentation for Retrieval-Augmented Generation
├── RAG-FAQ.md # FAQ for Retrieval-Augmented Generation
Retrieval-Augmented Generation (RAG) เป็นกระบวนการของการเพิ่มประสิทธิภาพผลลัพธ์ของแบบจำลองภาษาขนาดใหญ่ดังนั้นจึงอ้างอิงฐานความรู้ที่เชื่อถือได้นอกแหล่งข้อมูลการฝึกอบรมก่อนที่จะสร้างการตอบสนอง โมเดลภาษาขนาดใหญ่ (LLMS) ได้รับการฝึกฝนเกี่ยวกับข้อมูลจำนวนมากและใช้พารามิเตอร์พันล้านเพื่อสร้างผลลัพธ์ดั้งเดิมสำหรับงานต่าง ๆ เช่นการตอบคำถามการแปลภาษาและการเติมประโยคให้สมบูรณ์ RAG ขยายขีดความสามารถที่ทรงพลังของ LLMs ไปยังโดเมนเฉพาะหรือฐานความรู้ภายในขององค์กรทั้งหมดโดยไม่จำเป็นต้องฝึกอบรมแบบจำลองใหม่ มันเป็นวิธีที่คุ้มค่าในการปรับปรุงเอาต์พุต LLM ดังนั้นจึงยังคงมีความเกี่ยวข้องถูกต้องและมีประโยชน์ในบริบทต่าง ๆ
LLMS เป็นเทคโนโลยีปัญญาประดิษฐ์ที่สำคัญ (AI) ที่ให้พลังแก่แชทบอทอัจฉริยะและแอปพลิเคชั่นการประมวลผลภาษาธรรมชาติอื่น ๆ (NLP) เป้าหมายคือการสร้างบอทที่สามารถตอบคำถามผู้ใช้ในบริบทต่าง ๆ โดยการอ้างอิงข้ามแหล่งความรู้ที่มีสิทธิ์ น่าเสียดายที่ธรรมชาติของเทคโนโลยี LLM แนะนำความไม่แน่นอนในการตอบสนอง LLM นอกจากนี้ข้อมูลการฝึกอบรม LLM นั้นคงที่และแนะนำวันที่ตัดออกเกี่ยวกับความรู้ที่มี
นำเสนอข้อมูลเท็จเมื่อไม่มีคำตอบ นำเสนอข้อมูลที่ล้าสมัยหรือทั่วไปเมื่อผู้ใช้คาดหวังการตอบสนองที่เฉพาะเจาะจงในปัจจุบัน การสร้างการตอบสนองจากแหล่งที่ไม่ได้รับอนุญาต การสร้างคำตอบที่ไม่ถูกต้องเนื่องจากความสับสนในคำศัพท์ซึ่งแหล่งการฝึกอบรมที่แตกต่างกันใช้คำศัพท์เดียวกันเพื่อพูดคุยเกี่ยวกับสิ่งต่าง ๆ คุณสามารถนึกถึงรูปแบบภาษาขนาดใหญ่ในฐานะพนักงานใหม่ที่มีความกระตือรือร้นที่ไม่ยอมให้ข้อมูลเกี่ยวกับเหตุการณ์ปัจจุบัน แต่จะตอบคำถามทุกข้อด้วยความมั่นใจอย่างแท้จริง น่าเสียดายที่ทัศนคติดังกล่าวอาจส่งผลเสียต่อความไว้วางใจของผู้ใช้และไม่ใช่สิ่งที่คุณต้องการให้แชทบอทของคุณเลียนแบบ!
ผ้าขี้ริ้วเป็นวิธีหนึ่งในการแก้ปัญหาความท้าทายเหล่านี้ มันเปลี่ยนเส้นทาง LLM เพื่อดึงข้อมูลที่เกี่ยวข้องจากแหล่งความรู้ที่กำหนดไว้ล่วงหน้า องค์กรมีการควบคุมเอาต์พุตข้อความที่สร้างขึ้นมากขึ้นและผู้ใช้จะได้รับข้อมูลเชิงลึกเกี่ยวกับวิธีที่ LLM สร้างการตอบสนอง
เทคโนโลยี RAG นำประโยชน์หลายประการมาสู่ความพยายาม AI ขององค์กร
การพัฒนา Chatbot มักจะเริ่มใช้แบบจำลองพื้นฐาน โมเดลพื้นฐาน (FMS) เป็น LLM ที่เข้าถึงได้ด้วย API ที่ได้รับการฝึกฝนบนสเปกตรัมในวงกว้างของข้อมูลทั่วไปและไม่มีป้ายกำกับ ต้นทุนการคำนวณและการเงินของการฝึกอบรม FMS สำหรับองค์กรหรือข้อมูลเฉพาะโดเมนนั้นสูง RAG เป็นวิธีที่คุ้มค่ากว่าในการแนะนำข้อมูลใหม่ให้กับ LLM มันทำให้เทคโนโลยีปัญญาประดิษฐ์กำเนิด (Generative AI) สามารถเข้าถึงได้และใช้งานได้ในวงกว้างมากขึ้น
แม้ว่าแหล่งข้อมูลการฝึกอบรมดั้งเดิมสำหรับ LLM นั้นเหมาะสมกับความต้องการของคุณ แต่ก็เป็นสิ่งที่ท้าทายในการรักษาความเกี่ยวข้อง RAG ช่วยให้นักพัฒนาสามารถให้การวิจัยสถิติหรือข่าวล่าสุดเกี่ยวกับแบบจำลองการกำเนิด พวกเขาสามารถใช้ RAG เพื่อเชื่อมต่อ LLM โดยตรงกับฟีดโซเชียลมีเดียสดเว็บไซต์ข่าวหรือแหล่งข้อมูลที่ได้รับการอัพเดทบ่อยครั้ง LLM สามารถให้ข้อมูลล่าสุดแก่ผู้ใช้
RAG อนุญาตให้ LLM นำเสนอข้อมูลที่ถูกต้องด้วยแหล่งที่มาของแหล่งที่มา ผลลัพธ์อาจรวมถึงการอ้างอิงหรือการอ้างอิงถึงแหล่งที่มา ผู้ใช้ยังสามารถค้นหาเอกสารต้นฉบับด้วยตนเองหากพวกเขาต้องการคำชี้แจงเพิ่มเติมหรือรายละเอียดเพิ่มเติม สิ่งนี้สามารถเพิ่มความไว้วางใจและความมั่นใจในโซลูชัน AI กำเนิดของคุณ
ด้วย RAG นักพัฒนาสามารถทดสอบและปรับปรุงแอปพลิเคชันแชทได้อย่างมีประสิทธิภาพมากขึ้น พวกเขาสามารถควบคุมและเปลี่ยนแปลงแหล่งข้อมูลของ LLM เพื่อปรับให้เข้ากับข้อกำหนดที่เปลี่ยนแปลงหรือการใช้งานข้ามสายงาน นักพัฒนายังสามารถ จำกัด การดึงข้อมูลที่ละเอียดอ่อนไปยังระดับการอนุญาตที่แตกต่างกันและตรวจสอบให้แน่ใจว่า LLM สร้างการตอบสนองที่เหมาะสม นอกจากนี้พวกเขายังสามารถแก้ไขปัญหาและแก้ไขหาก LLM อ้างอิงแหล่งข้อมูลที่ไม่ถูกต้องสำหรับคำถามเฉพาะ องค์กรสามารถใช้เทคโนโลยี AI แบบกำเนิดได้อย่างมั่นใจมากขึ้นสำหรับแอพพลิเคชั่นที่หลากหลาย
หากไม่มี RAG LLM จะใช้อินพุตของผู้ใช้และสร้างการตอบกลับตามข้อมูลที่ได้รับการฝึกฝน - หรือสิ่งที่มันรู้อยู่แล้ว ด้วย RAG จะมีการแนะนำส่วนประกอบการดึงข้อมูลที่ใช้การป้อนข้อมูลผู้ใช้เพื่อดึงข้อมูลครั้งแรกจากแหล่งข้อมูลใหม่ แบบสอบถามผู้ใช้และข้อมูลที่เกี่ยวข้องนั้นได้รับการมอบให้กับ LLM LLM ใช้ความรู้ใหม่และข้อมูลการฝึกอบรมเพื่อสร้างการตอบสนองที่ดีขึ้น ส่วนต่อไปนี้ให้ภาพรวมของกระบวนการ
ข้อมูลใหม่นอกชุดข้อมูลการฝึกอบรมดั้งเดิมของ LLM เรียกว่าข้อมูลภายนอก มันมาจากแหล่งข้อมูลหลายแหล่งเช่น API ฐานข้อมูลหรือที่เก็บเอกสาร ข้อมูลอาจมีอยู่ในรูปแบบต่าง ๆ เช่นไฟล์บันทึกฐานข้อมูลหรือข้อความแบบยาว อีกเทคนิค AI ที่เรียกว่าแบบจำลองภาษาฝังตัวแปลงข้อมูลเป็นตัวแทนเชิงตัวเลขและเก็บไว้ในฐานข้อมูลเวกเตอร์ กระบวนการนี้สร้างห้องสมุดความรู้ที่โมเดล AI กำเนิดสามารถเข้าใจได้
ขั้นตอนต่อไปคือการค้นหาที่เกี่ยวข้อง แบบสอบถามผู้ใช้จะถูกแปลงเป็นตัวแทนเวกเตอร์และจับคู่กับฐานข้อมูลเวกเตอร์ ตัวอย่างเช่นพิจารณา chatbot อัจฉริยะที่สามารถตอบคำถามทรัพยากรมนุษย์สำหรับองค์กร หากพนักงานค้นหาว่า "ฉันมีลาประจำปีเท่าไหร่?" ระบบจะดึงเอกสารนโยบายการลาประจำปีควบคู่ไปกับบันทึกการลาที่ผ่านมาของพนักงานแต่ละคน เอกสารเฉพาะเหล่านี้จะถูกส่งคืนเนื่องจากมีความเกี่ยวข้องอย่างมากกับสิ่งที่พนักงานมีข้อมูล ความเกี่ยวข้องถูกคำนวณและจัดตั้งขึ้นโดยใช้การคำนวณและการเป็นตัวแทนเวกเตอร์ทางคณิตศาสตร์
ถัดไปโมเดล RAG จะเพิ่มอินพุตของผู้ใช้ (หรือพรอมต์) โดยการเพิ่มข้อมูลที่ดึงมาที่เกี่ยวข้องในบริบท ขั้นตอนนี้ใช้เทคนิควิศวกรรมที่รวดเร็วเพื่อสื่อสารอย่างมีประสิทธิภาพกับ LLM พรอมต์ที่เพิ่มขึ้นช่วยให้โมเดลภาษาขนาดใหญ่สามารถสร้างคำตอบที่แม่นยำสำหรับการสืบค้นผู้ใช้
คำถามต่อไปอาจเป็นอะไรถ้าข้อมูลภายนอกกลายเป็นเก่า? เพื่อรักษาข้อมูลปัจจุบันสำหรับการดึงข้อมูลอัพเดทเอกสารและอัปเดตการแสดงการฝังเอกสารของเอกสาร คุณสามารถทำได้ผ่านกระบวนการเรียลไทม์อัตโนมัติหรือการประมวลผลแบทช์เป็นระยะ นี่เป็นความท้าทายทั่วไปในการวิเคราะห์ข้อมูล-วิธีการวิทยาศาสตร์ข้อมูลที่แตกต่างกันเพื่อเปลี่ยนการจัดการสามารถใช้งานได้
การค้นหาความหมายช่วยเพิ่มผลลัพธ์ RAG สำหรับองค์กรที่ต้องการเพิ่มแหล่งความรู้ภายนอกมากมายให้กับแอปพลิเคชัน LLM ของพวกเขา องค์กรสมัยใหม่จัดเก็บข้อมูลจำนวนมากเช่นคู่มือคำถามที่พบบ่อยรายงานการวิจัยคู่มือการบริการลูกค้าและที่เก็บเอกสารทรัพยากรมนุษย์ในระบบต่างๆ การดึงบริบทเป็นสิ่งที่ท้าทายในระดับและลดคุณภาพเอาต์พุตที่เกิดขึ้น
เทคโนโลยีการค้นหาความหมายสามารถสแกนฐานข้อมูลขนาดใหญ่ของข้อมูลที่แตกต่างกันและดึงข้อมูลได้อย่างแม่นยำยิ่งขึ้น ตัวอย่างเช่นพวกเขาสามารถตอบคำถามเช่น "การซ่อมแซมเครื่องจักรใช้จ่ายเท่าไหร่เมื่อปีที่แล้ว" โดยการทำแผนที่คำถามไปยังเอกสารที่เกี่ยวข้องและส่งกลับข้อความเฉพาะแทนผลการค้นหา
โซลูชั่นการค้นหาคำหลักหรือคำหลักใน RAG ให้ผลลัพธ์ที่ จำกัด สำหรับงานที่ต้องใช้ความรู้ นักพัฒนาต้องจัดการกับการฝังคำ, การถ่ายเอกสารและความซับซ้อนอื่น ๆ ในขณะที่พวกเขาเตรียมข้อมูลด้วยตนเอง ในทางตรงกันข้ามเทคโนโลยีการค้นหาความหมายทำงานทั้งหมดของการเตรียมฐานความรู้เพื่อให้นักพัฒนาไม่จำเป็นต้องทำ พวกเขายังสร้างข้อความที่เกี่ยวข้องกับความหมายและคำโทเค็นที่ได้รับคำสั่งโดยความเกี่ยวข้องเพื่อเพิ่มคุณภาพของน้ำหนักบรรทุกเศษผ้า