LLMs之Text2Sql之Vanna:Vanna(利用自然语言查询数据库的SQL工具+底层基于RAG)的简介、安装、使用方法之详细攻略

本文详细介绍了Vanna,一个基于RAG的开源Python工具,用于通过自然语言查询数据库。文章涵盖了Vanna的简介、安装过程、训练方法、用户界面比较、选择原因以及应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LLMs之Text2Sql之Vanna:Vanna(利用自然语言查询数据库的SQL工具+底层基于RAG)的简介、安装、使用方法之详细攻略

目录

Vanna的简介

1、Vanna的实现原理和思路步骤:嵌入→检索→生成→执行→结果返回和可视化

2、Vanna支持的组件

3、Vanna的优势

4、RAG vs. Fine-Tuning

5、为什么选择Vanna?

6、扩展Vanna

Vanna的安装和使用方法

1、安装

2、训练

(1)、使用DDL语句训练

(2)、使用文档训练

(3)、使用SQL训练

3、提问问题

Vanna的应用案例

1、基础用法


Vanna的简介

2023年5月,Vanna是一个基于MIT许可的开源Python RAG(检索增强生成)框架,用于SQL生成和相关功能。

Vanna的工作原理分为两个简单步骤:在您的数据上训练一个RAG“模型”,然后提问问题,这将返回可以设置自动在您的数据库上运行的SQL查询。

Vanna通过整合上下文(元数据、定义、查询等)以及领域知识文档来训练RAG模型。在Vanna框架的基础上可以使用现有工具(例如Streamlit、Slack)构建自定义可视化UI,实现对话结果的可视化。
>> 在您的数据上训练一个RAG“模型”。
>> 提问问题。

如果您不知道什么是RAG,不用担心 - 您不需要知道在底层如何工作就能使用它。您只需要知道您需要“训练”一个模型,它会存储一些元数据,然后用它来“提问”问题。

查看基类以获取有关底层工作原理的更多详细信息。

Vanna.AI是一个基于语言模型的SQL代理,允许用户通过简单的自然语言问题获得数据库中的洞察信息。它提供开源的Python包以及各种前端集成方式,可以部署在自己的基础设施上运行。
>> 系统的准确性取决于提供的训练数据量和质量,更多的数据可以支持复杂数据集提高准确率。
>> 用户数据库内容不会发送到语言模型,只有架构、文档和查询信息存储在元数据层中,从保障数据安全性。
>> 使用越多,模型通过不断增加训练数据会持续提升,实现自我学习效果。
>> 支持许多常见数据库如Snowflake、BigQuery、Postgres,也可以通过连接器支持任意数据库。
>> 提供免费版和付费版两种计划,区别在于查询限制和语言模型版本的不同。
>> 该系统强调以开源方式提供,保障数据安全并支持定制化部署是其一大卖点。

GitHub地址https://github.com/vanna-ai/vanna

文档地址Vanna Docs: How It Works

Vanna 是一个基于 MIT 许可证的开源 Python 框架,使用检索增强生成 (RAG) 技术,实现精确的文本到 SQL 查询生成。它允许用户通过自然语言与 SQL 数据库进行交互,将自然语言问题转换成可执行的 SQL 查询,并能自动在数据库上运行这些查询,最终返回结果和可视化图表。Vanna 的目标是提供高精度、安全私密且易于使用的文本到 SQL 生成工具。

1、Vanna的实现原理和思路步骤:嵌入→检索→生成→执行→结果返回和可视化

Vanna 的实现原理是将 RAG 技术LLM 结合,利用向量数据库进行高效的语义检索,从而实现精确的文本到 SQL 查询生成。 其模块化设计方便用户根据自己的需求选择不同的 LLM、向量数据库和 SQL 数据库。 通过提供多种训练方式和用户友好的接口,Vanna 极大地简化了自然语言与 SQL 数据库交互的过程。

Vanna 的核心思路是利用 RAG 技术,结合大型语言模型 (LLM) 和向量数据库,将自然语言问题转换成 SQL 查询。其工作流程主要分为两步:

训练 RAG 模型

这步是将数据库元数据和相关信息存储到向量数据库中,以便 LLM 可以进行检索。 Vanna 提供了三种方式进行训练:

>> 使用 DDL 语句 (DDL statements):DDL 语句包含数据库表名、列名、数据类型和关系等信息。 Vanna 使用这些信息构建数据库的 schema 表示,并将其存储到向量数据库中。

>> 使用文档 (Documentation):用户可以提供业务术语或定义等文档信息,帮助 LLM 更好地理解自然语言问题中的业务概念。 这些文档信息也会被存储到向量数据库中。

>> 使用 SQL 查询 (SQL queries):用户可以提供已有的 SQL 查询作为训练数据,Vanna 将这些查询及其对应的自然语言描述存储到向量数据库中。

提问 (Asking questions)

用户输入自然语言问题后,Vanna 会执行以下步骤:

>> 嵌入 (Embedding):将用户的问题转换成向量表示。

>> 检索 (Retrieval):在向量数据库中检索与用户问题语义最相似的 DDL 语句、文档和 SQL 查询。

>> 生成 (Generation):将检索到的信息和用户的问题一起提供给 LLM,生成对应的 SQL 查询。

>> 执行 (Execution):将生成的 SQL 查询在数据库中执行。

>> 结果返回和可视化:将查询结果以表格和 Plotly 图表的形式返回给用户。

Vanna通过两个简单的步骤进行操作:
(1)基于数据训练RAG“模型”。
(2)提出问题返回SQL查询,并且可以将查询配置为在数据库上自动运行。

2、Vanna支持的组件

Vanna 支持多种大型语言模型 (LLM)、向量数据库和 SQL 数据库,这使得它具有很高的灵活性和可扩展性:

>> 支持的 LLM:OpenAI, Anthropic, Gemini, HuggingFace, AWS Bedrock, Ollama, Qianwen, Qianfan, Zhipu 等。

>> 支持的向量数据库:AzureSearch, Opensearch, PgVector, PineCone, ChromaDB, FAISS, Marqo, Milvus, Qdrant, Weaviate 等。

>> 支持的数据库:PostgreSQL, MySQL, PrestoDB, Apache Hive, ClickHouse, Snowflake, Oracle, Microsoft SQL Server, BigQuery, SQLite, DuckDB 等。

3、Vanna的优势

>> 高精度:在复杂数据集上具有高准确率。

>> 可移植性:易于在不同 LLM 之间切换。

>> 成本效益:比微调模型更经济。

>> 安全性:数据库内容不会发送到 LLM 或向量数据库,SQL 执行在本地环境进行。

>> 自学习:支持基于用户反馈进行自学习。

>> 灵活性和可扩展性:支持多种数据库、LLM 和向量数据库。

4、RAG vs. Fine-Tuning

RAG

微调

可在LLMs之间移植

如果数据变得过时,可以轻松删除训练数据

比微调更便宜

更具未来性 - 如果有更好的LLM出现,可以轻松替换

如果需要最小化提示中的标记,可以选择微调

启动较慢

训练和运行费用昂贵(一般情况下)

5、为什么选择Vanna?

在复杂数据集上具有高准确性

Vanna的能力与您提供的训练数据密切相关。

更多的训练数据对于大型和复杂数据集的准确性更有帮助。

安全和私密

您的数据库内容永远不会发送到LLM或向量数据库。

SQL执行发生在您的本地环境中。

自学习

如果通过Jupyter使用,您可以选择在成功执行的查询上“自动训练”它。

如果通过其他界面使用,您可以要求界面提示用户对结果提供反馈。

正确的问题和SQL对存储供将来参考,使未来的结果更准确。

支持任何SQL数据库

该软件包允许您连接到您可以使用Python连接的任何SQL数据库。

选择您的前端

大多数人从Jupyter Notebook开始。

通过Slackbot、Web应用程序、Streamlit应用程序或自定义前端向最终用户公开。

6、扩展Vanna

Vanna旨在连接到任何数据库、LLM和向量数据库。有一个VannaBase抽象基类定义了一些基本功能。该软件包提供了与OpenAI和ChromaDB一起使用的实现。您可以轻松扩展Vanna以使用自己的LLM或向量数据库。详细信息请参阅文档。

Vanna的安装和使用方法

查看文档以获取有关您所需数据库、LLM等的具体信息。

如果您想在训练后了解其工作方式,可以尝试此Colab笔记本。

1、安装

pip install vanna
有一些可选包可以安装,详细信息请参阅文档。



导入
如果您要自定义LLM或向量数据库,请参阅文档。
import vanna as vn

2、训练

根据您的用例,您可能需要或不需要运行这些vn.train命令。详细信息请参阅文档。

(1)、使用DDL语句训练

DDL语句包含有关数据库中表名、列、数据类型和关系的信息。

vn.train(ddl="""
    CREATE TABLE IF NOT EXISTS my-table (
        id INT PRIMARY KEY,
        name VARCHAR(100),
        age INT
    )
""")

(2)、使用文档训练

有时您可能希望添加关于业务术语或定义的文档。

vn.train(documentation="Our business defines XYZ as ...")

(3)、使用SQL训练

您还可以将SQL查询添加到训练数据中。如果您已经有一些查询可用,只需从编辑器中复制并粘贴它们即可开始生成新的SQL。

vn.train(sql="SELECT name, age FROM my-table WHERE name = 'John Doe'")

3、提问问题

vn.ask("What are the top 10 customers by sales?")

您将得到SQL查询结果,以及连接到数据库时的表格和自动生成的Plotly图表。

Vanna的应用案例

更新中……

1、基础用法

!pip install vanna
import vanna
from vanna.remote import VannaDefault
vn = VannaDefault(model='chinook', api_key=vanna.get_api_key('my-email@example.com'))
vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')
vn.ask('What are the top 10 artists by sales?')

from vanna.flask import VannaFlaskApp
VannaFlaskApp(vn).run()

### 使用Python部署Vanna 对于使用Python来部署名为Vanna的应用程序或服务,具体方法取决于Vanna本身的性质以及其运行环境的要求。然而,在通常情况下,可以采用如下几种通用策略: #### 通过命令行工具调用实现自动化部署 如果Vanna支持CLI(Command Line Interface),那么可以通过Python脚本执行相应的shell命令来进行部署操作。 ```python import subprocess def deploy_vanna(): result = subprocess.run(['vanna', 'deploy'], capture_output=True, text=True) print(result.stdout) deploy_vanna() ``` 此段代码利用`subprocess`模块来启动一个新的进程并执行`vanna deploy`命令[^1]。 #### 利用API接口进行远程控制 当目标平台提供了RESTful API或其他形式的服务端口时,可以直接借助HTTP请求库如`requests`向这些接口发送指令完成部署工作。 ```python import requests url = "http://example.com/api/vanna/deploy" headers = {'Authorization': 'Bearer YOUR_ACCESS_TOKEN'} response = requests.post(url=url, headers=headers) if response.status_code == 200: print('Deployment successful.') else: print(f'Deployment failed with status code {response.status_code}.') ``` 上述实例展示了怎样构建POST请求给定URL地址以触发部署流程,并处理返回的状态码判断是否成功[^2]。 需要注意的是,以上两种方式都需要提前确认好所使用Vanna版本及其官方文档中关于部署的具体说明,确保采取的方法适用于当前场景。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个处女座的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值