🐦 Milvus 是一个专为大规模应用设计的高性能向量数据库。它通过高效组织和搜索海量非结构化数据(如文本、图像和多模态信息),为 AI 应用提供强大动力。
🧑💻 Milvus 使用 Go 和 C++ 编写,通过 CPU/GPU 硬件加速实现业界领先的向量搜索性能。得益于其完全分布式和 K8s 原生架构,Milvus 可以水平扩展,在数十亿向量上处理成千上万的搜索查询,并通过实时流式更新保持数据新鲜。Milvus 也支持单机部署的独立模式。Milvus Lite 是一个轻量级版本,适合通过 pip install 在 Python 中快速上手。
想零配置使用 Milvus?免费试用 Zilliz Cloud ☁️。Milvus 在 Zilliz Cloud 上作为全托管服务提供,包含无服务器、专属集群和自带云选项。
关于如何使用 Milvus 的问题,请加入 Discord 社区获取帮助。报告问题、提交 Bug 和功能请求,请在 GitHub Issues 中提交,或在 Discussions 中提问。
Milvus 开源项目隶属于 LF AI & Data Foundation,采用 Apache 2.0 许可证分发,Zilliz 是其主要贡献者。
$ pip install -U pymilvus
这将安装 pymilvus,即 Milvus 的 Python SDK。使用 MilvusClient 创建客户端:
from pymilvus import MilvusClient
pymilvus[milvus-lite] 来尝试 Milvus Lite 以快速上手。要创建本地向量数据库,只需使用本地文件名实例化一个客户端以持久化数据:python
client = MilvusClient("milvus_demo.db")
python
client = MilvusClient(
uri="<自托管_milvus_或_zilliz_cloud_的端点>",
token="<用户名和密码_或_zilliz_cloud_api密钥>")
使用客户端,你可以创建集合:
client.create_collection(
collection_name="demo_collection",
dimension=768, # 本演示中使用的向量维度为 768
)
插入数据:
res = client.insert(collection_name="demo_collection", data=data)
执行向量搜索:
query_vectors = embedding_fn.encode_queries(["Who is Alan Turing?", "What is AI?"])
res = client.search(
collection_name="demo_collection", # 目标集合
data=query_vectors, # 一个或多个查询向量的列表,支持批量
limit=2, # 返回多少结果 (topK)
output_fields=["vector", "text", "subject"], # 返回哪些字段
)
Milvus 专为大规模向量搜索而设计。它存储向量(非结构化数据的表示)以及其他标量数据类型(如整数、字符串和 JSON 对象)。用户可以进行高效的向量搜索,并支持元数据过滤或混合搜索。以下是开发者选择 Milvus 作为 AI 应用向量数据库的原因:
大规模高性能与高可用性
* Milvus 采用分布式架构,将计算与存储分离。Milvus 可以水平扩展并适应不同的流量模式,通过独立增加查询节点来处理读密集型工作负载,增加数据节点来处理写密集型工作负载,从而实现最佳性能。K8s 上的无状态微服务允许快速故障恢复,确保高可用性。对副本的支持通过在多个查询节点上加载数据段,进一步增强了容错能力和吞吐量。查看性能基准测试进行性能比较。
支持多种向量索引类型和硬件加速
* Milvus 将系统与核心向量搜索引擎分离,使其能够支持所有主流的向量索引类型,这些索引针对不同场景进行了优化,包括 HNSW、IVF、FLAT(暴力搜索)、SCANN 和 DiskANN,以及基于量化的变体和内存映射。Milvus 针对高级功能(如元数据过滤和范围搜索)优化了向量搜索。此外,Milvus 实现了硬件加速以提升向量搜索性能,并支持 GPU 索引,例如 NVIDIA 的 CAGRA。
灵活的多租户与热/冷存储
* Milvus 通过数据库、集合、分区或分区键级别的隔离来支持多租户。这种灵活的策略允许单个集群处理数百到数百万个租户,同时确保优化的搜索性能和灵活的访问控制。Milvus 通过热/冷存储提高了成本效益。频繁访问的热数据可以存储在内存或 SSD 中以获得更好的性能,而较少访问的冷数据则保存在速度较慢但成本效益更高的存储上。这种机制可以在保持关键任务高性能的同时显著降低成本。
用于全文搜索和混合搜索的稀疏向量
* 除了通过稠密向量进行语义搜索外,Milvus 还原生支持使用 BM25 进行全文搜索,以及学习到的稀疏嵌入,如 SPLADE 和 BGE-M3。用户可以在同一集合中存储稀疏向量和稠密向量,并定义函数来对来自多个搜索请求的结果进行重新排序。查看语义搜索 + 全文搜索的混合搜索示例。
数据安全与细粒度访问控制
* Milvus 通过实施强制用户认证、TLS 加密和基于角色的访问控制(RBAC)来确保数据安全。用户认证确保只有拥有有效凭据的授权用户才能访问数据库,而 TLS 加密则保护网络内的所有通信。此外,RBAC 允许根据用户的角色分配特定权限,实现细粒度的访问控制。这些特性使 Milvus 成为企业应用的稳健且安全的选择,保护敏感数据免受未经授权的访问和潜在破坏。
Milvus 受到 AI 开发者的信赖,用于构建文本和图像搜索、检索增强生成(RAG)和推荐系统等应用。Milvus 为初创公司和企业的许多关键业务提供动力。
以下是一些演示和教程,展示如何使用 Milvus 构建各种类型的 AI 应用:
你可以探索全面的教程概览,涵盖检索增强生成(RAG)、语义搜索、混合搜索、问答系统、推荐系统以及各种快速入门指南等主题。这些资源旨在帮助你快速高效地入门。
| 教程 | 用例 | 相关 Milvus 特性 |
|---|---|---|
| 使用 Milvus 构建 RAG | RAG | 向量搜索 |
| 高级 RAG 优化 | RAG | 向量搜索,全文搜索 |
| 使用 Milvus 进行全文搜索 | 文本搜索 | 全文搜索 |
| 使用 Milvus 进行混合搜索 | 混合搜索 | 混合搜索,多向量,稠密嵌入,稀疏嵌入 |
| 使用 Milvus 进行图像搜索 | 语义搜索 | 向量搜索,动态字段 |
| 使用多向量进行多模态搜索 | 语义搜索 | 多向量,混合搜索 |
| 使用 Milvus 进行电影推荐 | 推荐系统 | 向量搜索 |
| 使用 Milvus 进行图 RAG | RAG | 图搜索 |
| 使用 Milvus 进行上下文检索 | 快速入门 | 向量搜索 |
| 向量可视化 | 快速入门 | 向量搜索 |
| 使用 Milvus 进行 HDBSCAN 聚类 | 快速入门 | 向量搜索 |
| 使用 ColPali 与 Milvus 进行多模态检索 | 快速入门 | 向量搜索 |
|
|
|
| 图像搜索 | RAG | 药物发现 |
|---|
Milvus 与一套全面的 AI 开发工具集成,例如 LangChain、LlamaIndex、OpenAI 和 HuggingFace,使其成为检索增强生成(RAG)等 GenAI 应用的理想向量存储。Milvus 适用于开源嵌入模型和嵌入服务,涵盖文本、图像和视频模态。Milvus 还提供了一个便捷的工具 pymilvus[model],用户可以使用简单的包装代码将非结构化数据转换为向量嵌入,并利用重排序模型来优化搜索结果。Milvus 生态系统还包括用于基于 GUI 管理的 Attu、用于系统调试的 Birdwatcher、用于监控的 Prometheus/Grafana、用于数据同步的 Milvus CDC、用于数据迁移的 VTS 以及用于构建搜索管道的数据连接器,如 Spark、Kafka、Fivetran 和 Airbyte。
查看 https://milvus.io/docs/integrations_overview.md 获取更多详情。
有关安装、使用、部署和管理的指南,请查阅 Milvus 文档。有关技术里程碑和增强提案,请查看 GitHub 上的 issues。
Milvus 开源项目欢迎所有人的贡献。有关提交补丁和开发工作流程的详细信息,请参阅贡献指南。查看我们的社区仓库以了解项目治理并访问更多社区资源。
要求:
Linux 系统(推荐 Ubuntu 20.04 或更高版本):
bash
Go: >= 1.21
CMake: >= 3.26.4 && CMake < 4
GCC: 9.5
Python: > 3.8 and <= 3.11
使用 x86_64 的 MacOS 系统(推荐 Big Sur 11.5 或更高版本):
bash
Go: >= 1.21
CMake: >= 3.26.4 && CMake < 4
llvm: >= 15
Python: > 3.8 and <= 3.11
使用 Apple Silicon 的 MacOS 系统(推荐 Monterey 12.0.1 或更高版本):
```bash
Go: >= 1.21