ระบบเปรียบเทียบเอกสารโดยใช้ RAG
ระบบที่ใช้การดึงข้อมูล Augmented Generation (RAG) สำหรับการเปรียบเทียบบริบทระหว่างเอกสารสองฉบับ ระบบนี้ใช้ Azure OpenAI สำหรับการประมวลผลภาษาและการฝัง, ChromaDB สำหรับการจัดเก็บเวกเตอร์, FastAPI สำหรับแบ็กเอนด์ และ Streamlit สำหรับอินเทอร์เฟซผู้ใช้
คุณสมบัติ
- อัปโหลดและประมวลผลเอกสารหลายรูปแบบ (PDF, DOCX, TXT)
- การเปรียบเทียบเอกสารที่ใช้ RAG พร้อมการค้นหาเชิงความหมาย
- เว็บอินเตอร์เฟสแบบโต้ตอบพร้อมมุมมองเปรียบเทียบแบบเคียงข้างกัน
- แบบสอบถามการเปรียบเทียบที่กำหนดเอง
- ผลการเปรียบเทียบที่ดาวน์โหลดได้
- การแบ่งส่วนและการประมวลผลเอกสารอย่างมีประสิทธิภาพ
- การจัดเก็บเวกเตอร์ด้วย ChromaDB
- แบ็กเอนด์ REST API พร้อม FastAPI
ข้อกำหนดเบื้องต้น
- ไพธอน 3.8+
- การเข้าถึง Azure OpenAI API
- พื้นที่เก็บข้อมูลเพียงพอสำหรับฐานข้อมูลเวกเตอร์
การติดตั้ง
- โคลนที่เก็บ:
git clone < repository-url >
cd document-comparison-system
- ติดตั้งแพ็คเกจที่จำเป็น:
pip install -r requirements.txt
- สร้างไฟล์
.env
ในรูทโปรเจ็กต์ด้วยข้อมูลประจำตัว Azure OpenAI ของคุณ:
AZURE_OPENAI_API_KEY=your_api_key
AZURE_OPENAI_ENDPOINT=your_endpoint
AZURE_DEPLOYMENT_NAME=your_deployment_name
AZURE_EMBEDDINGS_DEPLOYMENT_NAME=your_embeddings_deployment_name
โครงสร้างโครงการ
project_root/
├── app.py # Streamlit frontend
├── backend.py # FastAPI backend
├── processor.py # Document processing and RAG logic
├── config.py # Configuration settings
└── requirements.txt # Project dependencies
เรียกใช้แอปพลิเคชัน
- เริ่มเซิร์ฟเวอร์แบ็กเอนด์:
- ในเทอร์มินัลใหม่ ให้เริ่มส่วนหน้า Streamlit:
- เปิดเบราว์เซอร์ของคุณและไปที่
http://localhost:8501
เพื่อเข้าถึงแอปพลิเคชัน
การใช้งาน
อัพโหลดเอกสาร:
- ใช้วิดเจ็ตอัพโหลดไฟล์เพื่ออัพโหลดเอกสารสองฉบับเพื่อเปรียบเทียบ
- รูปแบบที่รองรับ: PDF, DOCX, TXT
- รอการยืนยันการประมวลผล
เปรียบเทียบเอกสาร:
- เมื่ออัปโหลดเอกสารทั้งสองแล้ว คุณสามารถเริ่มการเปรียบเทียบได้
- ป้อนคำค้นหาการเปรียบเทียบที่กำหนดเองหรือไม่ก็ได้
- คลิก "เปรียบเทียบเอกสาร" เพื่อสร้างการวิเคราะห์
ดูผลลัพธ์:
- ผลการเปรียบเทียบจะแสดงในสามแท็บ:
- การเปรียบเทียบ: การวิเคราะห์โดยรวม
- เอกสาร 1 ข้อความที่ตัดตอนมา: ส่วนที่เกี่ยวข้องจากเอกสารฉบับแรก
- เอกสาร 2 ข้อความที่ตัดตอนมา: ส่วนที่เกี่ยวข้องจากเอกสารที่สอง
- ดาวน์โหลดผลลัพธ์ทั้งหมดเป็นไฟล์ JSON
รีเซ็ต:
- ใช้ปุ่ม "รีเซ็ต" เพื่อล้างเซสชันปัจจุบันและเริ่มต้นใหม่
จุดสิ้นสุด API
แบ็คเอนด์ FastAPI จัดเตรียมตำแหน่งข้อมูลต่อไปนี้:
โพสต์/อัพโหลด
อัปโหลดและประมวลผลเอกสารเดียว
- คำขอ: ข้อมูลแบบฟอร์มหลายส่วนพร้อมไฟล์
- การตอบสนอง: รหัสเอกสารและข้อความแสดงความสำเร็จ
โพสต์/เปรียบเทียบ
เปรียบเทียบเอกสารสองฉบับ
- พารามิเตอร์:
- doc1_id: ID ของเอกสารแรก
- doc2_id: ID ของเอกสารที่สอง
- แบบสอบถาม: แบบสอบถามเปรียบเทียบแบบกำหนดเองเพิ่มเติม
- คำตอบ: ผลการเปรียบเทียบรวมถึงการวิเคราะห์และข้อความที่ตัดตอนมาที่เกี่ยวข้อง
การกำหนดค่า
การตั้งค่าการกำหนดค่าที่สำคัญใน config.py
:
-
CHUNK_SIZE
: ขนาดของชิ้นเอกสาร (ค่าเริ่มต้น: 1000) -
CHUNK_OVERLAP
: ทับซ้อนกันระหว่างชิ้นส่วน (ค่าเริ่มต้น: 200) -
SUPPORTED_FILES
: รายการประเภทไฟล์ที่รองรับ -
CHROMA_PERSIST_DIRECTORY
: ตำแหน่งสำหรับจัดเก็บฐานข้อมูลเวกเตอร์
รายละเอียดทางเทคนิค
การประมวลผลเอกสาร
- เอกสารจะถูกแบ่งออกเป็นส่วนๆ โดยใช้ RecursiveCharacterTextSplitter
- ข้อความได้รับการประมวลผลล่วงหน้าเพื่อลบอักขระพิเศษและทำให้ช่องว่างเป็นมาตรฐาน
- แต่ละชิ้นถูกฝังโดยใช้การฝัง Azure OpenAI
- ชิ้นส่วนจะถูกจัดเก็บไว้ใน ChromaDB พร้อมข้อมูลเมตาของเอกสาร
การใช้งาน RAG
- ใช้การค้นหาความคล้ายคลึงกันเพื่อค้นหาส่วนที่เกี่ยวข้องจากเอกสารทั้งสอง
- ใช้การค้นหาแบบไฮบริดผ่านความสามารถในการค้นหาของ ChromaDB
- พร้อมท์แบบกำหนดเองสำหรับการสร้างการวิเคราะห์เชิงเปรียบเทียบ
- พารามิเตอร์การดึงข้อมูลที่กำหนดได้
ที่เก็บเวกเตอร์
- ChromaDB ใช้สำหรับการจัดเก็บและเรียกค้นเวกเตอร์ที่มีประสิทธิภาพ
- การจัดเก็บข้อมูลแบบถาวรช่วยให้สามารถแคชเอกสารที่ประมวลผลได้
- การกรองข้อมูลเมตาสำหรับการค้นหาเฉพาะเอกสาร
การจัดการข้อผิดพลาด
ระบบประกอบด้วยการจัดการข้อผิดพลาดที่ครอบคลุมสำหรับ:
- ประเภทไฟล์ที่ไม่รองรับ
- การประมวลผลล้มเหลว
- ข้อผิดพลาดในการสื่อสาร API
- รหัสเอกสารไม่ถูกต้อง
การปรับปรุงในอนาคต
การปรับปรุงศักยภาพ:
- รองรับรูปแบบไฟล์เพิ่มเติม
- อัลกอริธึมการเรียงลำดับขั้นสูง
- การเปรียบเทียบเอกสารต่อเนื่องหลายรูปแบบ
- การรับรองความถูกต้องของผู้ใช้
- ประวัติการเปรียบเทียบ
- กลยุทธ์การแยกชิ้นที่ซับซ้อนยิ่งขึ้น
- กลไกการแคชขั้นสูง
มีส่วนร่วม
ยินดีบริจาค! โปรดส่งคำขอดึง
ใบอนุญาต
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT - ดูรายละเอียดในไฟล์ใบอนุญาต