All Products
Search
Document Center

Alibaba Cloud Model Studio:Embedding

Last Updated:Jun 25, 2026

Model embedding mengonversi data seperti teks, gambar, dan video menjadi vektor untuk berbagai tugas lanjutan, termasuk pencarian semantik, rekomendasi, pengelompokan, klasifikasi, dan deteksi anomali.

Prasyarat

Dapatkan Kunci API dan ekspor Kunci API sebagai Variabel lingkungan. Jika Anda menggunakan OpenAI SDK atau DashScope SDK untuk melakukan panggilan, instal SDK tersebut.

Dapatkan embedding

Text embedding

Untuk membuat permintaan API, tentukan teks yang akan di-embed dan model yang akan digunakan.

OpenAI compatible API

import os
from openai import OpenAI

input_text = "The quality of the clothes is excellent"

client = OpenAI(
    # Kunci API bersifat spesifik per wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # Jika Anda belum menyetel variabel lingkungan, ganti ini dengan Kunci API Anda.
    # Ini adalah URL untuk wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Anda.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.embeddings.create(
    model="text-embedding-v4",
    input=input_text
)

print(completion.model_dump_json())
const OpenAI = require("openai");

// Inisialisasi klien OpenAI.
const openai = new OpenAI({
    // Jika Anda belum menyetel variabel lingkungan, ganti ini dengan Kunci API Anda.
    // Kunci API bersifat spesifik per wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    apiKey: process.env.DASHSCOPE_API_KEY, 
    // Ini adalah URL untuk wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Anda.
    baseURL: 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1'
});

async function getEmbedding() {
    try {
        const inputTexts = "The quality of the clothes is excellent";
        const completion = await openai.embeddings.create({
            model: "text-embedding-v4",
            input: inputTexts,
            dimensions: 1024 // Tentukan dimensi vektor. Parameter ini hanya didukung oleh text-embedding-v3 dan text-embedding-v4.
        });

        console.log(JSON.stringify(completion, null, 2));
    } catch (error) {
        console.error('Error:', error);
    }
}

getEmbedding();
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/embeddings' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "text-embedding-v4",
    "input": "The quality of the clothes is excellent"
}'

DashScope

import dashscope
from http import HTTPStatus

# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

input_text = "The quality of the clothes is excellent"
resp = dashscope.TextEmbedding.call(
    model="text-embedding-v4",
    input=input_text,
)

if resp.status_code == HTTPStatus.OK:
    print(resp)
import com.alibaba.dashscope.embeddings.TextEmbedding;
import com.alibaba.dashscope.embeddings.TextEmbeddingParam;
import com.alibaba.dashscope.embeddings.TextEmbeddingResult;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;

import java.util.Collections;
public class Main {
    static {
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        // Jika Anda menggunakan wilayah Tiongkok (Beijing), ganti URL dengan: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
    }
     public static void main(String[] args) {
        String inputTexts = "The quality of the clothes is excellent";
        try {
            // Bangun parameter permintaan.
            TextEmbeddingParam param = TextEmbeddingParam
                    .builder()
                    .model("text-embedding-v4")
                    // Teks input.
                    .texts(Collections.singleton(inputTexts))
                    .build();

            // Buat instans model dan lakukan panggilan.
            TextEmbedding textEmbedding = new TextEmbedding();
            TextEmbeddingResult result = textEmbedding.call(param);

            // Cetak hasilnya.
            System.out.println(result);

        } catch (NoApiKeyException e) {
            // Tangkap dan tangani pengecualian untuk Kunci API yang hilang.
            System.err.println("Terjadi pengecualian selama panggilan API: " + e.getMessage());
            System.err.println("Harap periksa apakah Kunci API Anda dikonfigurasi dengan benar.");
            e.printStackTrace();
        }
    }
}
# ======= Penting =======
# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding
# === Hapus komentar ini sebelum menjalankan ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "text-embedding-v4",
    "input": {
        "texts": [
        "The quality of the clothes is excellent"
        ]
    }
}'

Vektor multimodal independen

Anda dapat menghasilkan vektor terpisah untuk berbagai jenis konten, seperti teks, gambar, dan video. Pendekatan ini berguna untuk memproses setiap jenis konten secara individual.

Untuk menghasilkan vektor multimodal independen, gunakan SDK DashScope atau panggil API secara langsung. Fitur ini tidak tersedia melalui OpenAI compatible API atau di Konsol.

Python

import dashscope
import json
import os
from http import HTTPStatus

dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
# URL di atas untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1

# Input dapat berupa video.
# video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4"
# input = [{'video': video}]
# Atau gambar.
image = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png"
input = [{'image': image}]
resp = dashscope.MultiModalEmbedding.call(
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: api_key="sk-xxx",
    # Kunci API bersifat spesifik per wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="tongyi-embedding-vision-plus",
    input=input
)

print(json.dumps(resp.output, indent=4))
    

Java

import com.alibaba.dashscope.embeddings.MultiModalEmbedding;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemImage;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemVideo;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingParam;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

import java.util.Collections;

public class Main {
    static {
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        // Jika Anda menggunakan wilayah Tiongkok (Beijing), ganti URL dengan: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
    }
    public static void main(String[] args) {
        try {
            MultiModalEmbedding embedding = new MultiModalEmbedding();
            // Input dapat berupa video.
            // MultiModalEmbeddingItemVideo video = new MultiModalEmbeddingItemVideo(
            //     "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4");
            // Atau gambar.
            MultiModalEmbeddingItemImage image = new MultiModalEmbeddingItemImage(
                "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png");

            MultiModalEmbeddingParam param = MultiModalEmbeddingParam.builder()
                // Jika Anda belum menyetel variabel lingkungan, tambahkan Kunci API Studio Model Anda dengan menggunakan .apiKey("sk-xxx")
                .model("tongyi-embedding-vision-plus")
                .contents(Collections.singletonList(image))
                .build();

            MultiModalEmbeddingResult result = embedding.call(param);
            System.out.println(result);

        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.err.println("Terjadi pengecualian selama panggilan API: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Vektor multimodal terpadu

Anda dapat menggabungkan konten dari berbagai modalitas—seperti teks, gambar, dan video—menjadi satu vektor terpadu. Pendekatan ini memungkinkan aplikasi seperti pencarian teks-ke-gambar, pencarian gambar-ke-gambar, pencarian teks-ke-video, dan pengambilan lintas-modal.

Untuk menghasilkan vektor multimodal terpadu, gunakan SDK DashScope Python atau panggil API secara langsung. Fitur ini tidak tersedia melalui OpenAI compatible API, SDK DashScope Java, atau Konsol.
  • qwen3-vl-embedding: Mendukung pembuatan vektor terpadu maupun independen. Untuk menghasilkan vektor terpadu, atur parameter boolean enable_fusion ke true.

  • qwen2.5-vl-embedding: Hanya mendukung embedding terpadu, bukan embedding independen.

Python

import dashscope
import json
import os
from http import HTTPStatus
# Konfigurasi berikut untuk wilayah Tiongkok (Beijing). Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. Konfigurasi bersifat spesifik per wilayah.
dashscope.base_http_api_url = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1"

# Vektor multimodal terpadu: Menggabungkan teks, gambar, dan video menjadi satu vektor terpadu.
# Cocok untuk kasus penggunaan seperti pengambilan lintas-modal dan pencarian gambar.
text = "This is a test text for generating a multimodal fused vector"
image = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png"
video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4"

# Input berisi teks, gambar, dan video. Vektor terpadu dihasilkan dengan mengatur parameter enable_fusion.
input_data = [
    {"text": text},
    {"image": image},
    {"video": video}
]

# Gunakan qwen3-vl-embedding untuk menghasilkan vektor terpadu.
resp = dashscope.MultiModalEmbedding.call(
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen3-vl-embedding",
    input=input_data,
    enable_fusion=True,
    # Parameter opsional: Menentukan dimensi vektor. Nilai yang didukung: 2560, 2048, 1536, 1024, 768, 512, dan 256. Default: 2560.
    # dimension = 1024
)

print(json.dumps(resp.output, indent=4))

Java (HTTP)

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
    public static void main(String[] args) throws Exception {
        // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: String apiKey = "sk-xxx";
        String apiKey = System.getenv("DASHSCOPE_API_KEY");

        // Gunakan enable_fusion untuk menggabungkan teks, gambar, dan video menjadi satu vektor terpadu.
        String requestBody = "{"
                + "\"model\": \"qwen3-vl-embedding\","
                + "\"input\": {"
                + "  \"contents\": ["
                + "    {\"text\": \"This is a test text for generating a multimodal fused vector\"},"
                + "    {\"image\": \"https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png\"},"
                + "    {\"video\": \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4\"}"
                + "  ]"
                + "},"
                + "\"parameters\": {"
                + "  \"enable_fusion\": true"
                + "}"
                + "}";

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/embeddings/multimodal-embedding/multimodal-embedding"))
                .header("Authorization", "Bearer " + apiKey)
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}

Pemilihan model

Pilih model yang sesuai berdasarkan jenis data masukan dan kasus penggunaan Anda.

  • Memproses teks biasa atau kode: Gunakan text-embedding-v4. Ini adalah model dengan performa tertinggi, mendukung fitur lanjutan seperti instruksi tugas dan vektor jarang untuk mencakup sebagian besar kasus penggunaan pemrosesan teks.

  • Memproses konten multimodal:

    • Embedding terpadu: Untuk merepresentasikan input single-modal atau mixed-modal sebagai embedding terpadu dalam kasus penggunaan seperti pengambilan lintas-modal dan pencarian gambar, gunakan  qwen3-vl-embedding. Misalnya, Anda dapat memasukkan gambar kemeja dengan teks "temukan gaya serupa yang terlihat lebih muda," dan model akan menggabungkan gambar dan instruksi tugas menjadi satu embedding untuk diproses.

    • Embedding independen: Untuk menghasilkan embedding independen untuk setiap bagian input (seperti gambar dan keterangan teks yang sesuai), gunakan tongyi-embedding-vision-plus, tongyi-embedding-vision-flash, atau model multimodal tujuan umum multimodal-embedding-v1.

  • Memproses data skala besar: Untuk memproses data teks skala besar yang tidak real-time, gunakan text-embedding-v4 dengan OpenAI compatible batch API untuk mengurangi biaya secara signifikan.

Tabel berikut merinci spesifikasi semua model embedding yang tersedia.

Text embedding

Beijing

Nama model

Dimensi embedding

Ukuran batch

Token batch maks (Catatan)

Harga / 1 juta token

Bahasa

text-embedding-v4

Bagian dari seri Qwen3-Embedding

2.048, 1.536, 1.024 (default), 768, 512, 256, 128, 64

10

8.192

$0,072

Lebih dari 100 bahasa utama, termasuk Tiongkok, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, Rusia, dan berbagai bahasa pemrograman

Hong Kong

Nama model

Dimensi embedding

Ukuran batch

Token batch maks (Catatan)

Harga / 1 juta token

Bahasa

text-embedding-v4

Bagian dari seri Qwen3-Embedding

2.048, 1.536, 1.024 (default), 768, 512, 256, 128, 64

10

8.192

$0,07

Lebih dari 100 bahasa utama, termasuk Tiongkok, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, Rusia, dan berbagai bahasa pemrograman

Singapura

Nama model

Dimensi embedding

Ukuran batch

Token batch maks (Catatan)

Harga / 1 juta token

Bahasa

Kuota gratis (Catatan)

text-embedding-v4

Bagian dari seri Qwen3-Embedding

2.048, 1.536, 1.024 (default), 768, 512, 256, 128, 64

10

8.192

$0,07

Lebih dari 100 bahasa utama, termasuk Tiongkok, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, Rusia, dan berbagai bahasa pemrograman

1 juta token

Berlaku selama 90 hari setelah mengaktifkan Studio Model

text-embedding-v3

1.024 (default), 768, 512

Lebih dari 50 bahasa utama, termasuk Tionghoa, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, dan Rusia.

500.000 token

Berlaku selama 90 hari setelah mengaktifkan Studio Model

Catatan

Ukuran batch adalah jumlah maksimum teks per panggilan API. Misalnya, text-embedding-v4 memiliki ukuran batch 10, yang memungkinkan Anda menyertakan hingga 10 teks untuk vektorisasi per permintaan, dengan masing-masing teks dibatasi hingga 8.192 token. Batasan ini berlaku untuk:

  • input array string: Array dapat berisi hingga 10 elemen.

  • input file: File teks dapat berisi hingga 10 baris.

Multimodal embedding

Model ini menghasilkan embedding dari input teks, gambar, atau video. Anda dapat menggunakan embedding ini untuk tugas seperti klasifikasi video dan gambar, pengambilan gambar-teks, serta pencarian teks-ke-gambar atau teks-ke-video.

API menerima input teks, gambar, atau video tunggal, serta kombinasi seperti teks dan gambar. Beberapa model mendukung beberapa input dari jenis yang sama, seperti beberapa gambar. Untuk detailnya, lihat batasan untuk setiap model.

Singapura

Model

Dimensi embedding

Batas panjang teks

Batas ukuran gambar

Batas ukuran video

Harga (per 1 juta token)

Kuota gratis (Catatan)

tongyi-embedding-vision-plus

1152

1.024 token

Hingga 3 MB per gambar. Mendukung hingga 8 gambar.

Hingga 10 MB per file video

Gambar/Video: $0,09

Teks: $0,09

1 juta token

Kuota gratis ini kedaluwarsa 90 hari setelah Anda mengaktifkan Studio Model.

tongyi-embedding-vision-flash

768

Gambar/Video: $0,03

Teks: $0,09

Tiongkok (Beijing)

Model

Dimensi embedding

Batas panjang teks

Batas ukuran gambar

Batas ukuran video

Harga (per 1 juta token)

qwen3-vl-embedding

2560 (default), 2048, 1536, 1024, 768, 512, 256

32.000 token

Hingga 1 gambar dengan ukuran maksimum 5 MB

Hingga 50 MB per file video

Gambar/Video: $0,258

Teks: $0,1

multimodal-embedding-v1

1024

512 token

Hingga 8 gambar, dengan ukuran maksimum 3 MB masing-masing.

Hingga 10 MB per file video

Uji coba gratis

Batasan input dan bahasa

Model multimodal terpadu

Model

Teks

Gambar

Video

Batas permintaan

qwen3-vl-embedding

Mendukung 33 bahasa utama, termasuk Tionghoa, Inggris, Jepang, Korea, Prancis, dan Jerman.

Semua bahasa yang didukung

Tiongkok, Jepang, Korea, Indonesia, Vietnam, Thailand, Inggris, Prancis, Jerman, Rusia, Portugis, Spanyol, Italia, Swedia, Denmark, Ceko, Norwegia, Belanda, Finlandia, Turki, Polandia, Swahili, Rumania, Serbia, Yunani, Kazakh, Uzbek, Cebuano, Arab, Urdu, Persia, Hindi/Devanagari, dan Ibrani.

JPEG, PNG, WEBP, BMP, TIFF, ICO, DIB, ICNS, dan SGI (URL atau Base64 didukung)

MP4, AVI, dan MOV (hanya URL)

Jumlah total elemen konten dalam satu permintaan tidak boleh melebihi 20. Jumlah gambar tidak boleh melebihi 5. Gambar, teks, dan video berbagi batas ini.

Model multimodal independen

Model

Teks

Gambar

Video

Batas permintaan

tongyi-embedding-vision-plus

Tiongkok/Inggris

JPG, PNG, dan BMP (URL atau Base64 didukung)

MP4, MPEG, AVI, MOV, MPG, WEBM, FLV, dan MKV (hanya URL)

Tidak ada batasan jumlah elemen konten. Jumlah total token input tidak boleh melebihi batas token.

tongyi-embedding-vision-flash

multimodal-embedding-v1

Jumlah total elemen konten dalam satu permintaan tidak boleh melebihi 20. Satu permintaan dapat berisi maksimal 1 gambar, 1 video, dan 20 entri teks. Item-item ini berbagi batas total.

Fitur inti

Menyesuaikan dimensi vektor

Model text-embedding-v4, text-embedding-v3, tongyi-embedding-vision-plus, tongyi-embedding-vision-flash, qwen3-vl-embedding mendukung dimensi vektor kustom. Dimensi yang lebih tinggi mempertahankan lebih banyak informasi semantik tetapi meningkatkan biaya penyimpanan dan komputasi.

  • Kasus penggunaan umum (Direkomendasikan): Dimensi 1024 memberikan keseimbangan optimal antara performa dan biaya, menjadikannya ideal untuk sebagian besar tugas pencarian semantik.

  • Skenario presisi tinggi: Untuk aplikasi yang memerlukan presisi tinggi, Anda dapat memilih dimensi 1536 atau 2048. Hal ini meningkatkan presisi tetapi secara signifikan meningkatkan beban penyimpanan dan komputasi.

  • Lingkungan dengan sumber daya terbatas: Dalam skenario yang sensitif terhadap biaya, pilih dimensi 768 atau lebih rendah. Hal ini secara signifikan mengurangi konsumsi sumber daya dengan mengorbankan sebagian informasi semantik.

OpenAI-compatible API

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API bersifat spesifik per wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Ini adalah URL dasar untuk wilayah Singapura. Ganti {WorkspaceId} dengan ID Ruang Kerja Anda. URL bersifat spesifik per wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

resp = client.embeddings.create(
    model="text-embedding-v4",
    input=["I like it and will buy from here again"],
    # Atur dimensi vektor ke 256
    dimensions=256
)
print(f"Dimensi vektor: {len(resp.data[0].embedding)}")

DashScope

import dashscope

# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_http_api_url dengan: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

resp = dashscope.TextEmbedding.call(
    model="text-embedding-v4",
    input=["I like it and will buy from here again"],
    # Atur dimensi vektor ke 256
    dimension=256
)

print(f"Dimensi vektor: {len(resp.output['embeddings'][0]['embedding'])}")

Teks kueri vs. dokumen (text_type)

Parameter ini hanya tersedia melalui SDK dan API DashScope.

Untuk mencapai hasil optimal dalam tugas pencarian, Anda harus melakukan vektorisasi konten secara berbeda berdasarkan perannya. Parameter text_type dirancang untuk tujuan ini:

  • text_type: 'query': Gunakan untuk teks kueri yang diberikan pengguna. Model menghasilkan vektor "seperti judul" yang lebih terarah dan dioptimalkan untuk pengambilan informasi.

  • text_type: 'document' (default): Gunakan untuk teks dokumen yang disimpan dalam basis pengetahuan Anda. Model menghasilkan vektor "seperti isi" yang berisi informasi lebih komprehensif dan dioptimalkan untuk pencocokan.

Saat mencocokkan teks pendek dengan teks panjang, Anda harus membedakan antara query dan document. Namun, untuk tugas seperti pengelompokan atau klasifikasi di mana semua teks memiliki peran yang sama, Anda tidak perlu mengatur parameter ini.

Instruksi tugas (instruct)

Parameter ini hanya tersedia melalui SDK dan API DashScope.

Anda dapat memberikan instruksi tugas berbahasa Inggris yang jelas untuk membimbing model text-embedding-v4 dalam mengoptimalkan kualitas vektor untuk skenario pengambilan tertentu, sehingga meningkatkan presisi. Saat menggunakan fitur ini, Anda harus mengatur parameter text_type ke query.

# Contoh: Tambahkan instruksi untuk mengoptimalkan kualitas pengambilan saat membangun vektor dokumen.
resp = dashscope.TextEmbedding.call(
    model="text-embedding-v4",
    input="Research papers on machine learning",
    text_type="query",
    instruct="Given a research paper query, retrieve relevant research paper"
)

Vektor padat dan jarang

Parameter ini hanya tersedia melalui SDK dan API DashScope.

Model text-embedding-v4 dan text-embedding-v3 mendukung tiga jenis output vektor untuk mengakomodasi strategi pengambilan yang berbeda.

Jenis vektor (output_type)

Keunggulan

Keterbatasan

Kasus penggunaan

dense

Pemahaman semantik mendalam yang mengidentifikasi sinonim dan konteks untuk hasil yang lebih relevan.

Biaya komputasi dan penyimpanan lebih tinggi. Tidak menjamin kecocokan eksak untuk kata kunci.

Pencarian semantik, Tanya Jawab berbasis AI, rekomendasi konten.

sparse

Efisiensi komputasi tinggi, berfokus pada kecocokan eksak untuk kata kunci dan memungkinkan penyaringan cepat.

Kurang pemahaman semantik dan tidak dapat memproses sinonim atau konteks.

Pengambilan log, pencarian SKU produk, penyaringan informasi presisi.

dense&sparse

Menggabungkan pencocokan semantik dan kata kunci untuk hasil pencarian optimal. Biaya pembuatan tidak berubah, dan overhead panggilan API identik dengan mode vektor tunggal.

Memerlukan lebih banyak penyimpanan, dan arsitektur sistem serta logika pengambilan lebih kompleks.

Mesin pencari hibrida berkualitas tinggi untuk produksi.

Kasus penggunaan

Kode berikut hanya untuk tujuan demonstrasi. Untuk produksi, pra-hitung dan simpan embedding dalam database vektor. Dengan cara ini, Anda hanya perlu menghasilkan embedding kueri untuk pengambilan.

Pencarian semantik

Lakukan pencocokan semantik yang tepat dengan menghitung kemiripan antara embedding kueri dan embedding dokumen.

import dashscope
import numpy as np
from dashscope import TextEmbedding

# Untuk menggunakan model dari wilayah Tiongkok (Beijing), ubah base_http_api_url menjadi: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

def cosine_similarity(a, b):
    """Hitung kemiripan cosinus."""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

def semantic_search(query, documents, top_k=5):
    """Lakukan pencarian semantik."""
    # Hasilkan embedding kueri.
    query_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=query,
        dimension=1024
    )
    query_embedding = query_resp.output['embeddings'][0]['embedding']

    # Hasilkan embedding dokumen.
    doc_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=documents,
        dimension=1024
    )

    # Hitung kemiripan.
    similarities = []
    for i, doc_emb in enumerate(doc_resp.output['embeddings']):
        similarity = cosine_similarity(query_embedding, doc_emb['embedding'])
        similarities.append((i, similarity))

    # Urutkan dan kembalikan hasil top-k.
    similarities.sort(key=lambda x: x[1], reverse=True)
    return [(documents[i], sim) for i, sim in similarities[:top_k]]

# Contoh penggunaan
documents = [
    "Artificial intelligence is a branch of computer science",
    "Machine learning is an important method for achieving artificial intelligence",
    "Deep learning is a subfield of machine learning"
]
query = "What is AI?"
results = semantic_search(query, documents, top_k=2)
for doc, sim in results:
    print(f"Kemiripan: {sim:.3f}, Dokumen: {doc}")

Sistem rekomendasi

Analisis embedding riwayat perilaku pengguna untuk mengidentifikasi minat mereka dan merekomendasikan item serupa.

import dashscope
import numpy as np
from dashscope import TextEmbedding

# Untuk menggunakan model dari wilayah Tiongkok (Beijing), ubah base_http_api_url menjadi: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

def cosine_similarity(a, b):
    """Hitung kemiripan cosinus."""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def build_recommendation_system(user_history, all_items, top_k=10):
    """Bangun sistem rekomendasi."""
    # Hasilkan embedding riwayat pengguna.
    history_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=user_history,
        dimension=1024
    )

    # Hitung embedding preferensi pengguna dengan merata-ratakan.
    user_embedding = np.mean([
        emb['embedding'] for emb in history_resp.output['embeddings']
    ], axis=0)

    # Hasilkan embedding semua item.
    items_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=all_items,
        dimension=1024
    )

    # Hitung skor rekomendasi.
    recommendations = []
    for i, item_emb in enumerate(items_resp.output['embeddings']):
        score = cosine_similarity(user_embedding, item_emb['embedding'])
        recommendations.append((all_items[i], score))

    # Urutkan dan kembalikan hasil rekomendasi.
    recommendations.sort(key=lambda x: x[1], reverse=True)
    return recommendations[:top_k]

# Contoh penggunaan
user_history = ["Science Fiction", "Action", "Suspense"]
all_movies = ["Future World", "Space Adventure", "Ancient War", "Romantic Journey", "Superhero"]
recommendations = build_recommendation_system(user_history, all_movies)
for movie, score in recommendations:
    print(f"Skor Rekomendasi: {score:.3f}, Film: {movie}")

Pengelompokan teks

Kelompokkan teks serupa dengan menganalisis jarak antara embedding-nya.

# scikit-learn diperlukan: pip install scikit-learn
import dashscope
import numpy as np
from sklearn.cluster import KMeans

# Untuk menggunakan model dari wilayah Tiongkok (Beijing), ubah base_http_api_url menjadi: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

def cluster_texts(texts, n_clusters=2):
    """Kelompokkan sekumpulan teks."""
    # 1. Dapatkan embedding untuk semua teks.
    resp = dashscope.TextEmbedding.call(
        model="text-embedding-v4",
        input=texts,
        dimension=1024
    )
    embeddings = np.array([item['embedding'] for item in resp.output['embeddings']])

    # 2. Gunakan algoritma KMeans untuk pengelompokan.
    kmeans = KMeans(n_clusters=n_clusters, random_state=0, n_init='auto').fit(embeddings)

    # 3. Atur dan kembalikan hasilnya.
    clusters = {i: [] for i in range(n_clusters)}
    for i, label in enumerate(kmeans.labels_):
        clusters[label].append(texts[i])
    return clusters


# Contoh penggunaan
documents_to_cluster = [
    "Mobile phone company A releases a new phone",
    "Search engine company B launches a new system",
    "World Cup final: Argentina vs. France",
    "China wins another gold medal at the Olympics",
    "A company releases its latest AI chip",
    "European Cup match report"
]
clusters = cluster_texts(documents_to_cluster, n_clusters=2)
for cluster_id, docs in clusters.items():
    print(f"--- Kluster {cluster_id} ---")
    for doc in docs:
        print(f"- {doc}")

Klasifikasi teks

Lakukan klasifikasi teks zero-shot dengan menghitung kemiripan antara embedding teks input dan embedding label yang telah ditentukan. Proses ini mengklasifikasikan teks ke dalam kategori baru tanpa memerlukan contoh berlabel sebelumnya.

import dashscope
import numpy as np

# Untuk menggunakan model dari wilayah Tiongkok (Beijing), ubah base_http_api_url menjadi: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

def cosine_similarity(a, b):
    """Hitung kemiripan cosinus."""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))


def classify_text_zero_shot(text, labels):
    """Lakukan klasifikasi teks zero-shot."""
    # 1. Dapatkan embedding untuk teks input dan semua label.
    resp = dashscope.TextEmbedding.call(
        model="text-embedding-v4",
        input=[text] + labels,
        dimension=1024
    )
    embeddings = resp.output['embeddings']
    text_embedding = embeddings[0]['embedding']
    label_embeddings = [emb['embedding'] for emb in embeddings[1:]]

    # 2. Hitung kemiripan dengan setiap label.
    scores = [cosine_similarity(text_embedding, label_emb) for label_emb in label_embeddings]

    # 3. Kembalikan label dengan kemiripan tertinggi.
    best_match_index = np.argmax(scores)
    return labels[best_match_index], scores[best_match_index]


# Contoh penggunaan
text_to_classify = "The fabric of this dress is comfortable, and the style is nice too"
possible_labels = ["Digital Products", "Apparel & Accessories", "Food & Beverage", "Home & Living"]

label, score = classify_text_zero_shot(text_to_classify, possible_labels)
print(f"Teks input: '{text_to_classify}'")
print(f"Kategori yang paling cocok: '{label}' (Kemiripan: {score:.3f})")

Deteksi anomali

Identifikasi data anomali dengan menghitung kemiripan antara embedding teks dan embedding pusat sampel normal. Data yang secara signifikan menyimpang dari pola ini dianggap sebagai anomali.

threshold dalam contoh ini hanya untuk tujuan demonstrasi. Nilai ideal bervariasi berdasarkan konten dan distribusi data, sehingga Anda harus mengkalibrasinya menggunakan dataset Anda sendiri.
import dashscope
import numpy as np

# Untuk menggunakan model dari wilayah Tiongkok (Beijing), ubah base_http_api_url menjadi: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"


def cosine_similarity(a, b):
    """Hitung kemiripan cosinus."""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))


def detect_anomaly(new_comment, normal_comments, threshold=0.6):
    # 1. Hasilkan embedding untuk semua komentar normal dan komentar baru.
    all_texts = normal_comments + [new_comment]
    resp = dashscope.TextEmbedding.call(
        model="text-embedding-v4",
        input=all_texts,
        dimension=1024
    )
    embeddings = [item['embedding'] for item in resp.output['embeddings']]

    # 2. Hitung embedding pusat (rata-rata) komentar normal.
    normal_embeddings = np.array(embeddings[:-1])
    normal_center_vector = np.mean(normal_embeddings, axis=0)

    # 3. Hitung kemiripan antara embedding komentar baru dan embedding pusat.
    new_comment_embedding = np.array(embeddings[-1])
    similarity = cosine_similarity(new_comment_embedding, normal_center_vector)

    # 4. Tentukan apakah ini anomali.
    is_anomaly = similarity < threshold
    return is_anomaly, similarity


# Contoh penggunaan
normal_user_comments = [
    "Today's meeting was productive",
    "The project is progressing smoothly",
    "The new version will be released next week",
    "User feedback is positive"
]

test_comments = {
    "Normal comment": "The feature works as expected",
    "Anomaly - meaningless garbled text": "asdfghjkl zxcvbnm"
}

print("--- Contoh Deteksi Anomali ---")
for desc, comment in test_comments.items():
    is_anomaly, score = detect_anomaly(comment, normal_user_comments)
    result = "Ya" if is_anomaly else "Tidak"
    print(f"Komentar: '{comment}'")
    print(f"Apakah anomali: {result} (Kemiripan dengan sampel normal: {score:.3f})\n")

Referensi API

Kode kesalahan

Jika panggilan model gagal dan mengembalikan pesan kesalahan, lihat Kode kesalahan untuk resolusi.

Pembatasan laju

Untuk kondisi pembatasan laju model, lihat Pembatasan laju.

Performa model (MTEB/CMTEB)

Benchmark evaluasi

  • MTEB (Massive Text Embedding Benchmark): Benchmark komprehensif yang menilai performa umum embedding teks pada tugas seperti klasifikasi, pengelompokan, dan pengambilan.

  • CMTEB (Chinese Massive Text Embedding Benchmark): Benchmark skala besar yang khusus untuk mengevaluasi embedding teks Tiongkok.

  • Skor berkisar dari 0 hingga 100. Skor yang lebih tinggi menunjukkan performa yang lebih baik.

Model

MTEB

MTEB (tugas pengambilan)

CMTEB

CMTEB (tugas pengambilan)

text-embedding-v3 (512 dimensi)

62,11

54,30

66,81

71,88

text-embedding-v3 (768 dimensi)

62,43

54,74

67,90

72,29

text-embedding-v3 (1024 dimensi)

63,39

55,41

68,92

73,23

text-embedding-v4 (512 dimensi)

64,73

56,34

68,79

73,33

text-embedding-v4 (1024 dimensi)

68,36

59,30

70,14

73,98

text-embedding-v4 (2048 dimensi)

71,58

61,97

71,99

75,01