前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL Assistant:Streamlit 中的文本到 SQL 应用程序

SQL Assistant:Streamlit 中的文本到 SQL 应用程序

作者头像
大数据杂货铺
发布2024-01-31 17:18:11
1.5K0
发布2024-01-31 17:18:11
举报
文章被收录于专栏:大数据杂货铺

在本文中,我们将探索Vanna.ai的应用,这是一个Python 库,专门用于训练能够处理自然语言问题并生成 SQL 查询作为响应的模型。此实现将集成到 ✨Streamlit 应用程序中,创建一个 🤖 聊天机器人,方便提出问题并为返回的查询提供解释。

文本转 SQL 和 Vanna.ai

Text-to-SQL是一款利用模型将自然语言查询转换为SQL查询的工具,旨在让用户轻松生成SQL查询并与数据库无缝交互。

Text-to-SQL可以通过使用Vanna.AI来实现,这是一个开源 🐍Python 库,允许使用数据库中的查询、DDL 和文档来训练 RAG 模型。

Vanna.AI:输出可能性

以下是可以使用 Vanna 方法生成的可能输出,从而促进使用自然语言与数据库交互的多种方式。

输出

描述

📄 SQL

Vanna.AI 可以根据自然语言问题生成 SQL 查询。这些 SQL 查询可用于与数据库交互。

📁 数据框

生成 SQL 查询后,Vanna.AI 可以在数据库中执行它,并将结果作为 pandas DataFrame 返回。

📊 图表

Vanna.AI 可以使用 Plotly 根据 SQL 查询的结果生成图表。

❓ 后续问题

Vanna.AI 可以根据生成的 SQL 查询生成后续问题。这些后续问题可以帮助用户优化查询或更详细地探索数据。

🔍 解释查询

Vanna.AI 可以为生成的 SQL 查询提供解释。这些解释可以帮助用户了解他们的自然语言问题如何解释为 SQL 查询。

Vanna.AI:特点

下表列出了Vanna.AI的主要功能,丰富了数据交互能力:

特征

描述

🚀 模型训练

在训练过程中,在数据源上训练 RAG 模型,包括数据定义语言 (DDL) 语句、文档和 SQL 查询。

🤖 用户查询处理

用户可以用自然语言提出问题,Vanna.AI 通过生成 SQL 查询进行响应。

📚 文档

Discord 上有大量的文档、专门的网站和支持社区,可以提供全面的帮助。

🔌 数据库连接

Vanna 允许连接到多个数据库,使用户不仅可以检索 SQL 查询,还可以通过建立到各自数据库的连接来执行它们。

🤔 AI 生成的推荐问题

该框架包括生成人工智能驱动的问题的功能,为用户可以探索的其他查询提供建议。

🛠️ 简单实现

对于这个初始实现,我们将利用vanna.ai提供的示例,使用 Chinook 数据库。该数据库包括与音乐商店相关的表格和数据,包括关于艺术家、专辑、曲目、客户、订单以及与在线音乐商店的管理相关的各个方面的信息。

安装 vanna-ai

代码语言:javascript
复制
!pip install vanna

实施步骤

请按照以下步骤实现文本转 SQL 的简单示例:

1.API 密钥检索:要启动此示例,请通过在https://vanna.ai/注册来获取 API 密钥。使用您注册的电子邮件获取密钥。

2.设置API密钥和模型:配置获得的API密钥并指定要使用的模型,在本例中为预先存在的“chinook”模型

3.连接到数据库:利用https://vanna.ai/Chinook.sqlite上提供的 SQLite 文件建立与数据库的连接。

4.提出问题:最后,提出一个自然语言问题以从数据库中提取特定信息。在此步骤中,结果包括 SQL 查询、查询执行的 DataFrame 以及代表性图表。该系统还根据数据集生成后续问题。

代码语言:javascript
复制
import vanna as vn
           
# STEP 01: This is a simple example of how to use the Vanna API
api_key = vn.get_api_key('your_email')
           
# Set the API key and the model
vn.set_api_key(api_key)
           
# STEP 02:  Set the model
vn.set_model('chinook')
           
# STEP 03:  Connect with the database
vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')
           
# STEP 04:  Ask a question
vn.ask('What are the top 10 artists by sales?')

📃 sql query

代码语言:javascript
复制
SELECT a.name,
       sum(il.quantity) as totalsales
FROM   artist a
    INNER JOIN album al
        ON a.artistid = al.artistid
    INNER JOIN track t
        ON al.albumid = t.albumid
    INNER JOIN invoiceline il
        ON t.trackid = il.trackid
GROUP BY a.name
ORDER BY totalsales desc limit 10;

📊 plotly chart

❓ New Questions

代码语言:javascript
复制
AI-generated follow-up questions:
           
* Who is the artist with the highest sales?
* What are the total sales for each artist?
* Which genre has the highest sales?
* Can you provide a breakdown of sales by album?
* Which artist has the lowest sales?
* What is the average sales per artist?
* Can you provide a list of the top-selling albums?
* Which genre has the least sales?
* Can you provide a breakdown of sales by country?
* What is the total sales for each genre?
 

🧪 模型训练

要训练您自己的模型,请按照以下步骤操作:

1.登录您的帐户https://vanna.ai/并创建一个新模型。

2.接下来我们将定义如何训练模型。在下一个示例中,我们将使用 ddl(数据定义语言)、文档和查询。

代码语言:javascript
复制
# Check the models available in the account
vn.get_models()
['ecommerce-test', 'demo-tpc-h', 'tpc', 'chinook', 'thelook']
# Set the model
vn.set_model("ecommerce-test")
# Get the ddl for training the model
# Train the model with the ddl
ddl = """
CREATE TABLE if not exists stage.customers(
    customer_id           INT NOT NULL PRIMARY KEY,
    email_address         VARCHAR(50) NOT NULL,
    name                  VARCHAR(50) NOT NULL,
    business_type_id      INT NOT NULL,
    site_code             VARCHAR(10) NOT NULL,
    archived              BOOLEAN NOT NULL,
    is_key_account        BOOLEAN NOT NULL,
    date_updated          TIMESTAMP NOT NULL,
    date_created          TIMESTAMP NOT NULL,
    job_created_date  TIMESTAMP WITH TIME ZONE DEFAULT 
        CURRENT_TIMESTAMP,
    job_created_user  varchar(50) default null,
    job_updated_date  TIMESTAMP default null,
    job_updated_user  varchar(50) default null,
    CONSTRAINT fk_business_type_id FOREIGN KEY(business_type_id) REFERENCES stage.business_types (business_type_id)
);
"""
vn.train(ddl=ddl)      

在我的存储库中,您可以找到所有脚本、文档和查询来训练模型并回答如下问题

代码语言:javascript
复制
# Ask a question for generating the SQL
question  =  """What is the total count of new clients who registered between October 1, 2020, and 
January 1, 2022, and have made more than 10 purchases, each exceeding $20? Additionally,
 could you provide their email addresses, the number of purchases made, and the date of their
  most recent purchase?"""
           
print(vn.generate_sql(question=question))
SELECT COUNT(*) AS total_count,
       c.email_address,
       COUNT(o.order_id) AS num_purchases,
       MAX(o.order_date) AS most_recent_purchase_date
FROM Customers c
JOIN Orders o ON c.customer_id = o.customer_id        
WHERE c.registration_date >= '2020-10-01' AND c.registration_date <= '2022-01-01'
  AND o.order_value > 20
GROUP BY c.email_address
HAVING COUNT(o.order_id) > 10;

💬 Streamlit 聊天机器人

描述

在本节中,我们将使用 ✨Streamlit 的文本到 SQL 功能来实现 🤖chatbot 应用程序。该应用程序将通过 Vanna.AI 和 ✨Streamlit 的集成来开发,提供一个用户友好的界面,用于输入用户名、选择头像和发起💬聊天。

快速开始

1.克隆存储库

r0mymendez / 文本转 SQL

使用 vanna-ai 和 Streamlit 进行文本转 SQL

SQL Assistant:Streamlit 中的文本到 SQL 应用程序 🤖

✨ 什么是生成式人工智能?

Generative AI 是指一类人工智能系统,能够生成新的原创内容,例如图像、文本或其他形式的数据。

🧪 什么是LLM模式?

大型语言模型 (LLM)是一种复杂的深度学习模型,在广泛的数据集上进行训练,以理解和生成自然语言文本。这些模型利用变压器架构,结合编码器从输入文本序列中提取细微差别的含义,并结合解码器来理解单词和短语之间复杂的关系。训练过程涉及数百万个数据输入,这是创建数百万个超参数来微调模型行为的基础。训练期间的大量计算需求由图形处理单元 (GPU) 有效处理,从而实现加速处理并增强模型生成上下文丰富且有意义的文本的能力。

🤖 文本转 SQL 和 Vanna.ai

2.添加您的 ddl 脚本、文档和 sql 查询src\db

3.添加您的凭据src.streamlit\secrets.toml

4.执行应用程序

有关如何运行应用程序和添加凭据的详细说明可以在存储库的README.md.

🤖 聊天机器人预览

该应用程序是用 Vanna.AI 和 ✨Streamlit 制作的,您可以在下面看到它如何工作的视频,请记住所有解释都在存储库readme.md的文件中。 请随意检查一下,如果您觉得有帮助,请给它一个星星!⭐️

原文链接:https://dev.to/r0mymendez/sql-assistant-text-to-sql-application-in-streamlit-464o

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Text-to-SQL是一款利用模型将自然语言查询转换为SQL查询的工具,旨在让用户轻松生成SQL查询并与数据库无缝交互。
  • 对于这个初始实现,我们将利用vanna.ai提供的示例,使用 Chinook 数据库。该数据库包括与音乐商店相关的表格和数据,包括关于艺术家、专辑、曲目、客户、订单以及与在线音乐商店的管理相关的各个方面的信息。
    • 安装 vanna-ai
      • 实施步骤
        • 描述
          • 快速开始
            • 使用 vanna-ai 和 Streamlit 进行文本转 SQL
        • SQL Assistant:Streamlit 中的文本到 SQL 应用程序 🤖
        • ✨ 什么是生成式人工智能?
        • 🧪 什么是LLM模式?
        • 🤖 文本转 SQL 和 Vanna.ai
          • 🤖 聊天机器人预览
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档