欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 告别复杂SQL!Vanna问答引擎构建动态可视化报表

告别复杂SQL!Vanna问答引擎构建动态可视化报表

2025/6/21 17:19:41 来源:https://blog.csdn.net/u012210662/article/details/148708573  浏览:    关键词:告别复杂SQL!Vanna问答引擎构建动态可视化报表

一、Vanna简介

Vanna是一个开源的、基于Python的RAG(检索增强生成)框架,专门用于SQL生成和相关功能。它能将自然语言问题自动转成SQL,并且还能直接跑在数据库上,自动生成可视化图表。其主要特点和优势包括:

  • 易用性:允许非技术用户通过自然语言与数据库交互,无需编写复杂的SQL查询。
  • 灵活性:可以处理多种类型的数据库和查询,适用于不同的应用场景。
  • 准确性:Vanna的能力与提供的训练数据相关,更多的训练数据意味着在大型和复杂的数据集上有更好的准确性。
  • 安全性:数据库内容不会直接发送给LLM,SQL执行发生在本地环境中。
  • 自我学习:可以选择在成功执行的查询上“自动训练”,或让界面提示用户对结果提供反馈,使未来的结果更加准确。

二、环境准备

2.1 安装Vanna库

使用pip安装vanna库,根据不同的需求可以安装不同的扩展,例如连接Chromadb向量数据库、使用ollama模型、连接mysql数据库等:

# 安装基本的vanna库 pip install vanna  # 安装带有chromadb、ollama、mysql扩展的vanna库 pip install 'vanna[chromadb,ollama,mysql]'

2.2 安装其他依赖库

如果需要连接mysql数据库,需要安装mysql-connector-python;如果使用Chromadb作为向量数据库,需要安装Chromadb:

pip install mysql-connector-python pip install ChromaDB

三、代码案例

3.1 基本使用示例

以下是一个简单的使用Vanna将自然语言转换为SQL查询并执行的示例:

import vanna as vn# 连接到SQLite数据库
vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')# 添加示例查询,用于训练模型以提高准确性
vn.add_example_query("显示2023年销售额最高的产品", "SELECT product FROM sales WHERE YEAR(date) = 2023 ORDER BY amount DESC LIMIT 1")# 使用自然语言生成SQL查询
question = "显示2023年销售额最高的产品"
sql = vn.generate_sql(question)
print("生成的SQL查询:", sql)# 将生成的SQL查询发送到数据库并获取结果
results = vn.execute_query(sql)
print("查询结果:", results)

3.2 结合Streamlit构建交互式应用示例

Vanna可以与Streamlit结合,构建一个智能化的数据查询应用,让数据分析变得更加轻松和高效。以下是详细的配置和代码实现步骤:

3.2.1 安装与配置

首先,创建一个新的Python虚拟环境,然后安装必要的依赖包:

python3 -m venv venv source venv/bin/activate pip install -r requirements.txt

其中,requirements.txt 文件应该包含以下依赖:

streamlit vanna plotly
3.2.2 配置Vanna AI

vanna_calls.py 文件中,设置Vanna AI的配置,包括设置API密钥和选择合适的模型:

import vanna as vn import streamlit as st  # 设置Vanna的API密钥和模型 
def setup_vanna():  vn.api_key = st.secrets["vanna_api_key"]  vn.set_model("gpt-3.5-turbo-16k")  # 其他配置...  return vn
3.2.3 构建Streamlit应用

app.py 文件中,创建Streamlit应用的核心逻辑,允许用户输入自然语言查询,然后生成SQL,执行查询,并展示结果和可视化:

import streamlit as st
import vanna_calls as vc
import plotly.graph_objects as go# 主函数
def main():st.title("Vanna AI智能数据查询助手")# 用户输入user_query = st.text_input("请输入你的数据查询问题:")if user_query:with st.spinner("正在生成SQL..."):# 生成SQL查询sql = vc.generate_sql(user_query)st.code(sql, language="sql")with st.spinner("执行查询..."):# 执行查询results = vc.execute_query(sql)st.dataframe(results)with st.spinner("生成可视化..."):# 生成可视化图表fig = vc.generate_visualization(results, user_query)st.plotly_chart(fig)if __name__ == "__main__":main()
3.2.4 实现核心功能

vanna_calls.py 中,实现生成SQL、执行查询和生成可视化图表的核心功能:

mport vanna as vn
import streamlit as st
import plotly.graph_objects as go
import pandas as pd# 获取数据库连接
def get_database_connection():# 这里需要根据实际数据库连接进行配置# 示例:连接到SQLite数据库import sqlite3conn = sqlite3.connect('https://vanna.ai/Chinook.sqlite')return conn# 生成SQL查询
def generate_sql(question):return vn.generate_sql(question)# 执行查询
def execute_query(sql):conn = get_database_connection()return pd.read_sql(sql, conn)# 生成可视化图表
def generate_visualization(df, question):plotly_code = vn.generate_plotly_code(question=question, df=df)fig = vn.get_plotly_figure(plotly_code=plotly_code, df=df)return fig

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词