news 2026/9/13 11:35:43

如何用 PandasAI v3 语义层接入 PostgreSQL 表并用自然语言查询

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 PandasAI v3 语义层接入 PostgreSQL 表并用自然语言查询

如何用 PandasAI v3 语义层接入 PostgreSQL 表并用自然语言查询

【免费下载链接】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 v3,想把 PostgreSQL 数据库里的一张表接入语义层(semantic layer),然后用自然语言直接提问而不是手写 SQL,本文给出的完整路径是:安装pandasai-sql[postgres]扩展 → 用pai.create()声明数据源并生成 schema → 用pai.load()加载数据集 → 调用chat()提问。适用前提:Python3.8+ <=3.11,一个可用的 LLM(文档示例通过pandasai-litellm扩展使用 OpenAI 模型),以及一个可访问的 PostgreSQL 实例和数据库账号。

准备:安装 PandasAI 与 SQL 扩展

PandasAI 基础包不包含 SQL 扩展,需要按目标数据库单独安装。接入 PostgreSQL 时安装postgresextra:

pip install pandasai pandasai-litellm pip install pandasai-sql[postgres]

也可以用 poetry:poetry add pandasai pandasai-litellmpoetry add pandasai-sql[postgres]postgresextra 会带进psycopg2-binary驱动,见 extensions/connectors/sql/pyproject.toml。

PandasAI v3 的 LLM 不再是内置功能,而是扩展,且配置是全局的(通过pai.config.set()生效于所有 dataframe,不再按单个 dataframe 传 config):

import pandasai as pai from pandasai_litellm.litellm import LiteLLM llm = LiteLLM(model="gpt-4.1-mini", api_key="YOUR_OPENAI_API_KEY") pai.config.set({ "llm": llm })

YOUR_OPENAI_API_KEY替换为你自己的 API key;迁移指南的示例中使用的是gpt-4o-mini,两者均出自文档示例,可按 LiteLLM 支持的模型自行选择。

用 pai.create() 声明 PostgreSQL 数据源

v2 里是用PostgreSQLConnector直接构造SmartDataframe;v3 改为通过语义层的pai.create()声明数据源。最小可用写法(字段均来自 docs/v3/migration-guide.mdx 的迁移示例):

import pandasai as pai sql_table = pai.create( path="company/sales", description="Sales data from PostgreSQL", source={ "type": "postgres", "connection": { "host": "localhost", "database": "mydb", "user": "${DB_USER}", "password": "${DB_PASSWORD}" }, "table": "sales" } )

各参数在 docs/v3/semantic-layer/new.mdx 中的说明:

  • path:数据集在 PandasAI 中的唯一标识,格式为"organization/dataset",例如"acme-corp/sales-data";组织标识在你的组织内唯一,数据集标识在组织内唯一。
  • source.type:数据源类型。PostgreSQL 在文档的 type 列表中写作 "postgresql",但所有可运行的示例(Pythonpai.create()示例、YAML 示例和仓库集成测试)使用的都是type: "postgres",本文代码块与示例保持一致。
  • source.connection:连接信息,包含hostportdatabaseuserpassword。文档明确要求敏感信息用环境变量占位(如${DB_USER}${DB_PASSWORD}),不要硬编码凭据。
  • source.table:要查询的表名。

如果还需要向 LLM 说明列的含义,可以追加columns参数(docs/v3/semantic-layer/data-ingestion.mdx 的 MySQL 示例即此结构):

"columns": [ {"name": "transaction_id", "type": "string", "description": "Unique identifier for each transaction"}, {"name": "quantity", "type": "integer", "description": "Number of items sold"} ]

不传columns时,输入的全部列都会进入语义层;传了则只包含声明的列。支持的type取值:stringintegerfloatdatetimeboolean

调用pai.create()后,项目datasets/目录下会自动生成一份 YAML 配置文件。你也可以跳过 Python API,直接在datasets/organization_name/dataset_name目录下手写schema.yaml,PostgreSQL 源的 YAML 形态如下(来自 docs/v3/semantic-layer/new.mdx):

source: type: postgres connection: host: postgres-host port: 5432 database: postgres user: postgres password: ****** table: orders view: false

注意该文档示例中password为脱敏占位******,实际使用时替换为真实密码或按安全建议改为环境变量;hostdatabaseusertable同理,替换为你自己的值。

加载数据集并用自然语言查询

数据集创建完成后,用pai.load(path)加载,再调用chat()提问:

dataset = pai.load("company/sales") response = dataset.chat("What is the total sales by product?") print(response)

这是 docs/v3/migration-guide.mdx 中 "Migrate Data Connectors" 一步之后的查询方式,与 CSV/parquet 数据集的用法一致。chat()的返回类型取决于问题,可能是 string、dataframe、chart 或 number(见 docs/v3/getting-started.mdx)。

验证接入是否成功

仓库的集成测试 tests/integration_tests/sql/test_sql.py 展示了文档体系中对 PostgreSQL 数据集的两类检查,可以照着核对:

  1. schema 文件已生成:datasets/<organization>/<dataset>/schema.yaml存在(测试断言schema.yaml路径存在)。
  2. 数据可加载、可查询:pai.load(slug)后调用head()能取到表头数据;对数据集调用chat("Give me all the dataset")返回结果对象,其.value为 DataFrame。

如果chat()报连接类错误,文档没有给出排错顺序,只能确认上面 connection 字段与数据库实例的 host、port、账号是否对应。

从 v2 迁移过来时的对应关系

如果你的代码里还有 v2 写法,对照关系如下(docs/v3/migration-guide.mdx):

v2v3
pip install pandasai(含内置 connector)pip install pandasai-sql[postgres](扩展独立安装)
from pandasai.connectors import PostgreSQLConnectorimport pandasai as pai
SmartDataframe(PostgreSQLConnector(config={...}))pai.create(path=..., source={"type": "postgres", ...})
每个 dataframe 单独传config={"llm": llm}全局pai.config.set({"llm": llm})

迁移指南的 "Basic Chat Test" 给出了一个不依赖数据库的冒烟测试:用pai.DataFrame包装一个内存 DataFrame 并chat("What is the sum of x?"),可以先验证 LLM 配置是否正常,再排查数据库侧问题。

限制与注意事项

  • 语义层在文档中标注为实验性功能(experimental feature),文档建议面向进阶用户;schema 定义出错时优先检查columnstype是否落在上述五种取值内。
  • pai.create()支持的其他数据源(MySQL、BigQuery、Snowflake 等)取决于已安装的数据扩展;云数据扩展(Snowflake、Databricks、BigQuery、Oracle)需要企业版 license,PostgreSQL 所在的pandasai-sql不需要。
  • v2 的save_chartsenable_cachesecurity等配置项在 v3 已移除,配置里只保留llmsave_logsverbosemax_retries这类现行选项。

下一步可以继续查阅 Data Ingestion 了解全部数据扩展清单,以及 Semantic Data Layer 中语义层的作用与 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 11:34:00

ANT9921内置升压H类功放芯片原理与实战设计指南

1. 为什么ANT9921不是“又一款普通功放芯片”——从30W单声道背后的真实供电瓶颈说起 你拆过市面上那些标称“30W输出”的小体积音频板吗&#xff1f;我拆过不下二十块&#xff0c;八成以上在满功率播放时&#xff0c;电源端口会明显发烫&#xff0c;用万用表一测&#xff0c;V…

作者头像 李华
网站建设 2026/9/13 11:30:55

MogaNet图像分类实战:从模型结构到训练与遮挡分析

简介&#xff1a;面向深度学习研究者与计算机视觉初学者的MogaNet图像分类实战资源包&#xff0c;聚焦多阶博弈论交互视角下的纯卷积神经网络设计。MogaNet在ImageNet等基准上兼顾精度与参数效率&#xff0c;这套资料围绕其训练、评估与推理流程&#xff0c;帮助读者快速上手并…

作者头像 李华
网站建设 2026/9/13 11:30:23

CharLS源码解析:JPEG-LS无损压缩编码链路与工程实践

简介&#xff1a;面向图像压缩算法研究者和C开发者的CharLS开源库1.0源码包&#xff0c;专门实现JPEG-LS无损/近无损压缩标准&#xff0c;提供编码解码、头文件接口及算法仿真分析所需的核心模块。压缩包共78个文件&#xff0c;约4.48MB&#xff0c;包括接口实现、核心jpegls算…

作者头像 李华
网站建设 2026/9/13 11:29:41

AI+职业测评如何提升电商人才筛选效率

1. 电商人才筛选的痛点与破局之道 电商行业的人才争夺战早已进入白热化阶段。我见过太多企业HR每天筛选上百份简历&#xff0c;却依然找不到能真正带来业绩增长的人才。传统招聘方式存在三个致命缺陷&#xff1a; 简历注水严重&#xff1a;销售冠军的数据可能来自团队业绩 面…

作者头像 李华
网站建设 2026/9/13 11:29:35

PHP中的自动加载机制是什么?

自动加载机制是什么&#xff1f;在PHP中&#xff0c;自动加载机制允许你在需要时自动包含&#xff08;加载&#xff09;类文件&#xff0c;而无需在每个文件中手动使用require或include。这样&#xff0c;当你尝试使用一个还未被包含的类时&#xff0c;PHP会自动找到并包含这个…

作者头像 李华