You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求基于生成式AI的多表SQL数据库可视化方案(适配Streamlit聊天机器人)

支持多表数据库的生成式AI数据可视化解决方案(适配Streamlit聊天机器人)

方案1:LangChain + SQLDatabaseChain + 可视化库

LangChain的SQLDatabaseChain专为多表数据库设计,能解析自然语言查询并生成跨表SQL,搭配Matplotlib/Plotly等可视化库,可快速集成到Streamlit。

操作步骤:

  • 用SQLDatabase.from_uri()连接多表数据库(支持MySQL、PostgreSQL、SQLite等),组件会自动识别表结构与关联关系
  • 初始化SQLDatabaseChain并绑定大模型(如GPT-3.5-turbo、Claude)
  • 接收用户自然语言输入,调用链生成并执行SQL,返回查询结果
  • 根据结果数据类型自动匹配可视化类型,用Streamlit的st.pyplot()或st.plotly_chart()展示图表

示例代码片段:

import streamlit as st
from langchain import SQLDatabase, SQLDatabaseChain
from langchain.chat_models import ChatOpenAI
import plotly.express as px
import pandas as pd

# 连接多表SQLite数据库
db = SQLDatabase.from_uri("sqlite:///your_multi_table_db.db")
llm = ChatOpenAI(temperature=0)
db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)

# Streamlit前端交互
st.title("多表数据库聊天可视化机器人")
user_query = st.text_input("输入你的查询:")

if user_query:
    # 执行自然语言查询
    result = db_chain.run(user_query)
    # 提取查询结果转为DataFrame
    df = pd.read_sql(db_chain.last_sql, db.engine)
    
    # 自动生成适配的可视化图表
    if len(df.columns) == 2 and df.dtypes[1].kind in 'if':
        fig = px.bar(df, x=df.columns[0], y=df.columns[1], title=f"{df.columns[0]} vs {df.columns[1]}")
        st.plotly_chart(fig)
    elif len(df.columns) >= 3 and df.dtypes[1].kind in 'if':
        fig = px.line(df, x=df.columns[0], y=df.columns[1], color=df.columns[2], title="多维度趋势图")
        st.plotly_chart(fig)
    # 展示原始数据
    st.dataframe(df)

方案2:直接调用大模型生成跨表SQL+可视化代码

利用GPT-4、Gemini等大模型的复杂逻辑处理能力,向模型提供完整的数据库schema(表名、字段、关联键),让模型同时生成跨表SQL和可直接运行的Streamlit可视化代码。

核心是构造精准的prompt框架,示例:

你是数据分析师,我有一个多表数据库,schema如下:

  • 表1:orders(order_id INT PRIMARY KEY, user_id INT, order_date DATE, total_amount FLOAT)
  • 表2:users(user_id INT PRIMARY KEY, username VARCHAR, age INT, region VARCHAR)
  • 关联关系:orders.user_id = users.user_id

请处理我的查询:[用户输入的自然语言]

  1. 生成符合SQL标准的跨表查询语句
  2. 生成基于Plotly和Streamlit的可视化代码,要求图表适配数据类型,直接可运行

在Streamlit中执行生成的代码时,需限制执行范围(比如仅允许可视化相关代码),避免安全风险。

方案3:SQLAlchemy + 自定义LLM封装

用SQLAlchemy作为数据库交互层,它天然支持多表关联查询,结合LLM生成SQL语句,再用Pandas读取数据后可视化,适合需要高度自定义逻辑的场景。

操作步骤:

  • 用SQLAlchemy创建数据库引擎和会话
  • 将数据库schema(表结构、关联关系)告知LLM,生成跨表SQL
  • 执行SQL并将结果转为Pandas DataFrame
  • 用可视化库生成图表,通过Streamlit展示

该方案的优势是可自定义SQL校验逻辑(比如检查是否存在非法操作),也能灵活处理复杂的多表关联场景。

注意事项

  • SQL正确性校验:执行LLM生成的SQL前,可增加校验步骤(比如用另一个LLM调用检查SQL是否符合schema,或执行只读查询),避免破坏数据库
  • 可视化自动适配:可根据返回数据的列数、数据类型(数值、分类、时间)自动选择合适的图表类型,提升用户体验
  • 性能优化:对于大型数据库,可限制查询返回的行数,或添加索引优化跨表查询速度

内容的提问来源于stack exchange,提问作者Ramesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:26:11