SQLite-Utils-Ask : Permet aux utilisateurs d'interroger les bases de données SQLite et les fichiers CSV/JSON pour les données d'interrogation.
Introduction générale
SQLite-Utils-Ask est un outil puissant conçu pour aider les utilisateurs à effectuer des requêtes de données de type question-réponse sur les bases de données SQLite et les fichiers CSV/JSON à l'aide de LLM (Large Language Model). L'outil est capable de générer automatiquement des requêtes SQL appropriées basées sur les questions de l'utilisateur et d'exécuter les requêtes pour retourner les résultats, ce qui simplifie grandement le processus d'analyse et de traitement des données.
Liste des fonctions
- questions en langage naturelL'outil permet de poser des questions sur les données de la base en langage naturel et de générer automatiquement les requêtes SQL correspondantes.
- Compatibilité des bases de donnéesLe logiciel est compatible avec la base de données SQLite pour faciliter la gestion et l'interrogation des données.
- Traitement des fichiers CSV/JSONLe logiciel permet d'interroger directement des fichiers CSV, TSV ou JSON.
- Recherche multi-documentsLe système d'information sur les droits d'auteur : Il permet d'effectuer des requêtes fédérées pour plusieurs documents.
- outil en ligne de commandeLe système d'information sur la santé : Il fournit une interface de ligne de commande facile à utiliser qui permet aux utilisateurs d'exécuter rapidement des requêtes.
- Support de plug-inLes outils : peuvent être intégrés à des outils tels que sqlite-utils pour étendre les fonctionnalités et les scénarios d'application.
Poser des questions sur les bases de données SQLite et les fichiers CSV/JSON dans Terminal
Je travaille sur mon outil sqlite-utils CLI pour l'applicationCréation d'un nouveau plugin qui vous permet de poser des questions en langage humain directement aux bases de données SQLite et aux fichiers CSV/JSON sur votre ordinateur.
Son nom est sqlite-utils-ask. Installez-le comme suit :
sqlite-utils 安装 sqlite-utils-ask
Il récupère la clé API à partir de la variable d'environnementOPENAI_API_KEY
ou vous pouvez installer LLM et utiliser l'optionJeu de clés llm openaiStocker la clé dans un fichier de configuration.
Vous pouvez alors l'utiliser comme suit :
curl -O https://datasette.io/content.db
sqlite-utils 询问 content.db “ 2024 年 sqlite-utils pypi 下载量是多少?”
Cette commande extrait le schéma SQL du fichier de base de données fourni, l'envoie à LLM avec votre question, renvoie la requête SQL et tente de l'exécuter pour obtenir des résultats.
Si tout se passe bien, il donnera la réponse suivante :
SELECT SUM(downloads)
FROM stats
WHERE package = 'sqlite-utils' AND date >= '2024-01-01' AND date < '2025-01-01';
[
{
"SUM(downloads)": 4300221
}
]
Si l'exécution de la requête SQL échoue (en raison d'une erreur de syntaxe), il renvoie cette erreur au modèle pour correction et tente jusqu'à trois fois avant d'abandonner.
augmenter-v/--verbose
pour voir les invites exactes qu'il utilise :
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] (
[paquet] TEXTE,
[date] TEXTE,
[téléchargements] INTEGER,
PRIMARY KEY ([paquet], [date])
);
...
combien de téléchargements de sqlite-utils pypi en 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 “按年计算的总销售额”
Cette commande accepte un ou plusieurs fichiers, que vous pouvez fournir dans un mélange de formats CSV, TSV et JSON. Chaque fichier fourni sera importé dans une table différente, ce qui permettra au modèle de construire des requêtes conjointes si nécessaire.
Description de la réalisation
L'implémentation de base du plugin est approximativement la suivante250 lignes de code PythonUtilisationsqlite-utils
register_commands()Crochets de plugin à ajouterask
répondre en chantantask-files
Commandement.
Il ajoute LLM en tant que dépendance et utilise la fonctionAPI Pythond'abstraire les détails du dialogue avec le modèle. Cela signifie que lesqlite-utils-ask
Tout modèle supporté par LLM ou ses plugins peut être utilisé - si vous voulez passer le paramètre Claude 3.5 Sonnet lance l'invite et vous pouvez faire ce qui suit :
sqlite-utils 安装 llm-claude-3
sqlite-utils 询问 content.db “计算新闻表中的行数” -m claude-3.5-sonnet
Le plugin utilise par défaut gpt-4o-mini pour tirer parti de la mise en cache automatique des indices : si vous exécutez plusieurs questions avec le même schéma, vous finirez par envoyer le même préfixe d'indice long plusieurs fois, et la mise en cache des indices d'OpenAI devrait automatiquement se mettre en place et fournir une réduction 50% pour ces tokens d'entrée.
J'ai ensuite analysé les chiffres réels et j'ai trouvé cecigpt-4o-mini
Il est suffisamment bon marché pour que, même sans mettre en cache 4 000 indices de jetons (ce qui représente un schéma SQL assez important), le coût soit inférieur à un dixième de centime. Ces économies de cache ne valent donc même pas la peine d'être mentionnées !
© déclaration de droits d'auteur
L'article est protégé par le droit d'auteur et ne doit pas être reproduit sans autorisation.
Postes connexes
Pas de commentaires...