向量数据库教程

接入与开发

给 RAG 初学者的向量数据库速查:从选型口径、写入流程到检索参数,一条条讲清该做什么、怎么验证。

刚上手 RAG 的人常卡在同一处:文档切好了、向量模型也调通了,但不知道该把向量存哪、怎么建索引、检索结果为什么总不对。这篇把向量数据库的选型判断、写入前准备、检索参数调试整理成可照着做的顺序,不吹某一款产品,只给能落地的检查项。

刚上手 RAG 的人常卡在同一处:文档切好了、嵌入模型的接口也调通了,但不知道该把向量存哪、索引怎么建、检索回来为什么总是不对。这时候缺的不是模型,而是一套能照着走的顺序。

这篇不吹某一款产品,只把向量数据库的选型判断、写入前准备、检索参数调试整理成可执行的检查项。你按顺序走一遍,基本能定位问题出在哪一环,也能知道自己到底需不需要上向量数据库。

先搞清楚它替你干了什么

向量库里存的东西很朴素:一串数字(向量)、一条主键、外加一堆元数据。它真正解决的问题只有一个——在海量向量里快速找出最接近的几个。别指望它顺手把文本切好、把问题答好,那些是切块策略和上层逻辑的事。

写入和检索是两条独立链路。写入决定库里数据长什么样,检索决定你拿到什么。结果不对时,先分清是写入时数据就有问题,还是检索参数没配好,别一上来就怪数据库。

  • 数据量很小,每次全量扫一遍也能忍——先用内存数组或本地文件就够;
  • 只是本地试玩、验证思路——嵌入式库比起一个服务省事得多;
  • 需要跨团队共享、有权限隔离和备份要求——这时候才值得上正经的向量数据库。

选型只看几个能落地的维度

选型第一步不是比功能表,而是先定部署形态。托管服务、可自托管服务、嵌入式库,这三者的运维成本和将来迁移的难度差得很远。形态定了,剩下的才是在同类里挑。

维度要问清楚什么不适用的情况
过滤能力能不能在检索时按元数据筛,筛选是否走索引数据没有权限或分类维度时可放宽
混合查询向量相似度加结构化条件能否一次查完纯语义召回、不需要条件时可忽略
索引重建代价换模型或改参数后重建要多久、要不要停机数据量小、可接受停服重建时可忽略
导出与备份能不能把向量和元数据整份导出打算长期锁死在一家时可暂时不看

别只盯着各家榜单的名次,排行口径不一样,参考价值有限。到 向量数据库目录(/stacks/vector-dbs) 按你自己的场景逐项对照更靠谱。兜底思路是:优先选过滤和导出做得扎实的,因为将来换库时,这两项决定了你跑路的成本。

写入:先对齐向量模型再灌数据

写入前必须定死三件事:用哪个嵌入模型、向量多少维、距离度量是什么。这三个参数一变,已有数据基本得整库重来,没有捷径。定之前先去站内的模型资料库把口径核对清楚,别凭印象。

  1. 定参数确定嵌入模型、维度和距离度量,写进项目配置,后续所有写入和查询都读同一个配置。
  2. 试批次从几百条一批开始试,逐步加大到几千条。观察一次写入的失败率和耗时,哪个体量开始频繁超时,就往回收一档。
  3. 带元数据每条记录都带上来源、时间、权限、文档类型这类可过滤字段。等数据灌完再补,代价会大很多。
  4. 抽样验证写完后随机抽几条,用同一条文本的向量去查,看能不能召回自己。查不到说明写入链路有问题。

批次大小没有万能值,取决于你的网络、单条向量大小和服务端限制。判断标准很简单:一次写入的失败率明显抬头,或者单批耗时超过你的接受范围,就是批次太大。

检索:先能查到,再谈查得准

第一次跑通只需要三件事:用同一个模型生成的 query 向量、top-k 取多少、要不要带元数据过滤。这个阶段先别看相似度分数的绝对值,它跨模型、跨库都不可比,看排序就够了。

结果不对,按下面这个顺序排查,基本能从最可能的原因排到最少见的。

  • 切块是不是把一句完整的话拆成了两半,导致语义被割裂;
  • 过滤条件是不是写得过死,把本该命中的结果挡在外面;
  • top-k 是不是太小,正确答案排在后面根本没进来;
  • 距离度量和索引类型是否和写入时一致,不一致会安静地给你错结果。

想提升相关性,优先级是加重排,而不是盲目把 top-k 调大。top-k 调大只会带进更多噪声,重排能把真正相关的顶上来。具体思路可以看 rag-rerank-guide,先攒一批真实问题做小样本评测,再动手调参数。

新手最容易踩的几个坑

现象多半是什么原因怎么确认
换模型后结果忽好忽坏只重算了新数据,库里混了两种维度统计库里向量的维度分布是否一致
一加过滤就变慢元数据字段没建索引,查询走了全表扫对比带过滤和不带过滤的延迟差距
召回老是那几条旧内容更新用覆盖写,旧向量没清干净按主键查一下是不是存在重复记录

还有一个容易忽略的点:向量模型和数据库是两套独立的东西,升级任意一边都要先小范围验证,确认维度和语义没变,再全量推进。别在深夜一次性改完,出了事很难回滚。

下一步把选型口径落到具体产品上,先去目录页按过滤、导出、部署形态筛一遍,再回头定你的写入参数。

常见问题

向量数据库必须单独部署一套服务吗?

不一定。数据量小、只有单个应用用,嵌入式库或直接跑在应用进程里更省事;出现多应用共用、需要在线扩容或独立备份时,再拆成单独服务。判断标准是「有没有第二个使用方」和「重启应用会不会影响别人」,两者都否就先别拆。

为什么我明明写进去了,检索却查不到?

先确认写入和检索用的是同一个嵌入模型、同一套维度;再检查是否有元数据过滤把结果全筛掉了;最后看写入是否异步,数据可能还没落盘。按这三步排查,多数「查不到」是模型不一致或过滤条件写错。

向量检索和关键词检索该用哪个?

看你要找的是「意思相近」还是「字面命中」。问答、语义召回偏向量;编号、专有名词、精确匹配偏关键词。多数实际项目是两条一起召回再合并去重。两者原理对比可参考 vector-vs-fulltext-search。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。