向量化模型可將文本、映像、視頻等資料轉換為數值向量,用於語義搜尋、推薦、聚類、分類、異常檢測等下遊任務。
準備工作
您需要已準備工作:擷取與配置 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-plus、tongyi-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-v4 、 text-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'(預設值):用於存入底庫的文檔文本。模型將產生一個類似“本文”的向量,包含更全面的資訊,專為“被匹配”進行最佳化。
當使用短文本去匹配長文本時,應區分 query 和 document。而在聚類、分類等所有文本處於相同角色的任務中,則無需設定此參數。
使用任務指令提升效果 (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-v4和text-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 |