一个基于大语言模型的自然语言转 SQL 查询系统,支持通过自然语言提问来查询数据库,并提供 AI 智能分析结果。
- 自然语言查询 (NL2SQL): 使用自然语言提问,自动生成并执行 SQL 查询,AI 分析结果
- SQL 调试工具: 直接编写和执行 SQL 语句,支持历史记录
- Excel 数据导入: 快速导入 Excel 文件到数据库
- 数据库管理: 查看和管理数据库表结构
- 多模型支持: 支持配置多个 LLM 模型(Claude、GPT 等)
- 对话式交互: 完整的对话历史记录和流程追踪
- FastAPI: 高性能 Web 框架
- SQLite: 轻量级数据库
- Python 3.x: 核心开发语言
- React 18: UI 框架
- Ant Design 5: UI 组件库
- Vite: 构建工具
- React Router: 路由管理
TableQA/
├── config/ # 配置文件目录
│ ├── config.json # 数据库配置
│ ├── model_config.json # 模型配置
│ └── infer.template # 推理模板
├── data/ # 数据目录
│ └── sqlite3.db # SQLite 数据库文件
├── demo/ # 前端应用
│ └── react-demo/ # React 前端项目
│ ├── src/ # 源代码
│ └── package.json # 依赖配置
├── src/ # 后端源代码
│ ├── api/ # API 路由
│ ├── config/ # 配置加载
│ ├── models/ # 数据模型
│ ├── services/ # 业务逻辑
│ ├── utils/ # 工具函数
│ └── app.py # FastAPI 应用入口
├── uploads/ # 文件上传目录
├── requirements.txt # Python 依赖
└── run_server.py # 服务启动脚本
- Python: 3.8 或更高版本
- Node.js: 16.x 或更高版本
- npm: 8.x 或更高版本
# 在项目根目录下
pip install -r requirements.txt# 进入前端目录
cd demo/react-demo
# 安装依赖
npm install编辑 config/model_config.json:
{
"models": {
"claude-sonnet-4-20250514": {
"type": "online",
"url": "https://api.anthropic.com/v1/messages",
"model": "claude-sonnet-4-20250514",
"api_key": "Bearer sk-ant-xxx",
"description": "Claude Sonnet 4"
},
"gpt-4": {
"type": "online",
"url": "https://api.openai.com/v1/chat/completions",
"model": "gpt-4",
"api_key": "Bearer sk-xxx",
"description": "GPT-4"
}
},
"default_model": "claude-sonnet-4-20250514"
}编辑 config/config.json,默认使用 SQLite:
{
"database": {
"type": "sqlite",
"path": "data/sqlite3.db"
}
}# 在项目根目录下
python run_server.py后端服务将在 http://localhost:8080 启动
# 在 demo/react-demo 目录下
npm run dev前端服务将在 http://localhost:5173 启动(默认端口)
打开浏览器访问:http://localhost:5173
-
在左侧面板输入自然语言问题,例如:
- "查询所有用户的信息"
- "统计每个部门的员工数量"
- "找出销售额最高的前10个产品"
-
选择要查询的数据表
-
选择使用的 LLM 模型
-
点击"开始查询",系统会:
- 自动生成 SQL 语句
- 执行查询
- AI 分析结果并给出解释
-
切换到"SQL 调试"页面
-
在编辑器中输入 SQL 语句
-
点击"执行查询"查看结果
-
支持查看历史执行记录
-
切换到"Excel 导入"页面
-
上传 Excel 文件
-
配置导入选项(表名、是否覆盖等)
-
点击导入,数据将自动导入数据库
-
切换到"数据库管理"页面
-
查看所有数据表
-
查看表结构和数据预览
启动后端服务后,访问以下地址查看完整 API 文档:
- Swagger UI:
http://localhost:8080/docs - ReDoc:
http://localhost:8080/redoc
GET /health- 健康检查GET /tables- 获取所有数据表POST /query- 执行 NL2SQL 查询POST /chat- AI 对话分析POST /execute_sql- 执行原始 SQLPOST /excel/upload- 上传 Excel 文件GET /models- 获取可用模型列表
# 开发模式启动(自动重载)
uvicorn src.app:app --reload --host 0.0.0.0 --port 8080cd demo/react-demo
npm run dev# 前端构建
cd demo/react-demo
npm run build
# 构建产物在 demo/react-demo/dist 目录问题: ModuleNotFoundError: No module named 'xxx'
解决: 确保已安装所有依赖
pip install -r requirements.txt问题: API 请求失败,CORS 错误
解决:
- 确保后端服务已启动在
http://localhost:8080 - 检查前端 API 配置文件
demo/react-demo/src/api/index.js
问题: 401 Unauthorized 或 API Key 错误
解决:
- 检查
config/model_config.json中的 API Key 是否正确 - 确保 API Key 格式为
Bearer sk-xxx - 验证 API 端点 URL 是否正确
问题: 文件上传或解析错误
解决:
- 确保 Excel 文件格式正确(.xlsx 或 .xls)
- 检查文件大小是否超过限制
- 确保
uploads/目录存在且有写入权限
问题: 无法连接到数据库
解决:
- 确保
data/sqlite3.db文件存在 - 检查文件权限
- 如果文件不存在,系统会自动创建
本项目仅供学习和研究使用。
欢迎提交 Issue 和 Pull Request!
如有问题或建议,请通过 Issue 反馈。