Login
Back to Blog
Tutorial API Text-Embedding-3-Small - Panduan Model Embedding OpenAI

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

C
Crazyrouter Team
January 26, 2026
14 viewsBahasa MelayuTutorial
Share:

Sedang membina enjin carian semantik atau sistem RAG (Retrieval-Augmented Generation)? Text-embedding-3-small ialah model embedding terbaru OpenAI yang menukar teks kepada vektor berangka, membolehkan carian persamaan dan pengambilan kandungan yang berkuasa.

Dalam panduan ini, anda akan belajar:

  • Apa itu embedding teks dan mengapa ia penting
  • Cara menggunakan API text-embedding-3-small
  • Contoh kod lengkap dalam Python dan Node.js
  • Dimensi tersuai untuk pengoptimuman storan
  • Perbandingan harga dan pengoptimuman kos

Apa itu Text-Embedding-3-Small?#

Text-embedding-3-small ialah model embedding padat OpenAI yang dikeluarkan pada Januari 2024. Ia menukar teks kepada vektor 1536 dimensi yang menangkap makna semantik, membolehkan:

  • Carian Semantik: Cari dokumen berkaitan berdasarkan makna, bukan hanya kata kunci
  • Sistem RAG: Mengambil konteks untuk respons LLM
  • Pemadanan Persamaan: Bandingkan persamaan teks untuk cadangan
  • Pengelompokan (Clustering): Kumpulkan dokumen yang serupa
  • Klasifikasi: Mengkategorikan teks berdasarkan kandungan

Spesifikasi Model#

SpesifikasiNilai
Nama Modeltext-embedding-3-small
Dimensi Lalai1536
Dimensi Tersuai256, 512, 1024, 1536
Maks Token Input8,191
OutputVektor ternormal

Mula Pantas#

Prasyarat#

  1. Daftar di Crazyrouter
  2. Dapatkan kunci API anda dari papan pemuka
  3. Python 3.8+ atau Node.js 16+

Contoh Python#

python
from openai import OpenAI

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

# Jana embedding untuk satu teks
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]}")

Contoh Node.js#

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

Contoh cURL#

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"
  }'

Respons:

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, ...]
    }
  ]
}

Embedding Berkelompok (Batch)#

Proses berbilang teks dalam satu panggilan API untuk kecekapan yang lebih baik:

python
from openai import OpenAI

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

# Embedding berkelompok - banyak teks serentak
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
)

# Akses setiap 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

Dimensi Tersuai#

Kurangkan kos storan dengan menggunakan dimensi lebih kecil. Model ini menyokong pengurangan dimensi sambil mengekalkan kualiti:

python
# Guna 512 dimensi dan bukannya 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

Perbandingan Dimensi#

DimensiStoran (per vektor)Kes Penggunaan
2561 KBAplikasi mudah alih, storan terhad
5122 KBPrestasi seimbang
10244 KBKeperluan ketepatan tinggi
15366 KBKetepatan maksimum

Membina Sistem Carian Semantik#

Berikut contoh lengkap membina sistem carian 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))

# Pangkalan data dokumen
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"
]

# Pra-kira embedding untuk semua dokumen
doc_embeddings = [get_embedding(doc) for doc in documents]

# Fungsi carian
def search(query, top_k=3):
    query_embedding = get_embedding(query)

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

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

    return results

# Contoh carian
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

Integrasi dengan Pangkalan Data Vektor#

Integrasi Pinecone#

python
import pinecone
from openai import OpenAI

# Inisialisasi klien
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

Integrasi ChromaDB#

python
import chromadb
from openai import OpenAI

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

# Inisialisasi 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]

# Tambah dokumen
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
)

Model Embedding yang Tersedia#

Crazyrouter menyediakan akses kepada pelbagai model embedding OpenAI:

ModelDimensiNisbah HargaTerbaik Untuk
text-embedding-3-small15360.01Kegunaan umum, nilai terbaik
text-embedding-3-large30720.065Keperluan ketepatan tinggi
text-embedding-ada-00215360.05Keserasian legasi

Perbandingan Harga#

PenyediaModelHarga per 1M token
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

Penafian Harga: Harga yang ditunjukkan adalah untuk demonstrasi dan mungkin berubah. Pengebilan sebenar adalah berdasarkan harga masa nyata ketika permintaan dibuat.

Contoh Penjimatan Kos:

Untuk sistem RAG yang memproses 10M token/bulan:

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

Amalan Terbaik#

1. Kelompokkan Permintaan Anda#

python
# Baik - satu panggilan API untuk banyak teks
response = client.embeddings.create(
    model="text-embedding-3-small",
    input=["text1", "text2", "text3"]  # Up to 2048 texts
)

# Tidak baik - banyak panggilan API
for text in texts:
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )

2. Cache Embedding#

python
import hashlib
import json

embedding_cache = {}

def get_embedding_cached(text):
    # Cipta kekunci cache
    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. Guna Dimensi yang Sesuai#

  • 256 dimensi: Aplikasi mudah alih, peranti IoT
  • 512 dimensi: Aplikasi web dengan kekangan storan
  • 1024 dimensi: Aplikasi standard
  • 1536 dimensi: Keperluan ketepatan maksimum

Soalan Lazim#

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

Text-embedding-3-small menghasilkan vektor 1536 dimensi dan dioptimumkan untuk kecekapan kos. Text-embedding-3-large menghasilkan vektor 3072 dimensi dengan ketepatan lebih tinggi tetapi pada kos 6.5x lebih mahal. Untuk kebanyakan aplikasi, text-embedding-3-small memberikan hasil yang sangat baik.

Bolehkah saya mengurangkan dimensi selepas menjana embedding?#

Ya, anda boleh menggunakan parameter dimensions untuk menjana vektor yang lebih kecil secara terus. Ini lebih cekap berbanding menjana vektor penuh dan memotongnya.

Berapa banyak teks yang boleh saya embed dalam satu permintaan?#

Anda boleh embed sehingga 2048 teks dalam satu permintaan API. Untuk set data besar, kelompokkan permintaan anda dalam kumpulan 2048.

Adakah embedding telah dinormalkan?#

Ya, text-embedding-3-small mengembalikan vektor ternormal (panjang unit), jadi anda boleh menggunakan hasil darab titik (dot product) sebagai ganti persamaan kosinus untuk pengiraan yang lebih pantas.

Mula Menggunakan#

  1. Daftar di Crazyrouter
  2. Dapatkan kunci API anda dari papan pemuka
  3. Pasang SDK: pip install openai atau npm install openai
  4. Mula membuat embedding dengan contoh kod di atas

Artikel Berkaitan:

Untuk sebarang pertanyaan, hubungi support@crazyrouter.com

Related Articles