摘要
SuperSonic是一个统一Chat BI和Headless BI的AI+BI平台,采用Spring Boot微服务架构,集成LangChain4j和多种数据库,通过语义层和LLM实现自然语言到SQL的转换,为企业提供智能化数据分析解决方案。

基本概念
Headless概念之间的关系:
Database(主题域)->View(数据集)->Table(数据模型)->Column(指标/维度)

主题域 主题域可以理解为一个分类的概念,用户可以根据自己的业务场景来划分主题域。SuperSonic中的数据模型,数据集,术语等概念都归属于一个主题域。
数据模型 在SuperSonic中, 数据模型是对数据库中数据的一种逻辑层面上的抽象, 它既可以直接指代一张物理表, 也可以由一段SQL逻辑创建而成。 当我们得到一张表物理表或者一段逻辑SQL后,可以将表头字段指定为主键、维度、度量、时间日期或者是普通字段, 当表头字段都被赋予这些特定的语义后, 即形成了一个数据模型。
|
字段 |
字段类型(表/SQL表头) |
语义类型(模型) |
|
imp_date |
Date |
日期 |
|
user_name |
String |
主键 |
|
department |
String |
维度 |
|
pv |
Bigint |
度量 |
|
uv |
Bigint |
度量 |
主键 SuperSonic中的主键概念不完全等同于数据库中的主键。当我们创建多个模型之后,如果需要指定模型间的关联关系,通俗来讲就是Join的方式, 就可以通过指定主键来进行关联。
维度 维度指代那些表格中通常被用来进行分组和过滤的字段。
度量 度量的概念则恰好和维度相反,通常是一些数值型的字段,用来表达客观现象的程度。在SuperSonic中,度量主要用来创建一个具体的指标,没有其它实质性的作用。
指标 指标是相对度量更具具体和实例化的概念,用户可以基于度量,字段或者已有指标来创建指标并对它进行管理。同时,创建出来的指标也可以被问答这样的上层BI产品进行消费。
时间日期 时间日期字段在SuperSonic中有比较重要的作用,比如一个典型的场景,当我们在问答中询问\”超音数近10天访问次数\”时,需要得到具体的 时间字段来进行时间范围的过滤。因此,提前在建模时把时间字段及其格式显示指定好,能起到很大的作用。并且,目前当模型中包含有度量时, 就必须指定时间日期字段。
数据集 数据集是SuperSonic用来对接问答和其它上层BI应用的一个数据结构,在数据集中,可包含来自多个模型的维度指标。 对上层应用来说,底层建模细节是隐藏的,它只需要关注数据集中暴露出来的维度指标即可,也就是说,上层应用可以把一个数据集当作是一个大宽表,可以直接进行指标维度的分析查询。
术语 企业内部通常有自己的私域知识,是否能把私域知识教给大模型对结果准确性有较大的影响。因此,SuperSonic引入了术语的概念,通过配置术语及其描述,就可以把私域知识 传授给大模型。比如SuperSonic给的样例术语:[近期]指代近10天;[核心用户]指Tom和Lucy,就能很容易让大模型学习到这个知识。
SQL变量 当我们写SQL脚本的时候,如果希望有一些更加动态的效果,就需要用到SQL变量。举个例子,当我们想基于同一个SQL模板动态的查询日表/周表/月表的时候,就可以采用SQL变量, 如下面这段SQL,interval就是一个SQL变量,通过在调用接口的时候动态的传递interval的值,就可以实现查询不通周期粒度表的效果。
1. 项目应用场景
SuperSonic作为新一代AI+BI平台,主要应用于以下场景:
1.1 企业数据分析
- 自然语言查询:业务人员通过自然语言提问获取数据洞察
- 智能报表生成:自动生成可视化图表和报表
- 实时数据监控:支持实时数据查询和告警
1.2 数据民主化
- 降低技术门槛:非技术人员可直接进行数据查询
- 知识库管理:构建企业级数据知识库
- 语义映射:建立业务术语与数据字段的映射关系
1.3 多源数据整合
- 异构数据源:支持MySQL、ClickHouse、Presto、Trino等多种数据库
- 统一查询接口:提供标准化的数据访问API
- 数据治理:通过语义层实现数据标准化
2. 学习目标
基于SuperSonic的核心代码分析,本文设定以下学习目标:
2.1 核心技术掌握
- 理解AI+BI平台的整体架构设计
- 掌握LLM与传统BI系统的集成方式
- 学习语义层的设计与实现
2.2 关键组件分析
- LLMSqlParser:LLM驱动的SQL生成器
- SemanticLayer:语义层核心组件
- ChatQueryExecutor:查询执行引擎
- KnowledgeBase:知识库管理系统
2.3 设计模式应用
- 策略模式在多解析器中的应用
- 工厂模式在组件创建中的使用
- 责任链模式在查询处理中的实现
3. 目录结构分析
supersonic/
├── auth/ # 认证授权模块
│ ├── api/ # 认证API接口
│ ├── authentication/ # 身份认证实现
│ └── authorization/ # 权限控制实现
├── chat/ # Chat BI核心模块
│ ├── api/ # Chat API接口定义
│ └── server/ # Chat服务端实现
│ ├── parser/ # 查询解析器
│ ├── executor/ # 查询执行器
│ ├── processor/ # 结果处理器
│ └── plugin/ # 插件系统
├── headless/ # Headless BI核心模块
│ ├── api/ # Headless API接口
│ ├── chat/ # Chat集成层
│ ├── core/ # 核心业务逻辑
│ └── server/ # 服务端实现
│ ├── service/ # 业务服务层
│ ├── rest/ # REST控制器
│ └── pojo/ # 数据对象
├── common/ # 公共组件模块
│ └── src/main/java/
│ ├── com/tencent/supersonic/common/ # 通用工具类
│ └── dev/langchain4j/ # LangChain4j集成
├── launchers/ # 启动器模块
│ ├── standalone/ # 独立部署启动器
│ ├── chat/ # Chat服务启动器
│ ├── headless/ # Headless服务启动器
│ └── common/ # 启动器公共组件
├── webapp/ # 前端应用
│ └── packages/
│ ├── supersonic-fe/ # 主前端应用
│ └── chat-sdk/ # Chat SDK
└── assembly/ # 打包配置



