发布于 2026-01-06 1 阅读
0

SQL 助手:Streamlit 中的文本转 SQL 应用 🤖 🤖 文本转 SQL 和 Vanna.ai 🛠️ 简单实现 🧪 模型训练 💬 Streamlit 聊天机器人 SQL 助手:Streamlit 中的文本转 SQL 应用 🤖 ✨ 什么是生成式人工智能? 🧪 什么是 LLM 模型? 🤖 文本转 SQL 和 Vanna.ai 📚 参考资料

SQL 助手:Streamlit 中的文本转 SQL 应用程序 🤖

🤖 Text-to-SQL 和 Vanna.ai

🛠️ 简单实现

🧪 模型训练

💬 Streamlit聊天机器人

SQL 助手:Streamlit 中的文本转 SQL 应用程序 🤖

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

🧪 什么是LLM模型?

🤖 Text-to-SQL 和 Vanna.ai

📚 参考资料

本文将探讨Vanna.ai的应用,这是一个专为训练模型而设计的 Python 库,该模型能够处理自然语言问题并生成 SQL 查询作为响应。我们将把这个实现集成到 Streamlit 应用中,创建一个聊天机器人,方便用户提问并对返回的查询结果进行解释。

🤖 Text-to-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 的主要功能,这些功能增强了数据交互能力:

特征 描述
🚀 模型培训 在训练过程中,使用数据定义语言 (DDL) 语句、文档和 SQL 查询等数据源来训练 RAG 模型。
🤖 用户查询处理 用户可以用自然语言提出问题,Vanna.AI 会生成 SQL 查询来回答。
📚 文档 我们提供详尽的文档、专门的网站和 Discord 支持社区,以提供全面的帮助。
🔌 数据库连接 Vanna 允许连接多个数据库,使用户不仅可以检索 SQL 查询,还可以通过建立与各自数据库的连接来执行这些查询。
🤔 人工智能生成的推荐问题 该框架包含生成人工智能驱动问题的功能,并为用户可以探索的其他查询提供建议。

🛠️ 简单实现

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


安装 vanna-ai

!pip install vanna


实施步骤

按照以下步骤即可实现一个简单的文本转 SQL 示例:

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

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

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

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

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?')

Enter fullscreen mode Exit fullscreen mode

📃 sql query

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;
Enter fullscreen mode Exit fullscreen mode

📊 plotly chart

❓ New Questions

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?
Enter fullscreen mode Exit fullscreen mode

🧪 模型训练

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

  1. 登录您的账户https://vanna.ai/并创建一个新模型。
  2. 接下来我们将定义如何训练模型。在下一个示例中,我们将使用数据定义语言 (DDL)、文档和查询。
# Check the models available in the account
vn.get_models()
Enter fullscreen mode Exit fullscreen mode
['ecommerce-test', 'demo-tpc-h', 'tpc', 'chinook', 'thelook']
Enter fullscreen mode Exit fullscreen mode
# Set the model
vn.set_model("ecommerce-test")
Enter fullscreen mode Exit fullscreen mode
# 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)

Enter fullscreen mode Exit fullscreen mode

我的代码仓库中,你可以找到所有用于训练模型和回答诸如以下问题的脚本、文档和查询语句:

# 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))
Enter fullscreen mode Exit fullscreen mode
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;
Enter fullscreen mode Exit fullscreen mode

💬 Streamlit聊天机器人

描述

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


快速入门

  1. 克隆仓库

    GitHub 标志 r0mymendez /文本转 SQL

    使用 vanna-ai 和 streamlit 实现文本到 SQL

    SQL 助手:Streamlit 中的文本转 SQL 应用程序 🤖

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

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


    🧪 什么是LLM模型?

    大型语言模型(LLM)是一种复杂的深度学习模型,它基于庞大的数据集进行训练,能够理解和生成自然语言文本。这些模型采用Transformer架构,包含一个编码器,用于从输入文本序列中提取细微的含义,以及一个解码器,用于理解词语和短语之间错综复杂的关系。训练过程涉及数百万个数据输入,这是创建数百万个超参数的基础,这些超参数可以微调模型的行为。训练过程中巨大的计算需求由图形处理器(GPU)高效处理,从而加速处理并提高模型生成上下文丰富且有意义的文本的能力。


    🤖 Text-to-SQL 和 Vanna.ai

    文本转SQL是一种……



  2. 请将您的DDL脚本、文档和SQL查询添加到此处src\db</code>
  3. 请添加您的凭据src.streamlit\secrets.toml
  4. 执行应用程序

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


🤖 聊天机器人预览

这个应用由 Vanna.AI 和 ✨Streamlit 共同打造,您可以在下方观看演示视频。所有说明文档都已包含在代码readme.md库中 欢迎体验,如果觉得有用,请点个赞!⭐️


📚 参考资料

如果你想学习……


⚠️ 免责声明:在使用 Vanna.AI 应用处理您的个人数据之前,建议您仔细阅读并确认 Vanna.AI 制定的数据保护政策。请务必充分了解您的个人数据在应用框架内的处理和保护方式。在提供任何敏感信息之前,务必遵守隐私和安全法规。

文章来源:https://dev.to/r_elena_mendez_escobar/sql-assistant-text-to-sql-application-in-streamlit-464o