Login
Back to Blog
Tutoriel API Text-Embedding-3-Small - Guide du Modèle d'Embedding OpenAI

Tutoriel API Text-Embedding-3-Small - Guide du Modèle d'Embedding OpenAI

C
Crazyrouter Team
January 26, 2026
17 viewsFrançaisTutorial
Share:

Vous construisez un moteur de recherche sémantique ou un système RAG (Retrieval-Augmented Generation) ? Text-embedding-3-small est le dernier modèle d'embedding d’OpenAI qui convertit le texte en vecteurs numériques, permettant une recherche par similarité et une récupération de contenu puissantes.

Dans ce guide, vous apprendrez :

  • Ce que sont les embeddings de texte et pourquoi ils sont importants
  • Comment utiliser l’API text-embedding-3-small
  • Des exemples de code complets en Python et Node.js
  • Des dimensions personnalisées pour un stockage optimisé
  • Une comparaison des prix et des stratégies de réduction des coûts

Qu'est-ce que Text-Embedding-3-Small ?#

Text-embedding-3-small est le modèle d'embedding compact d’OpenAI, publié en janvier 2024. Il convertit le texte en vecteurs de dimension 1536 qui capturent le sens sémantique, permettant :

  • Recherche sémantique : Trouver des documents pertinents selon le sens, et pas seulement les mots-clés
  • Systèmes RAG : Récupérer du contexte pour les réponses des LLM
  • Mise en correspondance par similarité : Comparer la similarité de textes pour des recommandations
  • Clustering : Regrouper des documents similaires
  • Classification : Catégoriser du texte en fonction de son contenu

Spécifications du modèle#

SpécificationValeur
Nom du modèletext-embedding-3-small
Dimensions par défaut1536
Dimensions personnalisées256, 512, 1024, 1536
Nombre maximal de tokens en entrée8,191
SortieVecteur normalisé

Démarrage rapide#

Prérequis#

  1. Inscrivez-vous sur Crazyrouter
  2. Récupérez votre clé API depuis le tableau de bord
  3. Python 3.8+ ou Node.js 16+

Exemple Python#

python
from openai import OpenAI

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

# Générer un embedding pour un seul texte
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]}")

Exemple 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

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

Réponse :

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 par lots#

Traitez plusieurs textes dans un seul appel d’API pour une meilleure efficacité :

python
from openai import OpenAI

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

# Embedding par lot - plusieurs textes en une seule fois
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
)

# Accéder à chaque 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

Dimensions personnalisées#

Réduisez les coûts de stockage en utilisant des dimensions plus petites. Le modèle prend en charge la réduction de dimension tout en maintenant la qualité :

python
# Utiliser 512 dimensions au lieu de 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

Comparaison des dimensions#

DimensionsStockage (par vecteur)Cas d’usage
2561 KBApplications mobiles, stockage limité
5122 KBPerformance équilibrée
10244 KBBesoins de haute précision
15366 KBPrécision maximale

Construire un système de recherche sémantique#

Voici un exemple complet de construction d’un système de recherche sémantique :

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

# Base de documents
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"
]

# Pré-calculer les embeddings pour tous les documents
doc_embeddings = [get_embedding(doc) for doc in documents]

# Fonction de recherche
def search(query, top_k=3):
    query_embedding = get_embedding(query)

    # Calculer les similarités
    similarities = [
        cosine_similarity(query_embedding, doc_emb)
        for doc_emb in doc_embeddings
    ]

    # Récupérer les meilleurs résultats
    results = sorted(
        zip(documents, similarities),
        key=lambda x: x[1],
        reverse=True
    )[:top_k]

    return results

# Exemple de recherche
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

Intégration avec des bases de données vectorielles#

Intégration Pinecone#

python
import pinecone
from openai import OpenAI

# Initialiser les 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

Intégration ChromaDB#

python
import chromadb
from openai import OpenAI

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

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

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

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

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

Modèles d'embedding disponibles#

Crazyrouter donne accès à plusieurs modèles d'embedding OpenAI :

ModèleDimensionsRatio de prixIdéal pour
text-embedding-3-small15360.01Usage général, meilleur rapport qualité/prix
text-embedding-3-large30720.065Besoins de haute précision
text-embedding-ada-00215360.05Compatibilité avec les systèmes existants

Comparaison des prix#

FournisseurModèlePrix par 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

Avertissement sur les prix : Les prix indiqués sont à titre d’illustration et peuvent changer. La facturation réelle est basée sur les prix en temps réel au moment de la requête.

Exemple d’économies :

Pour un système RAG traitant 10M tokens/mois :

  • OpenAI Official : $200/mois
  • Crazyrouter : $20/mois
  • Économies : 90 %

Bonnes pratiques#

1. Regroupez vos requêtes (batch)#

python
# Bon - un seul appel d’API pour plusieurs textes
response = client.embeddings.create(
    model="text-embedding-3-small",
    input=["text1", "text2", "text3"]  # Jusqu’à 2048 textes
)

# Mauvais - plusieurs appels d’API
for text in texts:
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )

2. Cachez les embeddings#

python
import hashlib
import json

embedding_cache = {}

def get_embedding_cached(text):
    # Créer une clé de 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. Utilisez des dimensions adaptées#

  • 256 dimensions : Applications mobiles, appareils IoT
  • 512 dimensions : Applications web avec contraintes de stockage
  • 1024 dimensions : Applications standard
  • 1536 dimensions : Exigences de précision maximale

Foire aux questions#

Quelle est la différence entre text-embedding-3-small et text-embedding-3-large ?#

Text-embedding-3-small produit des vecteurs de dimension 1536 et est optimisé pour la rentabilité. Text-embedding-3-large produit des vecteurs de dimension 3072 avec une meilleure précision, mais pour un coût 6,5 fois plus élevé. Pour la plupart des applications, text-embedding-3-small fournit d’excellents résultats.

Puis-je réduire les dimensions après avoir généré les embeddings ?#

Oui, vous pouvez utiliser le paramètre dimensions pour générer directement des vecteurs plus petits. C’est plus efficace que de générer des vecteurs complets puis de les tronquer.

Combien de textes puis-je embedder dans une seule requête ?#

Vous pouvez embedder jusqu’à 2048 textes dans une seule requête d’API. Pour de grands jeux de données, regroupez vos requêtes par lots de 2048.

Les embeddings sont-ils normalisés ?#

Oui, text-embedding-3-small renvoie des vecteurs normalisés (de norme 1), ce qui vous permet d’utiliser le produit scalaire au lieu de la similarité cosinus pour un calcul plus rapide.

Mise en route#

  1. Inscrivez-vous sur Crazyrouter
  2. Récupérez votre clé API depuis le tableau de bord
  3. Installez le SDK : pip install openai ou npm install openai
  4. Commencez à générer des embeddings avec les exemples de code ci-dessus

Articles connexes :

Pour toute question, contactez support@crazyrouter.com

Related Articles