Vanna-ai -基于RAG的TextToSql实现方案

官方连接:Vanna.AI - Personalized AI SQL Agent

1.背景

基于大模型的TextToSql的关键为给大模型提供正确有效的数据库信息及问题,以提升大模型生成sql的正确率。database_info + question形成prompt,但是实际中通常会遇到一个问题,生产中的数据库结构之复杂,通常一个数据库可能200-500个表,那么prompt通常容不下这么多信息?这是面临的主要问题:如何在有效的prompt长度限制之内传递给大模型有效的信息辅助生成sql?

选表!

让大模型根据问题自动选择相关的表信息组合形成prompt。

完全可以借助RAG完成自动选表!将数据库相关信息存入向量知识库,每次查询检索相关表信息形成prompt,可以很好的解决上述问题。Vanna-ai正是借助RAG增强了大模型SQL的生成能力。

Vanna 使用一种称为 LLM(大型语言模型)的生成式人工智能。简而言之,这些模型是在大量数据(包括一堆在线可用的 SQL 查询)上进行训练的,并通过预测响应提示中最有可能的下一个单词或"标记"来工作。Vanna 优化了提示(通过向量数据库使用嵌入搜索)并微调 LLM 模型以生成更好的 SQL。

Vanna 正在使用和试验许多不同的LLM,以获得最准确的结果。OpenAI 的 GPT 模型通常表现出色,但有时 Google 的 Bard、Meta 的 LLAMA 和 Falcon 模型表现最好。

2.关于Vanna-ai

从本质上讲,Vanna 是一个 Python 包,它使用检索增强来帮助您使用 LLM 为数据库生成准确的 SQL 查询。

Vanna 的工作过程分为两个简单步骤 :

  • 在您的数据上训练 RAG"模型"-本质上是基于文档(建表语句、相关sql查询、表或者字段的comment)作为资料,进行Embedding后存入向量库
  • 然后提出问题,基于这些问题去向量库检索相关信息,这些问题传给大模型返回 SQL 查询,这些查询可以设置为在您的数据库上自动运行。

3.工作原理

当你向 Vanna 提出问题时,会执行以下过程

  1. 我们首先在我们的训练集中搜索过去提出过的类似问题。
  2. 如果我们发现类似的问题,我们会将这些问题中经过验证的 SQL 传递到我们的模型。
  3. 否则,我们会传入 DDL、文档或引导查询。 -本质上是一个检索增强的过程。
  4. 然后,您的架构特有的 Vanna 模型会生成 SQL。
  5. 然后我们运行 SQL 来验证它。如果经过验证,它将进入训练数据。
  6. 否则,分析师可以更正 SQL 并将其放入训练数据中。

随着时间的推移,Vanna 不断提高对您的模式的理解,并正确回答越来越多的问题。

4.Vanna-ai简单案例

python 复制代码
import vanna
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-3.5-turbo'})

# 训练向量库
vn.train(ddl="""
    SELECT customer_name, SUM(sales_amount) as total_sales
FROM sales_wn
GROUP BY customer_name
ORDER BY total_sales DESC
LIMIT 10;
""")

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


# 询问问题
vn.ask("What are the top 10 customers by sales?")
相关推荐
大千AI助手39 分钟前
Hoeffding树:数据流挖掘中的高效分类算法详解
人工智能·机器学习·分类·数据挖掘·流数据··hoeffding树
新知图书1 小时前
大模型微调定义与分类
人工智能·大模型应用开发·大模型应用
山烛1 小时前
一文读懂YOLOv4:目标检测领域的技术融合与性能突破
人工智能·yolo·目标检测·计算机视觉·yolov4
大千AI助手1 小时前
独热编码:分类数据处理的基石技术
人工智能·机器学习·分类·数据挖掘·特征工程·one-hot·独热编码
钱彬 (Qian Bin)2 小时前
项目实践4—全球证件智能识别系统(Qt客户端开发+FastAPI后端人工智能服务开发)
人工智能·qt·fastapi
钱彬 (Qian Bin)2 小时前
项目实践3—全球证件智能识别系统(Qt客户端开发+FastAPI后端人工智能服务开发)
人工智能·qt·fastapi
Microsoft Word2 小时前
向量数据库与RAG
数据库·人工智能·向量数据库·rag
2401_836900333 小时前
YOLOv5:目标检测的实用派王者
人工智能·计算机视觉·目标跟踪·yolov5
没有梦想的咸鱼185-1037-16633 小时前
AI Agent结合机器学习与深度学习在全球气候变化驱动因素预测中的应用
人工智能·python·深度学习·机器学习·chatgpt·数据分析
在云上(oncloudai)3 小时前
AWS Data Exchange:概述、功能与安全性
人工智能·云计算·aws