01.
導語
Agent工作流和 LLMs (大語言模型)的出現,讓我們能夠以自然語言交互的模式執行復雜的SQL查詢,并徹底改變Text2SQL系統的運行方式。其典型代表是如何處理High-Cardinality Categorical Data (高基數類別數據)。
圍繞這一問題,本文將以Waii和Zilliz Cloud(完全托管的Milvus向量數據庫)組合為例,展示如何將向量數據庫與 Agentic Text2SQL系統集成。
02.
為什么Text2SQL不適合查詢高基數類別數據
Categorical data (類別數據)在數據庫中無處不在,比如各種產品類別、客戶細分或交易類型。其典型代表如,人的性別分為男和女,中國一共有34個省級行政區。
不難發現,以上類別數據,其去重后唯一值的數量(cardinality)是可控的。相應的,這些低基數列對于Text2SQL系統來說相對容易處理,因為自然語言查詢和數據庫值之間的差距很小。
但當我們遇到高基數類別數據(某一類別特征的取值數量巨大)時,問題就出現了。比如,超過60%的數據庫大多長這樣:包含數百萬個唯一ID的產品目錄,或包含數十萬企業ID的金融數據庫,甚至數據量超過上億的身份識別庫與電商IP地址庫。
數據庫需要對這些類別進行精確、嚴格的查找,但基于自然語言描述的查詢通常是模糊和不精確的。比如,用戶可能會問“最近什么劇比較火”或“最近哪個股票漲的比較好”。如何將這些模糊的描述轉化為精準的數據庫查詢,Text2SQL根本無法做到。
03.
如何補足Text2SQL的短板
通常,Text2SQL 系統在做高基數類別數據的自然語言查詢時會采用以下兩種方法:
數據預處理技術(Preprocessed Database Techniques):這種方法結合輸入預處理并依賴于傳統的數據庫功能,如文本搜索和正則表達式。雖然它可以處理簡單的匹配,但通常由于過于僵化而無法準確表示用戶的想法,尤其是在復雜或精細化的查詢中,我們的自然語言通常是非常多變的。
基于LLM的翻譯(LLM-Based Translation):在這種方法中,使用基于數據或少量示例訓練的LLM來預測正確的類別值。雖然LLM在理解上下文和自然語言方面表現出色,但在處理高基數數據時經常產生錯誤的結果。這是因為LLM缺乏對完整(通常是私有的)數據集的了解,因此很難對那些不在訓練數據中的如企業ID等信息進行查詢。
對于高基數數據的處理,以上兩種方法都有短板。
數據預處理技術過于僵化和字面化,無法有效處理自然語言查詢的細微差別;而LLM雖然可以理解查詢意圖,但無法精準理解不在預訓練數據中出現的特殊值。
04.
向量數據庫如何解決高基數類別數據查詢困境
向量數據庫旨在存儲和高效查詢數據的高維向量表達。不難發現,向量數據庫的查詢并非基于關鍵詞匹配,而是主要是使用embedding進行語義搜索。因此,查詢高基數類別數據,正是向量數據庫的擅長之處。
接下來,我們會展示如何利用向量數據庫來做基于自然語言的高基數類別數據查詢。
工作原理:
創建embedding(Create Vector Embeddings):為高基數列中的每個唯一值創建embedding。該embedding通過將值映射到高維空間中的向量來捕獲其語義含義。
在向量數據庫中索引(Index in a VectorDB):將這些embedding存儲在像Milvus這樣的向量數據庫中,該數據庫針對高維空間中的快速相似性搜索進行了優化。
查詢處理(Query Processing):當用戶提交自然語言查詢時,使用LLM理解意圖并生成初步SQL查詢。對于高基數列,LLM不是嘗試生成特定值,而是生成所需值的描述或特征。
向量搜索(Vector Search):使用此描述的embedding對向量數據庫進行相似性搜索,檢索相關的類別值。
優化(Refinement):LLM可以根據用戶查詢的完整上下文過濾掉任何不相關的匹配項。
SQL生成(SQL Generation):通過使用優化的類別值列表構建相應的filter查詢以及匯總來生成最終的SQL查詢。
05.
在Text2SQL中使用向量搜索的好處
向量數據庫增強的方法提供了幾個優勢:
可擴展性(Scalability):它可以處理具有數百萬個唯一值的類別,而不會顯著降低性能。
準確性(Accuracy):通過結合LLM的語義理解和向量數據庫的精確召回,可以更準確地將用戶意圖翻譯為特定的數據庫值。
靈活性(Flexibility):這種方法可以適應數據庫的更新,而無需重新訓練整個系統。
06.
選型與部署
落地中,我們可以考慮通過結合Waii和Zilliz Cloud,來進行實際部署。
6.1 Waii用于智能Text2SQL
Waii是世界上第一個基于 Agent 工作流構建的Text2SQL API。它結合了編譯器技術和自動生成的知識圖譜,以實現最準確的查詢生成。
自動檢測(Automatic Detection):Waii自動識別這些高基數列,無需手動配置。
智能生成(Smart Embedding Generation):它采用定制的工作流為不同類型的列構建和更新embedding,優化準確性和資源效率。
自適應技術(Adaptive Techniques):Waii自動選擇適合各種列類型的技術,確保最佳性能,而無需用戶具備深厚的專業知識。
6.2 Zilliz Cloud用于向量語義搜索
Zilliz Cloud是支持高性能的向量數據庫,它的擴展能力和低延遲精準召回的能力使其成為AI 應用開發中的最佳選擇,與Waii相輔相成。
可擴展性(Scalability):Zilliz Cloud可以輕松處理數十億級的向量規模,使其成為高基數數據場景的理想選擇。
高性能查詢(Lightning-Fast Queries):其優化的索引可以確保快速相似性搜索,保持低延遲。
安全性和訪問控制(Security and Access Control):Zilliz Cloud通過安全網絡選項和加密協議提供企業級數據安全和隱私合規性。這確保了數據在傳輸和靜態時的安全性。此外,Zilliz Cloud提供權限分明的身份控制和訪問管理,包括基于角色的訪問控制(RBAC)和OAuth 2.0,以實現安全的集中式單點登錄(SSO)功能。
6.3 Waii和Zilliz Cloud的集成
自動工作流(Seamless Workflow):Waii的自動預處理和Zilliz的強大向量存儲相結合,可以創建一個在處理Text2SQL系統中高基數數據的流暢、端到端解決方案。
生產級可用(Production-Ready):專為現實世界的大規模挑戰設計,適用于各個場景的生產部署。
通過利用Waii的自動檢測和Zilli的高效向量查詢,可以建立在Text2SQL系統中處理高基數類別數據的強大解決方案,而無需手動開發代碼進行元數據管理或embedding生成。
07.
實例
接下來,我們將展示如何部署一個監控全球數百萬個新聞事件的查詢平臺。
數據庫架構如下:
CREATE?TABLE?events?(event_id?INT?PRIMARY?KEY,event_name?VARCHAR(255),event_date?DATE,category?VARCHAR(100),total_spent?DECIMAL(10,?2)
);
event_name
是一個高基數類別列,包含數百萬個唯一的描述性名稱,如“Global AI Ethics Summit 2024”、“Sustainable Living Expo: Greening Our Future”或“5th Annual Quantum Computing Breakthrough Conference”。
分析師可能會問:“How much money was spent on AI events last month?”
以下是處理這個問題的不同方法:
方法一:傳統的關鍵詞匹配
在這種方法中,我們直接把用戶提供的術語作為查詢的搜索詞。我們在這里使用不區分大小寫的全文搜索。
SELECT?SUM(total_spent)?
FROM?events?
WHERE?event_name?ILIKE?'%AI%'??AND?event_date?>=DATE_TRUNC('month',?CURRENT_DATE?-?INTERVAL?'1?month')AND?event_date?<DATE_TRUNC('month',?CURRENT_DATE);
問題:這種方法錯過了像“Machine Learning Symposium”或“Neural Network Workshop”這樣與AI相關但不包含“AI”單詞的事件,而且也可能錯誤地將“HAIR styling convention”這樣含有“AI”字母的結果。
方法二:單獨采用LLM
在這種方法中,LLM生成可能與搜索相關的多個術語,并據此構建filter查詢。它通常會生成如下內容:
SELECT?SUM(total_spent)?
FROM?events?
WHERE?(event_name?ILIKE?'%AI%'???????OR?event_name?ILIKE?'%Artificial?Intelligence%'???????OR?event_name?ILIKE?'%Machine?Learning%'???????OR?event_name?ILIKE?'%Neural?Network%')AND?event_date?>=?
DATE_TRUNC('month',?CURRENT_DATE?-?INTERVAL?'1?month')AND?event_date?<?
DATE_TRUNC('month',?CURRENT_DATE);
問題:雖然這種方法召回了更多與AI相關的事件,但它仍然局限于預定義的術語列表,可能會錯過其他更新穎的AI相關的事件,依然無法實現精準召回。
08.
向量數據庫+LLM方法
下圖描述了整體流程。左側是對事件表(events table)進行的預處理,右側顯示了生成查詢的流程。

查詢生成流程:
Waii解釋查詢并重寫描述:“與人工智能、機器學習、神經網絡和其他AI技術相關的事件。”
此描述用于查詢Zilliz Cloud,返回基于語義相似性的相關事件ID列表。
Waii優化此列表,過濾掉可能被錯誤召回的非AI事件。
Waii使用Agent工作流將這些事件ID納入最終的SQL查詢:
SELECT?SUM(total_spent)?
FROM?events?
WHERE?event_id?IN?(1234,?5678,?9101,?1121,?3141,?5161,?7181,?9202,?1222,?3242)?
AND?event_date?>=?
DATE_TRUNC('month',?CURRENT_DATE?-?INTERVAL?'1?month')?
AND?event_date?<?
DATE_TRUNC('month',?CURRENT_DATE);
這種方法可以準確識別與AI相關的事件,即使它們使用的是專業術語或并不包含明顯的AI關鍵詞,比如找到像“3rd Symposium on Generative Adversarial Networks”或“Workshop on Ethical Considerations in Reinforcement Learning”,而其他方法可能會錯過。
通過利用向量相似性搜索,我們可以更準確地解釋用戶的意圖,并將其與我們數據庫中的高基數事件名稱匹配,提供更全面和準確的結果。
09.
結論
隨著數據量的持續增長和用戶對直觀數據交互的期望增加,在Text2SQL系統中處理高基數類別數據將變得更加普遍。通過利用Zilliz Cloud與Waii的結合,可以創建更強大、可擴展和準確的系統。
本文作者:
陳將(Zilliz 生態和 AI 平臺負責人)
Gunther Hagleitner(CEO and co-founder of Waii)
推薦閱讀