NL2SQL架构设计

比赛相关介绍参见 《2025年羊城工匠杯nl2sql比赛介绍》

开发环境配置参见《nl2sql2025开发环境配置》

本文介绍参赛项目的架构设计内容。

打开start.sh文件,功能包括数据准备和批量执行

在这里插入图片描述

数据准备阶段流程图

数据预处理阶段
(build_vector.sh)
Excel文件->16个建表语句(excel2sql.py)
官方发布和人工标记samples集
建立问题和库表关系(question2table.py)
建立模板问题与SQL关系(template2sql.py)
库表定义附加上问题集信息(sql_markdown.py)
调用嵌入模型生成多维向量
(sqls_embedding.py)
向量化库表及问题集
(vector2chroma.py)

主要源代码介绍:

src/vector/excel2sql.py : excel文件 data/表结构.xlsx 转为包含 sqlite建表ddl 的json文件,写入 ./sql_output 文件夹
src/vector/question2table.py :建立库表与问题模板库关联,生成tmp_question2sql.json文件

在这里插入图片描述

src/vector/template2sql.py :建立库表与问题模板库关联,生成tmp_question2sql.json文件

在这里插入图片描述

src/vector/sql_markdown.py :对./sql_output 文件夹打问题模板标记

在这里插入图片描述

src/vector/sqls_embedding.py :调用嵌入模型,生成tmp_embedding_waiting.txt 待向量化的文件
src/vector/vector2chroma.py :读取tmp_embedding_waiting.txt 写入chroma向量数据库

批量NL2SQL执行流程图

src/multi_extraction.py
读取 data/questions.jsonl
逐行处理每个问题
src/query/get_sql_answer.py get_sql_answer
src/query/query_table.py
query_table
可以找到对应的 table_name?
src/query/query_sql.py
query_sql
返回 table_define
src/query/query_example.py
query_example
返回example_hint
src/query/query_ddl.py
query_ddl
返回 table_define
src/query/query_vector.py
&query_reranker.py
&hit_keywords.py
根据问题关键字增加提示词
src/build_extra_hint.py
build_extra_hint
返回 extra_hint
src/utils.py
create_sql_template
生成 prompt
调用大模型接口 llm返回生成的 SQL
src/multi_extraction.py
写入 result/part* 文件

主要源代码介绍:

src/multi_extraction.py : 主程序入口,支持多线程启动,逐行读取 data/questions.jsonl,生成result/part[序号]_results.jsonl
src/query/get_sql_answer.py : 根据Qustion得到匹配度最高库表
src/query/query_sql.py : 根据table_name找到sql_output下面对应的建表语句
src/query/query_table.py : 根据question找到到tmp_quesiton2.sql.json 找到对应的table
src/query/build_extra_hint.py : 根据Question生成特殊提示词
src/query/extract_tables.py : 提取SQL里面的库表
src/query/hit_keywords.py : 根据问题与向量搜索问题集的关键字匹配数组
src/query/query_reranker.py : question和documents的调用reranker模型排序
src/query/query_vector.py : 根据text查找向量库中相似度TOP5记录 (需要用到embedding模型)
src/query/data_reranker.py : 根据tmp_embedding.txt的 query和documents 找到匹配度最高的段落(需要用到reranker模型)

【本文结束】

Logo

更多推荐