Text2SQL 智能问答系统开发-预定义模板(二)

背景

在构建一个支持多轮对话的 Text2SQL 系统过程中,我完成了以下关键功能:

已完成

  1. 基础 Text2SQL 功能实现
    实现用户输入自然语言问题后,系统能够自动生成 SQL 并执行返回结果。
  2. 用户交互优化
    支持用户通过补充信息对查询进行调整,提升易用性。
  3. 模糊时间处理机制
    对“最近”“近期”等模糊时间关键词进行补全或引导,提升时间表达准确性。
  4. 预定义高频问题与回答
    对一些可预见的问题设置高质量回复,提高响应质量和效率。

后续优化

  1. 构建高质量知识库
    针对数据结构、字段定义、样例问题等,持续完善知识库,确保 SQL 生成的准确率。
  2. 引入持续学习机制
    通过用户反馈和历史数据,不断优化模型能力与表现。
  3. 高质量测试集
    1. 引入高质量的测试集来测试Text2SQL的效果与准确率
  4. 智能体节点,自动纠错
    1. 避免现在一次性生成SQL,多次生成纠错,提高质量

编排

工作流核心概览

  1. 检索预定义模板
  2. 选择预定义模板

提取用户选择的模板

提示词:

以下是之前提供给用户的选项: 会话变量 / template_choose_question ;用户选择了: 开始 / sys.query ;请从上面的选项中提取并输出用户选择对应的内容,不要输出任何额外解释。

生成完整的SQL

提示词:

你是一个专业的 SQL 助理。请根据以下两种情况之一进行处理:

情况一:提供的是完整 SQL 语句
如果你判断 SQL 已经是完整的、可直接执行的查询语句(例如包含完整的 SELECT、FROM、WHERE、ORDER BY 等),请直接原样输出它,不进行任何修改,不要输出\n字符。

情况二:提供的是SQL 模板(不完整)
如果 SQL 是一个模板或部分语句(如缺少 WHERE 条件、ORDER BY 等),请结合用户问题的描述,补全并输出完整 SQL 查询语句;
生成语句时,请仅使用模板中已有的字段、表结构,不要添加不合理字段;
输出格式为纯 SQL 语句,不加解释,不要输出\n字符。

输入内容:
SQL 输入(模板或完整 SQL): 检索SQL模板 / result ; 用户问题: 会话变量 / last_question ;请根据上述规则,输出最终 SQL 查询语句。

预定义模板

编号问题描述SQL 模板类型
Q1查询某城市的客户公司名称SELECT company_name, city FROM customers WHERE city = '{{city}}';SQL模板
Q2查询某一年的订单数量SELECT COUNT(*) FROM orders WHERE EXTRACT(YEAR FROM order_date) = {{year}};SQL模板
Q3查询某个客户的所有订单SELECT * FROM orders WHERE customer_id = '{{customer_id}}';SQL模板
Q4查询每个产品的总销售数量SELECT p.product_name, SUM(od.quantity) AS total_sold FROM products p JOIN order_details od ON p.product_id = od.product_id GROUP BY p.product_name ORDER BY total_sold DESC;完整SQL
Q5查询某库存阈值以下的产品SELECT product_name, units_in_stock FROM products WHERE units_in_stock < {{stock_threshold}};SQL模板
Q6查询某员工经手的订单SELECT * FROM orders WHERE employee_id = {{employee_id}};SQL模板
Q7查询某时间段内的订单数SELECT COUNT(*) FROM orders WHERE order_date BETWEEN '{{start_date}}' AND '{{end_date}}';SQL模板
Q8查询某类产品的销售明细SELECT p.product_name, od.quantity, od.unit_price FROM products p JOIN order_details od ON p.product_id = od.product_id JOIN categories c ON p.category_id = c.category_id WHERE c.category_name = '{{category_name}}';SQL模板
Q9查询某个供应商提供的产品SELECT product_name FROM products WHERE supplier_id = {{supplier_id}};SQL模板
Q10查询某年每个月的订单数SELECT EXTRACT(MONTH FROM order_date) AS month, COUNT(*) AS order_count FROM orders WHERE EXTRACT(YEAR FROM order_date) = {{year}} GROUP BY month ORDER BY month;SQL模板

第二轮对话选择

需要记录第一轮的提供选项,然后通过LLM判断用户是选择的哪个选项,然后进行模板匹配

第二轮对话根据模板生成SQL

Decimal结果报错

这边精确度不要求太高,需要在LLM节点中指出不让生成decimal结果。

解决方案:

  1. LLM指出解决
  2. 在SQLexcute节点中,选择使用markdown格式返回

偶尔抽风提取参数出错

检索测试:提示词提取参数

有一些参数提取没有输入示例,导致提取效果不佳,通过输入示例来提高成功率

换行符报错

后续生成的SQL带有换行符,需要在Prompt里面限制一下

测试报告

1. 查询某城市的客户公司名称

  • “Berlin有哪些客户公司?”(执行成功)√
  • “请列出在Berlin的客户公司名称。”(执行成功)√
  • “Berlin的客户都叫什么公司?”(执行成功)√

2. 查询某一年的订单数量

  • “2021 年一共下了多少订单?”(执行成功)√
  • “请统计 2022 年的订单总量。”(执行成功)√
  • “去年(2024)的订单数是多少?”(执行成功)√

3. 查询某个客户的所有订单

  • “客户HANAR的订单有哪些?”(执行成功)√
  • “帮我查一下 HANAR 公司所有订单。”(执行成功)√
  • “HANAR这个客户买过什么?”(执行成功)√

4. 查询每个产品的总销售数量

  • “每种产品卖了多少?”(执行成功)√
  • “按产品统计总销量。”(执行成功)√
  • “各个商品的销售总量是多少?”(执行成功)√

5. 查询某库存阈值以下的产品

  • “库存少于 50 的产品有哪些?”(执行成功)√
  • “哪些商品的库存量低于 10?”(执行成功)√
  • “请列出库存不足 100 的所有货品。”(执行成功)√

6. 查询某员工经手的订单

  • “员工4处理过哪些订单?”(执行成功)√
  • “员工 ID 为 4 的订单记录。”(执行成功)√
  • “员工4负责的订单有哪些?”(执行成功)√

7. 查询某时间段内的订单数

  • “2023 年 1 月到 3 月有多少订单?”(执行成功)√
  • “今年上半年下了多少单?”(执行成功)√
  • “5 月 1 日到 5 月 10 日的订单量。”(执行成功)√

8. 查询某类产品的销售明细

  • “Seafood的销售情况如何?”(执行成功)√
  • “Seafood类产品的详细销量。”(执行成功)√
  • “Seafood类别的销售记录。”(执行成功)√

9. 查询某个供应商提供的产品

  • “供应商 8 提供哪些商品?”(执行成功)√
  • “8供应商的供货明细。”(执行成功)√
  • “8供应商供应了什么产品?”(执行成功)√

10. 查询某年每个月的订单数

  • “2022 年每个月有多少订单?”(执行成功)√
  • “去年各月的订单统计。”(执行成功)√
  • “2023 年月度订单量。”(执行成功)√

11. 每位员工处理的订单数量

  • “每个员工处理了多少订单?”(执行成功)√
  • “按员工统计订单数量。”(执行成功)√
  • “员工订单量排行榜。”(执行成功)√

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917109.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript 异步编程:Promise 与 async/await 详解

一、Promise 1. 什么是 Promise&#xff1f; Promise 是 JavaScript 中用于处理异步操作的对象&#xff0c;它代表一个异步操作的最终完成&#xff08;或失败&#xff09;及其结果值。 2. Promise 的三种状态 ​​Pending&#xff08;待定&#xff09;​​&#xff1a;初始状态…

OS架构整理

OS架构整理引导启动部分bios bootloader区别启动流程&#xff08;x86 BIOS 启动&#xff09;&#xff1a;biosboot_loader3.切换进保护模式实模式的限制如何切换进保护模式加载kernel到内存地址1M加载内核映像文件elf一些基础知识链接脚本与代码数据段创建GDT表段页式内存管理显…

【WRF-Chem第二期】WRF-Chem有关 namelist 详解

目录namelist 选项&#xff1a;chem_opt 的选择其他化学相关的 namelist 选项气溶胶光学属性与输出边界与初始条件配置&#xff08;气体&#xff09;参考本博客详细介绍 WRF-Chem有关 namelist 选项。 namelist 选项&#xff1a;chem_opt 的选择 chem_opt 是什么&#xff1f;…

STM32-USART串口实现接收数据三种方法(1.根据\r\n标志符、2.空闲帧中断、3.根据定时器辅助接收)

本章概述思维导图&#xff1a;USART串口初始化配置串口初始化配置在&#xff08;STM32-USART串口初始化章节有详细教程配置&#xff09;&#xff0c;本章不做讲解直接代码示例&#xff0c;本章重点在于串口实现接收数据三种方法&#xff1b;配置USART1串口接收初始化函数步骤&a…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博评论数据可视化分析-点赞区间折线图实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解微博评论数据可视化分析-点赞区间折线图实现…

Unity_SRP Batcher

SRP Batcher 全面解析&#xff1a;原理、启用、优化与调试一、什么是 SRP Batcher&#xff1f;SRP Batcher 是 Unity Scriptable Render Pipeline&#xff08;URP、HDRP 或自定义 SRP&#xff09; 专属的 CPU 渲染性能优化技术&#xff0c;核心目标是 减少材质切换时的 CPU 开销…

详解Vite 配置中的代理功能

在前端开发过程中&#xff0c;你可能经常会遇到一个头疼的问题&#xff1a;当你在本地启动的前端项目中调用后端接口时&#xff0c;浏览器控制台会报出类似 “Access to fetch at ‘http://xxx’ from origin ‘http://localhost:3000’ has been blocked by CORS policy” 的错…

理解梯度在神经网络中的应用

梯度&#xff08;Gradient&#xff09;是微积分中的一个重要概念&#xff0c;广泛应用于机器学习和深度学习中&#xff0c;尤其是在神经网络的训练过程中。下面将从梯度的基本概念、其在神经网络中的应用两个方面进行详细介绍。一、梯度的基本概念 1.1 什么是梯度&#xff1f; …

WPF,按钮透明背景实现MouseEnter

在帮手程序&#xff08;assister.exe&#xff09;中&#xff0c;可以点击录制按钮&#xff0c;实现录制用户操作直接生成操作列表。而在弹出录制按钮的悬浮窗中&#xff0c;需要能够拖动录制按钮放置在任意的位置&#xff0c;以免阻挡正常的窗口。具体功能是&#xff0c;当鼠标…

【抄袭】思科交换机DAI(动态ARP监控)配置测试

一.概述 1.DAI作用 ①.使用DAI&#xff0c;管理员可以指定交换机的端口为信任和非信任端口&#xff1a; 信任端口可以转发任何ARP信息 非信任端口的ARP消息要进行ARP检测验证 ②.交换机执行如下的ARP验证&#xff1a; 静态ARP监控&#xff1a;为一个静态的IP地址配置一个静态AR…

在嵌入式系统或 STM32 平台中常见的外设芯片和接口

在嵌入式系统或 STM32 平台中常见的 外设芯片 或 模块名称&#xff0c;包括&#xff1a; &#x1f4fa; 显示驱动&#xff08;如 ST7735、OTM8009A、NT35510&#xff09;&#x1f4f7; 摄像头模组&#xff08;如 OV5640、OV9655、S5K5CAG&#xff09;&#x1f4be; Flash 存储器…

AI 类型的 IDE

指集成了 AI 辅助编程能力的集成开发环境 一、代码辅助生成 ✅ 自动补全&#xff08;更智能&#xff09; 比传统 IDE 更智能&#xff0c;理解上下文&#xff0c;生成整个函数/模块 示例&#xff1a;根据函数名 calculateTax 自动生成税务计算逻辑 ✅ 函数 / 类自动生成 给…

JP3-3-MyClub后台后端(一)

Java道经 - 项目 - MyClub - 后台后端&#xff08;一&#xff09; 传送门&#xff1a;JP3-1-MyClub项目简介 传送门&#xff1a;JP3-2-MyClub公共服务 传送门&#xff1a;JP3-3-MyClub后台后端&#xff08;一&#xff09; 传送门&#xff1a;JP3-3-MyClub后台后端&#xff08;…

架构实战——互联网架构模板(“存储层”技术)

目录 一、SQL 二、NoSQL 三、小文件存储 四、大文件存储 本文来源:极客时间vip课程笔记 一、SQL SQL 即我们通常所说的关系数据。前几年 NoSQL 火了一阵子,很多人都理解为 NoSQL 是完全抛弃关系数据,全部采用非关系型数据。但经过几年的试验后,大家发现关系数据不可能完全被…

CentOS7.9在线部署Dify

一、CentOS7.9安装dify 二、检查是否安装dcoker docker --version2.1下载后将安装包上传至服务器对应文件夹下,我选在放在了 /root文件夹下 cd /root2.2 上传至服务器 cd /root #对应目录下tar -xvf docker-26.1.4.tgz # 解压安装包:chmod 755 -R docker # 赋予可执…

深入浅出C语言指针:从数组到函数指针的进阶之路(中)

指针是C语言的灵魂&#xff0c;也是初学者最头疼的知识点。它像一把锋利的刀&#xff0c;用得好能大幅提升代码效率&#xff0c;用不好则会让程序漏洞百出。今天这篇文章&#xff0c;我们从数组与指针的基础关系讲起&#xff0c;一步步揭开指针进阶类型的神秘面纱&#xff0c;最…

java web Cookie处理

java web 设置cookie更改启动端口// Directory tree (5 levels) ├── src\ │ ├── a.txt │ └── com\ │ └── zhang\ │ └── ServletContext\ │ ├── cookie\ │ └── servletContext.java └── web\├─…

机器学习—线性回归

一线性回归线性回归是利用数理统计中回归分析&#xff0c;来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。相关关系&#xff1a;包含因果关系和平行关系因果关系&#xff1a;回归分析【原因引起结果&#xff0c;需要明确自变量和因变量】平行关系&#xff1…

Spring Boot Admin 监控模块笔记-实现全链路追踪

一、概述Spring Boot Admin&#xff08;SBA&#xff09;是一个用于监控和管理 Spring Boot 应用程序的工具。它提供了一个 Web 界面&#xff0c;可以集中管理多个 Spring Boot 应用程序的健康状态、指标、日志、配置等信息。通过 SBA&#xff0c;你可以轻松地监控和管理你的微服…

容器化与Docker核心原理

目录 专栏介绍 作者与平台 您将学到什么&#xff1f; 学习特色 容器化与Docker核心原理 引言&#xff1a;为什么容器化成为云计算时代的基石&#xff1f; 容器化技术全景与Docker核心原理&#xff1a;从概念到实践 文章摘要 1. 引言&#xff1a;为什么容器化成为云计算…