综合介绍
Vanna是一个MIT许可的开源Python框架,专注于通过RAG(检索增强生成)技术生成SQL查询。用户可以通过训练RAG模型,将其应用于自己的数据,然后提出问题,Vanna会返回相应的SQL查询。这些查询可以自动在数据库中运行,简化了复杂的数据库操作。Vanna支持多种大型语言模型(LLM)和向量存储解决方案,适用于各种数据库,如PostgreSQL、MySQL、Snowflake等。
功能列表
- SQL生成:通过自然语言生成精确的SQL查询。
- RAG模型训练:用户可以训练自己的RAG模型以适应特定数据。
- 多LLM支持:兼容OpenAI、Anthropic、HuggingFace等多种LLM。
- 多向量存储支持:支持AzureSearch、PineCone、ChromaDB等向量存储。
- 多数据库支持:兼容PostgreSQL、MySQL、Snowflake等多种数据库。
- 用户界面:提供Jupyter Notebook、Streamlit、Flask等多种用户界面。
使用帮助
安装流程
- 安装Vanna:使用pip安装Vanna。
pip install vanna
- 安装可选包:根据需要安装其他可选包,具体请参考文档。
使用流程
- 导入Vanna:根据所使用的LLM和向量数据库导入相应模块。
from vanna.openai_chat import OpenAI_Chat
from vanna.chromadb 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-...'})
- 训练RAG模型:根据需要运行训练命令。
vn.train(ddl_statements)
- 生成SQL查询:提出问题,Vanna会返回相应的SQL查询。
sql_query = vn.ask("给我所有客户的名字")
详细功能操作
- SQL生成:用户可以通过自然语言输入问题,Vanna会自动生成相应的SQL查询。例如,输入“给我所有客户的名字”,Vanna会生成相应的SQL查询语句。
- RAG模型训练:用户可以根据自己的数据训练RAG模型,提升SQL生成的准确性。训练过程包括提供DDL语句,Vanna会根据这些语句了解数据库的结构和关系。
- 多LLM支持:Vanna兼容多种大型语言模型,用户可以根据需要选择合适的模型进行SQL生成。
- 多向量存储支持:Vanna支持多种向量存储解决方案,用户可以根据需要选择合适的存储方式。
- 多数据库支持:Vanna兼容多种数据库,用户可以根据自己的数据库类型进行配置和使用。
- 用户界面:Vanna提供多种用户界面,用户可以选择Jupyter Notebook、Streamlit、Flask等界面进行操作,方便快捷。
示例代码
以下是一个完整的示例代码,展示了如何使用Vanna生成SQL查询:
from vanna.openai_chat import OpenAI_Chat
from vanna.chromadb 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-...'})
# 训练RAG模型
vn.train(ddl_statements)
# 生成SQL查询
sql_query = vn.ask("给我所有客户的名字")
print(sql_query)
什么是 SQL 生成中的 Function RAG?
Vanna 很高兴地推出 SQL 生成中的一项突破性功能:Function RAG (检索增强生成)。这项新的可选实验性功能旨在增强 SQL 生成的一致性和确定性,以满足我们用户的众多请求。
什么是 Function RAG ?
Function RAG 将传统的 Question-SQL 训练对转换为可调用的模板(又名函数/工具)。然后,大语言模型 (LLM) 调用这些模板来生成 SQL 查询和任何相关的后处理代码(如图表代码)。至关重要的是,当使用 Function RAG 时,大语言模型 (LLM) 仅决定要使用的 SQL 模板以及需要提供的任何参数。这种方法不仅确保了更一致的输出,而且还显着加快了 SQL 生成过程。
我们正在不同的域和品牌下发布 Function RAG API,以将其与核心开源 Python 包区分开来。
Function RAG 的主要特性
- 基于模板的 SQL 生成:通过将训练对转换为模板,Function RAG 确保生成的 SQL 既准确又与用户的查询相关。
- 增强的安全性:Function RAG 减少了提示注入和提示逃逸,确保 SQL 生成过程免受外部操纵。
- 用户特定的查询:用户现在可以在查询中传递诸如用户 ID 之类的信息,而无需担心此数据被覆盖的风险。这允许安全有效地执行个性化问题,例如“我最近的 10 个订单是什么?”。
- 集成图表代码生成:除了 SQL 之外,Function RAG 还处理图表代码的生成,从而可以在单个请求中生成 SQL 及其相应的可视化代码。
- 多语言支持:该功能可通过 GraphQL API 访问,使其不仅可以从 Python 中使用,还可以从任何编程语言中使用。这为集成到各种后端(包括 Ruby on Rails、.NET 等框架)开辟了可能性。
实际应用
例如,以下是一些示例函数:
当您提出问题时,vn.get_function(question=...)<span> </span>
将找到最合适的函数,并使用大语言模型 (LLM) 填写必要的参数。
如果要将问题限定在特定用户的范围内,可以使用 vn.get_function(question=..., additional_data={"user_id": ...})<span> </span>
方法。这将确保 user_id<span> </span>
参数被确定性地设置。
要创建新函数,如果您是手动操作,可以使用 vn.create_function(...)<span> </span>
方法,也可以使用内置的 Web 应用程序来执行此操作。
手动创建
vn.create_function(question=..., sql=..., plotly_code=...)
Web 应用程序函数创建
Web 应用程序有一个新按钮,允许您选择是将结果训练为原始的 Question-SQL 对,还是将结果训练为函数。Function RAG 将自动从问题中提取看起来像参数的内容,并使其可用作函数参数。
何时使用
如果您有最终用户提出类似问题的变体,并且您只希望用户能够运行由您的工程团队手动批准的特定类型的分析,那么 Function RAG 是确保用户只能运行已批准分析的好方法。
限制为已批准的分析有助于最终用户确信他们看到的数据是正确的,并且是以正确的方式查看数据。如果您将其集成到 SaaS 应用程序中,这使您可以将其交到内部业务用户或最终用户手中。
由于 Function RAG 提供了速度上的改进,任何用户都可以从中受益。但是,对于数据分析师而言,当您执行大量训练数据中不存在的新颖分析时,您可能希望回退到 Vanna 的其余 SQL 生成功能。如果您使用的是 Vanna 托管的向量数据库,则回退功能会自动包含在内置的 Web 应用程序中,参数为 function_generation=True<span> </span>
。
GraphQL API 集成
除了 Python 包之外,还可以使用 GraphQL API 调用 Function RAG,从而可以在其他语言和框架中使用它。我们收到的最常见的请求是能够在 Ruby on Rails 中使用它。
可用性
Function RAG 作为 Vanna 免费版、高级版和企业版计划 的一部分提供。您可以在 Vanna v0.6.0<span> </span>
及更高版本中访问它。