搭建一个text to SQL的AI智能体
备注
本来我最开始想的是借助RAG知识库来搞这个,但是我发现,向量模型的匹配真的是难顶.几乎不可用.也应该是我经验不足\材料没有准备好,最后无奈,我直接通过dify的流程来实现 text2SQL.
环境准备
dify:参考官方部署就行
模型运行框架:llama.cpp
Embedding模型\Reranker模型:我使用的是qwen全家桶,在gguf上面下载就行,但是需要注意Reranker模型,有一个是有问题的,它不会给评分,建议从这里下载:https://huggingface.co/Voodisss/Qwen3-Reranker-8B-GGUF-llama_cpp
LLM模型:qwen3.6 35B 64K上下文.
最后就是关于数据库表和业务的说明准备了.
数据库表和业务的说明
这个是很重要的.这个不做好,效果很差劲.
首先,text2sql,要根据业务来,不能说把整个数据库表都纳入进去,一来检索效果不好,二来噪音也很大,三来上下文会撑爆.
我是根据业务,把相关的表说明\字段说明\字段连表信息各自写成一个json文件:

{
"field_key": "r_device_monitor.tower_id",
"field_name": "tower_id",
"table_name": "r_device_monitor",
"table_comment": "物理装置表(伪),一对多的关系,仅使用此表无法正确完成统计",
"field_comment": "被监测对象id",
"data_type": "VARCHAR",
"is_unique": false,
"value_comment": [],
"connection": [{
"target_table": "r_device_tower",
"target_field": "obj_code",
"additional_conditions": null
}]
},
{
"field_key": "r_device_monitor.line_device_type",
"field_name": "line_device_type",
"table_name": "r_device_monitor",
"table_comment": "物理装置表(伪),一对多的关系,仅使用此表无法正确完成统计",
"field_comment": "被监测对象的台账类型",
"data_type": "VARCHAR",
"is_unique": false,
"value_comment": {"0301":"主变压器","0303":"所用变","0305":"断路器","0306":"隔离开关","0311":"母线","0312":"电抗器","0313":"电流互感器","0314":"电压互感器","0316":"电力电容器","0318":"避雷器","0321":"组合电器","0322":"开关柜","0328":"套管","101":"自动功率曲线系统","102":"交流场监控主机","103":"杆塔","105":"极阀控制系统","106":"极端阀组水冷控制主机系统","107":"极端阀组外水冷控制单元","108":"站用电控制主机","2":"保护装置系统","201":"极极保护系统","3":"直流控制保护系统","305":"蓄电池","309":"换流变压器","341":"控制箱","346":"气室","601":"电缆头","602":"智能井盖","603":"接地箱","604":"接地线","701":"气象站","901":"其它"},
"connection": [{
"target_table": "c_dictionary",
"target_field": "dic_code",
"additional_conditions": "c_dictionary.dict_flag='tzlx'"
}]
},
这样,写表的每一个重要字段,如果表的列数小,可以写全,如果是个大宽表,那么就写和业务最相关的字段信息就行.
然后还有业务约束和查询示例;
业务约束就是指,业务上常用的黑话\俗语\条件等,比如:
业务上的装置台账指的是逻辑装置表和物理装置表连表之后的结果,从不单独指物理装置表或者逻辑装置表
装置台账是由r_device_monitor表和r_device_monitor_point表共同组成的,绝非单个表可以支撑.
没有明确说明所需要的装置投运状态时,就只统计在运状态的装置:
配网:指电压等级在35kv及以下的站线
主网:指电压等级大于35kV的站线
输电:指监测类型以01开头的装置
变电:指监测类型以02开头的但是不以027开头的装置
直流:指监测类型以027开头的装置
但是变电在我们业务查询上一般是模糊的,查询变电的含义往往是同时包含变电\直流
查询xx地市时候,没有明确说是运维地市还是资产地市时,一般都是指运维地市.
然后就是查询示例,这个好理解嘛.
搭建流程


有些臃肿了,但是能用:


流程细节


浙公网安备 33010602011771号