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
| Parameter | Fungsi |
|---|---|
model | Wajib. Model embedding, misalnya text-embedding-3-small, text-embedding-3-large, gemini-embedding-001, qwen3-embedding-8b, atau bge-m3. |
input | Wajib. Sebuah string, atau array string yang akan di-embed dalam satu request. Beberapa model juga menerima ID token. |
dimensions | Vektor yang lebih pendek, pada model yang mendukungnya. Vektor yang lebih kecil lebih murah untuk disimpan dan dicari. |
encoding_format | float (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
dimensionsyang 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.