Login
Back to Blog
บทช่วยสอน Text-Embedding-3-Small API - คู่มือโมเดล Embedding ของ OpenAI

บทช่วยสอน Text-Embedding-3-Small API - คู่มือโมเดล Embedding ของ OpenAI

C
Crazyrouter Team
January 26, 2026
17 viewsไทยTutorial
Share:

กำลังจะสร้าง search engine แบบ semantic หรือระบบ RAG (Retrieval-Augmented Generation) อยู่ใช่ไหม? Text-embedding-3-small คือโมเดล embedding รุ่นล่าสุดของ OpenAI ที่แปลงข้อความให้เป็นเวกเตอร์ตัวเลข เพื่อให้สามารถทำ similarity search และดึงข้อมูลที่เกี่ยวข้องได้อย่างทรงพลัง

ในคู่มือนี้ คุณจะได้เรียนรู้:

  • Text embeddings คืออะไร และทำไมถึงสำคัญ
  • วิธีใช้ text-embedding-3-small API
  • ตัวอย่างโค้ดแบบครบถ้วนใน Python และ Node.js
  • การกำหนดจำนวนมิติเองเพื่อปรับแต่งการใช้พื้นที่จัดเก็บ
  • การเปรียบเทียบราคาและการปรับให้คุ้มต้นทุน

What is Text-Embedding-3-Small?#

Text-embedding-3-small เป็นโมเดล embedding ขนาดกะทัดรัดของ OpenAI ที่เปิดตัวในเดือนมกราคม 2024 แปลงข้อความให้เป็นเวกเตอร์ 1536 มิติที่สะท้อนความหมายเชิงความหมาย (semantic meaning) เพื่อให้สามารถ:

  • Semantic Search: ค้นหาเอกสารที่เกี่ยวข้องจาก “ความหมาย” ไม่ใช่แค่คำค้น
  • RAG Systems: ดึงบริบทมาใช้กับการตอบของ LLM
  • Similarity Matching: เปรียบเทียบความคล้ายของข้อความเพื่อแนะนำหรือจับคู่
  • Clustering: จัดกลุ่มเอกสารที่มีความคล้ายกัน
  • Classification: จัดประเภทข้อความตามเนื้อหา

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. สมัครใช้งานที่ Crazyrouter
  2. รับ API key จากแดชบอร์ด
  3. ใช้ Python 3.8+ หรือ 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#

ประมวลผลข้อความหลายรายการในคำขอ API เดียวเพื่อประสิทธิภาพที่ดียิ่งขึ้น:

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#

ลดต้นทุนพื้นที่จัดเก็บด้วยการใช้จำนวนมิติที่น้อยลง โมเดลรองรับการลดมิติ โดยยังคงคุณภาพได้ดี:

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 KBแอปมือถือ, พื้นที่จัดเก็บจำกัด
5122 KBสมดุลระหว่างประสิทธิภาพและขนาด
10244 KBความแม่นยำสูง
15366 KBความแม่นยำสูงสุด

Building a Semantic Search System#

ตัวอย่างครบถ้วนของการสร้างระบบ semantic search:

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 ให้คุณเข้าถึงโมเดล embedding ของ OpenAI ได้หลายรุ่น:

ModelDimensionsPrice RatioBest For
text-embedding-3-small15360.01การใช้งานทั่วไป คุ้มค่าที่สุด
text-embedding-3-large30720.065งานที่ต้องการความแม่นยำสูงมาก
text-embedding-ada-00215360.05ความเข้ากันได้กับระบบเดิม (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

Pricing Disclaimer: ราคาที่แสดงใช้เพื่อการสาธิตเท่านั้นและอาจมีการเปลี่ยนแปลง การคิดค่าบริการจริงจะอ้างอิงจากราคาปัจจุบันในขณะทำรายการ

ตัวอย่างการประหยัดต้นทุน:

สำหรับระบบ RAG ที่ประมวลผล 10M tokens ต่อเดือน:

  • OpenAI Official: $200/เดือน
  • Crazyrouter: $20/เดือน
  • ประหยัด: 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: แอปมือถือ, อุปกรณ์ IoT
  • 512 dimensions: เว็บแอปที่มีข้อจำกัดด้านพื้นที่จัดเก็บ
  • 1024 dimensions: แอปพลิเคชันทั่วไป
  • 1536 dimensions: งานที่ต้องการความแม่นยำสูงสุด

Frequently Asked Questions#

What's the difference between text-embedding-3-small and text-embedding-3-large?#

Text-embedding-3-small สร้างเวกเตอร์ขนาด 1536 มิติ และถูกปรับให้คุ้มค่าด้านต้นทุน ในขณะที่ text-embedding-3-large สร้างเวกเตอร์ขนาด 3072 มิติ ให้ความแม่นยำสูงกว่า แต่มีค่าใช้จ่ายมากกว่าประมาณ 6.5 เท่า สำหรับงานส่วนใหญ่ text-embedding-3-small ให้ผลลัพธ์ที่ยอดเยี่ยมเพียงพอ

Can I reduce dimensions after generating embeddings?#

ได้ คุณสามารถใช้พารามิเตอร์ dimensions เพื่อสร้างเวกเตอร์ที่มีมิติน้อยลงตั้งแต่แรก วิธีนี้มีประสิทธิภาพกว่าการสร้างเวกเตอร์เต็มแล้วค่อยตัดทอนภายหลัง

How many texts can I embed in one request?#

คุณสามารถ embed ข้อความได้สูงสุด 2048 รายการในคำขอ API เดียว สำหรับชุดข้อมูลขนาดใหญ่ ควรแบ่งเป็น batch ละไม่เกิน 2048 รายการ

Are the embeddings normalized?#

ใช่ text-embedding-3-small จะคืนค่าเวกเตอร์ที่ normalize แล้ว (ความยาวเวกเตอร์เป็น 1) ดังนั้นคุณสามารถใช้ dot product แทน cosine similarity เพื่อคำนวณได้เร็วขึ้น

Getting Started#

  1. สมัครใช้งาน ที่ Crazyrouter
  2. รับ API key ของคุณ จากแดชบอร์ด
  3. ติดตั้ง SDK: pip install openai หรือ npm install openai
  4. เริ่มสร้าง embeddings ด้วยโค้ดตัวอย่างด้านบน

Related Articles:

หากมีคำถาม ติดต่อได้ที่ support@crazyrouter.com

Related Articles

สุดยอดเครื่องมือสร้างเพลงด้วย AI ปี 2026: เปรียบเทียบ Suno, Udio และ Stable AudioTutorial

สุดยอดเครื่องมือสร้างเพลงด้วย AI ปี 2026: เปรียบเทียบ Suno, Udio และ Stable Audio

การเลือกเครื่องมือสร้างเพลงด้วย AI ที่เหมาะสมอาจชวนปวดหัว บทความนี้เปรียบเทียบเครื่องมือสร้างเพลงด้วย AI ชั้นนำในปี 2026 อย่าง Suno AI, Udio และ Stable Audio พร้อมข้อมูลราคาและการเข้าถึง API จริง

Jan 23
คู่มือผู้ใช้ Gemini CLI - Google AI ในเทอร์มินัลของคุณTutorial

คู่มือผู้ใช้ Gemini CLI - Google AI ในเทอร์มินัลของคุณ

คู่มือฉบับสมบูรณ์สำหรับการติดตั้งและตั้งค่า Gemini CLI เครื่องมือ AI แบบบรรทัดคำสั่งโอเพ่นซอร์สของ Google เรียนรู้วิธีตั้งค่า proxy ใช้งานเครื่องมือในตัว และ...

Jan 24
คู่มือการติดตั้งและการใช้งาน Claude Code - การตั้งค่าผู้ช่วยเขียนโค้ดด้วย AITutorial

คู่มือการติดตั้งและการใช้งาน Claude Code - การตั้งค่าผู้ช่วยเขียนโค้ดด้วย AI

คู่มือฉบับสมบูรณ์สำหรับติดตั้งและตั้งค่า Claude Code ผู้ช่วยเขียนโปรแกรมด้วย AI เรียนรู้การตั้งค่า Node.js กำหนดค่าโทเค็น API และเริ่มเขียนโค้ดกับ AI ในเทอร์มินัลของคุณ

Jan 24