首页 > 数据库 >【Milvus向量数据库】AI应用开发

【Milvus向量数据库】AI应用开发

时间:2025-01-23 18:20:33浏览次数:1  
标签:检索 AI 索引 Milvus docker 数据 向量

一、Milvus介绍

上一小节中,全面介绍了向量和向量数据库,今天详细介绍下其中比较出名的开源数据库Milvus。希望对你有帮助

Milvus 是一个开源的、高性能的向量数据库,专为海量向量数据的快速检索而设计。在人工智能、计算机视觉、推荐系统和其他需要处理大规模向量数据的领域有着广泛应用。
以下是从产品功能、技术特点和优势等方面对 Milvus 的详细介绍:

Milvus的产品功能

1、向量检索:

支持基于欧氏距离、内积和余弦相似度的近似最近邻(ANN)检索。

支持高维向量数据的高效检索,适用于图像、视频、音频和自然语言处理等领域。

2、多模态数据管理:

除了支持向量数据,Milvus 还提供对结构化数据、非结构化数据的管理和检索能力。

3、分布式架构:

支持分布式存储和计算,能够处理 PB 级的数据,并且具备较高的扩展性。

4、数据持久化:

自动执行数据持久化操作,确保数据的持久保存和快速恢复。

5、实时插入和查询:

支持实时数据插入和快速查询,满足在线服务的需求。

6、多种索引类型:

提供多种索引类型(如 IVF、IVF_SQ8、HNSW、ANNOY 等),用户可以根据具体应用场景选择合适的索引算法。

7、丰富的 API 和客户端支持:

提供多种 API 和客户端库,支持 Python、Java、Go 等主流编程语言,方便用户进行二次开发。

Milvus的技术特点

1、高性能:

通过优化的数据结构和算法,Milvus 能够实现高效的向量数据检索,适应不同的使用场景需求。

2、分布式架构:

采用分布式架构,具备线性扩展能力,可以处理大规模数据并保持高吞吐量和低延迟。

3、灵活的索引机制:

支持多种索引类型,并允许用户根据数据特点和查询需求选择和调整索引,提供灵活的检索方案。

4、自动数据分片和负载均衡:

自动将数据分片存储到不同的节点上,并进行负载均衡,确保系统的高可用性和高性能。

5、高可用性和容错性:

通过多副本机制和数据持久化策略,保证数据的高可用性和容错性。

6、强大的查询优化:

内置查询优化器,能够智能优化查询路径,提升查询效率。

Milvus的优势

1、开源和社区支持:

Milvus 是一个开源项目,有一个活跃的社区,提供丰富的文档和示例代码,方便用户快速上手和使用。

2、高扩展性:

采用分布式架构,具备很强的扩展性,能够轻松扩展至数百节点,处理 PB 级数据。

3、多场景适用性:

适用于多种应用场景,包括图像检索、视频检索、推荐系统、自然语言处理等领域。

4、易于集成:

提供丰富的 API 和多个编程语言的客户端库,便于集成到现有系统中。

5、高性能:

通过优化的向量检索算法和索引机制,能够在大规模数据下保持高性能的检索能力。

6、全面的数据支持:

不仅支持向量数据,还支持结构化和非结构化数据,能够满足多样化的数据管理需求。

Milvus 是一个功能强大、高性能的向量数据库,专为大规模向量数据的检索和管理而设计。其主要特点包括高性能、分布式架构、灵活的索引机制、高可用性和容错性等。凭借这些特点和优势,Milvus 在人工智能、计算机视觉、推荐系统等领域有着广泛的应用。作为一个开源项目,Milvus 拥有活跃的社区和丰富的文档支持,是开发者进行大规模向量数据处理和检索的理想选择。

二、docker 安装

Milvus的安装是通多docker镜像安装的,所以之前先安装docker

sudo yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-engine
sudo yum remove docker*

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo


yum list docker-ce --showduplicates | sort -r

# 注意docker-ce 和 containerd.io的版本
sudo yum install docker-ce-17.12.1.ce-1.el7.centos  containerd.io-_1.2.13-2 docker-buildx-plugin docker-compose-plugin

sudo systemctl start docker
sudo docker run hello-world

三、Milvus 安装

Milvus安装参考官方文档

https://milvus.io/blog/how-to-get-started-with-milvus.md
mkdir milvus_compose
cd milvus_compose
wget https://github.com/milvus-io/milvus/releases/download/v2.2.8/milvus-standalone-docker-compose.yml -O docker-compose.yml
vim /etc/docker/daemon.json 
sudo systemctl daemon-reload
sudo systemctl restart docker
docker-compose up -d


# 安装 python接口库
pip install pymilvus

需要注意Milvus和python的对应版本

四、milvus基本操作

pymilvus 是 Milvus 的官方 Python SDK,用于与 Milvus 向量数据库进行交互。pymilvus 提供了丰富的 API 用于管理集合、索引、插入数据和执行查询等操作。以下是 pymilvus 的一些基本操作介绍,包括连接到 Milvus、创建集合、插入数据、构建索引和执行查询。
1、 安装 pymilvus

首先,你需要安装 pymilvus 库:

pip install pymilvus

2、连接到 Milvus

使用 connections.connect 方法连接到 Milvus 实例:

from pymilvus import connections

# 连接到本地 Milvus 实例
connections.connect(alias="default", host="localhost", port="19530")

3、创建集合

创建一个新的集合,包括定义集合的名称和字段(例如,向量字段和 id 字段):

from pymilvus import Collection, FieldSchema, CollectionSchema, DataType

# 定义字段
id_field = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True)
vector_field = FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128)

# 定义集合的 Schema
schema = CollectionSchema(fields=[id_field, vector_field], description="example collection")

# 创建集合
collection = Collection(name="example_collection", schema=schema)

4、 插入数据

向集合中插入数据:

import numpy as np

# 生成一些示例数据
ids = [i for i in range(10)]
vectors = np.random.random((10, 128)).tolist()

# 插入数据
collection.insert([ids, vectors])

5、 构建索引

为向量字段构建索引以加速查询:

# 定义索引参数
index_params = {
    "metric_type": "L2",
    "index_type": "IVF_FLAT",
    "params": {"nlist": 128}
}

# 创建索引
collection.create_index(field_name="vector", index_params=index_params)

6、 执行查询

执行向量检索查询:

# 加载集合到内存
collection.load()

# 生成查询向量
query_vectors = np.random.random((1, 128)).tolist()

# 定义搜索参数
search_params = {
    "metric_type": "L2",
    "params": {"nprobe": 10}
}

# 执行搜索
results = collection.search(
    data=query_vectors, 
    anns_field="vector", 
    param=search_params, 
    limit=3,
    expr=None
)

# 输出结果
for result in results:
    for hit in result:
        print(f"ID: {hit.id}, Distance: {hit.distance}")

7、管理集合
查看集合信息:

# 获取集合信息
print(collection.num_entities)  # 显示集合中的实体数

删除集合:

# 删除集合
collection.drop()

8、 断开连接

完成所有操作后,可以断开与 Milvus 的连接:

connections.disconnect(alias="default")

总结

通过以上步骤,你可以使用 pymilvus 执行基本的 Milvus 操作,包括连接到 Milvus、创建集合、插入数据、构建索引和执行查询。这些操作构成了使用 Milvus 进行向量数据处理的基础。pymilvus 提供了丰富的 API,可以在实际应用中满足各种向量数据管理和检索的需求。

个人观点,仅供参考

原创 WedO实验君 人工智能微客

标签:检索,AI,索引,Milvus,docker,数据,向量
From: https://www.cnblogs.com/o-O-oO/p/18688076

相关文章

  • 大腾智能CAD:基于云原生架构,融合AI技术的高效三维设计解决方案
    CAD(计算机辅助设计)技术自诞生以来,在工业设计中经历了从二维到三维、从单一功能到集成化、智能化的飞跃式发展。这一技术不仅极大地提高了设计效率,还使得设计精度和创新能力得到了前所未有的提升,已成为现代工业设计不可或缺的重要工具。随着“中国制造2025”等战略的实施,国产CA......
  • 深入解析 Spring AI 系列:解析请求参数处理
    大家在使用SpringAI项目开发Agent时,可能会发现,尽管外层的接口设计和调用逻辑比较统一,但实际上每个第三方接口在实现时都会有一些微妙的差异。这些差异可能体现在请求参数的构造、数据格式的处理,或者是某些接口特有的配置选项上。因此,今天我们主要聚焦于SpringAI在实际调用接口之......
  • 在使用prism的region跳转时,出现The region manager does not contain the MainViewReg
    在做新项目时,把原来的旧项目拷过来进行重构,上一个项目进行region填充是没有问题的,这次再次进行测试出现了这样的问题,于是在网上寻找答案。错误给出来的很明显,regionManager没有一个叫做MainViewRegionName的区域,想当然的就手动添加,进行刷新,这种方法参考Prism区域异常问题分析(......
  • 在Rust项目中,一般测试用例函数 #[(test)] 都写在哪里? 如果要测试 main.rs 文件中的函
    eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee在Rust项目中,测试用例通常放在以下两个位置:1.与源代码同文件中的模块测试用例函数一般写在与实现代码同一个文件中,放在一个名为tests的模块里,使用#[cfg(test)]注解。这种方式适用于对模块内的函数或逻辑进行单元测试。示......
  • 让万物「听说」:AI 对话式智能硬件方案和发展洞察
    本文整理自声网SDK新业务探索组技术负责人,IoT行业专家@吴方方1月18日在RTE开发者社区「VoiceAgent+硬件分享会」上的分享。本次主要介绍了AI对话式智能硬件的发展历程,新一波AI浪潮所带来的创新机遇、技术挑战以及未来的展望。 在语音交互浪潮的推动下,AIoT行业......
  • (一)一文读懂transformers库中常见组件PreTrainedModel,PretrainedConfig,AutoTokenizer
    文章目录一、训练管理大师:`Trainer`和`TrainingArguments``TrainingArguments`:训练的“魔法配方”`Trainer`:训练的“超级厨师”二、数据整理小能手:`DataCollatorWithPadding`三、因果语言模型的输出管家:`CausalLMOutputWithPast`四、模型加载与处理的智能助手:`AutoPro......
  • 数据分析和AI丨拒绝AI技术焦虑,工程领域AI应用的八大技巧
     现今,人们正在对科技发展以及AI技术进行无限探索,在这个过程中,很多工程师可能会感受到“有心无力”,很大程度是因为他们尚未实现自己的第一个可落地执行的人工智能(AI)应用案例。这个结果让人感到十分惊讶,因为目前在工程领域人们对AI的兴趣或投资并不缺乏。研究表明,86%的工......
  • Android Systrace 基础知识 - MainThread 和 RenderThread 解读
    正文这里以滑动列表为例,我们截取主线程和渲染线程一帧的工作流程(每一帧都会遵循这个流程,不过有的帧需要处理的事情多,有的帧需要处理的事情少),重点看“UIThread”和RenderThread这两行这张图对应的工作流程如下主线程处于Sleep状态,等待Vsync信号Vsync信号到来,......
  • ‌AI、AO、DI、DO的解释
    ‌AI、AO、DI、DO在自动化和控制系统中的含义如下‌:‌ ‌AI(AnalogInput)‌:模拟量输入。AI代表将现实世界中的模拟信号(如温度、压力、流量等)转换成计算机能处理的数字信号。例如,温度传感器输出的电压或电流信号被转换为数字信号以便计算机处理。‌AO(AnalogOutput)‌:模拟量输出......
  • Python 融合豆包 AI 优化测试用例生成
    在软件开发过程中,测试用例的编写是确保软件质量的关键环节。传统的测试用例编写往往依赖人工经验,不仅耗时费力,还容易出现遗漏。随着人工智能技术的发展,利用AI来辅助生成测试用例成为了提高效率和质量的有效途径。本文将介绍如何使用Python与豆包AI融合,实现测试用例的......