引入函数 RAG 用于 SQL 生成
Vanna.ai 很荣幸推出 SQL 生成领域的一项突破性功能:函数 RAG(检索增强生成)。这项新的可选实验性功能旨在增强 SQL 生成的一致性和确定性,以响应用户的众多请求。
什么是 Function RAG ?
函数 RAG 将传统的问答-SQL 训练对转换为可调用的模板(也称为函数/工具)。然后,大型语言模型 (LLM) 调用这些模板来生成 SQL 查询和任何相关的后处理代码,例如图表代码。关键在于,使用函数 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=...)
将会找到最合适的函数,并使用 LLM 填写必要的参数。
如果您想将问题范围限定到特定用户,可以使用 vn.get_function(question=..., additional_data={"user_id": ...})
方法。这将确保 user_id
参数被确定性地设置。
要创建一个新函数,如果手动操作,可以使用 vn.create_function(...)
方法;或者您可以使用内置的 Web 应用程序来完成。
手动创建
vn.create_function(question=..., sql=..., plotly_code=...)
Web 应用程序函数创建
该 Web 应用程序有一个新按钮,允许您选择是将结果训练为原始的问答-SQL 对,还是将其训练为一个函数。Function RAG 将自动从问题中提取看起来像参数的内容,并使其作为函数参数可用。
适用场景
如果您有提出类似问题不同变体的终端用户,并且您只希望用户能够运行经过您的工程团队手动批准的特定类型分析,那么 Function RAG 是确保用户只能运行已批准分析的绝佳方式。
将分析限制在已批准范围内,有助于终端用户确信他们看到的数据是正确的,并且是查看数据的正确方式。如果您将其集成到 SaaS 应用程序中,这使得您可以将此功能交给内部业务用户或终端用户使用。
由于 Function RAG 提供了速度改进,任何用户都可以从中受益。然而,对于数据分析师而言,当您进行大量训练数据中不存在的新颖分析时,您可能希望回退到 Vanna 的其他 SQL 生成功能。如果您使用 Vanna 托管的向量数据库,回退功能将自动成为内置 Web 应用程序的一部分,参数为 function_generation=True
。
GraphQL API 集成
除了 Python 包,Function RAG 还可以使用 GraphQL API 调用,使其可用于其他语言和框架。我们收到的最常见的请求之一就是希望能在 Ruby on Rails 中使用它。
可用性
Function RAG 是 Vanna 免费版、高级版和企业版计划 的一部分。您可以在 Vanna v0.6.0
及更高版本中访问它。
在 Vanna 包中
Vanna 包有一个新的 VannaAdvanced
抽象 类,以及等效的实现 这里 。
未来计划
此功能将支持新的用户界面。函数参数由用户的问题设定,未来我们将最终让用户看到一个完整的仪表盘小部件,他们可以通过下拉菜单修改参数,而无需重新提问。
此外,我们将添加更多功能,用于检测参数的可用值,以便它们始终保持最新,并且 LLM 知道有哪些可用值,从而生成答案。