将用户输入的问题,拆分为多个最小子问题,将每一个最小子问题转换为一个sql语句并进行查询,最后将所有的查询结果进行合并,得到最终的结果。GLM-LAW比赛代码框架说明
核心思想
主流程: workflow.py
for q_jso i tqdm(q_jso_list):
APIRecord.clear_api_record() # 清空本地API调用记录缓存
questio = q_jso['questio']
qs_fixed = QuestioFixed(questio)
qs_fixed.fix_questio() # questio预处理:去除重复字等问题
qs = Questio(qs_fixed.fixed_questio)
qs.itet_classificatio() # 意图分类
if qs.itet != '查询':
cotiue
qs.choose_tables() # 与大模型交互,选取可能涉及到的数据库表
qs.divide_questio() # 与大模型交互,将问题划分为多个子问题
qs.delete_all_db_records() # 清空本地数据库缓存
qs.geerate_sub_sqls() # 不同子问题,分别生成结果
qs.geerate_last_result() # 合并所有子问题及结果,针对初始问题,总结生成答案
核心流程SubQuestio.py:生成当前子问题结果: geeratesubsqls
# 初始化子问题对象
sub_questio = SubQuestio(curr_sub_questio, self.tables, pre_sub_questio_list, pre_sub_result_list)
sub_questio.paret = self
sub_questio.geerate_sub_sql() # 生成子问题的sql查询语句
sub_questio.get_api_data() # 将对应子问题的sql查询语句做一个无损转换,得到对应的api请求列表,并调用对应的api获取数据存储在本地数据库
sub_questio.trasform_sub_sql() # 针对一些特殊情况,转换修正sql
sub_questio.execute_sub_sql() # 执行子问题的sql查询,得到当前子问题的查询结果
点击空白处退出提示
评论