手把手用 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 依赖它理解你的问题。
第二步:初始化智能数据湖
把数据表交给SmartDatalake(SmartDataframe的升级版,可挂载多张表并关联查询):
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上生产环境注意三件事:
- HTTPS 与反向代理:用 Nginx 反代到 Streamlit,证书挂在 Nginx 上;Streamlit 侧设置
server.address绑内网端口即可。 - 密钥不落代码:LLM 的 API Key 走环境变量或密钥管理服务,别写进
app.py。 - 按技能机制扩展: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),仅供参考