Embeddings Embeddings Embeddings คือการแทนค่าตัวเลขของข้อความที่จับความหมายเชิงความหมาย (semantic) — แปลงข้อความเป็นเวกเตอร์ (ชุดตัวเลข) ที่นำไปใช้กับงาน machine learning ได้หลากหลาย BazaarLink มี endpoint แบบรวมศูนย์ที่รองรับ OpenAI Embeddings API ให้คุณเรียกใช้โมเดล embedding จากหลายผู้ให้บริการผ่านอินเทอร์เฟซเดียว
response ของ embedding ใช้ request ID แบบ opaque ของ BazaarLink ที่ตรงกับ x-request-id ใช้ร่วมกับ GET /v1/generation response แบบ non-streaming จะส่ง ID เดียวกันใน x-generation-id ด้วย usage.cost คือจำนวนเงิน USD ที่เรียกเก็บจากลูกค้าสำหรับ request นี้ สถิติอาจพร้อมใช้งานหลังเสร็จสิ้นไม่กี่วินาที หากได้ 404 ให้ลองซ้ำช่วงสั้นๆ
Embeddings คืออะไร? Embeddings แปลงข้อความเป็นเวกเตอร์มิติสูง โดยข้อความที่มีความหมายใกล้เคียงกันจะอยู่ใกล้กันในปริภูมิเวกเตอร์ — เช่น "cat" กับ "kitten" จะมี embedding ที่คล้ายกัน แต่ "cat" กับ "airplane" จะอยู่ห่างกันมาก การแทนค่าแบบเวกเตอร์นี้ทำให้เครื่องจักรเข้าใจความสัมพันธ์ระหว่างข้อความ ซึ่งเป็นรากฐานของแอปพลิเคชัน AI จำนวนมาก
กรณีการใช้งานทั่วไป RAG (รุ่นที่ดึงข้อมูลเพิ่ม) สร้างระบบที่ดึงบริบทที่เกี่ยวข้องจากฐานความรู้ก่อนสร้างคำตอบ — embeddings ช่วยหาเอกสารที่เกี่ยวข้องที่สุดเพื่อใส่ในบริบทของ LLM
การค้นหาเชิงความหมาย (Semantic Search) แปลงเอกสารและคำค้นหาเป็น embeddings แล้วหาเอกสารที่เกี่ยวข้องที่สุดด้วยความคล้ายคลึงของเวกเตอร์ — เข้าใจความหมายแทนที่จะจับคู่แค่คำสำคัญ ให้ผลลัพธ์ดีกว่าการค้นหาด้วยคำสำคัญ
ระบบแนะนำ สร้าง embeddings สำหรับสินค้า บทความ วิดีโอ และความชอบของผู้ใช้เพื่อแนะนำรายการที่คล้ายกัน — การเปรียบเทียบเวกเตอร์หารายการที่เกี่ยวข้องเชิงความหมายได้แม้ไม่มีคำสำคัญร่วมกัน
การจัดกลุ่มและจำแนกประเภท จัดกลุ่มเอกสารที่คล้ายกันหรือจำแนกข้อความโดยวิเคราะห์รูปแบบ embedding — เอกสารที่มี embedding คล้ายกันมักอยู่หัวข้อหรือหมวดหมู่เดียวกัน
ตรวจจับเนื้อหาซ้ำ หาเนื้อหาที่ซ้ำหรือใกล้เคียงกันโดยเปรียบเทียบความคล้ายคลึงของ embedding — ใช้ได้แม้เนื้อหาถูกเขียนใหม่ด้วยถ้อยคำต่างกัน
ตรวจจับความผิดปกติ ระบุเนื้อหาที่ผิดปกติหรือหลุดกรอบโดยหา embedding ที่เบี่ยงเบนไปจากรูปแบบทั่วไปของชุดข้อมูลอย่างมีนัยสำคัญ
POST /v1/embeddings
Note
หากแหล่ง upstream ไม่รองรับโมเดล embeddings ที่ร้องขอ คำขออาจลองใช้แหล่งอื่นที่พร้อมใช้งานได้ หากไม่มีแหล่งที่รองรับ คำขอจะได้รับข้อผิดพลาด
พารามิเตอร์ modelจำเป็น
string
โมเดล embedding ที่จะใช้ เช่น "openai/text-embedding-3-small"
inputจำเป็น
string | string[] | ContentItem[]
ข้อความที่จะแปลงเป็น embedding — สตริงเดียว, อาร์เรย์ของสตริงสำหรับเรียกแบบ batch ครั้งเดียว หรือ (สำหรับโมเดลที่รองรับ) อาร์เรย์ของรายการ {content:[...]} ที่ผสมส่วน text และ image_url
dimensions
integer
ขนาดเวกเตอร์ผลลัพธ์ที่ร้องขอ ใช้ได้เฉพาะกับโมเดลที่รองรับมิติแบบปรับได้ (เช่น ตระกูล OpenAI text-embedding-3) ส่งต่อไปยังผู้ให้บริการ upstream ตามเดิมและถูกละเว้นในโมเดลที่ไม่รองรับ
encoding_format
string
รูปแบบการเข้ารหัส embedding ที่ร้องขอ เช่น "float" หรือ "base64" ส่งต่อไปยังผู้ให้บริการ upstream ตามเดิม — การรองรับขึ้นอยู่กับโมเดล
provider
object
Unsupported. The entire object is ignored and removed before forwarding; it cannot select an upstream or price tier.
คำขอพื้นฐาน Python cURL TypeScript
from openai import OpenAI
client = OpenAI(
base_url="https://api.bazaarlink.ai/v1" ,
api_key="sk-bl-YOUR_API_KEY" ,
)
response = client.embeddings.create(
model="openai/text-embedding-3-small" ,
input ="The quick brown fox jumps over the lazy dog" ,
)
print (response.data[0 ].embedding)
⌄ ดูทั้งหมด 13 บรรทัดการประมวลผลแบบ Batch ส่งอาร์เรย์ของสตริงเพื่อแปลงข้อความหลายรายการเป็น embedding ในคำขอเดียว — ถูกกว่าและเร็วกว่าการเรียกทีละข้อความ
Python cURL TypeScript
response = client.embeddings.create(
model="openai/text-embedding-3-small" ,
input =[
"Machine learning is a subset of artificial intelligence" ,
"Deep learning uses neural networks with multiple layers" ,
"Natural language processing enables computers to understand text" ,
],
)
for i, item in enumerate (response.data):
print (f"Embedding {i} : {len (item.embedding)} dimensions" )
⌄ ดูทั้งหมด 11 บรรทัดอินพุตหลายรูปแบบ (รูปภาพ + ข้อความ) โมเดลที่รองรับอินพุตรูปภาพ (output_modalities มี "embeddings" และ inputModalities มี "image") รับรายการอินพุตรูปแบบ {content:[{type:"text",...}, {type:"image_url",...}]} ทำให้คุณแปลงรูปภาพเดี่ยว ๆ หรือร่วมกับข้อความเป็น embedding ได้
ขึ้นอยู่กับโมเดล
มีเพียงบางโมเดล embedding เท่านั้นที่รับอินพุตรูปภาพ — ตรวจสอบโมดัลิตีที่โมเดลรองรับในหน้า Models ก่อนส่งเนื้อหา image_url โมเดลที่รองรับเฉพาะข้อความจะปฏิเสธรูปแบบนี้
Python cURL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import requests
response = requests.post(
"https://api.bazaarlink.ai/v1/embeddings" ,
headers={
"Authorization" : "Bearer sk-bl-YOUR_API_KEY" ,
"Content-Type" : "application/json" ,
},
json={
"model" : "google/gemini-embedding-2-preview" ,
"input" : [{
"content" : [
{"type" : "text" , "text" : "A scenic boardwalk through a green meadow" },
{"type" : "image_url" , "image_url" : {"url" : "https://example.com/boardwalk.jpg" }},
]
}],
"encoding_format" : "float" ,
},
)
embedding = response.json()["data" ][0 ]["embedding" ]
print (f"Embedding dimension: {len (embedding)} " )
⌄ ดูทั้งหมด 22 บรรทัดการค้นหาโมเดล Embedding ไม่มี endpoint สำหรับแสดงรายการโมเดล embedding โดยเฉพาะ — เรียก GET /v1/models แล้วกรองฝั่งไคลเอนต์หารายการที่ output_modalities มี "embeddings" หรือดูที่หน้า Models
ข้อจำกัด ไม่รองรับ streaming — embeddings จะถูกส่งกลับเป็นการตอบสนองแบบสมบูรณ์เสมอ ต่างจาก chat completions แต่ละโมเดลมีความยาวอินพุตสูงสุด ข้อความที่เกินขีดจำกัดจะถูกตัดหรือปฏิเสธที่ upstream embeddings สำหรับอินพุตเดียวกันมีความแน่นอน (deterministic) — ไม่มี temperature หรือความสุ่มเข้ามาเกี่ยวข้อง แนวทางปฏิบัติที่ดี เลือกโมเดลตามความสมดุลระหว่างความเร็ว/คุณภาพ/ต้นทุน — โมเดลขนาดเล็ก (เช่น qwen/qwen3-embedding-4b) ถูกกว่าและเร็วกว่า ส่วนโมเดลขนาดใหญ่ (เช่น openai/text-embedding-3-large) มักให้ผลลัพธ์แม่นยำกว่า รวมข้อความหลายรายการไว้ในคำขอเดียวแทนการเรียกทีละข้อความ — ลดจำนวนรอบการเรียกและ overhead แคชผลลัพธ์ไว้ — embedding ของอินพุตเดียวกันจะไม่เปลี่ยนแปลง ควรเก็บไว้แทนการสร้างใหม่ เปรียบเทียบด้วย cosine similarity แทน Euclidean distance — ไม่ขึ้นกับสเกลและเหมาะกับเวกเตอร์มิติสูงกว่า ระวังความยาว context ของแต่ละโมเดล — เอกสารยาวอาจต้องแบ่งเป็นส่วน (chunking) ก่อนแปลงเป็น embedding