基于大模型的MySQL智能SQL助手

📅 2026/7/29 12:52:11
基于大模型的MySQL智能SQL助手
一、项目简介InnoAI SQL助手是一套融合大模型与MySQL运维能力的智能工具。简单说就是你用自然语言描述需求它自动生成SQL、执行查询、还能给你做业务数据解读你丢给它一条SQL它自动跑EXPLAIN、分析性能瓶颈、输出索引优化和改写方案。三大核心能力自然语言转SQL说人话就能查数据自动拦截增删改只读安全自动查询AI解读表格化输出结果大模型秒变数据分析师SQL性能调优解析执行计划直接给可执行的索引优化方案技术栈MySQL 8.0 Python 3.11 腾讯云TokenHubDeepSeek/Qwen大模型 Streamlit二、整体架构系统采用四层分层架构每层职责清晰方便维护和扩展层级核心文件职责接入层终端 / Streamlit Web两种使用入口适配不同场景业务层main.py总调度串联三大核心业务流程能力层prompts.py / mysql_client.py提示词工程 数据库操作封装基础设施层MySQL 8.0 / TokenHub大模型数据存储 AI能力输出5个核心文件分工main.py— 业务总调度 命令行交互入口web_main.py— Streamlit Web可视化界面prompts.py— 提示词统一管理 SQL提取工具mysql_client.py— MySQL连接/查询/执行计划封装 安全校验.env— 数据库账号、API密钥等敏感配置600权限加固三、核心功能实现3.1 自然语言转SQLNL2SQL处理流程自然语言输入 → 提示词模板 → 大模型生成SQL → 提取纯净SQL → 7层清洗标准化 → 安全校验 → 执行查询 → AI业务总结提示词设计是关键严格约束模型只输出SELECT、只用指定字段、用代码块包裹NL_TO_SQL_PROMPT f 你是严谨的 MySQL 8.0 数据库开发工程师。 【表结构参考】 {TABLE_SCHEMA} 【强制输出规则】 1. 只能生成 SELECT 查询语句禁止增删改 2. 只能使用列出的5个字段禁止编造字段 3. SQL关键字统一大写用中文别名 4. 最终SQL包裹在 sql 代码块内 5. 只返回纯SQL不输出任何解释文字 【用户需求】 {user_input} SQL清洗7层逻辑解决各大模型输出格式不一致的问题特殊空格统一替换全角/零宽/换行 → 普通空格不可见控制字符清除中文标点批量转英文多空格合并别名内部空格精准清理关键字粘连自动拆分补空格关键字大写标准化3.2 SQL性能调优分析输入一条SELECT系统自动跑EXPLAIN然后大模型分析执行计划给出优化方案SQL_TUNE_PROMPT f 你是资深 MySQL DBA 性能优化专家。 【待分析SQL】{sql_input} 【执行计划数据】{explain_data} 【输出要求】 1. 点明核心性能问题全表扫描/无索引/文件排序等 2. 给出可直接执行的建索引SQL 3. 提供SQL改写优化方案 4. 分点罗列简洁明了 能识别的典型问题typeALL 全表扫描keyNULL 无索引命中Using temporary 临时表开销 Using filesort 文件排序自动建议覆盖索引、联合索引3.3 安全防护双重安全机制提示词层面明确要求只生成SELECT语句代码层面执行前正则匹配危险关键字INSERT/UPDATE/DELETE/DROP/ALTER等命中直接拦截staticmethod def _check_sql_safety(sql: str) - None: danger_keywords [INSERT, UPDATE, DELETE, DROP, ALTER, CREATE, TRUNCATE, REPLACE] for kw in danger_keywords: if re.search(r\b re.escape(kw) r\b, sql_trim): raise Exception(f安全拦截:禁止执行 {kw} 类型语句)四、大模型接入方案选用腾讯云TokenHub大模型聚合平台兼容OpenAI接口标准一套代码可切换多款模型。优势一个密钥调用DeepSeek、Qwen等多款主流模型兼容OpenAI SDK开发成本几乎为零统一计费、统一运维腾讯云基础设施保障高可用踩坑提醒尽量选不带思考链的模型如deepseek-v4-pro、qwen3.5-plus否则思考内容会混入输出导致SQL提取失败。.env配置示例# MySQL配置 MYSQL_HOST127.0.0.1 MYSQL_PORT3306 MYSQL_USERroot MYSQL_PASSWORD123456 MYSQL_DBtestdb ​ # 大模型配置 LLM_API_KEYsk-你的密钥 LLM_BASE_URLhttps://tokenhub.tencentmaas.com/v1 LLM_MODEL_NAMEdeepseek-v4-pro LLM_TEMPERATURE0五、环境搭建速览5.1 基础环境# 系统初始化 sed -i 7s/enforcing/disabled/ /etc/selinux/config systemctl disable --now firewalld ​ # 安装编译依赖 dnf install -y gcc gcc-c make cmake zlib-devel openssl-devel \ ncurses-devel sqlite-devel readline-devel libffi-devel5.2 Python 3.11 源码编译tar -zxvf Python-3.11.9.tgz cd Python-3.11.9 ./configure --prefix/usr/local/python3.11 --enable-shared make -j$(nproc) make install ​ # 配置动态链接库和软链接 echo /usr/local/python3.11/lib /etc/ld.so.conf.d/python311.conf ldconfig ln -s /usr/local/python3.11/bin/python3.11 /usr/local/bin/python3 ln -s /usr/local/python3.11/bin/pip3.11 /usr/local/bin/pip35.3 MySQL 部署# 初始化 bin/mysqld --initialize --usermysql --basedir/usr/local/mysql --datadir/usr/local/mysql/data ​ # 启动并改密码 bin/mysqld_safe --usermysql bin/mysql -u root -p mysql alter user rootlocalhost identified with mysql_native_password by 123456; ​ # 建测试表 create table order_info( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 订单ID, user_id INT COMMENT 用户ID, order_name VARCHAR(200) COMMENT 商品名称, pay_amount DECIMAL(10,2) COMMENT 支付金额, create_time DATETIME COMMENT 下单时间 ) ENGINEInnoDB;5.4 安装Python依赖pip3 install pymysql python-dotenv tabulate langchain langchain-openai streamlit六、Web可视化界面创建 systemd 后台常驻服务并且启动服务用Streamlit把命令行工具一键变成Web面板纯Python开发不用写一行前端。左侧侧边栏切换功能右侧展示结果支持代码复制、表格渲染、AI解读卡片。两大功能页面数据查询与总结— 输入自然语言 → 生成SQL → 表格展示 → AI解读⚙️SQL性能调优— 输入SQL → EXPLAIN分析 → 输出索引/改写方案七、效果实测测试1自然语言查数据输入1001、1002、1003每个用户的订单总消费金额与订单笔数按总消费从高到低排序生成SQL并且查询结果AI总结用户1002为核心高价值用户客单价约为1003的3倍建议VIP维系3位用户订单笔数均为2单复购节奏相似。测试2SQL性能调优输入上面那条SQL分析结果❌ 全表扫描type: ALLuser_id无索引❌ Using temporary Using filesort分组排序消耗额外资源✅ 建议建覆盖索引ALTER TABLE order_info ADD INDEX idx_user_id_pay_amount (user_id, pay_amount);八、总结与扩展项目核心亮点✅ 四层分层架构代码清晰易维护✅ 双重安全防护提示词约束 代码拦截✅ 兼容多款大模型一套代码无缝切换✅ 命令行 Web双模式开箱即用可扩展方向多表JOIN查询支持对话式多轮数据探索慢查询日志自动批量优化用户权限管理与数据隔离