做 RAG 最容易翻车的一步往往不是大模型,而是检索那头:向量召回一堆不相关片段,再强的生成模型也救不回来。嵌入模型怎么挑,网上答案一堆却各说各的。这篇不排名次,只把选型时要看的几个维度拆开——中文语料表现、向量维度、可输入长度、自建还是调接口、要不要配重排,并给出按场景对照的判断顺序,让你在自己的数据上试出来。
做 RAG 最容易翻车的一步往往不是生成那头,而是检索:向量召回一堆不相关片段,再强的生成模型也救不回来。嵌入模型怎么挑,网上答案一堆却各说各的,因为大家的数据、语种、延迟要求根本不一样。这篇不排名次,只把选型时要看的几个维度拆开讲。
思路很简单:先定维度,再按场景对号,最后用自己的真实问题跑一页对照表。看到任何「某某模型最好」的说法,先问一句——在什么语料、什么切块、什么并发下得出的?把这个问题问清楚,你基本不会被带偏。下面按顺序来。
选型前先定这五个维度
别一上来就翻榜单。先把这五个维度写成一张表,每个候选模型填一列,团队讨论时对着填,比互相传「我看某篇测评说」高效得多。这五个维度基本决定了你能不能落地,而不只是纸面效果。
- 中文与领域语料表现:通用榜单强不代表你的行业术语、缩写、表号也能召回,先用自己 50-100 条真实问题做召回测试
- 向量维度与存储成本:维度越高向量库占用越大、检索越慢,先确认业务能否接受降维或量化存储
- 可输入长度:长文档切块策略要和模型的输入上限对齐,切太长会被截断,切太碎丢上下文
- 部署形态:调官方或聚合接口省事,自建可控但要占显存、要维护服务,交付与合规要求高时倾向自建
- 要不要配重排:只靠向量召回在语义相近但答案不同的问题上容易串味,重排是补召回精度的常见一层
- 召回测试集
- 从真实提问里抽一批问题,每条标注正确答案所在的片段,用来看模型能不能把正确片段捞进前几条
- 前几条噪音比例
- 正确片段进来了,但同批还夹着一堆无关片段,生成阶段照样会被带跑
- 切块
- 把长文档切成小块再向量化,块长、重叠、是否带标题都要在这里定,切错了换模型也白搭
按你的场景对号:中文库、长文档、低延迟
同一个模型,在中文知识库和高并发客服里表现可能完全相反。下面按常见场景给对照思路,重点是判断顺序:先看语种和语料,再看长度和延迟,最后才纠结细微效果差。
| 你的场景 | 先看什么 | 常见取舍 |
|---|---|---|
| 中文知识库问答 | 中文语料上的召回表现 | 多语言模型通常能用但未必最优,别只看英文榜单结论 |
| 长文档、合同类 | 切块策略与模型输入上限 | 先解决截断问题,否则换模型也救不回关键条款 |
| 高并发低延迟 | 维度高低、模型大小、是否能量化 | 维度更低响应更快也更好扩,复杂语义问题上召回会下降 |
| 多语言客服 | 目标语种是否都在覆盖内 | 小语种差别很大,必须用真实语料逐语种试 |
| 个人笔记、小库 | 全文或关键词检索够不够 | 文档量很小时,上向量库的收益可能抵不过维护成本 |
什么情况下不适用:检索量极小的个人笔记、几十页以内的文档,靠关键词或全文检索可能已经够用,硬上嵌入模型属于给自己找维护活。反过来,术语密集、同义改写的场景才最能体现向量召回的价值。
动手验证:一页对照表的做法
选型这件事,测出来的永远比看来的靠谱。做法不复杂:固定一份切块语料、一批问题和一个向量库参数,只换模型,把结果记在一张表里。关键是别中途改切块参数,否则前后的数据没法比。
- 固定变量同一份切块后的语料、同一批问题、同一个向量库参数,只换嵌入模型。验证方法:跑之前把参数写下来,中途不改。
- 看四个指标命中率(正确片段是否进前几条)、前几条里的噪音比例、单条查询耗时、索引占用。验证方法:每个模型都记同样四项,缺一项就没法横向比。
- 记录取舍把每个模型的表现与部署成本写在一行里,方便和团队对齐。验证方法:让没参与测试的同事看这张表,能说清为什么选它就算合格。
- 小范围复测选出两三个候选,再拿真实用户问题复测一遍,最后才考虑接重排或换向量库。验证方法:复测问题集不要和第一轮完全相同。
- 对齐规格与价格模型规格与提供方到 /embeddings 和 /models 翻当期清单,价格与调用口径到 /official-api 核对当时的数字。
# 伪流程,按自己技术栈替换
# 1) 固定切块语料一份,确保所有模型用同一份
# 2) 对每个候选模型跑同一批问题,输出 前K 结果
# 3) 统计:命中率 / 噪音比例 / 单条耗时 / 索引体积
# 4) 结果写进同一张表,一行一个模型常见踩坑与自查
坑基本集中在两处:要么太早下结论,要么换了模型忘了重建索引。下面这几条按出现频率排,上线前逐条自查一遍。
- 拿榜单一句话定终身:不同榜单的语料、任务类型不同,结论未必迁移到你的场景
- 换模型不重建索引:向量空间不同,换了模型必须整库重跑,否则召回是乱的
- 把嵌入模型当生成模型使:它只做相似度表示,别指望它答问题
- 忽略版本与快照:同一模型不同版本向量不通用,到 /models 记下你实际用的那一版
- 自建忽略显存与并发:小模型也要占显存,并发上来要先算一遍,可参考 /models/deploy 的测算思路
自查顺序建议:先确认索引和模型版本对得上,再看召回质量,最后才调生成端提示词。顺序反了,你会一直在调一个本来没问题的环节。
下一步把候选模型的规格、提供方和当期价格摊开比一遍,再用自己的问题集跑那张对照表,选型就不再靠感觉。→常见问题
嵌入模型是不是越大越好?
不一定。参数大通常语义表征更细,但也更慢、更占显存,索引成本更高。很多中文检索任务上,中等规模模型配好切块与重排,效果和体验反而更稳。建议拿你真实的一批问题做召回率对比,而不是只看模型规模。
调接口和自己部署,怎么选?
看三点:数据能不能出内网、调用量大小、要不要跟其他服务共机房。量小且合规允许,调接口最省事;数据敏感或量大到单价敏感,自建更划算。自建还要算显存和并发上限,可以先到站内做一轮部署测算再决定。
做完嵌入还要不要加重排?
看召回质量。如果正确答案经常进前几条但排序靠后,加重排收益明显;如果正确答案根本进不了候选集,先解决切块、模型和查询改写,重排救不了。可以先记录噪音比例,再决定这一步。