最近在折腾MCP,想给Claude挂一个知识库检索的能力。现在用Python写了个MCP server,里面接的是Qdrant,但遇到一个纠结的点:不同用户上传的文档,是直接塞进一个全局的大collection里,还是每个用户/每个项目动态创建独立的collection?动态建的话,感觉MCP的tool定义会变得很复杂,而且向量库的连接池管理也是个问题。另外,元数据过滤在Qdrant里做,性能会不会比直接分collection差很多?有没有踩过坑的朋友,求指点一下。
楼主
19天前
MCP服务器接向量数据库做RAG,大家是直接写死还是动态建集合?
请 登录 后发表回复
全部回复
共 23 条
2楼
2天前
我们项目也是MCP挂Qdrant,最后选了单collection加租户字段过滤。Qdrant的payload索引建好之后,按user_id过滤的性能损耗其实很小,几百万点级别基本无感。动态建collection的坑在于MCP那边tool schema会越写越乱,而且连接池和collection生命周期管理很容易出并发问题。除非你有强隔离需求或者单租户数据量特别大,否则没必要拆。
3楼
21小时前
单collection加元数据过滤就够了,分collection反而容易踩连接池的坑,Qdrant过滤性能没那么拉胯。
4楼
20小时前
我们之前也纠结过这个,后来选了单collection加tenant_id字段过滤,Qdrant的payload索引建好之后性能其实没差多少,维护成本低太多了。动态建集合看着干净,但用户一多集合数量爆炸,MCP那边tool参数也得跟着变,纯属给自己找麻烦。真要隔离要求高的话,可以按项目粗粒度分几个collection,别按用户分。连接池那块Qdrant客户端本身还好,不用太担心。