项目背景
面向教务、运营等非技术人员频繁的数据查询需求,传统方式依赖人工写 SQL 或提数排期,单次取数平均耗时约 30 分钟。为此独立设计并落地一套 NL2SQL(自然语言转 SQL)智能问数系统,让业务人员用自然语言直接提问,系统自动理解意图、生成安全的 MySQL 查询并返回结果,将取数链路从"提需求—排期—人工写SQL"压缩为一次对话。
技术栈:Python + LangChain + 智谱 GLM + MySQL + Few-Shot 提示词工程 + 动态 Schema 检索 + 正则与 AST 双重安全校验
核心工作与实现
自然语言到 SQL 生成链路:基于 LangChain 编排"意图理解 → Schema 匹配 → SQL 生成 → 执行返回"全流程,调用智谱 GLM 大模型完成语义解析。针对大模型直接生成 SQL 容易字段张冠李戴、语法跑偏的问题,设计 Few-Shot 提示词工程——按查询类型构造高质量示例样本注入上下文,引导模型对齐表结构与 SQL 方言,SQL 生成准确率达到 82% 以上。
动态 Schema 检索知识库:随业务表与字段增多,一次性把全部表结构塞进 Prompt 既浪费 Token 又加剧字段混淆。为此构建 Schema 检索层,根据用户问题动态召回相关表、字段及其注释说明,只把最相关的元数据注入上下文。上线后字段混淆类错误显著下降,SQL 生成准确率在此基础上再提升约 15 个百分点。
双重安全校验机制:问数系统直连生产库,防误删与防注入是底线。设计正则 + AST 双重校验:正则层快速拦截 DROP / DELETE / UPDATE / TRUNCATE 等危险关键词;AST 层将生成的 SQL 解析为抽象语法树,从语法结构上验证语句只读、无多语句拼接、无越权访问,两道关卡共同保证系统"只读不改"。
服务化交付:通过接口封装将问数能力对接前端与业务系统,支撑教务人员在线自助查询。
项目成果:SQL 生成准确率 82% 以上,动态 Schema 检索再提升约 15 个百分点,危险操作经双重校验零放行,教务人员单次查数从约 30 分钟压缩至 8 秒内,大幅降低取数沟通与排期成本。
需求方专属客服,免费梳理匹配
添加客服微信,免费为您安排与该工程师直接沟通
长按二维码添加客服微信
如当前档期不合,也可免费为您推荐相似案例作者