嵌入模型选型:按语言、领域、维度、上下文长度和成本做取舍
嵌入模型把文本映射成向量,决定 RAG 和语义搜索的召回上限。选型不能只看 MTEB 排名:还要看语言覆盖、领域匹配、最大输入长度、向量维度、是否支持指令前缀、归一化方式、推理成本和许可证。中文/多语言场景优先看 BGE-M3、GTE、E5、Jina 等;英文通用可以看 OpenAI、Cohere、Voyage 等托管模型。
维度影响存储和检索成本:1024 维比 768 维多约 33% 存储,但精度不一定更高;部分模型支持 Matryoshka 截断,可以在精度和成本之间折中。长文档还要看最大 token 数,超过会被截断。
# 用 sentence-transformers 本地加载
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("BAAI/bge-m3")
vectors = model.encode(
["如何排查磁盘满", "Pod 一直重启"],
normalize_embeddings=True,
batch_size=32,
)
# 指令前缀:部分模型需要 query/passage 不同前缀
query = "为这个句子生成表示以用于检索相关问题:磁盘满怎么排查"
doc = "df -h 查看分区使用率,du 统计目录占用"
选型检查清单:
1. 语言:中文、英文、多语言、代码
2. 领域:通用、法律、医疗、金融、代码
3. 最大输入:512/1024/8192 tokens,是否够一个块
4. 维度:768/1024/1536/3072,存储和索引成本
5. 归一化:是否已归一化,相似度用 cosine 还是 dot
6. 部署:本地 GPU/CPU、托管 API、私有化
7. 许可证与成本:商用许可、QPS、token 计费
在业务数据上构造 100–300 条查询-文档对,比较 recall@k 和 MRR;MTEB 只能做初筛。
合上页面,先回答,再展开对照。
小程序版
微信扫码,随时查命令