当前位置: 首页 > news >正文

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}")获取建表语句,拼接并返回元数据列表

相关文章:

  • ​双目立体视觉的3D重建全流程
  • 深入解析 C# 开闭原则(OCP):设计可扩展的系统
  • VScode cl配置
  • SpringMVC 中的DispatcherServlet生命周期是否受Spring IOC 容器管理
  • CentOS 7 离线升级 OpenSSH
  • 注意!ChatGPT 全新 AI 图像功能延迟对免费用户开放
  • 高级java每日一道面试题-2025年3月08日-微服务篇[Eureka篇]-说一说Eureka心跳机制
  • 【软件工程】习题及答案
  • Python二分查找【清晰易懂】
  • 北斗导航 | 改进伪距残差矢量的接收机自主完好性监测算法原理,公式,应用,RAIM算法研究综述,matlab代码
  • CSS 如何设置父元素的透明度而不影响子元素的透明度
  • SpringBoot第一节
  • 游戏引擎学习第186天
  • VS Code 中 .history`文件的来源与 .gitignore`的正确使用
  • 魔塔社区的torch_empty错误问题的解决办法
  • 如何在 Postman 中发送 PUT 请求?
  • LabVIEW IMAQdx相机接口重命名
  • C++11大数加减
  • 【计算机操作系统】第六章、操作系统中的输入输出系统
  • UI产品经理基础(五):如何做​MVP快速验证?
  • soho怎么做网站/网站建设设计
  • 深圳做网站有哪些/重庆seo薪酬水平
  • 企智网站建设/百度经验官网首页
  • 厦门 网站制作/如何自建网站?
  • 做网站绍兴/站长工具果冻传媒
  • 网站制作作业/郑州好的seo外包公司