月度成本复盘会,财务小刘把云服务账单投在屏幕上,所有人的目光都集中在一行醒目的数字上。
“OpenAI API 费用,这个月环比增长 340%,”小刘推了推眼镜,“大头是 Embedding 服务,光 text-embedding-3-large 就烧掉了预算的六成。”
老李放下保温杯,语气笃定:“我们用的是最好的模型,贵点怎么了?一分钱一分货,技术投入不能省。”
小王在角落里轻轻咳了一声:“老李,我上周跑了个 benchmark。咱们中文文档的检索准确率,用 text-embedding-3-large 是 87.2%,但用开源的中文嵌入模型 bge-large-zh,准确率是 88.1%。而且后者的推理成本,只有前者的十分之一。”
老李的眉毛瞬间拧成了麻花:“你说那个不要钱的模型,比 OpenAI 收费的还准?”
“不是不要钱,是自己部署要服务器。但算下来,处理同样数量的文档,bge-large-zh 每月成本大概 200 块,text-embedding-3-large 是 2000 块。”小王把一张对比表投到屏幕上,“而且准确率还高了将近一个点。”
老李沉默了几秒,保温杯在手里转了半圈:“这玩意儿靠谱吗?不就又一个号称‘国产之光’然后年底就跑路的开源项目?”
嵌入模型不是越大越好
“老李你想啊,嵌入模型跟大语言模型不一样。LLM 需要海量参数来生成流畅的回答,但嵌入模型的任务是‘把文字压缩成向量’,它的核心能力是表征学习,不是参数堆积。”
小王走到白板前,画了两个不同大小的圈:“text-embedding-3-large 的参数量没公开,但业内估计在十亿级别。bge-large-zh 是 3.26 亿参数。参数多三倍,但在中文场景下效果反而略低——为什么?”
“因为训练数据。”小王在大圈里写下“英文为主”,在小圈里写下“中文为主”。“OpenAI 的模型训练语料里,中文占比可能不到 10%。你参数再多,没见过足够多的中文句子,对中文语义的理解就是不如专门用中文训练的模型。就像你请了个哈佛教授来教小学数学,他学术水平再高,不如一个本地的小学老师懂孩子。”
老李若有所思:“所以这个 bge 是专门用中文语料训的?”
“对,BAAI 的中文嵌入模型系列,训练数据里中文占比极高,而且针对中文的句式、成语、多义词做了专门优化。它在中文场景的 MTEB 基准上拿过第一。”
老李追问:“MTEB 又是什么?你们年轻人能不能不要动不动就蹦缩写?”
MTEB:嵌入模型的“高考”
“MTEB 就是 Massive Text Embedding Benchmark,嵌入模型的大规模评测基准。”小王调出一个排行榜页面,“你可以理解成嵌入模型的高考。它不只看一门成绩,而是考八门——分类、聚类、配对、重排序、检索、语义相似度、摘要、双语匹配。最后给一个综合平均分。”
他在屏幕上画了个简单的示意:
图:MTEB 评测的八个维度,综合得分反映模型的通用表征能力
“你看这个排行榜,”小王指着屏幕,“总榜第一可能是某个超大模型,但在中文检索子任务上,排第一的往往是 bge-m3 或 bge-large-zh。选模型不能只看总榜,得看具体任务和语言。就像相亲,不能只看对方年收入,还得看性格合不合、兴趣爱好匹不匹配。”
老李哼了一声:“那你说说,都有哪些模型值得相?”
中文嵌入模型相亲大会
小王打开一张自己整理的对比表:
| 模型 | 维度 | 中文检索 | 速度 | 成本 | 特点 |
|---|---|---|---|---|---|
| text-embedding-3-small | 512/1536 | 中 | 快 | 低 | OpenAI 出品,API 方便 |
| text-embedding-3-large | 3072 | 中上 | 中 | 高 | 维度最高,但中文非强项 |
| bge-large-zh | 1024 | 高 | 中 | 低 | 中文专属,开源 |
| bge-m3 | 1024 | 很高 | 中 | 低 | 多语言,支持稀疏+稠密 |
| m3e-large | 1024 | 高 | 快 | 低 | 轻量中文,社区活跃 |
| Cohere Embed v3 | 1024 | 中上 | 快 | 中 | 多语言,API 服务 |
“咱们的需求是中文技术文档的语义检索。bge-m3 效果最好但模型稍大,m3e-large 速度最快但效果略逊,bge-large-zh 是均衡之选。”小王指着表格,“而咱们现在用的 text-embedding-3-large,在中文检索上排名大概第五六位,价格却是第一。”
老李盯着表格,脸上写满了“我不信”:“你这 benchmark 怎么跑的?别是自己编的数据吧。”
小王二话不说,打开笔记本跑了一段代码:
# 对比不同嵌入模型的中文语义检索效果
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import time
# 准备中文检索评测数据
queries = ["数据库连接池怎么配置?", "年会日期是几号?", "K8s 部署流程"]
docs = ["PostgreSQL 连接池使用 pgBouncer...", "2025年会于11月8日举行...",
"Kubernetes 部署需配置 YAML..."]
ground_truth = [0, 1, 2] # 每个 query 对应的正确 doc 索引
models_to_test = {
"bge-large-zh": "BAAI/bge-large-zh-v1.5",
"m3e-large": "moka-ai/m3e-large",
"bge-m3": "BAAI/bge-m3",
}
for name, path in models_to_test.items():
model = SentenceTransformer(path)
start = time.time()
q_embs = model.encode(queries)
d_embs = model.encode(docs)
sims = cosine_similarity(q_embs, d_embs)
hits = sum(1 for i, s in enumerate(sims) if s.argmax() == ground_truth[i])
elapsed = time.time() - start
print(f"{name}: 命中 {hits}/{len(queries)}, 耗时 {elapsed:.2f}s")
# 输出示例:
# bge-large-zh: 命中 3/3, 耗时 0.45s
# m3e-large: 命中 3/3, 耗时 0.28s
# bge-m3: 命中 3/3, 耗时 0.62s老李看完输出,沉默了片刻:“这测试用例才三条,说服力不足。”
“所以我跑的是完整 benchmark,用了 500 条真实用户查询和 2000 篇公司文档。结果刚才的表格里列了。”小王毫不退缩,“而且不光是准确率,我还算了成本。”
成本账:大模型的 ROI 陷阱
小王切换到大屏幕上的一张柱状图。横轴是模型名称,纵轴是每月推理成本,柱子上方标注了中文检索准确率。
“text-embedding-3-large,每月处理 200 万次 embedding 调用,API 费用约 1800 元。bge-large-zh 部署在一台 4 核 GPU 服务器上,电费加运维折旧,每月约 220 元。准确率前者 87.2%,后者 88.1%。”
老李皱着眉头:“API 调用那 1800 里包含了 OpenAI 的运维成本,你自己部署那 220 没算小王你的加班费吧?”
小王嘿嘿一笑:“模型部署好之后基本不用管,我加班是因为你在产品 demo 前临时改需求——这个不能算在模型成本里。”
老李被噎了一下,转移话题:“那私有化部署还有什么好处?除了省钱。”
“数据不出公司。咱们的合同、技术方案、薪资讨论,全在内部服务器上向量化。用 OpenAI 的 API,这些数据要发到境外服务器,合规风险你自己掂量。”
老李的表情严肃起来,这个问题显然戳中了他。
动态嵌入:下一个拐点
“还有一个新趋势,”小王趁热打铁,“刚才说的那些模型,都是静态嵌入——一个词不管出现在什么上下文里,向量都是固定的。但动态嵌入不一样,它根据上下文实时调整向量。比如‘苹果’在‘苹果手机’和‘吃苹果’里,向量是不同的。”
“这有啥用?”老李问。
“解决一词多义。比如咱们公司文档里的‘RAG’,有时指检索增强生成,有时是财务科目代码。静态嵌入搞不清,动态嵌入能区分。目前 bge-m3 已经支持了这种稀疏加稠密的混合表示,效果比纯稠密更好。”
老李拧开保温杯喝了一口,枸杞已经沉底了。
“那照你这么说,咱们该换模型?”
“我的建议是分两步走。第一步,本周内把 text-embedding-3-large 换成 bge-m3,部署在公司服务器上,每月省钱,准确率还能提升。第二步,下个月我调研一下动态嵌入在长文档场景的效果,如果好,再升级。”
老李沉默了一会儿,用手指在桌上敲了三下。
“行。你写个方案。但是——”他站起来,指着小王,“这次可别再让我在成本复盘会上被财务点名了。下不为例啊。”
小王比了个 OK 的手势。
老李走到门口,又转过身来,保温杯晃了一下:“那什么,你刚才说的动态嵌入,它到底怎么做到一个词两个向量的?是存两份吗?还是输入的时候实时算的?明天你给我讲讲这个。”
小王咧嘴笑了:“老李,你这是对嵌入模型上瘾了啊。行,明天茶水间见。”
老李摆摆手走了,保温杯里的枸杞晃荡着,像是无数个浮动的向量,在寻找自己最合适的那个维度。
图:嵌入模型选型决策树——根据数据合规、预算、语言、规模综合判断

