โครงการนี้มีแอปพลิเคชันเว็บอย่างง่ายที่ช่วยให้ผู้ใช้สามารถอัปโหลดเอกสาร PDF สร้างการฝังเวกเตอร์จากเนื้อหาจากนั้นค้นหาข้อมูลภายในเอกสารโดยใช้แบบสอบถามข้อความ แบบจำลองการฝังและภาษาของ OpenAI ใช้สำหรับการสร้างการฝังเวกเตอร์และการดึงข้อมูล
การบริโภคเอกสาร PDF : ผู้ใช้สามารถอัปโหลดเอกสาร PDF ผ่านเว็บอินเตอร์เฟสสำหรับการดึงข้อมูล
สร้างการฝังเวกเตอร์ : เนื้อหาข้อความถูกดึงออกมาจาก PDF และแบ่งออกเป็นชิ้นเล็ก ๆ โดยใช้ Langchain EMBEDDINGS ถูกสร้างขึ้นสำหรับแต่ละก้อนโดยใช้โมเดลการฝังข้อความของ OpenAI (เช่นการฝังตัวข้อความ -ADA-002)
การจัดเก็บฐานข้อมูลเวกเตอร์ : จัดเก็บการฝังเวกเตอร์ที่สร้างขึ้นในฐานข้อมูลเวกเตอร์เช่น Pinecone สำหรับการค้นหาที่คล้ายคลึงกัน
ปรับแต่งการสอบถามผู้ใช้ : แบบสอบถามผู้ใช้ได้รับการปรับปรุงโดยใช้ API การแชทเสร็จสมบูรณ์ของ OpenAI เพื่อปรับปรุงความแม่นยำในการค้นหา
ค้นหาข้อมูล : ผู้ใช้สามารถป้อนข้อความค้นหาเพื่อค้นหาข้อมูลภายในเอกสารที่อัปโหลด ระบบดึงชิ้นข้อความที่เกี่ยวข้องขึ้นอยู่กับความคล้ายคลึงกันของเวกเตอร์กับการฝังคิวรี
สร้างการตอบสนอง : ขึ้นอยู่กับชิ้นข้อความที่ดึงมาบริบท (การสืบค้นและการตอบกลับก่อนหน้า) และแบบสอบถามของผู้ใช้การตอบสนองถูกสร้างขึ้นโดยใช้โมเดล OpenAI (GPT-4O, GPT-4 หรือ GPT-3.5-turbo) ผู้ใช้สามารถเลือกโมเดล OpenAI ผ่านเว็บอินเตอร์เฟส ทางเลือกของโมเดลสามารถส่งผลกระทบต่อรูปแบบการตอบสนองรายละเอียดและความแม่นยำ
ไฟล์ txt.txt แสดงรายการแพ็คเกจ Python ที่จำเป็นและเวอร์ชันที่จำเป็นในการเรียกใช้แอปพลิเคชัน นี่คือรายละเอียดของแต่ละแพ็คเกจ:
Flask : เฟรมเวิร์กเว็บ Python ที่มีน้ำหนักเบาสำหรับการสร้างเว็บแอปพลิเคชัน
Pinecone-client : ไลบรารีไคลเอนต์ Python อย่างเป็นทางการสำหรับการโต้ตอบกับ Pinecone ฐานข้อมูลเวกเตอร์ที่ใช้ในแอปพลิเคชันของคุณ
OpenAI : ไลบรารีไคลเอนต์ Python อย่างเป็นทางการสำหรับ OpenAI API ซึ่งใช้ในการสร้างการฝังข้อความและโต้ตอบกับโมเดลภาษาของ OpenAI
PYPDF2 : ไลบรารี Pure-Python สำหรับการแยกข้อความจากไฟล์ PDF
Langchain : กรอบการทำงานสำหรับการสร้างแอปพลิเคชันที่มีรูปแบบภาษาขนาดใหญ่ที่ใช้ในแอปพลิเคชันของคุณสำหรับการแยกข้อความและการถ่ายทำ
Numpy : แพคเกจสำหรับการคำนวณทางวิทยาศาสตร์ใน Python ใช้สำหรับการทำงานกับอาร์เรย์หลายมิติและเวกเตอร์
ในการติดตั้งการอ้างอิงเหล่านี้คุณสามารถสร้างสภาพแวดล้อมเสมือนจริงของ Python ใหม่และเรียกใช้คำสั่งต่อไปนี้:
PIP Install -r rechent.txt
สำหรับการรวมเข้ากับ openai และ pinecone คุณจะต้องได้รับและกำหนดค่าคีย์ API ที่เกี่ยวข้อง, โฮสต์ (pinecone) ข้อมูลสำหรับแพลตฟอร์มเหล่านี้ ตั้งค่าคีย์ OpenAI และ PINECONE API ของคุณและโฮสต์ PINECONE เป็นตัวแปรสภาพแวดล้อมใน Linux ใช้คำสั่ง Linux ต่อไปนี้เพื่อส่งออกตัวแปรเหล่านี้:
ส่งออก openai_api_key = 'your-openai-api-key'
ส่งออก pinecone_api_key = 'ของคุณ-pinecone-api-key'
ส่งออก pinecone_host = 'ของคุณ-โพติ-โฮสต์'
ตรวจสอบให้แน่ใจว่าคุณมีบัญชี OpenAI พร้อมคีย์ API ที่ถูกต้อง คุณสามารถสร้างหรือรับคีย์ API ของคุณจากแพลตฟอร์ม OpenAI (https://platform.openai.com/) และจัดการพวกเขา (https://platform.openai.com/organization/api-keys) นอกจากนี้ตรวจสอบให้แน่ใจว่าบัญชีของคุณมีโควต้าการใช้งานที่เพียงพอตามตัวอย่างนี้ต้องใช้บัญชี OpenAI ที่ชำระเงิน
สภาพแวดล้อม Pinecone (บัญชีฟรี Pinecone ใช้ https://www.pinecone.io/): 1) ดัชนี Pinecone ใช้ 2) มิติ: 1536 3) ประเภทโฮสต์: Serverless
Centos Linux release 8.5.2111 ใช้เป็น Linux OS Cloud Linux VM ที่มี IP สาธารณะ (ไม่บังคับ) ได้รับการทดสอบสำหรับเว็บอินเตอร์เฟส สามารถใช้ IP ในท้องถิ่นได้เช่นกัน สร้างสภาพแวดล้อมเสมือนจริงของ Python (เป็นทางเลือก แต่แนะนำ) เพื่อแยกการพึ่งพาโครงการ
แอปพลิเคชันมีเว็บอินเตอร์เฟสที่สร้างขึ้นด้วย Flask ซึ่งเป็นเฟรมเวิร์กเว็บ Python ผู้ใช้สามารถอัปโหลดเอกสาร PDF ป้อนแบบสอบถามเลือกโมเดล OpenAI Language เพื่อใช้ (GPT-3.5-Turbo, GPT-4 หรือ GPT-4O) และรับการตอบกลับโดยละเอียดตามข้อมูลที่ดึงมาจากเอกสาร PDF ที่อัปโหลด
การกลืนเอกสาร PDF และการสร้างเวกเตอร์ฝังตัว
แอปพลิเคชันมีเว็บอินเตอร์เฟสที่ผู้ใช้สามารถอัปโหลดเอกสาร PDF เมื่ออัปโหลดไฟล์ PDF เนื้อหาข้อความจะถูกแยกออกจากเอกสารและแบ่งออกเป็นชิ้นเล็ก ๆ โดยใช้ RecursiveCharacterTextSplitter จากไลบรารี Langchain กระบวนการแยกนี้ช่วยให้มั่นใจได้ว่าข้อความจะถูกแบ่งออกเป็นชิ้นที่จัดการได้ในขณะที่รักษาบริบท
ถัดไปการฝังเวกเตอร์จะถูกสร้างขึ้นสำหรับแต่ละข้อความที่ใช้โดยใช้โมเดลการฝังตัวข้อความของ OpenAI ของ OpenAI การฝังตัวเหล่านี้เป็นเวกเตอร์มิติสูงที่จับความหมายเชิงความหมายของข้อความทำให้การค้นหาความคล้ายคลึงกันอย่างมีประสิทธิภาพ
การจัดเก็บเวกเตอร์ฝังใน pinecone
Embeddings เวกเตอร์ที่สร้างขึ้นพร้อมกับชิ้นข้อความที่เกี่ยวข้องและหมายเลขหน้าจะถูกเก็บไว้ในฐานข้อมูลเวกเตอร์ pinecone Pinecone เป็นฐานข้อมูลเวกเตอร์ที่ปรับขนาดได้และมีประสิทธิภาพซึ่งออกแบบมาสำหรับการจัดเก็บและสอบถามเวกเตอร์มิติสูง
การประมวลผลแบบสอบถาม
เมื่อผู้ใช้ส่งแบบสอบถามผ่านเว็บอินเตอร์เฟสแอปพลิเคชันจะประมวลผลในขั้นตอนต่อไปนี้:
การปรับแต่งแบบสอบถาม:
แบบสอบถามของผู้ใช้ถูกส่งไปยังรูปแบบภาษาของ OpenAI (เช่น GPT-3.5-turbo, GPT-4 หรือ GPT-4O) เพื่อปรับแต่งและปรับปรุงการสืบค้นเพื่อความแม่นยำในการค้นหาที่ดีขึ้น
การสร้างรุ่นสำหรับการสืบค้น
แบบสอบถามกลั่นจะถูกแปลงเป็นเวกเตอร์ที่ฝังโดยใช้โมเดลการฝังตัวของ OpenAI ของ OpenAI
การค้นหาความคล้ายคลึงกัน:
การฝังคิวรีใช้เพื่อค้นหาฐานข้อมูลเวกเตอร์ Pinecone สำหรับชิ้นข้อความที่คล้ายคลึงกันมากที่สุดตามความคล้ายคลึงกันของเวกเตอร์
หมายเหตุ : หากต้องการสอบถามดัชนี pinecone และดึงผลลัพธ์ด้านบนให้ใช้รหัสต่อไปนี้ (app.py)
#Adjust และทดลองค่า top_k ตามกรณีการใช้งานของคุณ
ผลลัพธ์ = pinecone_index.query (vector = padded_query_vector.tolist (), top_k = 1, include_metadata = true)
พารามิเตอร์ TOP_K ระบุจำนวนผลลัพธ์สูงสุดเพื่อส่งคืนจากแบบสอบถาม การปรับค่า top_k สามารถส่งผลกระทบต่อคุณภาพของการตอบสนองการสืบค้น ค่า top_k ที่สูงขึ้นอาจให้ผลลัพธ์ที่ครอบคลุมมากขึ้น แต่ยังสามารถแนะนำข้อมูลที่เกี่ยวข้องน้อยลง ในทางกลับกันค่า top_k ที่ต่ำกว่าอาจให้ผลลัพธ์ที่แม่นยำมากขึ้น แต่ผลลัพธ์น้อยลง การทดลองกับค่า top_k ที่แตกต่างกันเป็นสิ่งสำคัญเพื่อค้นหาสมดุลที่เหมาะสมที่สุดสำหรับกรณีการใช้งานเฉพาะของคุณ นอกจากนี้โปรดทราบว่าการเพิ่มมูลค่า top_k จะส่งผลกระทบต่อต้นทุนโดยเฉพาะอย่างยิ่งเมื่อใช้โมเดล OpenAI ที่ชำระเงินสำหรับการประมวลผลผลลัพธ์ ค่า TOP_K ที่สูงขึ้นส่งผลให้มีการส่งข้อมูลมากขึ้นและประมวลผลโดยแบบจำลองซึ่งสามารถนำไปสู่ค่าใช้จ่ายการใช้งานที่เพิ่มขึ้น
หมายเหตุ : พารามิเตอร์ score_threshold กำหนดคะแนนความเกี่ยวข้องขั้นต่ำที่จำเป็นสำหรับผลลัพธ์ที่จะได้รับการพิจารณาซึ่งอาจส่งผลกระทบต่อคุณภาพของการตอบสนองการสืบค้น ดังนั้นปรับค่าเกณฑ์ตามกรณีการใช้งานและการทดลองของคุณ (app.py)
#ปรับค่าเกณฑ์ตามกรณีการใช้งานของคุณ
score_threshold = 0.65
การสร้างการตอบสนอง:
ข้อความที่เกี่ยวข้องที่ดึงมาจากฐานข้อมูลจะถูกรวมเข้ากับบริบทก่อนหน้า (ถ้ามี) และแบบสอบถามผู้ใช้ดั้งเดิม ข้อมูลนี้จะถูกส่งไปยังรูปแบบภาษาของ OpenAI (แบบจำลองเดียวกันที่ใช้สำหรับการปรับแต่งแบบสอบถาม) เพื่อสร้างการตอบสนองที่ครอบคลุมและเกี่ยวข้องกับบริบท
การตอบสนองจากบริบท:
แอปพลิเคชันรักษาบริบทของการสืบค้นและคำตอบก่อนหน้านี้ บริบทนี้จะถูกส่งผ่านไปยังรูปแบบภาษาของ Openai ในระหว่างขั้นตอนการสร้างการตอบสนองเพื่อให้แน่ใจว่าการตอบสนองที่สร้างขึ้นนั้นคำนึงถึงประวัติการสนทนาและให้ข้อมูลที่ถูกต้องและเกี่ยวข้องกับบริบท
ในการเรียกใช้แอปพลิเคชันให้ทำตามขั้นตอนเหล่านี้:
เปิดใช้งานสภาพแวดล้อมเสมือนจริงของ Python (ไม่บังคับ): (venv) [user@host project_directory]#
รัน App.py Script: Python App.py
แอปพลิเคชันจะเริ่มทำงานบนพอร์ต 5000 และคุณอาจเห็นผลลัพธ์ที่คล้ายกันเช่นต่อไปนี้:
ตรวจสอบให้แน่ใจว่าแอปพลิเคชันกำลังรับฟังการเชื่อมต่อที่เข้ามาในพอร์ต 5000:
netstat -aultpn | grep -i 5000 tcp 0 0 0.0.0.0.0:5000 0.0.0.0:* ฟัง 525661/Python
http://127.0.0.1:5000/ (สำหรับการเข้าถึงในท้องถิ่น)
http: // vm สาธารณะ IP: 5000/(สำหรับการเข้าถึงระยะไกลทางอินเทอร์เน็ต)
หมายเหตุ : หากคุณวางแผนที่จะเข้าถึงแอปพลิเคชันผ่าน IP สาธารณะตรวจสอบให้แน่ใจว่าอนุญาตให้มีการรับส่งข้อมูลที่เข้ามาในพอร์ต 5000 ผ่านไฟร์วอลล์ของ VM สิ่งนี้จะช่วยให้มั่นใจได้ว่าการสื่อสารผ่าน IP สาธารณะได้รับอนุญาตและคุณสามารถเข้าถึงเว็บอินเตอร์เฟสจากระยะไกลได้
นอกจากนี้ตรวจสอบให้แน่ใจว่าโฟลเดอร์บนเครื่อง Linux ของคุณซึ่งจะมีไฟล์ PDF ที่อัปโหลดไม่มีไฟล์ PDF ที่มีชื่อเดียวกัน หากไฟล์มีอยู่แล้วมันจะถูกเขียนทับ
เลือกไฟล์ PDF และอัปโหลดโดยใช้ปุ่ม 'อัปโหลด'
คลิกที่ "ไฟล์กระบวนการ" (ในขั้นตอนนี้การฝังเวกเตอร์จะถูกสร้างและเก็บไว้ในฐานข้อมูล Pinecone)
ป้อนคำค้นหาของคุณ เลือกโมเดลภาษา Openai จากเมนูแบบเลื่อนลง
ตรวจสอบการตอบคำถามแบบสอบถาม ส่งแบบสอบถามที่ตามมา
เมื่อเสร็จแล้วให้คลิก 'เซสชันสิ้นสุด' (จะทำให้การทำความสะอาด - การลบไฟล์ที่อัปโหลดและการฝังตัวเวกเตอร์ในฐานข้อมูล)
บน Linux Macine ให้กด Ctrl+C เพื่อปิดแอปพลิเคชัน (App.py)