EPAI数据库对话

1、数据库的使用方法,AI学习库的适用场景,配置方法和优化方法。

一、 数据库

1、 关系数据库

前置要了解的一些基础知识

关系数据库。可以想象为Excel的表sheet,每个表是行列组成的二维表格。一个数据库可以包含任意多个数据表(如"学生表"、“课程表”、“成绩表”),表与表之间通过相同的字段(如"学号")建立联系。

为啥叫“关系”数据库,因为数据之间蕴含着逻辑关系,比如包含、属于等。

元组(记录):表中的一行即为一个元组,或称为一条记录。

属性(字段)。数据表中的每一列称为一个字段,数据表的设计实际上就是对字段的设计。创建数据表时,为每个字段分配一个数据类型。

属性值。行和列的交叉位置表示某个属性值,如“数据库原理”就是课程名称的 属性值

主码。主码(也称主键或主关键字),是表中用于唯一确定一个元组的数据。关键字用来确保表中记录的唯一性,可以是一个字段或多个字段,常用作一个表的索引字段。每条记录的关键字都是不同的,因而可以唯一地标识一个记录 。

主流的关系数据库有oracle、db2、sqlserver、sybase、mysql等

2 、 SQL语言

(结构化查询语言,Structured Query Language):是和数据库对话的语言,语法接近自然语言,核心功能依赖少量关键动词,学习和使用相对容易,其包括了增删改查四大核心操作。

示例

实际执行效果

假设学生表数据:

执行 上面的 SQL 后,结果:

3、 连接到数据库

企业的数据库分布在各个信息系统中,我们要想在应用程序(如EPAI)进行数据库操作,需要与数据库进行“点对点连接”。

从技术角度,数据库连接是一套双向的、带状态的通信会话“通路”。

在EPAI中,数据库→添加,就可以打开连接页面,填入数据库类型、数据库名称、数据库实例端点(Endpoint)、‌端口号、用户名和密码,就可以点击【确认】进行连接了,连接成功后会显示在“数据库管理”页面,连接失败会返回错误提示,如是用户名密码错误还是网络问题。在“数据库管理”页面,我们实际进行的是 “数据库连接”的管理。

二、多用户权限

用户使用数据库应该遵循授权权限最小化的原则,即只授予用户完成工作所需的最小权限。

● 库/表级权限:只授予该用户访问特定数据库或特定表的权 限,而不是 ALL DAT ABASES。

● 库权限:点击 “ 分享” 可 进行尽自己、部分用户、全员的授权。

● 表权限:每个表的权限先默认继承所在“ 库 ”的权限, 然后可以进行自定义调整。

比如:

“高三学生数据库(连接)”已经分享给了张三、李四、王五使用。

高三学生数据库包括 学生表、课程表、成绩表三张表。

初始状态,学生表、课程表、成绩表三张表也分享给了张三、李四、王五使用。

学生表针对分享范围进行了调整,删除了张三,那 么就仅仅李四、王五可以使用该表。

课程表也针对分享范围进行了调整,增加了孙六, 那么李四、王五、孙六可以使用该表。

成绩表也针对分享范围进行了调整,调整为“仅自己”可用,而“高三学生数据库(连接)”是由钱七创 建的,那么成绩表就仅仅钱七能够使用 。

三、 数据库对话( 数据智能体)

1、LLM生成SQL

Text-to-SQL(自然语言转SQL)是一项人工智能技术,旨在将用户用自然语言(如中文或英文)提出的问题自动转换为数据库可执行的 SQL 查询语句。这项技术的核心目标是降低数据库的使用门槛,让不懂编程或SQL语法的业务人员、分析师也能直接通过对话的方式从数据库中获取数据。得益于LLM的强大语言理解能力和生成能力,基于LLM的Text- to-SQL已经完全碾压了所有其他的方法。

EPAI的数据库对话应用(也可称为数据智能体),核心定位是通过检索增强生成(RAG)+大语言模型(LLM)实现高精度的自然语言转 SQL(Text-to-SQL),让非技术人员也能以自然语言与任意数 据库交互,无需手动编写SQL语句。

应用场景:适用于所有需要自然语言操作数据库的场景,尤其适合企业级部署:

✓ 数据分析团队:数据分析师通过自然语 言快速查询数据,无需编写复杂 SQL,提升工作效率;

✓ 企业内部系统:为业务人员提供自助式数据查询接口,降低数据团队的沟通成本;

✓ 多租户SaaS应用:为不同客户提供 隔离的自然语言数据查询服务,通过细粒度权限确保数据安全;

✓ 数据产品开发:快速构 建自然语言数据查询功能,集成到BI工具、企业级应用中。

广泛的兼容性:兼容主流大模型和数据库

1. 支持的 LLM(大语言模型):EPAI平台部署可用的所有LLM,包括Deepseek、通义千问、Kimi等;

2. 支持的数据库:市面上热门的SQL数据库,包括MySQL、 PostgreSQL 、MariaDB、SQL Server、Oracle、Dameng 等。

无监督自学习:

所有成功的交互( 问 题-SQL答案对) 都会被保存到 AI学习库,针对用户问题实现差异化处理 , 让智能体持续进化:

✓ 全新问题:深度分析数据库 schema、结合示例生成新 SQL;

✓ 相似问题 :从A I学习库中检索历史查询 模式,快速适配生成新 SQL,大幅提升响应速度。

2、AI学习库

AI学习库包括三类内容,分别是:SQL问答、专业术语、DDL语法,都支持自定义添加。

AI学习库就是给LLM的知识库,会基于用户问题先去AI学习库中查询相关内容,也就是RAG的过程,将查询到的 相关内容(SQL问答、专业术语、DDL语法)结合用户问题一起送给大模型,指导大模型生成更加准确的SQL语法。

SQL问答:用户交互过程中评价为正确的问答对(问题-SQL答案 )会自动进入SQL问答;自定义添加;

专业术语:自定义添加;

DDL语法:自动获取;自定义添加。

DDL(Data Definition Language,数据定义语言),它是定义数据库结构的 SQL 语法,它的核心作用是创建、修改、删除数据库及数据库对象(如数据库、表、 索引、 视图等),而非操作数据本身。查看DDL语法就可以 了解 一个数据库的结构,可以通过命令自动获取一个数据库的DDL语法。

3、 为什么需要AI学习库,以及如何使用

Text-to-SQL的挑战:自然语言本身的复杂性(模糊、有歧义等 )、缺乏业务上下文(不懂业务术语)、数据库的复杂性(大量的表,严格的SQL语法)、模型有幻觉、很复杂的查询(嵌套等)。

AI学习库本质上是RAG技术,通过外部知识库来提高大模型生成SQL的准确度。(1)DDL语法让LLM了解表结构和字段约束,同时仅关注与当前相关的内容,而不是全部的DDL语法 ;(2) 专业术语让 LLM 能够了解专业领域和最新的知识;(3)而SQL问答可以让LLM学 习已有的正确经验。

(1)DDL语法

核心价值:

● 让AI 快速获取表间关联关系,避免多表关联错误;

● 让 AI 记住字段类型 /约束,避免生成数据类型不匹配的SQL;

示例:

用户问: “查询重量大于 5 公斤且配送完成时间在 2026年2 月的包裹”

情况1:不使用AI学习库, 大模型靠自有知识生成SQL语法

SELECT * FROM delivery

WHE RE weight > ‘5kg’

AND delive ry_tim e BETWEEN ‘2026-02 ’ AND ‘2026-03’

AND delivery_status = ‘已完成 ’;

执行后直接报 “数据类型不匹配” 错误。

原因:字段类型和约束违规,比如weight是DECIMAL类型,不能加字符串单位

情况2:使用AI学习库,查询到AI学习库中存储的delivery表的 DDL ,包含字段类 型(weight=DECIMAL、delivery_ stat us=TINYINT)、格式要求(d eli very_time=DATETIME);

A I 检索到这些信息后,自动规避类型错误,生成正确SQL

-- 正确SQL:符合字段类型和约束

SELECT * FROM delivery

WHERE weight > 5 – 无单位,纯数值

AND delivery_time >= ‘ 2026-02-01 00:00:00’ AND delivery _time < ‘20 26-0 3-01 00:0 0:00’ – 完整DATETIME格 式

AND deli very _status = 3; – 数值匹配字段类型

(2)专业术语

核心价值

● 解决技术字段名与业务术语脱节的问题,精准理解非技术用户的提问;

● 模型不懂专业知识和最新的知识,比如并不理解某款游戏中“火男”是指什么含义 。

例:

用户问:“查询账户总额大于 10 万元的用户 I D 和可用 余额”

情况1:没有专业术语, 大模型仅 依赖自有知识和DDL语法生成S QL

SELECT u_id, tot_amt FROM user_ account

WHERE tot_amt > 1 00000;

执行后的结果是错误的。

原因:不明白可用余额和账户总额的区别,不知道可用余额是哪个字段。

情况2:专业术语中增加 “可用余 额”的解释。

可用余额指账户中不受冻结、不被预占、可立 即用于支 付、转账、提现的资金金额。 计算公式:可用余额 = 账户总余额 − 冻 结金额 − 在途金额 − 预授权占用金额

对应数据库字段:acct_ bal / avail_balance

AI 检索到这些信息后,能够精确映射专业术语,生成正确 SQL

SELEC T u_ id A S 用户ID, acct_bal AS 可用余额

FROM user_acco unt

WHERE tot_amt > 1 00000;

(3)SQL问答

核心价值:

✓ 保障复杂 / 变体问题的 SQL 生成准确率和一致性,避免纯 LLM 的推理错误;

用户问: “ 查询上个月已完成的订单金额”

情况1:是个新问题,SQ L问答库为空,没有相似的问题。LLM 靠自有能力生成的SQL:

SELECT SUM(amount) FROM s ales _order

WHERE ord er_status = ‘已完成’

AND order_time >= ‘2026-01-01’ AND order_time < ‘2026- 0 2-01’;

执行后返回 0 条结果。答案错误。

原因:字段存的是数字3,不是字符串

第一次用户发现错误后,人 工修正为正确的 SQL 。将(问题,SQL答案)存储到了AI学习库中的SQL问答。

SELECT SUM(am ount) FROM sales_order

WHERE order_status = 3

AND or der_t ime >= ‘2026-01-01’ AND order_ti me < ‘2026-02-01’;

第二次用户问 :“查询本周已完成的订单数量”,AI 直接从 AI学习库中检索到相似的SQL问答,生成正确 SQL :

SELECT COUNT(*) FROM sales_order

WHERE order_status = 3

AND order_time >= DATE_SUB(NOW(), INTERVAL 7 DAY);