每日新闻 / 2026-05-30

Embedding API 选型指南:语义搜索与 RAG 场景下如何选对向量模型

XycAi
Embedding API 选型指南:语义搜索与 RAG 场景下如何选对向量模型

为什么 embedding API 选型比你想的更重要

很多人搭 RAG 管道时,对 embedding 模型的态度是随便挑一个用着先。这个决策比看起来贵得多——embedding 维度决定了向量数据库的存储成本,模型的语言覆盖能力直接影响中文检索召回率,而 API 调用价格在高吞吐场景下可以差出 10 倍以上。

一个典型的语义搜索系统,假设日均检索 100 万次、文档库 500 万段落,光 embedding 这一层的月度成本就能从几百元跑到几万元。选型决策值得认真对待。


主流模型横向对比

当前可用的 embedding 模型大致分三类:OpenAI 系、Cohere 系、开源/自托管系。以下是关键维度对比:

模型 维度 最大 token 价格(每 1M token) 多语言 适合场景
text-embedding-3-small 1536 8191 ~$0.02 一般 成本敏感、英文为主
text-embedding-3-large 3072 8191 ~$0.13 较好 高精度、多语言混合
Cohere embed-v4 1024 512 ~$0.10 优秀 企业搜索、多语言
BGE-M3(开源) 1024 8192 自托管 优秀 中文场景、成本可控
Jina embeddings-v3 768~1024 8192 ~$0.018 较好 长文档、性价比

几个容易忽略的细节:

text-embedding-3-large 支持 Matryoshka Representation Learning,可以把向量截断到更低维度(比如 256 维)而不损失太多精度。如果向量库存储压力大,这个特性很实用:

from openai import OpenAI

client = OpenAI()
response = client.embeddings.create(
    input="你的文本",
    model="text-embedding-3-large",
    dimensions=256   # 截断到 256 维
)

BGE-M3 在中文 MTEB 基准上得分持续领先商业模型,如果主要处理中文文档且有 GPU 资源,自托管 BGE-M3 是性价比最高的路线。


语义搜索 vs RAG:需求不同,侧重不同

语义搜索和 RAG 虽然都用 embedding,但瓶颈位置不一样。

语义搜索的核心指标是 top-k 召回率和延迟。用户输入一个 query,系统要在毫秒级返回最相关的结果。这里 embedding 的语言理解能力比向量维度更重要——一个 768 维但语义理解强的模型,通常比 3072 维但语义对齐差的模型召回率更高。

选型建议: - 纯英文场景:text-embedding-3-small 够用,成本低 - 中英混合或纯中文:BGE-M3 自托管,或 Cohere embed-v4(API 方式) - 对延迟敏感(<50ms):优先选维度低的模型,向量检索时间与维度正相关

RAG 场景的压力更复杂。除了 embedding 质量,chunk 策略对最终答案质量的影响可能更大。一个常见误区是把 chunk size 设得很小(比如 128 token),认为粒度细检索就准。实际上太短的 chunk 缺乏上下文,送给 LLM 之后生成质量反而下降。

实测建议:RAG 场景下 chunk size 在 256~512 token 之间,overlap 设 10%~15%,配合 text-embedding-3-large(需要高质量)或 BGE-M3(需要控制成本)。


embedding API 选型的三个决策维度

1. 语言分布

先统计你的文档库里中文占比。中文超过 30% 就不要只靠 text-embedding-3-small,它的中文语义对齐明显弱于专门优化过的模型。一个简单验证方法:取 50 条中文 query,分别用两个模型检索,人工评估 top-5 召回质量,差异通常肉眼可见。

2. 吞吐与成本预算

粗算公式:月成本 ≈ (日均文档更新量 + 日均查询量) × 平均 token 数 × 单价 × 30

假设日均查询 10 万次、每次 query 约 50 token: - text-embedding-3-small:100,000 × 50 × $0.00000002 × 30 ≈ $3/月 - text-embedding-3-large:同条件约 $19.5/月

文档索引是一次性成本,查询是持续成本,两者要分开算。

3. 向量数据库兼容性

不同维度的 embedding 需要提前建好对应的 index。从 text-embedding-3-small(1536 维)切换到 BGE-M3(1024 维)意味着要重建整个向量库,迁移成本不小。选型时把这个锁定成本算进去。


可操作的接入示例

以 Python + Qdrant 为例,展示一个最小可运行的语义搜索流程:

from openai import OpenAI
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct

client = OpenAI()
qdrant = QdrantClient(":memory:")

# 建集合,维度与模型对齐
qdrant.create_collection(
    collection_name="docs",
    vectors_config=VectorParams(size=1536, distance=Distance.COSINE),
)

def embed(text: str) -> list[float]:
    resp = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )
    return resp.data[0].embedding

# 索引文档
docs = ["语义搜索的核心是向量相似度", "RAG 把检索和生成结合起来"]
points = [
    PointStruct(id=i, vector=embed(doc), payload={"text": doc})
    for i, doc in enumerate(docs)
]
qdrant.upsert(collection_name="docs", points=points)

# 查询
query_vec = embed("向量检索怎么工作")
results = qdrant.search(collection_name="docs", query_vector=query_vec, limit=2)
for r in results:
    print(r.score, r.payload["text"])

切换模型只需改 model 参数和 size,架构不变。


我在实际项目里接触过不少团队在 embedding 这层踩坑,最后发现 API 调用开销比预期高好几倍,或者中文召回率跑不起来。如果你的场景需要同时接入 OpenAI embedding、BGE 或 Cohere 等多家模型做 A/B 对比,可以考虑 XycAi 词元平台——一个接口兼容 OpenAI 格式、覆盖 200+ 全球模型的 API 聚合平台,官方模型低至官方价 1.4 折起,支持全球节点 CN2 直连,企业用户可开全球发票,换模型测效果只需改一行 base_url,省去多账号管理的麻烦。

一个 API 接入 200+ 全球 AI 模型

GPT · Claude · Gemini 官方模型低至 1.4 折起,持大模型算法备案号,CN2 直连低至 5ms,可开全球合规发票。

立即体验 XycAi →