嵌入接口 (Embeddings)
约 830 字大约 3 分钟
2025-02-10
嵌入接口用于将文本转换为向量表示,广泛应用于语义搜索、文本分类、聚类分析等场景。
接口地址
POST https://api.ai.webweb.cn/v1/embeddings请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 模型名称 |
| input | string/array | 是 | 要嵌入的文本,可以是单个字符串或字符串数组 |
| encoding_format | string | 否 | 返回格式,float 或 base64,默认 float |
| dimensions | integer | 否 | 输出向量维度(仅部分模型支持) |
请求示例
cURL
curl https://api.ai.webweb.cn/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "text-embedding-3-small",
"input": "你好,世界"
}'Python
from openai import OpenAI
client = OpenAI(
api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://api.ai.webweb.cn/v1"
)
response = client.embeddings.create(
model="text-embedding-3-small",
input="你好,世界"
)
# 获取向量
embedding = response.data[0].embedding
print(f"向量维度: {len(embedding)}")
print(f"前5个值: {embedding[:5]}")JavaScript
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
baseURL: 'https://api.ai.webweb.cn/v1'
});
const response = await openai.embeddings.create({
model: 'text-embedding-3-small',
input: '你好,世界'
});
const embedding = response.data[0].embedding;
console.log(`向量维度: ${embedding.length}`);
console.log(`前5个值: ${embedding.slice(0, 5)}`);批量嵌入
可以一次性对多个文本进行嵌入:
from openai import OpenAI
client = OpenAI(
api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
base_url="https://api.ai.webweb.cn/v1"
)
texts = [
"人工智能正在改变世界",
"机器学习是AI的重要分支",
"深度学习推动了AI的发展"
]
response = client.embeddings.create(
model="text-embedding-3-small",
input=texts
)
for i, data in enumerate(response.data):
print(f"文本 {i+1} 的向量维度: {len(data.embedding)}")响应示例
{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": [
-0.006929283495992422,
-0.005336422007530928,
0.004243836924433708,
...
]
}
],
"model": "text-embedding-3-small",
"usage": {
"prompt_tokens": 5,
"total_tokens": 5
}
}支持的模型
| 模型 | 维度 | 最大输入 | 说明 |
|---|---|---|---|
| text-embedding-3-large | 3072 | 8191 | 最新大型嵌入模型 |
| text-embedding-3-small | 1536 | 8191 | 最新小型嵌入模型 |
| text-embedding-ada-002 | 1536 | 8191 | 经典嵌入模型 |
应用场景
1. 语义搜索
import numpy as np
from openai import OpenAI
client = OpenAI(base_url="https://api.ai.webweb.cn/v1")
def get_embedding(text):
response = client.embeddings.create(
model="text-embedding-3-small",
input=text
)
return response.data[0].embedding
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
# 文档库
documents = [
"Python 是一种流行的编程语言",
"机器学习需要大量数据",
"深度学习使用神经网络"
]
# 预计算文档向量
doc_embeddings = [get_embedding(doc) for doc in documents]
# 搜索
query = "如何学习编程"
query_embedding = get_embedding(query)
# 计算相似度
similarities = [cosine_similarity(query_embedding, doc_emb) for doc_emb in doc_embeddings]
# 排序结果
results = sorted(zip(documents, similarities), key=lambda x: x[1], reverse=True)
for doc, score in results:
print(f"{score:.4f}: {doc}")2. 文本分类
def classify_text(text, categories):
"""基于嵌入的零样本分类"""
text_embedding = get_embedding(text)
category_embeddings = [get_embedding(cat) for cat in categories]
similarities = [cosine_similarity(text_embedding, cat_emb)
for cat_emb in category_embeddings]
best_idx = np.argmax(similarities)
return categories[best_idx], similarities[best_idx]
categories = ["科技", "体育", "娱乐", "财经"]
text = "苹果公司发布了新款iPhone"
category, confidence = classify_text(text, categories)
print(f"分类: {category}, 置信度: {confidence:.4f}")3. 聚类分析
from sklearn.cluster import KMeans
# 获取文本嵌入
texts = ["文本1", "文本2", "文本3", ...]
embeddings = [get_embedding(t) for t in texts]
# K-means 聚类
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(embeddings)
for text, cluster in zip(texts, clusters):
print(f"簇 {cluster}: {text}")最佳实践
- 预处理文本 - 移除特殊字符,标准化格式
- 批量请求 - 尽量使用批量接口减少请求次数
- 缓存向量 - 对固定文本缓存嵌入结果
- 选择合适模型 - 根据需求选择维度和性能的平衡
- 归一化处理 - 某些场景下对向量归一化可提高效果
