
Text-Embedding-3-Small API оқулығы - OpenAI Embedding моделі бойынша нұсқаулық
Семантикалық іздеу жүйесін немесе RAG (Retrieval-Augmented Generation) жүйесін құрып жатырсыз ба? Text-embedding-3-small – мәтінді сандық векторларға түрлендіретін, ұқсастық бойынша күшті іздеуді және контентті таңдауды мүмкін ететін OpenAI-дың ең жаңа embedding моделі.
Осы нұсқаулықта сіз мыналарды үйренесіз:
- Text embeddings деген не және олардың маңыздылығы
- Text-embedding-3-small API-ын қалай қолдану керек
- Python және Node.js тілдеріндегі толық код мысалдары
- Сақтауды оңтайландыру үшін custom өлшемдер
- Бағаларды салыстыру және шығындарды оңтайландыру
Text-Embedding-3-Small деген не?#
Text-embedding-3-small – 2024 жылдың қаңтарында шығарылған OpenAI-дың ықшам embedding моделі. Ол мәтінді мағыналық мәнді ұстайтын 1536 өлшемді векторларға түрлендіреді, бұл келесілерге мүмкіндік береді:
- Семантикалық іздеу: Тек кілт сөздерге емес, мағынасына қарай тиісті құжаттарды табу
- RAG жүйелері: LLM жауаптары үшін контекстті шығарып алу
- Ұқсастықты салыстыру: Ұсынымдар үшін мәтіндер арасындағы ұқсастықты салыстыру
- Кластерлеу: Ұқсас құжаттарды топтарға біріктіру
- Классификация: Мазмұнына қарай мәтінді санаттарға бөлу
Модель сипаттамалары#
| Specification | Value |
|---|---|
| Model Name | text-embedding-3-small |
| Default Dimensions | 1536 |
| Custom Dimensions | 256, 512, 1024, 1536 |
| Max Input Tokens | 8,191 |
| Output | Normalized vector |
Жылдам бастау#
Алдын ала талаптар#
- Crazyrouter сайтына тіркеліңіз
- Дашбордтан API кілтіңізді алыңыз
- Python 3.8+ немесе Node.js 16+
Python мысалы#
from openai import OpenAI
client = OpenAI(
api_key="your-crazyrouter-api-key",
base_url="https://crazyrouter.com/v1"
)
# Бір мәтін үшін embedding генерациялау
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 мысалы#
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 мысалы#
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"
}'
Жауап:
{
"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#
Бірнеше мәтінді бір API шақыруында өңдеп, өнімділікті арттырыңыз:
from openai import OpenAI
client = OpenAI(
api_key="your-crazyrouter-api-key",
base_url="https://crazyrouter.com/v1"
)
# Batch embedding - бірнеше мәтінді бірден өңдеу
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
)
# Әр 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 өлшемдер#
Сақтау шығындарын азайту үшін кіші өлшемдерді қолданыңыз. Модель өлшемді азайтуды сапаны сақтай отырып қолдайды:
# 1536 орнына 512 өлшемді қолданыңыз
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
Өлшемдерді салыстыру#
| Dimensions | Storage (per vector) | Use Case |
|---|---|---|
| 256 | 1 KB | Мобильді қосымшалар, шектеулі сақтау орны |
| 512 | 2 KB | Теңгерімді өнімділік |
| 1024 | 4 KB | Жоғары дәлдік қажет жағдайлар |
| 1536 | 6 KB | Ең жоғарғы дәлдік |
Семантикалық іздеу жүйесін құру#
Міне, семантикалық іздеу жүйесін құрудың толық мысалы:
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):
"""Бір мәтін үшін embedding алу"""
response = client.embeddings.create(
model="text-embedding-3-small",
input=text
)
return response.data[0].embedding
def cosine_similarity(a, b):
"""Екі вектор арасындағы косинустық ұқсастықты есептеу"""
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
# Құжаттар дерекқоры
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"
]
# Барлық құжаттар үшін embedding-терді алдын ала есептеу
doc_embeddings = [get_embedding(doc) for doc in documents]
# Іздеу функциясы
def search(query, top_k=3):
query_embedding = get_embedding(query)
# Ұқсастықтарды есептеу
similarities = [
cosine_similarity(query_embedding, doc_emb)
for doc_emb in doc_embeddings
]
# Ең жақсы нәтижелерді алу
results = sorted(
zip(documents, similarities),
key=lambda x: x[1],
reverse=True
)[:top_k]
return results
# Іздеудің мысалы
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
Векторлық дерекқорлармен интеграция#
Pinecone-пен интеграция#
import pinecone
from openai import OpenAI
# Клиенттерді инициализациялау
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):
"""Мәтіндерге embedding жасап, 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):
"""Сұрау embedding-імен Pinecone-де іздеу"""
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-пен интеграция#
import chromadb
from openai import OpenAI
client = OpenAI(
api_key="your-crazyrouter-api-key",
base_url="https://crazyrouter.com/v1"
)
# ChromaDB-ны инициализациялау
chroma_client = chromadb.Client()
collection = chroma_client.create_collection("documents")
def get_embeddings(texts):
"""Бірнеше мәтін үшін embedding-терді алу"""
response = client.embeddings.create(
model="text-embedding-3-small",
input=texts
)
return [data.embedding for data in response.data]
# Құжаттарды қосу
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
)
Қолжетімді Embedding модельдер#
Crazyrouter бірнеше OpenAI embedding моделдеріне қолжетімділік береді:
| Model | Dimensions | Price Ratio | Best For |
|---|---|---|---|
text-embedding-3-small | 1536 | 0.01 | Жалпы қолдану, ең тиімді баға |
text-embedding-3-large | 3072 | 0.065 | Жоғары дәлдік қажет жағдайлар |
text-embedding-ada-002 | 1536 | 0.05 | Мұра жүйелермен үйлесімділік |
Бағаларды салыстыру#
| Provider | Model | Price per 1M tokens |
|---|---|---|
| OpenAI Official | text-embedding-3-small | $0.020 |
| Crazyrouter | text-embedding-3-small | $0.002 |
| OpenAI Official | text-embedding-3-large | $0.130 |
| Crazyrouter | text-embedding-3-large | $0.013 |
Баға туралы ескерту: Көрсетілген бағалар демонстрация үшін берілген және өзгеруі мүмкін. Нақты төлем сұрау сәтіндегі нақты уақыттағы бағаларға негізделеді.
Шығынды үнемдеу мысалы:
Айына 10M токен өңдейтін RAG жүйесі үшін:
- OpenAI Official: $200/ай
- Crazyrouter: $20/ай
- Үнемдеу: 90%
Ең жақсы тәжірибелер#
1. Сұрауларды batch түрінде жіберіңіз#
# Дұрыс - бірнеше мәтін үшін бір API шақыру
response = client.embeddings.create(
model="text-embedding-3-small",
input=["text1", "text2", "text3"] # 2048 мәтінге дейін
)
# Дұрыс емес - әр мәтін үшін бөлек API шақыру
for text in texts:
response = client.embeddings.create(
model="text-embedding-3-small",
input=text
)
2. Embedding-терді кэштеңіз#
import hashlib
import json
embedding_cache = {}
def get_embedding_cached(text):
# Кэш кілтін жасау
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. Қолайлы өлшемдерді қолданыңыз#
- 256 өлшем: Мобильді қосымшалар, IoT құрылғылар
- 512 өлшем: Сақтау орны шектеулі веб-қосымшалар
- 1024 өлшем: Стандартты қосымшалар
- 1536 өлшем: Ең жоғары дәлдік талап етілетін жағдайлар
Жиі қойылатын сұрақтар#
Text-embedding-3-small мен text-embedding-3-large арасындағы айырмашылық қандай?#
Text-embedding-3-small 1536 өлшемді векторлар шығарады және шығын тиімділігі үшін оңтайланған. Text-embedding-3-large 3072 өлшемді векторлар береді, дәлдігі жоғарырақ, бірақ құны 6.5 есе қымбат. Көпшілік қолданбалар үшін text-embedding-3-small өте жақсы нәтиже береді.
Embedding-терді жасағаннан кейін өлшемді азайта аламын ба?#
Иә, dimensions параметрін қолдану арқылы бірден кіші векторларды генерациялай аласыз. Бұл толық векторларды жасап, кейін оларды қысқартқаннан гөрі тиімді.
Бір сұрауда қанша мәтінге embedding жасай аламын?#
Бір API сұрауында 2048 мәтінге дейін embedding жасай аласыз. Үлкен деректер жиынтығы үшін сұрауларды 2048 элементтен тұратын топтарға бөліңіз.
Embedding-векторлар нормалданған ба?#
Иә, text-embedding-3-small бірлік ұзындықтағы нормалданған векторларды қайтарады, сондықтан есептеуді жылдамдату үшін cosine similarity орнына жәй dot product қолдана аласыз.
Бастау#
- Тіркеліңіз: Crazyrouter
- API кілтіңізді алыңыз дашбордтан
- SDK орнатыңыз:
pip install openaiнемесеnpm install openai - Жоғарыдағы код мысалдарымен embedding жасауды бастаңыз
Қатысты мақалалар:
Сұрақтарыңыз болса, support@crazyrouter.com поштасына жазыңыз


