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

Vanna Text2SQL框架:用自然语言查询数据库的新方式

一、背景

在当今数字化时代,数据已经成为企业和组织的核心资产之一。然而,对于非技术用户来说,从数据库中提取信息往往是一个挑战,因为这通常需要编写复杂的SQL查询语句。幸运的是,随着人工智能和自然语言处理技术的发展,Text2SQL技术应运而生,它允许用户通过自然语言查询数据库。Vanna Text2SQL框架就是这样一个强大的工具,它不仅简化了数据库查询的过程,还提供了高效的数据检索和分析能力。本文将详细介绍Vanna框架的工作原理、核心组件以及如何在实际项目中应用它。

二、Vanna简介

Vanna是一个开源的Python RAG(检索增强生成)框架,专门用于SQL生成和相关功能。它基于人工智能技术,允许用户通过自然语言提问来查询数据库并获取结果。Vanna的核心优势在于其能够将自然语言问题转换为有效的SQL查询语句,并在指定的数据库上执行这些查询,从而为用户提供所需的数据。

2.1 工作原理

Vanna的工作流程可以分为以下几个关键步骤:

  1. 用户提出问题:用户在对话框中输入自然语言问题。
  2. 搜索和提示生成:系统将问题发送到搜索模块,该模块从数据库定义语言(DDL)、文档资料以及正确答案的历史记录中检索相关信息。这些信息存储在一个通用向量存储库中。
  3. 提示与大语言模型(LLM):根据搜索到的信息,系统生成一个提示(Prompt),并将其发送给任何可用的大语言模型进行进一步处理。
  4. SQL查询生成:LLM生成相应的SQL查询语句。系统可以处理复杂的数据结构,并将其转换为有效的SQL查询。
  5. 执行SQL查询:生成的SQL查询被发送至数据库执行引擎,在指定的数据库上执行,以获取所需的查询结果。
  6. 结果展示:结果可以通过Pandas DataFrame和Plotly以表格或图表的形式呈现出来。用户还可以查看由AI生成的新问题和后续问题建议,方便进一步深入探索数据。
  7. 校验和反馈循环:如果结果显示正确,则返回给用户;如果结果显示不正确,则进入手动干预阶段,用户可以手动重写查询语句。

2.2 核心组件

Vanna框架由几个核心组件构成,这些组件共同协作,实现了从自然语言问题到SQL查询的转换和执行。

  • VannaBase:定义公共方法及接口。
  • 大语言模型访问组件:继承VannaBase,用于与大语言模型进行交互。
  • 向量数据库访问组件:继承VannaBase,用于在向量数据库中存储和管理向量数据。

三、综合应用

3.1 安装必要的模块

在开始使用Vanna之前,需要安装一些必要的Python模块。这些模块包括Vanna本身、sentence-transformers用于文本嵌入,以及pymilvus用于与Milvus向量数据库进行交互。

pip install vanna
pip install sentence-transformers
pip install pymilvus[model]

3.2 示例代码

以下是一个使用Vanna框架的示例代码,展示了如何结合Milvus向量数据库和OpenAI的聊天模型来实现Text2SQL功能。

from pymilvus import MilvusClient
from vanna.openai.openai_chat import OpenAI_Chat
from vanna.milvus.milvus_vector import Milvus_VectorStore
from openai import OpenAI
from pymilvus import modeldef pymilvus_embedding_function():"""创建并返回一个SentenceTransformerEmbeddingFunction实例。"""sentence_transformer_ef = model.dense.SentenceTransformerEmbeddingFunction(model_name='BAAI/bge-small-zh-v1.5',  # 指定模型名称device='cpu'  # 指定设备)return sentence_transformer_efclass MyVanna(Milvus_VectorStore, OpenAI_Chat):"""MyVanna类继承自Milvus_VectorStore和OpenAI_Chat,用于实现特定的矢量存储和聊天功能。"""def __init__(self, config=None):"""初始化MyVanna类。"""milvus_client = MilvusClient(uri="http://127.0.0.1:19530")config = {"embedding_function": pymilvus_embedding_function(),"milvus_client": milvus_client,"model": "deepseek-chat","temperature": 0.7,"dialect": "SQLLite"}client = OpenAI(api_key="your-api-key", base_url="https://api.deepseek.com/v1")Milvus_VectorStore.__init__(self, config=config)OpenAI_Chat.__init__(self, client=client, config=config)# 创建MyVanna类的实例
vn = MyVanna()
# 连接到SQLite数据库
vn.connect_to_sqlite("./chinook.sqlite")# 测试数据
obj = vn.ask("每位顾客在各流派上花费了多少?")
print(obj)

3.3 训练数据

为了使Vanna能够理解数据库的结构并生成准确的SQL查询,需要对其进行训练。训练过程包括以下几个步骤:

  1. 收集训练材料:收集数据库定义语言(DDL)、文档资料以及参考的SQL查询语句。
  2. 生成嵌入表示:使用这些材料生成嵌入表示(Embeddings),将文本数据转换为数值形式。
  3. 存储嵌入和元数据:将生成的嵌入表示及其相关元数据存储到一个矢量数据库中。

以下是一个简单的训练函数示例:

def train():"""训练模型以学习数据库表结构。"""# 获取sqlite数据库中所有的表结构信息tables = vn.query("SELECT type, sql FROM sqlite_master WHERE sql is not null")# 根据表结构信息进行训练for ddl in tables:vn.train(ddl=ddl)

四、结论

Vanna Text2SQL框架为数据库查询提供了一种创新且高效的方法。通过自然语言处理和大语言模型的强大能力,Vanna能够将自然语言问题转换为有效的SQL查询,并在指定的数据库上执行这些查询。这不仅降低了普通用户访问和查询数据库的技术门槛,还显著提升了查询效率和用户体验。Vanna框架的开源性质也使其具有高度的灵活性和可扩展性,开发者可以根据自己的需求进行定制和优化。无论是在商业智能、数据分析还是日常办公中,Vanna都能为用户提供强大的支持,帮助他们更轻松地从数据中获取洞察。

http://www.dtcms.com/a/511239.html

相关文章:

  • Android Studio新手开发第二十七天
  • ros中的Navigation导航系统
  • Python循环结构、控制语句及综合应用问答
  • Typescript - Tuple 元祖类型(语法 / 简单使用 / 不可变元组 / 合并多个元组)详细入门教程
  • 成就系统概述
  • 仓颉编程(10)类的定义
  • 常见的域名注册网站报纸做垂直门户网站
  • 东营网站建设推广市政工程中标查询网
  • Llinux自动安装chrome与chromedriver
  • 低侧单向电流检测电路
  • 一款轻量级 Java CLI 工具,用于抓取、展示和导出 Exploit-DB 的漏洞数据
  • 运维效率翻倍:如何利用阿里云监控工具实现服务器智能运维?
  • [人工智能-大模型-29]:大模型应用层技术栈 - 第二层:Prompt 编排层(Prompt Orchestration)
  • 告别笔记局限!Blinko+cpolar让AI笔记随时随地可用
  • 【多线程】可重入锁 Reentrant Lock
  • 蓝牙低功耗(BLE)通信的中心设备/外围设备(连接角色)、主机/从机(时序角色)、客户端/服务器(数据交互角色)的理解
  • 3.5 面向连接的传输: TCP
  • 深度学习(10)-PyTorch 卷积神经网络
  • 网站没有做实名认证推广员是干什么的
  • 异步的feign请求报错:No thread-bound request found
  • 北京建设公司网站建设重庆有网站公司
  • YUV实战案例:一个网络摄像头的工作流程(速通)
  • 深入解析SCT分散加载文件
  • AIGC-Fooocus部署实践:从本地手动配置到云端一键启用的深度剖析
  • 数据结构——最小(代价)生成树
  • NumPy的hstack函数详细教程
  • 020数据结构之优先队列——算法备赛
  • 华为OD-23届考研-测试面经
  • 阿里云网站建设步骤wordpress防止频繁搜索
  • 西宁网站建设哪家公司好东莞seo网站推广