发布时间:2026/8/1 14:08:06
bashpip install pandasaipip install sqlalchemy pymysql如果你使用 OpenAI 的模型,还需要设置 API Key。建议在环境变量中配置:bashexport OPENAI_API_KEY="你的API Key"## 连接 MySQL 数据库### 第一步:创建数据库连接我们使用 SQLAlchemy 来创建数据库连接。假设你的 MySQL 数据库名为sales_db,用户名是root,密码是123456,主机是localhost,端口是3306。pythonfrom sqlalchemy import create_engine# 创建数据库连接字符串# 格式:mysql+pymysql://用户名:密码@主机:端口/数据库名DATABASE_URI = "mysql+pymysql://root:123456@localhost:3306/sales_db"# 创建数据库引擎engine = create_engine(DATABASE_URI)# 测试连接是否成功with engine.connect() as conn: print("数据库连接成功!")### 第二步:初始化 PandasAI 并连接 LLM接下来,我们需要创建一个 PandasAI 实例,并指定 LLM 后端。这里以 OpenAI 为例:pythonfrom pandasai import SmartDataframefrom pandasai.llm import OpenAI# 初始化 LLM(使用 OpenAI 的 GPT-4 模型)llm = OpenAI(model="gpt-4")# 创建 SmartDataframe,传入 LLM 实例和数据库连接df = SmartDataframe( "SELECT * FROM orders", # 可以是一个 SQL 查询,也可以直接传表名 config={"llm": llm}, connection=engine)# 现在你可以用自然语言提问了response = df.chat("哪个区域的销售额最高?")print(response)看到没?你只需要把数据库连接引擎传给 SmartDataframe,然后就可以像聊天一样问问题了。它内部会自动把问题转换成 SQL 并执行。## 实战案例:分析销售数据### 场景描述假设我们有一个orders表,包含以下字段:-order_id:订单编号-customer_id:客户编号-region:销售区域(如华东、华南、华北)-amount:订单金额-order_date:订单日期-status:订单状态(已完成、已取消、待支付)我们想要分析:1. 各区域的销售总额2. 最近一个月的销售趋势3. 取消订单的比例### 代码示例:多轮对话分析pythonfrom pandasai import SmartDataframefrom pandasai.llm import OpenAIfrom sqlalchemy import create_engine# 配置数据库连接engine = create_engine("mysql+pymysql://root:123456@localhost:3306/sales_db")# 初始化 LLM 和 SmartDataframellm = OpenAI(model="gpt-4")df = SmartDataframe("SELECT * FROM orders", config={"llm": llm}, connection=engine)# 第一问:各区域的销售总额result1 = df.chat("按区域汇总销售总额,从高到低排序")print("各区域销售额:")print(result1)# 第二问:最近一个月的每日销售趋势result2 = df.chat("统计最近30天每天的销售总额,并画出趋势图")print("销售趋势:")print(result2)# 第三问:取消订单的比例result3 = df.chat("计算取消订单占总订单的比例")print("取消比例:")print(result3)运行这段代码,你会看到 PandasAI 自动完成了所有数据聚合、分组、排序等操作。如果你要求它画图,它还会自动生成 matplotlib 图表并展示。## 高级用法:自定义提示词与缓存有时候你可能希望对 LLM 的提问方式做更精细的控制。PandasAI 支持自定义提示词模板,还可以开启缓存避免重复查询。pythonfrom pandasai import SmartDataframefrom pandasai.llm import OpenAIfrom pandasai.prompts import PromptTemplate# 自定义提示词模板custom_prompt = PromptTemplate( question="请分析以下销售数据,重点关注高价值客户:{question}", instruction="使用简洁的中文回答,并附上关键数据指标。")# 开启缓存,避免相同问题重复执行查询config = { "llm": OpenAI(model="gpt-4"), "cache": True, # 开启缓存 "custom_prompt": custom_prompt, # 自定义提示词}df = SmartDataframe("SELECT * FROM orders", config=config, connection=engine)# 提问,会使用自定义提示词result = df.chat("找出消费金额最高的前5位客户")print(result)## 注意事项与优化建议1.数据安全:因为 LLM 会生成 SQL 查询,务必确保数据库账号只有只读权限,避免误操作导致数据损坏。2.性能问题:如果表数据量很大,建议先在 SQL 查询中限定范围(比如 WHERE 条件),或者使用采样数据。3.模型选择:GPT-4 效果最好但贵,如果预算有限可以先用 GPT-3.5-turbo,对于简单问题也够用。4.错误处理:PandasAI 偶尔会生成错误的 SQL,建议对返回结果做类型检查,或者用 try-except 包裹。## 总结PandasAI 把 LLM 与数据库分析完美结合,让我们告别繁琐的 SQL 和 pandas 操作。你只需要像跟同事聊天一样提问,它就能自动完成数据查询、清洗、分析和可视化。本文从环境搭建到实战案例,完整演示了如何连接 MySQL 数据库,进行自然语言驱动的数据分析。当然,PandasAI 仍在快速迭代中,功能会越来越强大。但请记住,它目前更适合做快速探索性分析,对于生产环境的关键决策,建议还是配合人工审查。希望本文能帮助你打开 AI 数据分析的大门,让数据工作变得更加轻松高效。