全部產品
Search
文件中心

Alibaba Cloud Model Studio:向量化(Embedding)

更新時間:Nov 27, 2025

向量化模型可將文本、映像、視頻等資料轉換為數值向量,用於語義搜尋、推薦、聚類、分類、異常檢測等下遊任務。

準備工作

您需要已準備工作:擷取與配置 API Key配置API Key到環境變數(準備下線,併入配置 API Key)。如果通過OpenAI SDK或DashScope SDK進行調用,還需要安裝SDK

擷取Embedding

文本資訊向量化

調用API時,需在請求中同時指定要向量化的常值內容和所使用的模型名稱(如 text-embedding-v4

OpenAI相容介面

import os
from openai import OpenAI

input_text = "衣服的品質杠杠的"

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果您沒有配置環境變數,請在此處用您的API Key進行替換
    # 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.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");

// 初始化 openai 用戶端
const openai = new OpenAI({
    // 確保您已經正確設定了環境變數 DASHSCOPE_API_KEY
    apiKey: process.env.DASHSCOPE_API_KEY, // 如果您沒有配置環境變數,請在此處用您的API Key進行替換
    // 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
    baseURL: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1'
});

async function getEmbedding() {
    try {
        const inputTexts = "衣服的品質杠杠的";
        const completion = await openai.embeddings.create({
            model: "text-embedding-v4",
            input: inputTexts,
            dimensions: 1024 // 指定向量維度(僅 text-embedding-v3及 text-embedding-v4支援該參數)
        });

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

getEmbedding();
curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/embeddings' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "text-embedding-v4",
    "input": "衣服的品質杠杠的"
}'

DashScope

import dashscope
from http import HTTPStatus

# 如果使用華北2(北京)地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

input_text = "衣服的品質杠杠的"
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 java.util.Collections;
public class Main {
    static {
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
        // 華北2(北京)地區需要替換為: https://dashscope.aliyuncs.com/api/v1
    }
     public static void main(String[] args) {
        String inputTexts = "衣服的品質杠杠的";
        try {
            // 構建請求參數
            TextEmbeddingParam param = TextEmbeddingParam
                    .builder()
                    .model("text-embedding-v4")
                    // 輸入文本
                    .texts(Collections.singleton(inputTexts))
                    .build();

            // 建立模型執行個體並調用
            TextEmbedding textEmbedding = new TextEmbedding();
            TextEmbeddingResult result = textEmbedding.call(param);

            // 輸出結果
            System.out.println(result);

        } catch (NoApiKeyException e) {
            // 捕獲並處理API Key未設定的異常
            System.err.println("調用 API 時發生異常: " + e.getMessage());
            System.err.println("請檢查您的 API Key 是否已正確配置。");
            e.printStackTrace();
        }
    }
}
# ======= 重要提示 =======
# 如果使用華北2(北京)地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding
# === 執行時請刪除該注釋 ====

curl --location 'https://dashscope-intl.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": [
        "衣服的品質杠杠的"
        ]
    }
}'

多模態向量化

多模態向量化目前僅支援通過DashScope SDK及API調用模型。

import dashscope
import json
import os
from http import HTTPStatus

dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# 以上為新加坡地區base_url,若使用北京地區的模型,需將base_url替換為:https://dashscope.aliyuncs.com/api/v1

# 輸入可以是視頻
# video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250107/lbcemt/new+video.mp4"
# input = [{'video': video}]
# 或圖片
image = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png"
input = [{'image': image}]
resp = dashscope.MultiModalEmbedding.call(
    # 若沒有配置環境變數,請用百鍊API Key將下行替換為:api_key="sk-xxx",
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/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))
    

模型選擇

選擇合適的模型取決於您的輸入資料類型和應用情境。

  • 處理純文字或代碼:推薦使用 text-embedding-v4。它是當前效能最強的模型,支援任務指令(instruct)、稀疏向量等進階功能,能覆蓋絕大多數文本處理情境。

  • 處理多模態內容

    • 獨立向量:若要為每個輸入(如圖片和其對應的文字標題)產生獨立的向量,可選擇 tongyi-embedding-vision-plustongyi-embedding-vision-flash或通用多模態模型multimodal-embedding-v1為每個輸入部分(圖片、文字)產生一個獨立的向量。

下表包含所有可用向量化模型的詳細規格。

文本向量

新加坡

模型名稱

向量維度

批次大小

單批次最大處理Token數(

單價(每百萬輸入Token)

支援語種

免費額度(注)

text-embedding-v4

屬於Qwen3-Embedding系列

2,048、1,536、1,024(預設)、768、512、256、128、64

10

8,192

$0.07

中文、英語、西班牙語、法語、葡萄牙語、印尼語、日語、韓語、德語、俄羅斯語等100+主流語種

100萬Token

有效期間:百鍊開通後90天內

text-embedding-v3

1,024(預設)、768、512

中文、英語、西班牙語、法語、葡萄牙語、印尼語、日語、韓語、德語、俄羅斯語等50+主流語種

50萬Token

有效期間:百鍊開通後90天內

北京

模型名稱

向量維度

批次大小

單批次最大Token數(

單價(每百萬輸入Token)

支援語種

text-embedding-v4

屬於Qwen3-Embedding系列

2,048、1,536、1,024(預設)、768、512、256、128、64

10

8,192

$0.072

中文、英語、西班牙語、法語、葡萄牙語、印尼語、日語、韓語、德語、俄羅斯語等100+主流語種及多種編程

說明

批次大小指單次API調用中能處理的文本數量上限。例如,text-embedding-v4的批次大小為10,意味著一次請求最多可傳入10個文本進行向量化,且每個文本不得超過 8192 個Token。這個限制適用於:

  • 字串數組輸入:數組最多包含10個元素。

  • 檔案輸入:文字檔最多包含10行文本。

多模態向量

模型根據使用者的輸入產生連續向量,這些輸入可以是文本、圖片或視頻。適用於視頻分類、映像分類、圖文檢索,以文/圖搜圖,以文/圖搜視頻等任務情境。

介面支援單段文本、單張圖片或單個視頻檔案的上傳,也允許不同類型組合(如文本+圖片),部分模型支援同類型內容的多個輸入(如多張圖片),請參考具體模型的限制說明。

新加坡

模型名稱

向量維度

文本長度限制

圖片限制

視頻片限制

單價(每百萬輸入Token)

免費額度(注)

tongyi-embedding-vision-plus

1,152

1,024 Token

≤3MB,

≤8張

≤10MB

$0.09

100萬Token

有效期間:百鍊開通後90天內

tongyi-embedding-vision-flash

768

1,024 Token

≤3MB,

≤8張

≤10MB

圖片/視頻:$0.03

文本:$0.09

北京

模型名稱

向量維度

文本長度限制

圖片限制

視頻片限制

單價(每百萬輸入Token)

免費額度(注)

multimodal-embedding-v1

1,024

512 Token

≤3MB,

1張

≤10MB

免費試用

無Token額度限制

輸入格式與語種限制

模型

文本

圖片

視頻

tongyi-embedding-vision-plus

中/英文

JPG, PNG, BMP (支援URL或Base64)

MP4, MPEG, AVI, MOV, MPG, WEBM, FLV, MKV(僅支援URL)

tongyi-embedding-vision-flash

multimodal-embedding-v1

核心功能

切換向量維度

text-embedding-v4text-embedding-v3 支援自訂向量維度。更高的維度能保留更豐富的語義資訊,但也會相應增加儲存和計算成本。

  • 通用情境(推薦):1024 維度是效能與成本的最佳平衡點,適用於絕大多數語義檢索任務。

  • 追求精度:對於高精度要求領域,可選擇 1536 或 2048 維度。這會帶來一定的精度提升,但儲存和計算開銷會顯著增加。

  • 資源受限:在對成本極其敏感的情境下,可選擇 768 及以下維度。這能顯著降低資源消耗,但會損失部分語義資訊。

OpenAI相容介面

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

resp = client.embeddings.create(
    model="text-embedding-v4",
    input=["喜歡,以後還來這裡買"],
    # 將向量維度設定為 256
    dimensions=256
)
print(f"向量維度: {len(resp.data[0].embedding)}")

DashScope

import dashscope

# 如果使用華北2(北京)地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

resp = dashscope.TextEmbedding.call(
    model="text-embedding-v4",
    input=["喜歡,以後還來這裡買"],
    # 將向量維度設定為 256
    dimension=256
)

print(f"向量維度: {len(resp.output['embeddings'][0]['embedding'])}")

區分查詢與文檔文本 (text_type)

該參數目前僅支援通過DashScope SDK及API啟用。

為了在搜尋類任務中取得最佳效果,應根據任務目標對不同的內容進行有針對性的向量化處理,以充分發揮各自的作用。text_type 參數正是為此設計:

  • text_type: 'query':用於使用者輸入的查詢文本。模型將產生一個類似“標題”的向量,更具方向性,專為“提問”和“尋找”進行最佳化。

  • text_type: 'document' (預設值):用於存入底庫的文檔文本。模型將產生一個類似“本文”的向量,包含更全面的資訊,專為“被匹配”進行最佳化。

當使用短文本去匹配長文本時,應區分 querydocument。而在聚類、分類等所有文本處於相同角色的任務中,則無需設定此參數。

使用任務指令提升效果 (instruct)

該參數目前僅支援通過DashScope SDK及API啟用。

通過提供明確的英文任務指令(instruct),可以引導 text-embedding-v4 模型針對特定檢索情境最佳化向量品質,有效提升精度。使用此功能時,必須將 text_type 參數設定為 query

# 情境:為搜尋引擎構建文檔向量時,可以添加指令以最佳化用於檢索的向量品質。
resp = dashscope.TextEmbedding.call(
    model="text-embedding-v4",
    input="機器學習的相關論文",
    text_type="query",
    instruct="Given a research paper query, retrieve relevant research paper"
)

稠密與稀疏向量

該參數目前僅支援通過DashScope SDK及API啟用。

text-embedding-v4text-embedding-v3支援輸出三種類型的向量,以適應不同檢索策略的需求。

向量類型 (output_type)

核心優勢

主要不足

典型應用情境

dense

深度語義理解,能識別同義字和上下文,與召回結果更相關。

計算和儲存成本較高;無法保證關鍵詞的精確匹配。

語義搜尋、智能問答、內容推薦。

sparse

高計算效率,專註於關鍵詞的精確匹配和快速過濾。

犧牲了語義理解能力,無法處理同義字或上下文。

日誌檢索、商品SKU搜尋、精確資訊過濾。

dense&sparse

結合語義與關鍵詞,搜尋效果最好。產生成本不變,API調用開銷與單向量模式相同。

儲存需求大,系統架構和檢索邏輯更複雜。

高品質、生產級的混合搜尋引擎。

應用樣本

以下為功能示範代碼。在生產環境中,請預先計算向量並持久化儲存在向量資料庫中,檢索時僅需計算查詢向量。

語義搜尋

通過計算查詢與文檔之間的向量相似性,實現精準的語義匹配。

import dashscope
import numpy as np
from dashscope import TextEmbedding

# 如果使用華北2(北京)地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

def cosine_similarity(a, b):
    """計算餘弦相似性"""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

def semantic_search(query, documents, top_k=5):
    """語義搜尋"""
    # 產生查詢向量
    query_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=query,
        dimension=1024
    )
    query_embedding = query_resp.output['embeddings'][0]['embedding']

    # 產生文檔向量
    doc_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=documents,
        dimension=1024
    )

    # 計算相似性
    similarities = []
    for i, doc_emb in enumerate(doc_resp.output['embeddings']):
        similarity = cosine_similarity(query_embedding, doc_emb['embedding'])
        similarities.append((i, similarity))

    # 排序並返回top_k結果
    similarities.sort(key=lambda x: x[1], reverse=True)
    return [(documents[i], sim) for i, sim in similarities[:top_k]]

# 使用樣本
documents = [
    "人工智慧是電腦科學的一個分支",
    "機器學習是實現人工智慧的重要方法",
    "深度學習是機器學習的一個子領域"
]
query = "什麼是AI?"
results = semantic_search(query, documents, top_k=2)
for doc, sim in results:
    print(f"相似性: {sim:.3f}, 文檔: {doc}")

推薦系統

通過分析使用者歷史行為向量,發現使用者的興趣偏好並推薦相似物品。

import dashscope
import numpy as np
from dashscope import TextEmbedding

# 如果使用華北2(北京)地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

def cosine_similarity(a, b):
    """計算餘弦相似性"""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def build_recommendation_system(user_history, all_items, top_k=10):
    """構建推薦系統"""
    # 產生使用者歷史向量
    history_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=user_history,
        dimension=1024
    )

    # 計算使用者偏好向量(取平均)
    user_embedding = np.mean([
        emb['embedding'] for emb in history_resp.output['embeddings']
    ], axis=0)

    # 產生所有物品向量
    items_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=all_items,
        dimension=1024
    )

    # 計算推薦分數
    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))

    # 排序並返回推薦結果
    recommendations.sort(key=lambda x: x[1], reverse=True)
    return recommendations[:top_k]

# 使用樣本
user_history = ["科幻類", "動作類", "懸疑類"]
all_movies = ["未來世界", "太空探險", "古代戰爭", "浪漫之旅", "超級英雄"]
recommendations = build_recommendation_system(user_history, all_movies)
for movie, score in recommendations:
    print(f"推薦分數: {score:.3f}, 電影: {movie}")

文本聚類

通過分析向量間的距離,將相似的文本自動分組。

# 需要安裝 scikit-learn: pip install scikit-learn
import dashscope
import numpy as np
from sklearn.cluster import KMeans

# 如果使用華北2(北京)地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

def cluster_texts(texts, n_clusters=2):
    """將一組文本進行聚類"""
    # 1. 擷取所有文本的向量
    resp = dashscope.TextEmbedding.call(
        model="text-embedding-v4",
        input=texts,
        dimension=1024
    )
    embeddings = np.array([item['embedding'] for item in resp.output['embeddings']])

    # 2. 使用KMeans演算法進行聚類
    kmeans = KMeans(n_clusters=n_clusters, random_state=0, n_init='auto').fit(embeddings)

    # 3. 整理並返回結果
    clusters = {i: [] for i in range(n_clusters)}
    for i, label in enumerate(kmeans.labels_):
        clusters[label].append(texts[i])
    return clusters


# 使用樣本
documents_to_cluster = [
    "手機公司A發售新款手機",
    "搜尋引擎公司B推出新款系統",
    "世界盃決賽阿根廷對陣法國",
    "奧運會中國隊再添一金",
    "某公司發布最新AI晶片",
    "歐洲杯賽事報道"
]
clusters = cluster_texts(documents_to_cluster, n_clusters=2)
for cluster_id, docs in clusters.items():
    print(f"--- 類別 {cluster_id} ---")
    for doc in docs:
        print(f"- {doc}")

文本分類

通過計算輸入文本與預定義標籤的向量相似性,實現在沒有預先標記的樣本的情況下,對新類別進行識別和分類。

import dashscope
import numpy as np

# 如果使用華北2(北京)地區的模型,需要將base_url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

def cosine_similarity(a, b):
    """計算餘弦相似性"""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))


def classify_text_zero_shot(text, labels):
    """零樣本文本分類"""
    # 1. 擷取輸入文本和所有標籤的向量
    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. 計算與每個標籤的相似性
    scores = [cosine_similarity(text_embedding, label_emb) for label_emb in label_embeddings]

    # 3. 返回相似性最高的標籤
    best_match_index = np.argmax(scores)
    return labels[best_match_index], scores[best_match_index]


# 使用樣本
text_to_classify = "這件衣服的料子很舒服,款式也好看"
possible_labels = ["數位產品", "服裝配飾", "食品飲料", "家居生活"]

label, score = classify_text_zero_shot(text_to_classify, possible_labels)
print(f"輸入文本: '{text_to_classify}'")
print(f"最匹配的分類是: '{label}' (相似性: {score:.3f})")

異常檢測

通過計算文本向量與正常樣本中心的向量相似性,識別出與常規模式顯著不同的異常資料。

import dashscope
import numpy as np


def cosine_similarity(a, b):
    """計算餘弦相似性"""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))


def detect_anomaly(new_comment, normal_comments, threshold=0.6):
    # 1. 向量化所有正常評論和新評論
    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. 計算正常評論的中心向量(平均值)
    normal_embeddings = np.array(embeddings[:-1])
    normal_center_vector = np.mean(normal_embeddings, axis=0)

    # 3. 計算新評論與中心向量的相似性
    new_comment_embedding = np.array(embeddings[-1])
    similarity = cosine_similarity(new_comment_embedding, normal_center_vector)

    # 4. 判斷是否為異常
    is_anomaly = similarity < threshold
    return is_anomaly, similarity


# 使用樣本
normal_user_comments = [
    "今天的會議很有成效",
    "專案進展順利",
    "下周發布新版本",
    "使用者反饋良好"
]

test_comments = {
    "正常評論": "功能符合預期",
    "異常-無意義亂碼": "asdfghjkl zxcvbnm"
}

print("--- 異常檢測樣本 ---")
for desc, comment in test_comments.items():
    is_anomaly, score = detect_anomaly(comment, normal_user_comments)
    result = "是" if is_anomaly else "否"
    print(f"評論: '{comment}'")
    print(f"是否為異常: {result} (與正常樣本相似性: {score:.3f})\n")

API參考

錯誤碼

如果模型調用失敗並返回報錯資訊,請參見錯誤資訊進行解決。

限流

關於模型的限流條件,請參見限流

模型效能(MTEB/CMTEB)

評測基準

  • MTEB:大規模文本嵌入評測基準,綜合評估分類、聚類、檢索等任務的通用性。

  • CMTEB:中文大規模文本嵌入評測基準,專門針對中文文本的評測。

  • 分數範圍0-100,數值越高代表效果越優。

模型

MTEB

MTEB(Retrieval task)

CMTEB

CMTEB (Retrieval task)

text-embedding-v3(512維度)

62.11

54.30

66.81

71.88

text-embedding-v3(768維度)

62.43

54.74

67.90

72.29

text-embedding-v3(1024維度)

63.39

55.41

68.92

73.23

text-embedding-v4(512維度)

64.73

56.34

68.79

73.33

text-embedding-v4(1024維度)

68.36

59.30

70.14

73.98

text-embedding-v4(2048維度)

71.58

61.97

71.99

75.01