How Dataherald Makes Natural Language to SQL Easy

Dataherald 如何让自然语言到 SQL 变得轻松

4 分钟阅读

编者按:我们很高兴推出 Dataherald 团队的这篇客座文章。Text-to-SQL 是一个巨大的用例,而 Dataherald 是该领域的开源领导者。这是一次深入幕后的绝佳机会,了解它的运作原理。

当 ChatGPT 在 2022 年底问世时,每个人都想看看 AI 是否可以完成他们的日常工作。营销人员希望 AI 撰写博客文章,大学生希望 AI 撰写论文,开发人员希望 AI 撰写辅助函数。对于那些使用关系数据的人来说,测试是看看这些先进的 LLM 在编写 SQL 方面的能力如何。

结果证明,虽然现代 LLM 在编写语法正确的 SQL 方面已经非常出色,但它们生成的代码通常在语义上是不正确的。事实上,很快就清楚地表明,LLM 更擅长编写过程代码而不是 SQL。这是因为

  1. 元数据和业务定义未存储在关系数据库模式中。
  2. 当涉及到需要窗口函数、复杂 JOIN 或时间计算的复杂 SQL 时,LLM 的表现不佳。此外,在大型模式上,用户通常会遇到上下文窗口问题
  3. 为了获得最佳性能,您需要针对数据集微调 LLM。为 NL-to-SQL 创建训练数据集非常困难。
  4. 评估 AI 生成的 SQL 的准确性极具挑战性。

在 Dataherald,我们着手构建一个引擎,使开发人员能够在他们的应用程序中部署最先进的 NL-to-SQL。我们基于 LangChain 构建了它,并利用 LangSmith 进行可观察性。

Dataherald 的工作原理

Dataherald 是一个 开源 NL-to-SQL 引擎,也可以通过 托管 API 访问。用户可以添加业务上下文,创建训练数据并微调 LLM 以适应他们的模式。在托管版本中,用户可以通过 UI 监控性能和配置引擎。然而,产品的核心部分是两个执行 NL 到 SQL 转换的 LangChain 代理。

Dataherald 管理控制台查询列表
Dataherald 管理控制台数据库指令

代理的工作原理

Dataherald 有两个 LangChain 代理:一个仅 RAG 代理,它依赖于少样本提示,以及一个更高级的代理,它使用微调的 LLM 作为工具。

RAG 代理

RAG 代理用于开发人员无法访问大量问题 <> SQL 对(黄金 SQL)样本集以微调或训练 LLM 的场景。它连接到数据库并提取 SQL 生成的必要信息,例如表模式、分类值、表和列描述。然后,它还利用以下工具

  • 一个模式链接工具,用于识别相关的表和列
  • 一个 SQL 执行工具,用于执行针对数据库生成的 SQL 查询,以验证其正确性并从错误中恢复。
  • 少样本示例检索器工具,用于根据与传入提示的相似性获取黄金 SQL,并将其用于少样本提示

开发人员可以进一步使用基于相关性注入到提示中的特定于业务的指令来增强提示

开发人员通常使用此代理来创建黄金 SQL,然后可以使用这些黄金 SQL 来微调 LLM 以获得更高级的模型。托管版本允许用户通过 UI 和代码编辑器单击一下即可修改 SQL 并将样本添加到训练数据中

使用 LLM 作为工具的代理

一旦每个表有超过 10 个黄金 SQL,我们建议微调模型并使用更高级的代理,这可以通过单个 API 调用完成。对于此代理,微调的 NL-to-SQL 模型本身充当工具。然而,由于微调的模型不具备所有业务上下文,因此它仍然部署在负责检索业务上下文的代理中。

与 RAG 代理类似,此代理可以直接访问数据库并执行生成的 SQL 查询,确保它们准确检索回答问题所需的必要信息,并且不包含任何语法错误。

下图显示了此代理的工作原理

结论

从初创公司到财富 500 强公司等各种规模的公司的开发人员和数据团队今天都在使用 Dataherald 来为其客户的对话式界面提供支持,并使内部业务用户能够从数据仓库自助服务。

我们才刚刚开始,并且在未来几个月内安排了很多工作:LangChain 集成、增加对开源 LLM 的支持以及允许代理提出后续问题(人类作为工具)都是当前正在开发的项目。

如果您厌倦了与提示作斗争以使 NL-to-SQL 工作,请尝试 Dataherald