大模型 | AI驱动的数据分析:利用自然语言实现数据查询到可视化呈现

【本文作者:擎创科技资深产品专家 布博士】

在当今AI驱动的时代,数据分析已成为各行各业不可或缺的能力。然而,传统的数据分析流程通常需要掌握SQL、数据处理和可视化等多项专业技能,这对非技术背景的业务人员来说是一个不小的挑战。

想象一下,当数据中心的负责人打开手机时,只需通过自然语言描述:“帮我分析过去24小时,各业务系统的告警量TOP-10,并以饼状图展示。” 系统便能自动完成从自然语言到SQL查询、数据处理和可视化的全过程。这将极大地提高效率,省去需求提取、原型设计、开发、测试和上线的漫长过程,人类将进入一个更加高效和智能的时代。

本文主要介绍如下两个大的部分:

1. 测试案例效果预览及大模型使用说明

先睹为快,系统的实现效果,以及实现这样的基本系统测试环境配置,包括测试所使用和推荐的大模型。

2. 构建NL2SQL系统的核心步骤

  • 理解数据库模式:大模型需要能够理解数据库的结构和模式,以便准确地翻译自然语言查询。

  • 提示词设计:为大模型提供合适的提示词,使其能够将人类的自然语言查询准确地翻译为SQL语句。

  • 大模型依据查询生成SQL:依据用户的指令、数据库说明和提示词,大模型生成SQL语句。

  • 查询及可视化引擎:需要一个查询引擎接口来接收并执行翻译好的SQL语句,并将结果进行可视化展示。

  • 依据日志优化:日志记录在系统优化中扮演着至关重要的角色,特别是在大模型结果的优化方面。

通过这些步骤,NL2SQL系统能够实现从自然语言到数据可视化的自动化流程,显著提升数据分析的便捷性和效率。

文本中的内容也是按如上的步骤来进行分章节介绍的,在介绍之前增加了一节”效果预览“,以方便提前对可达到的效果进行了解。

测试案例效果预览及大模型使用说明

大模型使用说明

在本例中,我们测试了以下大模型:

  • QWEN 2.5 - 72B

  • LLAMA 3 - 70B

  • QWEN 2.5 - 32B

  • Gemma2 27B

  • LLAMA 3.2 - 11B

在这些模型中,参数量在70B以上的模型表现出色,能够准确无误地生成SQL语句。而其他三个模型在语言表达上需要更精确一些。在测试案例中,它们各自仅出现一个错误,说明指令需要更贴近数据库模式(schema)的定义。

主机配置

为了支持这些大模型的运行,我们使用了以下硬件配置:

  • 显卡:技嘉 4090

  • CPU:Intel i7 - 14代

  • 内存:DDR 6000 64GB

 测试案例效果预览

在看解决方案之前,先看一下自然语言生成SQL的效果截屏:

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

核心步骤说明

1. 理解数据库模式 - schema信息

图片

如上图所示,我们需要有一个界面能够配置数据库中的schema描述,schema描述对大模型非常有意义,主要体现在以下几个方面:

1. 结构理解:Schema描述了数据库的结构,包括表的名称、字段名称、数据类型、表之间的关系等。这些信息对于理解用户的自然语言查询至关重要,因为它帮助系统知道数据是如何组织的。

2. 意图解析:在将自然语言转换为SQL查询时,系统需要识别用户查询中涉及的具体数据实体。Schema提供了这些实体的定义,使得系统可以准确地将自然语言中的术语映射到数据库中的表和字段。

3. 查询生成:Schema信息用于生成正确的SQL查询。系统需要知道如何在SQL中引用表和字段,以及如何构建JOIN操作来结合多个表的数据。

4. 错误检测:通过了解schema,系统可以检测并避免生成无效的SQL查询。例如,如果用户请求的字段在schema中不存在,系统可以及时反馈错误信息。

5. 优化查询:Schema信息可以帮助系统优化生成的SQL查询。例如,系统可以利用索引信息来生成更高效的查询。

6. 用户交互:在一些高级的NL2SQL系统中,schema信息可以用于生成用户提示或建议,帮助用户更好地构建查询。

一句话总结 :数据库的schema描述是NL2SQL系统理解和处理自然语言查询的基础,确保生成的SQL查询准确、有效并符合数据库的结构。

本例中我们使用运维领域的一张alertInfo表,来做示例说明如下,这是整个nl2sql的核心,如果涉及多张表以及表和表之间的关系,也参照类似的定义来表达即可:

数据库表:alertinfo表说明:告警信息记录表
字段说明:1. id (bigint)   - 主键,自增长   - 用于唯一标识每条告警记录
2. alertID (varchar(25))   - 告警ID,不可为空   - 用于唯一标识一个告警事件   - 格式通常为:ALT_[timestamp]_[sequence]
3. appName (varchar(100))   - 应用名称   - 发生告警的应用系统名称   - 例如:订单系统、支付系统、库存系统等
4. alertObject (varchar(100))   - 告警对象,不可为空   - 具体发生告警的对象   - 例如:数据库实例、服务器、API接口等
5. alertObjectType (varchar(100))   - 告警对象类型   - 用于分类告警对象   - 例如:Database、Server、API、Application等
6. alertInstance (varchar(255))   - 告警实例   - 具体的实例标识符   - 例如:服务器IP、数据库连接串、容器ID等
7. alertTitle (varchar(100))   - 告警标题   - 简要描述告警内容   - 例如:"CPU使用率超过90%"、"内存不足警告"
8. alertTag (varchar(100))   - 告警标签   - 用于告警分类和筛选   - 例如:严重、警告、信息等级
9. alertInfo (longtext)   - 告警详细信息   - 包含完整的告警描述、现场数据等   - 可存储JSON格式的详细信息
10. alertStartTime (varchar(25))    - 告警开始时间,不可为空    - 告警首次发生的时间    - 格式:YYYY-MM-DD HH:mm:ss
11. alertEndTime (varchar(25))    - 告警结束时间    - 告警解除的时间    - 格式:YYYY-MM-DD HH:mm:ss
12. alertKPI (varchar(100))    - 告警关键性能指标    - 触发告警的具体指标    - 例如:CPU使用率、内存使用率、响应时间等
13. alertSource (varchar(100))    - 告警来源    - 产生告警的监控系统或工具    - 例如:Zabbix、Prometheus、自定义监控等    

2. 提示词设计

在nl2sql中,提示词的设计非常重要,通过它可以:

1. 引导模型生成:提示词用于引导大语言模型(如GPT-4)生成SQL查询。通过精心设计的提示词,模型可以更准确地理解用户的意图,并生成符合语法和语义的SQL语句。

2. 提高准确性:提示词可以帮助模型更好地解析自然语言中的复杂结构和模糊表达,从而提高生成SQL的准确性。例如,提示词可以明确要求模型识别特定的表、字段或条件。

3. 减少歧义:自然语言往往具有多义性,提示词可以帮助消除歧义,使模型更清晰地理解用户的查询意图。例如,通过提示词明确上下文或限定查询范围。

4. 增强模型能力:通过提示词,模型可以被引导去利用其内置的知识和推理能力,生成更复杂和优化的SQL查询。这对于处理复杂查询或多表JOIN操作尤为重要。

提示词设计在NL2SQL系统中起到关键作用,它不仅影响SQL生成的准确性和效率,还直接关系到用户的使用体验和系统的实用性。

如下是我们内置的默认提示词,主要用于关系型数据库查询,供大家参考:

你是一位经验丰富的数据库专家,请根据以下数据库Schema定义,将我的自然语言查询需求转换为标准的SQL语句。
数据库Schema定义如下:{schema_content}
请严格遵循以下规则:1. 只返回可执行的SQL语句,不要包含任何解释或说明2. 使用标准的SQL语法,确保SQL语句的正确性和可执行性3. 合理使用表连接、条件过滤、排序和分组等SQL功能4. 注意处理NULL值和特殊字符5. 对于模糊查询,使用LIKE语句并合理使用通配符6. 需要时使用适当的SQL函数(如日期函数、聚合函数等)7. 确保查询性能,避免使用SELECT *8. 对于数值型字段的比较,使用适当的运算符9. 对于时间范围查询,注意日期格式的统一性10. 注意,在生成SQL查询时,确保仅使用只读操作,避免任何可能修改数据库的语句,如 UPDATE、INSERT、DELETE、DROP、TRUNCATE、ALTER、GRANT、REVOKE、EXECUTE 和 LOCK TABLES。专注于 SELECT 查询以确保数据安全。
接下来,我会输入自然语言查询需求,请你将其转换为SQL语句。

注意:

1. "{schema_content}"即为我们在第一章中定义的schema说明,这是做为做的知识背景说明提供给大模型理解用的。

2. 第10点,是最重要的一点,一般在设计这样的系统时,要避免对数据源进行修改,以免对数据造成破坏。

3. 大模型依据用户指令生成SQL

在自然语言到SQL(NL2SQL)系统中,大模型的核心任务是将用户的自然语言指令转换为准确的SQL查询。以下是这一过程的细化说明:

  • 自然语言解析

大模型首先接收用户的自然语言输入,并对其进行解析。这一步骤涉及理解用户的意图、识别关键实体和操作(如选择、过滤、排序等),以及确定查询的目标数据。

  • 语义映射

解析后的自然语言需要映射到数据库的模式(schema)上。大模型利用其训练中获得的知识,识别出自然语言中的术语与数据库表、字段之间的对应关系。

  • SQL语句构建

在完成语义映射后,大模型开始构建SQL语句。这包括选择合适的表和字段、应用必要的过滤条件、以及根据用户需求进行排序和分组等操作。

  • 语法和逻辑验证

生成的SQL语句需要经过语法和逻辑验证,以确保其能够在数据库中正确执行。大模型会检查SQL的语法结构,并验证其逻辑是否符合用户的意图。

  • 结果优化

在某些情况下,大模型可能会生成多个可行的SQL语句。此时,模型会根据执行效率、结果准确性等因素,选择最优的SQL语句进行执行。

通过这些步骤,大模型能够将复杂的自然语言指令转换为精确的SQL查询,极大地简化了数据分析的流程。

4. 查询及可视化引擎

为了将通过大模型生成的SQL查询结果进行可视化展示,我们需要设计和实现一个系统,该系统包括以下几个关键组件:

1. SQL执行引擎:

  • 功能:负责接收和执行生成的SQL查询。

  • 实现:可以使用数据库连接池(如JDBC、SQLAlchemy)来管理与数据库的连接,确保高效和安全地执行查询。

  • 安全性:在执行SQL之前,进行语法和安全检查,确保没有危险操作。

2. 数据处理模块:

  • 功能:对查询结果进行预处理,以便于可视化。

  • 实现:可以使用数据框架(如Pandas)来清洗和转换数据,处理缺失值、格式化日期等。

3. 可视化引擎:

  • 功能:将处理后的数据转换为可视化图表。

  • 实现:可以使用可视化库(如Matplotlib、Plotly、D3.js)来生成各种图表,如折线图、柱状图、饼图等。

  • 交互性:支持用户交互,如缩放、过滤、悬停显示详细信息等。

4. 用户界面:

  • 功能:提供一个直观的界面供用户查看和交互数据。

  • 实现:可以使用Web框架(如Flask、Django)结合前端框架(如React、Vue.js)来构建。

  • 响应式设计:确保在不同设备上都有良好的显示效果。

6. 日志和监控:

  • 功能:记录SQL执行和可视化过程中的日志,监控系统性能。

  • 实现:可以使用日志框架(如Log4j、Python logging)和监控工具(如Prometheus、Grafana)来实现。

通过以上组件的协同工作,系统可以高效、安全地执行SQL查询,并将结果以直观的方式展示给用户。这不仅提高了数据分析的效率,也增强了用户的体验和数据的安全性。


在我们的系统中并没有像以上提到的设计这么复杂,只是一个简单的实现了自然语言生成SQL,可视化只支持表格、饼状图、柱状图、折线图几种,如下图所示:

图片

5. 依据日志优化

在数据可视化系统中,日志记录不仅用于监控和故障排查,还可以为系统优化提供重要的依据。通过分析日志数据,我们可以识别性能瓶颈、优化查询效率,并提升用户体验。以下是如何利用日志进行系统优化的几个方面建议:

1. 大模型调用结果日志(最重要的一点,全例中仅做了这个核心的部分):

  • 记录提示词和模型:记录每次大模型调用时使用的提示词和模型版本,以便分析其对结果的影响。

  • 查询返回结果:保存大模型生成的SQL查询和数据库返回的结果,帮助评估模型的准确性和有效性。

  • 优化依据:利用这些日志数据,优化大模型的提示词设计、参数调整和schema描述,提高模型的性能和准确性。

下图即为记录的大模型调用的日志列表及详情:

(1)日志列表

图片

(2)日志详情

图片

图片

2. SQL查询性能分析:

  • 记录查询时间:日志中记录每个SQL查询的执行时间,帮助识别慢查询。

  • 分析查询模式:通过分析日志中常见的查询模式,优化数据库索引和查询结构。

  • 缓存策略:对于频繁执行的相同查询,考虑使用缓存机制来减少数据库负载。

3. 系统资源使用监控:

  • CPU和内存使用:通过日志监控系统资源的使用情况,识别高负载时段和资源瓶颈。

  • 连接池管理:记录数据库连接的使用情况,优化连接池配置以提高并发处理能力。

4. 错误和异常处理:

  • 错误日志分析:定期分析系统错误和异常日志,识别和修复潜在的系统漏洞。

  • 自动化报警:设置日志监控和报警机制,及时响应系统异常情况。

通过对日志的深入分析和利用,系统可以不断优化性能、提高稳定性,并为用户提供更好的服务体验。这种基于数据驱动的优化方法,能够有效地支持系统的持续改进和发展。

总结说明

在现代数据分析中,NL2SQL系统通过大模型将自然语言查询转换为SQL语句,极大地简化了数据访问流程。系统的核心包括理解数据库模式、设计有效提示词、生成SQL、执行查询并进行可视化展示。通过记录和分析日志,系统不断优化大模型的提示词和参数设置,提升查询准确性和效率。日志不仅帮助识别性能瓶颈,还为系统的持续改进提供数据支持。最终,NL2SQL系统通过智能化的查询和可视化引擎,为用户提供了高效、直观的数据分析体验,推动了数据驱动决策的普及。

———— THE END ————

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5035.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ ——— 模拟实现 vector 类

目录 vector 类的框架 无参数的构造函数 析构函数 获取有效数据个数 获取容量 重载 [] 运算符 可读可写版本 只可读版本 扩容 尾插 实现迭代器 可读可写版本 只可读版本 自定义设置size长度和内容 在任意位置插入 删除任意位置的数据 赋值重载 vector 类的框…

Git处理冲突详解

文章目录 Git处理冲突详解一、引言二、冲突产生的原因三、解决冲突的步骤1. 手动解决冲突1.1 查看冲突文件1.2 编辑冲突文件1.3 提交解决冲突 2. 使用合并工具解决冲突 四、使用示例五、总结 Git处理冲突详解 一、引言 在团队协作开发中,Git冲突是不可避免的。当多…

GS论文阅读--GeoTexDensifier

前言 本文是一个关于高斯致密化策略对高斯地图进行优化,他主要关注了几何结构和纹理信息。我最近对于高斯点的分布比较感兴趣,因为高斯点的分布决定了之后重建质量的好坏,初始化高斯很重要,但之后的维护需要致密化与修建策略&…

【云原生布道系列】第三篇:“软”饭“硬”吃的计算

1 虚拟化技术定义 首先援引一段《虚拟化技术发展编年史》中针对虚拟化技术的定义:在计算机科学中,虚拟化技术(Virtualization)是一种资源管理(优化)技术,将计算机的各种物理资源(例如…

Java虚拟机面试题:内存管理(中)

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

Linux容器(初学了解)

目录 一、容器 1.1、容器技术 1.2、容器和虚拟机之间的差异 1.3、Rootless 和 Rootful 容器 1.4、设计基于容器的架构 1.5、容器管理工具 1.6、容器镜像和注册表 1.7、配置容器注册表 1.8、使用容器文件构建容器镜像 二、部署容器 2.1、Podman 实用程序 2.2、安装容…

代码随想录_字符串

字符串 344.反转字符串 344. 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。 思路: 双指针 代…

Visual Studio Community 2022(VS2022)安装方法

废话不多说直接上图: 直接上步骤: 1,首先可以下载安装一个Visual Studio安装器,叫做Visual Studio installer。这个安装文件很小,很快就安装完成了。 2,打开Visual Studio installer 小软件 3&#xff0c…

PostgreSQL的学习心得和知识总结(一百六十六)|深入理解PostgreSQL数据库之\watch元命令的实现原理

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

在k8s中部署一个可外部访问的Redis Sentinel

1.前提条件: 1.部署了multus 想要k8s外部能访问k8s内部的redis,redis-server启动时必须使用multus的IP 2.helm客户端安装 2.开始安装 准备3个multus ip 10.10.10.130 10.10.10.131 10.10.10.132 apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttac…

目标跟踪算法发展简史

单目标跟踪(Single Object Tracking,SOT)是计算机视觉领域中的一个重要研究方向,旨在在视频序列中持续定位并跟踪一个特定目标。随着计算机视觉和机器学习技术的飞速发展,单目标跟踪算法经历了从经典方法到深度学习的演…

使用LPT wiggler jtag自制三星单片机(sam88 core)编程器-S3F9454

写在前面 新年好,各位,今天来分享制作一个三星单片机的编程器 嘿嘿,x鱼垃圾佬元件库有些三星单片机s3f9454,编程器不想买,基本拿来拆件玩的。但,前些时候csdn下载到它的编程时序,自己来做个编程…

Spring 中的事件驱动模型

事件驱动的基本了解 事件模式也就是观察者模式,当一个对象改变的时候,所有依赖的对象都会收到一个通知。 Subject:抽象主题 Observer:具体主题 Concrete Subject:抽象观察者,在得到更新通知之后去更新自…

玉米植物结构受乙烯生物合成基因 ZmACS7 的调控

摘要: 植物高度和叶片角度是玉米(Zea mays)植物结构的两个关键决定因素,与高种植密度下的抗倒伏性和冠层光合作用密切相关。这两个性状主要由几种植物激素调节。然而,乙烯在调节玉米植物结构中的机制,特别…

Java高频面试之SE-15

hello啊,各位观众姥爷们!!!本牛马baby今天又来了!哈哈哈哈哈嗝🐶 String 怎么转成 Integer 的?它的原理是? 在 Java 中,要将 String 转换为 Integer 类型,可…

解锁Java中的国密算法:安全保障的密钥

一、引言 在数字化浪潮席卷全球的当下,信息安全已然成为国家、企业乃至个人无法忽视的重要议题。国密算法,作为我国自主研发的密码算法体系,宛如坚固的盾牌,为国家信息安全筑起了一道坚不可摧的防线。它的诞生,不仅承载…

金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践

导读:中信银行信用卡中心每日新增日志数据 140 亿条(80TB),全量归档日志量超 40PB,早期基于 Elasticsearch 构建的日志云平台,面临存储成本高、实时写入性能差、文本检索慢以及日志分析能力不足等问题。因此…

1.2.神经网络基础

目录 1.2.神经网络基础 1.2.1.Logistic回归 1.2.2 梯度下降算法 1.2.3 导数 1.2.4 向量化编程 1.2.5 正向传播与反向传播 1.2.6.练习 1.2.神经网络基础 1.2.1.Logistic回归 1.2.1.1.Logistic回归 逻辑回归是一个主要用于二分分类类的算法。那么逻辑回归是给定一个x ,…

MIAOYUN信创云原生项目亮相西部“中试”生态对接活动

近日,以“构建‘中试’生态,赋能科技成果转化”为主题的“科创天府智汇蓉城”西部“中试”生态对接活动在成都高新区菁蓉汇隆重开幕。活动分为成果展览、“中试”生态主场以及成果路演洽谈对接三大板块。在成果展览环节,成都元来云志科技有限…

【vitePress】基于github快速添加评论功能(giscus)

一.添加评论插件 使用giscus来做vitepress 的评论模块,使用也非常的简单,具体可以参考:giscus 文档,首先安装giscus npm i giscus/vue 二.giscus操作 打开giscus 文档,如下图所示,填入你的 github 用户…