更新于 9 个月前
9 个月前
542d129a0ebd · 13GB
模型
架构llama
·
参数6.74B
·
量化F16
13GB
模板
### 指令:您的任务是根据给定的问题和表格结构,生成有效的 DuckDB SQL 语句来回答问题。
230B
自述文件
DuckDB-NSQL 是一个 70 亿参数文本到 SQL 模型,专门为 SQL 生成任务而设计。
该模型基于 Meta 的原始 Llama-2 7B 模型,并进一步在通用 SQL 查询数据集上进行了预训练,然后在由 DuckDB 文本到 SQL 对组成的数据集上进行了微调。
用法
示例提示
Provided this schema:
CREATE TABLE taxi (
VendorID bigint,
tpep_pickup_datetime timestamp,
tpep_dropoff_datetime timestamp,
passenger_count double,
trip_distance double,
fare_amount double,
extra double,
tip_amount double,
tolls_amount double,
improvement_surcharge double,
total_amount double,
);
Give me taxis with more than 2 passengers
示例输出
SELECT * FROM taxi WHERE passenger_count > 2
设置系统提示
该模型期望系统提示中包含的架构作为输入。
/set system """Here is the database schema that the SQL query will run on:
CREATE TABLE taxi (
VendorID bigint,
tpep_pickup_datetime timestamp,
tpep_dropoff_datetime timestamp,
passenger_count double,
trip_distance double,
fare_amount double,
extra double,
tip_amount double,
tolls_amount double,
improvement_surcharge double,
total_amount double,
);"""
一旦在系统提示中提供了架构,模型将在后续响应中使用它。
对于以下提示
get all columns ending with _amount from taxi table
模型将输出类似于以下内容
SELECT COLUMNS('.*_amount') FROM taxi;
API 示例
$ curl https://127.0.0.1:11434/api/generate -d '{
"model": "duckdb-nsql:7b-q4_0",
"system": "Here is the database schema that the SQL query will run on: CREATE TABLE taxi (VendorID bigint, tpep_pickup_datetime timestamp, tpep_dropoff_datetime timestamp, passenger_count double, trip_distance double, fare_amount double, extra double, tip_amount double, tolls_amount double, improvement_surcharge double, total_amount double,);",
"prompt": "get all columns ending with _amount from taxi table"
}'
Python 库示例
pip install ollama
import ollama
r = ollama.generate(
model='duckdb-nsql:7b-q4_0',
system='''Here is the database schema that the SQL query will run on:
CREATE TABLE taxi (
VendorID bigint,
tpep_pickup_datetime timestamp,
tpep_dropoff_datetime timestamp,
passenger_count double,
trip_distance double,
fare_amount double,
extra double,
tip_amount double,
tolls_amount double,
improvement_surcharge double,
total_amount double,
);''',
prompt='get all columns ending with _amount from taxi table',
)
print(r['response'])
训练数据
20 万个 DuckDB 文本到 SQL 对,使用 Mixtral-8x7B-Instruct-v0.1 综合生成,以 DuckDB v0.9.2 文档为指导。以及从 NSText2SQL 中获取的文本到 SQL 对,这些对使用 sqlglot 转换为 DuckDB SQL。
训练过程
DuckDB-NSQL 使用交叉熵损失进行训练,以最大限度地提高顺序输入的可能性。对于文本到 SQL 对的微调,我们只计算 SQL 部分的损失。该模型使用 80GB A100 进行训练,利用数据和模型并行。我们对模型进行了 10 个 epoch 的微调。
预期用途和局限性
该模型专为文本到 SQL 生成任务而设计,用于从给定的表架构和自然语言提示中生成 SQL。该模型最适合使用下面定义的提示格式和输出。与现有的文本到 SQL 模型不同的是,SQL 生成不局限于 SELECT 语句,而是可以生成任何有效的 DuckDB SQL 语句,包括官方 DuckDB 扩展的语句。