文本向量化
POST /v1/embeddings
将文本转换为高维向量,用于语义检索、RAG(检索增强生成)、聚类分析、推荐系统等场景。
input 支持单个字符串或字符串数组(批量处理)。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | ✅ | 向量化模型 ID,如 text-embedding-3-small |
input | string / array | ✅ | 待向量化的文本,支持批量传入字符串数组 |
dimensions | integer | — | 输出向量维度(降维),部分模型支持 |
encoding_format | string | — | 输出格式:float(默认)或 base64 |
请求示例
bash
curl https://api.idreame.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxxxx" \
-d '{
"model": "text-embedding-3-small",
"input": ["你好,世界", "Hello, world"]
}'1
2
3
4
5
6
7
2
3
4
5
6
7
python
from openai import OpenAI
client = OpenAI(
base_url="https://api.idreame.com/v1",
api_key="sk-xxxxxxxx",
)
response = client.embeddings.create(
model="text-embedding-3-small",
input=["你好,世界", "Hello, world"],
)
for item in response.data:
print(f"索引 {item.index}: 维度 {len(item.embedding)}")1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
响应示例
json
{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": [0.0023, -0.0091, 0.0142, ...]
},
{
"object": "embedding",
"index": 1,
"embedding": [0.0154, 0.0037, -0.0089, ...]
}
],
"model": "text-embedding-3-small",
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
常见用法:语义相似度
python
import numpy as np
from openai import OpenAI
client = OpenAI(
base_url="https://api.idreame.com/v1",
api_key="sk-xxxxxxxx",
)
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
texts = ["苹果是一种水果", "香蕉是黄色的", "猫是一种宠物"]
query = "水果有哪些?"
# 批量获取向量
all_texts = [query] + texts
response = client.embeddings.create(
model="text-embedding-3-small",
input=all_texts,
)
embeddings = [item.embedding for item in response.data]
query_vec = embeddings[0]
doc_vecs = embeddings[1:]
# 计算相似度并排序
scores = [(texts[i], cosine_similarity(query_vec, doc_vecs[i])) for i in range(len(texts))]
scores.sort(key=lambda x: x[1], reverse=True)
for text, score in scores:
print(f"{score:.4f} {text}")1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
推荐模型
| 模型 | 维度 | 适用场景 |
|---|---|---|
text-embedding-3-small | 1536 | 通用语义检索,性价比高 |
text-embedding-3-large | 3072 | 高精度语义理解 |
text-embedding-ada-002 | 1536 | 兼容旧项目 |