โ† Semua pembelajaran / AI Engineer Nol โ†’ Production
Fase 4 ยท Koneksi AI, Database & LLM

Embedding & representasi vektor

Sebelum bisa membangun pencarian semantik atau RAG, kamu perlu paham satu ide dasar: mengubah teks jadi deretan angka yang menangkap maknanya, bukan sekadar hurufnya.

Intisari

  • Embedding adalah representasi teks sebagai vektor (deretan angka, mis. 1536 dimensi) โ€” teks dengan makna mirip menghasilkan vektor yang berdekatan di ruang itu.
  • Ini beda fundamental dari pencarian kata kunci (LIKE '%kucing%'): embedding menangkap makna, jadi 'kucing' dan 'anak kucing lucu' bisa dianggap dekat meski tidak ada kata yang sama persis.
  • Kedekatan makna diukur pakai cosine similarity (atau jarak Euclidean) antar vektor โ€” angka mendekati 1 berarti sangat mirip, mendekati 0 berarti tidak berhubungan.
  • Embedding dihasilkan oleh model khusus (bukan model chat) lewat API โ€” satu panggilan, satu teks masuk, satu vektor keluar. Anthropic merekomendasikan Voyage AI; OpenAI, Google, dan lainnya punya model embedding sendiri.
  • Embedding adalah fondasi dari semantic search, RAG (Fase 5), dan rekomendasi berbasis kemiripan โ€” hampir semua sistem 'pencarian pintar' berbasis LLM dibangun di atas ini.

Dari teks ke angka

Komputer tidak bisa membandingkan "makna" dua kalimat secara langsung. Embedding memecahkan ini dengan mengubah teks jadi vektor โ€” deretan angka desimal (biasanya ratusan hingga ribuan dimensi) โ€” sedemikian rupa sehingga teks dengan makna serupa menghasilkan vektor yang posisinya berdekatan di ruang berdimensi itu.

from openai import OpenAI
client = OpenAI()

def embed(teks: str) -> list[float]:
    response = client.embeddings.create(model="text-embedding-3-small", input=teks)
    return response.data[0].embedding

v1 = embed("kucing yang menggemaskan")
v2 = embed("anak kucing lucu")
v3 = embed("laporan keuangan kuartal tiga")

print(len(v1))  # 1536 โ€” jumlah dimensi vektornya

Ini bukan model chat. Model embedding tidak "menjawab" apa pun โ€” satu panggilan menerima satu teks, mengembalikan satu vektor angka. Tidak ada system prompt, tidak ada percakapan. Fungsinya murni satu: mengubah teks jadi koordinat yang bisa dibandingkan secara matematis.

Mengukur kedekatan: cosine similarity

Untuk membandingkan dua vektor, ukuran paling umum adalah cosine similarity โ€” mengukur sudut antara dua vektor, menghasilkan angka antara -1 dan 1 (untuk embedding teks pada praktiknya biasanya 0 sampai 1). Semakin dekat ke 1, semakin mirip maknanya.

import numpy as np

def cosine_similarity(a: list[float], b: list[float]) -> float:
    a, b = np.array(a), np.array(b)
    return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))

print(cosine_similarity(v1, v2))  # ~0.85 โ€” sangat mirip maknanya
print(cosine_similarity(v1, v3))  # ~0.15 โ€” nyaris tidak berhubungan
Pendekatan"kucing" cocok dengan "anak kucing lucu"?Kenapa
Pencarian kata kunci (LIKE, full-text search dasar)Tidak โ€” kecuali kata "kucing" muncul persisMencocokkan string/token, bukan makna
Embedding + cosine similarityYa โ€” dianggap dekat secara maknaMenangkap kemiripan semantik, bukan kecocokan huruf

Kapan memakai embedding vs pencarian kata kunci

KebutuhanPakai
Pengguna mencari istilah/kode persis (SKU produk, nomor invoice)Pencarian kata kunci โ€” presisi, cepat, murah
Pengguna mencari dengan bahasa bebas ("cara reset password" vs dokumen berjudul "lupa kata sandi")Embedding/semantic search โ€” menangkap makna meski kata berbeda
Kedua kebutuhan sekaligusHybrid search โ€” gabungan keduanya, dibahas lagi di Fase 5

Anthropic tidak punya model embedding sendiri โ€” dokumentasi resmi mereka merekomendasikan Voyage AI. Ini contoh konkret dari materi Fase 0: satu provider tidak harus dipakai untuk semua bagian sistem. Wajar dan umum memakai Claude untuk generasi jawaban, tapi model embedding dari provider lain (Voyage, OpenAI, atau model open-weight) untuk representasi vektor.

Latihan: buat embedding untuk lima kalimat โ€” dua yang maknanya mirip, tiga yang tidak berhubungan โ€” lalu hitung cosine similarity untuk semua pasangan (10 pasangan). Urutkan hasilnya dari yang paling mirip ke paling tidak mirip, dan periksa apakah urutannya sesuai intuisimu.

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.