Belajar AI Engineer - Embeddings & Vector DB
Episode 6 of 28

Belajar AI Engineer - Embeddings & Vector DB

Membangun fondasi knowledge system: mengubah teks menjadi embedding, menghitung kesamaan semantik, dan memakai vector database untuk pencarian cepat. Kalian menyiapkan pipeline embeddings dengan ChromaDB yang siap dipakai untuk RAG di episode 7type: text

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Di episode 5 kalian membuat model bisa "bertindak". Episode ini membangun kemampuan yang tak kalah penting: ingatan — cara memberikan model akses ke pengetahuan yang tidak ada di training-nya. Fondasinya adalah embedding dan vector database.

Mengapa episode ini penting? Karena LLM hanya tahu apa yang ada di data training. Untuk menjawab pertanyaan tentang dokumen perusahaan, produk, atau riwayat percakapan — model butuh retrieval. Dan retrieval modern dibangun di atas embedding: representasi teks sebagai vektor yang bisa dibandingkan secara matematis.

Apa Itu Embedding

Embedding adalah representasi teks sebagai deretan angka (vektor) yang menangkap makna. Kalimat yang mirip secara semantik akan punya vektor yang berdekatan, meskipun kata-katanya berbeda.

PythonBuat embedding pertama
from openai import OpenAI
 
client = OpenAI()
 
def embed(text: str) -> list[float]:
    r = client.embeddings.create(model="text-embedding-3-small", input=text)
    return r.data[0].embedding
 
vec = embed("Kucing itu sangat lucu")
print(len(vec))
print(vec[:5])

Vektor yang dihasilkan biasanya berdimensi besar (1.536 untuk model OpenAI, 384-768 untuk model lokal). Nilai vektor tidak bisa dibaca manusia — yang penting adalah jaraknya terhadap vektor lain.

Kesamaan Semantik dengan Cosine Similarity

Cara membandingkan dua embedding: hitung cosine similarity (kemiripan sudut antara dua vektor). Nilai 1 berarti sangat mirip, 0 berarti tidak terkait.

PythonBandingkan kalimat
import numpy as np
 
def cosine(a: list[float], b: list[float]) -> float:
    return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))
 
kalimat = [
    "Kucing itu sangat lucu",
    "The cat is very cute",
    "Hari ini hujan deras di Jakarta",
]
 
v = [embed(k) for k in kalimat]
print("mirip-en:", round(cosine(v[0], v[1]), 3))
print("beda:", round(cosine(v[0], v[2]), 3))

Perhatikan dua fakta penting:

  • Kalimat Indonesia dan terjemahan Inggrisnya punya kesamaan tinggi — model memahami makna, bukan sekadar kata.
  • Kalimat tentang topik berbeda punya kesamaan rendah.

Inilah kekuatan retrieval semantik: pertanyaan "produk apa yang cocok untuk kulit sensitif?" akan menemukan dokumen "handuk bayi ramah kulit" meski tidak ada kata yang sama.

Vector Database

Menghitung similarity satu per satu tidak akan skala untuk jutaan dokumen. Vector database mengindeks vektor dan melakukan pencarian tetangga terdekat (approximate nearest neighbor) secara efisien. Untuk series ini kita pakai ChromaDB (berjalan di mesin lokal tanpa server), dengan catatan bahwa pola yang sama berlaku untuk pgvector dan Qdrant di produksi.

PythonMenyimpan dokumen ke ChromaDB
import chromadb
 
client = chromadb.Client()
col = client.create_collection(
    "produk", metadata={"hnsw:space": "cosine"}
)
 
col.add(
    ids=["1", "2", "3"],
    documents=[
        "Handuk bayi berbahan katun organik, lembut untuk kulit sensitif.",
        "Susu formula tahap 1 untuk bayi 0-6 bulan.",
        "Kursi gaming ergonomis dengan sandaran lumbar.",
    ],
    metadatas=[{"kategori": "bayi"}, {"kategori": "bayi"}, {"kategori": "elektronik"}],
)

Pipeline Embeddings Lengkap

Pipeline yang akan dipakai terus-menerus:

  1. Ingest: dokumen → dipecah (chunking, episode 15) → di-embed → disimpan.
  2. Query: pertanyaan → di-embed → cari tetangga terdekat.
  3. Return: dokumen paling relevan (dengan skor) siap dikirim ke LLM.
PythonQuery pipeline embeddings
hasil = col.query(
    query_texts=["butuh produk untuk kulit bayi yang sensitif"],
    n_results=2,
    include=["documents", "metadatas", "distances"],
)
 
for doc, meta, dist in zip(
    hasil["documents"][0], hasil["metadatas"][0], hasil["distances"][0]
):
    print(f"[{dist:.3f}] {meta['kategori']} - {doc}")

Perhatikan bahwa query "kulit bayi sensitif" berhasil menemukan dokumen handuk bayi — meskipun kata "sensitif" tidak ada di dokumen. Itu karena embedding menangkap makna. Inilah yang akan menjadi jantung RAG di episode 7.

Tip

Untuk biaya rendah dan privasi, embedding bisa dijalankan lokal dengan model seperti sentence-transformers atau nomic-embed-text (via Ollama). Kualitasnya mendekati API untuk banyak kasus. Di episode 15 kita bandingkan opsi embedding untuk produksi.

Metadadata dan Filter

Vector database mendukung filter metadata — kombinasi kesamaan semantik dengan kriteria eksplisit (kategori, tanggal, author):

PythonQuery dengan filter metadata
col.query(
    query_texts=["produk bayi"],
    n_results=5,
    where={"kategori": "bayi"},
)

Filter ini penting untuk RAG skala produksi: membatasi ruang pencarian mengurangi biaya, menaikkan akurasi, dan menghindari kebocoran data antar tenant (episode 20).

Common Pitfalls

  • Model embedding tidak konsisten: vektor dari model A tidak bisa dibandingkan dengan vektor dari model B. Kunci satu model embedding untuk satu collection.
  • Normalisasi hilang: pastikan collection memakai metrik yang sama (cosine) antara waktu ingest dan query.
  • Chunk terlalu besar: chunk besar membuat retrieval kasar. Strategi chunking dibahas di episode 15.
  • Meletakkan seluruh dokumen sebagai satu vector: dokumen panjang sebaiknya dipecah, bukan satu embedding.

Penutup

Inti yang harus dibawa pulang:

  • Embedding = vektor makna; kalimat mirip punya jarak dekat, beda bahasa pun tetap cocok.
  • Cosine similarity adalah cara membandingkan vektor.
  • Vector DB (ChromaDB/pgvector/Qdrant) membuat pencarian semantik skala jutaan dokumen.
  • Pipeline: ingest → embed → query; pakai satu model embedding secara konsisten.

Di episode 7 selanjutnya kita merakit semuanya menjadi sistem knowledge pertama: Retrieval-Augmented Generation (RAG) — chunking, retrieval, rerank, grounding jawaban, dan pipeline RAG lengkap yang menjawab dari dokumen. Sampai jumpa di episode 7!

Belajar AI Engineer - Embeddings & Vector DB | Belajar AI Engineer