许可证:Apache-2.0
语言:
Prem-1B-SQL(HuggingFace版)
Prem-1B-SQL是Prem AI开发的首批完全本地化的文本转SQL模型系列之一。作为拥有10亿参数的模型,它能轻松运行在低配GPU设备(量化后甚至支持CPU设备)。我们坚信,AI辅助数据分析应当以本地优先为原则,因为将数据库暴露给第三方闭源模型可能导致数据安全风险。我们将很快公布该模型在公开基准测试中的部分结果,并持续迭代优化模型性能。
性能表现
我们在两大主流基准数据集上评估了模型表现:BirdBench和Spider。BirdBench包含公开验证集(1534个数据点)和私有测试集,Spider仅提供公开验证集。结果如下:
数据集 |
执行准确率 |
BirdBench(验证集) |
46% |
BirdBench(私有测试集) |
51.54% |
Spider |
85% |
BirdBench数据集按难度分级分布,以下是私有测试集各难度级别的详细结果:
难度等级 |
数量 |
执行准确率 |
Soft F1分数 |
简单 |
949 |
60.70 |
61.48 |
中等 |
555 |
47.39 |
49.06 |
挑战性 |
285 |
29.12 |
31.83 |
总计 |
1789 |
51.54 |
52.90 |
以下是主流闭源与开源模型的详细对比:
模型 |
参数量(十亿) |
BirdBench测试得分 |
AskData + GPT-4o(当前最优) |
不适用 |
72.39 |
DeepSeek coder 236B |
236 |
56.68 |
GPT-4(2023版) |
不适用 |
54.89 |
PremSQL 1B(本模型) |
1 |
51.4 |
Qwen 2.5 7B Instruct |
7 |
51.1 |
Claude 2 Base(2023版) |
不适用 |
49.02 |
使用指南
虽然该模型基于Transformers架构可直接调用,但文本转SQL任务比常规LLM应用更复杂,因其输入提示需与数据库深度耦合。为此我们开发了全开源库PremSQL,具备以下特性:
- 本地优先:规避第三方闭源服务,保障数据安全
- 可定制数据集:支持内置或自定义数据集进行模型微调与评估
- 强大执行器与评估器:轻松连接数据库并评估模型表现
- 高级生成器:将自然语言提示转化为可执行SQL
- 错误自修正:推理阶段自动纠正SQL语句
- 微调支持:支持LoRA、QLoRA或全参数微调策略
- 端到端流程:全组件无缝集成实现自主数据分析
安装命令:
pip install -U premsql
更多库用法详见文档。
通过PremSQL基线代理运行
最简方式是通过PremSQL流水线操作,只需提供SQLite数据库路径或连接URI即可关联模型:
from premsql.agents import BaseLineAgent
from premsql.generators import Text2SQLGeneratorOllama
from premsql.agents.tools import SimpleMatplotlibTool
from premsql.executors import SQLiteExecutor
text2_sqlmodel = Text2SQLGeneratorHF(
model_or_name_or_path="premai-io/prem-1B-SQL",
experiment_name="test_generators",
device="cuda:0",
type="test"
)
analyser_and_plotter = Text2SQLGeneratorHF(
model_or_name_or_path="meta-llama/Llama-3.2-1B-Instruct",
experiment_name="test_generators",
device="cuda:0",
type="test"
)
agent = BaseLineAgent(
session_name="testing_hf",
db_connection_uri="sqlite:////path/to/your/database.sqlite",
specialized_model1=model,
specialized_model2=model,
plot_tool=SimpleMatplotlibTool(),
executor=SQLiteExecutor()
)
response = agent(
"/query what all tables are present inside the database"
)
response.show_dataframe()
系统将自动处理数据库连接、提示构建等复杂流程。
通过PremSQL生成器批量运行
适用于数据集批量生成场景:
from premsql.generators import Text2SQLGeneratorHF
from premsql.datasets import Text2SQLDataset
dataset = Text2SQLDataset(
dataset_name='bird', split="validation", force_download=False,
dataset_folder="/path/to/dataset"
).setup_dataset(num_rows=10, num_fewshot=3)
generator = Text2SQLGeneratorHF(
model_or_name_or_path="premai-io/prem-1B-SQL",
experiment_name="test_generators",
device="cuda:0",
type="test"
)
responses = generator.generate_and_save_results(
dataset=bird_dataset,
temperature=0.1,
max_new_tokens=256
)
print(responses)
执行引导解码技术
该策略通过执行生成的SQL并利用错误信息进行迭代修正,直至获得有效结果或达到重试上限:

from premsql.executors import SQLiteExecutor
executor = SQLiteExecutor()
response = generator.generate_and_save_results(
dataset=bird_dataset,
temperature=0.1,
max_new_tokens=256,
force=True,
executor=executor,
max_retries=5
)
您还可通过HuggingFace Transformers或PremSQL调优器对模型进行微调,更多功能详见文档。
训练数据集
Prem-1B-SQL使用以下数据集训练:
- BirdBench训练集 | PremSQL数据集HF版
- Spider数据集 | PremSQL数据集HF版
- 领域专项数据集
- Gretel AI合成数据集
我们额外构建了错误处理数据集,使模型能从错误中学习并自我修正。
基准测试结果
模型在公开基准测试中的完整结果即将发布。