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 模型(可透過 transformers pipeline、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)。

Sources