PandasAI上手:不写SQL,用自然语言跑通第一份数据查询
【免费下载链接】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
业务方早上发来一句"帮我看下高血压男性患者的平均胆固醇走势",你得找到CSV、拼好pandas代码、再截图回传——这种临时取数场景,是每个数据角色的日常。PandasAI(当前版本 3.0.0,MIT 许可)就是为此设计的 Python 库:它基于 LLM 与 RAG,把自然语言问题翻译成 Python 代码和 SQL 语句,再对 CSV、Parquet、SQL 数据库等数据源执行,直接返回结果。
🎯 它解决什么问题、适合谁
传统流程里,取数需求要经过"提需求—排期—写查询"三步,PandasAI 把中间环节压缩成一次对话。它适合三类人:
- 非技术背景的业务、运营人员:不需要会 SQL 或 pandas,直接提问即可;
- 数据分析师:探索性分析阶段用它出初稿,省去重复写取数脚本;
- 工程师:把它当作嵌入应用的查询组件,LLM 可替换。
需要注意它的定位是"对话式取数",不是报表平台。每次提问都会触发一次 LLM 调用,产生 token 费用和几秒到几十秒的延迟,不适合高频、低延迟的线上场景。
📥 安装与最小配置
官方要求 Python 3.8 到 3.11(pyproject.toml中声明为>=3.8,<3.12)。安装主包和一个 LLM 扩展(以 LiteLLM 为例,OpenAI 等主流模型均支持):
pip install pandasai pandasai-litellm最小可运行的调用只有四行:
import pandasai as pai from pandasai_litellm.litellm import LiteLLM pai.config.set({"llm": LiteLLM(model="gpt-4.1-mini", api_key="你的密钥")}) df = pai.read_csv("examples/data/heart.csv") print(df.chat("各年龄段患者的胆固醇平均值是多少?"))pai.read_csv返回的是 SmartDataFrame 对象,.chat()的返回值有四种类型:字符串、数字、DataFrame、图表(对应pandasai/core/response/下的 chart、number、string、dataframe 等解析器)。问"平均值是多少"通常得到数字,问"给我画个分布图"则返回图表。
💬 第一次查询的完整执行链路
从图中可以看到典型的交互形态:左侧是带分页的数据表格,右侧是 AI 助手面板。一次chat()调用内部的流程大致是:
- 语义理解:结合数据表 schema(
pandasai/data_loader/会先解析列名与类型)生成 Python 代码或 SQL 查询; - 校验与清洗:
pandasai/core/code_generation/下的code_validation.py和code_cleaning.py对生成代码做静态检查; - 执行:在沙箱环境中运行代码(本地或 Docker);
- 结果解析:按问题意图把输出归类为数字、文本或图表。
由于 SQL 查询在本地走 DuckDB 引擎(依赖中锁定了duckdb >=1.0),对 Parquet、CSV 这类文件型数据也能直接写 SQL,不必先加载进内存。
⚠️ 能力边界与注意事项
LLM 生成的代码不保证一次正确,结果也可能与问题意图有偏差。生产使用前建议关注两点:一是开启官方的 judge-agent 校验(docs/v3/judge-agent.mdx有说明),由另一个 LLM 复核生成代码的合理性;二是把输出接入你自己的业务校验,比如对"患者平均年龄 130 岁"这类结果做范围检查。
代码执行如何隔离
本地执行直接跑在 Python 进程里,适合开发调试;生产环境建议启用 Docker 沙箱扩展(extensions/sandbox/docker/),在容器内运行生成代码,避免 LLM 生成的任意 Python 触碰宿主环境。对 SQL 路径,pandasai/helpers/sql_sanitizer.py会对查询做清洗,降低注入风险。
权限边界怎么设
开源库本身没有用户体系,权限管理在配套的 Web 平台中。数据集的可见性分四档:Private(仅自己)、Organization(组织内)、Public(公开)、Password Protected(密码访问),并支持按成员粒度添加 Viewer:
另外注意目录里的pandasai/ee/是企业版模块(独立许可证),skills 等能力属于 ee 目录,使用时需确认授权范围。
🧩 典型落地场景
按上手难度递进,推荐三条试点路径:
- 单 CSV 问答:从仓库自带的
examples/data/heart.csv(心脏病数据集)开始,验证"列级统计、分组聚合、相关性"三类问题能否稳定命中意图; - 文件数据湖:用
pai.read_parquet加载 Parquet 文件,结合 DuckDB 跑跨文件 SQL,适合日志、埋点这类列式存储; - 语义层:v3 新增的语义层(
docs/v3/semantic-layer/)支持先定义视图与转换,再让对话基于业务口径查询,可参考examples/semantic_layer_csv.ipynb。
选型时建议固定一个数据集、准备 10~20 个真实业务问题做回归,统计答对率后再决定是否扩大使用范围,而不是直接上线。
📚 下一步建议
- 读源码:从
pandasai/core/code_generation/base.py开始,看提示词如何拼装;再看pandasai/data_loader/了解 schema 是如何喂给 LLM 的; - 跑示例:
examples/quickstart.ipynb是最短路径,examples/docker_sandbox.ipynb演示沙箱执行; - 看文档:
docs/v3/large-language-models.mdx列出可接入的模型,docs/v3/migration-guide.mdx说明 v2 到 v3 的破坏性变更; - 试点切入点:选一份 10 万行以内、列名清晰的 CSV,先跑"描述性统计"类问题,再逐步引入聚合与图表,遇到输出偏差时优先检查 schema 描述是否完整。
【免费下载链接】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),仅供参考