45:57Chase AI
Log in to leave a comment
No posts yet
Saat membangun sistem RAG di lingkungan lokal, hambatan pertama yang akan Anda hadapi adalah kapasitas VRAM dan konflik versi yang parah antar library. Model kuantisasi 8-bit memakan sekitar 1GB VRAM per 1 miliar parameter. Mengingat penggunaan sistem oleh Windows atau macOS sendiri, Anda harus menyisakan setidaknya 20% ruang kosong. Tanpa sisa ini, Anda akan melihat performa yang menyedihkan di mana kecepatan pembuatan token merangkak pada level 2 per detik. Terutama framework lightrag-hku sering kali mengeluarkan runtime error saat bertemu dengan numpy versi 2.x terbaru.
Pertama, buka terminal dan masukkan pip install numpy==1.26.4 --force-reinstall untuk mengunci versinya. Kemudian, instal nest_asyncio dan tulis nest_asyncio.apply() di bagian paling atas kode Anda. Jika ini tidak dilakukan, loop asinkron di Jupyter Notebook akan kacau dan seluruh proses akan terhenti. Jika memori GPU di bawah 8GB, atur embedding_batch_num di bawah 10 dan llm_model_max_async sekitar 4 saat menginisialisasi LightRAG. Dengan pengaturan ini saja, Anda dapat mencegah fenomena OOM (Out Of Memory) di mana sistem mati tanpa alasan dan menghemat waktu sekitar 2 jam.
Menyimpan teks hanya sebagai bongkahan besar akan memutus konteks antar informasi. Namun, jika Anda mem-parsing struktur wikilink ([[link]]) Obsidian dengan benar, Anda dapat membuat graf pengetahuan yang cukup bagus. Kuncinya adalah membuang simbol markdown yang tidak perlu sebelum dibaca oleh LLM. Hanya dengan membersihkan simbol-simbol kotor, Anda dapat menghemat konsumsi token hingga hampir 30%.
Biasakan untuk memasukkan field seperti type dan domain pada area YAML di bagian atas saat membuat catatan. Kecepatan penyaringan pencarian akan berbeda. Gunakan pola r"\[\[(.+?)\]\]" pada modul re Python untuk mengekstrak rantai penghubung antar dokumen, lalu ubah menjadi dataset relasi dalam format JSONL. Nama file juga penting. Gunakan subjek inti dari pengetahuan sebagai judul daripada tanggal seperti '2024-04-14' agar node yang terindeks menjalankan perannya dengan baik. Data yang terhubung seperti ini memungkinkan penalaran yang melintasi konsep demi konsep, melampaui pencarian sederhana.
Hal yang paling mubazir saat menjalankan LLM lokal adalah menghabiskan waktu untuk menghitung ulang embedding yang sudah pernah dihitung. Cache default Python akan hilang semua saat program dimatikan. Oleh karena itu, Anda harus menggunakan DiskCache berbasis SQLite untuk membuat penyimpanan fisik. Rancanglah sistem agar jika kemiripan kosinus antar pertanyaan melebihi 0.95, sistem akan langsung mengembalikan respons yang di-cache tanpa memanggil LLM. Dengan menerapkan semantic caching seperti ini, waktu respons dapat dikurangi menjadi sekitar 100ms.
Caranya sederhana. Dapatkan library dengan pip install diskcache dan buat sebuah kelas untuk menyimpan pasangan teks embedding dan vektor. Akan lebih baik jika Anda mencampurkan algoritma bobot waktu ke dalamnya.
Logikanya adalah menyusun agar catatan yang baru saja diubah muncul di bagian atas hasil pencarian. Jika TTL (Time To Live) cache embedding diatur sekitar 1 jam dan cache respons yang dihasilkan sekitar 2 jam, Anda dapat memiliki sistem respons instan untuk pertanyaan yang berulang.
Diagram arsitektur atau tangkapan layar yang ada di dalam catatan mengandung jauh lebih banyak informasi daripada teks. Melewatkan ini dalam pencarian adalah sebuah kerugian. Dengan menggunakan model CLIP, Anda dapat menempatkan gambar dan teks dalam ruang yang sama sehingga hanya dengan mengetik "diagram alur data", Anda dapat menemukan gambar yang relevan. Jika Anda tidak memiliki GPU spesifikasi tinggi, Anda dapat mengubah model CLIP-ViT-B-32 ke format OpenVINO dan menjalankannya dengan CPU.
Saat menemukan jalur gambar di file markdown, ikatlah bersama dengan sekitar 200 karakter teks di depan dan belakangnya. Kemudian, ekstrak caption gambar secara otomatis dengan VLM lokal yang ringan seperti Phi-3.5-vision. Simpan vektor caption ini dan vektor fitur gambar bersama-sama di DB vektor lokal seperti Qdrant. Melalui proses ini, gambar kompleks yang sulit dijelaskan dengan teks pun akan disertakan dalam hasil pencarian.
Melakukan pengindeksan ulang seluruh vault setiap kali satu file diubah adalah tindakan yang tidak efisien. Menggunakan library watchdog Python memungkinkan Anda mendeteksi saat file disimpan dan hanya memperbarui bagian yang berubah. Namun, pemrosesan debouncing sangat penting karena jika pengindeksan terus berjalan saat sedang menulis, CPU akan kewalahan.
Saat membuat skrip, pantau folder dengan watchdog.observers dan buat pekerjaan dimulai setelah menunggu sekitar 5 detik sejak event perubahan terjadi. Anda juga harus memasukkan proses untuk menyimpan nilai hash SHA-256 dari setiap file secara terpisah dan membandingkannya untuk melihat apakah isinya benar-benar berubah. Pilih hanya file dengan hash yang berbeda, hapus node lama, dan masukkan vektor baru. Dengan cara ini, basis pengetahuan real-time yang langsung tercermin ke sistem pencarian segera setelah catatan disimpan akan selesai. Ini berarti Anda tidak perlu lagi menekan tombol perbarui secara manual.