|
摘要:自从发现ChatGPT能实现NL2SQL之后,就一直在想象AI能替代数据分析师的工作。在当今数据驱动的世界中,企业需要快速准确地从海量数据中提取洞察。然而,尽管现代技术已经取得了巨大进步,但从结构化数据中提炼信息仍然是一个挑战。 虽然现代LLM在编写语法正确的SQL方面表现得非常出色,但生成的代码往往在语义上不正确。事实上,LLM在编写过程性代码方面比在编写SQL方面更擅长。原因如下: 本文就当前的基本情况推荐一个解决问题的开源框架:Dataherald

Dataherald是什么
Dataherald(https://github.com/Dataherald/dataherald)是专为企业级结构化数据问题回答而构建的自然语言到SQL引擎。它允许您从数据库设置一个API,以便用简单的语言回答问题。目目前支持连接到Postgres、DuckDB、BigQuery、ClickHouse、Databricks、Snowflake和AWS Athena。您可以使用Dataherald来: 
Dataherald的目标是构建更高性能、更易于使用的NL-to-SQL产品,以满足开发人员的需求。 1.拥有尽可能高的准确性和最低的延迟 2.易于设置和使用,适用于主要的数据仓库 3.允许用户从各种来源添加业务上下文 4.为开发人员提供工具,使他们能够针对自己的模式微调NL-to-SQL模型,并在生产环境中部署 5.基于LangChain搭建,与LLM提供商无关
Dataherald引擎由可替换的模块组成。每个模块都可以用不同的实现来替换,这些实现都扩展了基类。一些主要模块包括: SQL生成器 - 从给定的自然语言问题生成SQL的模块。 向量存储器 - 用于存储上下文数据,例如示例SQL查询的向量数据库。 数据库 - 持久化应用程序逻辑的数据库。默认情况下为Mongo。 评估器 - 评估生成的SQL的准确性并分配分数的模块。

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查询,确保它们准确检索所需的信息以回答问题,并且不包含任何语法错误。 

使用Dataherald的步骤
连接到数据仓库
Dataherald支持连接到多种数据仓库,包括Postgres、DuckDB、BigQuery、ClickHouse、Databricks、Snowflake和AWS Athena。您可以通过API或在应用程序启动时使用环境变量创建与这些数据仓库的连接。 添加上下文 连接到数据仓库并扫描数据库 使用API中的相应端点,例如 POST /api/v1/table-descriptions/sync-schemas 来触发对数据库的扫描。这将收集数据库表和列的信息,并识别低基数列及其值。
获取每个数据库连接的日志 使用相应的端点检索表日志,将 db_connection_id 设置为要检索日志的数据库连接的ID。
添加已验证的SQL和字符串描述 添加已验证的SQL可以通过文档中提供的方式完成。同时,为每个表和列设置描述或更新列也可以通过文档中的指引实现。
添加数据库级别指令
用自然语言查询数据库
不同于其他NL2SQL的开源项目,Dataherald提供的是一个开源的框架,核心是基于LangChain的Agent,这就给了开发人员(认为自己动手能力比较强的人)比较多的自主空间。不管是RAG的模式,还是Agent智能体,这段做AI应用的开发人员应该都比较熟悉了。Dataherald对于实现贴合自身业务的应用还是非常有帮助的。
|