Proyek ini menyediakan aplikasi web sederhana yang memungkinkan pengguna untuk mengunggah dokumen PDF, menghasilkan embeddings vektor dari kontennya, dan kemudian mencari informasi dalam dokumen menggunakan kueri teks. Model embedding dan bahasa Openai digunakan untuk membuat embeddings vektor dan pengambilan informasi.
Dokumen PDF Konsumsi : Pengguna dapat mengunggah dokumen PDF melalui antarmuka web untuk pengambilan informasi.
Hasilkan embeddings vektor : Konten teks diekstraksi dari PDF dan dibagi menjadi potongan -potongan yang lebih kecil menggunakan langchain. Embeddings dihasilkan untuk setiap potongan menggunakan model embedding teks OpenAI (misalnya, teks-embedding-002).
Penyimpanan Database Vektor : Simpan embeddings vektor yang dihasilkan dalam database vektor seperti Pinecone untuk pencarian kesamaan.
Penyempurnaan kueri pengguna : Kueri pengguna disempurnakan menggunakan OpenAi's Chat Completion API untuk meningkatkan akurasi pencarian.
Cari informasi : Pengguna dapat memasukkan kueri teks untuk mencari informasi dalam dokumen yang diunggah. Sistem mengambil potongan teks yang relevan berdasarkan kesamaan vektornya dengan embedding kueri.
Hasilkan respons : Berdasarkan potongan teks yang diambil, konteks (kueri dan respons sebelumnya), dan kueri pengguna, respons dihasilkan menggunakan model OpenAI (GPT-4O, GPT-4, atau GPT-3.5-Turbo). Pengguna dapat memilih model OpenAI melalui antarmuka web. Pilihan model dapat mempengaruhi gaya respons, detail, dan akurasi.
File persyaratan.txt mencantumkan paket Python yang diperlukan dan versinya yang diperlukan untuk menjalankan aplikasi. Berikut ini rincian setiap paket:
Flask : Kerangka kerja web Python yang ringan untuk membangun aplikasi web.
Pinecone-Client : Perpustakaan klien Python resmi untuk berinteraksi dengan Pinecone, database vektor yang digunakan dalam aplikasi Anda.
OpenAI : Perpustakaan Klien Python resmi untuk API OpenAI, yang digunakan untuk menghasilkan embeddings teks dan berinteraksi dengan model bahasa Openai.
PYPDF2 : Perpustakaan Pure-Python untuk mengekstraksi teks dari file PDF.
Langchain : Kerangka kerja untuk membangun aplikasi dengan model bahasa besar, digunakan dalam aplikasi Anda untuk pemisahan teks dan chunking.
Numpy : Paket untuk komputasi ilmiah di Python, digunakan untuk bekerja dengan array dan vektor multidimensi.
Untuk menginstal ketergantungan ini, Anda dapat membuat lingkungan virtual Python baru dan menjalankan perintah berikut:
Pip instal -r persyaratan.txt
Untuk berintegrasi dengan OpenAi dan Pinecone, Anda perlu mendapatkan dan mengonfigurasi informasi API, host (Pinecone) masing -masing untuk platform ini. Atur tombol API OpenAi dan Pinecone Anda, dan host Pinecone sebagai variabel lingkungan di Linux. Gunakan perintah Linux berikut untuk mengekspor variabel -variabel ini:
Ekspor openai_api_key = 'Anda-openai-api-key'
Ekspor Pinecone_API_Key = 'YourCone-APi-Key'
Ekspor pinecone_host = 'pinecone-host'
Pastikan Anda memiliki akun OpenAI dengan kunci API yang valid. Anda dapat membuat atau mendapatkan kunci API Anda dari platform OpenAI (https://platform.openai.com/) dan mengelolanya (https://platform.openai.com/organization/api-keys). Selain itu, pastikan bahwa akun Anda memiliki kuota penggunaan yang cukup, karena contoh ini memerlukan akun Openai berbayar.
Pinecone Environment (Pinecone Free Account Digunakan https://www.pinecone.io/): 1) Indeks Pinecone digunakan 2) Dimensi: 1536 3) Jenis Host: Serverless.
Rilis Centos Linux 8.5.2111 digunakan sebagai OS Linux. Cloud Linux VM dengan IP publik (opsional) telah diuji untuk antarmuka web. IP lokal dapat digunakan juga. Buat lingkungan virtual Python (opsional tetapi direkomendasikan) untuk mengisolasi dependensi proyek.
Aplikasi ini menyediakan antarmuka web yang dibangun dengan Flask, kerangka kerja web Python. Pengguna dapat mengunggah dokumen PDF, memasukkan kueri, memilih model Bahasa OpenAI untuk digunakan (GPT-3.5-Turbo, GPT-4, atau GPT-4O), dan menerima tanggapan terperinci berdasarkan informasi yang diekstraksi dari dokumen PDF yang diunggah.
Menelan dokumen PDF dan membuat embeddings vektor
Aplikasi ini menyediakan antarmuka web di mana pengguna dapat mengunggah dokumen PDF. Setelah mengunggah file PDF, konten teks diekstraksi dari dokumen dan dibagi menjadi potongan -potongan yang lebih kecil menggunakan RecursivecharactertextSplitter dari pustaka Langchain. Proses pemisahan ini memastikan bahwa teks dibagi menjadi potongan -potongan yang dapat dikelola sambil mempertahankan konteks.
Selanjutnya, embeddings vektor dihasilkan untuk setiap potongan teks menggunakan model openai-embedding-002. Embeddings ini adalah vektor dimensi tinggi yang menangkap makna semantik dari teks, memungkinkan pencarian kesamaan yang efisien.
Menyimpan embeddings vektor di pinecone
Emtor yang dihasilkan embeddings, bersama dengan potongan teks dan nomor halaman yang sesuai, disimpan dalam database vektor Pinecone. Pinecone adalah basis data vektor yang dapat diskalakan dan efisien yang dirancang untuk menyimpan dan meminta vektor dimensi tinggi.
Pemrosesan permintaan
Ketika pengguna mengirimkan kueri melalui antarmuka web, aplikasi memprosesnya dalam langkah -langkah berikut:
Penyempurnaan kueri:
Kueri pengguna dikirim ke model bahasa Openai (misalnya, GPT-3.5-Turbo, GPT-4, atau GPT-4O) untuk memperbaiki dan meningkatkan kueri untuk akurasi pencarian yang lebih baik.
Menanamkan generasi untuk kueri
Kueri yang disempurnakan diubah menjadi embedding vektor menggunakan model openai-embedding-002.
Pencarian Kesamaan:
Embedding kueri digunakan untuk mencari database vektor Pinecone untuk potongan teks yang paling mirip semantik berdasarkan kesamaan vektor.
Catatan : Untuk menanyakan indeks Pinecone dan mengambil hasil teratas, kode berikut digunakan (app.py)
#Adjust dan coba nilai top_k berdasarkan kasus penggunaan Anda
hasil = pinecone_index.query (vector = padded_query_vector.tolist (), top_k = 1, include_metadata = true)
Parameter Top_K menentukan jumlah hasil teratas untuk kembali dari kueri. Menyesuaikan nilai top_k dapat memengaruhi kualitas respons kueri. Nilai top_k yang lebih tinggi dapat memberikan hasil yang lebih komprehensif tetapi juga dapat memperkenalkan data yang kurang relevan. Sebaliknya, nilai top_k yang lebih rendah dapat menghasilkan hasil yang lebih tepat tetapi lebih sedikit. Penting untuk bereksperimen dengan nilai top_k yang berbeda untuk menemukan keseimbangan optimal untuk kasus penggunaan spesifik Anda. Selain itu, perhatikan bahwa meningkatkan nilai top_k juga akan memengaruhi biaya, terutama saat menggunakan model OpenAI berbayar untuk memproses hasil. Nilai top_k yang lebih tinggi menghasilkan lebih banyak data yang dikirim dan diproses oleh model, yang dapat menyebabkan peningkatan biaya penggunaan.
Catatan : Parameter SCORE_THRESHOLD menentukan skor relevansi minimum yang diperlukan untuk hasil yang dipertimbangkan yang dapat memengaruhi kualitas respons kueri. Jadi, sesuaikan nilai ambang batas berdasarkan kasus penggunaan dan eksperimen Anda (app.py).
#Daya nilai ambang batas berdasarkan kasus penggunaan Anda
score_threshold = 0,65
Generasi Tanggapan:
Potongan teks yang relevan yang diambil dari database dikombinasikan dengan konteks sebelumnya (jika ada) dan permintaan pengguna asli. Informasi ini kemudian dikirim ke model bahasa Openai (model yang sama yang digunakan untuk penyempurnaan kueri) untuk menghasilkan respons yang komprehensif dan relevan secara kontekstual.
Tanggapan sadar konteks:
Aplikasi ini mempertahankan konteks kueri dan tanggapan sebelumnya. Konteks ini diteruskan ke model bahasa Openai selama langkah pembuatan respons, memastikan bahwa respons yang dihasilkan memperhitungkan sejarah percakapan dan memberikan informasi yang akurat dan relevan secara kontekstual.
Untuk menjalankan aplikasi, ikuti langkah -langkah ini:
Aktifkan Lingkungan Virtual Python Anda (Opsional): (VENV) [Pengguna@Host Project_Directory]#
Jalankan App.py Script: python app.py
Aplikasi akan mulai berjalan pada port 5000, dan Anda mungkin melihat output serupa seperti berikut:
Pastikan aplikasi secara aktif mendengarkan koneksi yang masuk di port 5000:
netstat -aultpn | grep -i 5000 TCP 0 0 0.0.0.0:5000 0.0.0.0:* Dengarkan 525661/Python
http://127.0.0.1:5000/ (untuk akses lokal)
http: // vm IP publik: 5000/(untuk akses jarak jauh melalui internet)
Catatan : Jika Anda berencana untuk mengakses aplikasi melalui IP publik, pastikan untuk mengizinkan lalu lintas yang masuk di port 5000 melalui firewall VM. Ini akan memastikan bahwa komunikasi melalui IP publik diizinkan, dan Anda dapat mengakses antarmuka web dari jarak jauh.
Juga, pastikan folder pada mesin Linux Anda, yang akan berisi file PDF yang diunggah, tidak berisi file PDF dengan nama yang sama. Jika file sudah ada, itu akan ditimpa.
Pilih file PDF dan unggah menggunakan tombol 'Unggah'.
Klik pada "File Proses" (pada tahap ini, Vector Embeddings akan dibuat dan disimpan dalam database Pinecone).
Masukkan pertanyaan pencarian Anda. Pilih Model Bahasa OpenAI dari menu drop -down.
Periksa respons kueri. Kirimkan pertanyaan selanjutnya.
Setelah selesai, klik 'Sesi Akhir' (itu akan memicu pembersihan - penghapusan file yang diunggah dan embeddings vektor dalam database)
Pada macine linux, tekan Ctrl+C untuk menutup aplikasi (app.py).