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 booleanenable_fusionketrue.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 umummultimodal-embedding-v1.
Memproses data skala besar: Untuk memproses data teks skala besar yang tidak real-time, gunakan
text-embedding-v4dengan 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 |
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. | 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
Embedding teks umum
Multimodal embedding
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 |