一、背景介绍
喜马拉雅在数据分析领域面临诸多挑战。
对于业务来说,使用数据的门槛高,需求响应的时效性差,看板、产品不灵活,难以满足使用需求。运营人员通过自助取数产品查看数据,再用表格里的透视图进行分析,整个流程非常低效。
对于数仓、BI、数据开发人员来说,资源有限,开发成本高,排期压力大,并且数据消费效率低,数据仓库中很多加工好的高质量数据没有通过产品输出,使得数据价值没有得到最大化地释放。
因此,我们希望利用大模型,建立一套既能够释放开发压力,又方便业务人员使用,从而使数据价值得到充分发挥的 BI 应用。
二、产品架构
1. 联合建模需求场景
我们利用大模型开发了一个 ChatBI 产品。产品形态有三种:网页端、钉钉机器人,以及对外提供的 API。
上图中展示了几个真实的例子,可以看到,该产品不仅可以供运营人员使用,也可以为数据开发治理团队提供支持。
2. 产品结构
产品架构分为两个层面 ChatBI 层和数据智能引擎层。ChatBI 层提供了钉钉机器人、网页端和开放 API 接口给用户使用;背后的数据智能引擎,通过 Agent 智能体对用户的提问做意图识别,包括用户指导、指标口径、数据查询、SQL 生成、数据开发和数据治理等不同类别的 Agent 智能体。
整体架构分为五层,自下而上分别为:
- 模型接入层:借助公司的大模型平台,接入了 embedding 模型、商用文本模型、自研文本模型和自研音频模型等。
- 数据集和知识管理能力层:大模型生成 SQL 的准确性至关重要,而准确性非常依赖于 prompt 上下文,知识处理就是为了更好地表达上下文。在这一层,使大模型学习数据库中的表信息、业务知识、专业词汇、规则和一些 SQL 方言,可以更好理解 prompt,从而做出更为准确的回答。
- 工具能力层:提供了解决用户问题要使用的工具,包括检索增强、会话记忆、DB 查询、语法检查、权限校验等工具。同时为了保证质量,我们还构建了一套自动测试评估体系,以及反馈和日志追踪体系。
- 智能体能力层:包括意图识别、智能改写、智能选择数据集、NL2SQL、智能问数、数据绘图、指标口径查询、分析总结和 SQL 自动纠错等智能体。
- 产品能力:基于上述大模型、Agent 和工具的能力,产品提供了智能选表、智能问数、智能问指标、单表问答、多轮问答、联表查询、智能绘图、分析总结等功能。
- 产品形态:通过钉钉机器人、网页版和开放 API 接口提供给用户使用。
3. 智能问数发布流程
首先将表、字段知识、SQL 方言、词汇知识、规则、业务知识和样例等数据加工,建模、治理保存到数据仓库中,建立领域知识库,完成知识准备;将非结构化知识向量化处理,结构化知识关系化处理,存成图关系数据;构建评测问题,测试评估知识库,根据评测结果优化知识库;数据集问数发布后根据用户使用反馈优化数据源和数据知识,通过提示词 prompt 工程、RAG、Agent 工程优化、模型微调等不断升级迭代模型。
三、落地实践
1. 人是怎么写 SQL 的?
大模型是模拟人的思考过程而设计的,所以首先看一下人是怎么写 SQL 的。要写一个 SQL 会经历几个阶段,首先是找到需要使用的表和字段,并理解字段的含义,包括字段类型和值;接着定义同环比和时间,理解黑话、同义词和口径,比如DAU 代表什么,大亲子业务又指的是什么;还要了解不同的 SQL 方言和语法,比如MySQL 中是 WEEKDAY,而 StarRocks 中则是 DAYOFWEEK、DAYOFWEEK_ISO,又如 DAYOFWEEK 本周第一天是从周日开始的。
例如上面这个问题:“本周小说频道的专辑 DAU 趋势如何?环比?”将这句话拆开看,用到了时间语义规则、字段枚举知识、企业专业知识、同环比规则,以及自动化图表展示等知识。
用户可能还会追问。
根据上述过程,最终的链路为:用户提问后,首先对用户意图进行识别,明确要解决的问题;将用户提问进行改写,从知识库中搜索召回指标描述,补充时间、规则和指标描述等;通过大模型返回数据集结果,通过将提问在知识库中搜索召回数据集结果,将这些结果排序后,选择数据集;判断数据集类型是指标和表类型,若是指标,通过服务 API 取数,选择图表展示;如果数据集类型是表,将改写后的提问补充知识库扩写成 prompt,输出 NL2SQL,对 SQL 进行校验、纠错、取数、选择图表展示;将图表返回给用户。
2. 大模型推理优化
大模型推理优化的主要方法包括:
- Prompt Engineering:为大模型提供好的角色、指令和上下文;
- RAG:为大模型提供更加精准的知识,限定上下文输入,解决模型幻觉等问题;
- Fine-Tuning:指令遵循等;
- RAG+Fine-Tuning;
- 智能体 Agent:将复杂的工作规划为多智能体的结构,对各部分分别进行优化,从而提升整体效率;
- 大模型迭代升级。
优化工作包括如下一些层面。
知识层面:完善表信息、提高规则质量,提供足够好的样例,建立高质量的知识库。
技术层面:优化 prompt 提示词工程,拆分为多个智能体,各司其职,基础模型的升级迭代和微调,采用多路召回和重排(包括向量召回、关系化召回、大模型召回等)。
产品层面:首先是提高和用户的交互性,通过推荐给用户高频问题、展示数据集信息、选择引导等提供给用户更多信息,让用户提问更准确;并且通过多轮提问,保存用户聊天信息,点赞、点踩、标记的内容等辅助判断用户提问意图,返回更准确的回答。另外,增强可解释性,取数过程可追溯,展示取数逻辑、数据集信息、数据表说明、解释业务知识等。
质量评测层面:保证足够的单元测试,构建充足的数据集问数测试,保证测试验证全面有效,同时后台标注线上运行结果,定期复盘。
Trace 层面:保证问数全链路可追踪和反馈,持续改进产品和模型学习。RAG&Recall Trace:每个阶段知识过滤、数据召回、重排情况;LLMs Trace:生成的 SQL、Prompt、返回的结果;意图识别 Trace:路由、智能体的选择;工具 Trace:API、SQL、权限 Trace 等;状态机:意图识别、数据集选择状态、SQL 生成阶段、查询数据阶段等;用户反馈 Trace:点赞、点踩、标记、问题分类、状态等;Cost Trace:每个阶段的时间消耗、Token 消耗。
3. 上线效果
上线两周,UV 超过了自助取数工具,PV 已经过半;取数响应效率比传统取数效率快数倍;准确率达到了 85% 左右。
我们期望最终形成数据智能飞轮。通过持续优化,让 ChatBI 更智能、更懂用户,同时其中的问题不断积累,让我们有更多、更好的数据,数据得到更好地消费,为用户提供更好的体验,使运营决策更便捷,业务更成功。
四、未来展望
未来将继续提升产品能力,包括意图识别、智能改写、智能修复、智能图表展示的能力。同时,探索 DataOps 相关智能体,例如 SQL 生成、SQL 优化、排查等智能体。另一方面,将智能体与之前构建的产品能力相融合,让所有数据产品都具备自然语言的交互能力。