20行Python代码,利用Streamlit和Vanna,让SQL数据库拥有智能聊天机器人
创始人
2025-07-12 05:30:54
0

一、前言

出于说明目的,本指南优化了代码行数来进行演示。对于功能更丰富的聊天机器人代码,可以参考如下GitHub存储库。

【GitHub Repo】:https://github.com/vanna-ai/vanna-streamlit

首先,让我们看看最终的产品。给定一个包含有关唱片销售信息的示例SQLite数据库,我们可以制作一个文本框,允许用户使用自然语言提问,然后:

  • 基于问题生成SQL语句。
  • 以表格形式显示结果。
  • 以图表形式显示结果。

,时长00:15

聊天机器人的运行示例

二、Streamlit和Vanna

现在让我们来分解一下。首先,我们将导入两个Python软件包:Streamlit和Vanna。

  • Streamlit提供用户界面。
  • Vanna提供使用LLM(即人工智能)生成SQL的基础设施。
import vanna as vn
import streamlit as st

三、设置

3.1 模型设置

在这里,我们将使用Vanna API密钥,将Vanna Retrieval Augmentation模型设置为“chinook”,该模型具有此数据库的元数据,并连接到SQLite数据库,这样我们就可以运行生成的SQL语句。

vn.set_api_key(st.secrets["vanna_api_key"])
vn.set_model('chinook')
vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')

3.2 设置文本框

my_question = st.text_input("Ask me a question that I can turn into SQL", key="my_question")

图片图片

3.3 使用AI生成SQL语句

sql = vn.generate_sql(my_question)
st.code(sql, language='sql')

图片图片

3.4 显示表格

df = vn.run_sql(sql)    
st.dataframe(df, use_container_width=True)

3.5 使用AI生成图表并显示

fig = vn.get_plotly_figure(plotly_code=vn.generate_plotly_code(questinotallow=my_question, sql=sql, df=df), df=df)
st.plotly_chart(fig, use_container_width=True)

图片图片

四、将所有内容整合在一起

这实际上就是示例中显示的完整代码!

import vanna as vn
import streamlit as st

vn.set_api_key(st.secrets["vanna_api_key"])
vn.set_model('chinook')
vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')

my_question = st.session_state.get("my_question", default=None)
if my_question is None:
    st.image("chinook-schema.png", use_column_width=True)
    my_question = st.text_input("Ask me a question that I can turn into SQL", key="my_question")
else:
    st.title(my_question)
    sql = vn.generate_sql(my_question)
    st.code(sql, language='sql')
    df = vn.run_sql(sql)    
    st.dataframe(df, use_container_width=True)
    fig = vn.get_plotly_figure(plotly_code=vn.generate_plotly_code(questinotallow=my_question, sql=sql, df=df), df=df)
    st.plotly_chart(fig, use_container_width=True)
    st.button("Ask another question", on_click=lambda: st.session_state.clear())

图片图片

五、更多内容

如果想了解Vanna更多内容及下载相关源码,可通过如下链接查询。

【GitHub】:https://github.com/vanna-ai/vanna

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
P2P的自白|我不生产内容,我... 现在一提起P2P,人们就会联想到正在被有关部门“围剿”的互联网理财服务。×租宝事件使得劳...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...