析言GBI配置和测试建议

本文将介绍如何配置和测试析言,帮助模型来理解业务,提高生成SQL的准确率。

您可以从以下几个方面配置和测试析言:

  1. 配置数据表信息。

    数据表、列、值的描述影响模型对于数据表的选择和生成查询问题的SQL,数据表信息可以帮助模型更好地理解数据表内容。

  2. 配置企业知识。

    在数据表信息配置完善的基础上,根据对析言的调试结果优化企业知识的配置。企业知识包括知识名词解释、同义词解释、业务逻辑解释及优化案例管理,不同类型的企业知识具备不同的作用。详情请参见企业数据管理

    • 知识名词解释:用于解释业务场景的专有名词。

    • 同义词解释:用于解释数据表中存储字段的多种常用叫法。

    • 业务逻辑解释:非通俗常规性知识,用于解释企业中特定的逻辑,例如定义计算公式、设置约定条件,业务逻辑并非添加数量越多效果越好。

    • 优化案例管理:标准版MIX支持此功能。在尝试调整问题问法及数据管理后,模型依然无法输出预期结果的情况下,您可以通过添加优化案例来指导模型进行学习。

  3. 改进提问技巧。

    推荐从易向难进行提问,测试析言的回答效果。

配置数据表信息

数据表管理中,打开已经连接的数据库,选择数据表,配置数据表信息。

参数名称

是否必填

参数说明

数据表描述

必填

对数据表的整体的解释。解释这张数据表是关于什么的、主要包含什么信息、可以用来查询什么内容。

常见配置话术这是xx表,存储xx信息,用于查询xx内容

例如:这是customers表,存储客户信息,用于查询客户名称、客户邮箱等内容。

列描述

必填

描述字段的关键信息。无需在列描述中枚举或做过多的解释说明,简单扼要地描述字段表示的业务语义即可,字数建议控制在10字以内。

对于枚举类型的字段,如果需要解释每个枚举值的含义,建议在枚举值的映射中进行配置,不要写在列描述中。

外键

跨表查询必填

外键定义了数据表之间的依赖关系,如果需要多表连接,必须配置外键。

枚举类型候选值

枚举类型字段必填

是否枚举选择,表示该字段是枚举类型的字段,需要同步候选的枚举值。

枚举值管理

枚举类型字段必填

如果该枚举列存储的不是真实的枚举值,而是用特殊的编码来表示不同的含义,需要配置枚举值的映射关系,说明每个字段值的含义。下图左侧“枚举值”是数据库中实际存储的值,右侧“映射值”是该值所表示的含义。例如:产品类型中的01代表电器,02代表家具,03代表服装。

image.png

数据样例

选填

该字段在数据库中的样例值。对于表示时间日期的列,建议配置数据样例,帮助模型理解时间日期的格式。

配置企业知识

为什么配置企业知识

当模型不理解提问中的某个名词或者计算逻辑的时候,需要配置相应的企业知识,如业务逻辑、名词解释、案例等,帮助模型来理解业务,正确的选表和选字段,提高生成SQL的准确率。

测试问题

模型回答错误原因

优化措施

今天销量最高的大区是哪个大区?

模型取错了时间,选取了交付时间,实际是要选销售时间

增加一条业务逻辑:计算某段时间的销量时,使用xxx字段。

2024年在xxxx市发动机企业销量及占比月度走势

模型理解错误,占比为xxxx市各发动机企业占所有发动机企业的占比,而非xxxx市占xx的,SQL占比不对

建议增加一条业务逻辑解释:

xxxx市发动机企业销量占比=xxxx市各发动机企业的销量/所有发动机企业的销量*100%

查询商家IDxxx的账户总金额

模型选错字段,生成的SQL有误

列描述虽有定义对应的列,但是对于总金额、总余额列描述还是会有混淆,可以在同义词配置中添加总余额=xxx、总金额=xxx

举个例子,第一次去别人家做客,需要找一个东西。

一些通识类或者有家里有标明xx东西在哪里的情况下。即便第一次来家里,也会知道碗筷在厨房里 ,衣服在衣柜里 ,鞋子在鞋柜里。或者知道手表在桌子上(有标明,即字段行描述中有写) 这些是不需要额外的输入即可找到,即标准模型可以直接生成SQL

针对一些不常见的,或者有具体含义的东西,需要一些额外的输入才能被找到,即需要配置业务逻辑。

  • 今年生日穿的衣服在哪里? 在没有额外的输入的时候,不知道具体指的哪件衣服,需要额外的信息输入: 今年生日穿的衣服是一件红色,印有一只黑色猫猫的大衣。 有了这种输入,就可以快速找到是哪一件。 今年生日穿的衣服是一件红色,印有一只黑色猫猫的大衣。 对析言来说,这就是一条业务逻辑。

  • 小黑在哪里? 同样,没有额外的输入的话,并不清楚小黑是什么。需要信息输入如:小黑是家里养的那只黑色的小猫。这是一个名词解释。

企业知识配置原则

  1. 语言简洁清晰,避免使用大段文本。

  2. 避免在业务逻辑中出现复杂的推理、或者if else的判断等。

  3. 业务逻辑优先使用数学公式或者SQL片段的形式。

  4. 业务逻辑之间不能有冲突,也不能与用户的问题、表格信息、案例库等出现冲突。

企业知识配置说明

知识名词解释

知识名词解释页面,点击新增知识,输入知识名称和知识描述,点击保存

image

示例如下:

知识名称配置为收入知识描述配置为收入指的是financial_report表的amount字段,amount为正数,即 financial_report.amount>0

同义词解释

同义词解释页面,点击新增词语,输入词语及其同义词,选择数据表,点击确认

image

同义词主要包括以下几个方面:

  • 枚举值的同义词。

    例如:枚举值为“红旗”。则此处,词语配置为红旗同义词配置为一汽红旗、红旗公司

  • 字段名的同义词。

    例如:数据表中的字段为“品牌”,则此处,词语配置为品牌同义词配置为企业、公司

业务逻辑解释

业务逻辑解释页面,点击新增逻辑解释,输入业务逻辑解释和业务逻辑类型,点击保存

重要

业务逻辑解释不是配置数量越多效果越好,建议精简配置。业务逻辑类型建议选择系统智能判断,如果是绝大多数问题都需遵循的业务逻辑,可设置为全局类型

image

业务逻辑解释中配置的自定义指标、公式等,建议以数学公式或者SQL片段的形式给出。自定义指标需要配置为系统智能判断,并写上对应的计算公式。

  • 数学公式形式:xx指的是xxx,定义是xxx,计算公式是xxx,如table.columnA/ (table.columnB+table.columnC} 。

    例如:完成率,同义词是完成进度、完成状态、完成情况,定义为:实际值/目标值,如果分母为0,完成率为-999。

  • SQL片段的形式:xx指的是xxx,定义是xxx,计算方式是xxx,如SELECT AVG(column_name) AS average_value FROM table_name。

    例如:完成率,同义词是完成进度、完成状态、完成情况,计算方式为:(CASE WHEN target_value = 0 THEN -999 ELSE actual_value / target_value END AS completion_rate)。

错误示例

建议修改

customer表里的用户数的逻辑是从表 ods_xxx_table中进行count(distinct userid)。

customer表的用户指的是tablename.colname字段,求玩家用户数时count(distinct colname)

转化率,也叫线索转化率,定义为:线索总数/大定总数。

转化率,也叫线索转化率,定义为:线索总数/大定总数,即COUNT(DISTINCT clew_identity_id) / SUM(CASE WHEN is_deposit = 1 OR is_deposit_new = 1 THEN 1 ELSE 0 END)

如果表中有a字段,计算时一定要把a字段放在where条件里?

当查询xx问题时,表xx的字段A=xxx。

优化案例管理

标准版MIX支持此功能。

优化案例管理页面的案例库管理页签,点击新增问法,输入问法描述和预期正确执行的完整SQL,点击保存

image

示例如下:

问法描述中输入20244月上海汽车销量预期正确执行的完整SQL中输入SELECT SUM(total) AS sales_qutity FROM tb_vehicle_newcarn WHERE substr(date,1,5) = "2024-03" AND province = '上海'

提问技巧

常见提问公式

when+who+where+what? 即查询xx时间主体是xx,条件是xx的某个指标。

从问题的难易程度划分为5个层级,推荐从易向难进行提问:

⭐️ 问题中包含的要素信息均能直接对应到表中存储的具体字段。

例如:20241020日产品A的销售额是多少?此问题中的时间、产品、销售额在数据表中均有对应的字段。

⭐️ ⭐️ 提问的问题中包含的要素信息可以对应到表中存储的具体字段,但需要进行基础运算。

例如:统计近两年每个季度每个类别的总销售额。

⭐️ ⭐ ️ ⭐️ 提问的问题中包含的要素信息涉及到企业的业务逻辑。

例如:列出所有已发货订单的详细信息。

说明:已发货的订单在数据表中没有直接字段,而是用物流状态这个字段来表达订单的状态,此时需要配置一条业务逻辑:当查询订单状态时,指的是查询订单的物流状态,使用order_status字段的内容。

⭐️ ⭐ ⭐️ ⭐ 对于标准版MIX如果优化业务逻辑或同义词配置后,模型依然表现不好,可以通过配置案例库来帮助模型自学习,添加具有代表性的一个问题和其对应的预期生成SQL内容。

image.png

⭐️ ⭐ ⭐️ ⭐ ⭐ 对于业务逻辑较复杂的可收敛场景,如果上述方式均无法满足准确率及时效性预期,建议使用定制版TURBO,对模型进行业务定制。

定制版TURBO仅用于定制化项目交付(包含使用定制模型进行付费POC项目交付)。若需购买定制版TURBO,请在下单前咨询对接的商务人员或提交工单至析言GBI产品研发团队。

提问时的常见错误

  1. 提问时没描述清楚

    错误示例

    错误原因

    改进建议

    哪个车销量增长?

    没有限制时间,销量增长无法对比

    8月对比7月,哪个车的销量有增长?

    9月份优惠券使用情况

    使用情况没有具体的说明,具体指优惠券使用率,优惠券使用金额,优惠券使用的数量?

    9月份通过优惠券付费的订单数量,或 9月份优惠券的使用金额等?

  2. 一次提问中包含了多个问题

    一个问题只能写一个SQL语句,析言无法处理一个问题需要多条SQL来回答的情况。

    错误示例

    改进建议

    每个店铺5月份的交易额以及各个门店9月的优惠券使用情况

    建议分两次来提问。

    去年广东省的平均销量和每个月的销量分别是多少

    一条SQL写不出来,建议分两次来提问。

  3. 提问中包含了业务逻辑,计算公式等众多信息

    错误示例

    改进建议

    xx市各车型(牵引车、载货车、自卸车、搅拌车)销量占比

    • 问题修改为:xx市各车型的销量占比

    • 增加一条业务逻辑:当咨询车型且未指定具体某一车型时,车型指的是牵引车、载货车、自卸车、搅拌车,即table表中字段chexing in (1,2,3,4)

    这些宝宝数据里面,有多少是喝xx产品的,xx产品在cdp_order_detail_newgoods_brand=‘xx’和cdp_rolex_skugoods_brand=‘xx’

    将这一段放在业务逻辑里:xx产品在cdp_order_detail_newgoods_brand=‘xx’和cdp_rolex_skugoods_brand=‘xx’

  4. 提问中包含了析言GBI暂不支持的功能

    暂不支持的功能

    错误示例

    错误原因

    改进建议

    非问数场景

    根据用户角色统计20248月的活跃用户数,并导出

    析言支持对数据结果下载,但提问中的导出命令无法执行

    删除提问中的导出命令,修改为:根据用户角色统计20248月的活跃用户数

    BI分析

    员工薪酬与商品收入是否满足线性相关,如果满足线性关系,请说明相关性以及如何影响。

    线性相关的分析类场景暂不支持

    分析、预测类问题不支持,提问中不要包含相关描述。

    SQL维度的多轮

    第一轮:20248月份杭州门店销量是多少?

    第二轮:在上述查询结果中,9月销量是多少?

    析言GBI多轮对话是问题维度,不支持在上次查询结果中进行二次查询

    第一轮:20248月份杭州门店销量是多少?

    第二轮:9月销量是多少?

常见问题

  1. 时间日期相关

    • 析言有默认的时间理解,对于动态的时间表达式比如今天、去年等,析言默认以北京时间作为当前的时间进行计算,暂不支持自定义。

    • 析言支持的动态时间表达式及对应的计算逻辑。

      业务逻辑配置案例.xlsx

    • 动态时间表达式的计算逻辑不支持自定义,即无法通过业务逻辑的配置来更改时间的推导。

      例如:近三天,析言默认近几天或者过去几天是包含今天的,如果不希望包含今天,需要换一种说法:不包含今天的近三天。

  2. 输出展示

    • 查询结果:析言默认展示数据库中实际查到的列名和列值,不支持通过业务逻辑的配置进行更改。

      比如这条业务逻辑是不支持的:查询结果展示字段中文名,不要展示英文原名。

    • 文本回复:析言输出的文本回复是对数据库查询结果的概括,不支持通过业务逻辑进行调整。

      比如这条业务逻辑是不支持的:当问题以“喂”开头时,回复固定话术xxxx。