Siri dua bahagian ini meneroka menggunakan SQLite untuk pembelajaran mesin. Artikel sebelumnya membincangkan peranan SQLite yang semakin meningkat dalam aplikasi web yang siap pengeluaran. Artikel ini memberi tumpuan kepada pelaksanaan Generasi Pengambilan Pengambilan (RAG) menggunakan SQLite.
Untuk aplikasi web tersuai dengan AI generatif, lawati losangelesaiapps.com
Kod tersedia di sini .
pelaksanaan kain tradisional sering melibatkan:
Walaupun berkesan, pendekatan ini boleh menjadi terlalu kompleks, terutamanya untuk pemula. Artikel ini menunjukkan kaedah yang lebih mudah menggunakan SQLite dengan lanjutan sqlite-vec
dan API OpenAI. Bahagian 1 siri ini memberikan gambaran terperinci tentang keupayaan SQLite. Untuk artikel ini, ia cukup untuk memahami kesederhanaan SQLite sebagai pangkalan data satu fail.
Pendekatan ini menghapuskan keperluan untuk pangkalan data vektor awan dan rangka kerja yang besar.
sqlite-vec: memperluaskan kuasa sqlite
Kekuatan SQLite terletak pada kelanjutannya. Sambungan, sama dengan perpustakaan Python, tambah fungsi yang ditulis dalam C. Contoh utama ialah sambungan carian teks penuh (FTS). sqlite-vec
Menambah keupayaan carian vektor, membolehkan pemahaman semantik di luar padanan kata kunci. Mencari "kuda" mungkin kembali "ekuestrian" atau "kuda."
sqlite-vec
menggunakan jadual maya, menawarkan:
jadual maya dibuat menggunakan:
CREATE VIRTUAL TABLE my_table USING my_extension_module();
my_extension_module()
Menentukan modul (di sini, vec0
dari sqlite-vec
).
Walkthrough kod
Kod ( pautan repo ) menggunakan .txt
fail sebagai data sampel (kebanyakannya berkaitan fizik). my_docs.db
adalah fail pangkalan data SQLite.
Pemasangan: requirements.txt
menyenaraikan perpustakaan yang diperlukan (sqlite-vec
, openai
, python-dotenv
). Buat persekitaran maya dan jalankan pip install -r requirements.txt
.
Openai API Key: Dapatkan Kunci API Terbuka.
Memuatkan pelanjutan: kod python memuatkan lanjutan sqlite-vec
dan mencipta jadual maya:
CREATE VIRTUAL TABLE my_table USING my_extension_module();
The documents
Jadual Kedai Embeddings (embedding
), Filenames (file_name
), dan Kandungan (content
).
menandakan bidang tambahan.
.txt
db.enable_load_extension(True) sqlite_vec.load(db) db.enable_load_extension(False) db.execute(''' CREATE VIRTUAL TABLE documents USING vec0( embedding float[1536], +file_name TEXT, +content TEXT ) ''')
# ... (OpenAI embedding function) ... for file_name in os.listdir("data"): # ... (Open file, get content, get embedding) ... db.execute( 'INSERT INTO documents (embedding, file_name, content) VALUES (?, ?, ?)', (serialize_float32(embedding), file_name, content) ) db.commit()
Kesimpulan
Memudahkan kain dengan ketara. Ia menghapuskan keperluan untuk kerangka kerja kompleks dan perkhidmatan awan, menjadikannya kos efektif dan mudah untuk diulangi. Walaupun skala mungkin akhirnya memerlukan pangkalan data yang lebih mantap, sqlite-vec
menawarkan penyelesaian yang menarik untuk projek yang lebih kecil. Pelanjutan ini menyokong pelbagai bahasa pengaturcaraan. sqlite-vec
Atas ialah kandungan terperinci Pengambilan semula Generasi Tambahan di SQLite. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!