柏拉图数据智能。
垂直搜索和人工智能。

从企业数据中生成价值:Text2SQL 和生成式 AI 的最佳实践 |亚马逊网络服务

日期:

生成式人工智能在人工智能领域开辟了巨大的潜力。我们看到了许多用途,包括文本生成、代码生成、摘要、翻译、聊天机器人等等。正在发展的此类领域之一是使用自然语言处理 (NLP) 来释放通过直观的 SQL 查询访问数据的新机会。业务用户和数据分析师可以用简单的语言提出与数据和见解相关的问题,而不是处理复杂的技术代码。主要目标是从自然语言文本自动生成 SQL 查询。为此,文本输入被转换为结构化表示,并根据该表示创建可用于访问数据库的 SQL 查询。

在这篇文章中,我们介绍了文本到 SQL (Text2SQL),并探讨了用例、挑战、设计模式和最佳实践。具体来说,我们讨论以下内容:

  • 为什么我们需要 Text2SQL
  • 文本转 SQL 的关键组件
  • 提示自然语言或文本到 SQL 的工程注意事项
  • 优化和最佳实践
  • 架构模式

为什么我们需要 Text2SQL?

如今,传统数据分析、数据仓库和数据库中存在大量数据,这对于大多数组织成员来说可能不容易查询或理解。 Text2SQL 的主要目标是让非技术用户更容易访问数据库,他们可以用自然语言提供查询。

NLP SQL 使业务用户能够通过用自然语言键入或说出问题来分析数据并获得答案,例如:

  • “显示上个月每种产品的总销售额”
  • “哪些产品产生了更多收入?”
  • “来自每个地区的客户比例是多少?”

亚马逊基岩 是一项完全托管的服务,通过单个 API 提供高性能基础模型 (FM) 的选择,从而能够轻松构建和扩展 Gen AI 应用程序。它可用于根据与上面列出的问题类似的问题生成 SQL 查询,并查询组织结构化数据并根据查询响应数据生成自然语言响应。

文本转 SQL 的关键组件

文本到 SQL 系统涉及将自然语言查询转换为可运行 SQL 的几个阶段:

  • 自然语言处理:
    • 分析用户输入的查询
    • 提取关键要素和意图
    • 转换为结构化格式
  • SQL 生成:
    • 将提取的详细信息映射到 SQL 语法
    • 生成有效的 SQL 查询
  • 数据库查询:
    • 在数据库上运行 AI 生成的 SQL 查询
    • 检索结果
    • 返回结果给用户

大型语言模型 (LLM) 的一项显着功能是生成代码,包括数据库的结构化查询语言 (SQL)。这些 LLM 可用于理解自然语言问题并生成相应的 SQL 查询作为输出。随着提供更多数据,法学硕士将受益于采用情境学习和微调设置。

下图说明了基本的 Text2SQL 流程。

文本 2 SQL 高级处理流程

提示自然语言转SQL的工程注意事项

当使用 LLM 将自然语言转换为 SQL 查询时,提示至关重要,提示工程有几个重要的考虑因素。

有效 即时工程 是开发 SQL 系统自然语言的关键。清晰、直接的提示为语言模型提供了更好的说明。提供用户正在请求 SQL 查询的上下文以及相关的数据库架构详细信息,使模型能够准确地转换意图。包括一些带注释的自然语言提示示例和相应的 SQL 查询有助于指导模型生成符合语法的输出。此外,结合检索增强生成(RAG),模型在处理过程中检索相似的示例,进一步提高了映射准确性。精心设计的提示可以为模型提供足够的指令、上下文、示例和检索增强,这对于将自然语言可靠地转换为 SQL 查询至关重要。

以下是基线提示的示例,其中包含白皮书中数据库的代码表示 增强大型语言模型的小样本文本到 SQL 的能力:提示设计策略的研究.

/* Given the following database schema : */
CREATE TABLE IF NOT EXISTS " gymnast " ( " Gymnast_ID " int , " Floor_Exercise_Points " real , " Pommel_Horse_Points " real , " Rings_Points " real , " Vault_Points " real , " Parallel_Bars_Points " real , " Horizontal_Bar_Points " real , " Total_Points " real , PRIMARY KEY ( " Gymnast_ID " ) , FOREIGN KEY ( " Gymnast_ID " ) REFERENCES " people " ( " People_ID " ) ) ; CREATE TABLE IF NOT EXISTS " people " ( " People_ID " int , " Name " text , " Age " real , " Height " real , " Hometown " text , PRIMARY KEY ( " People_ID " ) ) ; /* Answer the following : Return the total points of the gymnast with the lowest age .
*/ select t1 . total_points from gymnast as t1 join people as t2 on t1 . gymnast_id = t2 .
people_id order by t2 . age asc limit 1

如本例所示,基于提示的小样本学习为模型提供了提示本身的一些带注释的示例。这演示了模型的自然语言和 SQL 之间的目标映射。通常,提示将包含大约 2-3 对,显示自然语言查询和等效的 SQL 语句。这几个示例指导模型从自然语言生成符合语法的 SQL 查询,而无需大量训练数据。

微调与即时工程

在为 SQL 系统构建自然语言时,我们经常讨论微调模型是否是正确的技术,或者有效的提示工程是否是可行的方法。可以根据正确的要求来考虑和选择这两种方法:

    • 微调 – 基线模型在大型通用文本语料库上进行预训练,然后可以使用 基于指令的微调,它使用带标签的示例来提高文本 SQL 上预训练基础模型的性能。这使模型适应目标任务。微调直接在最终任务上训练模型,但需要许多文本 SQL 示例。您可以根据您的 LLM 使用监督微调来提高文本转 SQL 的效率。为此,您可以使用多个数据集,例如 蜘蛛, 维基SQL, , BIRD-SQL协同SQL.
    • 即时工程 – 该模型经过训练,可以完成旨在提示目标 SQL 语法的提示。当使用 LLM 从自然语言生成 SQL 时,在提示中提供清晰的说明对于控制模型的输出非常重要。在提示中注释不同的组件,例如指向列、架构,然后指示要创建哪种类型的 SQL。它们的作用类似于告诉模型如何格式化 SQL 输出的指令。以下提示显示了一个示例,其中您指向表列并指示创建 MySQL 查询:
Table 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 示例进行微调。

如果仅对原始预训练模型进行即时工程不能满足要求,则可能需要将微调和即时工程相结合。然而,最好一开始就尝试快速工程而不进行微调,因为这样可以在不收集数据的情况下进行快速迭代。如果这无法提供足够的性能,则下一步可行的方法是进行微调并进行即时工程。这种整体方法最大限度地提高了效率,同时如果纯粹基于提示的方法还不够的话,仍然允许定制。

优化和最佳实践

优化和最佳实践对于提高效率、确保资源得到最佳利用以及以最佳方式实现正确结果至关重要。这些技术有助于提高性能、控制成本并实现更高质量的结果。

使用 LLM 开发文本到 SQL 系统时,优化技术可以提高性能和效率。以下是需要考虑的一些关键领域:

  • 高速缓存 – 为了改善延迟、成本控制和标准化,您可以缓存从文本到 SQL LLM 解析的 SQL 和识别的查询提示。这避免了重新处理重复的查询。
  • 灭菌监测 – 应收集有关查询解析、提示识别、SQL 生成和 SQL 结果的日志和指标,以监控文本到 SQL LLM 系统。这为更新提示或使用更新的数据集重新进行微调的优化示例提供了可见性。
  • 物化视图与表 – 物化视图可以简化 SQL 生成并提高常见文本到 SQL 查询的性能。直接查询表可能会导致复杂的 SQL,也会导致性能问题,包括不断创建索引等性能技术。此外,当同一个表同时用于其他应用程序区域时,您可以避免出现性能问题。
  • 刷新数据 – 需要按计划刷新物化视图,以保持文本到 SQL 查询的数据最新。您可以使用批量或增量刷新方法来平衡开销。
  • 中央数据目录 – 创建集中式数据目录为组织的数据源提供单一管理平台视图,并将帮助法学硕士选择适当的表和模式,以便提供更准确的响应。向量 嵌入 从中央数据目录创建的数据可以与生成相关且精确的 SQL 响应所需的信息一起提供给法学硕士。

通过应用缓存、监控、物化视图、计划刷新和中央目录等优化最佳实践,您可以显着提高使用 LLM 的文本到 SQL 系统的性能和效率。

架构模式

让我们看一下可以为文本到 SQL 工作流程实现的一些架构模式。

即时工程

下图说明了使用提示工程通过 LLM 生成查询的体系结构。

说明了使用提示工程通过 LLM 生成查询的架构

在此模式中,用户创建基于提示的小样本学习,为模型提供提示本身带注释的示例,其中包括表和架构详细信息以及一些示例查询及其结果。 LLM 使用提供的提示返回 AI 生成的 SQL,该 SQL 经过验证,然后针对数据库运行以获取结果。这是开始使用即时工程的最简单的模式。为此,您可以使用 亚马逊基岩 or 基础模型 in 亚马逊SageMaker JumpStart.

在此模式中,用户创建基于提示的小样本学习,为模型提供提示本身带注释的示例,其中包括表和架构详细信息以及一些示例查询及其结果。 LLM 使用提供的提示返回 AI 生成的 SQL,该 SQL 经过验证并针对数据库运行以获得结果。这是开始使用即时工程的最简单的模式。为此,您可以使用 亚马逊基岩 这是一项完全托管的服务,通过单个 API 提供来自领先 AI 公司的高性能基础模型 (FM) 的选择,以及构建具有安全性、隐私性和负责任的 AI 的生成式 AI 应用程序所需的广泛功能或者 JumpStart 基础模型 它为内容编写、代码生成、问答、文案写作、摘要、分类、信息检索等用例提供最先进的基础模型

及时的工程设计和微调

下图说明了使用即时工程和微调通过 LLM 生成查询的体系结构。

说明了使用即时工程和微调通过 LLM 生成查询的架构

此流程与之前的模式类似,后者主要依赖于即时工程,但具有对特定领域数据集进行微调的附加流程。经过微调的 LLM 用于生成具有最小提示上下文值的 SQL 查询。为此,您可以使用 SageMaker JumpStart 在特定领域的数据集上微调 LLM,就像训练和部署任何模型一样 亚马逊SageMaker.

快速工程和 RAG

下图说明了使用提示工程和 RAG 通过 LLM 生成查询的体系结构。

说明了使用提示工程和 RAG 通过 LLM 生成查询的架构

在这个模式中,我们使用 检索增强生成 使用向量嵌入存储,例如 亚马逊泰坦嵌入 or 连贯嵌入,在 亚马逊基岩 来自中央数据目录,例如 AWS胶水 资料目录,组织内的数据库。向量嵌入存储在向量数据库中,例如 适用于 Amazon OpenSearch Serverless 的矢量引擎, 适用于 PostgreSQL 的 Amazon 关系数据库服务 (Amazon RDS)PG向量 扩展名,或 亚马逊肯德拉。创建 SQL 查询时,法学硕士使用向量嵌入更快地选择正确的数据库、表和表中的列。当法学硕士需要检索的数据和相关信息存储在多个单独的数据库系统中并且法学硕士需要能够从所有这些不同的系统搜索或查询数据时,使用 RAG 会很有帮助。这就是向法学硕士提供集中或统一数据目录的向量嵌入会导致法学硕士返回更准确和更全面的信息的地方。

结论

在这篇文章中,我们讨论了如何使用自然语言生成 SQL 来从企业数据中产生价值。我们研究了关键组件、优化和最佳实践。我们还学习了从基本提示工程到微调和 RAG 的架构模式。要了解更多信息,请参阅 亚马逊基岩 使用基础模型轻松构建和扩展生成式 AI 应用程序


作者简介

兰迪·德福 是 AWS 的高级首席解决方案架构师。 他拥有密歇根大学电子工程硕士学位,在那里从事自动驾驶汽车的计算机视觉研究。 他还拥有科罗拉多州立大学的 MBA 学位。 Randy 在技术领域担任过多种职位,从软件工程到产品管理。 In 于 2013 年进入大数据领域,并继续探索该领域。 他积极致力于 ML 领域的项目,并在包括 Strata 和 GlueCon 在内的众多会议上发表过演讲。

尼廷优西比乌斯 是 AWS 的高级企业解决方案架构师,在软件工程、企业架构和 AI/ML 方面经验丰富。他对探索生成人工智能的可能性充满热情。他与客户合作,帮助他们在 AWS 平台上构建架构良好的应用程序,并致力于解决技术挑战并协助他们完成云之旅。

阿吉亚·班纳吉 是旧金山湾区 AWS 的高级解决方案架构师,专注于帮助客户采用和使用 AWS 云。 Arghya 专注于大数据、数据湖、流媒体、批量分析以及 AI/ML 服务和技术。

现货图片

最新情报

现货图片

在线答疑

你好呀! 我怎么帮你?