Langsung ke konten

Embeddings

Embedding adalah daftar angka yang merepresentasikan makna sebuah teks. Teks dengan makna serupa menghasilkan vektor yang letaknya berdekatan, dan inilah yang menjadi dasar semantic search, retrieval-augmented generation (RAG), rekomendasi, clustering, dan deduplikasi.

POST /v1/embeddings mengikuti format OpenAI, sehingga client.embeddings.create dan semua framework yang dibangun di atasnya dapat langsung digunakan tanpa perubahan.

Membuat embedding

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://api.inferray.com/v1", apiKey: process.env.INFERRAY_API_KEY });

const result = await client.embeddings.create({
  model: "text-embedding-3-small",
  input: ["How do I reset my password?", "Where can I change my login details?"],
});

const [a, b] = result.data.map((item) => item.embedding);
result = client.embeddings.create(
    model="text-embedding-3-small",
    input=["How do I reset my password?", "Where can I change my login details?"],
)
vectors = [item.embedding for item in result.data]
curl https://api.inferray.com/v1/embeddings \
  -H "Authorization: Bearer $INFERRAY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "text-embedding-3-small", "input": "The quick brown fox"}'

Parameter

ParameterFungsi
modelWajib. Model embedding, misalnya text-embedding-3-small, text-embedding-3-large, gemini-embedding-001, qwen3-embedding-8b, atau bge-m3.
inputWajib. Sebuah string, atau array string yang akan di-embed dalam satu request. Beberapa model juga menerima ID token.
dimensionsVektor yang lebih pendek, pada model yang mendukungnya. Vektor yang lebih kecil lebih murah untuk disimpan dan dicari.
encoding_formatfloat (default) atau base64, yang ukurannya lebih kecil saat dikirim.

Response

{
  "object": "list",
  "model": "text-embedding-3-small",
  "data": [
    { "object": "embedding", "index": 0, "embedding": [0.0023, -0.0094, 0.0158] },
    { "object": "embedding", "index": 1, "embedding": [0.0019, -0.0101, 0.0149] }
  ],
  "usage": { "prompt_tokens": 16, "total_tokens": 16 }
}

index sesuai dengan posisi dalam input. Embedding ditagih hanya berdasarkan input token; tidak ada output. usage juga memuat cost yang ditagih — lihat penggunaan dan biaya.

Membandingkan vektor

Cosine similarity adalah ukuran yang umum digunakan: nilai yang mendekati 1 berarti maknanya serupa.

const cosine = (a, b) => {
  let dot = 0, na = 0, nb = 0;
  for (let i = 0; i < a.length; i++) { dot += a[i] * b[i]; na += a[i] ** 2; nb += b[i] ** 2; }
  return dot / (Math.sqrt(na) * Math.sqrt(nb));
};

Tips

  • Gunakan satu model yang sama untuk dokumen maupun query Anda. Vektor dari model yang berbeda (atau dimensions yang berbeda) tidak dapat dibandingkan.
  • Gabungkan banyak teks dalam satu request alih-alih mengirimkannya satu per satu.
  • Pecah dokumen panjang menjadi bagian berisi beberapa ratus token lalu buat embedding untuk masing-masing; hasil retrieval-nya lebih baik daripada satu vektor per dokumen.
  • Untuk mengurutkan ulang hasil pencarian berdasarkan relevansi setelah vector search, tambahkan reranking.