最近在折腾本地部署的Llama 3做知识库问答,文档大概有几千篇PDF和Markdown。现在用的是ChromaDB存在本地,简单是简单,但检索准确率有点飘,特别是问一些跨章节的复合问题,召回的结果总是差点意思。想试试Milvus,但又担心部署和运维成本太高(我只有一台Mac Studio)。另外看到有帖子说Qdrant也很适合单机,但没深入用过。想问问大家:像我这种单机、数据量中等、主要跑开源模型做RAG的场景,到底该不该换向量库?还是说问题出在embedding模型的选择上?求过来人指点。
向量数据库搭配本地部署的RAG,选Milvus还是ChromaDB?
全部回复
共 48 条建议先换embedding模型试试,bge或gte系列对长文档跨章节的召回提升挺明显的,Chroma本身不太背锅。
如果只跑本地单机,Chroma够用,跨章节召回差更可能是embedding的问题,先换bge-m3试试。
召回飘大概率是embedding粒度问题,换库治标不治本,先试试bge-m3或混合检索吧。
说实话你这数据量ChromaDB确实会有点吃力,但换Milvus单机版又有点杀鸡用牛刀,光那一堆依赖就够你折腾的。我之前在Mac上试过Qdrant,docker起个容器就能跑,检索效果比Chroma稳不少,而且支持过滤和payload,跨章节查询会好一些。不过你提到复合问题召回差,我觉得大概率不是向量库的锅,embedding模型得先换换看,比如bge-m3或者e5-mistral,对长文档和跨段落语义的捕捉能力比默认的all-MiniLM强太多了。建议先花半天时间换embedding重跑一遍,如果提升不明显再考虑迁移Qdrant,成本比Milvus低得多。
先别急着换库,跨章节召回差大概率是embedding切块的问题,换Milvus也救不了。
Mac Studio跑Milvus其实没那么吓人,单机模式用Docker起个Milvus Lite或者standalone都行,就是内存要留够。你几千篇文档量级其实ChromaDB的HNSW索引调调参数也能救,但跨章节召回差更大概率是embedding切块策略的问题。建议先换个BGE或E5这类中文强点的embedding试试,同时把chunk重叠调大。如果换了embedding还不行再考虑Milvus,它的标量过滤和混合检索对复合查询确实比Chroma灵活些。
说实话你这数据量ChromaDB确实有点吃力了,跨章节的复合查询对召回要求高,它那默认的HNSW参数调起来太费劲。Milvus单机版其实没你想的那么重,Docker跑起来也就多占几个G内存,而且现在有Milvus Lite,Mac Studio上跑个几千文档绰绰有余。不过我更建议你先试试Qdrant,它的过滤和Payload索引比Milvus更直观,单机部署十分钟搞定。至于embedding,如果是用Llama 3默认的嵌入,换成bge-m3或者e5-mistral-7b,准确率提升可能比换库更明显,建议先交叉验证这个再动基础设施。
说实话你这个数据量级,ChromaDB的召回问题大概率不是换库能解决的。Milvus单机版部署其实没想象中重,但优化参数要折腾,Mac Studio跑起来也吃内存。建议先试试换bge-m3或者gte-large这类中文embedding,很多情况下准确率飘是向量质量不够,而不是库的检索逻辑问题。如果你真想换,Qdrant的本地模式比Milvus轻量不少,性能也够用,可以先拿小数据集对比下效果再决定。