Embedding qua API

Biến văn bản thành vector và tìm theo ý nghĩa thay vì từ khóa. Một khóa, định dạng OpenAI /v1/embeddings và chỉ trả tiền bằng rúp cho token đầu vào.

Embedding là gì

Embedding là một dãy số (vector) mô tả ý nghĩa của văn bản. Mô hình đọc một cụm từ, một đoạn văn hoặc tài liệu và trả về vector dài từ vài trăm đến vài nghìn số.

Các văn bản có ý nghĩa giống nhau nhận được vector gần nhau, kể cả khi không có từ chung. “Làm sao để trả hàng?” và “Chính sách đổi trả” sẽ nằm gần nhau, còn “Làm sao để trả khoản vay?” thì xa hơn. Độ gần được đo bằng độ tương đồng cosine: càng gần 1, ý nghĩa càng gần.

Bạn lưu vector một lần vào cơ sở dữ liệu (pgvector, Qdrant, Milvus, Elasticsearch, Redis) rồi tìm các vector gần nhất với truy vấn của người dùng chỉ trong vài mili giây.

Embedding dùng để làm gì

  • Tìm kiếm ngữ nghĩa

    Tìm trong cơ sở tri thức, danh mục hoặc tài liệu, hiểu được truy vấn diễn đạt khác và lỗi chính tả.

  • RAG cho chatbot

    Tìm các đoạn tài liệu phù hợp và đưa cho mô hình ngôn ngữ để nó trả lời dựa trên dữ liệu của bạn.

  • Gợi ý

    Sản phẩm, bài viết và câu hỏi tương tự theo ý nghĩa mô tả, không cần gắn nhãn thủ công.

  • Phân cụm và phân tích

    Nhóm đánh giá, yêu cầu hỗ trợ và đơn hàng theo chủ đề, tìm các vấn đề lặp lại.

  • Phân loại

    Xác định chủ đề, cảm xúc hoặc bộ phận cho yêu cầu dựa trên độ gần với các ví dụ của từng lớp.

  • Tìm trùng lặp

    Tìm tin đăng, câu hỏi và tài liệu lặp lại, kể cả khi chúng được viết bằng từ ngữ khác.

Cách kết nối

  1. Đăng ký và nạp tiền vào số dư: mỗi yêu cầu embedding chỉ tốn một phần nhỏ của kopeck.
  2. Tạo khóa API trong hồ sơ. Khóa chỉ hiện một lần, hãy lưu lại.
  3. Đặt base URL và khóa trong OpenAI SDK hoặc bất kỳ ứng dụng nào hỗ trợ OpenAI API rồi gửi văn bản tới /v1/embeddings.

Base URL: https://sujik.ru/v1

Ví dụ yêu cầu
from openai import OpenAI

client = OpenAI(base_url="https://sujik.ru/v1", api_key="sk-sujik-...")

result = client.embeddings.create(
    model="text-embedding-3-small",
    input=["Làm sao để trả hàng?", "Chính sách đổi trả"],
)
print(len(result.data[0].embedding), result.usage.total_tokens)
Ví dụ phản hồi
{
  "object": "list",
  "data": [
    { "object": "embedding", "index": 0, "embedding": [0.0123, -0.0456, 0.0789, …] },
    { "object": "embedding", "index": 1, "embedding": [0.0098, -0.0411, 0.0802, …] }
  ],
  "model": "text-embedding-3-small",
  "usage": { "prompt_tokens": 14, "total_tokens": 14 }
}

Có thể gửi tới 2048 văn bản trong một yêu cầu. Tham số dimensions rút ngắn vector với các mô hình hỗ trợ, còn encoding_format: base64 giúp phản hồi nhỏ hơn.

Tìm kiếm ngữ nghĩa trong 15 dòng

Lấy vector của tài liệu một lần, sau đó so sánh vector truy vấn với chúng.

import numpy as np
from openai import OpenAI

client = OpenAI(base_url="https://sujik.ru/v1", api_key="sk-sujik-...")
docs = ["Chính sách đổi trả", "...", "..."]

def embed(texts):
    result = client.embeddings.create(model="text-embedding-3-small", input=texts)
    return np.array([item.embedding for item in result.data])

doc_vectors = embed(docs)
query = embed(["Làm sao để trả hàng?"])[0]
scores = doc_vectors @ query  # unit vectors: dot product = cosine
best = int(scores.argmax())
print(docs[best], round(float(scores[best]), 3))

Mô hình và giá

Giá cho 1 triệu token đầu vào. Qua API rẻ hơn 10% so với thử trên trang web.

Hiện chưa tải được giá. Danh sách mới nhất có trên trang giá.

Tất cả giá

Mẹo

  • Chỉ so sánh vector của cùng một mô hình: mỗi mô hình có không gian riêng.
  • Chia tài liệu dài thành các đoạn 200–800 token có phần chồng lấn nhỏ để tìm kiếm chính xác hơn.
  • Lưu văn bản gốc và id mô hình cạnh mỗi vector để có thể tính lại khi đổi mô hình.
  • Vector ngắn (dimensions 256–1024) tiết kiệm dung lượng cơ sở dữ liệu mà gần như không giảm chất lượng.

Câu hỏi thường gặp

Embedding giá bao nhiêu?

Bạn chỉ trả tiền cho token đầu vào theo giá của mô hình. Một nghìn cụm từ ngắn thường tốn chưa tới một rúp. Nếu mô hình trả về lỗi, tiền được hoàn vào số dư.

Mã viết cho OpenAI có chạy được không?

Có. Endpoint tương thích với OpenAI /v1/embeddings: đổi base URL và khóa, phần còn lại của mã và SDK chính thức chạy không cần sửa.

Nên chọn mô hình nào?

Text Embedding 3 Small nhanh và rẻ, phù hợp hầu hết nhiệm vụ. Text Embedding 3 Large và Gemini Embedding chính xác hơn với văn bản phức tạp và nhiều ngôn ngữ.

Embedding có hỗ trợ tiếng Việt không?

Có, tất cả mô hình đều đa ngôn ngữ: có thể trộn tiếng Việt, tiếng Anh và các ngôn ngữ khác trong cùng một chỉ mục.

Có dùng hạn mức miễn phí không?

Không. Embedding được trả từ số dư, nên lượt tạo miễn phí và gói đăng ký không bị trừ.