【第6篇】引入高配大模型
返回目录
【第6篇】引入高配大模型
比赛相关介绍参见 《2025年羊城工匠杯nl2sql比赛介绍》。
开发环境配置参见《nl2sql2025开发环境配置》
本文介绍向量、关键字、重排序等方式匹配到问题对应的库表后,构造提示词使用qwen3-235B高配大模型,生成自然语言问题对应的SQL脚本。
一、如何触发高配大模型生成SQL脚本
src/query/get_sql_answer.py 是构造提示词的关键程序,其中触发高配大模型的逻辑在 Line 36 :if table_define is None and llm==“high”:
如果通过问题经过模板化处理后,无法匹配到相关库表信息,并且使用高配大模型参数调用(llm=high),那么就调用 query_ddl(question) 提取问题对应的库表ddl信息
首先,我们模拟这是一个新问题,无法正常命中到问题模板,手工删除tmp_question2sql.json文件 Line 4:“各受理渠道工单所占的百分比分别是多少?”
$ python ./src/query/get_sql_answer.py --query_text "请问2024年各受理渠道工单所占的百分比分别是多少?" --debug --llm high
使用上面命令行运行程序,如下图,可以看到高配大模型在没有案例、仅通过库表的DDL定义,推理出自然语言问题对应的SQL脚本。
经过评估程序测算,对于逻辑较为简答的level1和level2级问题,高配大模型的准确率可以达到70%以上。
二、寻找问题对应库表的挑战
使用高配对话大模型生成SQL脚本最大的挑战是如何根据自然语言问题,找到对应的库表。
相关程序逻辑:
1. src/query/query_ddl.py: 调用query_vector.py获得的topK 记录,再调用query_rerank.py,返回table_define 给 get_sql_answer.py
2. src/query/query_vector.py: 根据问题question,调用嵌入模型,确定topK最可能的库表集合
3. src/query/hit_keywords.py: 根据手工维护的 data/keywords.txt 关键字表,返回问题与库表业务关键字重叠最多的记录
4. src/query/query_rerank.py: 根据query_vector.py返回的filtered_docs调用重排序模型,确定唯一的一张库表
三、提示词优化的挑战
相关程序逻辑:
1. src/utils.py: 构造提示词的模板程序
这一块逻辑比较简单,把自然问题、库表结构、扩展提示词和案例提示词拼接起来,后续提供给大模型使用。
2. src/query/build_extra_hint.py: 特殊问题question需要提示大模型的约束或者案例说明
这部分代码写得不优雅,逻辑上直接通过问题关键字,增加提示词,如果重构,可以考虑新增 data/hint.txt文件,集中管理。
【本文结束】