Introdução geral
O OmniSQL é um projeto de código aberto desenvolvido pela equipe do RUCKBReasoning e hospedado no GitHub. Sua função principal é transformar as perguntas de linguagem natural inseridas pelo usuário em instruções de consulta SQL de alta qualidade para ajudar os usuários a interagir facilmente com os bancos de dados. Com base em uma estrutura automatizada de geração de dados de texto para SQL, o projeto lançou o conjunto de dados SynSQL-2.5M com 2,5 milhões de amostras, que atualmente é o maior conjunto de dados de texto sintético para SQL entre domínios. O OmniSQL oferece três tamanhos de modelo, 7B, 14B e 32B, que são adequados para usuários com necessidades diferentes. O OmniSQL oferece três tamanhos de modelos, 7B, 14B e 32B, adequados para usuários com necessidades diferentes, além de oferecer suporte avançado para análise de dados, gerenciamento de banco de dados e pesquisa de modelos. O projeto usa o protocolo Apache 2.0 e os usuários podem fazer download e participar do aprimoramento gratuitamente.
Lista de funções
- Transforme a linguagem natural em SQL: o usuário insere uma pergunta e o modelo gera uma consulta SQL precisa.
- Suporte a consultas complexas: gere SQL avançado, desde consultas simples de uma única tabela até uniões de várias tabelas.
- Geração de conjunto de dados: é fornecido o SynSQL-2.5M, que contém 2,5 milhões de amostras de alta qualidade.
- Modelo de várias escalas: fornece modelos com três escalas de parâmetros: 7B, 14B e 32B.
- Código aberto e gratuito: o código e o conjunto de dados estão disponíveis gratuitamente no GitHub.
Usando a Ajuda
O OmniSQL é uma ferramenta baseada em código para usuários com algum conhecimento de programação. Abaixo está um guia detalhado de instalação e uso para ajudá-lo a começar rapidamente.
Processo de instalação
- Preparação do ambiente
Certifique-se de que seu computador tenha o Python 3.8 ou posterior instalado. Abra a linha de comando e digitepython --version
Verifique. Se você não o tiver instalado, poderá baixá-lo no site do Python. - Download do projeto
entrevistashttps://github.com/RUCKBReasoning/OmniSQL
Clique no botão "Code" (Código) e selecione "Download ZIP" (Baixar ZIP) para baixar o arquivo zip do projeto. Descompacte-o e obtenha a pasta do projeto. Ou você pode cloná-la com o comando Git:
git clone https://github.com/RUCKBReasoning/OmniSQL.git
- Instalação de dependências
Vá para o diretório do projeto e execute-o na linha de comando:
pip install -r requirements.txt
Isso instalará as bibliotecas Python necessárias para a execução. Se você precisar de inferência de modelo, também precisará instalar a biblioteca vLLM ou Transformers com o seguinte comando:
pip install vllm
talvez
pip install transformers torch
- Faça o download de modelos e conjuntos de dados
O OmniSQL oferece três modelos e o conjunto de dados SynSQL-2.5M, que podem ser baixados nos links a seguir:
- SynSQL-2.5M. HuggingFace
- OmniSQL-7B. HuggingFace
- OmniSQL-14B. HuggingFace
- OmniSQL-32B. HuggingFace
Após o download, coloque o arquivo no diretório do projeto.
- Projetos em andamento
Vá para o diretório do projeto e executepython omnisql.py
Verifique se o ambiente está OK. O modelo precisa ser carregado para uso real, veja abaixo.
Funções principais
1. converter a linguagem natural em SQL
A funcionalidade principal do OmniSQL é traduzir perguntas em consultas SQL. Usando o vLLM como exemplo, execute o seguinte código:
from vllm import LLM, SamplingParams
from transformers import AutoTokenizer
# 定义提示模板
prompt = '''Task Overview:
You are a data science expert. Below, you are provided with a database schema and a natural language question. Your task is to generate a valid SQL query.
Database Engine: SQLite
Database Schema:
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);
Question:
查找 users 表中年龄大于 30 的人的名字
Instructions:
- 只输出问题要求的信息。
- 逐步思考后生成 SQL。
Output Format:
-- Sua consulta SQL
'''
# 加载模型
model_path = "seeklhy/OmniSQL-7B" # 替换为你的模型路径
tokenizer = AutoTokenizer.from_pretrained(model_path)
llm = LLM(model=model_path, dtype="float16")
# 生成 SQL
sampling_params = SamplingParams(temperature=0, max_tokens=2048)
chat_prompt = tokenizer.apply_chat_template([{"role": "user", "content": prompt}], add_generation_prompt=True, tokenize=False)
outputs = llm.generate([chat_prompt], sampling_params)
print(outputs[0].outputs[0].text)
O resultado pode ser:
SELECT name FROM users WHERE age > 30;
2. usando o conjunto de dados SynSQL-2.5M
O conjunto de dados contém 2,5 milhões de amostras, cada uma incluindo estrutura de banco de dados, perguntas, consultas SQL e processos de pensamento. Faça o download e use diretamente para treinamento ou pesquisa. Exibir amostras:
- Descompacte o arquivo do conjunto de dados.
- Abra qualquer arquivo JSON no formato
{"db": ..., "question": ..., "sql": ..., "cot": ...}
.
3. treinamento e avaliação
O projeto fornece roteiros de treinamento, localizados no train_and_evaluate
pasta. Execute o exemplo:
python train.py --model OmniSQL-7B --data SynSQL-2.5M
Os scripts de avaliação também estão na mesma pasta para reproduzir os resultados oficiais.
Dicas e truques
- Suporte a banco de dadosNo momento, apenas o SQLite é compatível; se outros bancos de dados forem necessários, a Estrutura de geração de dados poderá ser usada para sintetizar novos dados.
- Requisitos de hardwareO modelo 7B requer cerca de 14 GB de memória de vídeo, e o 32B requer uma configuração mais alta.
- Ver exemplo: Projetos
examples
A pasta fornece exemplos de modelos de prompt.
Com essas etapas, você pode gerar SQL rapidamente com o OmniSQL ou investigar técnicas de conversão de texto em SQL.
cenário do aplicativo
- análise de dados
Os analistas de dados inserem uma pergunta, como "Encontre os 10 itens mais vendidos", e o OmniSQL gera o SQL correspondente, economizando tempo. - Estudos de modelagem
Os pesquisadores treinam um novo modelo com o SynSQL-2.5M para melhorar a capacidade de conversão de texto em SQL. - Aprendizagem educacional
Os alunos aprendem sobre operações de banco de dados inserindo perguntas e observando o SQL gerado.
QA
- Quais bancos de dados são compatíveis com o OmniSQL?
Atualmente, somente o SQLite é compatível, que pode ser ampliado com dados sintéticos no futuro. - Qual é o tamanho do conjunto de dados?
O SynSQL-2.5M contém 2,5 milhões de amostras que abrangem 16.000 bancos de dados. - Qual é a resistência dos modelos?
O OmniSQL supera o desempenho de modelos como o GPT-4o em benchmarks como Spider e BIRD.