如何用 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-litellm、poetry 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:连接信息,包含host、port、database、user、password。文档明确要求敏感信息用环境变量占位(如${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取值:string、integer、float、datetime、boolean。
调用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为脱敏占位******,实际使用时替换为真实密码或按安全建议改为环境变量;host、database、user、table同理,替换为你自己的值。
加载数据集并用自然语言查询
数据集创建完成后,用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 数据集的两类检查,可以照着核对:
- schema 文件已生成:
datasets/<organization>/<dataset>/schema.yaml存在(测试断言schema.yaml路径存在)。 - 数据可加载、可查询:
pai.load(slug)后调用head()能取到表头数据;对数据集调用chat("Give me all the dataset")返回结果对象,其.value为 DataFrame。
如果chat()报连接类错误,文档没有给出排错顺序,只能确认上面 connection 字段与数据库实例的 host、port、账号是否对应。
从 v2 迁移过来时的对应关系
如果你的代码里还有 v2 写法,对照关系如下(docs/v3/migration-guide.mdx):
| v2 | v3 |
|---|---|
pip install pandasai(含内置 connector) | pip install pandasai-sql[postgres](扩展独立安装) |
from pandasai.connectors import PostgreSQLConnector | import 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 定义出错时优先检查
columns的type是否落在上述五种取值内。 pai.create()支持的其他数据源(MySQL、BigQuery、Snowflake 等)取决于已安装的数据扩展;云数据扩展(Snowflake、Databricks、BigQuery、Oracle)需要企业版 license,PostgreSQL 所在的pandasai-sql不需要。- v2 的
save_charts、enable_cache、security等配置项在 v3 已移除,配置里只保留llm、save_logs、verbose、max_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),仅供参考