Login
Back to Blog
Bahasa IndonesiaTutorial

Panduan API Text-Embedding-3-Small - Panduan Model Embedding OpenAI

Panduan lengkap untuk menggunakan API OpenAI text-embedding-3-small untuk pencarian semantik, sistem RAG, dan pencocokan kemiripan. Termasuk contoh Python, Node.js dan perbandingan harga.

C
Crazyrouter Team
January 26, 2026 / 369 views
Share:
Panduan API Text-Embedding-3-Small - Panduan Model Embedding OpenAI

Sedang membangun mesin pencari semantik atau sistem RAG (Retrieval-Augmented Generation)? Text-embedding-3-small adalah model embedding terbaru dari OpenAI yang mengonversi teks menjadi vektor numerik, sehingga memungkinkan pencarian kemiripan dan pengambilan konten yang sangat kuat.

Dalam panduan ini, Anda akan mempelajari:

  • Apa itu text embeddings dan mengapa penting
  • Cara menggunakan API text-embedding-3-small
  • Contoh kode lengkap dalam Python dan Node.js
  • Dimensi kustom untuk penyimpanan yang dioptimalkan
  • Perbandingan harga dan optimasi biaya

What is Text-Embedding-3-Small?#

Text-embedding-3-small adalah model embedding ringkas dari OpenAI yang dirilis pada Januari 2024. Model ini mengonversi teks menjadi vektor berdimensi 1536 yang menangkap makna semantik, sehingga memungkinkan:

  • Pencarian Semantik: Menemukan dokumen relevan berdasarkan makna, bukan hanya kata kunci
  • Sistem RAG: Mengambil konteks untuk respons LLM
  • Pencocokan Kemiripan: Membandingkan kemiripan teks untuk rekomendasi
  • Clustering: Mengelompokkan dokumen serupa
  • Klasifikasi: Mengkategorikan teks berdasarkan konten

Model Specifications#

SpecificationValue
Model Nametext-embedding-3-small
Default Dimensions1536
Custom Dimensions256, 512, 1024, 1536
Max Input Tokens8,191
OutputNormalized vector

Quick Start#

Prerequisites#

  1. Daftar di Crazyrouter
  2. Dapatkan API key dari dashboard
  3. Python 3.8+ atau Node.js 16+

Python Example#

python
from openai import OpenAI

client = OpenAI(
    api_key="your-crazyrouter-api-key",
    base_url="https://crazyrouter.com/v1"
)

# Generate embedding for a single text
response = client.embeddings.create(
    model="text-embedding-3-small",
    input="Machine learning is transforming industries worldwide."
)

embedding = response.data[0].embedding
print(f"Dimensions: {len(embedding)}")  # Output: 1536
print(f"First 5 values: {embedding[:5]}")

Node.js Example#

javascript
import OpenAI from 'openai';

const client = new OpenAI({
    apiKey: 'your-crazyrouter-api-key',
    baseURL: 'https://crazyrouter.com/v1'
});

async function getEmbedding(text) {
    const response = await client.embeddings.create({
        model: 'text-embedding-3-small',
        input: text
    });

    return response.data[0].embedding;
}

// Usage
const embedding = await getEmbedding('Machine learning is amazing');
console.log(`Dimensions: ${embedding.length}`);  // Output: 1536

cURL Example#

bash
curl -X POST https://crazyrouter.com/v1/embeddings \
  -H "Authorization: Bearer your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "text-embedding-3-small",
    "input": "Hello world"
  }'

Response:

json
{
  "object": "list",
  "model": "text-embedding-3-small",
  "usage": {
    "prompt_tokens": 2,
    "total_tokens": 2
  },
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [-0.0020785425, -0.049085874, 0.02094679, ...]
    }
  ]
}

Batch Embedding#

Proses beberapa teks dalam satu panggilan API untuk efisiensi yang lebih baik:

python
from openai import OpenAI

client = OpenAI(
    api_key="your-crazyrouter-api-key",
    base_url="https://crazyrouter.com/v1"
)

# Batch embedding - multiple texts at once
texts = [
    "Python is a programming language",
    "JavaScript runs in browsers",
    "Machine learning uses neural networks"
]

response = client.embeddings.create(
    model="text-embedding-3-small",
    input=texts
)

# Access each embedding
for i, data in enumerate(response.data):
    print(f"Text {i}: {len(data.embedding)} dimensions")

# Output:
# Text 0: 1536 dimensions
# Text 1: 1536 dimensions
# Text 2: 1536 dimensions

Custom Dimensions#

Kurangi biaya penyimpanan dengan menggunakan dimensi yang lebih kecil. Model ini mendukung pengurangan dimensi sambil mempertahankan kualitas:

python
# Use 512 dimensions instead of 1536
response = client.embeddings.create(
    model="text-embedding-3-small",
    input="Your text here",
    dimensions=512  # Options: 256, 512, 1024, 1536
)

embedding = response.data[0].embedding
print(f"Dimensions: {len(embedding)}")  # Output: 512

Dimension Comparison#

DimensionsStorage (per vector)Use Case
2561 KBAplikasi mobile, penyimpanan terbatas
5122 KBPerforma seimbang
10244 KBKebutuhan akurasi tinggi
15366 KBAkurasi maksimum

Building a Semantic Search System#

Berikut contoh lengkap membangun sistem pencarian semantik:

python
import numpy as np
from openai import OpenAI

client = OpenAI(
    api_key="your-crazyrouter-api-key",
    base_url="https://crazyrouter.com/v1"
)

def get_embedding(text):
    """Get embedding for a single text"""
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )
    return response.data[0].embedding

def cosine_similarity(a, b):
    """Calculate cosine similarity between two vectors"""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

# Document database
documents = [
    "Python is great for data science and machine learning",
    "JavaScript is essential for web development",
    "Docker containers simplify deployment",
    "Kubernetes orchestrates container workloads",
    "PostgreSQL is a powerful relational database"
]

# Pre-compute embeddings for all documents
doc_embeddings = [get_embedding(doc) for doc in documents]

# Search function
def search(query, top_k=3):
    query_embedding = get_embedding(query)

    # Calculate similarities
    similarities = [
        cosine_similarity(query_embedding, doc_emb)
        for doc_emb in doc_embeddings
    ]

    # Get top results
    results = sorted(
        zip(documents, similarities),
        key=lambda x: x[1],
        reverse=True
    )[:top_k]

    return results

# Example search
results = search("How to deploy applications?")
for doc, score in results:
    print(f"Score: {score:.4f} - {doc}")

# Output:
# Score: 0.8234 - Docker containers simplify deployment
# Score: 0.7891 - Kubernetes orchestrates container workloads
# Score: 0.6543 - PostgreSQL is a powerful relational database

Integration with Vector Databases#

Pinecone Integration#

python
import pinecone
from openai import OpenAI

# Initialize clients
client = OpenAI(
    api_key="your-crazyrouter-api-key",
    base_url="https://crazyrouter.com/v1"
)

pinecone.init(api_key="your-pinecone-key")
index = pinecone.Index("your-index")

def embed_and_upsert(texts, ids):
    """Embed texts and store in Pinecone"""
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=texts
    )

    vectors = [
        (id, data.embedding)
        for id, data in zip(ids, response.data)
    ]

    index.upsert(vectors=vectors)

def search_pinecone(query, top_k=5):
    """Search Pinecone with query embedding"""
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=query
    )

    results = index.query(
        vector=response.data[0].embedding,
        top_k=top_k
    )

    return results

ChromaDB Integration#

python
import chromadb
from openai import OpenAI

client = OpenAI(
    api_key="your-crazyrouter-api-key",
    base_url="https://crazyrouter.com/v1"
)

# Initialize ChromaDB
chroma_client = chromadb.Client()
collection = chroma_client.create_collection("documents")

def get_embeddings(texts):
    """Get embeddings for multiple texts"""
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=texts
    )
    return [data.embedding for data in response.data]

# Add documents
documents = ["doc1 content", "doc2 content", "doc3 content"]
embeddings = get_embeddings(documents)

collection.add(
    embeddings=embeddings,
    documents=documents,
    ids=["doc1", "doc2", "doc3"]
)

# Query
query_embedding = get_embeddings(["search query"])[0]
results = collection.query(
    query_embeddings=[query_embedding],
    n_results=3
)

Available Embedding Models#

Crazyrouter menyediakan akses ke beberapa model embedding OpenAI:

ModelDimensionsPrice RatioBest For
text-embedding-3-small15360.01Penggunaan umum, nilai terbaik
text-embedding-3-large30720.065Kebutuhan presisi tinggi
text-embedding-ada-00215360.05Kompatibilitas legacy

Pricing Comparison#

ProviderModelPrice per 1M tokens
OpenAI Officialtext-embedding-3-small$0.020
Crazyroutertext-embedding-3-small$0.002
OpenAI Officialtext-embedding-3-large$0.130
Crazyroutertext-embedding-3-large$0.013

Catatan harga: Harga yang ditampilkan hanya untuk demonstrasi dan dapat berubah. Penagihan aktual didasarkan pada harga real-time saat permintaan dilakukan.

Contoh Penghematan Biaya:

Untuk sistem RAG yang memproses 10M token/bulan:

  • OpenAI Official: $200/bulan
  • Crazyrouter: $20/bulan
  • Penghematan: 90%

Best Practices#

1. Batch Your Requests#

python
# Good - single API call for multiple texts
response = client.embeddings.create(
    model="text-embedding-3-small",
    input=["text1", "text2", "text3"]  # Up to 2048 texts
)

# Bad - multiple API calls
for text in texts:
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )

2. Cache Embeddings#

python
import hashlib
import json

embedding_cache = {}

def get_embedding_cached(text):
    # Create cache key
    cache_key = hashlib.md5(text.encode()).hexdigest()

    if cache_key in embedding_cache:
        return embedding_cache[cache_key]

    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )

    embedding = response.data[0].embedding
    embedding_cache[cache_key] = embedding

    return embedding

3. Use Appropriate Dimensions#

  • 256 dimensions: Aplikasi mobile, perangkat IoT
  • 512 dimensions: Aplikasi web dengan keterbatasan penyimpanan
  • 1024 dimensions: Aplikasi standar
  • 1536 dimensions: Kebutuhan akuratan maksimum

Frequently Asked Questions#

Apa perbedaan antara text-embedding-3-small dan text-embedding-3-large?#

Text-embedding-3-small menghasilkan vektor berdimensi 1536 dan dioptimalkan untuk efisiensi biaya. Text-embedding-3-large menghasilkan vektor berdimensi 3072 dengan akurasi lebih tinggi tetapi dengan biaya 6,5x lebih mahal. Untuk sebagian besar aplikasi, text-embedding-3-small sudah memberikan hasil yang sangat baik.

Can I reduce dimensions after generating embeddings?#

Ya, Anda dapat menggunakan parameter dimensions untuk langsung menghasilkan vektor yang lebih kecil. Ini lebih efisien daripada menghasilkan vektor penuh lalu memotongnya.

Berapa banyak teks yang dapat saya ubah menjadi embedding dalam satu permintaan?#

Anda dapat melakukan embedding hingga 2048 teks dalam satu permintaan API. Untuk dataset besar, lakukan batch permintaan Anda dalam grup berisi 2048.

Are the embeddings normalized?#

Ya, text-embedding-3-small mengembalikan vektor yang ternormalisasi (panjang satu), sehingga Anda dapat menggunakan dot product sebagai pengganti cosine similarity untuk komputasi yang lebih cepat.

Getting Started#

  1. Sign up di Crazyrouter
  2. Dapatkan API key dari dashboard
  3. Instal SDK: pip install openai atau npm install openai
  4. Mulai melakukan embedding dengan contoh kode di atas

Related Articles:

Untuk pertanyaan, hubungi support@crazyrouter.com

Implementation Guides

Topics

Tutorial

Related Posts

Panduan Instalasi dan Penggunaan Claude Code - Setup Asisten Pemrograman AITutorial

Panduan Instalasi dan Penggunaan Claude Code - Setup Asisten Pemrograman AI

Panduan lengkap untuk menginstal dan mengonfigurasi Claude Code, asisten pemrograman AI. Pelajari cara menyiapkan Node.js, mengonfigurasi token API, dan mulai ngoding dengan AI di terminal Anda.

Jan 24
Doubao Seed Code: Model Generasi Kode AI ByteDance - Panduan Lengkap APITutorial

Doubao Seed Code: Model Generasi Kode AI ByteDance - Panduan Lengkap API

Pelajari cara menggunakan Doubao Seed Code, model generasi kode AI yang kuat dari ByteDance. Tutorial API lengkap dengan contoh Python, Node.

Jan 26
Cara Mengakses GPT-5 dan GPT-5.2 via API - Panduan Lengkap untuk DeveloperTutorial

Cara Mengakses GPT-5 dan GPT-5.2 via API - Panduan Lengkap untuk Developer

Pelajari cara mengakses model terbaru OpenAI GPT-5, GPT-5.2, dan o3-pro melalui satu API terpadu. Panduan langkah demi langkah dengan contoh Python, Node.

Jan 23
text-embedding-3-small Dimensi Dijelaskan: Cara Memilih Ukuran yang Tepat untuk Kualitas dan BiayaTutorial

text-embedding-3-small Dimensi Dijelaskan: Cara Memilih Ukuran yang Tepat untuk Kualitas dan Biaya

Panduan praktis tentang dimensi text-embedding-3-small, cara memilih antara 256, 512, 1024, dan 1536 dimensi.

Mar 27
Panduan Pengguna Gemini CLI - Google AI di Terminal AndaTutorial

Panduan Pengguna Gemini CLI - Google AI di Terminal Anda

Panduan lengkap untuk menginstal dan mengonfigurasi Gemini CLI, tool AI baris perintah open-source dari Google. Pelajari cara menyiapkan proxy, menggunakan tool bawaan, dan mengotomatiskan alur kerja dengan Gemini 2.5 Pro.

Jan 24
Generator Musik AI Terbaik 2026: Perbandingan Suno vs Udio vs Stable AudioTutorial

Generator Musik AI Terbaik 2026: Perbandingan Suno vs Udio vs Stable Audio

Memilih generator musik AI yang tepat bisa membingungkan. Panduan ini membandingkan alat musik AI terbaik yang tersedia pada 2026, termasuk Suno AI, Udio

Jan 23