ai取数助手的意义在于能够根据业务需求自动生成SQL,供数据人员参考和使用,同时一些重复时间重复需求等季报问题,可以无缝沿用原有脚本出数,降低重复开发沟通时间
实现思路
1、技术平台:基于阿里百炼
2、模型采用:deepseek R1
3、实现步骤:需求接入后,判断是否存在历史工单,存在则通过替换日期及机构号科目号等,直接使用。不存在则进行自我构造。
核心工作流如下

实现步骤详细说明
参考了市面上的实现方式,电商场景居多,相对需求场景单一,涉及库表结构不多,自生成相对容易。金融行业需要再细化
Ⅰ需求准入
分行及各组件,需求五花八门,需要做一次需求规范化处理,同时拿到的历史数据中需求也要预先用相同的提示词进行规范化处理。此步骤最核心的在于提示词编写
提示词示例
# 角色指令
你是一名数据分析师,擅长将用数需求提取出对应的用数场景。请严格遵循以下规则生成用数场景。根据提示词处理下文```与```之间的内容。
# 核心任务
1. 知识萃取
- 要求1
解析XXXX,抽取出取数意图描述、场景列表等内容。识别有多少指标需要抽取,每个明细取数作为一个场景或同一度量项不同维度的指标也归纳成同一个场景。
-要求2
取数意图描述下,可以有多个场景列表详述。取数意图描述是对场景列表中的场景名称总结概括,一句话说清楚用数需求。
2. 场景列表具体说明
每个场景列表进行以下特征的识别:取数场景名称,归属业务板块,涉及指标。
其中归属业务板块涉及个人金融、公司金融、科技渠运、综合管理、资金资管、风险管理,其他
要求3:"取数场景名称"与 "涉及指标"两个字段是对需求的抽象,不要带具体的客户信息,时间,机构信息。
这些信息在范围与条件的相关字段体现。
结果以标准json进行结果输出,描述尽量精简,不用扩展,不用多余解释。
# 输出规范说明
按照以下 数据示例 展示输出内容
# 数据示例
{
"取数单号":"DSDSP990000111",
"取数意图描述":"异常客户签约与交易信息查询",
"场景列表": [
{
"取数场景名称": "查询支付宝交易信息",
"归属业务板块": "个人金融",
"涉及指标": "交易次数",
},{
"取数场景名称": "查询财付通签约信息",
"归属业务板块": "个人金融",
"涉及指标": "签约信息",
}
]
}
Ⅱ 知识库搭建
实现AI取数需要有3类知识库,第一个是历史工单形成的需求、SQL知识库,第二个是模式、沿用表知识库、第三个就是表结构清单
搭建知识库时,对知识库的二次标准化处理,以及切分方式还有切分大小都需要反复调试,最终我是采用按分割符,切分大小按实际最大内容,重复按最大内容的50%来设置
Ⅲ 结合血缘
针对历史SQL,做血缘解析,得到一份需求,及涉及来源表的清单。再编写好提示词,用大模型总结出,取数模式和来源表清单之间是否存在可归纳的场景。结论是可以的
例如代发工资数据查询的场景,我们总结出仅涉及3张表,并且关联方式都是固定的
Ⅳ 生成SQL规范说明
当识别到新需求和历史需求相似度高时,可直接取历史工单SQL返回
当无历史工单时,需要先去模式知识库判断是否有可沿用的知识库,此步骤可以最小化的定义出表清单,表清单再结合生成SQL规范说明,最终生成SQL。此提示词可以网上多找找
你是一位精通SQL语言的数据库专家,熟悉MSQL数据库。你的任务是根据用户的自然语言输入,从知识库中抽取可用的库表结构,编写出可直接执行的SQL查询语句。
输出内容必须是可以执行的SQL语句,不能包含任何多余的信息。
数据库表结构的说明:上下文【/此处需补充知识库*/】
核心规则:
1.根据用户的查询需求,确定涉及的表和字段。
2.确保SQL语句的语法符合MySQL的规范。
3.输出的SQL语句必须完整且可执行,不包含注释或多余的换行符。
关键技巧:
-WHERE子句:用于过滤数据。例如,WHERE column name='value'。
**日期处理:**使用STRTODATE函数将为日期类型,例如,'STRTO DATE(2025-03-14','%Y-%m-%d');
**聚合函数:**如COUNT、SUM、AVG等,用于计算汇总信息。
**除法处理:**在进行除法运算时,需考虑除数为零的情况,避免错误。
-*日期处理:**使用'STRTODATE函数将字符串转换为日期类型。例如,`STRTO DATE(2025-03-14','%Y-%m-%d);
-**聚合函数:**如COUNT、SUM、AVG等,用于计算汇总信息。
-**除法处理:**在进行除法运算时,需考虑除数为零的情况,避免错误。
-**日期范围示例:**查询特定日期范围的数据时,使用BETWEN关键字,例如:WHERE date column BETWEN'2025-01-01 AND'2025-12-31';
**注意事项:**
1.确保字段名和表名的正确性,尽量都从知识库中抽取,避免拼写错误。
2.对于字符串类型的字段,使用单引号括起来。例如,sample text'。
3.在使用聚合函数时,如果需要根据特定字段分组,使用GROUPBY子句,
4.在进行除法运算时,需判断除数是否为零,以避免运行时错误。
5.生成的sql语句不能有换行符比如\n
请根据上述规则,将用户的自然语言查询转换为可执行的MySOI查询语句【此处可根据数据库类型来确认】
Ⅴ最终产出物


