做 RAG 系统的人最容易忽略的一步就是 embedding 模型选择。大部分教程直接说”用 OpenAI 的 text-embedding-3-small 就行”,然后所有人就都用这个。但你的数据是中文为主还是英文为主?文档平均长度多少?预算紧不紧?这些因素直接影响该选哪个模型。
选错了会怎样?召回率低、语义匹配不准、成本白白浪费。这篇把 5 个主流 embedding 模型的关键参数摆出来,帮你做选型决策。
先搞清楚:Embedding 模型在 RAG 里的角色
RAG 系统的流程是:文档切片 → embedding 向量化 → 存入向量数据库 → 用户提问也做 embedding → 相似度检索 → 把检索结果喂给 LLM 生成回答。
Embedding 模型决定了”相似度检索”这一步的质量上限。如果模型把两个语义相近的句子编码成距离很远的向量,那后面用什么 LLM 都救不回来。
所以 embedding 模型选型,本质上是给你的数据选一个合适的”语义理解引擎”。
5 个主流模型关键参数对比
根据各官方文档和 Hugging Face 上的 Sentence Transformers 模型信息,以下是目前主流 embedding 模型的核心参数。
OpenAI text-embedding-3-small
根据 OpenAI 官方定价文档(developers.openai.com/api/docs/pricing),text-embedding-3-small 的价格是 $0.02/百万 token,输出 1536 维向量。它支持自定义维度缩短(通过 dimensions 参数),比如可以只输出 256 维来节省存储空间。
优势:便宜、稳定、API 调用简单、多语言支持不错。
劣势:闭源、数据要发到 OpenAI 服务器、对某些垂直领域语义理解一般。
OpenAI text-embedding-3-large
同一定价文档显示,text-embedding-3-large 价格 $0.13/百万 token,输出 3072 维向量。比 small 贵 6.5 倍,但维度翻倍。
根据 OpenAI 官方文档说明,text-embedding-3-large 在 MTEB(Massive Textual Embedding Benchmark)基准测试上的平均得分高于 text-embedding-3-small 约 2-3 个百分点。
优势:精度更高、适合对召回质量要求高的场景。
劣势:贵、向量维度大导致存储和检索成本上升。
Cohere embed-v4
Cohere 的 embed-v4 模型支持多语言,专门为搜索和检索场景优化。根据 Cohere 官方文档,它支持 1536 维输出,输入最大 512 token。定价为 $0.10/百万 token(输入)。
优势:搜索场景专门优化、多语言能力强、支持 int8 量化。
劣势:512 token 输入限制短、需要 Cohere API key。
Jina embeddings v3
Jina AI 的 jina-embeddings-v3 是开源模型,根据 Hugging Face 模型卡和 Jina 官方文档,支持 1024 维输出,输入最大 8192 token。可以本地部署,完全不花钱。
根据 SBERT(Sentence Transformers)官方文档推荐,Jina 的模型在长文档检索场景表现不错,8192 token 的输入长度是几个模型里最长的。
优势:开源免费、长文本支持好、可本地部署。
劣势:本地部署需要 GPU、模型文件约 2GB。
sentence-transformers/all-MiniLM-L6-v2
这是 Hugging Face 上最流行的开源 embedding 模型之一。根据 SBERT 官方文档,all-MiniLM-L6-v2 输出 384 维向量,模型大小仅 80MB,速度是 all-mpnet-base-v2 的 5 倍。
SBERT 官方文档明确指出:all-mpnet-base-v2 提供最佳质量,而 all-MiniLM-L6-v2 速度快 5 倍且仍有不错的质量。
优势:超轻量、速度快、完全免费、适合资源受限环境。
劣势:384 维表达能力有限、中文支持不好、精度不如大模型。
怎么选:4 个决策维度
维度一:语言
你的数据是什么语言?如果是中文为主,OpenAI 的两个模型多语言支持都不错。Cohere embed-v4 也专门做了多语言优化。all-MiniLM-L6-v2 中文支持差,不推荐用于中文场景。Jina v3 支持多语言但需要实测。
维度二:成本
按处理 100 万 token 估算 API 成本:text-embedding-3-small $0.02、text-embedding-3-large $0.13、Cohere embed-v4 $0.10。Jina 和 MiniLM 本地部署,不花 API 费但需要算力。
如果你每天处理 50 万 token(约 500 篇中等长度文档),用 text-embedding-3-small 每月成本约 $0.3,基本可以忽略。用 text-embedding-3-large 每月约 $1.95,也不贵。成本通常不是主要矛盾。
维度三:输入长度
你的文档切片多大?如果切片是 500 token 左右,所有模型都能用。如果切片超过 512 token,Cohere embed-v4 会截断。如果想用更长的切片(减少切片数量、保留更多上下文),Jina v3 的 8192 token 是最强选项。
维度四:精度要求
做 FAQ 检索精度要求高,选 text-embedding-3-large。做粗筛或推荐,text-embedding-3-small 够用。资源受限的原型验证,all-MiniLM-L6-v2 能跑起来就行。
一个实际的选型决策树
根据上面的分析,可以这样决策:
第一,你的数据是中文吗?是 → 继续。不是 → all-MiniLM-L6-v2 也可以考虑。
第二,你介意数据发到第三方服务器吗?介意 → Jina v3 本地部署。不介意 → 继续。
第三,你的切片长度超过 512 token 吗?超过 → Jina v3 或 OpenAI(无 512 限制)。没超过 → 所有模型都可以。
第四,你的精度要求高吗?高 → text-embedding-3-large。一般 → text-embedding-3-small。
第五,预算极敏感吗?是 → all-MiniLM-L6-v2 本地跑。不是 → text-embedding-3-small。
大多数场景的答案会落在 text-embedding-3-small 上,这也是为什么很多教程推荐它。但至少你现在知道为什么推荐它,以及什么情况下该换。
可运行的对比代码
如果你想在自己数据上测试不同模型的效果,这段 Python 代码可以帮你快速对比。需要安装 openai 和 sentence-transformers。
import numpy as np
from openai import OpenAI
from sentence_transformers import SentenceTransformer
# 测试文本对
texts = [
"如何部署 RAG 系统",
"RAG 系统的部署步骤",
"今天天气不错",
"向量数据库选型指南"
]
# OpenAI text-embedding-3-small
client = OpenAI()
response = client.embeddings.create(
model="text-embedding-3-small",
input=texts
)
openai_embeddings = [d.embedding for d in response.data]
# 本地模型 all-MiniLM-L6-v2
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
local_embeddings = model.encode(texts)
# 计算相似度
def cosine_sim(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print("OpenAI text-embedding-3-small:")
print(f" sim(0,1) = {cosine_sim(openai_embeddings[0], openai_embeddings[1]):.4f}")
print(f" sim(0,2) = {cosine_sim(openai_embeddings[0], openai_embeddings[2]):.4f}")
print("all-MiniLM-L6-v2:")
print(f" sim(0,1) = {cosine_sim(local_embeddings[0], local_embeddings[1]):.4f}")
print(f" sim(0,2) = {cosine_sim(local_embeddings[0], local_embeddings[2]):.4f}")
预期结果:sim(0,1) 应该远高于 sim(0,2),因为”部署 RAG 系统”和”RAG 部署步骤”语义相近,而”今天天气不错”完全无关。如果某个模型的 sim(0,1) 偏低,说明它对你的中文语料理解不够好。
小结
Embedding 模型选型没有标准答案,但有清晰的决策路径。先看语言、再看成本和长度限制、最后看精度需求。不要盲目跟风选 text-embedding-3-small,也不要一上来就上 text-embedding-3-large。用上面的代码在你自己的数据上跑一下对比,再决定。
选对 embedding 模型,你的 RAG 系统就成功了一半。
数据来源:
- OpenAI 官方定价文档(developers.openai.com/api/docs/pricing,2026-10 查看):text-embedding-3-small $0.02/百万token,text-embedding-3-large $0.13/百万token
- OpenAI Embeddings 指南文档(developers.openai.com/api/docs/guides/embeddings):embedding 用途、API 调用方式
- Sentence Transformers 官方文档(sbert.net/docs/sentence_transformer/pretrained_models.html):all-MiniLM-L6-v2 输出 384 维,all-mpnet-base-v2 质量最佳,MiniLM 速度快 5 倍
- Qdrant 官方文档(qdrant.tech/documentation/embeddings/):支持的 embedding provider 列表
- Cohere 官方文档:embed-v4 模型参数
