讓 AI 更懂資料庫:從 Text-to-SQL 到 Function Calling
QUERYING DATABASES WITH FUNCTION CALLING 閱讀心得
(上圖出自於原始論文: [2502.00032] Querying Databases with Function Calling)
你是否曾幻想過,能用日常對話的方式與資料庫溝通,而不必面對那些讓人頭痛的 JOIN 與 GROUP BY?現實中,資料庫結構千變萬化,SQL 的各種方言更讓不熟悉的人望而卻步。然而,最近一份名為「Querying Databases with Function Calling」的報告,提出了一個突破性的構想:為什麼不在大型語言模型(LLM)與資料庫之間加上一層高階且可客製化的函數介面,讓使用者只要以 JSON 格式傳入查詢條件,便能輕鬆取得想要的資料?
從以往依賴 Text-to-SQL 直接將自然語言轉換成 SQL 指令,到如今將複雜 SQL 隱藏在後台,只暴露一個充滿彈性的「查資料」函數,這個新方法就像是 LLM 版的 Stored Procedure。過去,我們在資料庫中封裝 Stored Procedure,以簡化重複性的查詢操作;現在則是預先定義好查詢所需的變數,例如集合名稱、數值篩選方式、文字條件等。使用者無需了解每個 SQL 細節,只要填入對應的 JSON 參數,即能讓後台組合出正確的指令。這種設計不僅令模型學習負擔大幅降低,同時在資料庫結構更新時,只需調整介面定義,而無需讓 LLM 完全「重新學習」新語法。
(上圖出自於原始論文: [2502.00032] Querying Databases with Function Calling)
舉個實際的例子來說明這個概念:想像你在經營一個美食比價網站,需查詢價格低於 20 美元且提供素食選項的菜色。傳統的做法可能要寫出如下的 SQL 指令:
SELECT COUNT(*) FROM Menus WHERE price < 20 AND category = 'Vegan';
這樣做一來,不僅要確保語法正確、欄位名稱無誤,同時還要應對不同資料庫可能出現的語法限制。但借助函數調用的方法,你只需預先定義好查詢函數,並以 JSON 格式描述查詢需求,如下:
{
"collection_name": "Menus",
"integer_property_filter": { "property_name": "price", "operator": "<", "value": 20 },
"text_property_filter": { "property_name": "category", "operator": "=", "value": "Vegan" }
}
後端便可以根據這份簡單明瞭的參數,轉換成適合當前資料庫語法的查詢指令。這樣不僅讓 LLM 不必具備全部 SQL 知識,也大大降低因資料庫方言差異所導致錯誤的可能性。
當然,這套方法在帶來便利性的同時,也面臨某些挑戰,譬如文本篩選的問題。對於數值或布林值的條件篩選較容易處理,但若遇上需要「部分匹配」或「全文檢索」的文本條件,如搜尋含有 “Vegan-friendly” 這類字串時,模型就必須先分辨該欄位是結構化還是非結構化的。否則,可能將「Vegan-friendly」視作必須完全匹配的字串,從而漏掉實際符合查詢意圖的資料。為了提高查詢準確率,報告中也提出了幾個具體建議:在 API 或 Prompt 中強調 Schema 感知、設計自動切換匹配模式(從精確匹配到 LIKE 或進一步的全文搜索),以及利用查詢後的反饋機制提醒使用者調整查詢方式。
編按:
下方 分層式查詢 部分,其實是當初使用 ChatGPT 來做深入理解時,ChatGPT 給予的建議,非原論文所提,不過由於這篇閱讀心得同時也在實驗 & 展示目前的語言模型可以協助撰寫的程度,所以不特別做人工修改 & 編輯。故此小瑕疵請見諒。
此外,若想進一步提升效能與彈性,報告還提到了「分層式查詢」的概念。這種模式先從快取或預先計算的結果中快速獲取資料(第一層),若無法滿足,再使用標準查詢(第二層),隨後再進行更高級的參數組合(第三層),最後甚至可以利用 LLM 引導使用者追加條件,實現探索式查詢(第四層)。這一層層遞進的設計,不僅最大限度利用了現有資源,也讓使用者在面對複雜查詢時有更多彈性選擇。
從最初的 Text-to-SQL,到如今借助函數調用的全新查詢模式,我們正見證著 AI 與資料庫互動方式的革命。隨著更多統一的 Query Language 標準與 Schema 感知機制的建立,也許不久的將來,我們能夠推出一個被稱為「AI Query Language (AIQL)」的通用標準,讓每個人都能以最自然、直覺的方式向資料庫發出查詢請求。當資料庫的繁雜細節被統一封裝於這層友善的介面下,使用者只需提出需求,LLM 便可自動組裝、呼叫對應的函數,真正讓資料搜尋變成一件輕鬆又充滿樂趣的事情。
總之,這篇閱讀心得不僅為我們揭示了 Text-to-SQL 的局限,更以生動實際的案例展示了 Function Calling 的優勢與潛力。或許在不遠的未來,這套以函數調用為核心的新模式將引領資料庫查詢方式的革新,讓技術和使用體驗雙雙邁向更高的層次。