背景
大模型的出现使chat bi 成为一种可能,自然语句的交互,极大的提高了数据分析的效率,也极大的降低了用户使用的门槛。下面主要列出几点提高自然语句转成SQL的技巧。本文在不对大模型进行微调的情况下,通过工程的角度进行优化效果。
提示词模版
问题
xx
表结构
xx
回答问题的规则
1.比如只能用clickhouse的语法
2.不能使用哪些函数
3.xx
表结构注释
要对每一个字段进行详细注释,区分维度字段和指标字段。可以用不同的前缀来进行区分。对于有歧义的要进行详说明
create table user{
id int ,
dim_group_id int commnet ''
create_time long comment 'the unit is second'
online_count int commnet 'on line user'
}
示例数据
对于一些问题的理解,光看表结构是不理解的,对于人类也是一样,如果能理解表内容的话。能极大的提高对问题的理解。
在提示词模版里加入对示例数据
id | dim_group_id | create_time | online_count |
---|---|---|---|
1 | 10 | 1723899555 | 10 |
1 | 11 | 1723899655 | 12 |
1 | 12 | 1723899655 | 22 |
给出示例答案
给出问题,再给出答案,相当于教一次大模型
比如,要看group_id是10的,现在的在线人数,有可能大模型不理解在线人数啥意思,会把online_count 加起来
然后给出正常的SQL,就能理解了,这样有其它的相关问题,它就能正常解答了
语法验证
可以通过一些开源代码对生成的SQL进行验证,是否有语法错误,如果有错误的话,可以把结果返回给大模型,让大模型重新生成语句。
外挂知识库
上面提示词模板那,有表结构,那表结构是从哪里来的呢。
知识库里的结构可以类似
XX 业务对应哪些表
可以先由大模型,挑选出合适表,然后再由代码去找到表结构,再继续组装提示词模板。当然也可以直接把表结构向量化到数据库里,直接从数据库检索。