OpenAI 文本嵌入模型(Embeddings)技术文档
1. 核心概念:什么是文本嵌入?
文本嵌入(Text Embedding)是一种将文本数据(如单词、句子或文档)转换为固定长度的数值向量(即一系列浮点数)的技术。这个过程的核心目标是捕捉文本的深层语义信息,使得语义相近的文本在向量空间中的距离也更近。
OpenAI 的文本嵌入模型基于先进的深度学习架构(如 Transformer),通过在海量多语言文本数据上进行预训练,学习到了丰富的语言表征能力。生成的嵌入向量是高维空间中的点,向量之间的距离(常用余弦相似度衡量)直接反映了文本之间的语义相关性:距离越小,相关性越高。
简单来说,嵌入模型充当了人类自然语言与机器可处理数字之间的“翻译官”,为语义理解、信息检索等任务奠定了基础。
2. 功能与应用场景
OpenAI 的文本嵌入模型为多种自然语言处理(NLP)任务提供了强大的基础能力,其主要应用包括:
| 应用场景 | 描述 |
|---|---|
| 语义搜索 | 超越关键词匹配,根据查询与文档的语义相似度进行排序和检索。这是构建智能搜索系统和 RAG(检索增强生成)的核心。 |
| 文本聚类与分类 | 将语义相似的文本自动分组(聚类),或将文本分配到预定义的类别中(分类)。 |
| 推荐系统 | 基于用户历史或内容本身的语义相似性,推荐相关的项目、文章或产品。 |
| 异常检测 | 识别出与主体语义相关性极低的异常文本或离群值。 |
| 多样性测量 | 分析一组文本内部语义相似度的分布情况。 |
3. 模型介绍与选型指南
OpenAI 提供了多个文本嵌入模型,最新的是 text-embedding-3 系列。以下是主要模型的对比:
| 模型 | 输出维度 (默认) | 最大输入长度 | 核心特点与定位 | 适用场景 |
|---|---|---|---|---|
| text-embedding-3-large | 3072 维 | 8191 tokens | 高精度版。语义捕捉能力最强,尤其擅长处理长文本和复杂语义场景。支持通过 dimensions 参数降维(如降至1024或256维)而性能损失极小。 |
企业级知识库、高精度语义检索、对质量要求极高的复杂分析任务。 |
| text-embedding-3-small | 1536 维 | 8191 tokens | 轻量高效版。在保持高性能的同时,具有更快的速度和更低的成本(价格约为上一代的五分之一)。同样支持维度调整。 | 大规模向量库、实时性要求高的检索、对成本敏感的中小规模应用。 |
| text-embedding-ada-002 | 1536 维 | 8191 tokens | 经典通用版。在 text-embedding-3 系列发布前是主流选择,性能稳定,性价比高。 | 仍适用于多种通用场景,是平衡性能与成本的可靠选择。 |
选型建议:
- 追求最佳性能:选择
text-embedding-3-large。 - 平衡性能、速度与成本:选择
text-embedding-3-small,它是目前大多数场景的推荐选择。 - 利用降维特性:对于存储或计算资源受限的场景,可使用
text-embedding-3-large或-small并指定较低的dimensions参数,以在成本、存储和性能间取得最佳权衡。
4. 接入方式详解
接入 OpenAI 文本嵌入模型主要通过调用其提供的 API 接口实现。以下是完整的接入步骤和代码示例。
4.1 准备工作
- 获取 API 密钥:访问 https://platform.openai.com/ 注册账号并创建 API Key。
- 安装 SDK:推荐使用官方 Python SDK。
pip install openai
4.2 基础 API 调用
使用 Python SDK 是最高效的方式。
import os
from openai import OpenAI
# 1. 初始化客户端(建议通过环境变量管理API密钥)
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
# 2. 准备输入文本
input_text = "需要转换为向量的文本内容。"
# 3. 调用嵌入API
response = client.embeddings.create(
model="text-embedding-3-small", # 指定模型
input=input_text, # 输入文本,可以是字符串或字符串列表
encoding_format="float", # 返回格式,默认为浮点数列表
# dimensions=512, # 可选:指定输出维度(仅text-embedding-3系列支持)
)
# 4. 提取并使用嵌入向量
embedding_vector = response.data[0].embedding
print(f"生成的向量维度:{len(embedding_vector)}")
print(f"向量前5个值:{embedding_vector[:5]}")
4.3 批量处理
API 支持一次性为多个文本生成嵌入,效率更高。
# 输入可以是字符串列表
texts = ["第一条文本", "第二条文本", "第三条文本"]
response = client.embeddings.create(
model="text-embedding-3-small",
input=texts # 传入列表
)
# 响应中的 data 列表顺序与输入列表对应
all_embeddings = [item.embedding for item in response.data]
4.4 直接使用 HTTP 请求
您也可以使用任何能发送 HTTP 请求的工具直接调用 API。
curl https://api.openai.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "text-embedding-3-small",
"input": "Your text string goes here"
}'
5. 最佳实践与注意事项
- 输入长度限制:所有模型的单条输入文本长度均不能超过 8191个token。对于过长的文本,需要进行截断或分段处理。
- 相似度计算:获取嵌入向量后,通常使用余弦相似度来计算两个文本向量之间的语义相关性。
import numpy as np def cosine_similarity(vec_a, vec_b): return np.dot(vec_a, vec_b) / (np.linalg.norm(vec_a) * np.linalg.norm(vec_b)) - 错误处理:在生产环境中,务必添加网络超时、速率限制(Rate Limit)和认证失败等异常处理逻辑。
- 成本管理:API 调用按输入 token 数计费。可在 https://openai.com/pricing 查询最新价格,并在控制台监控使用量。
- 与向量数据库结合:在实际应用(如 RAG 系统)中,生成的嵌入向量通常被存入向量数据库(如 Milvus、Pinecone、Weaviate)以便进行高效的相似性检索。
通过以上步骤,您可以成功地将 OpenAI 强大的文本嵌入能力集成到您的应用程序中,为语义搜索、智能推荐、内容分类等高级功能提供核心支持。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)