logo
0
0
WeChat Login
init-env
Forkfromjaguarliu.cool/course/langchain-course, aheadinit-env1 commits

MySQL NLP-to-SQL 项目

基于大语言模型的自然语言到SQL转换系统,支持MySQL数据库的智能查询。

🚀 功能特性

  • 自然语言查询: 用中文或英文描述查询需求,自动生成SQL
  • MySQL支持: 基于MariaDB/MySQL数据库
  • 复杂查询支持: 支持JOIN、聚合、分组、排序等复杂SQL操作
  • 实时执行: 自动执行生成的SQL并返回结果
  • 错误处理: 完善的异常处理和回滚机制

📋 系统要求

  • Python 3.8+
  • MySQL/MariaDB 数据库
  • 腾讯云混元API密钥或其他兼容OpenAI API的服务

🛠️ 安装部署

1. 环境准备

# 克隆项目
git clone <repository-url>
cd nlp2sql-mysql

# 创建虚拟环境
python -m venv langchain_env
source langchain_env/bin/activate  # Linux/Mac
# 或 langchain_env\Scripts\activate  # Windows

# 安装依赖
pip install -r requirements.txt

2. 数据库设置

# 安装MariaDB (Debian/Ubuntu)
sudo apt update
sudo apt install mariadb-server

# 启动服务
sudo service mariadb start

# 初始化数据库
mysql < mysql_setup.sql

3. API配置

设置环境变量(腾讯云混元示例):

export OPENAI_API_KEY='your-api-key-here'
export OPENAI_BASE_URL='https://api.hunyuan.cloud.tencent.com/v1'
export OPENAI_MODEL='hunyuan-turbos-latest'

🎯 使用方法

运行测试

python test_mysql_nlp2sql.py

支持的查询类型

查询类型示例问题生成的SQL
简单查询"查找所有来自纽约的客户"SELECT * FROM customers WHERE city = 'New York'
表连接"查找Alice的所有订单"多表JOIN查询
条件过滤"查找金额超过100的订单"WHERE amount > 100
聚合统计"统计每个客户的订单数量"GROUP BY + COUNT
排序查询"查找最年轻的客户"ORDER BY + LIMIT
复杂聚合"查找总消费金额最高的客户"SUM + GROUP BY
日期查询"查找8月份的订单"MONTH() 函数

📊 测试结果

系统在标准测试集上表现优异:

  • 8/8 测试全部通过
  • 平均响应时间: 2.15秒 (SQL生成) + <0.01秒 (执行)
  • 🎯 准确率: 100%
  • 🏗️ 支持: JOIN、聚合、排序、分组等复杂操作

样本输出

📝 测试 2/8: 查找Alice的所有订单
生成的SQL: 
SELECT o.order_id, o.product, o.amount, o.order_date
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE c.name = 'Alice';

查询结果: [
    {'order_id': 101, 'product': 'Laptop', 'amount': 1200.00},
    {'order_id': 103, 'product': 'Keyboard', 'amount': 75.50},
    {'order_id': 105, 'product': 'Webcam', 'amount': 50.00}
]
生成时间: 3.24s, 执行时间: 0.00s

🗂️ 项目结构

├── test_mysql_nlp2sql.py    # 主测试脚本
├── mysql_setup.sql         # 数据库初始化脚本
├── requirements.txt        # Python依赖
├── README.md              # 项目文档
├── jupyter/               # Jupyter实验笔记
│   ├── 11-mysql-nlp2sql.ipynb
│   └── ...
└── utils/                 # 工具模块

🔧 技术架构

  • 数据库: MariaDB 10.11 (MySQL兼容)
  • LLM: 腾讯云混元-turbos-latest
  • 框架: LangChain 1.2.0 + PyMySQL
  • 运行环境: Python 3.11

🚨 注意事项

  1. API密钥安全: 请勿在代码中硬编码API密钥
  2. SQL注入防护: 系统使用参数化查询,避免SQL注入
  3. 数据库权限: 建议使用只读账户执行查询
  4. 中英文转换: 部分地名需要中英文映射优化

🤝 贡献指南

  1. Fork 项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情

🔮 未来规划

  • 支持更多数据库类型 (PostgreSQL, SQLite)
  • 添加查询结果可视化
  • 实现查询缓存机制
  • 支持自然语言数据修改 (INSERT/UPDATE/DELETE)
  • Web界面开发
  • 多轮对话查询优化

About

langchain & langgraph 大模型课程仓库

Language
HTML24.6%
Python1.5%
Shell0.2%
Jinja0%
Others73.7%