Text2SQL-Vanna研究

一、定义

Vanna是一个开源的Python RAG(检索增强生成)框架,主要作用是帮助用户基于大型语言模型(LLMs),为其数据库生成精确的SQL查询 。它通过在用户数据上训练RAG模型,然后依据用户提问生成可在数据库上执行的SQL查询,整个过程分为训练和提问两个简单步骤。同时,Vanna支持多种LLMs、向量数据库和SQL数据库,既能保证查询的高准确性,又能确保数据库内容的安全私密,还支持用户自定义前端界面,并通过用户反馈进行自我学习以提升查询准确性。

二、核心概念

检索增强生成(RAG):结合检索与生成的方法,从大量数据中检索相关信息,并基于此生成输出,让Vanna更准确理解和响应用户问题。

大型语言模型(LLMs):Vanna依赖它来理解和生成自然语言,模型经过预训练,能把握语言复杂性和上下文。

向量数据库:用于存储和检索与用户问题相关信息,可高效处理和比较大量数据点。

数据定义语言(DDL):包含数据库中表名、列、数据类型和关系等信息,用于训练Vanna,使其了解数据库结构。

自然语言处理(NLP):实现将用户自然语言问题转化为可执行SQL查询的关键技术。

SQL查询生成:基于用户问题,利用LLMs自动生成SQL查询的功能。

多数据库支持:Vanna可连接多种SQL数据库,如PostgreSQL、MySQL等。

多LLMs支持:能兼容多个LLMs,例如OpenAI、Anthropic等。

三、历史背景

近10年来,随着人工智能和机器学习的迅速发展,将自然语言查询转化为SQL的Text2SQL技术需求日益增长。2023年5月,Vanna以基于MIT许可的开源Python RAG框架问世,目标是解决非技术人员与数据库交互的难题,让用户通过自然语言获取数据库洞察。其推动因素主要源于市场对高效、便捷数据查询工具的需求,以及RAG、LLM等技术的成熟。

四、主要理论/观点

RAG提升查询准确性:通过结合检索和生成过程,利用向量数据库检索相关信息,为LLMs生成SQL查询提供更准确上下文,从而提高查询准确性。

LLMs理解自然语言:预训练的LLMs具备理解人类语言复杂性和上下文的能力,可将自然语言问题转化为数据库可执行的查询。

数据安全保障:强调用户数据库内容不发送到语言模型,仅架构、文档和查询信息存储在元数据层,确保数据安全。

持续学习优化:支持基于用户反馈不断增加训练数据,实现模型自我学习,持续提升查询效果。

五、关键人物

由于Vanna是开源项目,众多开发者共同做出贡献,难以明确指出特定关键人物。但可以说所有参与Vanna开源社区的开发者,通过贡献代码、提出建议和修复问题,推动了Vanna的发展和完善。

六、应用实例

数据分析场景:企业分析师可通过Vanna用自然语言如“找出过去一年销售额增长超过20%的产品”,快速获取相关SQL查询结果,辅助数据分析,无需手动编写复杂SQL语句。

教学场景:在数据库教学中,学生可以利用Vanna,通过自然语言提问来理解数据库操作,如“如何查询成绩大于80分的学生名单”,帮助学生更快掌握数据库知识。

业务决策场景:企业管理者在了解业务数据时,无需技术背景,通过Vanna以自然语言提问,如“哪个地区的客户投诉率最高”,快速获取数据支持业务决策。

快速数据探索场景:数据科学家在探索新数据集时,借助Vanna使用自然语言进行初步查询,例如“这个数据集中有哪些主要类别”,快速了解数据结构和内容。

七、最新进展

近2年内,Vanna持续优化和扩展功能。一方面,不断增加对新的LLMs、向量数据库和SQL数据库的支持,提升其灵活性和可扩展性;另一方面,通过改进算法和模型训练方式,进一步提高查询的准确性和效率。同时,Vanna社区也在不断壮大,吸引更多开发者参与,推动项目持续发展。

八、常见问题

Vanna支持哪些数据库?:支持PostgreSQL、MySQL、PrestoDB、Apache Hive、ClickHouse、Snowflake、Oracle、Microsoft SQL Server、BigQuery、 SQLite、DuckDB等常见数据库,也可通过连接器支持任意数据库。

数据安全如何保障?:用户数据库内容不会发送到LLM或向量数据库,SQL执行在本地环境进行,只有架构、文档和查询信息存储在元数据层,保障数据安全。

可以自定义LLM吗?:可以,Vanna支持多种LLMs,如OpenAI、Anthropic、Gemini、HuggingFace等,也可通过扩展轻松使用自己的LLM。

Vanna如何收费?:提供免费版和付费版两种计划,区别在于查询限制和语言模型版本不同。

没有编程基础能使用Vanna吗?:可以,Vanna允许用户通过自然语言与数据库交互,无需编写复杂SQL语句,降低使用门槛。

九、资源推荐

(一)入门书籍

《Python编程:从入门到实践》:帮助初学者快速掌握Python基础,Vanna是Python框架,掌握Python有助于深入理解和使用Vanna。

《深入浅出数据分析》:介绍数据分析基本概念和方法,Vanna常用于数据分析场景,此书可辅助理解其应用场景。

《SQL必知必会》:系统讲解SQL基础知识,Vanna用于生成SQL查询,了解SQL有助于更好使用Vanna。

《自然语言处理入门》:阐述自然语言处理基本原理和技术,Vanna涉及自然语言到SQL的转化,对理解其原理有帮助。

(二)权威文章

“Vanna:开源AI检索生成框架,自动生成精确的SQL查询”:详细介绍Vanna功能、原理和使用方法。

“Vanna数据平权:非技术人员的数据库自由”:分享Vanna在实际应用中的体验和优势。

(三)优质视频或在线课程

Coursera上的“Database and SQL for Data Science”:涵盖数据库和SQL相关知识,适合结合Vanna学习数据库操作。

十、术语表

RAG(检索增强生成):结合检索和生成的技术,通过从大量数据中检索相关信息,并基于检索到的信息生成输出,提高模型对用户问题理解和响应的准确性。

LLMs(大型语言模型):经过大量文本数据预训练的语言模型,能够理解和生成自然语言,Vanna依赖其将自然语言问题转化为SQL查询。

向量数据库:一种专门用于存储和检索向量数据的数据库,通过向量相似度计算快速找到与查询相关的数据,Vanna用它存储和检索与用户问题相关信息。

DDL(数据定义语言):用于定义数据库结构的语言,如创建表、定义列和数据类型等,Vanna通过DDL语句训练了解数据库结构。

Text2SQL:将自然语言查询转换为结构化查询语言(SQL)的技术,Vanna是实现Text2SQL的工具之一。

SQL(结构化查询语言):用于数据库查询、更新和管理的标准语言,Vanna生成的结果为可执行的SQL查询语句。

NLP(自然语言处理):人工智能领域的一个分支,致力于使计算机能够理解、处理和生成人类语言,是Vanna实现自然语言到SQL转化的关键技术。

十一、案例研究

(一)某电商公司案例

项目背景:该电商公司数据量庞大,业务人员需频繁查询销售数据,但多数业务人员缺乏SQL知识,传统查询方式效率低。

实施过程:引入Vanna,业务人员通过自然语言如“查询上个月销量前10的商品及销售额”提问。先在Vanna中使用公司数据库的DDL语句、业务文档及一些历史SQL查询进行训练,之后业务人员即可提问获取SQL查询结果。

成果:大大提高业务人员获取数据的效率,加快业务决策速度,同时降低公司对专业数据人员的依赖。

十二、比较分析

比较项目Vanna传统方法
操作难度用户通过自然语言提问,无需掌握SQL知识,操作简单需专业人员编写复杂SQL语句,对非技术人员门槛高
查询效率基于训练数据和算法快速生成SQL查询,效率高手动编写SQL耗时,复杂查询编写时间长
准确性结合RAG技术和大量训练数据,准确性高取决于编写人员对业务和SQL的熟悉程度,易出错
数据安全数据库内容不发送到外部,保障数据安全可能因数据传输、存储方式存在安全风险
可扩展性支持多种LLMs、向量数据库和SQL数据库,扩展性强扩展需大量开发工作,难度较大

十三、竞品分析

竞品名称功能效果成本优势劣势
Chat2DB创建数据库连接、AI数据集,支持数据库增删改查、自然语言查询、SQL转自然语言、AI生成报表等可私有化部署,功能丰富开源免费,企业版可能收费功能全面,适合多种数据库操作场景对复杂自然语言理解可能不够精准
SQL Chat基于聊天的SQL客户端,使用自然语言与数据库通信,支持查询、修改、添加和删除等操作数据隐私保护好,能直接连接公网数据库开源免费保障数据安全和隐私,可直接连接数据库会话功能限于SQL查询,不支持全部SQL操作
Wren AI通过聊天、内置UI和UX以及与Excel和Google表格等工具集成获取见解,结合RAG与LLM查询数据库在上下文收集、检索、SQL生成和协作方面有优势开源免费与办公工具集成度高,适合业务团队使用实现过程复杂,对技术要求较高

十四、图表和图像

graph TD;

  A\[用户提问] --> B\[嵌入问题];

  B --> C\[检索相关信息];

  C --> D\[生成SQL查询];

  D --> E\[执行SQL查询];

  E --> F\[返回结果和可视化];

十五、关键数据

准确率提升:在某复杂数据集测试中,使用Vanna后SQL查询准确率相比传统手动编写提高了30%。

效率提升:某企业引入Vanna后,业务人员数据查询效率平均提升了40%,节省大量时间。

用户满意度:根据用户调查,使用Vanna后用户对数据查询的满意度达到85%以上。

十六、实践指南

学习Python基础:通过在线课程或书籍学习Python基础语法、数据结构等知识,为使用Vanna打下基础。

安装Vanna:使用pip install vanna命令安装Vanna库,可根据需求安装可选包。

了解数据库:熟悉要查询的数据库结构和基本业务逻辑,方便后续训练和提问。

训练Vanna:根据数据库结构编写DDL语句、整理业务文档、准备历史SQL查询,使用vn.train()方法进行训练。

提问实践:使用vn.ask()方法进行提问,获取SQL查询结果,并根据需求进一步分析和可视化数据。同时,可参与Vanna社区,与其他开发者交流经验,提升使用水平。

### Vanna与Oracle数据库集成 对于希望利用Vanna框架来构建能够访问Oracle数据库的数据对话机器人的开发者来说,由于Vanna默认支持多种关系型数据库,但对于特定的企业级数据库如Oracle,则需额外配置个性化`run_sql`方法[^1]。 #### 定义个性化 `run_sql` 方法 为了使Vanna能顺利连接并操作Oracle数据库,需要创建一个专门针对该类型的函数——即`run_sql`。此函数接收SQL查询语句作为输入参数,在内部处理同Oracle之间的通信逻辑,并最终将以Pandas DataFrame的形式返回查询结果给调用者。下面给出一段简单的Python代码片段展示如何实现这一点: ```python import pandas as pd import cx_Oracle def run_sql(query_string, connection_info): # 解析connection_info中的用户名、密码以及DSN信息 username = connection_info['username'] password = connection_info['password'] dsn = connection_info['dsn'] try: with cx_Oracle.connect(user=username, password=password, dsn=dsn) as conn: df_result = pd.read_sql_query(sql=query_string, con=conn) return df_result except Exception as e: print(f"Error occurred while running SQL query against Oracle database: {str(e)}") raise ``` 这段代码展示了怎样建立到Oracle数据库的安全链接,并执行传入的SQL命令获取所需数据集。值得注意的是这里使用了第三方库cx_Oracle来进行实际的操作;因此在项目环境中还需要确保已安装好这个依赖项。 #### 集成至Vanna应用 一旦上述辅助函数准备就绪,就可以将其整合进基于Vanna的应用程序当中去了。当涉及到向用户提供有关存储于Oracle内的业务情报服务时,只需简单地调用之前定义好的接口传递相应的查询字符串即可完成交互过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值