SQLite-Utils-Ask: Позволяет пользователям запрашивать базы данных SQLite и файлы CSV/JSON для получения данных запроса.

Общее введение

SQLite-Utils-Ask - это мощный инструмент, предназначенный для помощи пользователям в выполнении вопросно-ответных запросов к базам данных SQLite и файлам CSV/JSON с помощью LLM (Large Language Model). Инструмент способен автоматически генерировать соответствующие SQL-запросы на основе вопросов пользователя и выполнять их для получения результатов, значительно упрощая процесс анализа и обработки данных.

 

Список функций

  • задавать вопросы на естественном языке: Задайте вопросы о данных в базе данных на естественном языке, и инструмент автоматически сгенерирует соответствующие SQL-запросы.
  • Совместимость с базами данных: Поддерживает базу данных SQLite для удобного управления данными и запросов.
  • Работа с файлами CSV/JSON: Поддерживает прямой запрос к файлам CSV, TSV или JSON.
  • Поиск по нескольким документам: Поддержка федеративных запросов к нескольким документам.
  • инструмент командной строки: Предоставляет простой в использовании интерфейс командной строки, который позволяет пользователям быстро выполнять запросы.
  • Поддержка плагинов: Может быть интегрирован с такими инструментами, как sqlite-utils, для расширения функциональности и сценариев применения.

Задавайте вопросы о базах данных SQLite и файлах CSV/JSON в терминале

Я работаю над своим инструментом sqlite-utils CLI дляСоздан новый плагин, позволяющий задавать вопросы на человеческом языке непосредственно базам данных SQLite и файлам CSV/JSON на вашем компьютере.

Его имя - sqlite-utils-ask. Установите его следующим образом:

sqlite-utils 安装 sqlite-utils-ask

Он получает ключ API из переменной окружения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-запроса заканчивается неудачей (из-за синтаксической ошибки), он передает эту ошибку обратно в модель для исправления и повторяет попытку до трех раз, прежде чем сдаться.

увеличить-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] (
[пакет] ТЕКСТ,
[дата] ТЕКСТ,
[downloads] INTEGER,
PRIMARY KEY ([package], [date])
);
...
Сколько загрузок sqlite-utils pypi будет в 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 “按年计算的总销售额”

Эта команда принимает один или несколько файлов, которые вы можете предоставить в различных форматах CSV, TSV и JSON. Каждый предоставленный файл будет импортирован в отдельную таблицу, что позволит модели при необходимости создавать запросы на объединение.

Памятка по внедрению

Основная реализация плагина выглядит примерно так250 строк кода на языке PythonИспользуйтеsqlite-utils register_commands()Добавление крючков для плагиновaskответить пениемask-filesКомандуйте.

Он добавляет LLM в качестве зависимости и использует LLMAPI Pythonабстрагироваться от деталей диалога с моделью. Это означает, чтоsqlite-utils-askМожно использовать любую модель, поддерживаемую LLM или его плагинами - если вы хотите передать Клод 3.5 Sonnet запускает приглашение, и вы можете сделать следующее:

sqlite-utils 安装 llm-claude-3
sqlite-utils 询问 content.db “计算新闻表中的行数” -m claude-3.5-sonnet

Изначально по умолчанию плагин использует gpt-4o-mini, чтобы воспользоваться преимуществами автоматического кэширования подсказок модели: если вы запускаете несколько вопросов по одной и той же схеме, вы будете отправлять один и тот же длинный префикс подсказки несколько раз, и кэширование подсказок OpenAI должно автоматически сработать и предоставить скидку 50% для этих входных токенов.

Затем я проанализировал фактические цифры и обнаружил следующееgpt-4o-miniЭто достаточно дешево, поэтому даже без кэширования 4 000 подсказок (а это довольно большая схема SQL) затраты должны составлять менее десятой доли цента. Так что экономия на кэше даже не стоит упоминания!

© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...