Milvus 是一种数据库,用于存储、索引和管理深度神经网络等机器学习(ML)模型生成的海量嵌入向量。
本笔记本展示了如何使用与 Milvus 向量存储相关的功能。
您需要安装 langchain-milvus 并集成 pip install -qU langchain-milvus 才能使用此功能。
使用 Milvus 向量存储时不需要凭证。
初始化
Milvus Lite
最简单的原型开发方式是使用 Milvus Lite,所有数据存储在本地向量数据库文件中。仅支持 Flat 索引。
Milvus Server
如果数据量较大(例如超过百万向量),建议在 Docker 或 Kubernetes 上部署性能更优的 Milvus 服务器。
Milvus 服务器支持多种 indexes。利用不同索引可以显著提升检索能力并加速检索过程,满足您的具体需求。
以 Milvus Standalone 为例,启动 Docker 容器的命令如下:
这里创建 Milvus 数据库:
注意 URI 的变更。实例初始化后,可通过 127.0.0.1:9091/webui 访问本地 Web UI。
以下是用 Milvus 数据库服务创建向量存储实例的示例:
如果要使用 Zilliz 云服务(Milvus 的全托管云服务),请调整 URI 和 Token,分别对应 Zilliz 云的 Public Endpoint 和 Api key。
使用 milvus 创建数据分区(collections)
您可以将不相关的文档存储在同一个 Milvus 实例的不同集合(collections)中。
以下是创建新集合的示例:
这是检索已存储集合的示例:
管理向量存储
创建向量存储后,可通过添加和删除项目与之交互。
向向量存储添加项目
我们使用 add_documents 函数向向量存储添加项目。
从向量存储删除项目
查询向量存储
当您的向量存储已创建并添加了相关文档后,您可能在运行链(Chain)或智能体(Agent)时希望进行查询。
直接查询
相似度搜索
通过元数据过滤进行简单相似度搜索的示例如下:
带分数的相似度搜索
您也可以带分数进行搜索:
要查看 Milvus 向量存储支持的所有搜索选项,请访问 @[API reference][MilvusVectorStore]。
将向量存储转换为检索器
您还可以将向量存储转换为检索器,以便在链中更方便地使用。
混合搜索
最常见的混合搜索场景是密集+稀疏混合搜索,即通过语义向量相似度和精确关键词匹配同时检索候选结果。将两种方法的结果合并、重排序后输入大型语言模型(LLM)生成最终答案。这种方案兼顾准确性和语义理解,适用于多样化的查询场景。
全文搜索
自 Milvus 2.5 开始,Milvus 通过稀疏-BM25 方法原生支持全文搜索。该方案将 BM25 算法表示为稀疏向量,Milvus 接受原始文本输入并自动将其转换为指定字段的稀疏向量,无需手动生成稀疏嵌入。
对于全文搜索,MilvusVectorStore 接受 builtin_function 参数。通过此参数可传入 BM25BuiltInFunction 的实例。这与通常通过 VectorStore 传入密集嵌入的语义搜索不同。
以下是以 OpenAI 密集嵌入进行语义搜索、BM25 进行全文搜索的混合搜索示例:
当您使用 BM25BuiltInFunction 时,请注意全文搜索在 Milvus Standalone 和 Milvus Distributed 中可用,但在 Milvus Lite 中不可用(虽在路线图中计划未来支持)。该功能即将在 Zilliz 云(全托管 Milvus)中上线。如需更多信息,请联系 support@zilliz.com。
代码中我们定义了 BM25BuiltInFunction 的实例并传入 Milvus 对象。BM25BuiltInFunction 是 Milvus 中 Function 的轻量级封装类。我们可通过 OpenAIEmbeddings 初始化支持密集+稀疏混合搜索的 Milvus 向量存储实例。
BM25BuiltInFunction 不需要客户端传入语料或训练数据,所有处理均在 Milvus 服务器端完成,用户无需关心词汇表和语料。此外,用户可通过自定义 analyzer 实现 BM25 的文本处理逻辑。
候选重排序
在首次检索阶段后,需要对候选结果进行重排序以获得更好的结果。更多重排序实现细节请参考 Reranking。
以下是加权重排序示例:
检索增强生成(RAG)的用法
关于如何使用此向量存储实现检索增强生成(RAG),请参考以下章节:
多用户检索
构建检索应用时通常需要支持多用户。这意味着不仅要存储单个用户的数据,还要为不同用户存储独立数据且互不可见。
Milvus 建议使用 partition_key 实现多租户。示例如下:
分区键功能在 Milvus Lite 中不可用,如需使用需启动 Milvus 服务器(如上所述)。
执行分区键搜索时,应在布尔表达式中包含以下任一内容:
search_kwargs={"expr": '<partition_key> == "xxxx"'}
search_kwargs={"expr": '<partition_key> == in ["xxx", "xxx"]'}
请将 <partition_key> 替换为指定的分区键字段名称。
Milvus 会根据指定的分区键进行分区,根据分区键过滤实体,并在过滤后的实体中进行搜索。
API 参考
如需了解 Milvus 向量存储的所有功能和使用配置的详细文档,请访问 API reference。
官方原文:src/oss/python/integrations/vectorstores/milvus.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。
Last modified on November 3, 2026