Vanna AI vs. DataLine

我刚刚了解了 Vanna.AI,所以我想写一篇比较文章,因为我非常熟悉 DataLine 的内部工作原理。

在本文中,我将介绍功能差异、样本数据集上质量差异的示例,以及与用户相关的隐私和安全差异。

TLDR:VannaAI 更适合开发人员和单一问答流程。它支持高级集成,并围绕上下文知识构建了许多功能。DataLine 也适合非技术人员(例如 PM、BA),专注于更简单、可定制性更低的用户体验。

1、Vanna AI 和 DataLine 是什么?

Vanna.ai 和 DataLine 都是为了帮助开发人员和非技术人员使用自然语言查询数据而创建的。它们都是开源的,可以生成 SQL、表格和图表来回答用户查询。它们都以普通用户和企业客户为目标,具有自托管部署和完全开源代码库。

要了解差异,我们必须深入挖掘。数据安全处理方式存在差异,功能也存在差异,这两者都主要与企业用户相关。

1.1 Vanna.ai

Vanna 支持相当多的功能:

  • 基于 Python 的 Streamlit 构建的 Web 界面,允许重复使用社区构建块,但将前端开发限制为 Python
  • 连接到多个 SQL 数据库(Snowflake、Postgres、BigQuery、SQLite 等)
  • 支持添加上下文示例(如示例查询或文档),以帮助在复杂数据集上生成查询(他们将其作为“培训”进行营销,以便与大众进行交流)
  • 具有带聊天功能的用户界面,可生成 SQL、结果和 plotly 图表,这些图表是通过执行 LLM 发送的 Python 代码生成的(稍后会详细介绍)
  • 支持 slack 连接器,允许访问来自 slack 线程的结果
  • 也是一个 Python 库,允许其他人扩展它,在其上构建自己的产品和界面

1.2 DataLine

DataLine 的构建略有不同:

  • Web 平台从头开始使用 React 和 FastAPI 构建,允许更广泛的开发社区为标准 Web 应用程序做出贡献,并允许更轻松地自定义 UX/UI
  • 支持连接到多个数据库 + 源(CSV、SQLite、Postgres、MySQL、Snowflake 等)
  • 尚不支持添加上下文示例。曾尝试过此方法,但未能获得显著的质量提升,因此放弃了,但我们现在正在重新研究它。
  • 具有带有 SQL 和表格结果的聊天界面
  • 图表的主要区别:DataLine 具有 ChartJS 图表,允许在修改 SQL 时自定义和重播结果。有关图表差异的更多信息,请参阅安全部分

2、有何不同?

我可以深入研究这两种实现的技术细节,但并不是所有人都对此感兴趣,所以我将直接进入一个例子。最后我仍然会提到一些技术方面的事情!

让我们从 Vanna 开始。我启动了一个容器来安装它并在沙盒环境中运行界面(有关此内容的更多信息,请参阅安全部分)。在本地运行有点令人沮丧,文档都推荐托管解决方案。老实说,我花了大约 10 分钟才让一切启动并运行,但我很高兴尝试一下!

我将在两个测试中使用 GPT-3.5-turbo,并使用 Titanic 数据集 来简化事情。

2.1 测试探索能力

我的一个 sqlite 示例出现了一些问题,但 titanic 数据集运行良好。然而,令人沮丧的是,它不是聊天,每次我都必须在新页面中提出一个新问题。还必须修改 SQLite 查询以获取表元数据才能使其工作。

在 DataLine 中,我使用命令行安装并运行:

brew tap ramiawar/dataline && brew install dataline

然后使用 dataline 运行它。

我得到了一些示例,它运行良好:

2.2 特定数据获取

与 DataLine 相比,这非常快。这是因为 DataLine 内部的流程更复杂。另一方面,Vanna.ai 的流程很简单:生成 SQL,生成图表,我们就完成了。这可能是积极的,也可能是消极的。例如,如果查询失败或图表生成失败,DataLine 可以自我纠正并重试,直到成功。

好吧。让我们来加点料。我可以问多个问题吗?我没主意了!

2.3 多个问题

好的,Vanna 对这个问题感到很慌乱。

DataLine 也有结果分组,相关的表/图表/SQL 以视觉方式分组,以帮助用户了解哪些答案回答了哪些问题!

废话不多说,让我们继续最后一节。

3、隐私和安全

我深入研究了 Vanna.ai 的代码并注意到了一些事情。

首先,发送给 LLM 的唯一内容是有关表的元数据。架构等。这与 DataLine 类似,并且可以通过代码选择性地禁用它。你可以添加标志 allow_llm_to_see_data=True 以让 LLM 看到你的数据。

你也可以在 DataLine 中使用简单的切换来执行此操作:

继续介绍重点部分:结果是如何生成的?

好吧,这两个系统的性能都类似。它们都在本地运行查询,并获取结果。这意味着没有任何东西通过互联网传输,除非你使用的是 Vanna.ai 的托管版本,但此比较将着眼于更安全的选项。

在这两种情况下,图表是如何工作的?

Vanna.ai 要求 LLM 生成绘制 Plotly 图表的 Python 代码来绘制图形。他们在文档中中提到这是不安全的。

这到底是什么意思?为什么这是一件大事?

如果 LLM 生成的代码将在用户的计算机或公司服务器上动态运行,那么这段代码就有可能是恶意的,因为它不能完全信任。这也是一个漏洞,因为如果黑客冒充了 LLM,他们就可以在这些机器上执行任意代码。我已经看到网络安全研究人员提到了这一点。

要关闭它并不是一件容易的事。你必须重写代码中的函数,以防止它实际动态生成代码。在这种情况下,Vanna 将尝试自动推断要绘制哪种图表。总的来说,我觉得 Vanna 非常适合开发人员。

可以在此处查看 Python exec 和自动推理。

DataLine 采用了一种更简单的方法:使用 LLM 生成 ChartJS json,然后渲染图表。

这也使前端能够轻松地重新生成图表并对其进行自定义,而使用 plotly 并从后端控制图表时,这并不那么容易。

4、所用技术的简要总结

技术人员,这是为你们准备的。

深入研究 Vanna 的代码,他们似乎从头开始使用自定义构造。没有 langchain 或 mirascope 或任何用于执行 LLM 查询的东西。我认为这非常轻量级,并且是他们快速响应时间的原因。但遗憾的是,我们生活在一个 LLM 会犯错误和工具会失败的世界,所以我认为需要做更多的工作来优雅地处理此类故障。

另一方面,DataLine 使用 LanggraphMirascope 构建具有不同节点的状态机。这使 DataLine 的响应更加灵活,并且更能抵御错误。


原文链接:Vanna AI vs DataLine

汇智网翻译整理,转载请标明出处