Published

介绍用于SQL生成的函数RAG

为您的SQL生成添加防护措施

介绍用于SQL生成的Function RAG

Vanna.ai 很高兴推出SQL生成中的一项突破性功能:Function RAG(检索增强生成)。这一新的可选实验性功能旨在增强SQL生成的一致性和确定性,满足我们用户的众多需求。

什么是 Function RAG

函数RAG将传统的Question-SQL训练对转换为可调用的模板(即函数/工具)。这些模板随后由大型语言模型(LLM)调用,以生成SQL查询和任何相关的后处理代码,如图表代码。重要的是,在使用函数RAG时,LLM仅决定使用哪个SQL模板以及需要提供的任何参数。这种方法不仅确保了更一致的输出,还显著加快了SQL生成过程。

我们正在以不同的域名和品牌发布Function RAG API,以将其与核心的开源Python包区分开来。

函数RAG的主要特点

  • Template-Based SQL Generation : By converting training pairs into templates, Function RAG ensures that the SQL generated is both accurate and relevant to the user's query.
  • Enhanced Security : Function RAG reduces prompt injection and prompt escape, ensuring that the SQL generation process is secure from external manipulations.
  • User-Specific Queries : Users can now pass information like a user ID within their queries without the risk of this data being overridden. This allows for personalized questions such as "what are my last 10 orders?" to be executed securely and efficiently.
  • Integrated Chart Code Generation : Alongside SQL, Function RAG also handles the generation of chart code, making it possible to generate both SQL and its corresponding visualization code in a single request.
  • Multi-Language Support : The feature is accessible via a GraphQL API, making it usable from any programming language, not just Python. This opens up possibilities for integration into various backends, including frameworks like Ruby on Rails, .NET and others.

查看实际操作

例如,以下是一些示例函数:

当你提出一个问题时, vn.get_function(question=...) 会找到最合适的函数并使用LLM来填充必要的参数。

如果你想将问题限定给特定用户,你可以使用 vn.get_function(question=..., additional_data={"user_id": ...}) 方法。这将确保 user_id 参数被确定性地设置。

要创建一个新函数,你可以使用 vn.create_function(...) 方法,如果你手动操作的话,或者你可以使用内置的网页应用来完成。

手动创建

vn.create_function(question=..., sql=..., plotly_code=...)

Web应用程序功能创建

该网页应用有一个新按钮,允许您选择是否要将结果训练为原始的问答-SQL对,或者是否要将结果训练为函数。函数RAG会自动从问题中提取看起来像参数的内容,并将它们作为函数参数提供。

何时使用

如果您有最终用户提出类似问题的变体,并且您只希望用户能够运行经过您工程团队手动批准的特定类型的分析,那么Function RAG是确保用户只能运行已批准分析的好方法。

限制为经过批准的分析有助于最终用户确信他们所看到的数据是正确的,并且这是查看数据的正确方式。这使得您可以将此功能交给内部业务用户或最终用户,如果您将其集成到SaaS应用程序中。

由于Function RAG提供了速度上的改进,任何用户都可以从中受益。然而,对于数据分析师来说,当您进行大量训练数据中不存在的新颖分析时,您可能会希望回退到Vanna的其他功能以生成SQL。如果您使用的是Vanna托管的向量数据库,回退是内置Web应用程序的自动部分,参数为 function_generation=True

GraphQL API 集成

除了Python包之外,Function RAG还可以通过GraphQL API调用,使其能够在其他语言和框架中使用。我们收到的最常见请求是能够在Ruby on Rails中使用它。

可用性

函数 RAG 作为 Vanna Free、Premium 和 Enterprise 计划 的一部分提供。您可以在 Vanna v0.6.0 及更高版本中访问它。

在Vanna包中

Vanna 包有一个新的 VannaAdvanced abstract 类,其等效实现 here

未来计划

此功能将启用新的用户界面。函数的参数由用户的问题设置,未来我们将最终使用户能够看到一个完整的仪表板小部件,在那里他们可以通过下拉菜单修改参数,而无需重新提问。

此外,我们还将增加检测参数可用值的额外功能,以确保它们始终是最新的,并且LLM知道可用的值以便生成答案。