一、腾讯云ChatBI诞生的背景
在数据驱动的商业环境中,快速且准确地获取和分析数据变得至关重要。随着近几年大模型技术的不断进步,腾讯云BI结合大模型的产品ChatBI也就应运而生,试想一下: 如果用户想要查询公司产品这个月的收入增加了多少? 直接在腾讯云ChatBI小程序输入问题,等待几秒的时间,ChatBI就把答案呈现在用户的手机上。这将是一种多么高效和便捷的体验呢?
二、基于大模型的ChatBI效果调优
虽然大模型为ChatBI提供了强大的基础能力,但它也存在一些不足,如泛化性、幻觉以及Text2SQL能力等问题。为了弥补这些不足,腾讯云ChatBI在技术方案设计中进行了大量工程优化,包括意图澄清、Text2DSL研发和ICL调优等,让大模型更好地理解业务场景。
1.意图澄清
意图澄清主要用于解决用户输入的模糊性或不确定性。当用户提出的问题或者请求不够明确时,ChatBI系统可能无法直接给出准确的回答或执行相应的数据分析任务,就需要先进行意图澄清。
其功能如下:
● 对用户输入问题进行分类,包括的类别如下:
○ 问题与数据分析无关(涉及政治或黄色、暴力等话题)
○ 问题与数据分析相关
■ 问题中的时间及主体清晰、完整
■ 问题中缺少时间或主体。例如“腾讯赚了多少钱”、“今年我们收入怎么样”等
● 根据用户输入问题检索业务知识,并找出可能混淆的字段,构建出多个选项给用户选择。
● 具备一定的多轮对话能力,能够基于用户历史提问所包含的语义信息,生成完整的提问。这个在上面的多轮对话小节已有详细的介绍。
在上面意图澄清的流程中:
1.首先通过多轮对话模块完善问题,使其更完整;
2.然后判断问题的语义是否清晰,如果不清晰,会追问时间和主体;
3.在查找知识阶段,使用工具检索与问题相关的信息,然后对问题进行分析,找到与知识库中的关键词匹配的部分,并建立关联。分析完成后,可以得到问题与知识的对应关系,再按照一定的格式构建澄清选项;
4.考虑到纯文本匹配可能会引入语义不合理的澄清选项,我们引入了LLM和基于向量的相似性打分机制,根据问题和澄清选项的语义信息,过滤掉这些不合理的澄清选项。
意图澄清流程使用腾讯云ES基于分词的召回作为粗排,再使用LLM和向量打分作为精排,根本上避免了只使用大模型提取关键词遇到的关键词不合理、常识性词汇的追问等问题。并且生成的澄清选项,必定与知识库相关联。那么对于知识库的组织内容、召回系统的效果有更直接的考验。
此外,为了提升召回数据的准确率,腾讯云ES召回模块也进行了大量细节优化。比如日期时间的处理、如何解决专业类(非词典)词汇的召回、如何排序等,都是比较考验工程能力的优化方法,这里不再详细赘述。
2.Text2DSL(Domain Specific Language)
目前腾讯云ChatBI默认是使用Text2SQL的技术路线,使用大模型根据问题生成SQL。但是该路线具有以下天然的缺点:
1.SQL模型在一些边界场景和复杂计算查询指令上,生成稳定性表现不佳;
2.默认生成SQL方言是MySQL。如果用户使用的是其他数据源类型,目前ChatBI使用专门工具来转换,但是该工具对于方言的支持也比较有限,需要工程侧不断完善用例,维护成本较高。
基于以上问题,我们也在Text2SQL上线后,调研并开发了Text2DSL的方案。Text2DSL不会直接让大模型生成SQL,而是生成一段我们定义好的DSL结构。DSL定义了特定于数据分析领域的语言和表达方式,这些专用语言可以帮忙大模型更好地理解和处理特定领域的数据和请求。
Text2DSL路线除了能解决以上2个Text2SQL的缺点外,另外还有以下优点:
1.与腾讯云BI的拖拽结构完全兼容,除了支持MySQL外,只要腾讯云BI支持的数据源,ChatBI都可以支持,新增数据源也是无感支持
2.DSL生成的查询配置可以在BI控制台上继续进行二次编辑,并插入到指定的看板,固化为常用的看板查询分析。
3.BI中有很多复杂的指标计算方式,比如区间同环比、组内排序等,最终下发到用户数据源的可能有多个查询SQL,Text2SQL就无法支持,但是Text2DSL可以天然无缝对接,因为DSL的定义可以更加的灵活,并兼容 BI 的查询协议。
腾讯云ChatBI的DSL定义不仅参考了腾讯云BI的拖拽协议,也更多考虑了协议的通用性和大模型的理解能力。下面是协议的大的框架:
具体协议内容篇幅过长,这里展示一个DSL 协议的demo示意,其对应的问题为“2024年消耗收入排名前5的客户及消耗”
{
"Limit":5,
"Title":"2024年消耗收入排名前5的客户及消耗",
"ChartType":["table","bar"],
"FormulaList":[],
"DimensionList":[
{
"Field":"customer_name",
"DisplayName":"客户名称",
"OrderBy":null,
"IsSecondary":false,
"Optional":false
}
],
"MeasureList":[
{
"Field":"consumeincome",
"Operator":"sum",
"DisplayName":"消耗收入",
"Calculation":null,
"OrderBy":"desc",
"Optional":false
}
],
"ConditionList":[
{
"Field":"ftime",
"Operator":"=",
"Time":{
"Year":"2024"
}
}
]
}
以上DSL协议其实很好理解的,为了获取2024年消耗收入排名前5的客户及其消耗收入,查询结果将限制显示前5名客户(`Limit`: 5),并可以通过表格或条形图的形式展示(`ChartType`: ["table", "bar"])。查询涉及的主要字段包括客户名称(`customer_name`)和消耗收入(`consumeincome`),其中消耗收入将进行求和处理(`Operator`: "sum")并按降序排列(`OrderBy`: "desc"),以便展示消耗最高的客户。此外,查询条件特定于2024年(`Year`: "2024")。
区别于Text2SQL路线使用一个模型来生成SQL,在Text2DSL路线我们引入了Multi-agent的多模型架构。主要是考虑DSL包含众多字段,且各类型字段均遵循特定的操作规则,直接端到端生成DSL对模型会构成较大挑战。Multi-agent分为以下四个主要Agent:
1. 基本参数获取Agent:为图表提取DSL的基本参数。
2.维度字段DSL生成Agent:为维度字段列表生成详细的DSL配置。
3. 指标字段DSL生成Agent:为指标字段列表生成详细的DSL配置。
4. 条件字段DSL生成Agent:为条件字段列表生成详细的DSL配置。
最后会整合DSL并验证准确性:将基本参数信息与维度、指标和条件信息列表综合,形成完整的DSL。此外,进行必要的后处理和正确性验证以确保DSL的准确性和有效性。
3.ICL(In-Context Learning)调优
即使是同一个问题,在不同业务场景和知识库下的结果也可能不同,因此需要对场景进行细分,但是传统的预训练和微调方法可能不足以应对快速变化的业务需求和数据环境。为了做到针对性的优化,我们引入了ICL调优。
ICL有如下好处:
1.见效快:ICL允许模型在不直接训练的情况下,通过阅读上下文来适应新任务或数据,这样可以更快地适应新的业务场景。
2.通过设计场景特定的提示(prompt),使模型能够在给定的上下文中学习和推理,从而提高答案的相关性和准确性。
三、结语
腾讯云ChatBI的开发和实践展示了大模型和人工智能技术在数据分析领域的巨大潜力。通过不断优化和调整,我们能够提供一个更加智能、灵活且用户友好的数据分析工具,帮助企业更有效地解读复杂数据,做出更明智的业务决策。
未来,我们将继续探索新的技术和方法,进一步提升腾讯云ChatBI的智能化水平,确保它能够在不断变化的商业环境中提供稳定、可靠且前瞻性的分析支持。我们相信,随着技术的进步,ChatBI将成为企业不可或缺的智能助手,引领数据驱动决策的新潮流。
腾讯云大数据始终致力于为各行业客户提供轻快、易用、智能的大数据平台。
关注腾讯云大数据公众号
邀您探索数据的无限可能
点击阅读原文,了解更多相关产品详情
↓↓↓