milvus-use教程 python

简介

项目地址:milvus-use: milvus-use教程 python

需求描述

参考vanna项目,获取数据库元数据和问题sql对,存入Milvus向量数据库,之后进行检索,返回相似的数据库表和问题对。本项目采用的嵌入模型为m3e-large。该该项目milvus版本较新,与vanna项目版本不同,大量api不兼容

功能介绍

DatabaseManager类对数据库连接持久化,具体的连接信息如host、用户名密码等在.env文件中。现支持mysql,milvus数据库连接;

MilvusVectorStore类封装对milvus数据库操作方法,如创建数据库元数据和问题sql对的collection(类似于mysql中的表),添加数据库元数据和问题对,和基于问题查询collections中最相似的数据。

另通过init_collections、delete_collections、add_db_metadata、add_qa_pairs、api_search文件对collections进行初始化、删除、添加数据库元数据、添加问题对、对输入的问题查询数据库

milvus介绍

milvus intro

一款专为向量数据设计的数据库,主要用于高效存储和检索大规模向量数据

FieldSchema 定义了字段的类型和属性,类似于 MySQL 中的列定义。Milvus 支持多种数据类型,包括标量(如 INT64VARCHAR)和向量(如 FLOAT_VECTOR

CollectionSchema 是字段的集合,类似于 MySQL 中的表结构。它由多个 FieldSchema 组成,并包含集合的描述信息

Collection 是 Milvus 中存储数据的逻辑单元,类似于 MySQL 中的表。它基于 CollectionSchema 创建,并用于插入、查询和管理数据

create_index 用于为字段创建索引,以加速查询。Milvus 支持多种索引类型,如 IVF_FLATHNSW 等,每种索引类型都有其适用场景

项目实施

.env文件配置数据库连接信息

复制代码
# Milvus 连接参数
MILVUS_HOST=
MILVUS_PORT=19530
MILVUS_USER=root
MILVUS_PASSWORD=
# MySQL 连接参数
MYSQL_HOST=
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=
MYSQL_DB_NAME=

DatabaseManager

对外提供数据库连接关闭功能

从环境变量中获取连接信息,定义连接milvs,mysql的方法及返回实例,关闭连接

MilvusVectorStore

初始化

对外提供milvus的集合初始化,添加、删除操作

m3e嵌入模型从本地导入,连接milvus,指定嵌入模型和向量维度,m3e是1024

创建集合和索引

创建集合,通过FieldSchema指定字段信息,除最后一个vector存的向量信息,其余类似mysql表字段,存储字段名称、类型、是否主键等,vector要指定向量的维度。CollectionSchema定义集合中的字段、索引、分区、描述信息等,该项目只定义了字段和描述信息;Collection使用CollectionSchema定义的字段信息schema初始化集合,类似创建了一个表,多了一个字段汇总步骤CollectionSchema。

创建索引,通过上步创建集合的create_index方法创建,索引的配置参数有索引类型、度量类型和聚类中心数量,本项目统一分别采用IVF_FLAT基于倒排文件(Inverted File)的索引结构,I2欧几里得距离,128聚类中心。IVF(Inverted File,倒排文件),FLAT(平面索引/线性索引)

添加和查询数据

添加数据,以添加问题sql对为例

通过Collection("name")找到对应集合,将问题sql对分别转成问题列表和sql列表,通过self.embedding_function.encode(questions).tolist()将问题列表转换成向量。将问题列表、sql列表,转换后的向量组成类表,通过collection.insert方法插入数据库中。flush将数据刷新到磁盘。

查询数据,以查询问题sql对为例

将问题转成向量,设置搜索参数为l2距离度量,10探针数量;加载对应集合,通过collection.search方法进行搜索并返回结果,传入的参数有待搜索的向量数据即问题的向量表示,要搜索的向量字段名称,前一步配置的搜索参数、返回结果数量和返回结果需要输出的字段。对返回的结果进行遍历,构造对应的键值映射。返回类似json的实体对象数组映射

外部文件调用MilvusVectorStore中的方法

通过init_collections、delete_collections、add_db_metadata、add_qa_pairs、api_search文件对collections进行初始化、删除、添加数据库元数据、添加问题对、对输入的问题查询数据库

add_db_metadata需要先连接mysql数据库,获取元数据,通过cursor.execute("SHOW TABLES"):执行查询语句,cursor.fetchall():获取查询结果的所有行,返回一个表名列表tables,再遍历每个表名,执行cursor.execute(f"SHOW CREATE TABLE {table}")获取建表语句,拼接并返回元数据列表

相关推荐
码猩2 分钟前
获取dm音视频文案
python
给我起把狙4 分钟前
Django与Tornado框架深度对比:从MVCMTV到高并发架构设计
python·django·tornado
rit84324996 分钟前
ES6 箭头函数:告别 `this` 的困扰
开发语言·javascript·es6
嵌入式-老费19 分钟前
Easyx图形库应用(用lua开发图形界面)
开发语言·lua
ellis197019 分钟前
Lua协程coroutine库用法
开发语言·lua
Hello.Reader29 分钟前
Flink DataStream「全分区窗口处理」mapPartition / sortPartition / aggregate / reduce
大数据·python·flink
网安INF29 分钟前
Python核心数据结构与函数编程
数据结构·windows·python·网络安全
nwsuaf_huasir39 分钟前
matlab构造带通巴特沃斯滤波器进行滤波
开发语言·matlab
救救孩子把40 分钟前
从 JDK 8 到 JDK 23:HotSpot 垃圾回收器全景演进与深度剖析
java·开发语言·jvm·jdk
列兵阿甘44 分钟前
知微传感Dkam系列3D相机SDK例程篇:Python设置相机触发模式
python·数码相机·3d