milvus-io/milvus

GitHub: milvus-io/milvus

Milvus 是一款高性能云原生向量数据库,专为海量非结构化数据的存储和高效近似最近邻检索而设计,是构建 RAG、语义搜索和推荐系统等 AI 应用的核心基础设施。

Stars: 43296 | Forks: 3882

milvus banner
license docker-pull-count fully-managed-milvus fully-managed-milvus tutorials slack discord twitter
## 什么是 Milvus? 🐦 [Milvus](https://milvus.io/) 是一个专为扩展而构建的高性能向量数据库。它通过高效组织和搜索海量非结构化数据(如文本、图像和多模态信息)为 AI 应用程序提供支持。 🧑‍💻 Milvus 使用 Go 和 C++ 编写,实现了 CPU/GPU 硬件加速,以实现一流的向量搜索性能。得益于其[完全分布式和 K8s 原生架构](https://milvus.io/docs/overview.md#What-Makes-Milvus-so-Scalable),Milvus 可以横向扩展,处理数十亿向量上的数万个搜索查询,并通过实时流更新保持数据新鲜。Milvus 还支持单机部署的 [Standalone 模式](https://milvus.io/docs/install_standalone-docker.md)。[Milvus Lite](https://milvus.io/docs/milvus_lite.md) 是一个轻量级版本,适合在 python 中使用 `pip install` 快速入门。 想要零设置使用 Milvus?免费试用 [Zilliz Cloud ☁️](https://cloud.zilliz.com/signup?utm_source=partner&utm_medium=referral&utm_campaign=2024-11-04_web_github-readme_global)。Milvus 在 Zilliz Cloud 上作为完全托管的服务提供,并有 [Serverless](https://zilliz.com/serverless?utm_source=partner&utm_medium=referral&utm_campaign=2024-11-04_web_github-readme_global)、[Dedicated](https://zilliz.com/cloud?utm_source=partner&utm_medium=referral&utm_campaign=2024-11-04_web_github-readme_global) 和 [BYOC](https://zilliz.com/bring-your-own-cloud?utm_source=partner&utm_medium=referral&utm_campaign=2024-11-04_web_github-readme_global) 选项可用。 有关如何使用 Milvus 的问题,请加入 [Discord](https://discord.gg/33mfvwep3J) 上的社区获取帮助。如需报告问题,请在 GitHub [Issues](https://github.com/milvus-io/milvus/issues) 中提交 Bug 和功能请求,或者在 [Discussions](https://github.com/milvus-io/milvus/discussions) 中提问。 Milvus 开源项目 隶属于 [LF AI & Data Foundation](https://lfaidata.foundation/projects/milvus/),根据 [Apache 2.0](https://github.com/milvus-io/milvus/blob/master/LICENSE) 许可证分发,Zilliz 是其主要贡献者。 ## 快速入门 ``` $ pip install -U pymilvus ``` 这将安装 `pymilvus`,即 Milvus 的 Python SDK。使用 `MilvusClient` 创建客户端: ``` from pymilvus import MilvusClient ``` * 您也可以通过安装 `pymilvus[milvus-lite]` 来尝试 Milvus Lite 以进行快速入门。要创建本地向量数据库,只需使用本地文件名实例化客户端以持久化数据: client = MilvusClient("milvus_demo.db") * 您也可以指定凭据以连接到您部署的 [Milvus server](https://milvus.io/docs/authenticate.md?tab=docker) 或 [Zilliz Cloud](https://docs.zilliz.com/docs/quick-start): client = MilvusClient( uri="", token="") 使用客户端,您可以创建 collection: ``` client.create_collection( collection_name="demo_collection", dimension=768, # The vectors we will use in this demo have 768 dimensions ) ``` 摄入数据: ``` 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", # target collection data=query_vectors, # a list of one or more query vectors, supports batch limit=2, # how many results to return (topK) output_fields=["vector", "text", "subject"], # what fields to return ) ``` ## 为什么选择 Milvus Milvus 旨在大规模处理向量搜索。它将向量(非结构化数据的学习表示)与其他标量数据类型(如整数、字符串和 JSON 对象)一起存储。用户可以进行带元数据过滤的高效向量搜索或混合搜索。以下是开发人员选择 Milvus 作为 AI 应用程序向量数据库的原因: **大规模高性能和高可用性** * Milvus 采用[分布式架构](https://milvus.io/docs/architecture_overview.md ),将[计算](https://milvus.io/docs/data_processing.md#Data-query)和[存储](https://milvus.io/docs/data_processing.md#Data-insertion)分离。Milvus 可以横向扩展并适应各种流量模式,通过独立增加查询节点以应对读密集型工作负载和数据节点以应对写密集型工作负载来实现最佳性能。K8s 上的无状态微服务允许从故障中[快速恢复](https://milvus.io/docs/coordinator_ha.md#Coordinator-HA),确保高可用性。对[副本](https://milvus.io/docs/replica.md)的支持通过在多个查询节点上加载数据段进一步增强了容错性和吞吐量。有关性能比较,请参阅[基准测试](https://zilliz.com/vector-database-benchmark-tool)。 **支持多种向量索引类型和硬件加速** * Milvus 将系统与核心向量搜索引擎分离,允许其支持针对不同场景优化的所有主要向量索引类型,包括 HNSW、IVF、FLAT (brute-force)、SCANN 和 DiskANN,以及[基于量化](https://milvus.io/docs/index.md?tab=floating#IVFPQ)的变体和 [mmap](https://milvus.io/docs/mmap.md)。Milvus 针对高级功能(如[元数据过滤](https://milvus.io/docs/scalar_index.md#Scalar-Index)和[范围搜索](https://milvus.io/docs/single-vector-search.md#Range-search))优化了向量搜索。此外,Milvus 实现了硬件加速以增强向量搜索性能,并支持 GPU 索引,例如 NVIDIA 的 [CAGRA](https://github.com/rapidsai/cuvs)。 **灵活的多租户和冷热存储** * Milvus 通过在数据库、collection、分区或分区键级别进行隔离来支持[多租户](https://milvus.io/docs/multi_tenancy.md#Multi-tenancy-strategies)。灵活的策略允许单个集群处理成百上千甚至数百万个租户,同时也确保了优化的搜索性能和灵活的访问控制。Milvus 通过冷热存储增强了成本效益。频繁访问的热数据可以存储在内存或 SSD 上以获得更好的性能,而较少访问的冷数据则保存在较慢、性价比高的存储上。这种机制可以显著降低成本,同时保持关键任务的高性能。 **用于全文搜索和混合搜索的稀疏向量** * 除了通过稠密向量进行语义搜索外,Milvus 还原生支持使用 BM25 以及学习型稀疏嵌入(如 SPLADE 和 BGE-M3)进行[全文搜索](https://milvus.io/docs/full-text-search.md)。用户可以将稀疏向量和稠密向量存储在同一个 collection 中,并定义函数以对来自多个搜索请求的结果进行重排。请参阅[语义搜索 + 全文搜索的混合搜索](https://milvus.io/docs/full_text_search_with_milvus.md)示例。 **数据安全和细粒度访问控制** * Milvus 通过实施强制性用户认证、TLS 加密和基于角色的访问控制 (RBAC) 来确保数据安全。用户认证确保只有拥有有效凭据的授权用户才能访问数据库,而 TLS 加密则保护网络内的所有通信。此外,RBAC 允许通过根据角色向用户分配特定权限来进行细粒度的访问控制。这些功能使 Milvus 成为企业应用程序的稳健且安全的选择,保护敏感数据免受未经授权的访问和潜在 breach。 AI 开发人员信任 Milvus 来构建文本和图像搜索、检索增强生成 (RAG) 和推荐系统等应用程序。Milvus 为初创公司和企业的[许多关键任务业务](https://milvus.io/use-cases)提供支持。 ## 演示和教程 这里精选了一些演示和教程,展示如何使用 Milvus 构建各种类型的 AI 应用程序: 您可以探索涵盖检索增强生成 (RAG)、语义搜索、混合搜索、问答系统、推荐系统和各种快速入门指南等主题的详尽[教程概览](https://milvus.io/docs/tutorials-overview.md)。这些资源旨在帮助您快速高效地入门。 | 教程 | 用例 | 相关 Milvus 功能 | | -------- | -------- | --------- | | [使用 Milvus 构建 RAG](https://milvus.io/docs/build-rag-with-milvus.md) | RAG | 向量搜索 | | [高级 RAG 优化](https://milvus.io/docs/how_to_enhance_your_rag.md) | RAG | 向量搜索, 全文搜索 | | [使用 Milvus 进行全文搜索](https://milvus.io/docs/full_text_search_with_milvus.md) | 文本搜索 | 全文搜索 | | [使用 Milvus 进行混合搜索](https://milvus.io/docs/hybrid_search_with_milvus.md) | 混合搜索 | 混合搜索, 多向量, 稠密嵌入, 稀疏嵌入 | | [使用 Milvus 进行图像搜索](https://milvus.io/docs/image_similarity_search.md) | 语义搜索 | 向量搜索, 动态字段 | | [使用多向量进行多模态搜索](https://milvus.io/docs/multimodal_rag_with_milvus.md) | 语义搜索 | 多向量, 混合搜索 | | [使用 Milvus 进行电影推荐](https://milvus.io/docs/movie_recommendation_with_milvus.md) | 推荐系统 | 向量搜索 | | [使用 Milvus 进行 Graph RAG](https://milvus.io/docs/graph_rag_with_milvus.md) | RAG | 图搜索 | | [使用 Milvus 进行上下文检索](https://milvus.io/docs/contextual_retrieval_with_milvus.md) | 快速入门 | 向量搜索 | | [向量可视化](https://milvus.io/docs/vector_visualization.md) | 快速入门 | 向量搜索 | | [使用 Milvus 进行 HDBSCAN 聚类](https://milvus.io/docs/hdbscan_clustering_with_milvus.md) | 快速入门 | 向量搜索 | | [使用 ColPali 与 Milvus 进行多模态检索](https://milvus.io/docs/use_ColPali_with_milvus.md) | 快速入门 | 向量搜索 |
Image Search RAG Drug Discovery
## 生态系统与集成 Milvus 与一套综合的 [AI 开发工具](https://milvus.io/docs/integrations_overview.md)集成,例如 LangChain、LlamaIndex、OpenAI 和 HuggingFace,使其成为检索增强生成 (RAG) 等 GenAI 应用程序的理想向量存储。Milvus 同时适用于开源嵌入模型和嵌入服务,涵盖文本、图像和视频模态。Milvus 还提供了一个便捷的实用程序 [`pymilvus[model]`](https://milvus.io/docs/embeddings.md),用户可以使用简单的包装代码将非结构化数据转换为向量嵌入,并利用重排序模型优化搜索结果。Milvus 生态系统还包括用于 GUI 管理的 [Attu](https://github.com/zilliztech/attu?tab=readme-ov-file#attu)、用于系统调试的 [Birdwatcher](https://milvus.io/docs/birdwatcher_overview.md)、用于监控的 [Prometheus/Grafana](https://milvus.io/docs/monitor_overview.md)、用于数据同步的 [Milvus CDC](https://milvus.io/docs/milvus-cdc-overview.md)、用于数据迁移的 [VTS](https://github.com/zilliztech/vts?tab=readme-ov-file#vts) 以及用于构建搜索管道的 [Spark](https://milvus.io/docs/integrate_with_spark.md#Spark-Milvus-Connector-User-Guide)、[Kafka](https://github.com/zilliztech/kafka-connect-milvus?tab=readme-ov-file#kafka-connect-milvus-connector)、[Fivetran](https://fivetran.com/docs/destinations/milvus) 和 [Airbyte](https://milvus.io/docs/integrate_with_airbyte.md) 数据连接器。 查看 https://milvus.io/docs/integrations_overview.md 了解更多详情。 ## 文档 有关安装、使用、部署和管理的指南,请查看 [Milvus 文档](https://milvus.io/docs)。有关技术里程碑和改进建议,请查看 [GitHub 上的 issues](https://github.com/milvus-io/milvus/issues)。 ## 贡献 Milvus 开源项目接受所有人的贡献。有关提交补丁和开发工作流程的详细信息,请参阅[贡献指南](https://github.com/milvus-io/milvus/blob/master/CONTRIBUTING.md)。请参阅我们的[社区仓库](https://github.com/milvus-io/community)以了解项目治理并访问更多社区资源。 ### 从源代码构建 Milvus 要求: * Linux 系统(推荐 Ubuntu 20.04 或更高版本): Go: >= 1.21 CMake: >= 3.26.4 && CMake < 4 GCC: >= 11 Python: > 3.8 and <= 3.11 * 具有 x86_64 的 MacOS 系统(推荐 Big Sur 11.5 或更高版本): Go: >= 1.21 CMake: >= 3.26.4 && CMake < 4 llvm: >= 15 Python: > 3.8 and <= 3.11 * 具有 Apple Silicon 的 MacOS 系统(推荐 Monterey 12.0.1 或更高版本): Go: >= 1.21 (Arch=ARM64) CMake: >= 3.26.4 && CMake < 4 llvm: >= 15 Python: > 3.8 and <= 3.11 克隆 Milvus 仓库并构建。 ``` # 克隆 github repository $ git clone https://github.com/milvus-io/milvus.git # 安装第三方依赖 $ cd milvus/ $ ./scripts/install_deps.sh # 编译 Milvus $ make ``` 有关完整说明,请参阅[开发者文档](https://github.com/milvus-io/milvus/blob/master/DEVELOPMENT.md)。 ## 参考 在研究论文中使用 Milvus 时引用的参考: ``` @inproceedings{2021milvus, title={Milvus: A Purpose-Built Vector Data Management System}, author={Wang, Jianguo and Yi, Xiaomeng and Guo, Rentong and Jin, Hai and Xu, Peng and Li, Shengjun and Wang, Xiangyu and Guo, Xiangzhou and Li, Chengming and Xu, Xiaohai and others}, booktitle={Proceedings of the 2021 International Conference on Management of Data}, pages={2614--2627}, year={2021} } @article{2022manu, title={Manu: a cloud native vector database management system}, author={Guo, Rentong and Luan, Xiaofan and Xiang, Long and Yan, Xiao and Yi, Xiaomeng and Luo, Jigao and Cheng, Qianya and Xu, Weizhi and Luo, Jiarui and Liu, Frank and others}, journal={Proceedings of the VLDB Endowment}, volume={15}, number={12}, pages={3548--3561}, year={2022}, publisher={VLDB Endowment} } ```