业务人员不会写SQL,每次统计订单、分析营收都要找开发;DBA每天重复解析慢SQL、手动建索引,大量时间消耗在重复工作上。

本文完整分享InnoAI SQL助手实战项目:基于国产化openEuler服务器,结合MySQL 8.0、腾讯TokenHub大模型,实现自然语言生成只读SQL、自动查询、AI业务解读、EXPLAIN智能调优,同时提供命令行+Streamlit网页双端,全程可落地、含完整部署代码与界面演示

 

项目亮点

1. 纯国产化Linux环境部署,适配企业服务器标准;

2. 双层安全防护:仅放行SELECT、密钥文件600权限隔离;

3. 一套业务代码复用终端+Web,无重复开发;

4. 自动识别全表扫描/文件排序,输出可直接执行索引语句;

5. systemd托管网页服务,开机自启、崩溃自动重启。

分类 组件

操作系统 openEuler 2203 SP4

数据库 MySQL 8.0.45(二进制部署)

Python 3.11.9 源码独立编译

大模型网关 腾讯云TokenHub(DeepSeek V4 Pro / Qwen3.5-Plus)

Python依赖 pymysql、python-dotenv、langchain-openai、Streamlit、tabulate

交互入口 终端CLI + Streamlit可视化Web

一、整体四层技术架构

 1. 接入交互层(双使用入口)

- 命令行终端: python3 main.py  交互式菜单,适合运维调试、批量测试;

- Streamlit网页:浏览器可视化面板,业务人员直接使用,自带输入校验、表格渲染、代码复制。

2. Python核心分层(解耦设计,5个核心文件)

1.  main.py :总调度层,封装NL2SQL、SQL调优公共逻辑,CLI/Web共用底层函数;

2.  web_main.py :Web界面层,只做UI渲染,不重复业务代码;

3.  prompts.py :提示词工程层,统一管理SQL生成/调优Prompt,内置SQL清洗提取工具;

4.  mysql_client.py :数据访问层,封装数据库连接、SQL危险语句拦截、EXPLAIN获取;

5.  .env :独立配置文件,存放数据库账号、LLM密钥,敏感信息与代码分离。

3. 底层数据持久层

openEuler虚拟机部署MySQL 8.0.45,单业务库 testdb ,唯一业务表 order_info 电商订单表,预置20条标准测试订单数据,作为项目唯一数据源。

4. AI大模型服务层

依托腾讯云TokenHub聚合网关,一套API兼容DeepSeek、通义千问等多款模型,统一鉴权计费,无需对接多家厂商SDK。

 二、环境完整部署教程

2.1 openEuler系统初始化

关闭防火墙与SELinux、配置阿里NTP时间同步、安装编译依赖

 

 2.2 Python3.11.9 源码编译安装

1. 上传源码包至 /usr/local/src ,编译独立环境,不覆盖系统Python

 2. 配置国内pip镜像并安装项目依赖

 2.3 MySQL 8.0.45 二进制部署

1. 创建mysql系统用户、初始化数据库、配置systemd自启服务;

2. 新建业务库 testdb 与订单表 order_info ,插入20条测试数据:

 (我这里是因为创过了所以显示存在,正常情况是提示,ok)

2.4 腾讯TokenHub大模型密钥申请

1. 腾讯云完成实名认证,进入TokenHub平台新建API Key;

2. 推荐无长思考链模型: deepseek-v4-pro  /  qwen3.5-plus ;

3. 新建项目配置文件 .env ,设置600权限防止密钥泄露!

 

 三、项目核心代码分层讲解

项目目录结构

/opt/mysql_ai_tools
├── .env                # 密钥配置(600权限)
├── main.py             # 核心调度、终端入口
├── mysql_client.py     # 数据库封装+SQL安全拦截
├── prompts.py          # 提示词统一管理
└── web_main.py         # Streamlit网页界面

3.1 mysql_client.py 安全数据库层

核心能力:危险SQL拦截,正则匹配 INSERT/UPDATE/DELETE/DROP/ALTER 等语句直接抛出异常,仅允许SELECT;封装 execute_query 普通查询、 get_explain_plan 执行计划获取,自动管理数据库连接释放。

3.2 prompts.py 提示词工程

统一维护 order_info 表结构,两套Prompt模板:

1. NL2SQL模板:约束模型仅输出 sql 代码块,禁止编造字段、只生成只读查询;

2. SQL调优模板:传入EXPLAIN数据,要求输出性能缺陷、建索引语句、优化SQL;

内置 extract_sql 静态方法,三层正则清洗大模型冗余文本,提取纯净可执行SQL。

 3.3 main.py 业务总调度

两大核心对外函数(终端/网页复用)

1.  nl2sql_query(user_input) :自然语言→生成SQL→数据库执行→AI生成业务总结;

2.  sql_tune_analyze(raw_sql) :接收慢SQL→获取执行计划→AI输出索引优化方案;

内置 clean_sql_spacing 工具,自动修复中文标点、全角空格、关键字粘连导致的SQL语法报错。

 3.4 web_main.py Streamlit可视化页面

无需前端JS/CSS,纯Python搭建页面,侧边栏双功能切换:

- 🔍 数据查询与总结:输入中文需求,一键生成SQL+表格+业务解读;

- ⚙️ SQL性能调优:粘贴SELECT语句,自动展示EXPLAIN表格与优化建议;

增加全局CSS美化、代码复制修复、空输入/非法输入拦截校验。

项目执行

 

 

四、Web后台systemd常驻部署

编写服务单元 /etc/systemd/system/mysql-ai-web.service ,实现开机自启、进程异常自动重启

 生效启动命令

最后得到的IP在浏览器可以打开简易服务及完成,可以方便非sql人员使用。

 项目安全与稳定性设计

1. SQL操作隔离:黑名单拦截所有写/删/改语句,杜绝AI幻觉篡改数据库;

2. 密钥安全管控: .env 文件权限600,代码无硬编码、日志不打印账号密钥明文;

3. 全量异常捕获:数据库连接失败、大模型API超时、SQL语法错误均友好提示,程序不崩溃;

4. SQL自动清洗:统一中英文标点、清除特殊空白字符,解决大模型输出语法报错;

5. 进程高可用:Web服务systemd托管,服务器开机自动启动、进程宕机3秒重启。

项目不足与后续扩展方向

1. 当前仅支持单表查询,后续增加多表JOIN关联能力;

2. 新增用户登录权限体系,区分业务只读账号、管理员调优账号;

3. 增加查询结果Excel导出、历史查询记录持久化;

4. 支持本地私有化开源大模型,脱离公有云TokenHub;

5. 定时慢SQL巡检、自动推送优化报告。

总结

本项目完整覆盖国产化服务器环境搭建、Python分层工程开发、大模型NL2SQL落地、Web可视化部署全流程,把AI大模型与MySQL运维深度结合,解决业务人员查数难、DBA优化重复劳动两大痛点。

整套工具轻量化、易部署,适配中小企业数据查询、SQL性能优化一体化落地,可作为Linux运维、Python后端、大模型应用综合实战学习项目。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐