向量库选型:FAISS还是托管服务

先把结论摆这儿:百万条以内、查询不密、团队没人想管运维,直接上托管的向量服务;数据量大、QPS高、又有人愿意盯着机器,自己跑FAISS更省钱也更可控。中间那段最纠结,下面是我去年到今年踩过两轮坑后的真实账。

我为什么会同时碰到这两条路

起因特无聊。我给一个内部文档问答做检索,第一版就是pip install faiss-cpu,本地一个IndexFlatL2怼上去,几千条PDF切片,余弦相似度跑得飞快,demo效果惊艳。结果上线两周,文档涨到二十多万条,内存吃到6个多G,容器一重启索引全没了------FAISS默认不落盘,我得自己write_index再挂存储。那一刻我才意识到,跑得起来和能在生产待着,是两码事。

后来另一个项目数据量更小,但老板要求"别再让人半夜爬起来重建索引了",我就换了托管服务试水。两条路都走了一遍,账也算明白了。

三个维度的对比

|-----|------------------------------|-------------------------|
| 维度 | 自跑 FAISS | 托管向量服务 |
| 数据量 | 百万级以上才显出性价比,IVF/HNSW调好了单机扛得住 | 几千到几百万都行,扩容是改个配置的事 |
| 运维 | 持久化、备份、重建、扩副本全自己来,半夜报警找你 | 基本不用管,挂了是对方的事 |
| 成本 | 算力买断,量越大单条越便宜;人力成本是隐藏大头 | 按量付费,小数据几乎白嫖,数据涨上去账单会吓人 |
| 上手 | 要懂索引类型、量化、召回率调参 | 建库、灌数据、调接口,半天能通 |
| 可控性 | 想怎么改怎么改,能塞进现有镜像 | 受配额和功能边界限制,黑盒 |

各自适合谁

自跑FAISS适合:数据量确实大(我那个二十万还不算大,真正划算是过了百万),团队里有人能也愿意管基础设施,对延迟和召回率有强要求要自己调索引,或者数据敏感不能出本地网络。FAISS本身免费,GPU版召回又快又准,前提是你得伺候它。

托管服务适合:数据量中小、增长不爆炸,人手紧没人想碰运维,要的是"今天就能用上"。我那个小项目最后留在了托管上,理由特现实------就我一个人,我不想再为重建索引熬夜。

一个跑题但真实的小插曲

中途我还干过一件蠢事。为了省托管费用,我把检索这层从托管搬回FAISS自建,结果RAG的整条链路里,真正麻烦的根本不是向量库,而是上层的切片策略、重排、prompt编排。向量库换来换去,效果差异远没我想的大,反倒是把这些胶水逻辑串起来花了我整整三天。

后来我换了个思路,没再手写那一坨编排代码。我用了一个零代码就能搭智能体的平台,把知识库(RAG)挂上去、选个现成大模型、配几句提示词,拖一拖配一配,一个文档问答的小助手就出来了,前后一个下午。说实话当时有点惊到------我对着配置面板填了几个框,发布成API,它真就在飞书里回我问题了,中间一行检索代码没写。

缺点也有,得说清楚:第一版回答特别干,像在背文档,我又回去补了知识库的切片和提示词才像个人话;它也就干"把检索和模型串起来"这种杂活,真要做复杂的多跳推理还得你自己想清楚逻辑。但对我这种"向量库到底自建还是托管"已经纠结到掉头发的人,能不碰底层基础设施直接出个能用的东西,已经够香了。

结论

别一上来就纠结FAISS还是托管。先问自己两件事:数据会涨到多少,有没有人愿意管机器。小、没人管,托管;大、有人管,FAISS。而如果你跟我一样,发现真正费时的是上层那堆编排,那把向量库这层交出去、自己专心调效果,可能才是省力的解。

你们现在向量库这块是自建还是托管?数据量多大遇到瓶颈的?评论区聊聊,我那个二十万条重建索引的坑想看看有没有人比我更惨。

(对了,模型这层我走的讯飞星辰MaaS,现成大模型API直接调,没自己部署算力,这块省心。)