
หนึ่งในแอพพลิเคชั่นที่ทรงพลังที่สุดของ LLM คือการสร้างการตอบคำถามที่ซับซ้อน (Q&A) chatbots ซึ่งสามารถให้คำตอบที่ถูกต้องตามข้อมูลแหล่งข้อมูลเฉพาะ โครงการนี้มุ่งเน้นไปที่การพัฒนาผู้ช่วยเสมือนจริงสำหรับห้องสมุด Deal.II ซึ่งเป็นไลบรารีองค์ประกอบไฟไนต์โอเพนซอร์ซ C ++ โดยใช้เทคนิคที่เรียกว่าการเรียกคืนการเพิ่มขึ้น (RAG) ชุดข้อมูลมีแหล่งที่มาจากขั้นตอนการสอน 90 ขั้นตอนที่มีอยู่ในเอกสารอย่างเป็นทางการเอกสาร II ซึ่งสามารถเข้าถึงได้ที่นี่ เอ็นจิ้นโมเดลภาษาขนาดใหญ่ (LLM) จัดทำโดย Cohere ซึ่งเป็นที่รู้จักกันในการส่งมอบรุ่น LLM คุณภาพสูงสำหรับการฝังและบริการแชท สำหรับฐานข้อมูลเวกเตอร์เราเลือก Chroma เนื่องจากธรรมชาติของโอเพนซอร์ซความเร็วและประสิทธิภาพในการค้นหาและดึงเวกเตอร์ Framework Langchain ใช้เพื่อจัดการการโต้ตอบระหว่างอินพุตของผู้ใช้อย่างมีประสิทธิภาพการประมวลผลของการสืบค้นและการดึงข้อมูลที่เกี่ยวข้องจากฐานข้อมูลเวกเตอร์ทำให้มั่นใจได้ว่าการรวมกันอย่างราบรื่นระหว่างส่วนประกอบต่างๆของแบบจำลอง
กระบวนการในการเตรียมฐานข้อมูลมีดังนี้: อันดับแรกหน้าการสอนจะถูกดึงมาจากเว็บไซต์เป็นวัตถุเอกสาร Langchain เพื่อปรับปรุงความเร็วในการเข้าถึง (ระหว่างเวลาทดสอบ) วัตถุเอกสารเหล่านี้จะถูกบันทึกเป็นไฟล์ JSON บนดิสก์ท้องถิ่น ถัดไปเอกสารจะถูกแบ่งออกเป็นชิ้นขนาดที่เหมาะสม (ประมาณ 400 โทเค็นต่อก้อนด้วยการทับซ้อนของโทเค็น 40 ใบ) โดยรวมแล้วชุดข้อมูลประกอบด้วยโทเค็น 2.3 ล้านโท ในที่สุดเอกสารแยกเหล่านี้จะถูกฝังลงในฐานข้อมูลเวกเตอร์
โมเดลถูกสร้างขึ้นโดยใช้โซ่สี่ตัวและเทมเพลตพร้อมท์สามแบบ
การปรับเปลี่ยนห่วงโซ่ : ห่วงโซ่นี้ได้รับคำถามและประวัติการสนทนาของผู้ใช้จากนั้นปรับปรุงคำถามตามบทสนทนาก่อนหน้า ตัวอย่างเช่นหากคำถามแรกคือ "fe_nothing คืออะไร" และคำถามที่สองคือ "ฉันจะใช้มันได้ที่ไหน" ห่วงโซ่การปฏิรูปจะแก้ไขคำถามที่สองเป็น "ฉันจะใช้ fe_nothing ได้ที่ไหน" ขั้นตอนนี้จะเพิ่มหน่วยความจำให้กับการสนทนาเพื่อให้มั่นใจถึงความต่อเนื่องของบริบท
ห่วงโซ่หลายคำถาม : ห่วงโซ่นี้ใช้คำถามที่ปรับเปลี่ยนและสร้างคำถามที่คล้ายกันห้าข้อโดยให้มุมมองหลายมุมมอง มันส่งออกรายการคำถาม Python โดยใช้ฟังก์ชั่นแลมบ์ดาอย่างง่ายและบรรทัดที่ว่างเปล่าใด ๆ จะถูกลบออกโดยใช้ฟังก์ชัน remove_empty_string เป็นขั้นตอนสุดท้าย
โซ่ดึงข้อมูล : ห่วงโซ่นี้ใช้คำถามห้าข้อจากห่วงโซ่ก่อนหน้าและสอบถามฐานข้อมูลเวกเตอร์ ฐานข้อมูลเวกเตอร์ค้นหาเวกเตอร์ที่คล้ายกันและดึงเอกสารที่เกี่ยวข้อง เนื่องจากเอกสารเดียวกันอาจถูกเรียกคืนหลายครั้งสำหรับคำถามที่แตกต่างกันชุดเอกสารที่ไม่ซ้ำกันจึงถูกสร้างขึ้นโดยใช้ฟังก์ชั่น get_unique_union เป็นขั้นตอนสุดท้าย
Rag Chain : ห่วงโซ่นี้ใช้คำถามประวัติการสนทนาและเอกสารที่ดึงมาจากห่วงโซ่ก่อนหน้าเป็นบริบทเพื่อสร้างคำตอบสุดท้าย
ส่วนหน้าของแอปพลิเคชันถูกสร้างขึ้นโดยใช้ ChatInterface ของ Gradio ด้วยฟังก์ชั่นการตอบกลับที่ออกแบบมาเพื่อสตรีมเอาต์พุตแบบเรียลไทม์ แอปพลิเคชันถูกปรับใช้ในพื้นที่กอดใบหน้าและสามารถเข้าถึงได้ที่นี่