Vanna-AI:让你的大模型说好SQL

图片

AI如何重塑SQL查询?揭秘Vanna-AI的革命性数据库助手

©作者|wy

来源|神州问学

引言

在当今的信息化时代,数据的高效管理和处理显得尤为重要。随着数据量的快速增长,传统的数据库管理方式已难以满足现代企业的需求。在这一背景下,Vanna-AI作为一款Text-to-SQL的智能工具,以其独特的功能和优势,为数据库管理带来了革命性的变革。

Vanna-AI是一款能够将自然语言查询转换为SQL语句的智能助手。它通过深度学习和自然语言处理技术,理解用户的查询意图,并自动生成相应的SQL语句。这一功能极大地简化了数据库查询的过程,提高了工作效率。

SQL作为数据库管理的核心语言,在数据检索、更新、删除等方面发挥着至关重要的作用。在日常工作中,无论是数据分析师、数据库管理员还是普通用户,都需要频繁地使用SQL来操作数据库。然而,手动编写SQL语句不仅耗时耗力,而且容易出错。这时,Vanna-AI的Text-to-SQL功能便显得尤为重要。

Vanna-AI在SQL生成领域的优势与价值主要体现在以下几个方面。首先,它能够快速准确地理解用户的查询意图,并生成符合要求的SQL语句,大大提高了工作效率。其次,Vanna-AI的智能化特性使得生成的SQL语句更加准确可靠,减少了因人为错误导致的数据问题。最后,Vanna-AI的易用性和可扩展性使得它能够满足不同用户的需求,为数据库管理带来了更加便捷和高效的解决方案。

SQL生成领域的现状与挑战

1、传统SQL生成方法的局限性

在当今数据驱动的时代,SQL(结构化查询语言)无疑是数据处理和分析的关键工具。然而,传统的SQL生成方法在面对日益复杂和多变的数据需求时,逐渐显露出其局限性。

首先,传统SQL生成方法通常依赖于人工编写,这需要数据库管理员或数据科学家具备深厚的SQL语言基础和丰富的实践经验。然而,对于非专业人士来说,编写复杂且高效的SQL查询语句是一项挑战,他们往往难以准确理解业务需求并将其转化为相应的SQL逻辑。

其次,传统SQL生成方法缺乏灵活性和可扩展性。随着数据量的不断增长和业务需求的不断变化,原有的SQL查询语句可能需要进行频繁的修改和更新。这不仅增加了工作量和维护成本,还可能导致数据一致性和准确性的问题。

此外,传统SQL生成方法在处理复杂查询和大数据集时,往往效率低下。由于SQL查询语句的执行需要数据库管理系统进行复杂的计算和排序操作,当数据量达到一定程度时,查询性能会显著下降。这不仅影响了数据分析的时效性,还可能导致资源浪费和成本增加。

2、市场需求与挑战

从市场需求的角度来看,随着企业数字化转型的深入,数据已经成为重要的战略资产。无论是大型跨国企业还是初创公司,都需要高效地处理和分析数据以支持其业务决策。因此,对能够自动生成SQL查询语句的工具和技术的需求日益增长。这些工具和技术可以帮助企业降低人工编写SQL的成本,提高数据处理和分析的效率,从而快速响应市场变化和业务需求。

与此同时,SQL生成领域也面临着诸多挑战。首先,数据环境的复杂性和多样性给SQL生成带来了困难。不同的数据库系统、数据结构和数据类型都需要不同的SQL语法和逻辑,这要求SQL生成工具必须具备高度的灵活性和可扩展性。其次,随着数据量的不断增长和业务需求的不断变化,SQL查询语句的复杂性和性能要求也在不断提高。传统的SQL生成方法往往难以应对这些挑战,需要借助更先进的技术和算法来优化查询性能和提高数据处理的准确性。

随着人工智能和机器学习技术的快速发展,SQL生成领域也迎来了新的机遇和挑战。一方面,AI技术可以帮助我们更好地理解数据和业务需求,从而生成更加准确和高效的SQL查询语句;另一方面,AI技术也可以帮助我们自动化和优化SQL生成过程,降低人工干预的成本和风险。然而,这也要求我们必须不断学习和掌握新的技术和知识,以适应不断变化的市场需求和技术挑战。

Vanna-AI的SQL生成原理

Vanna本质就是一个Python包,其核心在于RAG(检索增强)方法,通过检索增强的方式来构建Prompt,进而显著提高SQL查询生成的准确率。使得Vanna能够高效地帮助用户为数据库生成准确的SQL查询。

图片

图 1来源官网(原理图)

1、关键原理

模型训练:借助数据库的DDL语句、元数据(描述数据库自身数据的信息)、相关文档说明、参考样例SQL等,训练一个RAG“模型”。这一模型结合了embedding技术和向量库,使得数据库的结构和内容能够被高效地索引和检索。

语义检索:当用户输入自然语言描述的问题时,Vanna会从向量库里面检索,迅速找出与问题相关的内容。这些内容包括但不限于数据库的表结构、字段注释也就是DDL语句等信息,以及相关的SQL训练样例。

Prompt构建:检索到的相关信息会被组装进Prompt中,形成一个结构化的查询描述。这一Prompt随后会被传递给LLM(大型语言模型),用于生成准确的SQL查询。

2、工作流程

数据库准备:首先,Vanna-AI需要连接到用户希望查询的数据库,并获取数据库的元数据(DDL)。

训练数据收集:收集数据库相关的训练数据,包括建表语句(DDL)、文档、常用SQL语句及其对应的自然语言查询问题。这些数据将用于模型训练和推理时的上下文信息。

模型训练:使用收集到的训练数据对大型语言模型(LLM)进行微调或训练,使模型能够理解自然语言查询与SQL语句之间的映射关系。

用户输入:用户通过自然语言输入查询问题。

查询生成:Vanna-AI接收用户的自然语言查询问题,并从向量数据库中检索出相关的建表语句、文档、SQL问答对,这些将作为prompt的输入。生成与用户查询问题对应的SQL语句。

SQL执行:将生成的SQL语句发送到数据库执行,并获取查询结果。

结果反馈:将查询结果以可视化的形式(如表格、图表等)展示给用户,帮助用户更直观地理解数据。如果用户认为生成的SQL语句或查询结果不准确,可以对模型进行反馈,提供正确的SQL语句或查询结果,以便后续优化模型。

模型优化:根据用户的反馈,对LLM进行进一步的训练或微调,提高模型生成SQL语句的准确性和效率。同时,可以将用户提供的正确SQL语句和查询问题存储到向量数据库中,作为新的训练数据,用于后续模型的训练和推理。

持续迭代:随着用户的使用和反馈,Vanna-AI能够不断地学习和优化,提高自然语言查询转化为SQL语句的准确性和效率。

通过这样的工作流程,Vanna-AI能够为用户提供智能化的数据库查询服务,简化数据分析的过程,提高数据分析的效率和准确性。

Vanna-AI的扩展性和定制化

Vanna-AI的三个主要模块分别是数据库(DataBase),向量库(VectorDB),大模型(LLM)。默认情况下,Vanna-AI使用Open-AI和在线的向量库,只需要一个openai的key就可以开始使用

import vannafrom vanna.remote import VannaDefaultvn = 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 VannaFlaskAppVannaFlaskApp(vn).run()

扩展性

使用qwen模型进行演示。

#使用openai兼容qwen模型,ali云申请对应的参数client = OpenAI(base_url="***", api_key='***')
class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):def __init__(self, client=None, config=None):ChromaDB_VectorStore.__init__(self, config=config)OpenAI_Chat.__init__(self, client=client, config=config)
#向量库使用ChromaDB,使用简单,无需配置vn = MyVanna(client=client, config={"model": "qwen-7b-chat", })  # chatglm2-6b#连接mysql数据库vn.connect_to_mysql(host='127.0.0.1', dbname='***', user='***', password='***', port=3306)
# 训练语句只需要执行一次即可# vn.train(ddl="""对应表的ddl语句""")# 预训练# vn.train(question="查询的问题",sql="对应sql")# Vanna-AI提供的web页面from vanna.flask import VannaFlaskAppapp = VannaFlaskApp(vn)app.run()

运行成功后,Web界面如下图,我们可以看到已经训练过的数据集,DDL语句或者文档信息,也可以通过Add training手动添加训练数据。

图片

可以通过“new question”按钮进行问答,当返回的结果符合预期要求,可以点击play按钮,将对应的sql存储到向量库,提高模型准确率。这也就是为什么Vanna-AI可以不断提高准确率的一部分原因所在。

图片

定制化

当我们使用本地模型或者Vanna-AI未实现的大模型的时候,可以针对模型或者需求进行自定义开发。当然也可以通过OpenaAI Client代理实现。

class MyCustomLLM(VannaBase):def __init__(self, config=None):# Implement herepass@staticmethoddef system_message(message: str) -> dict:pass
@staticmethoddef user_message(message: str) -> dict:pass
@staticmethoddef assistant_message(message: str) -> dict:pass
def submit_prompt(self, prompt, **kwargs) -> str:# Implement here# See an example implementation here: https://github.com/vanna-ai/vanna/blob/main/src/vanna/mistral/mistral.py
class MyVanna(ChromaDB_VectorStore, MyCustomLLM):def __init__(self, config=None):ChromaDB_VectorStore.__init__(self, config=config)MyCustomLLM.__init__(self, config=config)vn = MyVanna()

Vanna-AI在SQL生成领域的优势

1、广泛的数据库支持:Vanna-AI可以连接到任何使用SQL的数据库,不论数据库的类型。这种广泛的兼容性使得它能够在各种数据库环境中工作,为用户提供了极大的灵活性。

2、自定义训练模型:用户可以根据自己的数据和需求训练Vanna-AI,使得它在转换问题为SQL语句时更准确。这种定制化的训练模型能够根据特定的数据集和用户偏好进行优化,从而提高了查询的准确性。

3、灵活的用户界面:Vanna-AI提供了多种界面选择,如Jupyter Notebook、Web应用、Slack等,以满足不同用户的需求。这种灵活的用户界面设计使得用户可以根据自己的使用习惯选择最适合自己的界面,提高了用户的使用体验。

4、数据安全和隐私保护:在处理查询时,Vanna-AI确保数据库内容不会发送到LLM或向量数据库,SQL执行在本地环境中进行。这种本地执行的方式保证了数据的安全性和隐私性,让用户无需担心数据泄露的风险。

5、自我学习和优化:Vanna-AI能根据用户的历史查询和反馈学习和改进,使得未来的查询更加准确。这种自我学习和优化的能力使得Vanna-AI能够不断地适应和满足用户的需求,提高了其适应性和可扩展性。

6、适用于非技术用户:对于不懂SQL的用户,Vanna-AI提供了一种简单直观的方式来与数据库交互。这使得即使是对数据库不熟悉的用户也能轻松地使用Vanna-AI进行查询操作,降低了使用门槛。

效果评估与对比

训练次数:20个问题*3(3个模型)

图片

图 2来源官方文档

图片

图 3 来源官方文档

很明显,最大的区别不在于大模型的类型,而在于为大模型提供的上下文的类型(例如使用的训练数据)。当通过上下文类型来观察时,准确率从3%到80%左右。所以当我们使用Vanna-AI的时候效率也会越来越高,因为Vanna-AI可以把对应的问题和sql当做训练数据,提高准确率。

总结与展望

随着人工智能技术的不断发展,Vanna-AI的未来充满了无限可能。我们可以期待Vanna-AI在准确性方面取得更大的突破。通过收集更多的训练数据并优化模型算法,提高Vanna-AI的SQL生成准确性,使其能够更好地满足用户的需求。

我们可以探索将Vanna-AI与其他技术结合使用,以进一步提升其性能。例如,我们可以将Vanna-AI与数据库管理系统(DBMS)进行集成,实现更高效的查询执行和结果返回。此外,我们还可以将Vanna-AI与数据可视化工具结合使用,使用户能够更直观地查看和分析查询结果。

总之,Vanna-AI作为Text-to-SQL的智能工具,在数据库查询领域展现出了巨大的潜力。随着技术的不断进步和应用场景的拓展,我们有理由相信Vanna-AI将在未来发挥更加重要的作用。

参考文档

文档链接:

https://vanna.ai/blog/ai-sql-accuracy.html

https://vanna.ai/blog/vanna-open-source.html

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值