Allgemeine Einführung
SQLite-Utils-Ask ist ein leistungsfähiges Tool, das Benutzern hilft, Frage-und-Antwort-Datenabfragen auf SQLite-Datenbanken und CSV/JSON-Dateien mit Hilfe von LLM (Large Language Model) durchzuführen. Das Tool ist in der Lage, automatisch geeignete SQL-Abfragen auf der Grundlage der Fragen des Benutzers zu generieren und die Abfragen auszuführen, um Ergebnisse zurückzugeben, was den Prozess der Datenanalyse und -verarbeitung erheblich vereinfacht.
Funktionsliste
- natürlichsprachliche BefragungStellen Sie Fragen zu den Daten in der Datenbank in natürlicher Sprache, und das Tool generiert automatisch die entsprechenden SQL-Abfragen.
- Kompatibilität der DatenbankenUnterstützt SQLite-Datenbank für einfache Datenverwaltung und -abfrage.
- Umgang mit CSV/JSON-DateienUnterstützt die direkte Abfrage von CSV-, TSV- oder JSON-Dateien.
- MultidokumentensucheUnterstützt föderierte Abfragen für mehrere Dokumente.
- KommandozeilentoolBietet eine einfach zu bedienende Befehlszeilenschnittstelle, über die Benutzer schnell Abfragen ausführen können.
- Plug-in-UnterstützungKann mit Tools wie sqlite-utils integriert werden, um Funktionalität und Anwendungsszenarien zu erweitern.
Fragen zu SQLite-Datenbanken und CSV/JSON-Dateien im Terminal stellen
Ich arbeite an meinem sqlite-utils CLI-Tool für dieIch habe ein neues Plugin entwickelt, mit dem Sie Fragen in menschlicher Sprache direkt an SQLite-Datenbanken und CSV/JSON-Dateien auf Ihrem Computer stellen können.
Sie heißt sqlite-utils-ask. Installieren Sie sie wie folgt:
sqlite-utils 安装 sqlite-utils-ask
Der API-Schlüssel wird aus der UmgebungsvariablenOPENAI_API_KEY
oder Sie können LLM installieren und diellm-Tastensatz openaiSpeichern Sie den Schlüssel in einer Konfigurationsdatei.
Dann können Sie es so verwenden:
curl -O https://datasette.io/content.db
sqlite-utils 询问 content.db “ 2024 年 sqlite-utils pypi 下载量是多少?”
Dieser Befehl extrahiert das SQL-Schema der übergebenen Datenbankdatei, sendet es zusammen mit Ihrer Frage durch den LLM, gibt die SQL-Abfrage zurück und versucht, sie auszuführen, um Ergebnisse zu erzielen.
Wenn alles gut geht, erhalten Sie die folgende Antwort:
SELECT SUM(downloads)
FROM stats
WHERE package = 'sqlite-utils' AND date >= '2024-01-01' AND date < '2025-01-01';
[
{
"SUM(downloads)": 4300221
}
]
Wenn die Ausführung der SQL-Abfrage fehlschlägt (aufgrund eines Syntaxfehlers), wird dieser Fehler zur Korrektur an das Modell zurückgegeben und bis zu dreimal wiederholt, bevor aufgegeben wird.
erhöhen.-v/--verbose
um die genauen Eingabeaufforderungen zu sehen, die er verwendet:
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
Aufforderung.
...
CREATE TABLE [stats] (
[Paket] TEXT,
[Datum] TEXT,
[Downloads] INTEGER,
PRIMARY KEY ([Paket], [Datum])
);
...
wie viele sqlite-utils pypi Downloads im Jahr 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 “按年计算的总销售额”
Dieser Befehl akzeptiert eine oder mehrere Dateien, die Sie in einer Mischung aus CSV-, TSV- und JSON-Formaten bereitstellen können. Jede gelieferte Datei wird in eine andere Tabelle importiert, so dass das Modell bei Bedarf Join-Abfragen konstruieren kann.
Beschreibung der Realisierung
Die Kernimplementierung des Plugins ist ungefähr250 Zeilen Python-CodeVerwenden Siesqlite-utils
register_commands()Plugin-Haken zum Hinzufügenask
im Gesang antwortenask-files
Befehl.
Es fügt LLM als Abhängigkeit hinzu und verwendet LLMsPython-APIum die Details des Dialogs mit dem Modell zu abstrahieren. Das bedeutet, dass diesqlite-utils-ask
Jedes Modell, das vom LLM oder seinen Plugins unterstützt wird, kann verwendet werden - wenn Sie die Claude 3.5 Sonnet ruft die Eingabeaufforderung auf und Sie können Folgendes tun:
sqlite-utils 安装 llm-claude-3
sqlite-utils 询问 content.db “计算新闻表中的行数” -m claude-3.5-sonnet
Das Plugin ist anfänglich auf gpt-4o-mini voreingestellt, um die Vorteile des automatischen Hinweis-Cachings des Modells zu nutzen: Wenn Sie mehrere Fragen gegen dasselbe Schema laufen lassen, werden Sie am Ende dasselbe lange Hinweis-Präfix mehrmals senden, und OpenAIs Hinweis-Caching sollte automatisch einsetzen und einen 50%-Rabatt für diese Eingabe-Token bieten.
Dann habe ich die tatsächlichen Zahlen ausgewertet und Folgendes herausgefundengpt-4o-mini
Es ist billig genug, dass die Kosten auch ohne die Zwischenspeicherung von 4.000 Token-Hints (was ein ziemlich großes SQL-Schema ist) weniger als einen Zehntel Cent betragen sollten. Diese Cache-Einsparungen sind also nicht einmal erwähnenswert!