Introdução geral
O SQLite-Utils-Ask é uma ferramenta avançada criada para ajudar os usuários a realizar consultas de dados com perguntas e respostas em bancos de dados SQLite e arquivos CSV/JSON com o auxílio do LLM (Large Language Model). A ferramenta é capaz de gerar automaticamente consultas SQL apropriadas com base nas perguntas do usuário e executar as consultas para retornar os resultados, simplificando bastante o processo de análise e processamento de dados.
Lista de funções
- questionamento em linguagem naturalPerguntas: faça perguntas sobre os dados no banco de dados por meio de linguagem natural, e a ferramenta gerará automaticamente as consultas SQL correspondentes.
- Compatibilidade do banco de dadosSuporte ao banco de dados SQLite para facilitar o gerenciamento e a consulta de dados.
- Manuseio de arquivos CSV/JSONSuporte à consulta direta de arquivos CSV, TSV ou JSON.
- Pesquisa de vários documentosSuporte a consultas federadas para vários documentos.
- ferramenta de linha de comandoInterface de linha de comando: fornece uma interface de linha de comando fácil de usar que permite aos usuários executar consultas rapidamente.
- Suporte a plug-insPode ser integrado a ferramentas como o sqlite-utils para ampliar a funcionalidade e os cenários de aplicativos.
Fazer perguntas sobre bancos de dados SQLite e arquivos CSV/JSON no Terminal
Estou trabalhando na minha ferramenta CLI sqlite-utils para oCriei um novo plug-in que permite fazer perguntas em linguagem humana diretamente para bancos de dados SQLite e arquivos CSV/JSON em seu computador.
Seu nome é sqlite-utils-ask. Instale-o da seguinte forma:
sqlite-utils 安装 sqlite-utils-ask
Ele obtém a chave de API da variável de ambienteOPENAI_API_KEY
ou você pode instalar o LLM e usar oConjunto de chaves llm openaiArmazene a chave em um arquivo de configuração.
Então, você pode usá-lo da seguinte forma:
curl -O https://datasette.io/content.db
sqlite-utils 询问 content.db “ 2024 年 sqlite-utils pypi 下载量是多少?”
Esse comando extrairá o esquema SQL do arquivo de banco de dados fornecido, o enviará ao LLM com sua pergunta, retornará a consulta SQL e tentará executá-la para produzir resultados.
Se tudo correr bem, ele fornecerá a seguinte resposta:
SELECT SUM(downloads)
FROM stats
WHERE package = 'sqlite-utils' AND date >= '2024-01-01' AND date < '2025-01-01';
[
{
"SUM(downloads)": 4300221
}
]
Se a execução da consulta SQL falhar (devido a algum erro de sintaxe), ele passará esse erro de volta ao modelo para correção e tentará novamente até três vezes antes de desistir.
aumentar-v/--verbose
para ver os prompts exatos que ele usa:
System prompt:
You will be given a SQLite schema followed by a question. Generate a single SQL
query to answer that question. Return that query in a ```sql ... ```
fenced code block.
Example: How many repos are there?
Answer:
```sql
select count(*) from repos
Prompt.
...
CREATE TABLE [stats] (
[pacote] TEXTO,
[data] TEXTO,
[downloads] INTEGER,
PRIMARY KEY ([package], [date])
);
...
quantos downloads do sqlite-utils pypi em 2024?
我已将上述内容截断为仅包含相关表 - 它实际上包含了该数据库中每个表的完整模式。
默认情况下,该工具只会将该数据库架构和您的问题发送给 LLM。如果您添加该`-e/--examples`选项,它还将为该架构中的每个文本列包含五个公共值,平均长度小于 32 个字符。这有时可以帮助获得更好的结果,例如,为`state`列发送值“CA”和“FL”和“TX”可以提示模型应该在查询中使用州缩写而不是全名。
#### 询问 CSV 和 JSON 数据的问题
核心`sqlite-utils`CLI 通常直接针对 SQLite 文件运行,但三年前我添加了使用[sqlite-utils memory](https://simonwillison.net/2021/Jun/19/sqlite-utils-memory/)命令直接针对 CSV 和 JSON 文件运行 SQL 查询的功能。其工作原理是在执行 SQL 查询之前将数据加载到内存 SQLite 数据库中。
我决定重用该机制来直接针对 CSV 和 JSON 数据启用 LLM 提示。
该`sqlite-utils ask-files`命令如下所示:
```shell
sqlite-utils ask-files transaction.csv “按年计算的总销售额”
Esse comando aceita um ou mais arquivos, que você pode fornecer em uma combinação de formatos CSV, TSV e JSON. Cada arquivo fornecido será importado para uma tabela diferente, permitindo que o modelo construa consultas de junção, se necessário.
Nota de implementação
A implementação principal do plug-in é aproximadamente250 linhas de código PythonUsosqlite-utils
register_commands()Ganchos de plug-in para adicionarask
responder cantandoask-files
Comando.
Ele adiciona o LLM como uma dependência e usa a funçãoAPI do Pythonpara abstrair os detalhes do diálogo com o modelo. Isso significa que osqlite-utils-ask
Qualquer modelo compatível com o LLM ou seus plug-ins pode ser usado - se você quiser passar o Claude 3.5 O Sonnet executa o prompt e você pode fazer o seguinte:
sqlite-utils 安装 llm-claude-3
sqlite-utils 询问 content.db “计算新闻表中的行数” -m claude-3.5-sonnet
Inicialmente, o padrão do plug-in é gpt-4o-mini para aproveitar o cache automático de dicas do modelo: se você executar várias perguntas no mesmo esquema, acabará enviando o mesmo prefixo de dica longo várias vezes, e o cache de dicas da OpenAI deve entrar em ação automaticamente e fornecer um desconto 50% para esses tokens de entrada.
Em seguida, analisei os números reais e descobri o seguintegpt-4o-mini
É barato o suficiente para que, mesmo sem armazenar em cache 4.000 token hints (que é um esquema SQL bem grande), o custo seja inferior a um décimo de centavo. Portanto, nem vale a pena mencionar essa economia de cache!