RAG混合多向量库,不同业务使用不同向量引擎

一套 RAG 系统如果同时服务合同问答、产品手册、客服知识等多个业务,把所有向量塞进同一个库,不仅召回容易互相干扰,权限和成本也不好控制。
RAG 混合多向量库的做法,就是按业务把数据分发到不同的向量引擎,让每个业务独立建库、独立检索。
下面用 Chroma 和 Qdrant 组合演示,零基础也能跟着操作。

先想清楚:什么时候才需要拆开向量引擎

不是所有 RAG 系统都需要多向量库。
如果你的业务数据只有几万条、检索量不大,一个库就够了。
真正需要拆分的场景主要有三类:

  • 业务间有权限隔离要求,比如内部合同和公开手册不能混查。
  • 不同业务需要不同的检索策略,比如一个用相似度阈值,一个用关键词过滤。
  • 数据量级别差异大,比如一个业务几千万条,另一个只有几千条,混在一起会拖慢小业务的检索速度。

准备环境:装好两个向量库客户端

这里用 Chroma 做本地轻量存储,Qdrant 做独立服务,分别模拟两个业务。
先安装依赖:

pip install chromadb qdrant-client

如果选择 Milvus,还需要装 pymilvus
注意:每个客户端版本要和向量库服务端匹配,否则连接时会报版本兼容错误。

写一个路由层:按业务分发到对应向量库

核心思路是封装一个 get_client 函数,根据业务标识返回不同的客户端对象:

from chromadb import PersistentClient
from qdrant_client import QdrantClient

def get_client(biz):
    if biz == "contract":
        return PersistentClient(path="./chroma_contract")
    elif biz == "manual":
        return QdrantClient(host="localhost", port=6333)
    else:
        raise ValueError(f"未知业务: {biz}")

写入和查询也走同一个路由入口:

def add_docs(biz, collection, texts, metadatas):
    client = get_client(biz)
    if biz == "contract":
        col = client.get_or_create_collection(collection)
        col.add(documents=texts, metadatas=metadatas,
                ids=[f"c_{i}" for i in range(len(texts))])
    else:
        client.create_collection(collection)
        client.upsert(collection,
                      points=[str(i) for i in range(len(texts))],
                      payloads=metadatas,
                      vectors=embeddings)

这里的 embeddings 需要预先用同一个模型生成。两个库的向量维度必须一致,否则查询时无法复用同一套 embedding 逻辑。

避坑:维度、连接和集合名最容易出问题

  • Embedding 模型要统一。换模型会导致新旧数据向量维度不一致,检索直接报错。
  • collection 名称不能混。即使同一个业务,如果向量引擎不同,也不能沿用同名集合,避免误查。
  • Qdrant 需要先建集合。和 Chroma 的 get_or_create_collection 不同,Qdrant 的 upsert 前通常要先 recreate_collection,或者检查集合是否存在。
  • 连接超时不要用默认值。生产环境建议显式设置 timeout=30,否则 Qdrant 服务压力大时容易卡死。
  • 每个库单独备份。不同向量库的持久化文件位置不同,备份恢复命令也不同,不能用一个通用脚本处理。

验证:用同一个问题分别查两个库

先给“合同”业务写入一条“违约金上限为合同金额的 30%”,给“产品手册”业务写入一条“设备保修期为一年”。
然后分别查询:

python -c "print(rag_query('contract', '违约金怎么算'))"
python -c "print(rag_query('manual', '保修期多久'))"

确认返回结果来自对应业务,且内容不串库。
如果合同业务返回了保修期内容,说明路由或集合隔离失效,检查 get_client 的匹配逻辑。

RAG 混合多向量库的关键,不是把所有向量引擎都堆上去,而是用清晰的路由层把业务隔离好。
建议先用最小环境跑通 Chroma 和 Qdrant 的读写,再逐步替换成 Milvus、FAISS 等,遇到问题时优先核对维度、连接参数和日志。
更完整的向量库运维细节,可以继续看站内关于备份和批量导入的教程。

分享到:
上一篇
Agent限流区分用户组,免费版限制工具调用次数
下一篇
Linux KVM Zapscape虚拟机逃逸漏洞
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意