导读
随着大数据技术的迅猛发展,传统 BI(商业智能)产品已经逐步向智能化方向转型。从最初的报表式分析到自助式分析,再到如今的智能化 BI,数据分析正迎来更加高效、精准的变革。尤其是在行业内部,智能化改造正在加速推进,不仅关注提升 AI 能力,更注重 AI 能力的复用和跨平台的灵活适配。本次分享将深入探讨腾讯在智能化 BI 系统中的技术实践,详细阐述如何通过工程架构、微调模型、引导补全、前端指令层设计等手段,提升数据分析的智能化水平,并展示如何应对上述挑战,以实现更高效、更智能的商业智能分析。
今天的介绍会围绕以下六点展开:
1.
背景介绍
2.
目标与挑战
3.
架构演进
4.
重点模块设计
5.
未来规划
6.
问答环节
分享嘉宾|
霍琦
腾讯
资深研发工程师
编辑整理|
陈思永
内容校对|李瑶
出品社区|
DataFun
背景介绍
1.
背景与现状
2.
遇到的问题
-
架构不清晰
:快速迭代导致架构耦合,AI 能力难以在不同平台上复用。
-
单个 agent 设计复杂
:集成了太多业务属性,导致扩展性差。
-
大语言模型的实现难度大
:包括上下文管理、长文本记忆、幻觉等,导致自然语言到数据指令转换过程复杂。
-
数据分析整合难
:传统能力如何整合到智能化场景中。
目标与挑战
1.
目标与解决方案
-
架构统一
:方案统一、能灵活适应不同产品和数据场景。
-
用户体验优化
:从工程架构视角,提升 Agent 智能化应用体验的响应速度和准确性效果。
-
集成 AI 能力
:ABI 技术方案收敛和统一,Agent 能力快速迭代,灵活交付。
2.
面临的挑战
-
AI
能力原子化
:如何做到低成本、快速迭代的 AI 能力。
-
长文本与响应速度问题
:模型幻觉和响应延迟影响效果。
-
自然语言到 BI 指令的准确性与效率
:如何降低复杂度,提高准确率,并简化工程实现。
架构演进
1. OlaChat 概述
OlaChat
是一款基于大语言模型的智能数据助手,能够灵活集成到各种数据分析产品中,提供原生的 AI 数据体验。
2.
数据全链路分析能力
意图理解
:包括多轮对话、Query 改写、意图分类和意图识别。
数据解读
:描述性统计、异常检测、归因分析和趋势预测等。
3.
知识&推荐
数据知识助手
:为新手和不熟悉数据平台的用户提供词汇解释和问答功能,帮助理解数据概念和数据开发。
-
指标维度推荐
:推荐相关的分析维度,帮助用户做深度数据分析。
-
表字段推荐
:根据用户行为和数据热度推荐常用表字段,提升数据查询效率。
-
Query
推荐
:引导用户通过问答,帮助其完成完整的数据分析任务,并提供相关问题或分析推荐。
4. OlaChat
落地思路
初期尝试使用大屏展示和对话流式展示方式,用户提问后展示思考过程和分析结果。这种方式主要适合数据分析和数据运营人员,但并非适用于所有用户。
向 Copilot 和 AI 原生应用方向演进
:
5. OlaChat 技术框架
(1)整体架构层次
重点模块设计
1. 编排层 -
单 Agent 多 step
用户输入 SQL 语句后,SQL 纠错按步骤纠错
:
-
第一步
:系统首先告知用户 SQL 语句的错误原因(如权限问题、数据表字段错误等)。
-
第二步
:系统提供修正建议,指出可能的错误来源,如函数使用不当或语法问题,并给出修改方法。
-
第三步
:最终,系统提供一个正确的 SQL 语句供用户参考和使用。
-
用户输入
:用户输入一个 SQL 语句,提交给系统进行分析。
-
意图识别
:系统通过意图识别模块判断输入的意图,例如判断用户是否在进行 SQL 纠错操作。
-
编排层(DAG 图)
:通过配置的 DAG(有向无环图)编排,系统逐步执行纠错的过程。编排层会定义每个步骤的执行顺序,并在过程中异步处理不同子模块的返回结果(如数据服务层、SQL 解释层等)。
-
数据服务层
:如果 SQL 未执行,系统会先进行数据解释(EXPLAIN),检查 SQL 可能的问题,提升纠错的准确性。
-
Agent
调用
:编排层将调用 SQL 纠错 agent,返回用户修正建议和最终正确的 SQL。
2. 编排层 -
多 Agent 协作
场景
:
-
降级处理
:如果在指标查询中未能找到有效指标,系统会降级到 Test2SQL 的逻辑,走标准的查询流程。对于某些在线数据源,系统使用同步查询;对于其他数据源,则采用异步查询。
3. 编排层 -
统一协议与自动化编排
-
统一协议
:所有的 handler(处理单元)在输入输出时遵循统一协议,包括通用部分和特定参数的设计。响应处理也是基于这种协议。通过统一协议,
agent 与 agent 之间
能够在编排框架中自动流转,无需硬编码逻辑,从而简化了流程的自动化。
-
编排流转
:当所有的 handler 和 operator 的协议对接成功后,整个编排流程就能够顺利进行。编排过程更加灵活,能够自动调用不同的 agent 并处理数据,避免了传统编程中强依赖和硬编码的复杂性。
4. 编排层 -
人工干预
-
干预流程
:在某些关键步骤中,人工干预是不可避免的。例如,假定有这样一个场景,在生成代码并提交测试发布,如果测试失败,则回到生成代码的环节直到测试通过。审核过程需要人工介入,只有审核通过后才能发布程序。
-
伪装为 Agent 的输入
:人工输入被设计成类似
agent
的角色,遵循与其他 agent 相同的输入输出协议。这样,在人工干预的环节,依然能够与编排流程保持一致,确保整体流程的连贯性。
-
控制输入的有效性
:每个 agent 都有输入控制环节(
preCheck
),可以判断和限制用户输入是否符合预期,决定是否继续执行下一步。若输入不符合预期,可能会被拦截,避免对流程造成干扰。
-
意图理解与澄清
:用户的输入可能会不清晰或含糊,系统在意图识别后提供问题澄清,确保分析的准确性。
-
二次分析与修改
:用户在数据分析过程中可以基于初步结果做二次分析,或修改已经生成的分析条件。比如,生成的报表或看板中的指标维度可以供用户做进一步修改。
-
SQL
补全
:用户在写 SQL 代码时,可以获得类似
GitHub 补全
的功能,系统会建议补全的 SQL 代码,用户可以选择接受建议,或继续手动修改 SQL。
5.
Agent 提升 -
对话上下文
意图识别的挑战
减少意图候选的复杂性
意图辅助理解
历史对话信息的提取与优化
-
从历史对话中提取关键信息
:多轮对话中的信息量很大,系统会通过不同的 agent(处理单元)将
关键的、有效的信息
从历史对话中提取出来。这样做可以帮助精简历史信息,避免无关数据对后续操作造成干扰。
-
减少无效信息
:每个 agent 在响应用户请求时,会分析返回的历史信息,过滤掉无效的部分,只保留关键信息。这一过程通过
编排和工程优化
来实现,帮助系统处理更简洁的数据,从而减少
幻觉问题
,确保后续对话和决策更加准确。
优化后的效果
6.
Agent 提升 -
Text2SQL 落地的准确性
自然语言到 SQL 的生成问题
-
元数据不准确或缺失
:如果元数据存在问题,如数据不准确或缺失,生成的 SQL 可能会出错。
-
幻觉问题
:生成的 SQL 可能包含虚构字段、缺失字段,或者生成的 SQL 存在语法错误等问题,导致无法执行。
-
杜撰字段问题
:生成的 SQL 中可能包含不相关的或不适用的字段,导致 SQL 执行出错。
方案设计:高频查询与候选集的优化
-
高频查询中的指标答案
:为了提高准确性,可以从高频的查询中提取已经验证过的高质量指标,用来作为生成 SQL 时的参考。这些指标生成的 SQL 具有更高的准确性。
-
常用表的候选集
:在查找表时,系统会使用用户常用的表和字段作为候选集。这些表和字段被认为是用户最常操作的,因此在生成 SQL 时,系统会优先考虑它们。
-
数据预览和抽样
:在生成 SQL 时,可以对数据进行格式查询和抽样,确保字段类型(例如日期格式)被正确识别,避免因数据格式问题导致错误的判断。
迭代执行与 SQL 可执行性校验
7.
Agent 提升 -
Text2DSL(拖曳分析条件)
DSL 转换问题与解决方案
-
自然语言到 DSL 的转换困难
:自然语言到 DSL的转换存在一定的难度,尤其是对于拖拽分析条件的理解。DSL(Domain
Specific Language)是一个协议语言,用于描述数据分析条件,通常包括指标、维度、过滤条件、时间范围等。
-
解决方案:引入中间层
:为了解决自然语言到 DSL 的直接转换困难,系统引入了
SQL
(中间层)。这个中间层将自然语言转化为 SQL,再从 SQL 转换为 DSL,最后将 DSL 转换为前端指令,便于用户在数据分析工具中进行查询。
SQL 到 DSL 的转换流
程
-
SQL
解析和转换
:在生成 SQL 后,系统会解析 SQL,将其转化为类似语法树的结构。这个过程中,系统会对 SQL 进行处理,提取出维度、指标、过滤条件、时间条件、排序字段等信息。
-
单层和多层 SQL 处理
:
单层 SQL
:如果 SQL 是单层的,系统会进行
group by
、
having
、
where
等处理,提取出维度和指标,并应用过滤条件。
多层 SQL
:对于包含子查询的 SQL,系统会将每一层的字段通过别名连接起来,并最终生成完整的查询结构。
-
虚拟字段的使用
:当 SQL 中包含特定平台的自定义函数或复杂逻辑时,系统会生成虚拟字段,用 SQL 语句来描述这些指标,并在查询时回填相应的数据。
DSL 层的设计
引入中间层的引申思考
-
引入中间层的好处
:当从自然语言直接生成目标结果变得困难或效果较差时,引入中间层(如 SQL)可以使得系统更加灵活和高效。通过先将自然语言转化为 SQL,再从 SQL 转化为 DSL,最终生成前端指令的方式,能够更好地适应不同的数据产品和复杂的数据分析场景。
-
无损转换的挑战
:在设计中间层时,要确保每一层的转换过程尽量无损,以避免在多次转换中丢失信息。例如,如果每一层都产生一定的损耗(如 0.9 的转化率),最终的结果将显著降低。系统需要在每一层的转换中尽量避免这种信息丢失,以确保最终结果的高质量。
8.
数据服务层的设计与实现
-
数据服务层结构
:
SQL
类服务
:这部分负责处理 SQL 相关的任务,包括解析、格式化和查询计划的生成。这使得系统可以动态地生成并执行 SQL 查询。
指标 HeadlessBI
:该服务管理高质量的统一指标,确保分析的结果一致且准确。它支持基于用户定义的指标和维度进行查询,并提供有效的 SQL 表达形式。此外,它还能够识别并选择合适的数据源,确保查询效果最佳。
图表服务
:图表相关的服务负责图表配置与推荐。当用户选择展示数据时,系统会推荐最适合的图表形式,如趋势图、饼图、柱状图等。这些服务减少了用户手动选择图表类型的复杂度,并提供了智能推荐。
9.
数据场景的抽象与意图识别
-
意图识别的增强
:针对复杂数据查询的场景,系统会通过更智能的方式来识别用户意图。例如,如果用户询问某个指标(如腾讯视频 DAU),系统会根据当前的场景决定是生成 SQL 查询、展示一个图表还是直接给出数据分析结果。这个过程通过抽象不同的数据场景(如仪表盘、表格分析等)来增强意图识别的智能性。
-
数据场景抽象
:不同的数据产品和平台可能有不同的数据展现形式,如仪表盘、表格等。系统通过抽象这些场景,帮助用户更自然地理解和使用数据分析功能,提升整体的用户体验。例如,用户不仅仅是提问数据结果,系统还能够根据用户的需求自动选择最合适的展示方式(表格、图表等)。
10.
对话式协议与数据交互
-
流式协议的应用
:数据服务不仅支持传统的同步查询,还引入了流式协议以增强交互体验。常见的流式协议包括:
SSE
(Server-Sent
Events)
:适用于需要一次请求多次响应的场景。例如,用户在文字生成 SQL 的过程中,系统会按找表、生成 SQL、SQL 解读等步骤返回。
WebSocket
:适用于双向通信的场景,如 SQL 补全过程中的实时反馈。用户在输入 SQL 时,系统可以根据用户的输入即时反馈相关信息或补全建议。
11.
监控与调试
12.
接入方式
-
SaaS
服务
:用户可以通过 SaaS 方式直接接入数据平台进行访问和处理。这样的设计减少了集成的复杂度,提升用户对 AI 应用一致性体验。
-
数据产品的接入方式
:为了支持更多数据产品和平台的智能化改造,OlaChat 提供了多种接入方式,包括:
页面组件:用户通过网页组件直接与 OlaChat 交互。
API 接口:对于开发者或系统集成商,API 接口提供了更灵活的集成方式。
独立部署:对于涉及敏感或隐私数据的场景,系统提供了独立部署的方式,确保数据安全和隐私。
-
云原生部署:
OlaChat 已支持云原生部署。
05
未来规划
1. SQL IDE 的原生体验
2.
数仓智能化
-
数据主题理解
:通过深入理解数据主题,使得数据仓库(数仓)更加智能化。例如,系统可以自动识别数据弧中不同数据的主题,进而为用户提供更相关的分析建议。
-
任务链路推荐
:在用户进行任务设计和数据开发时,系统能够自动推荐常见的任务链路,尤其是对于那些重复性开发的任务。通过智能推荐,减少用户的重复思考和开发,提升工作效率。
-
异常代码识别
:系统能够识别那些看似可以通过编译,但在实际执行中可能会遇到的代码问题(比如,数据分布不均可能导致性能瓶颈或者执行错误),并给予用户及时的提醒和修复建议,避免用户陷入隐性 bug 中。
3.
标注质量和效率的提升
4. 画布形态的引导式数据分析
5. 用户行为数据的收集与应用
6. 短期内的规划总结
问答环节
1.
指标查询覆盖不全的解决方案
问题
:用户提问关于如果 SQL 查询覆盖不全,且涉及复杂的多表联合查询,如何确保查询的正确性以及 SQL 的生成和解析。
2. 智能化 BI 的知识梳理和数据标注
问题
:如何使用大模型实现智能化 BI,企业需要做哪些数据标注和知识梳理?
-
领域知识
:需要标注业务领域的知识,特别是
数仓的主题层
,即数据仓库中各个主题的具体定义。
-
数据源和 SQL 标注
:除了业务知识外,还需要对
原始数据字段
、
库表
和
SQL
查询
进行标注。
-
流程与模型训练
:通过对这些标注数据进行系统化梳理和训练,可以帮助模型理解和应用这些标注数据,进而提升 BI 智能化的能力。
3. 前端指令层的解释
问题
:前端指令层是什么?以及如何将用户的意图和数据进行映射的协议?