Login
Back to Blog
Text-Embedding-3-Small API Handleiding - OpenAI Embedding Model Gids

Text-Embedding-3-Small API Handleiding - OpenAI Embedding Model Gids

C
Crazyrouter Team
January 26, 2026
10 viewsNederlandsTutorial
Share:

Ben je een semantische zoekmachine of een RAG-systeem (Retrieval-Augmented Generation) aan het bouwen? Text-embedding-3-small is het nieuwste embeddingmodel van OpenAI dat tekst omzet in numerieke vectoren, waardoor krachtige similariteitszoekopdrachten en contentretrieval mogelijk worden.

In deze gids leer je:

  • Wat text embeddings zijn en waarom ze belangrijk zijn
  • Hoe je de text-embedding-3-small API gebruikt
  • Volledige codevoorbeelden in Python en Node.js
  • Aangepaste dimensies voor geoptimaliseerde opslag
  • Prijsvergelijking en kostenoptimalisatie

Wat is Text-Embedding-3-Small?#

Text-embedding-3-small is OpenAI's compacte embeddingmodel, uitgebracht in januari 2024. Het zet tekst om in 1536-dimensionale vectoren die semantische betekenis vastleggen en zo het volgende mogelijk maken:

  • Semantisch zoeken: Vind relevante documenten op basis van betekenis, niet alleen trefwoorden
  • RAG-systemen: Haal context op voor LLM-antwoorden
  • Similarity Matching: Vergelijk tekstsimilariteit voor aanbevelingen
  • Clustering: Groepeer vergelijkbare documenten
  • Classificatie: Categoriseer tekst op basis van inhoud

Modelspecificaties#

SpecificatieWaarde
Modelnaamtext-embedding-3-small
Standaarddimensies1536
Aangepaste dimensies256, 512, 1024, 1536
Max input tokens8,191
OutputGenormaliseerde vector

Snelstart#

Vereisten#

  1. Meld je aan bij Crazyrouter
  2. Haal je API-sleutel op uit het dashboard
  3. Python 3.8+ of Node.js 16+

Python Voorbeeld#

python
from openai import OpenAI

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

# Genereer een embedding voor één tekst
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 Voorbeeld#

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 Voorbeeld#

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#

Verwerk meerdere teksten in één API-call voor betere efficiëntie:

python
from openai import OpenAI

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

# Batch embedding - meerdere teksten tegelijk
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
)

# Toegang tot elke 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

Aangepaste Dimensies#

Verminder opslagkosten door kleinere dimensies te gebruiken. Het model ondersteunt dimensiereductie met behoud van kwaliteit:

python
# Gebruik 512 dimensies in plaats van 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

Dimensievergelijking#

DimensiesOpslag (per vector)Use Case
2561 KBMobiele apps, beperkte opslag
5122 KBGebalanceerde performance
10244 KBHoge nauwkeurigheid nodig
15366 KBMaximale nauwkeurigheid

Een Semantisch Zoeksysteem Bouwen#

Hier is een volledig voorbeeld van het bouwen van een semantisch zoeksysteem:

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))

# Documentdatabase
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"
]

# Vooraf embeddings berekenen voor alle documenten
doc_embeddings = [get_embedding(doc) for doc in documents]

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

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

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

    return results

# Voorbeeldzoekopdracht
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

Integratie met Vector Databases#

Pinecone Integratie#

python
import pinecone
from openai import OpenAI

# Clients initialiseren
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 Integratie#

python
import chromadb
from openai import OpenAI

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

# ChromaDB initialiseren
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]

# Documenten toevoegen
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
)

Beschikbare Embeddingmodellen#

Crazyrouter biedt toegang tot meerdere OpenAI embeddingmodellen:

ModelDimensiesPrijsratioBeste voor
text-embedding-3-small15360.01Algemeen gebruik, beste prijs-kwaliteit
text-embedding-3-large30720.065Hoge precisiebehoeften
text-embedding-ada-00215360.05Legacy-compatibiliteit

Prijsvergelijking#

ProviderModelPrijs 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

Prijsdisclaimer: De getoonde prijzen zijn ter demonstratie en kunnen wijzigen. De daadwerkelijke facturatie is gebaseerd op realtime prijzen op het moment van de aanvraag.

Voorbeeld kostenbesparing:

Voor een RAG-systeem dat 10M tokens/maand verwerkt:

  • OpenAI Official: $200/maand
  • Crazyrouter: $20/maand
  • Besparing: 90%

Best Practices#

1. Batch je requests#

python
# Goed - één API-call voor meerdere teksten
response = client.embeddings.create(
    model="text-embedding-3-small",
    input=["text1", "text2", "text3"]  # Up to 2048 texts
)

# Slecht - meerdere 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):
    # Maak 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. Gebruik Passende Dimensies#

  • 256 dimensies: Mobiele apps, IoT-devices
  • 512 dimensies: Webapplicaties met opslagbeperkingen
  • 1024 dimensies: Standaardapplicaties
  • 1536 dimensies: Maximale nauwkeurigheidsvereisten

Veelgestelde Vragen#

Wat is het verschil tussen text-embedding-3-small en text-embedding-3-large?#

Text-embedding-3-small produceert 1536-dimensionale vectoren en is geoptimaliseerd voor kostenefficiëntie. Text-embedding-3-large produceert 3072-dimensionale vectoren met hogere nauwkeurigheid, maar tegen 6,5x de kosten. Voor de meeste toepassingen levert text-embedding-3-small uitstekende resultaten.

Kan ik de dimensies verminderen nadat embeddings zijn gegenereerd?#

Ja, je kunt de dimensions parameter gebruiken om direct kleinere vectoren te genereren. Dit is efficiënter dan eerst volledige vectoren genereren en ze daarna af te kappen.

Hoeveel teksten kan ik in één request embedden?#

Je kunt tot 2048 teksten in één enkele API-aanvraag embedden. Voor grote datasets kun je je verzoeken in batches van 2048 opdelen.

Zijn de embeddings genormaliseerd?#

Ja, text-embedding-3-small retourneert genormaliseerde vectoren (unit length), zodat je de dot product kunt gebruiken in plaats van cosine similarity voor snellere berekeningen.

Aan de Slag#

  1. Meld je aan bij Crazyrouter
  2. Haal je API-sleutel op uit het dashboard
  3. Installeer de SDK: pip install openai of npm install openai
  4. Start met embedden met de codevoorbeelden hierboven

Gerelateerde artikelen:

Voor vragen, neem contact op met support@crazyrouter.com

Related Articles