Vector Database untuk Pemula

Belakangan ini hampir semua fitur AI yang saya bangun — mulai dari asisten pencarian dokumen sampai fitur "cari yang mirip" — ujung-ujungnya menyentuh satu konsep yang sama: vector database. Awalnya istilah ini terasa menakutkan karena dibungkus kata "embedding", "dimensi tinggi", dan "cosine similarity" yang kedengarannya butuh latar belakang matematika berat. Padahal begitu dipahami intuisinya, konsepnya sederhana dan sangat praktis dipakai sehari-hari, terutama kalau Anda sedang bereksperimen dengan LLM atau fitur pencarian semantik.

Tulisan ini saya buat untuk developer yang penasaran apa itu vector database, tanpa perlu paham aljabar linear dulu.

Apa itu embedding, sebenarnya

Komputer tidak bisa "mengerti" makna kata atau kalimat secara langsung — yang bisa diolahnya hanya angka. Embedding adalah cara mengubah teks (atau gambar, audio, dll) menjadi sederet angka yang merepresentasikan maknanya. Anda bisa bayangkan setiap teks diubah menjadi sebuah titik koordinat di ruang yang punya ratusan atau ribuan "sumbu" — bukan cuma x dan y seperti peta biasa.

Yang membuat ini berguna: teks-teks dengan makna mirip akan menghasilkan titik yang berdekatan di ruang itu, sementara teks yang maknanya jauh berbeda akan menghasilkan titik yang berjauhan. Model embedding-lah yang bertugas mengubah teks menjadi koordinat ini — Anda tinggal memanggilnya seperti API biasa:

embedding = model.embed("cara reset password akun")
# hasilnya: [0.021, -0.183, 0.094, ...]  -> ratusan angka

Anda tidak perlu tahu apa arti tiap angka itu satu per satu. Yang penting: dua kalimat dengan makna serupa akan menghasilkan vektor yang "dekat" satu sama lain, meskipun kata-katanya berbeda persis.

Kenapa pencarian teks biasa tidak cukup

Pencarian berbasis kata kunci (seperti LIKE '%kata%' di SQL) hanya cocok kalau kata yang dicari persis muncul di teksnya. Masalahnya, pengguna sering mencari dengan kalimat berbeda tapi maksud sama — misalnya "lupa sandi" versus "reset password". Secara kata, dua frasa itu tidak mirip sama sekali, tapi secara makna, mirip.

Di sinilah pencarian kemiripan (similarity search) berperan. Alih-alih mencocokkan teks, sistem mengubah query pengguna menjadi vektor embedding, lalu mencari vektor-vektor lain di database yang paling "dekat" dengannya. Kedekatan ini biasanya dihitung dengan ukuran seperti cosine similarity — cukup dipahami sebagai "seberapa mirip arah dua vektor ini", tanpa perlu menghitungnya manual karena library dan database sudah menyediakannya.

Kenapa butuh database khusus untuk ini

Secara teori, Anda bisa menyimpan semua embedding di kolom biasa lalu menghitung kemiripan satu-satu saat query datang. Untuk ratusan baris data ini masih bisa jalan. Tapi begitu jumlah datanya besar — misalnya ribuan atau jutaan dokumen sebagai ilustrasi — menghitung kemiripan terhadap semua baris satu per satu jadi lambat.

Vector database dirancang khusus untuk masalah ini. Ia membangun struktur indeks (salah satu yang populer disebut Approximate Nearest Neighbor, atau ANN) yang memungkinkan pencarian "vektor terdekat" berjalan jauh lebih cepat, dengan trade-off hasilnya "hampir pasti" paling mirip, bukan dijamin 100% paling mirip — trade-off yang biasanya sangat sepadan untuk kebutuhan pencarian semantik.

Beberapa opsi yang umum dipakai: database vector khusus (seperti Qdrant, Milvus, Weaviate), atau ekstensi vector di database yang sudah Anda pakai (seperti pgvector di PostgreSQL). Kalau stack Anda sudah pakai PostgreSQL, menambahkan ekstensi vector sering jadi jalan paling praktis karena tidak perlu infrastruktur baru:

SELECT id, content
FROM documents
ORDER BY embedding <-> query_embedding
LIMIT 5;

Query di atas mencari lima dokumen dengan vektor embedding paling dekat dengan vektor pertanyaan pengguna — inilah dasar dari fitur pencarian semantik maupun Retrieval-Augmented Generation (RAG), di mana LLM diberi konteks dokumen relevan sebelum menjawab.

Takeaway

Vector database, pada intinya, hanyalah database yang dioptimalkan untuk satu pertanyaan: "vektor mana yang paling mirip dengan vektor ini?" Anda tidak perlu paham detail matematika di baliknya untuk mulai memakainya — cukup pahami bahwa embedding mengubah makna jadi koordinat, dan pencarian kemiripan mencari koordinat yang berdekatan. Kalau Anda sedang membangun fitur pencarian yang "mengerti maksud", atau menyiapkan konteks untuk LLM lewat RAG, vector database adalah fondasi yang layak dipelajari lebih jauh.