Vanna数据平权:非技术人员的数据库自由

上一篇文章我们简单介绍了Vanna.AI - Personalized AI SQL Agent,一篇基于RAG的自然语言生成SQL的工具。 今天我们来一起深入学习它。假如你和我一样在准备24年的春招,在前端全栈外,再准备一些AIGC的内容是非常有必要的。24年是AI红利年,AIGC+各种岗位大厂机会会多些,同意的同学请点赞。

前言

  Vanna为Text2SQL这一AIGC需求,提供了非常棒的开发套件,我感觉要离不开它了。如果您还没有注册Vanna, 请先看Vanna.AI - Personalized AI SQL Agent。现在让我们从app.vana.ai页面开始,利用Vanna开发AIGC SQL应用。

chinook

  Vanna 默认使用的LLM是chinook,点击会进入到默认的chat robot页面。

  我们先来分析下,左侧是一些示例问题;右上角的Current Model菜单可以切换其它LLM;默认选中的是Chat聊天页,旁边的Training可以加载我们要训练的数据,这非常方便。Users是针对用户的管理,Connections是针对连接的管理

架构图

  上面是在Vanna github主页上显示的架构图。Vanna 支持Any SQL Database(多种数据库),也支持Any Vector Storage(向量数据库)。也支持多种大语言模型,甚至对接多种AIGC前端(Flask/Streamlit/Slack...)。从这张图,我们可以看出Vanna是多么的强大!

工作方式

  Vanna生效分为两步,先是用户提交数据库训练(RAG应用中的上传文件),第二步是问答。

  • 数据训练

  我们交给Vanna RAG应用的数据库文件可以是DDL、文档、也可以给些参考的SQL查询(few shots),这些数据会被Embedding(LLM需要),然后存储在向量数据库中。

  • 问答

  用户提出的问题首先也会被Embedding,找到相关的DDL/文档/或参考的SQL(相似计算),构建提示词,发送给LLM, 最后由LLM生成SQL,返回用户。

训练

  • 安装

    pip install vanna

  • 给Vanna 自定义大模型或向量数据库

python 复制代码
# LLM 使用的是 OpenAI ,向量数据库是ChromaDB

from vanna.openai.openai_chat import OpenAI_Chat
from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore

class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
    def __init__(self, config=None):
        ChromaDB_VectorStore.__init__(self, config=config)
        OpenAI_Chat.__init__(self, config=config)

vn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})
  • 训练
  1. 根据DDL 声明进行训练
ini 复制代码
vn.train(ddl="""
    CREATE TABLE IF NOT EXISTS my-table (
        id INT PRIMARY KEY,
        name VARCHAR(100),
        age INT
    )
""")

   DDL声明包含了表名、字段名、数据类型和数据表间的关系。

  1. 根据文档进行训练

   我们也可以用文档描述数据

ini 复制代码
vn.train(documentation="Our business defines XYZ as ...")
  1. 根据SQL训练
ini 复制代码
vn.train(sql="SELECT name, age FROM my-table WHERE name = 'John Doe'")

  当我们加入sql 进行训练,这些sql即可以做为few shots,又可以提供DDL上下文,提供SQL信息。

  • 提问
arduino 复制代码
vn.ask("What are the top 10 customers by sales?")

   Vanna 返回SQL:

vbnet 复制代码
SELECT c.c_name as customer_name,
        sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales
FROM   snowflake_sample_data.tpch_sf1.lineitem l join snowflake_sample_data.tpch_sf1.orders o
        ON l.l_orderkey = o.o_orderkey join snowflake_sample_data.tpch_sf1.customer c
        ON o.o_custkey = c.c_custkey
GROUP BY customer_name
ORDER BY total_sales desc limit 10;

   如果数据库连接了,我们将得到以下数据:

   Vanna 连数据表都帮我们考虑好了。

总结

  • 了解Vanna的架构和工作原理
相关推荐
博图光电4 分钟前
Libra 27105相关技术参数
人工智能·数码相机
302wanger8 分钟前
和raft.build一起叨逼叨
aigc
浮链序16 分钟前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm
IT_陈寒29 分钟前
SpringBoot自动配置差点让我加班到凌晨
前端·人工智能·后端
yumgpkpm42 分钟前
Acceldata ODP(Open Data Platform)3.3.6.4(RHEL9)保姆级完整安装手册
大数据·人工智能·hive·hadoop·kafka·hbase·cloudera
程序员cxuan1 小时前
腾讯又来一王炸,开源版 WorkBuddy 太夯了!
人工智能·后端·程序员
邓工说电1 小时前
智慧断路器安全吗?数据加密、离线保护与合规认证全解读
大数据·数据库·人工智能·智能断路器·炜晔科技
阿里云大数据AI技术1 小时前
Lance 数据检索怎么选,当然阿里云 Milvus 向量湖
人工智能
出海客1 小时前
跨境电商多语言客服知识库怎么建:资料结构、检索边界与人工升级
大数据·人工智能
xsd202411181 小时前
从自主导航到视觉读表:一台工业巡检机器人的全栈技术链路拆解
人工智能