• 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

Embedding 模型选错全白搭:5 个主流模型实测对比与选型指南

AI Coding 实测 admin 50分钟前 2次浏览 已收录 扫描二维码

做 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 模型参数
喜欢 (0)赏
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。