No Description

沐沐 806663507d rag优化 1 month ago
01_langchain_study 8b7a233354 push 1 month ago
02_RAG_study 806663507d rag优化 1 month ago
03_LangGraph_study 8b7a233354 push 1 month ago
.env.example 8b7a233354 push 1 month ago
.gitignore 8b7a233354 push 1 month ago
README.md 8b7a233354 push 1 month ago
car_info.pdf 8b7a233354 push 1 month ago
docker-compose.yml 8b7a233354 push 1 month ago
test.ipynb 8b7a233354 push 1 month ago

README.md

数据分析 Agent

基于 LangChain 框架构建的数据分析 Agent,集成 SQL 查询和 Python 代码执行能力,让 LLM 自动决定调用哪些工具。

功能特性

  • SQL 查询工具: 安全执行只读 SQL 查询,自动防护危险操作
  • Python 代码执行工具: 支持 pandas、numpy、matplotlib 等数据分析库
  • 智能路由: LLM 自动判断何时使用 SQL,何时使用 Python 进行分析
  • 多模型支持: 支持 OpenAI 和 DeepSeek 等兼容 OpenAI API 的模型

环境配置

1. 安装依赖

pip install langchain langchain-openai langchain-community pymysql python-dotenv pandas numpy matplotlib

2. 配置环境变量

复制 .env.example.env 并填写配置:

cp .env.example .env

配置项说明:

数据库配置

DATABASE_URI=mysql+pymysql://用户名:密码@主机名:端口号/数据库名

LLM API 配置

方式 1: 使用 OpenAI API

OPENAI_API_KEY=your_openai_api_key
MODEL_NAME=gpt-4o-mini

方式 2: 使用 DeepSeek API(推荐国内环境)

OPENAI_API_KEY=your_deepseek_api_key
OPENAI_API_BASE=https://api.deepseek.com/v1
MODEL_NAME=deepseek-chat

3. 初始化数据库

python mysql_data.py

使用方法

方式 1: 命令行运行

python 01_langchain_task.py

方式 2: 在代码中调用

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 下单日期

示例查询

# 1. 部门人数统计
"查询每个部门的员工人数"

# 2. 薪资分析
"统计各部门的平均薪资、最高薪资和最低薪资"

# 3. 产品销量
"查询销量最好的产品及其总销售额"

# 4. 复杂分析(需要 Python)
"分析各部门的薪资分布并绘制柱状图"

注意事项

  1. 安全: SQL 工具仅支持 SELECT 查询,Python 执行环境已限制危险操作
  2. API 密钥: 请妥善保管 API 密钥,不要提交到代码仓库
  3. 模型选择: DeepSeek 模型对国内用户更友好,响应速度快且成本低
  4. 日志: 所有操作都有详细日志记录,便于问题排查

许可证

MIT License