pymilvus
Milvus 向量数据库官方 Python SDK,提供向量 CRUD 与相似度检索的完整 Pyth
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Milvus 向量数据库官方 Python SDK,提供向量 CRUD 与相似度检索的完整 Pyth
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下这样的场景:你在开发一个基于大语言模型的智能问答系统,用户输入「最近上映的科幻电影有哪些」,系统需要在毫秒级从数百万条电影信息中找到与这个问题语义最相似的条目。这不是简单的关键词匹配,而是要理解「科幻」「电影」「上映」这些概念的语义向量。传统关系型数据库对此无能为力,而向量数据库正是为这一场景而生——Milvus 正是这个领域的开源标杆。PyMilvus(又称 pymilvus)则是 Milvus 官方提供的 Python SDK,是全球 AI 开发者连接 Milvus 向量数据库的首选工具。截至目前,该项目在 GitHub 拥有超过 1,390 颗 Stars,被全球数千个 AI 项目依赖使用。
Milvus 是一个专门为向量相似度检索设计的开源数据库,由 Zilliz 公司主导开发并贡献给 LF AI & Data 基金会。与传统数据库以精确匹配为核心能力不同,Milvus 的核心能力是:从海量向量中找到「最相似的 K 个」或「相似度超过阈值的所有向量」。
Milvus 项目最早于 2019 年发布,经历了从 1.x 到 2.x 的重大架构演进——2.x 版本引入了分布式架构、万亿级向量支持、实时更新能力,成为企业级向量数据库的首选方案之一。Zilliz 公司作为 Milvus 的主要维护者,同时提供云端商业版本 Zilliz Cloud,进一步完善了生态。
PyMilvus 作为 Milvus 的官方 Python 客户端,扮演着「翻译官」的角色:它将 Python 开发者熟悉的 API 调用,转换为 gRPC 协议与 Milvus 服务器通信。Milvus 本身使用 Protobuf 定义接口,而 PyMilvus 在 grpc_gen/ 子目录中维护了所有 .proto 文件编译后的 Python 代码(约 30+ 个 proto 定义文件),确保 API 与服务器端完全一致。
项目支持 Milvus 2.0 ~ 2.6 全系列版本,并按版本对应关系提供 PyMilvus 客户端版本推荐,确保兼容性。
PyMilvus 的代码结构设计非常清晰,采用双层 API 并行的架构策略:
pymilvus/
├── milvus_client/ # 新版 MilvusClient API(推荐)
│ └── milvus_client.py # MilvusClient 类,简洁的 CRUD 接口
├── client/ # 旧版 gRPC 底层接口
│ ├── milvus.py # Milvus 底层连接类
│ └── ... # 各种 Handler 和 Interceptor
├── orm/ # ORM 风格高层抽象(类似 SQLAlchemy)
│ ├── collection.py # Collection 类
│ ├── partition.py # Partition 类
│ ├── schema.py # Schema 定义
│ └── utility.py # 工具函数
├── grpc_gen/ # Protobuf 生成的 gRPC 代码(自动维护)
│ ├── milvus_pb2.py # Protocol Buffer 消息定义
│ └── milvus_pb2_grpc.py # gRPC 服务 Stub
├── bulk_writer/ # 批量写入模块
└── model/ # 嵌入生成模块(milvus-model)
MilvusClient 是 v2.4+ 主推的新版 API,设计目标是简单直观:一行代码创建连接、一行代码插入向量、一行代码做相似度检索,非常适合快速上手:
from pymilvus import MilvusClient
milvus_client = MilvusClient("http://localhost:19530")
milvus_client.create_collection("movies", dimension=128)
milvus_client.insert("movies", {"vector": [0.1]*128, "title": "星际穿越"})
results = milvus_client.search("movies", data=[[0.1]*128], limit=5)
ORM 层 则适合需要精细控制的场景,提供了 Collection、Partition、Index 等类的抽象,支持 schema 定义、分区管理、索引配置等高级功能,与 SQLAlchemy 的使用体验类似。
PyMilvus 的核心通信层基于 gRPC + Protocol Buffers。所有与 Milvus 服务器的交互都通过 gRPC 双向流实现,包括:
核心依赖 grpcio>=1.66.2 和 protobuf>=5.27.2 保证了高效的序列化和传输性能。相比 HTTP/REST 方案,gRPC 在大规模向量数据传输上有显著优势。
PyMilvus 通过可选依赖组扩展了生态:
| 依赖组 | 功能 | 关键依赖 |
|---|---|---|
pymilvus[model] | 集成 milvus-model,提供嵌入向量生成能力 | pymilvus.model>=0.3.0 |
pymilvus[bulk_writer] | 批量数据导入,支持 S3/MinIO/Azure | minio, pyarrow, azure-storage-blob |
pymilvus[milvus_lite] | 单机轻量版 Milvus(无需启动服务器) | milvus-lite>=2.4.0 |
PyMilvus 提供了完整的向量操作能力:
检索是向量数据库的灵魂,PyMilvus 支持多种相似度度量方式:
# 余弦相似度检索
results = milvus_client.search(
collection_name="articles",
data=[query_embedding],
limit=10,
metric_type="COSINE",
output_fields=["title", "content"]
)
Milvus 支持多种向量索引算法(HNSW、IVF_FLAT、DISKANN 等),PyMilvus 提供了完整的索引创建和管理接口,并支持异步索引构建和索引优化任务管理。
PyMilvus 支持基于角色的访问控制(RBAC),可以创建用户、分配权限,适合企业级多租户部署场景。
pip install pymilvus
# 如需嵌入生成能力:
pip install pymilvus[model]
# 如需单机版 Milvus:
pip install pymilvus[milvus_lite]
from pymilvus import MilvusLiteClient
client = MilvusLiteClient(uri="./milvus_demo.db")
# 后续操作与连接远程服务器完全相同
这使得开发者可以在本地零配置体验完整的向量检索功能,非常适合学习和原型开发。
from pymilvus import MilvusClient
client = MilvusClient(uri="http://localhost:19530")
# 或使用 Zilliz Cloud:
client = MilvusClient(uri="https://xxx.zillizcloud.com:443", token="your_api_key")
尽管 PyMilvus 是向量数据库领域最成熟的 Python SDK,但仍有一些需要注意的地方:
1. 强依赖 Milvus 服务器:PyMilvus 本身是一个客户端库,不能独立运行,必须有一个 Milvus 服务器实例(本地或远程)。好在 milvus-lite 选项在一定程度上缓解了这个问题。
2. gRPC 版本的维护负担:由于 Milvus 协议迭代较快,PyMilvus 需要持续同步 proto 文件的更新,不同版本间的兼容性需要仔细匹配(README 提供了详细的版本对应表)。
3. 异步支持尚不完善:虽然有 async_grpc_handler.py 和 async_milvus_client.py,但异步生态相比同步 API 成熟度不足,在高并发场景下可能需要额外的工程适配。
4. 批量写入的学习曲线:bulk_writer 模块功能强大,但配置 MinIO/S3 等对象存储的步骤较繁琐,文档相对缺乏。
随着大语言模型(LLM)的爆发,检索增强生成(RAG) 已成为构建私有知识问答系统的主流方案。在 RAG 架构中,向量数据库负责将文档切分后 embedding 并存储,用户提问时将问题 embedding 后检索最相关文档片段,再将结果注入 LLM 的上下文窗口生成答案。
Milvus + PyMilvus 是这一架构的核心组合之一。PyMilvus 提供了从文档 embedding 到向量存储再到相似度检索的完整 Python 工具链,全球已有数千个项目基于此构建 RAG 系统、推荐引擎、语义搜索等 AI 应用。根据公开数据,Milvus 项目的 GitHub Stars 超过 3.1 万,是向量数据库领域最活跃的开源项目,PyMilvus 作为其官方客户端,生态价值不言而喻。
总结:PyMilvus 是 AI 向量检索领域的核心基础设施之一。它以 Pythonic 的 API 设计、双层抽象架构、完善的版本兼容策略,为全球开发者提供了可靠、高效的 Milvus 连接方案。无论是快速搭建 RAG 原型,还是构建企业级多租户向量检索平台,PyMilvus 都是值得信赖的选择。