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
英文地址,請注明出處:http://en.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;為什么容器化成為云計算…