AI个人学习
和实操指南

SQLite-Utils-Ask:让用户对SQLite数据库和CSV/JSON文件进行问答式数据查询

综合介绍

SQLite-Utils-Ask 是一个强大的工具,旨在通过LLM(大语言模型)的辅助,帮助用户对SQLite数据库和CSV/JSON文件进行问答式数据查询。该工具能够根据用户的问题自动生成适当的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 keys set 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

Prompt:
...
CREATE TABLE [stats] (
[package] TEXT,
[date] TEXT,
[downloads] INTEGER,
PRIMARY KEY ([package], [date])
);
...
how many sqlite-utils pypi downloads in 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()插件挂钩来添加askask-files命令。

它添加了LLM作为依赖项,并利用 LLM 的Python API来抽象与模型对话的细节。这意味着sqlite-utils-ask可以使用 LLM 或其插件支持的任何模型 - 如果您想通过 Claude 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 架构),成本也应该不到十分之一美分。所以这些缓存节省根本就不值一提!

AI轻松学

普通人的AI入门指南

帮助你以低成本、零基础学会如何利用AI工具。AI就像办公软件一样,是每个人的必备技能。 掌握AI会让你在求职中占据优势,在未来的工作和学习中事半功倍。

查看详情>
未经允许不得转载:首席AI分享圈 » SQLite-Utils-Ask:让用户对SQLite数据库和CSV/JSON文件进行问答式数据查询

首席AI分享圈

首席AI分享圈专注于人工智能学习,提供全面的AI学习内容、AI工具和实操指导。我们的目标是通过高质量的内容和实践经验分享,帮助用户掌握AI技术,一起挖掘AI的无限潜能。无论您是AI初学者还是资深专家,这里都是您获取知识、提升技能、实现创新的理想之地。

联系我们
zh_CN简体中文