1 poin oleh GN⁺ 2023-07-10 | 1 komentar | Bagikan ke WhatsApp
  • 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-002 dan 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.py untuk membuat database vektor, lalu memulai antarmuka kueri interaktif dengan python 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_KEY di file .env

1 komentar

 
GN⁺ 2023-07-10
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 diinginkan
    Kalau benar-benar butuh OpenAI, cukup sediakan lewat perubahan konfigurasi dan metode pengelolaan kunci seperti Docker secret atau rantai pass
    Default 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

    • Sulit untuk bersaing. Jika sebuah usaha kecil ingin menangani 10 ribu permintaan chatbot, pilihannya adalah membayar kurang dari 50 dolar per bulan ke OpenAI, atau mengelola GPU cloud dan mempekerjakan insinyur machine learning dengan biaya lebih dari 1000 dolar per bulan, atau menaruh 4090 lokal di bawah meja seseorang dengan biaya tetap 1500 dolar tanpa keandalan yang jelas
      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
    • Saya penasaran, selain sekadar eksperimen, pekerjaan nyata seperti apa yang benar-benar layak dilakukan dengan LLM lain
      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
    • Ini kelihatannya bukan dibuat untuk merilis produk sungguhan, melainkan untuk menambahkan satu baris di resume yang membuktikan pengalaman OpenAI
      Dugaan saya, ini akibat OpenAI tidak punya program sertifikasi sendiri
    • Bukankah tinggal memasangkan LocalAI ke https://mudler.pm/posts/smart-slackbot-for-teams/?
    • “Sampah” OpenAI yang dipakai di sini hanya untuk membuat embedding
      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

    • Jauh kalah dibanding produk OpenAI, dan saya lelah melihat orang bicara seolah model-model ini sudah benar-benar bisa saling menggantikan sepenuhnya
      Kenyataannya belum begitu
    • Saya penasaran apakah ini cukup tangguh untuk memuat semua email dan log chat lalu mengobrol dengannya
      Bisakah ia mengekstrak konteks untuk memahami pertanyaan tentang log terbaru?
    • Saya penasaran bagaimana performanya di Intel Mac. Saya memakai i9 6-core
      Saya belum bisa mendapatkan seri M, jadi sedang mempertimbangkan apakah lebih baik menjalankannya di lingkungan komputasi cloud dengan GPU
    • Akan sangat bagus kalau bisa dipakai bersama Confluence
      Tinggal menulis dokumentasi lalu cukup mengajukan pertanyaan tentang isinya
    • Klaim 100% privat agak meragukan
      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?

  • 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 OpenAIEmbeddings default dan OpenAI LLM
    Bukankah itu masing-masing text-embedding-ada-002 dan text-davinci-003?
    Saya sama sekali tidak paham peran GPT-2 di sini

    • Model embedding yang digunakan adalah embedding OpenAI API default, yaitu text-embedding-ada-002
      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

  • 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

    • Ini tidak memakai GPT-2. README-nya salah
      Yang dipakai adalah from langchain.embeddings import OpenAIEmbeddings, dan ini adalah API embedding OpenAI text-embedding-ada-002
      Satu-satunya bagian yang memakai GPT-2 adalah GPT2TokenizerFast.from_pretrained("gpt2"), dan itu dipakai sebagai fungsi panjang untuk menghitung jumlah token di utilitas RecursiveCharacterTextSplitter() milik LangChain
      Ini 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 penting
    • Model embedding yang digunakan adalah embedding API OpenAI bawaan, yaitu text-embedding-ada-002
      GPT-2 hanya dipakai untuk menghitung panjang token secara efisien selama proses tokenisasi
      README telah diperbarui agar mencerminkan informasi ini dengan akurat
    • Diasumsikan GPT-4 akan memberi jawaban yang lebih baik untuk pertanyaan dibanding GPT-2
  • Apa cuma saya yang tidak merasa perlu menelusuri seluruh data saya? Sebenarnya apa use case-nya di sini?

    • Contoh use case-nya seperti ini
      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 datanya ada, tetapi saya tidak tahu ada di mana
      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?

    • Pinecone dan Milvus bisa menjadi alternatif untuk menggunakan FAISS pada komponen penyimpanan dan pencarian vektor
      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
    • Saya sedang membuat DB vektor sederhana hanya dengan numpy: https://github.com/sdan/vlite
      Menurut saya, Milvus, Quickwit, dan Pinecone lebih cocok untuk perusahaan dan lebih sulit digunakan
    • Menurut saya qdrant lebih baik
  • Ada model embedding lokal yang lebih cepat dan lebih akurat, jadi saya tidak paham kenapa harus punya ketergantungan pada OpenAI

    • Model yang mana?
  • 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