Vector Databases
Apa itu ini
Vector (basis data vektor) mengubah setiap teks, gambar, atau data lain menjadi daftar angka yang panjang, yang menangkap maknanya. Daftar angka itu disebut vektor berdimensi tinggi (embeddings). Saat kamu mencari sesuatu, sistem ini menemukan item yang maknanya paling dekat dengan permintaanmu (query). Bayangkan seorang pustakawan yang menyodorkan buku-buku dengan topik yang sama, meskipun bukunya memakai kata-kata yang sama sekali berbeda. Alih-alih mencocokkan kata kunci secara persis, sistem ini mengurutkan hasil berdasarkan seberapa dekat maknanya (kedekatan semantik/semantic closeness), yang diukur dengan metrik jarak seperti cosine similarity. Vector database menjadi tenaga penggerak di balik pencarian semantik (semantic search), rekomendasi, dan retrieval-augmented generation (RAG) untuk aplikasi AI.
Kelebihan
- Pencarian kemiripan (similarity search) yang cepat pada jutaan embedding lewat indeks ANN (Approximate Nearest Neighbor).
- Memungkinkan pencarian semantik dan RAG yang memahami makna, bukan sekadar kata kunci.
- Banyak pilihan: pgvector, Pinecone, Qdrant, Weaviate, Milvus, Chroma.
- Filter metadata menggabungkan pencarian semantik dengan batasan terstruktur.
- Bisa berkembang ke kumpulan data besar berkat algoritma approximate-nearest-neighbor.
Kompromi (trade-offs)
- Hasilnya bersifat perkiraan (approximate); menyetel akurasi berarti menukar recall dengan kecepatan.
- Kualitas embedding sepenuhnya bergantung pada model yang menghasilkan vektor tersebut.
- Jika kamu mengganti model, seluruh korpus harus di-embed ulang.
- Kebutuhan penyimpanan dan memori bertambah seiring jumlah dimensi dan ukuran dataset.
Kapan menggunakannya
Gunakan vector database untuk pencarian semantik, tanya-jawab dokumen, rekomendasi, deduplikasi, dan pipeline RAG yang memasok konteks relevan ke sebuah LLM (Large Language Model). Untuk skala yang tidak terlalu besar, ekstensi pgvector memungkinkanmu menyimpan vektor berdampingan dengan data relasional di PostgreSQL.
Kecocokan dengan vibe coding
Saat mengarahkan AI, jelaskan tiga hal secara eksplisit: model embedding mana yang kamu pakai (agar dimensi vektor cocok dengan indeksnya), metrik jarak yang dipakai (cosine adalah yang umum untuk teks), dan bagaimana kamu memecah (chunk) dokumen sumber sebelum di-embed. Minta AI menyimpan metadata yang berguna di samping setiap vektor supaya kamu bisa menyaring hasil (misalnya berdasarkan user_id atau doc_type), dan minta agar kode untuk embedding dan kode untuk query tetap memakai model yang sama. Tips yang bagus: minta AI membangun langkah retrieval RAG yang mengembalikan top-k potongan (chunk) beserta id sumbernya. Dengan begitu, jawaban tetap bisa dilacak, dan kamu bisa memverifikasi konteks apa yang sebenarnya dipakai model.
-- PostgreSQL with the pgvector extension
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE documents (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
content TEXT NOT NULL,
doc_type TEXT,
embedding VECTOR(1536) -- must match your embedding model
);
-- Approximate-nearest-neighbor index for cosine distance
CREATE INDEX ON documents
USING hnsw (embedding vector_cosine_ops);
-- Top-5 most similar chunks to a query embedding ($1)
SELECT id, content
FROM documents
WHERE doc_type = 'manual'
ORDER BY embedding <=> $1
LIMIT 5;