20行Python代碼,利用Streamlit和Vanna,讓SQL數(shù)據(jù)庫(kù)擁有智能聊天機(jī)器人
一、前言
出于說明目的,本指南優(yōu)化了代碼行數(shù)來進(jìn)行演示。對(duì)于功能更豐富的聊天機(jī)器人代碼,可以參考如下GitHub存儲(chǔ)庫(kù)。
【GitHub Repo】:https://github.com/vanna-ai/vanna-streamlit
首先,讓我們看看最終的產(chǎn)品。給定一個(gè)包含有關(guān)唱片銷售信息的示例SQLite數(shù)據(jù)庫(kù),我們可以制作一個(gè)文本框,允許用戶使用自然語(yǔ)言提問,然后:
- 基于問題生成SQL語(yǔ)句。
- 以表格形式顯示結(jié)果。
- 以圖表形式顯示結(jié)果。
,時(shí)長(zhǎng)00:15
聊天機(jī)器人的運(yùn)行示例
二、Streamlit和Vanna
現(xiàn)在讓我們來分解一下。首先,我們將導(dǎo)入兩個(gè)Python軟件包:Streamlit和Vanna。
- Streamlit提供用戶界面。
- Vanna提供使用LLM(即人工智能)生成SQL的基礎(chǔ)設(shè)施。
import vanna as vn
import streamlit as st
三、設(shè)置
3.1 模型設(shè)置
在這里,我們將使用Vanna API密鑰,將Vanna Retrieval Augmentation模型設(shè)置為“chinook”,該模型具有此數(shù)據(jù)庫(kù)的元數(shù)據(jù),并連接到SQLite數(shù)據(jù)庫(kù),這樣我們就可以運(yùn)行生成的SQL語(yǔ)句。
vn.set_api_key(st.secrets["vanna_api_key"])
vn.set_model('chinook')
vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')
3.2 設(shè)置文本框
my_question = st.text_input("Ask me a question that I can turn into SQL", key="my_question")
圖片
3.3 使用AI生成SQL語(yǔ)句
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)
圖片
四、將所有內(nèi)容整合在一起
這實(shí)際上就是示例中顯示的完整代碼!
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())
圖片
五、更多內(nèi)容
如果想了解Vanna更多內(nèi)容及下載相關(guān)源碼,可通過如下鏈接查詢。
【GitHub】:https://github.com/vanna-ai/vanna