Sistem Perbandingan Dokumen menggunakan RAG
Sistem berbasis Retrieval Augmented Generation (RAG) untuk melakukan perbandingan kontekstual antara dua dokumen. Sistem ini menggunakan Azure OpenAI untuk pemrosesan dan penyematan bahasa, ChromaDB untuk penyimpanan vektor, FastAPI untuk backend, dan Streamlit untuk antarmuka pengguna.
Fitur
- Unggah dan proses berbagai format dokumen (PDF, DOCX, TXT)
- Perbandingan dokumen berbasis RAG dengan pencarian semantik
- Antarmuka web interaktif dengan tampilan perbandingan berdampingan
- Kueri perbandingan khusus
- Hasil perbandingan yang dapat diunduh
- Pemotongan dan pemrosesan dokumen yang efisien
- Penyimpanan vektor dengan ChromaDB
- Backend REST API dengan FastAPI
Prasyarat
- Python 3.8+
- Akses API Azure OpenAI
- Ruang penyimpanan yang cukup untuk database vektor
Instalasi
- Kloning repositori:
git clone < repository-url >
cd document-comparison-system
- Instal paket yang diperlukan:
pip install -r requirements.txt
- Buat file
.env
di root proyek dengan kredensial Azure OpenAI Anda:
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
Struktur Proyek
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
Menjalankan Aplikasi
- Mulai server backend:
- Di terminal baru, mulai frontend Streamlit:
- Buka browser Anda dan navigasikan ke
http://localhost:8501
untuk mengakses aplikasi.
Penggunaan
Unggah Dokumen:
- Gunakan widget unggah file untuk mengunggah dua dokumen sebagai perbandingan
- Format yang didukung: PDF, DOCX, TXT
- Tunggu konfirmasi pemrosesan
Bandingkan Dokumen:
- Setelah kedua dokumen diunggah, Anda dapat memulai perbandingan
- Secara opsional, masukkan kueri perbandingan khusus
- Klik "Bandingkan Dokumen" untuk menghasilkan analisis
Lihat Hasil:
- Hasil perbandingan ditampilkan dalam tiga tab:
- Perbandingan: Analisis keseluruhan
- Dokumen 1 Kutipan: Segmen yang relevan dari dokumen pertama
- Kutipan Dokumen 2: Segmen yang relevan dari dokumen kedua
- Unduh hasil lengkapnya sebagai file JSON
Mengatur ulang:
- Gunakan tombol "Reset" untuk menghapus sesi saat ini dan memulai kembali
Titik Akhir API
Backend FastAPI menyediakan titik akhir berikut:
POSTING /unggah
Unggah dan proses satu dokumen.
- Permintaan: Data formulir multi-bagian dengan file
- Respons: ID Dokumen dan pesan sukses
POSTING / bandingkan
Bandingkan dua dokumen.
- Parameter:
- doc1_id: ID dokumen pertama
- doc2_id: ID dokumen kedua
- kueri: Kueri perbandingan khusus opsional
- Tanggapan: Hasil perbandingan termasuk analisis dan kutipan yang relevan
Konfigurasi
Pengaturan konfigurasi utama di config.py
:
-
CHUNK_SIZE
: Ukuran potongan dokumen (default: 1000) -
CHUNK_OVERLAP
: Tumpang tindih antar bongkahan (default: 200) -
SUPPORTED_FILES
: Daftar jenis file yang didukung -
CHROMA_PERSIST_DIRECTORY
: Lokasi penyimpanan database vektor
Detail Teknis
Pemrosesan Dokumen
- Dokumen dipecah menjadi beberapa bagian menggunakan RecursiveCharacterTextSplitter
- Teks diproses terlebih dahulu untuk menghapus karakter khusus dan menormalkan spasi
- Setiap potongan disematkan menggunakan penyematan Azure OpenAI
- Potongan disimpan di ChromaDB dengan metadata dokumen
Implementasi RAG
- Menggunakan penelusuran kesamaan untuk menemukan bagian yang relevan dari kedua dokumen
- Menerapkan pencarian hibrid melalui kemampuan pencarian ChromaDB
- Perintah khusus untuk menghasilkan analisis komparatif
- Parameter pengambilan yang dapat dikonfigurasi
Penyimpanan Vektor
- ChromaDB digunakan untuk penyimpanan dan pengambilan vektor yang efisien
- Penyimpanan persisten memungkinkan penyimpanan dokumen yang diproses dalam cache
- Pemfilteran metadata untuk pencarian spesifik dokumen
Penanganan Kesalahan
Sistem ini mencakup penanganan kesalahan komprehensif untuk:
- Jenis file tidak didukung
- Kegagalan pemrosesan
- Kesalahan komunikasi API
- ID dokumen tidak valid
Perbaikan di Masa Depan
Potensi peningkatan:
- Dukungan untuk lebih banyak format file
- Algoritme pemeringkatan tingkat lanjut
- Perbandingan dokumen multimodal
- Otentikasi pengguna
- Sejarah perbandingan
- Strategi chunking yang lebih canggih
- Mekanisme cache tingkat lanjut
Berkontribusi
Kontribusi dipersilakan! Silakan mengirimkan permintaan penarikan.
Lisensi
Proyek ini dilisensikan di bawah Lisensi MIT - lihat file LISENSI untuk detailnya.