使用SQLBot实现Text-2-SQL本地部署教程
SQLBot是一款基于大模型和 RAG 的智能问数系统。开箱即用: 只需配置大模型和数据源即可开启问数之旅,通过大模型和 RAG 的结合来实现高质量的 text2sql;易于集成: 支持快速嵌入到第三方业务系统,也支持被 n8n、MaxKB、Dify、Coze 等 AI 应用开发平台集成调用,让各类应用快速拥有智能问数能力;安全可控: 提供基于工作空间的资源隔离机制,能够实现细粒度的数据权限控制。
去年(24年)就有了AI+BI(通过文本/提示词生成SQL以至于自动创建图表)的想法,后来因为种种原因被耽搁,然后今年市场上就出来了各种各样的“AI问数”产品,当然大部分是大厂的收费产品(比如百度的SugarBI)。
这两天看到一个开源项目SQLBot,也是实现类似的AI问数功能,于是尝试了一番,下面把安装体验过程和使用感受记录于此,供大家参考。
一、开源项目介绍
SQLBot 是一款基于大模型和 RAG 的智能问数系统。SQLBot 的优势包括:
- 开箱即用: 只需配置大模型和数据源即可开启问数之旅,通过大模型和 RAG 的结合来实现高质量的 text2sql;
- 易于集成: 支持快速嵌入到第三方业务系统,也支持被 n8n、MaxKB、Dify、Coze 等 AI 应用开发平台集成调用,让各类应用快速拥有智能问数能力;
- 安全可控: 提供基于工作空间的资源隔离机制,能够实现细粒度的数据权限控制。
- 产品框架:
-
二、下载安装
(1)使用docker安装
准备一台 Linux 服务器,执行以下一键安装脚本。
在运行 SQLBot 前,请确保已安装好 Docker 和 Docker Compose。
# 创建目录
mkdir -p /opt/sqlbot
cd /opt/sqlbot
# 下载 docker-compose.yaml
curl -o docker-compose.yaml https://raw.githubusercontent.com/dataease/SQLBot/main/docker-compose.yaml
# 启动服务
docker compose up -d
(2)使用源码本地运行
从Gitee下载源码:源码地址
三、部署采坑记录
使用docker安装很简单,这里不做记录。考虑到我的一些客户不让用docker部署,所以这里重点记录使用源码运行系统过程中遇到的一些问题:
1、下载源码到本地
这是下载后的源码目录结构,其中:
backend:为后端代码
frontend:为前端代码
config.py为项目关键配置,包括文件存储目标,数据库连接信息,
这个文件在:backend\common\core\config.py
2、安装数据库
sqlbot这个项目使用postgresql数据库,所以本地需要先安装一下pgsql库,安装后,创建一个名为sqlbot的实例(空库就可以,系统启动后会初始化表结构)。
pgsql安装好后,需要再安装一下向量库插件(估计是用到了向量检索),安装过程这里不做详细描述了,可以参考这个帖子。(这个过程比较繁琐,可能还需要安装visual studio,细心安装)
3、准备启动后端服务
数据库安装好之后,记得修改上边提到的config.py文件里的数据库IP 端口、账号、密码。
进入backend目录,在cmd窗口下先安装项目依赖,建议使用uv工具(uv 是一个快速的Python包管理器,推荐使用它来安装依赖,可以自动识别依赖对象的版本,手工安装可能会出各种各样的依赖版本问题)
pip install uv
uv安装好之后执行uv sync,完成依赖同步。
uv sync
此时,还不能执行启动后台程序,需要激活虚拟环境,进入.venv目录(uv sync后生成的目录)执行激活
.\.venv\Scripts\Activate.ps1
.\.venv\Scripts\activate.bat
激活后就可以执行启动命令了
python main.py
如果出现下面的界面,就说明后台服务启动正常了。
4、安装前端依赖
注意nodejs版本,经测试16不行会有问题,更新到22就可以了。
执行npm install安装相关依赖。
npm install
5、启动前台服务
执行npm run dev启动前台服务,出现如下服务,服务就正常起来了。
npm run dev
四、体验及感受
服务启动后,系统地址与账号密码:
在浏览器中打开: http://localhost:5173/
用户名: admin
密码: SQLBot@123456
登录后,可以设置 大模型及key,然后连接数据源,选择可以查询的范围(表)。就可以正常使用了。这个过程就不在此描述了。
安装后,简单做了几个测试:
(1)上来就给出了“推荐问题”,挺好的。好的问题才会有好的答案。只不过等待时间略长,大概用了20来秒。(数据库表范围勾选了37张)
(2)问第二个问题,报错了。原因应该是生成的sql里有一个字段不存在。说明AI生成SQL还是会产生“幻觉”。
知道问题后,在对话窗中,描述正确的字段。然后就能生成正确的SQL及图表了。
(3)试了单表查询后,试一试多表联查。
会返回报错,查看错误提示,仍然是sql生成的不对。
通过对话,告诉他正确的字段在哪些表上,就可以生成正确的SQL及图表了。
综上,结论如下:
整体效果还可以,对于有开发基础,或者懂一些sql的,出图问题不大。
速度受限于查询的数据库表范围以及系统配置、网络,可能会稍慢。
目前这个项目应该没有 将“问答内容”进行“标注”的功能,所以一些对数据库的调整优化的内容只会存在于当前会话里,并不能实现“越用越好用”的状态,期待后续版本的实现。
这个系统生成SQL的准确性 与 数据库的schemas关系非常大,要想生成的准确,需要做好对表的注释、字段的注释,尤其是外键字段的注释,描述清楚其含义及用途。
五、致谢
SQLBot由飞致云开源,在此感谢。
更多推荐
所有评论(0)