使用 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 模型(可通过
transformerspipeline、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)。