Milvus 向量数据库:核心原理与 Python 实战
介绍 Milvus 向量数据库的核心概念及架构,通过 Python 结合 sentence-transformers 模型实现语义检索实战。内容涵盖数据模型、距离度量、Milvus Lite 部署方式,以及完整的代码示例,展示如何将文本向量化并存储至 Milvus,实现基于余弦相似度的语义搜索,为构建 RAG 系统奠定基础。

介绍 Milvus 向量数据库的核心概念及架构,通过 Python 结合 sentence-transformers 模型实现语义检索实战。内容涵盖数据模型、距离度量、Milvus Lite 部署方式,以及完整的代码示例,展示如何将文本向量化并存储至 Milvus,实现基于余弦相似度的语义搜索,为构建 RAG 系统奠定基础。


(图片:象征着连接与多维空间的数据网络)
在生成式 AI(Generative AI)和大语言模型(LLM)爆发的今天,**'向量数据库'**成为了技术圈的高频词汇。无论是构建企业级的知识库问答系统(RAG),还是实现以图搜图、个性化推荐,向量数据库都是不可或缺的基础设施。
而在众多向量数据库中,Milvus 作为开源界的明星项目,凭借其云原生架构、极高的性能和良好的可扩展性,成为了许多开发者的首选。
本文将带你深入浅出 Milvus,从核心理论到结合真实 AI 嵌入模型 (Embedding Model) 的可执行 Python 实战,让你快速掌握这款强大的工具。
在传统的数据库(如 MySQL、PostgreSQL)中,我们通常通过精确匹配(如 WHERE name = 'Alice')或简单的文本索引来进行搜索。
但在 AI 世界里,文本、图像、音频等非结构化数据被转换成了高维向量(Vector Embeddings)。例如,一段话可能被大模型表示为包含数百个浮点数的数组。在这个数组空间里,语义相近的句子,它们的向量距离就越近。
传统数据库无法高效处理这种'在高维空间中寻找最近邻居(Approximate Nearest Neighbor, ANN)'的问题,而这正是 Milvus 的强项。
为了用好 Milvus,我们需要先理解它的几个核心理论概念。
Milvus 的数据组织方式与关系型数据库有相似之处,但专为向量优化:
如何判断两个向量有多'像'?Milvus 支持多种距离度量方式:
Milvus 采用云原生架构,计算与存储分离。它可以单机部署,也可以在 K8s 上分布式部署。
理论说完了,我们来写代码。
得益于 Milvus 2.4 版本引入的 Milvus Lite,Python 开发者现在不需要安装 Docker,直接通过 pip 安装即可在本地以文件形式运行 Milvus。
同时,为了体现'语义检索'的魔力,我们将使用真正的开源文本向量模型 sentence-transformers 来将文字转化为向量。
我们需要安装 Milvus 的 Python 客户端,以及大名鼎鼎的 HuggingFace 向量化工具包:
pip install pymilvus sentence-transformers
创建一个名为 milvus_semantic_search.py 的文件,填入以下代码:
from pymilvus import MilvusClient
from sentence_transformers import SentenceTransformer
# ==========================================
# 1. 初始化 AI Embedding 模型
# ==========================================
# 这里使用经典的轻量级开源模型,首次运行会自动下载 (约 80MB)
print("⏳ 正在加载开源 Embedding 模型...")
model = SentenceTransformer('all-MiniLM-L6-v2')
# 获取模型输出的向量维度 (该模型维度为 384)
dimension = model.get_sentence_embedding_dimension()
print(f"✅ 模型加载完成!向量维度:{dimension}")
# ==========================================
# 2. 初始化 Milvus 客户端 (Milvus Lite 模式)
# ==========================================
# 指定一个本地文件名,Milvus Lite 会在这个文件中存储所有数据
db_name = "milvus_blog_demo.db"
client = MilvusClient(db_name)
print(f"✅ 成功连接至本地 Milvus Lite 数据库:{db_name}")
# ==========================================
# 3. 创建集合 (Collection)
# ==========================================
collection_name = "tech_articles"
# 如果集合已经存在,先删除(方便反复测试)
if client.has_collection(collection_name):
client.drop_collection(collection_name)
print(f"♻️ 已清理旧的集合:{collection_name}")
client.create_collection(
collection_name=collection_name,
dimension=dimension, # 必须与 AI 模型输出的维度一致
metric_type="COSINE" # 对于文本检索,通常推荐使用余弦相似度
)
print(f"✅ 集合 '{collection_name}' 创建成功!")
# ==========================================
# 4. 准备写入的数据并进行向量化
articles = [
,
,
,
,
]
()
vectors = model.encode(articles)
data = []
i, text (articles):
data.append({
: i,
: vectors[i].tolist(),
: text
})
insert_res = client.insert(
collection_name=collection_name,
data=data
)
()
query =
()
()
query_vector = model.encode([query])
search_res = client.search(
collection_name=collection_name,
data=query_vector.tolist(),
limit=,
output_fields=[],
search_params={:}
)
()
hits search_res:
hit hits:
score = hit[]
doc_text = hit[][]
()
(, db_name)
当你在终端运行 python milvus_semantic_search.py 时,你将看到如下输出:
⏳ 正在加载开源 Embedding 模型...
✅ 模型加载完成!向量维度:384
✅ 成功连接至本地 Milvus Lite 数据库:milvus_blog_demo.db
✅ 集合 'tech_articles' 创建成功!
⏳ 正在使用 AI 模型将文档转换为向量入库...
✅ 成功插入 5 条测试数据!
🔍 接收到用户查询:'推荐一个好用的 AI 知识库存储工具'
⏳ 正在转换查询向量并在 Milvus 中搜索...
🎉 搜索结果如下 (按语义相似度倒序排):
➜ [相似度:0.5487] Milvus 是一款强大的开源向量数据库,非常适合 RAG 架构。
➜ [相似度:0.3846] 向量数据库通过 HNSW 等索引算法,能够实现毫秒级的近似最近邻搜索。
演示结束。本地目录下已生成文件:milvus_blog_demo.db
为什么说这个结果非常惊艳?
仔细看用户的提问:'推荐一个好用的 AI 知识库存储工具'。这句话里完全没有出现'Milvus'或'数据库'等字眼。如果使用传统的 MySQL LIKE 或者 Elasticsearch 关键词匹配,是绝对搜不到第一句话的。
但是,通过 SentenceTransformer 提取的深层语义向量,再结合 Milvus 的高维空间余弦相似度计算,系统成功'理解'了**'AI 知识库存储工具'在概念上和'向量数据库'**是高度相关的!这就是 AI 时代检索引擎的真正威力。
通过上面的真实模型代码,我们完整跑通了文本 -> AI 模型向量化 -> 存入 Milvus -> 用户提问向量化 -> Milvus 语义召回的全流程。
如果你想在这个基础上构建一个完整的 ChatGPT 知识库问答助手(RAG),只需要再加最后一步:把 Milvus 搜出来的结果(如上面的第一句话),连同用户的问题一起丢给 LLM(如 OpenAI API 或 DeepSeek),让它总结一下输出即可。
Milvus Lite 极大降低了初学者的门槛,开发体验如丝般顺滑。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online