Vanna 介绍
欠了很久的分享,今天晚上终于还了。群友一直催自然语言转SQL都有哪些方案,我说那我讲讲 Vanna 吧。而且 Vanna 也跟 RAG 有剪不断、理还乱的关系。
大家好,我是九析,九析带你轻松完爆。
Vanna 是一款开源 text2sql AI 工具,专注将自然语言转为 SQL 语句,从而简化数据库查询。

但通过探索,我意识到 Vanna 远不止一个文本转 SQL 工具简单。至于为什么,我们后面慢慢说。
目前 Vanna 在 Github 已收获 18K 星标。


02Vanna 使用场景
Vanna 的使用场景主要有:
  • 不懂数据库查询语言的数据分析师和业务人员也可以查询数据库
  • 企业构建内部智能数据查询助手
  • 开发者可以快速搭建自然语言数据库接口

03Vanna 特点
Vanna 特点总结下来有以下五个:
  • 自然语言查询转 SQL用户通过自然语言提问,Vanna 会自动转成 SQL 查询,并可直接在数据库上执行,返回查询结果和可视化图表
  • 基于 RAG 技术Vanna 利用 RAG 框架,将数据库元数据、业务文档以及已有的 SQL 查询等信息嵌入进向量数据库,通过 LLM 进行语义检索和生成,保证生成 SQL 的准确性和上下文相关性
  • 可微调支持多种 LLM、向量数据库和 SQL 数据库,用户可以针对数据库进行微调,这是一大优势。

  • 开源且免费Vanna 采用 MIT 许可开源,提供 Python 包和丰富文档,适合开发者和企业使用
  • 安全私密SQL 查询在本地数据库执行,数据不会泄露给外部模型,保障数据安全
此外,Vanna 会持续适应新数据。因此,你用得越多,它就表现得越好。

04Vanna 输出
当用户用文本提示查询数据库,Vanna 会产生四个输出:

  • 自然语言查询语句转化的 SQL 语句
  • SQL 语句执行结果,以 Pandas DataFrame 表示(简单说明: DataFrame 是一种数据结构,类似 excel 表格)
  • 查询结果的可视化表示(比如柱状图、折线图等)
  • 其他相关问题推荐(简单理解就是:猜你想查)
Vanna 屌不屌?不对,应该说 Amazing!

05Vanna 工作流程
Vanna 的工作流程主要分为两个阶段:
  • 训练模型阶段
  • 提问模型阶段


  • 训练模型阶段:训练一个 RAG 模型。通过将数据库元数据(DDL)业务文档已有 SQL ,通过 train() 接口,训练一个 RAG 模型。
  • 提问模型阶段用户用自然语言提出问题,Vanna 通过在 RAG 模型中进行语义检索,再通过大模型生成对应 SQL 语句,并传给数据库引擎执行
最终执行结果通过多种前端展示方式,方便用户查看和分析数据。

06Vanna 快速开始
6.1 创建虚拟环境
使用 conda 创建虚拟环境,目的是防止与其他项目相互干扰,起到环境隔离的目的。
  1. conda create -n vanna python=3.11
复制代码

6.2 激活虚拟环境
使用 conda activate 激活虚拟环境。
  1. conda activate vanna
复制代码

6.3 创建工作目录
使用 mkdir 指令创建工作目录 vanna。

  1. mkdir vanna
  2. <div>cd vanna</div>
复制代码

6.4 安装 Vanna
使用 pip 指令安装 vanna,指令执行成功,就在本地成功安装了 Vanna,是不是有点简单?
  1. pip install vanna
复制代码
6.5 免费获取 Vanna 密钥
本地安装 Vanna 成功后,就可以配置自己的模型和数据库了。但为了快速上手 Vanna ,我们可以先在 Vanna 官方在线体验自然语言检索数据库的能力。体验前,需要到官网申请 Vanna 密钥。免费获取密钥的网址如下:https://vanna.ai/account/login?next=/account/profile

你需要提供自己的邮箱进行申请,申请成功后,进入到导航页面,就可以看到你自己的 api_key。

请妥善保管好这个 API_KEY,因为后面我们写代码的时候需要用到。

6.6 选择模型
从前面的 Vanna 工作流程可知,在查询数据库之前,必须使用一个模型。这个模型可以是:
  • 一个你已经微调过的现有模型
  • 一个你打算进行训练的新模型
  • 一个公开发布的模型

我们这里使用的是 Vanna 在线提供的 “chinook” 模型,该模型已经在音乐销售数据集上进行了微调。

6.7 选择数据库
官方不仅给我们准备好了已微调好的模型,还贴心提供了 SQLite 文件数据库。SQLite 是一个轻量级的嵌入式关系型数据库管理系统,它被设计为一个自包含的、无服务器的、零配置的数据库引擎,基于文件系统。
优点:简单、高效
缺点:并发、大数据量支持不好
官方案例提供的是销售业务,数据库的设计如下:


6.8 查询数据库
接下面开始代码编写环节,我们使用 Vanna 提供的 ask 接口,通过自然语言进行查询。
最终完整代码如下:
  1. <div data-page-id="ZtmOdoQ9Ho3f5KxejWycC5OGnic" data-lark-html-role="root" data-docx-has-block-data="false"><pre class="ace-line ace-line old-record-id-ODvIdVcEJorkhRxRWXlcOEkCnAf"><code class="language-Python" data-lark-language="Python" data-wrap="false">from vanna.remote import VannaDefault
  2. vn = VannaDefault(model='chinook', api_key='391aaac8c63549cb8d440a24c824fa90')
  3. vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')
  4. vn.ask('What are the top 10 artists by sales?')

  5. from vanna.flask import VannaFlaskApp
  6. VannaFlaskApp(vn).run()</code></pre></div><span data-lark-record-data="{&quot;rootId&quot;:&quot;ZtmOdoQ9Ho3f5KxejWycC5OGnic&quot;,&quot;text&quot;:{&quot;initialAttributedTexts&quot;:{&quot;text&quot;:{&quot;0&quot;:&quot;from vanna.remote import VannaDefault\nvn = VannaDefault(model='chinook', api_key='391aaac8c63549cb8d440a24c824fa90')\nvn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')\nvn.ask('What are the top 10 artists by sales?')\n\nfrom vanna.flask import VannaFlaskApp\nVannaFlaskApp(vn).run()&quot;},&quot;attribs&quot;:{&quot;0&quot;:&quot;*0|6+78*0+n&quot;}},&quot;apool&quot;:{&quot;numToAttrib&quot;:{&quot;0&quot;:[&quot;author&quot;,&quot;7400776748062982146&quot;]},&quot;nextNum&quot;:1}},&quot;type&quot;:&quot;text&quot;,&quot;referenceRecordMap&quot;:{},&quot;extra&quot;:{&quot;channel&quot;:&quot;saas&quot;,&quot;isEqualBlockSelection&quot;:true,&quot;pasteRandomId&quot;:&quot;693186e9-ad04-43ed-8e6a-009ce4403cf5&quot;,&quot;mention_page_title&quot;:{},&quot;external_mention_url&quot;:{}},&quot;isKeepQuoteContainer&quot;:false,&quot;isFromCode&quot;:true,&quot;selection&quot;:[{&quot;id&quot;:107,&quot;type&quot;:&quot;text&quot;,&quot;selection&quot;:{&quot;start&quot;:0,&quot;end&quot;:283},&quot;recordId&quot;:&quot;ODvIdVcEJorkhRxRWXlcOEkCnAf&quot;}],&quot;payloadMap&quot;:{},&quot;isCut&quot;:false}" data-lark-record-format="docx/text" class="lark-record-clipboard"></span>
复制代码

执行结果分为三部分:
  • 产生详细的 SQL 提示词
  • 大模型产生的 SQL 执行语句
  • 查询数据库产生的最终结果

Done!  完成!如果需要,你也可以完全训练自己本地模型。我们下节课会具体讲述实现过程。

07相关资料


来自圈子: 浙江理工大学AIGC

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

© 2001-2025 XPUAI算力平台