基于大语言模型的自然语言到SQL转换系统,支持MySQL数据库的智能查询。
# 克隆项目
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
# 安装MariaDB (Debian/Ubuntu)
sudo apt update
sudo apt install mariadb-server
# 启动服务
sudo service mariadb start
# 初始化数据库
mysql < mysql_setup.sql
设置环境变量(腾讯云混元示例):
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() 函数 |
系统在标准测试集上表现优异:
📝 测试 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/ # 工具模块
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情