AI开发-python-milvus向量数据库(2-2 -向量是什么?连接milvus数据库)
AI应用中为什么要用到向量?要解答这个问题就要先搞清楚什么是向量?向量能干什么?最后我们为什么选择milvus向量数据库?
先说最关键的他能够进行语义相似度检索,这跟大语言模型的特点非常贴切,所有他们是最佳拍档。
一、向量是什么?
- 数学定义:向量是具有大小和方向的量,通常用一组有序数字表示,例如
[0.2, -1.3, 0.8]。这组数字的个数称为向量的“维度”。 - AI/机器学习中的向量:在人工智能领域,向量通常指嵌入向量(Embedding),即通过深度学习模型将非结构化数据(如文本、图像、音频)转换成的高维数字数组。例如:
- 一句话“今天天气真好”可能被转换成 768 维的向量
[0.12, -0.45, ..., 0.89] - 一张猫的图片可能被转换成 512 维的特征向量
- 一句话“今天天气真好”可能被转换成 768 维的向量
二、向量能干什么?
|
应用场景
|
原理说明
|
|---|---|
|
语义搜索
|
将查询文本和文档都转为向量,通过计算向量距离找到语义相近的内容(如搜索“汽车”也能返回“轿车”相关结果)
|
|
推荐系统
|
将用户行为和商品特征向量化,推荐与用户兴趣向量相似的商品
|
|
图像/视频检索
|
用向量表示视觉特征,实现“以图搜图”或查找相似视频片段
|
|
大语言模型(LLM)增强
|
为模型提供外部知识库:将知识切片向量化,查询时召回相关向量作为上下文(RAG 技术)
|
|
异常检测
|
与正常数据向量差异过大的样本可能代表异常行为
|
应用场景:
- 智能客服的语义问答
- 电商商品的以图搜货
- 多模态搜索(图文互搜)
- RAG(检索增强生成)系统中的知识库检索
三、Milvus 是什么?
Milvus 为何如此快速?
Milvus 从设计之初就是一个高效的向量数据库系统。在大多数情况下,Milvus 的性能是其他向量数据库的 2-5 倍(参见 VectorDBBench 结果)。这种高性能是几个关键设计决策的结果:
硬件感知优化:为了让 Milvus 适应各种硬件环境,我们专门针对多种硬件架构和平台优化了其性能,包括 AVX512、SIMD、GPU 和 NVMe SSD。
高级搜索算法:Milvus 支持多种内存和磁盘索引/搜索算法,包括 IVF、HNSW、DiskANN 等,所有这些算法都经过了深度优化。与 FAISS 和 HNSWLib 等流行实现相比,Milvus 的性能提高了 30%-70%。
C++ 搜索引擎向量数据库性能的 80% 以上取决于其搜索引擎。由于 C++ 语言的高性能、底层优化和高效资源管理,
Milvus 使用 C++ 来处理这一关键组件。最重要的是,Milvus 集成了大量硬件感知代码优化,从汇编级向量到多线程并行化和调度,以充分利用硬件能力。
面向列:Milvus 是面向列的向量数据库系统。其主要优势来自数据访问模式。在执行查询时,面向列的数据库只读取查询中涉及的特定字段,而不是整行,这大大减少了访问的数据量。此外,对基于列的数据的操作可以很容易地进行向量化,从而可以一次性在整个列中应用操作,进一步提高性能。
下面我们用代码连接一下上一节搭建的milvus环境,看看能不能正常连接上?
环境依赖
pip install pymilvus==2.5.0
from pymilvus import connections, db
#使用connect()连接 Milvus 服务器,并使用create_database()创建新数据库:
conn = connections.connect(host="192.168.0.100", port=19530)
database = db.create_database("tigerdb")
#展示现有数据库
print('-------展示现有数据库---------')
print(db.list_database())
#设置一个数据库,以便在连接到 Milvus 集群时使用
conn = connections.connect(host="192.168.0.100", port="19530",db_name="tigerdb")
#删除数据库
db.drop_database("tigerdb")
输出结果:
-------展示现有数据库---------
[ 'tigerdb', 'default', 'my_database', 'foo', 'jwsjfx', 'springai', 'my_database_2']
上面的代码,能运行成功,说明连接向量库milvus成功,还能进行创建数据库和删除数据库的操作。
浙公网安备 33010602011771号