PdfGptIndexer - Pengindeksan dan kueri dokumen PDF dengan OpenAI embeddings dan FAISS
(github.com/raghavan)- Alat untuk mengindeks dan melakukan kueri pada dokumen PDF, yang mengimplementasikan sistem RAG agar bisa berinteraksi dengan dokumen PDF menggunakan OpenAI embeddings dan FAISS
- Mengekstrak teks dari folder PDF, membaginya menjadi chunk 1000 karakter dengan overlap 200 karakter, lalu membuat embedding dengan model OpenAI
text-embedding-ada-002dan menyimpannya ke FAISS index lokal - Pada tahap kueri, alat ini memuat indeks vektor FAISS yang tersimpan, mengubah pertanyaan menjadi embedding, lalu menemukan 3 chunk dokumen teratas yang paling mirip dan menampilkan skor kemiripan serta cuplikan teks
- Pembuatan jawaban dilakukan dengan cara GPT-4 menyintesis jawaban yang konsisten berdasarkan konteks yang ditemukan
- Karena embedding disimpan secara lokal, embedding tidak perlu dibuat ulang pada setiap kueri; setelah pembuatan awal, kueri data dapat dilakukan tanpa koneksi internet ke OpenAI dan panggilan API hanya diperlukan untuk menghasilkan jawaban
- Alur eksekusi dasarnya adalah memproses PDF dengan
python indexer.pyuntuk membuat database vektor, lalu memulai antarmuka kueri interaktif denganpython chatbot.py- Folder PDF dan lokasi penyimpanan indeks dapat ditentukan melalui argumen perintah
- Pengindeks hanya perlu dijalankan ulang saat PDF baru ditambahkan ke koleksi
- Persyaratan eksekusinya adalah Python 3.8 atau lebih baru dan OpenAI API key, yang diatur melalui nilai
OPENAI_API_KEYdi file.env
1 komentar
Komentar Hacker News
Hal yang paling bikin frustrasi adalah hampir semua aplikasi yang meniru ide seperti ini wajib OpenAI
Semoga tren ini segera berhenti
Opsi yang membutuhkan OpenAI atau cloud seharusnya ditempatkan sebagai “pengaturan lanjutan yang secara teknis memungkinkan tetapi cukup merepotkan”, dan default-nya justru harus kebalikannya agar pengguna jauh lebih banyak
Menurut saya, aplikasi seperti ini sebaiknya menjadikan eksekusi sepenuhnya lokal sebagai default, lalu cukup dengan mengubah satu string di file
.toml, pengguna bisa menggantinya dengan model Hugging Face yang diinginkanKalau benar-benar butuh OpenAI, cukup sediakan lewat perubahan konfigurasi dan metode pengelolaan kunci seperti Docker secret atau rantai
passDefault harus mengutamakan lokal, memproses sebanyak mungkin secara lokal, lalu hanya mengirim sangat sedikit token dari prompt yang sudah dikumpulkan ke OpenAI saat pengguna benar-benar menginginkannya
Perusahaan yang lebih besar membutuhkan skalabilitas, dan tetap sulit menyaingi harga OpenAI
Seseorang yang berorientasi startup mungkin bisa membuat startup OpenLLaMA yang menawarkan penagihan per permintaan, fine-tuning, dan penyimpanan vektor
Fase rasa takjub itu sudah lewat, sekarang saya ingin menyelesaikan pekerjaan dengan efisien
Dari yang sudah saya uji sejauh ini, satu-satunya model yang bisa menangani pekerjaan dengan cukup stabil hanyalah GPT-4
Saya tidak tahu apakah saya yang kurang paham, atau apakah ini cuma angan-angan ala HN bahwa LLM lain jauh lebih baik dalam hal kualitas, konsistensi, dan keandalan yang dibutuhkan untuk pekerjaan nyata
Dugaan saya, ini akibat OpenAI tidak punya program sertifikasi sendiri
Saat ini, untuk proyek pribadi OpenAI menyediakan salah satu embedding terbaik dan termurah
Setelah vektor dibuat, kalau mau Anda bisa sepenuhnya lepas dari cloud
LangChain sudah mengabstraksikan titik masalah itu, jadi generator embedding juga bisa diganti kapan saja
Selebihnya sudah memakai Hugging Face, dan bisa diganti dengan model lain selain GPT-2 yang mendukung prompt
Data harus tetap privat dan tidak boleh bocor ke pihak ketiga. Gunakan saja sesuatu seperti privateGPT. Bintangnya di GitHub 32 ribu
Kalau kuncinya bukan milik saya, maka datanya juga bukan milik saya
“Berinteraksi dengan dokumen Anda secara privat dengan kekuatan GPT, 100% privat, tanpa kebocoran data”[0]
[0] https://github.com/imartinez/privateGPT
Kenyataannya belum begitu
Bisakah ia mengekstrak konteks untuk memahami pertanyaan tentang log terbaru?
Saya belum bisa mendapatkan seri M, jadi sedang mempertimbangkan apakah lebih baik menjalankannya di lingkungan komputasi cloud dengan GPU
Tinggal menulis dokumentasi lalu cukup mengajukan pertanyaan tentang isinya
Melihat tingkat paranoia yang ditunjukkan para penguasa terhadap LLM lokal, saya sama sekali tidak akan terkejut kalau telemetri Windows ternyata melaporkan apa yang orang lakukan dengan LLM lokal
Menurut saya, orang yang mengira tidak begitu terlalu naif
Jadi data pribadi saya dikirim ke OpenAI? Bukankah itu masalah serius?
Ini tampaknya tidak bijak kecuali semua informasi pribadi sensitif dihapus dari data. Apa saya melewatkan sesuatu?
Kebijakan penggunaan data: https://openai.com/policies/api-data-usage-policies
Kebijakan penggunaan data per model: https://platform.openai.com/docs/models/how-we-use-your-data
Selain sekadar memastikan apakah kunci OpenAI dibutuhkan atau tidak, adakah cara untuk mengetahui dengan lebih rinci bagaimana data pribadi digunakan?
README-nya sangat membingungkan
Tertulis memakai tokenizer GPT-2 dan menggunakan GPT-2 sebagai model embedding, tetapi kalau melihat kodenya, tampaknya yang dipakai adalah LangChain
OpenAIEmbeddingsdefault dan OpenAI LLMBukankah itu masing-masing text-embedding-ada-002 dan text-davinci-003?
Saya sama sekali tidak paham peran GPT-2 di sini
GPT-2 hanya dipakai dalam proses tokenisasi untuk menghitung panjang token secara efisien
Apakah ada perusahaan yang menyediakan ini sebagai versi ter-hosting?
Saya cukup ingin AI kecil yang bisa diberi semua data saya lalu saya tanyai
Ada juga fitur kenyamanan seperti integrasi dengan Google Drive, video YouTube, dan sebagainya
Pengguna aktif hariannya lebih dari 50 ribu orang
Saya tidak paham. GPT-2 adalah salah satu dari sedikit model terbuka OpenAI, jadi bisa langsung dijalankan secara lokal. Kenapa memakai API untuk keperluan ini?
https://github.com/openai/gpt-2
Yang dipakai adalah
from langchain.embeddings import OpenAIEmbeddings, dan ini adalah API embedding OpenAI text-embedding-ada-002Satu-satunya bagian yang memakai GPT-2 adalah
GPT2TokenizerFast.from_pretrained("gpt2"), dan itu dipakai sebagai fungsi panjang untuk menghitung jumlah token di utilitasRecursiveCharacterTextSplitter()milik LangChainIni juga agak tidak masuk akal. Saya tidak tahu kenapa tokenizer GPT-2 dipakai di sini
Cukup hitung jumlah karakter atau jumlah kata berbasis
.split()saja sudah memadai. Di sini cara menghitungnya tidak terlalu pentingGPT-2 hanya dipakai untuk menghitung panjang token secara efisien selama proses tokenisasi
README telah diperbarui agar mencerminkan informasi ini dengan akurat
Apa cuma saya yang tidak merasa perlu menelusuri seluruh data saya? Sebenarnya apa use case-nya di sini?
Di tempat kerja ada kelompok yang membahas berbagai topik investasi, dan penyelenggaranya punya jaringan bagus sehingga berusaha menghadirkan pembicara eksternal setiap minggu. Cukup edukatif
Saya punya catatan mentah dari tiap presentasi, dan tujuannya adalah menelusuri catatan itu lalu merapikan pengetahuannya menjadi semacam wiki
Sudah 3 tahun sejak saya mulai, tetapi saya belum sempat, dan kalau realistis kemungkinan besar ke depan juga tidak akan sempat
Untuk mencari informasi dari catatan itu, saya bisa memakai pencarian teks, tetapi terlalu sensitif terhadap string pencarian sehingga sering tidak menemukan yang saya inginkan
Jika informasinya tersebar di beberapa file, saya harus membuka dan menelusuri semua hasil pencarian
Dengan teknologi seperti ini, semua catatan bisa dimasukkan ke DB vektor, lalu saya bisa menanyakan apa yang dibutuhkan dalam bahasa alami
Sistem lokal akan menafsirkan pertanyaannya, menemukan dokumen yang paling relevan di DB, lalu mengirim pertanyaan dan hasil pencarian ke OpenAI untuk menafsirkan pertanyaan dan menemukan jawabannya di dalam catatan
Dulu saya pernah membuat proof of concept dengan LangChain dan itu berhasil. Ada satu momen “aha” ketika sistem menggabungkan informasi yang tersebar di dua presentasi berbeda untuk memberi jawaban
Kekhawatirannya adalah ada terlalu banyak parameter yang bisa disetel, dan saya masih belum memikirkan cara atau metrik untuk mengevaluasi performa sistemnya. Akan menyenangkan jika ada saran
Catatan ini tidak berisi informasi pribadi, jadi tidak ada masalah privasi
Saya juga ingin menyiapkan sesuatu yang serupa untuk email selama lebih dari 20 tahun, tetapi tidak saya lakukan karena masalah privasi. Selain itu saya memakai pengindeks email bernama notmuch, jadi kebutuhan akan AI juga tidak terlalu besar
Tetapi untuk catatan lain yang tidak bersifat pribadi, ini bisa menjadi penyelamat hidup jika saya berhasil membuat sistem ini bekerja cukup baik
Selama bertahun-tahun saya sudah membuat terlalu banyak catatan tentang berbagai topik, dan tidak perlu menatanya dengan rapi punya nilai yang setara dengan uang sungguhan
Biarkan saya hanya menulis catatan, lalu AI yang mencari apa yang saya butuhkan
Kadang saya tahu lokasi datanya, tetapi jumlahnya terlalu banyak, dan yang saya butuhkan hanyalah penjelasan cepat tentang sesuatu
Kadang ada banyak data dari berbagai sumber, dan yang akhirnya diinginkan adalah ringkasan tentang hal yang disetujui oleh sebagian besar atau semua sumber, atau ringkasan tentang bagaimana perbedaannya
Use case-nya banyak, dan karena kita sudah terbiasa dengan cara lama dalam menangani pekerjaan seperti ini, sering kali kegunaannya tidak datang sebagai momen “lampu menyala” sampai kita benar-benar menggali dan melihat kemungkinannya sendiri
Cakupannya cukup luas. Secara pribadi, proyek yang sedang saya kerjakan juga merupakan variasi dari ini, yaitu memasukkan catatan pribadi dan jurnal bertahun-tahun lalu mengajukan pertanyaan untuk refleksi diri dan pertumbuhan pribadi
Saya rasa ada banyak potensi di seluruh area ini
Ada yang tahu bagaimana perbandingan Milvus, Quickwit, dan Pinecone?
Saya sedang memikirkan apakah ada peluang konsultasi terkait LLM, fine-tuning/pencarian vektor, dan chatbot untuk bisnis lokal
Saya juga ingin membuat alat yang memudahkan mendapatkan inferensi yang dipersonalisasi hanya dengan drag-and-drop file
Baru-baru ini https://gpt-trainer.com/ muncul di feed LinkedIn saya, dan saya juga melihat beberapa yang lain untuk dokumen
https://www.explainpaper.com/
https://www.konjer.xyz/
Saya tidak ingin bersaing di harga
Menyajikan LLM open source lokal di 3090 juga terdengar keren, tetapi tidak akan skalabel
Pernah melihat startup fine-tuning atau konteks pencarian vektor lain?
Perbedaan embedding tampaknya akan lebih terasa dari apa yang digunakan untuk menghasilkan embedding daripada dari alternatif penyimpanan/pencarian itu sendiri
Misalnya, memakai yang ada di sini https://news.ycombinator.com/item?id=36649579 alih-alih OpenAI Embedding API
Selain performa skala besar, biaya, dan preferensi pribadi atau pengalaman developer, saya tidak terlalu terpikir perbedaan lain di antara alternatif penyimpanan/pencarian embedding
Quickwit baru pertama kali saya dengar, dan setelah melihat cepat situsnya, itu tidak tampak seperti penyimpanan vektor dan mungkin kurang relevan
Untuk alat pembuat ChatGPT kustom, lihat daftar saya: https://llm-utils.org/List+of+tools+for+making+a+%22ChatGPT+...
Untuk fine-tuning sebagai layanan, ada Lamini AI yang menargetkan perusahaan
Startup embedding lain adalah Weaviate
Menurut saya, Milvus, Quickwit, dan Pinecone lebih cocok untuk perusahaan dan lebih sulit digunakan
Ada model embedding lokal yang lebih cepat dan lebih akurat, jadi saya tidak paham kenapa harus punya ketergantungan pada OpenAI
Saya bekerja di perusahaan yang berperan sebagai lapisan keamanan antara data perusahaan yang sensitif dan LLM
Tidak masalah apakah modelnya HF, ChatGPT, atau Bard, maupun medianya berupa data percakapan, PDF, atau knowledge base seperti Notion
Kami menyembunyikan data sensitif untuk mencegah penggunaan berbahaya sekaligus melakukan pemeriksaan fakta
Jika yang Anda cari mengarah ke area seperti ini, saya bisa mengenalkan. tothepoint.tech