GLM-LAW比赛代码框架说明
核心思想
将用户输入的问题,拆分为多个最小子问题,将每一个最小子问题转换为一个sql语句并进行查询,最后将所有的查询结果进行合并,得到最终的结果。
主流程: workflow.py
for q_json in tqdm(q_json_list):
APIRecord.clear_api_record() # 清空本地API调用记录缓存
question = q_json['question']
qs_fixed = QuestionFixed(question)
qs_fixed.fix_question() # question预处理:去除重复字等问题
qs = Question(qs_fixed.fixed_question)
qs.intent_classification() # 意图分类
if qs.intent != '查询':
continue
qs.choose_tables() # 与大模型交互,选取可能涉及到的数据库表
qs.divide_question() # 与大模型交互,将问题划分为多个子问题
qs.delete_all_db_records() # 清空本地数据库缓存
qs.generate_sub_sqls() # 不同子问题,分别生成结果
qs.generate_last_result() # 合并所有子问题及结果,针对初始问题,总结生成答案
核心流程SubQuestion.py:生成当前子问题结果: generatesubsqls
# 初始化子问题对象
sub_question = SubQuestion(curr_sub_question, self.tables, pre_sub_question_list, pre_sub_result_list)
sub_question.parent = self
sub_question.generate_sub_sql() # 生成子问题的sql查询语句
sub_question.get_api_data() # 将对应子问题的sql查询语句做一个无损转换,得到对应的api请求列表,并调用对应的api获取数据存储在本地数据库
sub_question.transform_sub_sql() # 针对一些特殊情况,转换修正sql
sub_question.execute_sub_sql() # 执行子问题的sql查询,得到当前子问题的查询结果
评论