润乾 NLQ 实施流程

..

NLQ 实施总体路径图

1. 确定系统边界

目标:在业务上确定查询范围,划分系统边界,明确角色和权限。

说明:查询范围建议先划定部分业务,后续逐步扩展到更大的业务范围。根据查询范围,明确要查那些表、哪些字段、哪些指标等。

2. 理解整理数据结构

目标:ER 图或等效的数据结构描述,包括表、字段、主键、外键等,分清事实表、维表、主子表。

耗时较长提醒:如果无 BI 系统,要从头开始整理数据结果,时间可能比较长。

说明:NLQ-DQL 需要符合范式要求的数据结构,并在此基础上建立 DQL 元数据层。

ER 图样例:

..

2.1. 已有 BI 系统的情况

已经建设过 BI 系统,有现成的 ER 图或数据结构说明,可以直接用来理解实体关系。

2.2. 无 BI 系统的情况

没有 BI 系统,现有数据结构中可能存在不符合范式的地方,需要加以调整,必要的时候新建 NLQ 专用的 BI 数据库。

3. 建立 DQL 元数据

目标:使用 DQL 元数据层 IDE,以数据结构为基准,建立 DQL 元数据文件,维护好表、主键、外键、子表,得到 DQL 数据视图。

DQL 数据视图样例:

..

3.1. 维护元数据文件

从数据库中导入需要的表、字段。根据 ER 图或者表结构说明,按照下面的顺序维护好元数据:

1. 改表名、定主键

2. 检查系统自动生成的时间日期假表是否满足要求

3. 确定外键(包括物理与假表的外键)

4. 确定子表

5. 根据需求修改维度名

6. 根据实际需求检查时间日期层函数,并定义新层函数,比如地区、省、市

3.2. 维护视图文件

建立视图文件,实现权限控制。

包括:表可见性、字段可见性。

3.3. 检查元数据正确性

1. 在元数据 IDE 中查看“视图”,检查表、主键、外键、维度等是否正确。

..

2. 在 IDE 中打开“菜单 - 系统 - 翻译 DQL”,测试典型的 DQL 语句是否能得到正确结果。

发现问题,调整元数据。

4. 梳理 NLQ 查询需求

目标:梳理出 NLQ 查询的需求说明书。

说明:说明书包括要查询的内容,以及对应的中文叫法、同义词:

1. 元数据中的表对应哪些实体。

比如:订单信息、新订单信息、客户信息、雇员信息。

2. 要查询的字段、计算字段、外键表中的字段。

比如:订单编号、金额、运输天数、雇员入职日期。

3. 字段对应的单位、换算方法。

比如:元、角、分。

4. 字段簇和包括的字段。

比如:发货(日期、城市、省份)、上级(姓名、生日、职务)

5. 维度和层。

比如:年月、日、城市、订单、雇员等。

6. 指标(对应的维度)。

包括 SQL 能实现的简单指标、计算方法,比如:平均订单价值。

SQL 难以实现的复杂指标、计算方法,比如:月度股票连涨天数

7. 聚合计算。

比如:求和、求平均。

5. 建立 NLQ 词典

目标:使用汉语查询 IDE,依据需求说明书,建立 NLQ 词典,维护好表、宏字段、维度等以及对应词。

耗时较长提醒:维护字段标识和字段词所需时间与表个数、表中的字段个数相关,需要重点关注。比如 60 字段的表,维护中文标识 6 分钟,维护字段词时间相近。

步骤:

1. 检查新建词典时自动生成的词,按照实际需求修改。

包括:比较词、聚合词、连词、宏词、无效词、非法词、量纲

..

2. 维护维度

3. 维护表、实体

4. 维护宏字段(包括计算字段)

5. 维护字段簇

6. 维护外键簇

7. 维护实体的关联簇

8. 维护指标

9. 定义维词、常数词

10. 定义实体词

11. 定义字段词

12. 定义簇词、动词

13. 定义外键词

14. 定义指标词

其中,8. 维护指标,包括为复杂指标编写代码:先使用 SPL 集成开发环境编程、调试,再把代码维护到 NLQ 指标中。

正确性检查:

在维护各种词之后,用搜索实验功能检查,验证典型的汉语查询,查看结果明细,特别是 MQL 语句是否正确。

..

浏览数据,看查询结果是否正确,发现问题,修正词典、元数据。

6. 整理 LLM 提示词

目标:整理出适合的提示词 prompt。

说明:参考演示系统给出的订单查询提示词(Deepseek 版),根据实际业务需求以及 LLM 的版本、特点,整理出使用的提示词。

7. 系统集成、上线运行

目标:NLQ-DQL 与现有系统集成,上线运行,持续优化。

系统集成参见:

DQL 部署:https://d.raqsoft.com.cn:6443/report/dql/dqlserverbs33.html

NLQ 部署:https://d.raqsoft.com.cn:6443/report/nlq/nlqserverdbs.html