SQLBot:飞致云推出的开源 AI 问数工具,零 SQL 基础也能查数据

原创 发布日期:
6

一、SQLBot是什么

SQLBot是一款基于大模型和RAG(检索增强生成)技术开发的开源智能问数系统,旨在通过自然语言交互的方式实现高质量的文本转SQL(text2sql)功能。它能够让用户无需掌握复杂的SQL语法,只需用日常的自然语言提出数据查询需求,系统就能自动将其转换为相应的SQL语句,进而从数据库中获取所需数据并以直观的方式呈现结果。

该项目由飞致云(Fit2Cloud)团队开发并开源,作为一款专注于数据查询与分析的工具,SQLBot致力于降低数据查询的技术门槛,让更多非技术人员也能便捷地获取和分析数据,从而提升数据驱动决策的效率。无论是企业的业务人员、分析师,还是开发人员,都能通过SQLBot快速实现数据查询需求,减少在数据获取环节所花费的时间和精力。

SQLBot

二、功能特色

SQLBot凭借其独特的技术架构和设计理念,具备多项出色的功能特色,具体如下:

功能类别 具体功能 说明
核心转换功能 自然语言转SQL 用户输入自然语言查询需求,系统自动生成对应的SQL语句,支持多种数据库语法
  SQL优化与纠错 对生成的SQL语句进行优化,提高查询效率,同时检测并纠正可能存在的语法错误
数据可视化 多类型图表生成 将查询结果自动转换为柱状图、折线图、饼图等多种图表形式,直观展示数据
  图表交互操作 支持对生成的图表进行放大、缩小、筛选等交互操作,方便用户深入分析数据
数据分析能力 数据分析与解读 对查询结果进行简单的分析和解读,提取关键信息和趋势
  异常检测 自动识别数据中的异常值和异常趋势,并进行提示
  数据预测 基于历史数据,提供简单的趋势预测功能,辅助决策
数据源管理 多数据源支持 支持连接MySQL、PostgreSQL、Oracle、SQL Server、Elasticsearch等多种数据库
  数据源配置与测试 提供直观的界面用于配置数据源连接信息,并可进行连接测试
  数据源权限控制 对不同数据源设置访问权限,确保数据安全
工作空间管理 多工作空间创建 支持创建多个独立的工作空间,实现不同项目或团队的数据隔离
  工作空间成员管理 可添加、删除工作空间成员,并分配不同的角色和权限
  工作空间数据共享 在工作空间内部实现数据和查询结果的共享,方便团队协作
用户权限管理 多角色设置 提供管理员、普通用户、访客等多种角色,每种角色拥有不同的操作权限
  细粒度权限控制 可针对具体功能、数据源、工作空间等设置详细的权限规则
集成能力 第三方系统集成 支持快速嵌入第三方业务系统,如企业OA、CRM等
  AI平台集成 可被n8n、MaxKB、Dify、Coze等AI应用开发平台集成,扩展其功能
部署与维护 容器化部署 提供Docker部署方案,简化安装和部署流程
  日志管理 记录系统运行日志和用户操作日志,便于问题排查和系统维护

三、技术细节

1. 架构设计

SQLBot采用前后端分离的架构设计,各部分职责清晰,便于维护和扩展。

  • 前端:基于Vue框架开发,采用组件化的设计思想,构建了直观友好的用户界面。包含工作空间管理、数据源选择、自然语言输入、查询结果展示等多个组件,各组件之间通过清晰的接口进行通信,保证了前端代码的可维护性和可扩展性。

  • 后端:使用Python开发,主要由以下几个核心模块组成:

    • 数据源管理模块:负责与各种数据库建立连接,管理数据源信息,处理数据的查询和获取。

    • SQL生成模块:这是核心模块之一,结合大模型和RAG技术,将用户输入的自然语言转换为正确的SQL语句。

    • 权限控制模块:实现基于角色的访问控制(RBAC),管理用户和工作空间的权限信息。

    • 日志模块:记录系统运行过程中的各种事件和操作,为系统监控和问题排查提供依据。

    • API接口模块:提供RESTful API接口,供前端调用,实现前后端的数据交互。

  • 存储:使用PostgreSQL数据库存储系统的元数据,包括用户信息、工作空间信息、数据源配置、权限规则等。对于用户上传的Excel文件、生成的图片等资源,采用文件系统进行存储。

2. 核心技术

  • 大模型技术:SQLBot集成了先进的大语言模型,这些模型经过大量的文本数据训练,具备理解自然语言和生成SQL语句的能力。通过将用户的自然语言查询输入到大模型中,模型能够生成相应的SQL语句初稿。

  • RAG(检索增强生成)技术:为了提高SQL生成的准确性,SQLBot引入了RAG技术。该技术会先对用户的查询进行分析,然后从知识库(包括数据库表结构、字段含义、业务规则等)中检索相关信息,将这些信息与用户查询一起输入到大模型中,辅助模型生成更符合实际需求的SQL语句。

  • 数据库连接技术:支持多种数据库连接方式,包括JDBC、ODBC等,能够与不同类型的数据库建立稳定、高效的连接,确保数据查询的顺利进行。

  • 数据可视化技术:采用ECharts等优秀的数据可视化库,将查询结果转换为各种直观的图表。通过对数据的处理和转换,实现图表的动态展示和交互操作。

  • 容器化技术:使用Docker进行容器化部署,将应用程序及其依赖打包到容器中,保证了应用在不同环境中的一致性和可移植性。同时,通过Docker Compose可以方便地管理多个容器之间的协作。

3. 安全机制

  • 身份认证:用户登录时采用密码加密传输和验证机制,确保用户身份的合法性。同时,支持会话管理,当用户长时间未操作时,会自动退出登录,防止未授权访问。

  • 权限控制:基于工作空间的资源隔离机制,实现了细粒度的数据权限控制。不同用户在不同的工作空间中拥有不同的操作权限,确保数据只能被授权用户访问和操作。

  • 数据传输安全:在前后端数据交互过程中,采用HTTPS协议进行加密传输,防止数据在传输过程中被窃取或篡改。

  • 数据存储安全:对于敏感数据,如数据库连接密码等,采用加密存储的方式,避免明文泄露。同时,定期对数据进行备份,防止数据丢失。

SQLBot工作原理

四、应用场景

SQLBot凭借其强大的功能和易用性,在多个领域和场景中都能发挥重要作用,具体如下:

1. 企业数据分析

在企业日常运营中,业务人员和管理人员经常需要查询各种业务数据,如销售数据、客户数据、库存数据等。传统方式下,他们需要向数据分析师或开发人员提出需求,由专业人员编写SQL查询后返回结果,这种方式效率低下,且可能存在沟通偏差。

使用SQLBot后,业务人员可以直接用自然语言描述自己的查询需求,如“查询本季度各地区的销售额”“统计不同产品类别的库存数量”等,系统会自动生成SQL并返回查询结果,还能以图表形式直观展示。这大大缩短了数据获取的时间,让业务人员能够快速获取所需数据,及时做出业务决策。

2. 市场调研与分析

市场调研人员需要对大量的市场数据进行分析,以了解市场趋势、竞争对手情况等。这些数据通常存储在各种数据库中,查询和分析需要一定的技术能力。

SQLBot可以帮助市场调研人员快速查询所需的市场数据,如“查询过去半年各品牌产品的市场占有率”“分析不同地区消费者对某类产品的偏好”等。通过自然语言交互,调研人员可以轻松获取数据,并利用系统的数据分析和可视化功能,深入挖掘数据背后的信息,为市场策略制定提供支持。

3. 教学与培训

在数据库教学和培训中,学生需要学习SQL语言的使用。SQLBot可以作为一种辅助教学工具,帮助学生理解自然语言与SQL语句之间的对应关系。

学生可以输入自然语言查询需求,查看系统生成的SQL语句,对比自己编写的SQL,找出差异和问题。同时,通过实际操作查询不同的数据,加深对数据库查询原理和SQL语法的理解,提高学习效果。

4. 小型团队数据管理

对于小型团队或创业公司,往往没有专业的数据分析师和开发人员,但同样需要对业务数据进行管理和分析。SQLBot的易用性和低成本(开源免费)使其成为这类团队的理想选择。

团队成员可以共同使用SQLBot,通过工作空间进行数据隔离和协作。无论是查询客户信息、跟踪项目进度,还是分析成本支出,都可以通过简单的自然语言交互完成,降低了团队的数据管理门槛,提高了工作效率。

5. 政府与公共事业数据查询

政府部门和公共事业单位拥有大量的公共数据,如人口数据、交通数据、环境数据等,这些数据需要向公众或内部工作人员提供查询服务。

使用SQLBot可以构建便捷的公共数据查询平台,公众或工作人员可以用自然语言查询所需数据,如“查询某地区的人口数量”“统计过去一年的空气质量达标天数”等。系统能够快速返回准确的结果,提高公共数据的利用效率和服务质量。

五、使用方法

1. 环境准备

  • 硬件要求:建议使用至少2核CPU、4GB内存、20GB硬盘空间的Linux服务器。

  • 软件要求:服务器需安装Docker和Docker Compose,确保Docker服务正常运行。

2. 安装部署

执行以下一键安装脚本即可完成SQLBot的部署:

docker run -d \
 --name sqlbot \
 --restart unless-stopped \
 -p 8000:8000 \
 -p 8001:8001 \
 -v ./data/sqlbot/excel:/opt/sqlbot/data/excel \
 -v ./data/sqlbot/images:/opt/sqlbot/images \
 -v ./data/sqlbot/logs:/opt/sqlbot/logs \
 -v ./data/postgresql:/var/lib/postgresql/data \
 --privileged=true \
 dataease/sqlbot

脚本说明:

  • -d:表示在后台运行容器。

  • --name sqlbot:指定容器的名称为sqlbot。

  • --restart unless-stopped:设置容器在退出时除非手动停止,否则自动重启。

  • -p 8000:8000-p 8001:8001:将容器的8000和8001端口映射到主机的对应端口,8000端口用于Web访问,8001端口用于后端API。

  • -v:进行目录挂载,将主机的目录与容器内的目录关联,用于存储Excel文件、图片、日志和数据库数据。

  • --privileged=true:赋予容器特权模式,确保容器内的进程能够正常访问挂载的目录。

  • dataease/sqlbot:指定使用的Docker镜像。

3. 登录系统

部署完成后,在浏览器中访问http://服务器IP:8000,即可打开SQLBot的登录页面。使用默认账号(admin/SQLBot@123456)登录系统。

首次登录后,建议及时修改密码,以保证账号安全。

4. 基本操作流程

(1)创建工作空间

登录系统后,首先需要创建一个工作空间。工作空间是进行数据查询和分析的独立环境,便于数据隔离和团队协作。

操作步骤:

  • 在左侧导航栏中点击“工作空间管理”。

  • 点击“创建工作空间”按钮,输入工作空间名称、描述等信息。

  • 点击“确定”完成创建。

(2)添加数据源

在工作空间中添加需要查询的数据源,SQLBot支持多种类型的数据库。

操作步骤:

  • 进入创建好的工作空间,点击“数据源管理”。

  • 点击“添加数据源”按钮,选择数据库类型(如MySQL、PostgreSQL等)。

  • 填写数据库连接信息,包括主机地址、端口号、数据库名称、用户名、密码等。

  • 点击“测试连接”,确认连接成功后,点击“保存”完成数据源添加。

(3)进行数据查询

添加数据源后,就可以使用自然语言进行数据查询了。

操作步骤:

  • 在工作空间首页的输入框中,用自然语言描述查询需求,如“查询近一个月的订单数量”。

  • 点击“查询”按钮,系统会自动生成SQL语句并执行查询。

  • 查询结果会以表格和图表两种形式展示,可根据需要切换展示方式。

  • 对于生成的SQL语句,如有需要,可进行编辑和优化,然后重新执行查询。

(4)分享查询结果

查询结果可以在工作空间内部进行分享,方便团队成员查看和使用。

操作步骤:

  • 在查询结果页面,点击“分享”按钮。

  • 选择需要分享的团队成员,设置查看权限(如只读、可编辑等)。

  • 点击“确定”完成分享,被分享人会收到通知,可在自己的工作空间中查看该查询结果。

SQLBot UI界面

六、常见问题解答

1. SQLBot支持哪些数据库?

SQLBot支持多种主流数据库,包括MySQL、PostgreSQL、Oracle、SQL Server、Elasticsearch等。如果需要连接其他类型的数据库,可查看官方文档或社区是否有相应的插件或解决方案。

2. 生成的SQL语句不准确怎么办?

如果生成的SQL语句不准确,可以尝试以下解决方法:

  • 优化自然语言描述:尽量使用清晰、准确、具体的语言描述查询需求,避免模糊和歧义。

  • 提供更多上下文信息:在查询时,可以适当补充相关的业务背景、数据字段含义等信息,帮助系统更好地理解需求。

  • 手动编辑SQL语句:系统允许对生成的SQL语句进行手动编辑和修改,修改后重新执行查询即可。

  • 更新知识库:如果是因为系统对数据库表结构或业务规则理解不充分导致的,可更新系统的知识库,添加相关信息。

3. 如何保证数据的安全性?

SQLBot通过多种机制保证数据的安全性:

  • 基于工作空间的资源隔离,不同工作空间之间的数据相互独立。

  • 细粒度的权限控制,可对用户、数据源、查询结果等设置详细的访问权限。

  • 数据传输采用HTTPS加密,防止数据在传输过程中被窃取或篡改。

  • 敏感信息如数据库密码等采用加密存储,避免明文泄露。

  • 完善的日志记录,可追踪用户的操作行为,便于发现和处理安全问题。

4. SQLBot是否需要联网使用?

SQLBot的核心功能可以在局域网环境中使用,无需联网。但如果需要使用某些依赖外部服务的功能(如调用某些在线大模型),则需要联网。

5. 如何更新SQLBot到最新版本?

更新SQLBot到最新版本的步骤如下:

  • 停止当前运行的SQLBot容器:docker stop sqlbot

  • 删除旧容器:docker rm sqlbot

  • 拉取最新的Docker镜像:docker pull dataease/sqlbot

  • 重新执行安装部署命令,使用新的镜像启动容器。

注意:在更新前,建议备份好数据,以防数据丢失。

6. 可以将SQLBot集成到自己的业务系统中吗?

可以。SQLBot提供了丰富的API接口,支持快速嵌入第三方业务系统。具体的集成方法和文档可参考官方提供的开发指南。

7. 系统运行过程中出现错误,如何排查?

当系统运行出现错误时,可以通过以下方式进行排查:

  • 查看系统日志:系统会记录运行过程中的错误信息,日志文件存储在./data/sqlbot/logs目录下,可查看日志了解错误详情。

  • 检查数据源连接:确认数据源的连接信息是否正确,数据库是否正常运行。

  • 检查网络环境:确保服务器的网络连接正常,特别是在使用需要联网的功能时。

  • 查看官方文档和社区:官方文档中可能有常见错误的解决方案,社区中也可能有其他用户遇到类似问题并分享了解决方法。

七、相关链接

八、总结

SQLBot作为一款基于大模型和RAG技术的开源智能问数系统,通过自然语言转SQL的核心功能,有效降低了数据查询的技术门槛,让更多用户能够便捷地获取和分析数据。其丰富的功能特色,如多数据源支持、数据可视化、工作空间管理等,满足了不同场景下的需求。采用前后端分离架构和容器化部署方式,使其具备良好的可扩展性和易用性。无论是企业数据分析、市场调研,还是教学培训等场景,SQLBot都能发挥重要作用,为用户提供高效、便捷的数据查询与分析服务。

打赏
THE END
作者头像
AI铺子
关注ai行业发展,专注ai工具推荐