LanceDB: Database Vektor Serverless untuk Aplikasi AI Multimodal
Database vektor telah menjadi komponen fundamental dalam aplikasi AI modern, mulai dari pencarian semantik hingga Retrieval-Augmented Generation (RAG). Namun, banyak solusi database vektor memerlukan infrastruktur server yang kompleks dan mahal untuk di-maintain. LanceDB hadir sebagai alternatif yang ringan, serverless, dan mendukung pencarian multimodal.
LanceDB adalah database vektor open-source yang berjalan secara embedded, artinya tidak memerlukan server terpisah. Dibangun di atas format data Lance yang dioptimalkan untuk operasi vektor, LanceDB menawarkan performa tinggi dengan footprint yang minimal. Yang membuatnya istimewa adalah dukungan native untuk data multimodal, termasuk teks, gambar, audio, dan video.
Dalam tutorial ini, kita akan mempelajari cara menggunakan LanceDB mulai dari instalasi, operasi dasar, hingga membangun mesin pencari multimodal yang lengkap.
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Python 3.9 atau lebih baru
- pip package manager
- Pemahaman dasar tentang Python dan konsep embedding vektor
- (Opsional) OpenAI API key untuk embedding functions
Instalasi
Instalasi Dasar
pip install lancedb
Instalasi dengan Embedding Functions
pip install lancedb sentence-transformers
Instalasi untuk Pencarian Multimodal
pip install lancedb open-clip-torch Pillow
Verifikasi Instalasi
import lancedb
print(f"LanceDB version: {lancedb.version}")
Membuat Database dan Tabel
LanceDB menggunakan pendekatan embedded, sehingga database cukup dibuat sebagai direktori lokal.
Membuat Database
import lancedb
Buat koneksi ke database (direktori lokal)
db = lancedb.connect("./mylancedb")
print("Database berhasil dibuat!")
print(f"Lokasi: ./mylancedb")
Membuat Tabel dengan Data
import lancedb
import numpy as np
db = lancedb.connect("./mylancedb")
Buat data dengan embedding
data = [
{
"id": 1,
"text": "Python adalah bahasa pemrograman yang populer untuk AI",
"vector": np.random.randn(128).tolist(),
"category": "programming",
},
{
"id": 2,
"text": "Machine learning menggunakan data untuk membuat prediksi",
"vector": np.random.randn(128).tolist(),
"category": "ai",
},
{
"id": 3,
"text": "Deep learning adalah subset dari machine learning",
"vector": np.random.randn(128).tolist(),
"category": "ai",
},
]
Buat tabel
table = db.createtable("articles", data=data)
print(f"Tabel 'articles' dibuat dengan {len(table)} baris")
Menggunakan Pydantic Model
import lancedb
from lancedb.pydantic import LanceModel, Vector
import numpy as np
Definisikan schema menggunakan Pydantic
class Article(LanceModel):
id: int
title: str
content: str
vector: Vector(384) # Dimensi embedding
category: str
published: bool = True
db = lancedb.connect("./mylancedb")
Buat tabel dengan schema
table = db.createtable("articlesv2", schema=Article)
Tambahkan data
articles = [
Article(
id=1,
title="Pengenalan LanceDB",
content="LanceDB adalah database vektor serverless",
vector=np.random.randn(384).tolist(),
category="database",
),
Article(
id=2,
title="Tutorial RAG",
content="RAG menggabungkan retrieval dengan generation",
vector=np.random.randn(384).tolist(),
category="ai",
),
]
table.add([a.dict() for a in articles])
print(f"Ditambahkan {len(articles)} artikel")
Menambahkan Data
Menambah Data ke Tabel yang Sudah Ada
import lancedb
import numpy as np
db = lancedb.connect("./mylancedb")