# 数据分析 Agent 基于 LangChain 框架构建的数据分析 Agent,集成 SQL 查询和 Python 代码执行能力,让 LLM 自动决定调用哪些工具。 ## 功能特性 - **SQL 查询工具**: 安全执行只读 SQL 查询,自动防护危险操作 - **Python 代码执行工具**: 支持 pandas、numpy、matplotlib 等数据分析库 - **智能路由**: LLM 自动判断何时使用 SQL,何时使用 Python 进行分析 - **多模型支持**: 支持 OpenAI 和 DeepSeek 等兼容 OpenAI API 的模型 ## 环境配置 ### 1. 安装依赖 ```bash pip install langchain langchain-openai langchain-community pymysql python-dotenv pandas numpy matplotlib ``` ### 2. 配置环境变量 复制 `.env.example` 为 `.env` 并填写配置: ```bash cp .env.example .env ``` #### 配置项说明: **数据库配置** ```env DATABASE_URI=mysql+pymysql://用户名:密码@主机名:端口号/数据库名 ``` **LLM API 配置** 方式 1: 使用 OpenAI API ```env OPENAI_API_KEY=your_openai_api_key MODEL_NAME=gpt-4o-mini ``` 方式 2: 使用 DeepSeek API(推荐国内环境) ```env OPENAI_API_KEY=your_deepseek_api_key OPENAI_API_BASE=https://api.deepseek.com/v1 MODEL_NAME=deepseek-chat ``` ### 3. 初始化数据库 ```bash python mysql_data.py ``` ## 使用方法 ### 方式 1: 命令行运行 ```bash python 01_langchain_task.py ``` ### 方式 2: 在代码中调用 ```python from 01_langchain_task import run_data_analysis # 基础查询 result = run_data_analysis("查询每个部门的员工人数") print(result) # 复杂分析 result = run_data_analysis("统计各部门的平均薪资、最高薪资和最低薪资") print(result) # 多表关联 result = run_data_analysis("查询销量最好的产品及其总销售额") print(result) # 使用 DeepSeek 模型 result = run_data_analysis( "分析订单趋势", model_name="deepseek-chat" ) print(result) ``` ## 工具说明 ### run_sql_query 执行只读 SQL 查询,用于从数据库查询数据。 **安全限制**: - 仅允许 SELECT 语句 - 禁止 INSERT、UPDATE、DELETE、DROP 等修改操作 **适用场景**: - 查询员工信息、薪资数据 - 查询产品信息、库存数据 - 查询订单数据、销售统计 - 多表关联查询分析 ### execute_python_code 执行 Python 代码进行数据分析、可视化或复杂计算。 **预导入库**: - `pandas as pd` - `numpy as np` - `matplotlib.pyplot as plt` **安全限制**: - 禁止导入 os、subprocess、sys、shutil、socket 等危险模块 **适用场景**: - 数据分析 - 数据可视化 - 统计计算、数据聚合 - 复杂数学运算 ## 数据库结构 ### employees (员工表) | 字段 | 类型 | 说明 | |------|------|------| | id | INT | 员工ID (主键) | | name | VARCHAR(50) | 姓名 | | department | VARCHAR(50) | 所属部门 | | salary | DECIMAL(10,2) | 月薪 | | hire_date | DATE | 入职日期 | ### products (产品表) | 字段 | 类型 | 说明 | |------|------|------| | id | INT | 产品ID (主键) | | product_name | VARCHAR(100) | 商品名称 | | category | VARCHAR(50) | 商品分类 | | price | DECIMAL(10,2) | 单价 | | stock | INT | 当前库存量 | ### orders (订单表) | 字段 | 类型 | 说明 | |------|------|------| | id | INT | 订单ID (主键) | | employee_id | INT | 下单员工ID (外键) | | product_id | INT | 购买商品ID (外键) | | quantity | INT | 购买数量 | | order_date | DATE | 下单日期 | ## 示例查询 ```python # 1. 部门人数统计 "查询每个部门的员工人数" # 2. 薪资分析 "统计各部门的平均薪资、最高薪资和最低薪资" # 3. 产品销量 "查询销量最好的产品及其总销售额" # 4. 复杂分析(需要 Python) "分析各部门的薪资分布并绘制柱状图" ``` ## 注意事项 1. **安全**: SQL 工具仅支持 SELECT 查询,Python 执行环境已限制危险操作 2. **API 密钥**: 请妥善保管 API 密钥,不要提交到代码仓库 3. **模型选择**: DeepSeek 模型对国内用户更友好,响应速度快且成本低 4. **日志**: 所有操作都有详细日志记录,便于问题排查 ## 许可证 MIT License