Text2SQL 與 Hugging Face Dataset Viewer API 以及 DuckDB-NSQL-7B
Hugging Face 展示了一個使用 DuckDB-NSQL-7B 模型結合 Hugging Face Dataset Viewer API 來實作 Text-to-SQL 功能的工作流程。此整合讓使用者能以自然語言查詢超過 120,000 個開放資料集,免除手動撰寫 SQL 的需求。
DuckDB-NSQL-7B 模型概述
DuckDB-NSQL-7B 是一個專為 DuckDB SQL 設計的最先進大型語言模型(LLM)。由 MotherDuck 與 Numbers Station 開發,模型以 Meta 的 Llama-2-7b 為基礎進行微調。
訓練與能力
- Fine-tuning Process:模型最初在廣泛的一般 SQL 查詢資料集上進行微調,之後再以 DuckDB 專屬的 text-to-SQL 配對進行精煉。
- Versatility:除了標準的
SELECT陳述式外,DuckDB-NSQL-7B 能產生各種有效的 DuckDB SQL 陳述式,包含使用官方文件與擴充功能的語句。
與 Hugging Face Dataset Viewer API 的整合
Hugging Face Dataset Viewer API 提供了必要的基礎設施,以向 LLM 提供正確的查詢生成上下文。它允許系統以程式方式存取超過 120,000 個資料集的中繼資料與資料格式。
主要 API 功能
- Schema Retrieval:API 提供資料集的分割、欄位名稱與資料類型。
- Data Access:它允許下載任意索引的列,並以自動轉換的 Parquet 檔案形式存取資料集。
- Metadata:API 提供資料集大小(列數/位元組)、全文搜尋與過濾選項。
技術實作工作流程
Text-to-SQL 流程遵循特定的順序,將自然語言問題轉換為資料結果:
1. 架構擷取
為了提供模型所需的上下文,系統會取得資料集的架構。例如,使用 world-cities-geo 資料集時,系統透過 API 抓取第一個 Parquet 檔案,並利用 DuckDB 從第一列模擬建立表格,以擷取資料定義語言(DDL)CREATE 陳述式。
2. 提示構建
模型需要一個結構化的提示,包含指示、資料庫架構與使用者的問題。提示格式如下:
### Instruction:
Your task is to generate valid duckdb SQL to answer the following question.
### Input:
Here is the database schema that the SQL query will run on:
{ddl_create}
### Question:
{query_input}
### Response (use duckdb shorthand if possible):
3. SQL 生成與執行
- Model Inference:提示會送至 DuckDB-NSQL-7B 模型(可透過
transformerspipeline、AutoModelForCausalLM,或使用 GGUF 量化版本的llama.cpp執行)。 - Query Modification:由於模型產生的查詢會引用通用的
data表格,輸出會被修改,將FROM data替換為實際在 Hugging Face viewer 上託管的 Parquet 檔案 URL。 - Execution:最終的 SQL 查詢使用 DuckDB 執行,DuckDB 能直接透過 URL 查詢 Parquet 檔案,並將過濾後的資料以 dataframe 形式回傳。
部署選項
DuckDB-NSQL-7B 模型可依硬體與效能需求,透過多種方式部署:
- Hugging Face Transformers:標準 pipeline 或 tokenizer/模型載入。
- llama.cpp:用於本地或雲端推論,設定簡易且效能高,特別使用 GGUF 量化版本(
DuckDB-NSQL-7B-v0.1-q8_0.gguf)。