0 背景
Text2SQL智能報表方案旨在通過自然語言處理(NLP)技術,使用戶能夠以自然語言的形式提出問題,并自動生成相應的SQL查詢,從而獲取所需的數據報表,用戶可根據得到結果展示分析從而為結論提供支撐,其次可通過對結果數據與用戶問題拆解然后對異常可能存在的問題提供解析。
1 技術框架
智能報表整體架構分為5層,分別為資源配置層、數據存儲模塊、LLM、智能體開發框架、功能應用。我們要做的就是如何選型與適配各個層之間的交互,數據與大模型本質決定了功能的天花板。
-
機器算力: 大模型部署需要足量的內存(RAM)與顯存(GPU),比如部署7B(FP32/4Byter)可能需要7G左右內存,如果要進行微調則需要GPU的加持(如果部署在GPU上推理速度會更快);
-
數據存儲
- 知識庫(外掛RAG):包含用戶需要查詢的數據庫表詳細的描述信息(包含庫、表、詳細字段);智能體系統描述信息,比如我們系統可能含有一個Text2SQL智能體、數據分析智能體,那么需要一個具體的系統描述信息(角色定位、工具信息描述,輸出限制等等);
- 業務數據庫:為數據分析等場景提供支持;
- 向量數據庫: 對知識庫(表結構)向量化,方便快速檢索;
-
大模型:
-
從使用方法可分為 :1 API接口調用(前期資源不到位情況可暫時使用API接口調時)2 數據屬于保密資產,需要選擇本地部署的方式解決泄漏問題;? ? ? ?
-
從功能可分為: 1 大語言模型; 2 詞向量嵌入模型;
-
-
開發框架應用:提供了一系列工具來簡化大模型業務流程,快速開發迭代;
-
服務產品:可按照實現模塊進行分期實現,可優先實現Text2SQl 、報表圖示、報告生成、智能客服等等;
1.1 Text2SQL
功能:Text-to-SQL(或者Text2SQL,text2Code的子任務),顧名思義就是把文本轉化為SQL語言,更學術一點的定義是:把數據庫領域下的自然語言(Natural Language,NL)問題,轉化為在關系型數據庫中可以執行的結構化查詢語言(Structured Query Language,SQL),因此Text-to-SQL也可以被簡寫為NL2SQL。· 輸入:自然語言問題,比如“查詢表t_user的相關信息,結果按id降序排序,只保留前10個數據 ”· 輸出:SQL,比如“SELECT * FROM t_user ORDER BY id DESC LIMIT 10”
優點: Text2SQL 應用主要是幫助用戶減少開發時間,降低開發成本。“打破人與結構化數據之間的壁壘”,即普通用戶可以通過自然語言描述完成復雜數據庫的查詢工作,得到想要的結果。
目標:自然語言查詢語句 -> SQL 結構化查詢語言;
已知:數據庫中的有限表,測試集合《text_question,SQL_answer,My_sql_result》
解決方法: PE + LLM
案例1 表少、簡單
一個最基礎、最直觀的提示工程方案是,輸入數據庫的 Database Schema,即數據庫的基本結構(包括表名、列名、主外鍵關系等等),以及用戶的問題,提示模型輸入該問題對應的 SQL 語句。這種提示范式可以很方便讓 LLM 適應各種不同的數據庫與對應的用戶查詢。近期的一些研究表明,(提示詞越精確)在輸入中,額外增加表和列的文本描述、小樣本示例(即 few-shot Question-SQL pairs)、一定格式描述的數據樣本(即數據庫中每一個表的隨機幾行數據樣本)等信息有助于 LLM 更好地理解數據庫結構,從而生成更準確的 SQL【比如:RSL-SQL】。
-
輸入問題提示詞以及相關的表結構信息,讓大模型產出結果,如下:(通義千問)
-
解決方法2:PE + RAG / KAG +LLM
案例2 :真實的業務場景面對的是多庫、多表、多字段,并且存在表字段描述信息存在語義,在提示中包含完整的數據庫信息會導致輸入 token 過多,計算成本增加,更重要的是會引入大量噪音。在生成 SQL 之前,用一些方法提前找到與用戶問題相關的表和列,然后,輸入給大模型的是被顯著簡化后的 Database Schema,從而達到減小輸入噪音并增強 SQL 生成性能的目的【RAG】。
-
首先是如何得到詳細描述數據庫表的信息,這一個需要具體業務部門(用戶)有一個深入的理解;
-
過濾掉與用戶問題無關的數據表描述信息(簡單、詳細、過濾不必要冗余信息);
解決方法3: PE+RAG+SFT+LLM
案例3:存在大量的表、并且已經收集到大量的訓練數據;
-
基于積累的訓練數據進行微調,得到特定領域的大模型(按照業務、主題劃分);
注意:
-
1 記錄用戶的提問日志,分析用戶的行為信息,為下次用戶使用提供參考;
-
2 模型微調數據收集:是否正確,如果正確直接放到標注數據中,不正確可以把查詢的語句寫入;
-
3 如果大模型能力有限,可按照業務或者主題進行切分,增加模型的抗干擾能力;
1.2 大模型
1.2.1 語言大模型(預訓練數據庫)
目前,基于 LLM 的 Text-to-SQL 主要分為兩類技術路線,一類是對一些開源的參數較小的 LLM(如 Deepseek-7B) 進行微調,另一類則是基于閉源的參數較大的 LLM (如 GPT-4、GPT-4o)的提示工程方法。
精度/通用性與模型大小是一個矛盾點,高精度意味著需要跟多的參數(記住所有信息)。如何落地優選平衡二者之間的關系,可以從下面出發:
- 預算足夠(有錢),直接使用開源的大模型,通用性能廣、理解用戶的需求能力更強;
- 預算不足,那就做垂直領域的大模型,基于非房/房訂單業務數據(SQL對話數據)對大模型進行微調,數據質量直接決定模型的上線,并且數據的收集需要時間。其次可以通過提示詞工程等引導大模型回答;
1.2.2 開源大模型選擇
text2SQL : 目標:具備coder、function calling 能力;
本地部署會占用大量內存,下面是目前幾個開源大模型。當然如果需要再進行微調,那么需要更多的內存,比如選擇Adam優化器,需要額外3倍的模型大小內存,共計4倍(比如deepSeek V2,需要16 * 4 = 64G)
常見底座模型概覽:(深度求索、智譜、零壹萬物、阿里)
大模型下載地址:
-
HuggingFace: Hugging Face – The AI community building the future.
-
魔塔社區: 魔搭社區
-
Ollama: 統一管理部署
1.2.3 嵌入大模型
目標:為了RAG提供理論模型支持(多維度1024,英文+中文),提前找到與用戶問題相關的表和列;
BAAI/bge-large-zh-v1.5
未來主要技術工作內容:
-
提示詞工程:新表信息完善、few-shot庫構建+ 召回/COT技術;
-
RAG:詞向量嵌入,表召回、列召回、粗排到精排;
-
大模型微調;
-
SQL語法修正,多路執行結果投票;
1.3 數據分析與報表
-
智能分析:提供數據理解能力、數據趨勢解析等等,可借助業務文檔提出切合業務的問題分解,支持歸因、TopN、維度下鉆、時序預測等等算法,以及動態的操作推薦;
-
智能圖示:根據SQL查詢結果(或者代碼)提供給前端按照具體圖例展示;
-
動態預警:借助大模型的動態趨勢預警能力,實現數據自動找人,將業務數據的異常波動主動推送到相關人,幫助業務部門及時發現問題并采取有效措施。
-
智能洞察:具備時序異常檢測、因果關聯、波動歸因等主動洞察能力,自動的發現有用結論。
1.4 明確目標
-
用戶定位;
-
數據源以及權限定位:所有庫表是否有使用限制等條件,需要業務完善相關表信息
功能1 為用戶提供參考SQL語句;
功能2 執行SQL代碼;
功能3 為前端提供圖(圖片),還是為前端提供具體執行代碼等等;
2 成熟的產品
名稱 | 簡介 | 特性 | 文章來源 | Star | 缺點 |
---|---|---|---|---|---|
Chat2DB (阿里開源 Chat2DB :一款多數據庫客戶端工具!) | Chat2DB 是一個功能強大的 SQL 客戶端和數據分析工具,支持對話式數據分析,能夠輔助生成 SQL。它提供網頁和客戶端兩種使用方式,支持幾乎所有流行的數據庫,并且開源了7B的SQL模型。 | SQL生成、智能報告、數據探索 | https://www.zhihu.com/search?type=content&q=%E9%98%BF%E9%87%8C%E5%BC%80%E6%BA%90%20Chat2DB%20 github: GitHub - CodePhiliaX/Chat2DB: 🔥🔥🔥AI-driven database tool and SQL client, The hottest GUI client, supporting MySQL, Oracle, PostgreSQL, DB2, SQL Server, DB2, SQLite, H2, ClickHouse, and more. | GitHub Star 18K | 1 目前 Chat2DB 似乎只支持對單個表格的query。如果想要對多個表格進行操作,需要自己寫 prompt。 2 Chat2DB 的使用體驗在很大程度上依賴于 LLM 的能力; |
SQL Chat | SQL Chat 是一個基于聊天的 SQL 客戶端,使用自然語言與數據庫進行交互,支持對數據庫的查詢、修改、新增和刪除等操作。它目前支持MySQL,Postgres,SQL Server和TiDB無服務器。 | 自然語言交互、數據庫增刪改查 | 9個優秀的Text2Sql(Chat2Sql)開源項目、資源-CSDN博客 github: GitHub - sqlchat/sqlchat: Chat-based SQL Client and Editor for the next decade | GitHub Star 4K | |
VannaAI | Vanna 是麻省理工學院授權的開源 Python RAG(檢索增強生成)框架,用于 SQL 生成和相關功能。 | 只需兩個步驟——在數據上訓練 RAG 模型,然后提出問題,這些問題將返回 SQL 查詢,這些查詢可以設置為在數據庫上自動運行。 | github: GitHub - vanna-ai/vanna: 🤖 Chat with your SQL database 📊. Accurate Text-to-SQL Generation via LLMs using RAG 🔄. | GitHub Star 7.7K | 1 Vanna 需要事先知道數據庫的結構信息,包括表名、字段名等。這意味著我們需要先將數據庫結構信息導入到 Vanna 中,才能正確地生成 SQL 查詢語句。 |
Dataherald | Dataherald 是一個自然語言到 SQL 引擎,專為企業級問答構建。它允許您從數據庫中設置一個 API,用簡單的對話進行問答。Dataherald 包含四大模塊:引擎、管理控制臺、企業后端和 Slackbot。 | 模塊化設計、核心模塊可替換、文本到 SQL 轉換、評估模塊、易于設置和使用主要數據倉庫、主動學習 | GitHub - Dataherald/dataherald: Interact with your SQL database, Natural Language to SQL using LLMs | GitHub Star 3.1K | |
Supersonic | SuperSonic 融合了 Chat BI(基于 LLM)和 Headless BI(基于語義層),打造新一代 BI 平臺。通過 SuperSonic 的問答對話界面,用戶能夠使用自然語言查詢數據,系統會選擇合適的可視化圖表呈現結果。 | 內置 Chat BI 界面以便業務用戶輸入數據查詢、內置 Headless BI 界面以便分析工程師構建語義模型、內置基于規則的語義解析器、支持文本輸入聯想、多輪對話、查詢后問題推薦等高級特征、支持權限控制 | GitHub - tencentmusic/supersonic: SuperSonic is the next-generation AI+BI platform that unifies Chat BI (powered by LLM) and Headless BI (powered by semantic layer) paradigms. | GitHub Star 2.6K | |
MaxKB | MaxKB = Max Knowledge Base,是一款基于大語言模型和 RAG 的開源知識庫問答系統,廣泛應用于智能客服、企業內部知識庫、學術研究與教育等場景。 下載安裝 | 支持對接各種大語言模型,包括本地私有大模型(包括Llama 3 / Qwen 2等)、國內公共大模型(包括通義千問、騰訊混元、字節豆包、智譜 AI、百度千帆、Kimi、DeepSeek等),以及國外公共大模型(包括OpenAl、Azure OpenAI、Gemini等); |
看好MaxKB!
參考:RSL-SQL. Robust Schema Linking in Text-to-SQL Generation
論文標題:
RSL-SQL: Robust Schema Linking in Text-to-SQL Generation
論文鏈接:
https://arxiv.org/abs/2411.00073
代碼鏈接:
https://github.com/Laqcce-cao/RSL-SQL