Files
supersonic/README_CN.md

65 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 超音数SuperSonic
**超音数是一个开箱即用且易于扩展的数据问答对话框架**。通过超音数的问答对话界面,用户能够使用自然语言查询数据,系统会选择合适的可视化图表呈现结果。超音数不需要修改或复制数据,只需要在物理数据库之上构建逻辑语义模型(定义指标、维度、相互间关系等),即可开启数据问答体验。与此同时,超音数被设计为可插拔式框架,允许以插件形式来扩展新功能,或者将核心组件与其他系统集成。
<img src="./docs/images/supersonic_demo.gif" align="center"/>
## 项目动机
大型语言模型LLMs如ChatGPT的出现正在重塑信息检索的方式。在数据分析领域学术界和工业界主要关注利用深度学习模型将自然语言查询转换为SQL查询。虽然一些工作显示出有前景的结果但它们还并不适用于实际场景。
在我们看来,为了在实际场景发挥价值,有两个关键点:
1. 将基于规则和基于模型的语义解析器相结合,发挥各自优势,以便处理不同的场景
2. 引入语义模型层来封装数据底层的复杂性,从而简化语义解析器的问题求解空间
为了验证上述想法,我们开发了超音数项目,并将其应用在实际的内部产品中。与此同时,我们决定将超音数作为一个可扩展的框架开源,希望能够促进数据问答对话领域的进一步发展。
## 开箱即用的特性
- 内置图形界面以便业务用户输入数据查询
- 内置图形界面以便分析工程师管理语义模型
- 支持文本输入的联想和查询问题的推荐
- 支持多轮对话,根据语境自动切换上下文
- 支持三级权限控制:主题域级、列级、行级
## 易于扩展的组件
超音数主要分为两层supersonic-chat and supersonic-semantic。问答层负责将自然语言查询转换为语义查询也称为DSL查询而语义层负责将DSL查询转换为SQL查询。超音数的整体架构和主流程如下图所示
<img src="./docs/images/supersonic_components.png" height="80%" width="80%" align="center"/>
### 问答层
问答层包含以下4个核心组件
- **问答对话界面(chat interface)**:接受用户查询并选择合适的可视化图表呈现结果,支持输入联想和多轮对话。
- **模式映射器(schema mapper)**基于语义模型的schema构建知识库然后将自然语言查询在知识库中进行匹配为后续的语义解析提供相关信息。
- **语义解析器链(semantic parser chain)**:识别查询模式并选择最匹配的语义模型,其由一组基于规则或模型的解析器组成,每个解析器可用于应对不同的特定场景。
- **语义查询(semantic query)**: 根据语义解析的结果执行查询默认的语义查询会将DSL提交给语义组件但可以扩展新类型的查询。
### 语义层
语义层包含以下4个核心组件
- **语义建模界面(modeling interface)**:使分析工程师能够通过可视化方式定义和维护语义模型,与访问权限和聊天对话相关的配置也可以在用户界面上设置。
- **DSL解析器(DSL parser)**将DSL表达式转换为中间结构。为了使其易于与分析应用程序集成使用SQL不含join和计算公式来作为DSL。
- **查询计划器(query planner)**:根据各种规则来构建和优化查询计划。
- **SQL生成器(SQL genenrator)**基于查询计划来生成最终的SQL语句含join和计算公式
## 快速体验
超音数自带样例的语义模型和问答对话,只需以下三步即可快速体验:
- 从[release page](https://github.com/tencentmusic/supersonic/releases)下载预先构建好的发行包
- 运行 "bin/start-standalone.sh"启动服务
- 在浏览器访问http://localhost:9080 开启探索
## 如何构建
下载源码包,运行脚本"assembly/bin/build-standalone.sh",将所有服务一起编译打包