使用 Hugging Face 数据集查看器 API 和 DuckDB-NSQL-7B 的 Text2SQL

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 进行微调。

训练与能力

  • 微调过程:模型最初在大规模通用 SQL 查询数据集上进行微调,随后使用 DuckDB 专属的文本到 SQL 对进行进一步精炼。
  • 通用性:除了标准的 SELECT 语句,DuckDB-NSQL-7B 还能生成各种有效的 DuckDB SQL 语句,包括使用官方文档和扩展的查询。

与 Hugging Face 数据集查看器 API 的集成

Hugging Face Dataset Viewer API 提供了为 LLM 供给正确上下文所需的基础设施,使系统能够以编程方式访问超过 120,000 个数据集的元数据和数据格式。

关键 API 功能

  • 模式获取:API 返回数据集的拆分、列名和数据类型。
  • 数据访问:支持按任意索引下载行,并以自动转换的 Parquet 文件形式提供数据集访问。
  • 元数据:提供数据集大小(行数/字节数)、全文搜索以及过滤选项。

技术实现工作流

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 生成与执行

  • 模型推理:将提示发送给 DuckDB-NSQL-7B 模型(可通过 transformers pipeline、AutoModelForCausalLM,或使用 GGUF 量化版本的 llama.cpp 进行推理)。
  • 查询修改:由于模型生成的查询默认引用通用的 data 表,输出会被修改为将 FROM data 替换为实际托管在 Hugging Face 查看器上的 Parquet 文件 URL。
  • 执行:最终的 SQL 查询使用 DuckDB 执行,DuckDB 能直接通过 URL 查询 Parquet 文件,并将过滤后的数据返回为 dataframe。

部署选项

DuckDB-NSQL-7B 模型可根据硬件和性能需求采用多种部署方式:

  • Hugging Face Transformers:标准 pipeline 或 tokenizer/model 加载方式。
  • llama.cpp:适用于本地或云端推理,设置简便且性能高,特别是使用 GGUF 量化版本(DuckDB-NSQL-7B-v0.1-q8_0.gguf)。

Sources