手把手用 PandasAI + Streamlit 搭建自然语言查数据的 AI 数据分析 Web 应用
2026/9/5 15:48:05 网站建设 项目流程

手把手用 PandasAI + Streamlit 搭建自然语言查数据的 AI 数据分析 Web 应用

【免费下载链接】pandas-aiChat with your database or your datalake (SQL, CSV, parquet). PandasAI makes data analysis conversational using LLMs and RAG.项目地址: https://gitcode.com/GitHub_Trending/pa/pandas-ai

业务同事天天来问"上个季度的客单价是多少",数据团队却没人有空写脚本。这种活其实可以交给机器:用PandasAI把自然语言变成可执行的分析代码,再用Streamlit把结果画进网页,就搭出一个能自然语言查数据的 AI 数据分析 Web 应用。这篇文章带你从零跑通全流程。

30秒看懂两者如何配合

整条链路只有一句话:你在页面里输入自然语言 → PandasAI 让 LLM 生成 Python/SQL 并执行 → Streamlit 把结果渲染成表格、图表或数字

环节承担者做什么
理解问题、生成代码PandasAI把"按部门算平均工资"翻译成可执行代码
安全执行、产出结果PandasAI 沙箱跑代码,得到 DataFrame / 图表 / 数字
展示与交互Streamlit输入框、按钮、表格、图表、导出

你不需要写分析脚本,只需要维护数据加载和页面两块代码。

从零到第一次AI数据问答

👇 三步跑起第一个 AI 问答。

第一步:装依赖

pip install pandas-ai streamlit

记得配置 LLM 密钥(如OPENAI_API_KEY),PandasAI 依赖它理解你的问题。

第二步:初始化智能数据湖

把数据表交给SmartDatalakeSmartDataframe的升级版,可挂载多张表并关联查询):

import pandas as pd from pandasai import SmartDatalake sales_df = pd.read_csv("data/sales.csv") agent = SmartDatalake( [sales_df], config={"verbose": True}, )

verbose打开后,控制台会打印 AI 生成的代码,调试问题特别有用。

第三步:提出第一个问题

agent.chat("按部门统计平均工资,并画出柱状图")

运行到这一步,AI 就完成了"理解 → 写码 → 执行 → 出图"的闭环。接下来把它搬进网页。

让AI分析结果直接在页面呈现

用 StreamlitResponse 自动渲染结果

默认情况下chat()把结果返回给 Python。想让结果直接出现在页面上,把StreamlitResponse挂到配置里即可:

from pandasai import SmartDatalake from pandasai.responses.streamlit_response import StreamlitResponse agent = SmartDatalake( [sales_df], config={ "verbose": True, "response_parser": StreamlitResponse, }, )

之后在 Streamlit 页面里这样接住用户输入:

import streamlit as st question = st.text_input("你想分析什么?") if st.button("开始分析") and question: with st.spinner("AI 正在分析…"): agent.chat(question) # 结果自动渲染到页面

DataFrame、图表、数字会被自动识别并转成对应的 Streamlit 组件。

自定义导出 CSV 组件

想给结果加个下载按钮?继承ResponseParser覆盖format_dataframe方法:

from pandasai.responses.streamlit_response import StreamlitResponse class ExportableResponse(StreamlitResponse): def format_dataframe(self, result): super().format_dataframe(result) st.download_button( "导出 CSV", data=result["value"].to_csv(index=False).encode(), file_name="result.csv", mime="text/csv", )

初始化时把"response_parser": ExportableResponse传入配置即可。更多写法参考自定义响应文档。

基于会话状态的多轮追问

AI 分析天然需要上下文:"IT 部门最高工资是多少" 这种问句脱离上一轮就没意义。两种做法:

  • agent.follow_up("IT 部门最高工资是多少")在同一个 Agent 上继续提问,保留对话记忆;
  • st.session_state存历史问题,页面上渲染成对话流,并允许"重新分析"时带着上下文再跑一遍。

两者结合,就是完整的多轮追问体验。

从本地运行到生产可用

本地启动只要一条命令:

streamlit run app.py --server.port 8501

上生产环境注意三件事:

  1. HTTPS 与反向代理:用 Nginx 反代到 Streamlit,证书挂在 Nginx 上;Streamlit 侧设置server.address绑内网端口即可。
  2. 密钥不落代码:LLM 的 API Key 走环境变量或密钥管理服务,别写进app.py
  3. 按技能机制扩展:PandasAI 支持用@skill装饰器注册自定义函数,AI 可以按需调用。比如写一个调用st.plotly_chart的技能,AI 分析到趋势类问题时就会触发它输出交互图表。做法见官方 skills 文档。

常见坑与优化建议

AI 理解错字段怎么办?列名是 AI 的主要依据。把region改成region_name、把"客单"这类业务黑话换成标准名,准确率会明显提升;也可在create()时为列补充 description。

大表加载慢?避免把千万行 CSV 整个塞进内存。优先用 SQL 数据源或 parquet 格式,让查询下推到数据库;页面只展示聚合后的结果。

多轮上下文丢失?Agent 实例如果每次请求都重建,记忆就清零了。把 Agent 放进st.session_state复用,或改用follow_up()

AI 生成的代码不安全?生产部署建议启用 Docker 沙箱执行代码,AI 生成的 Python 不会直接跑在你的宿主机上,相关配置见仓库的extensions/sandbox/docker/目录。

结果偶发不一致?把温度调低,并在问题里写清口径("近 90 天,按自然月汇总"),比反复重试更有效。

写在最后

这套组合的价值一句话:把"提需求—写脚本—出图"的链路压缩成一句话,数据团队从重复取数里解放出来。跑通之后可以往三个方向深入:接上生产数据库做实时查询、用 skills 沉淀团队常用的分析套路、给页面加上登录与权限控制,让它真正能交给业务团队日常使用。

【免费下载链接】pandas-aiChat with your database or your datalake (SQL, CSV, parquet). PandasAI makes data analysis conversational using LLMs and RAG.项目地址: https://gitcode.com/GitHub_Trending/pa/pandas-ai

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询