AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


DataHerald: 一个基于Agent的开源项目,用于自然语言到SQL查询转换
发布日期:2024-04-02 06:59:42 浏览次数: 2068 来源:ruby的数据漫谈


摘要:自从发现ChatGPT能实现NL2SQL之后,就一直在想象AI能替代数据分析师的工作。在当今数据驱动的世界中,企业需要快速准确地从海量数据中提取洞察。然而,尽管现代技术已经取得了巨大进步,但从结构化数据中提炼信息仍然是一个挑战。

虽然现代LLM在编写语法正确的SQL方面表现得非常出色,但生成的代码往往在语义上不正确。事实上,LLM在编写过程性代码方面比在编写SQL方面更擅长。原因如下:

  • 元数据和业务定义未存储在关系数据库模式中。

  • 当涉及到需要窗口函数、复杂的连接或时间计算的复杂SQL时,LLM的表现不佳。此外,在大型模式上,用户经常会遇到上下文窗口问题。

  • 要获得最佳性能,您需要对LLM进行微调以适应数据集。创建NL-to-SQL的训练数据集很困难。评估由AI生成的SQL的准确性极具挑战性。

    本文就当前的基本情况推荐一个解决问题的开源框架:Dataherald


    • Dataherald是什么
    • Dataherald的工作原理
    • 使用Dataherald的步骤



    01

    Dataherald是什么


    Dataherald(https://github.com/Dataherald/dataherald)是专为企业级结构化数据问题回答而构建的自然语言到SQL引擎。它允许您从数据库设置一个API,以便用简单的语言回答问题。目目前支持连接到Postgres、DuckDB、BigQuery、ClickHouse、Databricks、Snowflake和AWS Athena。您可以使用Dataherald来:

    • 让业务用户从数据仓库中获取见解,而无需经过数据分析师

    • 在您的SaaS应用程序中从生产数据库进行问答

    • 从您的专有数据创建一个ChatGPT插件

    Dataherald的目标是构建更高性能、更易于使用的NL-to-SQL产品,以满足开发人员的需求。

    1.拥有尽可能高的准确性和最低的延迟
    2.易于设置和使用,适用于主要的数据仓库
    3.允许用户从各种来源添加业务上下文
    4.为开发人员提供工具,使他们能够针对自己的模式微调NL-to-SQL模型,并在生产环境中部署
    5.基于LangChain搭建,与LLM提供商无关

    Dataherald引擎由可替换的模块组成。每个模块都可以用不同的实现来替换,这些实现都扩展了基类。一些主要模块包括:

    SQL生成器 - 从给定的自然语言问题生成SQL的模块。
    向量存储器 - 用于存储上下文数据,例如示例SQL查询的向量数据库。
    数据库 - 持久化应用程序逻辑的数据库。默认情况下为Mongo。
    评估器 - 评估生成的SQL的准确性并分配分数的模块。



    02

    Dataherald的工作原理


    Dataherald是一个开源的NL-to-SQL引擎,也可以通过托管的API进行访问。用户可以添加业务上下文,创建训练数据,并对LLMs进行微调以适应其模式。在托管版本中,用户可以通过UI监控性能并配置引擎。但是,产品的核心部分是执行NL到SQL转换的两个LangChain Agents。一个仅依赖于少量<样本问题+SQL>对(称为 golden SQL)进行提示的RAG Agent,以及使用经过微调的LLM作为工具的更先进的Agent。

    RAG Agent:

    用于开发人员没有大量<样本问题+SQL>对,进行微调或训练LLM的情况。它连接到数据库并提取生成SQL所需的关键信息,例如表模式、分类值、表和列描述。这个Agent还有模式链接工具、SQL执行工具,Few-Shot检索工具。开发人员通常使用此代理创建黄金SQL,然后可以用于微调更适合自己业务模型的LLM。

    Agent With LLM-as-a-tool:

    一旦每个表有超过10个<样本问题+SQL>,建议微调模型并使用这个高级Agent,这可以通过单个API调用完成。对于此Agent,经过微调的NL-to-SQL模型本身就是一个工具。但是,由于经过微调的模型不具备所有业务上下文,因此仍然部署在负责检索业务上下文的Agent中。

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


    03

    使用Dataherald的步骤


    1. 连接到数据仓库

    • Dataherald支持连接到多种数据仓库,包括Postgres、DuckDB、BigQuery、ClickHouse、Databricks、Snowflake和AWS Athena。您可以通过API或在应用程序启动时使用环境变量创建与这些数据仓库的连接。

    • 添加上下文

      • 扫描数据库表和列:用于收集有关数据库的信息,包括表和列名称,并识别低基数列及其值,以存储在上下文存储中,并在向LLM发出提示时使用。

      • 添加已验证的SQL(golden SQL):添加真实的问题/SQL对是提高生成的SQL准确性的有效方法,可用于微调LLM或增强LLM的提示。

      • 添加表和列的字符串描述:为每个表和列设置描述或更新列,代理使用这些描述以确定与用户问题相关的列和表。

    • 连接到数据仓库并扫描数据库

      1. 使用API中的相应端点,例如 POST /api/v1/table-descriptions/sync-schemas 来触发对数据库的扫描。这将收集数据库表和列的信息,并识别低基数列及其值。

    • 获取每个数据库连接的日志

      1. 使用相应的端点检索表日志,将 db_connection_id 设置为要检索日志的数据库连接的ID。

    • 添加已验证的SQL和字符串描述

      1. 添加已验证的SQL可以通过文档中提供的方式完成。同时,为每个表和列设置描述或更新列也可以通过文档中的指引实现。

      1. 添加数据库级别指令

      • 可以直接传递数据库级别的指令给引擎,用于引导引擎生成更符合业务逻辑的SQL。这些指令可能包括诸如“永远不要在where子句中使用此列”或“始终在where子句中使用此列”等。

      1. 用自然语言查询数据库

      • 一旦您将引擎连接到数据仓库(最好是添加了一些上下文到存储中),就可以使用POST /api/v1/prompts/sql-generations端点来查询您的数据仓库。

      不同于其他NL2SQL的开源项目,Dataherald提供的是一个开源的框架,核心是基于LangChain的Agent,这就给了开发人员(认为自己动手能力比较强的人)比较多的自主空间。不管是RAG的模式,还是Agent智能体,这段做AI应用的开发人员应该都比较熟悉了。Dataherald对于实现贴合自身业务的应用还是非常有帮助的。



    53AI,企业落地应用大模型首选服务商

    产品:大模型应用平台+智能体定制开发+落地咨询服务

    承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

    联系我们

    售前咨询
    186 6662 7370
    预约演示
    185 8882 0121

    微信扫码

    与创始人交个朋友

    回到顶部

     
    扫码咨询