はじめに
SQLite-Utils-Askは、SQLiteデータベースやCSV/JSONファイルに対して、LLM(Large Language Model)の助けを借りて質問と回答のデータクエリを実行するために設計された強力なツールです。このツールは、ユーザーの質問に基づいて適切なSQLクエリを自動的に生成し、クエリを実行して結果を返すことができ、データ分析と処理のプロセスを大幅に簡素化します。
機能一覧
- 自然言語による質問データベースのデータについて自然言語で質問すると、対応するSQLクエリをツールが自動的に生成します。
- データベースの互換性SQLite データベースをサポートし、データ管理とクエリを容易にします。
- CSV/JSONファイルの取り扱いCSV、TSV、JSONファイルの直接クエリをサポートします。
- マルチドキュメント検索複数の文書に対する連合クエリをサポートします。
- コマンドラインツール使いやすいコマンドラインインターフェイスで、クエリーを素早く実行できます。
- プラグイン対応sqlite-utils などのツールと統合して、機能やアプリケーションシナリオを拡張できます。
ターミナルでSQLiteデータベースとCSV/JSONファイルについて質問する
のCLIツールsqlite-utilsを開発中です。コンピュータ上のSQLiteデータベースやCSV/JSONファイルに直接人間の言葉で質問できる新しいプラグインを作りました。
その名前はsqlite-utils-askである。次のようにインストールする:
sqlite-utils 安装 sqlite-utils-ask
環境変数OPENAI_API_KEY
または、LLMをインストールしてllmキーセット openaiキーをコンフィギュレーション・ファイルに保存する。
そうすれば、こんな風に使うことができる:
curl -O https://datasette.io/content.db
sqlite-utils 询问 content.db “ 2024 年 sqlite-utils pypi 下载量是多少?”
このコマンドは、提供されたデータベースファイルのSQLスキーマを抽出し、あなたの質問とともにLLMに送信し、SQLクエリを返し、それを実行して結果を出そうとします。
うまくいけば、次のような答えが返ってくる:
SELECT SUM(downloads)
FROM stats
WHERE package = 'sqlite-utils' AND date >= '2024-01-01' AND date < '2025-01-01';
[
{
"SUM(downloads)": 4300221
}
]
SQLクエリの実行が(何らかの構文エラーによって)失敗した場合、そのエラーを修正するためにモデルに戻し、あきらめる前に最大3回まで再試行する。
増加-v/--verbose
をクリックすると、プロンプトが表示されます:
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
プロンプト
...
CREATE TABLE [stats] (
[パッケージ] TEXT、
[日付] TEXT、
[ダウンロード数] INTEGER、
PRIMARY KEY ([パッケージ], [日付])
);
...
2024年のsqlite-utils pypiのダウンロード数は?
我已将上述内容截断为仅包含相关表 - 它实际上包含了该数据库中每个表的完整模式。
默认情况下,该工具只会将该数据库架构和您的问题发送给 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 “按年计算的总销售额”
このコマンドは1つ以上のファイルを受け付け、CSV、TSV、JSON形式を組み合わせて指定することができます。提供されたファイルはそれぞれ異なるテーブルにインポートされ、必要に応じてモデルが結合クエリを構築できるようになります。
実施要項
プラグインのコアとなる実装はおよそ以下の通りである。250行のPythonコード用途sqlite-utils
register_commands()追加するプラグインフックask
歌で応えるask-files
命令だ。
LLMを依存関係として追加し、LLMのPython APIモデルとの対話の詳細を抽象化する。つまりsqlite-utils-ask
LLMやそのプラグインでサポートされているモデルであれば、どのようなモデルでも使うことができます。 クロード 3.5 Sonnetがプロンプトを表示し、以下のことができます:
sqlite-utils 安装 llm-claude-3
sqlite-utils 询问 content.db “计算新闻表中的行数” -m claude-3.5-sonnet
同じスキーマに対して複数の質問を実行すると、同じ長いヒントプレフィックスを複数回送信することになり、OpenAIのヒントキャッシングが自動的に働き、これらの入力トークンに対して50%の割引を提供します。
そして、実際の数字を計算してみると、こうなった。gpt-4o-mini
4,000のトークンヒント(これはかなり大きなSQLスキーマである)をキャッシュしなくても、コストは10分の1以下になるはずだ。つまり、これらのキャッシュの節約は言及する価値すらないのだ!