(图片象征着连接与多维空间的数据网络)在生成式 AIGenerative AI和大语言模型LLM爆发的今天**“向量数据库”**成为了技术圈的高频词汇。无论是构建企业级的知识库问答系统RAG还是实现以图搜图、个性化推荐向量数据库都是不可或缺的基础设施。而在众多向量数据库中Milvus作为开源界的明星项目凭借其云原生架构、极高的性能和良好的可扩展性成为了许多开发者的首选。本文将带你图文并茂地深入浅出 Milvus从核心理论到结合真实 AI 嵌入模型 (Embedding Model)的可执行 Python 实战让你快速掌握这款强大的工具。一、 为什么我们需要向量数据库在传统的数据库如 MySQL、PostgreSQL中我们通常通过精确匹配如WHERE name Alice或简单的文本索引来进行搜索。但在 AI 世界里文本、图像、音频等非结构化数据被转换成了高维向量Vector Embeddings。例如一段话可能被大模型表示为包含数百个浮点数的数组。在这个数组空间里语义相近的句子它们的向量距离就越近。传统数据库无法高效处理这种“在高维空间中寻找最近邻居Approximate Nearest Neighbor, ANN”的问题而这正是 Milvus 的强项。Milvus 的核心使用场景检索增强生成RAG给大模型外挂知识库解决大模型胡说八道幻觉的问题。多模态搜索以图搜图、以音搜音。推荐系统寻找用户向量与商品向量的相似度。二、 Milvus 的核心概念与架构图解为了用好 Milvus我们需要先理解它的几个核心理论概念。1. 数据模型 (Data Model)Milvus 的数据组织方式与关系型数据库有相似之处但专为向量优化Collection集合相当于传统数据库的 Table表。Entity实体相当于表中的一行数据Row。Field字段相当于列Column其中必须包含一个向量字段也可以包含普通的标量字段如 ID、文本内容、时间戳等。2. 距离度量 (Metric Types)如何判断两个向量有多“像”Milvus 支持多种距离度量方式L2 (欧氏距离)计算两点间的直线距离。值越小越相似。IP (内积)计算向量投影。值越大越相似。COSINE (余弦相似度)计算向量间的夹角。值越大越相似常用于 NLP 文本向量。3. Milvus 架构一览 (Mermaid 示意图)Milvus 采用云原生架构计算与存储分离。它可以单机部署也可以在 K8s 上分布式部署。存储层 Storage执行节点 Worker Nodes协调层 Coordinator ServicegRPC/REST客户端 Python/Java/GoProxy 接入层Root CoordQuery CoordData CoordQuery Node负责实时查询和检索Data Node负责数据写入和持久化Index Node负责构建向量索引对象存储 MinIO/S3持久化数据元数据 etcd三、 Python 实战结合真实 AI 模型的语义检索引擎理论说完了我们来写代码。得益于 Milvus 2.4 版本引入的Milvus LitePython 开发者现在不需要安装 Docker直接通过pip安装即可在本地以文件形式运行 Milvus。同时为了体现“语义检索”的魔力我们将使用真正的开源文本向量模型sentence-transformers来将文字转化为向量。Step 1: 安装依赖包我们需要安装 Milvus 的 Python 客户端以及大名鼎鼎的 HuggingFace 向量化工具包(打开终端运行)pipinstallpymilvus sentence-transformersStep 2: 完整实战代码创建一个名为milvus_semantic_search.py的文件填入以下代码frompymilvusimportMilvusClientfromsentence_transformersimportSentenceTransformer# # 1. 初始化 AI Embedding 模型# # 这里使用经典的轻量级开源模型首次运行会自动下载 (约 80MB)print(⏳ 正在加载开源 Embedding 模型...)modelSentenceTransformer(all-MiniLM-L6-v2)# 获取模型输出的向量维度 (该模型维度为 384)dimensionmodel.get_sentence_embedding_dimension()print(f✅ 模型加载完成向量维度:{dimension})# # 2. 初始化 Milvus 客户端 (Milvus Lite 模式)# # 指定一个本地文件名Milvus Lite 会在这个文件中存储所有数据db_namemilvus_blog_demo.dbclientMilvusClient(db_name)print(f✅ 成功连接至本地 Milvus Lite 数据库:{db_name})# # 3. 创建集合 (Collection)# collection_nametech_articles# 如果集合已经存在先删除方便反复测试ifclient.has_collection(collection_name):client.drop_collection(collection_name)print(f♻️ 已清理旧的集合:{collection_name})client.create_collection(collection_namecollection_name,dimensiondimension,# 必须与 AI 模型输出的维度一致metric_typeCOSINE# 对于文本检索通常推荐使用余弦相似度)print(f✅ 集合 {collection_name} 创建成功)# # 4. 准备写入的数据并进行向量化# # 我们的基础资料库articles[Milvus 是一款强大的开源向量数据库非常适合 RAG 架构。,向量数据库通过 HNSW 等索引算法能够实现毫秒级的近似最近邻搜索。,Python 是一门广泛用于人工智能和数据科学的编程语言。,Redis 也可以用来做缓存但处理海量向量不如专业的向量数据库。,今天天气真不错适合出去踏青。]print(⏳ 正在使用 AI 模型将文档转换为向量入库...)# 真实调用大模型获取 Embeddingsvectorsmodel.encode(articles)data[]fori,textinenumerate(articles):data.append({id:i,# 实体 IDvector:vectors[i].tolist(),# 向量字段必须是 listtext:text# 附带的标量数据Payload})# # 5. 插入数据# insert_resclient.insert(collection_namecollection_name,datadata)print(f✅ 成功插入{insert_res[insert_count]}条测试数据)# # 6. 进行语义相似度搜索# # 注意用户的提问在字面上根本没有包含 Milvus 或 数据库 这几个字query推荐一个好用的 AI 知识库存储工具print(f\n 接收到用户查询: {query})print(⏳ 正在转换查询向量并在 Milvus 中搜索...)# 对用户的提问进行向量化query_vectormodel.encode([query])search_resclient.search(collection_namecollection_name,dataquery_vector.tolist(),# 待检索的 query 向量limit2,# Top-K: 返回最相似的前 2 条结果output_fields[text],# 在结果中一并返回原文文本search_params{metric_type:COSINE})# # 7. 打印结果# print(\n 搜索结果如下 (按语义相似度倒序排):)forhitsinsearch_res:forhitinhits:scorehit[distance]doc_texthit[entity][text]print(f ➜ [相似度:{score:.4f}]{doc_text})print(\n演示结束。本地目录下已生成文件:,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”或“数据库”等字眼。如果使用传统的 MySQLLIKE或者 Elasticsearch 关键词匹配是绝对搜不到第一句话的。但是通过SentenceTransformer提取的深层语义向量再结合Milvus的高维空间余弦相似度计算系统成功“理解”了**“AI 知识库存储工具”在概念上和“向量数据库”**是高度相关的这就是 AI 时代检索引擎的真正威力。四、 总结从这里走向 RAG通过上面的真实模型代码我们完整跑通了文本 - AI 模型向量化 - 存入 Milvus - 用户提问向量化 - Milvus 语义召回的全流程。如果你想在这个基础上构建一个完整的 ChatGPT 知识库问答助手RAG只需要再加最后一步把 Milvus 搜出来的结果如上面的第一句话连同用户的问题一起丢给 LLM如 OpenAI API 或 DeepSeek让它总结一下输出即可。专注高维Milvus 完美解决了非结构化数据的大规模检索难题。极简起步Milvus Lite极大降低了初学者的门槛开发体验如丝般顺滑。架构灵活当你从个人项目走向十亿级数据的企业项目时你可以一行代码不改直接将连接地址切换到分布式部署的 Milvus 集群。赶紧打开代码编辑器安装依赖亲自感受一下语义检索的魅力吧
深入浅出 Milvus 向量数据库:从核心原理到 Python 实战指南
(图片象征着连接与多维空间的数据网络)在生成式 AIGenerative AI和大语言模型LLM爆发的今天**“向量数据库”**成为了技术圈的高频词汇。无论是构建企业级的知识库问答系统RAG还是实现以图搜图、个性化推荐向量数据库都是不可或缺的基础设施。而在众多向量数据库中Milvus作为开源界的明星项目凭借其云原生架构、极高的性能和良好的可扩展性成为了许多开发者的首选。本文将带你图文并茂地深入浅出 Milvus从核心理论到结合真实 AI 嵌入模型 (Embedding Model)的可执行 Python 实战让你快速掌握这款强大的工具。一、 为什么我们需要向量数据库在传统的数据库如 MySQL、PostgreSQL中我们通常通过精确匹配如WHERE name Alice或简单的文本索引来进行搜索。但在 AI 世界里文本、图像、音频等非结构化数据被转换成了高维向量Vector Embeddings。例如一段话可能被大模型表示为包含数百个浮点数的数组。在这个数组空间里语义相近的句子它们的向量距离就越近。传统数据库无法高效处理这种“在高维空间中寻找最近邻居Approximate Nearest Neighbor, ANN”的问题而这正是 Milvus 的强项。Milvus 的核心使用场景检索增强生成RAG给大模型外挂知识库解决大模型胡说八道幻觉的问题。多模态搜索以图搜图、以音搜音。推荐系统寻找用户向量与商品向量的相似度。二、 Milvus 的核心概念与架构图解为了用好 Milvus我们需要先理解它的几个核心理论概念。1. 数据模型 (Data Model)Milvus 的数据组织方式与关系型数据库有相似之处但专为向量优化Collection集合相当于传统数据库的 Table表。Entity实体相当于表中的一行数据Row。Field字段相当于列Column其中必须包含一个向量字段也可以包含普通的标量字段如 ID、文本内容、时间戳等。2. 距离度量 (Metric Types)如何判断两个向量有多“像”Milvus 支持多种距离度量方式L2 (欧氏距离)计算两点间的直线距离。值越小越相似。IP (内积)计算向量投影。值越大越相似。COSINE (余弦相似度)计算向量间的夹角。值越大越相似常用于 NLP 文本向量。3. Milvus 架构一览 (Mermaid 示意图)Milvus 采用云原生架构计算与存储分离。它可以单机部署也可以在 K8s 上分布式部署。存储层 Storage执行节点 Worker Nodes协调层 Coordinator ServicegRPC/REST客户端 Python/Java/GoProxy 接入层Root CoordQuery CoordData CoordQuery Node负责实时查询和检索Data Node负责数据写入和持久化Index Node负责构建向量索引对象存储 MinIO/S3持久化数据元数据 etcd三、 Python 实战结合真实 AI 模型的语义检索引擎理论说完了我们来写代码。得益于 Milvus 2.4 版本引入的Milvus LitePython 开发者现在不需要安装 Docker直接通过pip安装即可在本地以文件形式运行 Milvus。同时为了体现“语义检索”的魔力我们将使用真正的开源文本向量模型sentence-transformers来将文字转化为向量。Step 1: 安装依赖包我们需要安装 Milvus 的 Python 客户端以及大名鼎鼎的 HuggingFace 向量化工具包(打开终端运行)pipinstallpymilvus sentence-transformersStep 2: 完整实战代码创建一个名为milvus_semantic_search.py的文件填入以下代码frompymilvusimportMilvusClientfromsentence_transformersimportSentenceTransformer# # 1. 初始化 AI Embedding 模型# # 这里使用经典的轻量级开源模型首次运行会自动下载 (约 80MB)print(⏳ 正在加载开源 Embedding 模型...)modelSentenceTransformer(all-MiniLM-L6-v2)# 获取模型输出的向量维度 (该模型维度为 384)dimensionmodel.get_sentence_embedding_dimension()print(f✅ 模型加载完成向量维度:{dimension})# # 2. 初始化 Milvus 客户端 (Milvus Lite 模式)# # 指定一个本地文件名Milvus Lite 会在这个文件中存储所有数据db_namemilvus_blog_demo.dbclientMilvusClient(db_name)print(f✅ 成功连接至本地 Milvus Lite 数据库:{db_name})# # 3. 创建集合 (Collection)# collection_nametech_articles# 如果集合已经存在先删除方便反复测试ifclient.has_collection(collection_name):client.drop_collection(collection_name)print(f♻️ 已清理旧的集合:{collection_name})client.create_collection(collection_namecollection_name,dimensiondimension,# 必须与 AI 模型输出的维度一致metric_typeCOSINE# 对于文本检索通常推荐使用余弦相似度)print(f✅ 集合 {collection_name} 创建成功)# # 4. 准备写入的数据并进行向量化# # 我们的基础资料库articles[Milvus 是一款强大的开源向量数据库非常适合 RAG 架构。,向量数据库通过 HNSW 等索引算法能够实现毫秒级的近似最近邻搜索。,Python 是一门广泛用于人工智能和数据科学的编程语言。,Redis 也可以用来做缓存但处理海量向量不如专业的向量数据库。,今天天气真不错适合出去踏青。]print(⏳ 正在使用 AI 模型将文档转换为向量入库...)# 真实调用大模型获取 Embeddingsvectorsmodel.encode(articles)data[]fori,textinenumerate(articles):data.append({id:i,# 实体 IDvector:vectors[i].tolist(),# 向量字段必须是 listtext:text# 附带的标量数据Payload})# # 5. 插入数据# insert_resclient.insert(collection_namecollection_name,datadata)print(f✅ 成功插入{insert_res[insert_count]}条测试数据)# # 6. 进行语义相似度搜索# # 注意用户的提问在字面上根本没有包含 Milvus 或 数据库 这几个字query推荐一个好用的 AI 知识库存储工具print(f\n 接收到用户查询: {query})print(⏳ 正在转换查询向量并在 Milvus 中搜索...)# 对用户的提问进行向量化query_vectormodel.encode([query])search_resclient.search(collection_namecollection_name,dataquery_vector.tolist(),# 待检索的 query 向量limit2,# Top-K: 返回最相似的前 2 条结果output_fields[text],# 在结果中一并返回原文文本search_params{metric_type:COSINE})# # 7. 打印结果# print(\n 搜索结果如下 (按语义相似度倒序排):)forhitsinsearch_res:forhitinhits:scorehit[distance]doc_texthit[entity][text]print(f ➜ [相似度:{score:.4f}]{doc_text})print(\n演示结束。本地目录下已生成文件:,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”或“数据库”等字眼。如果使用传统的 MySQLLIKE或者 Elasticsearch 关键词匹配是绝对搜不到第一句话的。但是通过SentenceTransformer提取的深层语义向量再结合Milvus的高维空间余弦相似度计算系统成功“理解”了**“AI 知识库存储工具”在概念上和“向量数据库”**是高度相关的这就是 AI 时代检索引擎的真正威力。四、 总结从这里走向 RAG通过上面的真实模型代码我们完整跑通了文本 - AI 模型向量化 - 存入 Milvus - 用户提问向量化 - Milvus 语义召回的全流程。如果你想在这个基础上构建一个完整的 ChatGPT 知识库问答助手RAG只需要再加最后一步把 Milvus 搜出来的结果如上面的第一句话连同用户的问题一起丢给 LLM如 OpenAI API 或 DeepSeek让它总结一下输出即可。专注高维Milvus 完美解决了非结构化数据的大规模检索难题。极简起步Milvus Lite极大降低了初学者的门槛开发体验如丝般顺滑。架构灵活当你从个人项目走向十亿级数据的企业项目时你可以一行代码不改直接将连接地址切换到分布式部署的 Milvus 集群。赶紧打开代码编辑器安装依赖亲自感受一下语义检索的魅力吧