Text2SQL 的 难点(或者说关键点)
Text2SQL 的 难点(或者说关键点)
1.如何让复杂的多表查询Sql拆解
在用户的日常提问中,约70% 的查询,一句SQL是没办法直接搞定的(除非直接一张大宽表),很多时候,我们需要将其分解为多个sql进行执行。
例如用户提问“查询上海地区前三的客户过去三年复购率”,实际需要拆解为:
1. 查询客户近三年订单明细
2. 计算每位客户总销售额
3. 筛选华东地区前三客户
4. 关联历史订单计算复购周期
做法:使用workflow,以及临时表
2.如何精准定位到表
这个部分应该是最难的一部分了(个人认为),如何让模型理解复杂的业务分析场景,如何增强模型对业务背景知识的理解,如何识别业务模型间的关联关系
例如,怎么让模型知道每个业务字段的含义?
怎么可以根据用户的问题匹配到识别的目标表,当数据库中表的数量过多(成百上千、甚至过完),怎么精准识别就是个问题?
做法:目前主流的是
对数据库建立DSL等知识库来去精准存储表结构的定义
建立大量的预置sql对(可以微调也可以外挂的方式),相当于给模型进行少样本学习,当包含相似问题,可以触发快速匹配。
定义表之间的关联关系,也是和上面的类似,方便模型快速关联定位(但是现实中(遇到过的),用户的数据中,并不会去进行额外的配置主外键,还要自己重新去梳理)
3.如何精准定位到字段
DDL等类似的方式来进行增强模型对字段的理解
行业黑话配置表
4. SQL查询自我更正和建立闭环学习系统
1.当针对用户的问题,如果大语言模型生成的SQL查询成功则会直接将结果进行返回,如果错误将设置重试次数,将错误信息等信息重新喂给大模型重新生成。
2.当系统上线后,将执行失败的sql存入待审核库,人工修正后再次反哺训练
3.统计高频语句和问表字段,动态调整知识库的优先级
4.记录每次sql生成参数,便于AB测试不同策略效果
5.简历多模型集成投票机制
总结
首先就是目前的速度问题、一般目前的正常生成速度大概在4~8秒左右,更不要说还要进行归因分析,图表生成等工作
其次做RAG或者表的结构构建,规范很重要!