项目展示

  • 首页 项目展示 利用企业数据生成价值:Text2SQL 和生成式 AI 的最佳实践 机器学习博客

利用企业数据生成价值:Text2SQL 和生成式 AI 的最佳实践 机器学习博客

2026-01-27 13:18:10
16

如何从企业数据中创造价值:Text2SQL 与生成式 AI 的最佳实践

作者:Nitin Eusebius、Arghya Banerjee 和 Randy DeFauw,发布日期:2024年1月4日,来源于 Amazon Bedrock

重点摘要

生成式 AI 在各个领域都展现了很大的潜力,包括文本生成、代码生成、摘要、翻译和聊天机器人。其中,利用自然语言处理NLP通过直观的 SQL 查询访问数据,是一项正在发展的应用。本文介绍了 Text2SQL 的概念、应用场景、挑战以及最佳实践,旨在帮助用户更便捷地查询数据库。

引言

生成式 AIGenerative AI为人工智能领域带来了众多潜力,包含了文本生成、代码生成、摘要、翻译、聊天机器人等多种应用。在这些应用中,通过自然语言处理(NLP) 将访问信息的方式从复杂的技术代码转变为简单直观的 SQL 查询,正逐步成为一项重要趋势。这样一来,业务用户和数据分析师可以用自然语言提问,查询和获取数据洞察。Text2SQL 的主要目标是从自然语言文本自动生成 SQL 查询,经过结构化表示的文本输入,可以产生可用于访问数据库的 SQL 查询。

在本文中,我们将介绍 Text2SQL 并探讨其用例、挑战、设计模式及最佳实践,内容包括:

Text2SQL 的必要性Text2SQL 的关键组件自然语言或 Text2SQL 的提示工程考虑优化及最佳实践架构模式

Text2SQL 的必要性

如今,大量数据存在于传统数据分析、数据仓库和数据库中,然而多数组织成员可能很难查询或理解这些数据。Text2SQL 的主要目标就是使数据库查询变得更容易,特别是对于非技术用户而言,用户可以用自然语言提出自己的查询。

利用 NLP SQL,业务用户可以通过键入或语音提问来分析数据并获得答案,例如:

“上个月每种产品的总销售额”“哪些产品产生了更多收入?”“各地区客户的百分比是多少?”

Amazon Bedrock 是一项全托管服务,通过单一 API 提供多种高性能基础模型FMs,使得构建和扩展生成式 AI 应用程序变得更加容易。它可以用于生成与上述问题相似的 SQL 查询,并从组织的结构化数据中生成自然语言响应。

Text2SQL 的关键组件

Text2SQL 系统涉及几个阶段,旨在将自然语言查询转换为可运行的 SQL:

组件描述自然语言处理分析用户输入的查询,提取关键元素和意图,转换为结构化格式SQL 生成将提取的细节映射到 SQL 语法,生成有效的 SQL 查询数据库查询在数据库中运行 AI 生成的 SQL 查询,检索结果并将其返回给用户

大语言模型LLMs在生成代码方面表现出色,包括用于数据库的结构化查询语言SQL。这些 LLM 可以理解自然语言问题,并生成相应的 SQL 查询。随着更多数据的提供,LLMs 可以通过上下文学习和微调设置深化其能力。

以下图示展示了基础 Text2SQL 流程。

自然语言到 SQL 的提示工程考量

在使用 LLM 将自然语言翻译为 SQL 查询时,提示的设计至关重要。有效的 提示工程 是构建自然语言到 SQL 系统的关键。清晰、简洁的提示可以更好地指引语言模型。

提供用户请求 SQL 查询的上下文以及相关数据库架构细节,可以更准确地翻译意图。采用少量注释示例的提示即自然语言提示及对应的 SQL 查询,能帮助模型生成符合语法的输出。此外,集成检索增强生成RAG技术,模型在处理过程中能够检索相似示例,也能进一步提升映射准确性。设计良好的提示,能向模型提供足够的指引、上下文和示例,对可靠地将自然语言翻译成 SQL 查询至关重要。

以下是一个基线提示的示例,包括来自白皮书的数据库代码表示:Enhancing Fewshot TexttoSQL Capabilities of Large Language Models A Study on Prompt Design Strategies。

sql/ 给定以下数据库架构: /CREATE TABLE IF NOT EXISTS gymnast ( GymnastID int FloorExercisePoints real PommelHorsePoints real RingsPoints real VaultPoints real ParallelBarsPoints real HorizontalBarPoints real TotalPoints real PRIMARY KEY (GymnastID) FOREIGN KEY (GymnastID) REFERENCES people (PeopleID))CREATE TABLE IF NOT EXISTS people ( PeopleID int Name text Age real Height real Hometown text PRIMARY KEY (PeopleID))

/ 请回答:返回年龄最小的体操运动员的总分。 /SELECT t1TotalPoints FROM gymnast AS t1 JOIN people AS t2 ON t1GymnastID = t2PeopleID ORDER BY t2Age ASC LIMIT 1

这种基于提示的少量学习方法为模型提供了一小部分注释示例,以展示自然语言与 SQL 之间的映射关系。通常,提示会包含约 23 对自然语言查询和相应 SQL 声明。这些示例帮助模型在不需要大量训练数据的情况下,从自然语言中生成符合语法的 SQL 查询。

细致调优与提示工程

在构建自然语言到 SQL 系统时,细致调优模型是否是适当技术或有效的提示工程是否更为合适,常常成为争论的焦点。两者都可以依据合适的需求考虑采用:

细致调优 基线模型在大型通用文本语料库上预训练,然后通过 基于指令的微调 来提升模型在文本SQL 上的表现,适应目标任务。细致调优直接在最终任务上训练模型,但需要许多文本SQL 示例。可以基于 LLM 进行有监督的细致调优,以提升文本到 SQL 的有效性,并使用如 Spider、WikiSQL、CHASE、BIRDSQL 或者 CoSQL 等多个数据集。

提示工程 模型被训练以完成旨在提示目标 SQL 语法的提示。使用 LLM 从自然语言生成 SQL 时,提供清晰的提示指令对于控制模型输出至关重要。在提示中标注不同的组件,如指向字段、架构,再指示要创建的 SQL 类型。这些提示像是指令,告诉模型如何格式化 SQL 输出。以下是一个示例提示,其中指向表字段并指示创建 MySQL 查询:

sqlTable offices columns = [OfficeId OfficeName]Table employees columns = [OfficeId EmployeeId EmployeeName]Create a MySQL query for all employees in the Machine Learning Department

一个有效的文本到 SQL 模型的构建方式是先从没有任何任务特定细致调优的基线 LLM 开始。在接下来的过程中,使用精心设计的提示来调整和引导基础模型,以适应文本到 SQL 的映射。这种提示工程使您能够开发该功能,而无需进行细致调优。如果基线模型的提示工程没有达到所需准确度,则可以探索对小规模文本SQL 示例进行细致调优,同时继续进行进一步的提示工程。

利用企业数据生成价值:Text2SQL 和生成式 AI 的最佳实践 机器学习博客

如果单纯的提示工程未能满足要求,细致调优与提示工程的结合可能是必需的。然而,最佳的方法是首先尝试不进行细致调优的提示工程,因为这可以在不需要收集数据的情况下快速迭代。如果这未能提供足够的性能,细致调优和提示工程的结合是可行的下一步。这种综合方法在最大化效率的同时,允许在仅依赖提示的方法不足时进行定制。

优化及最佳实践

优化和最佳实践对于提高效率、确保资源的最佳使用及获得期望结果至关重要。这些技术帮助改善性能、控制成本并达成更优质的成果。

在利用 LLM 开发 Text2SQL 系统时,以下是一些关键的优化领域:

优化策略描述缓存为改善延迟、控制成本和标准化,可以缓存从文本到 SQL LLM 中解析的 SQL 和识别的查询提示,避免重复查询的再处理。监控应收集关于查询解析、提示识别、SQL 生成和 SQL 结果的日志和指标,以监控 Text2SQL LLM 系统,更新提示或重新微调时提供可见性。物化视图与表物化视图可以简化 SQL 生成并提高常用 Text2SQL 查询的性能,直接查询表可能导致复杂的 SQL 以及性能问题。刷新数据物化视图需要按计划刷新,以保持 Text2SQL 查询中的数据更新。可以使用批量或增量刷新方法以平衡开销。集中数据目录创建集中数据目录提供组织数据源的全景视图,有助于 LLM 选择适当的表和架构,提供更准确的响应。通过集中数据目录生成的矢量嵌入可以与 LLM 一同提供,以生成相关且精确的 SQL 响应。

通过应用最佳实践,如缓存、监控、物化视图、计划刷新和建立集中目录,您可以显著提高使用 LLM 的 Text2SQL 系统的性能与效率。

架构模式

下面让我们看看可实现的文本到 SQL 工作流架构模式。

提示工程

以下图示展示了使用提示工程生成 SQL 查询的架构。

在此模式中,用户创建基于提示的少量学习,提供模型的注释示例,包括表和架构细节以及一些示例查询与结果。LLM 使用提供的提示返回 AI 生成的 SQL,然后进行验证并在数据库中运行以获取结果。这是开始使用提示工程的最直接模式。您可以使用 Amazon Bedrock,它是一个全托管服务,通过单一 API 提供多种高性能基础模型,帮助构建包含安全性、隐私和负责任 AI 的生成式 AI 应用程序,或者使用 JumpStart 基础模型,为内容写作、代码生成、问答、文案撰写、摘要、分类、信息检索等用例提供先进的基础模型。

提示工程及细致调优

以下图示展示了使用提示工程和细致调优生成 SQL 查询的架构。

小熊加速器永久免费

此流与前一种模式相似,主要依赖提示工程,但增加了在领域特定数据集上细致调优的流程。细致调优后的 LLM 用于生成 SQL 查询,其上下文值很小。您可以使用 SageMaker JumpStart 对领域特定数据集进行细致调优,这与在 Amazon SageMaker 上训练和部署任何模型的方法相同。

提示工程与 RAG

以下图示展示了使用提示工程和 RAG 生成 SQL 查询的架构。

在此模式中,我们使用 检索增强生成 和矢量嵌入存储,如 Amazon Titan Embeddings 或 Cohere Embed,从组织的中央数据目录如 AWS Glue 数据目录,获取数据库信息。矢量嵌入存储在矢量数据库中,如 Amazon OpenSearch Serverless 的矢量引擎、Amazon RDS 的 PostgreSQL带 pgvector 扩展或 Amazon Kendra。LLM 使用矢量嵌入在创建 SQL 查询时,更快速地选择适合的数据库、表和表中的字段。当数据和需要由 LLM 检索的相关信息存储在多个独立的数据库系统中时,使用 RAG 有助于 LLM 能够搜索或查询来自所有不同系统的数据。由此,通过将集中或统一数据目录的矢量嵌入提供给 LLM,便能提高返回信息的准确性和全面性。

结论

在本文中,我们讨论了如何利用自然语言生成 SQL,从企业数据中创造价值。我们探讨了关键组件、优化和最佳实践,还学习了从基本提示工程到细致调优和 RAG 的架构模式。欲了解更多信息,请参考 Amazon Bedrock,以轻松构建和扩展生成 AI 应用程序并利用基础模型。

关于作者

Randy DeFauw 是 AWS 的高级首席解决方案架构师,拥有密歇根大学的电子工程硕士学位,曾研究自动驾驶车辆的计算机视觉。他还持有科罗拉多州立大学的 MBA,担任过软件工程、产品管理等多种技术岗位。他于 2013 年进入大数据领域,继续探索这一领域,并积极参与机器学习项目,曾在多个会议上发言,包括 Strata 和 GlueCon。

Nitin Eusebius 是 AWS 的高级企业解决方案架构师,拥有软件工程、企业架构和 AI/ML 方面的丰富经验。他极具热情地探索生成式 AI 的可能性,致力于帮助客户在 AWS 平台上构建架构良好的应用程序,并解决技术挑战,助力客户的云之旅。

Arghya Banerjee 是 AWS 的高级解决方案架构师,专注于帮助客户采用和使用 AWS 云,居住在旧金山湾区,主要关注大数据、数据湖、流处理、批分析以及 AI/ML 服务和技术。

使用 Oracle 企业管理器监控 Amazon RDS for Oracle 实例 数据库博客

使用 Oracle 企业管理器监控 Amazon RDS for Oracle 实例主要收获在本文中,我们介绍了如何通过 Oracle 企业管理器OEM监控 Amazon RDS for Oracle 实例。以下是要点:在安装 OEM Agent 之前,确保满足相关前提条件和网络配置。通过添加 OE...



在 AWS RoboMaker 上使用公共容器镜像协调 NVIDIA Isaac Sim 和 ROS

在 AWS RoboMaker 上使用公共容器映像协调 NVIDIA Isaac Sim 和 ROS 2 导航主要观点此文提供了一个教程,教会如何在 AWS RoboMaker 上协调使用 NVIDIA Isaac Sim 和 ROS 2 导航,以进行高保真机器人模拟。这不仅可以帮助开发人员快速搭建...