为结构化数据生成查询 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为结构化数据生成查询

当您将结构化数据存储连接到知识库时,知识库可以根据所查询的数据源的结构将用户提供的自然语言查询转换为 SQL 查询,从而对其进行查询。当你使用时:

  • Retrieve:响应返回 SQL 查询执行的结果。

  • RetrieveAndGenerate:生成的响应基于 SQL 查询执行的结果。

  • GenerateQuery:Amazon Bedrock 知识库将查询的转换与检索过程分开。您可以使用此 API 操作将查询转换为 SQL。

使用 GenerateQuery API

您可以将 GenerateQuery API 操作的响应与后续操作RetrieveRetrieveAndGenerate操作一起使用,也可以将其插入到其他工作流程中。 GenerateQuery允许您考虑知识库数据源的结构,从而高效地将查询转换为 SQL 查询。

要将自然语言查询变成 SQL 查询,请使用适用于 Amazon Bedrock 的代理运行时终端节点提交GenerateQuery请求。该GenerateQuery请求包含以下字段:

  • queryGenerationInput — 指定TEXTtype并在text字段中包含查询。

    注意

    查询必须用英文写成。

  • 转换配置-指定TEXT_TO_SQL为。mode在该textToSqlConfiguration字段中,指定KNOWLEDGE_BASEtype。然后,指定知识库的 ARN。

响应返回一个包含queries字段中GeneratedQuery对象的数组。该对象包含针对该sql字段中查询的 SQL 查询。

重要注意事项

以下是使用结构化数据生成查询时的一些关键注意事项。

  • 跨区域推理和结构化数据检索

    结构化数据检索使用跨区域推理来选择您所在地理区域 AWS 区域 内的最佳数据来处理您的推理请求。这不会产生任何额外费用,并且通过最大限度地提高可用资源和模型可用性来改善客户体验。

    交叉推理请求保存在数据最初所在的地理区域内。 AWS 区域 您的数据仍存储在源区域内,但输入提示和输出结果可能会移到该区域之外。所有数据都将通过 Amazon 的安全网络进行加密传输。

    有关更多信息,请参阅 通过跨区域推理提高吞吐量

  • 生成的 SQL 查询的准确性

    生成的 SQL 查询的准确性可能因上下文、表架构和用户查询的意图而异。在工作负载中使用生成的查询之前,请评估生成的查询以确保它们适合您的用例。

  • 检索到的结果数

    生成响应时存在以下限制。

    • 使用InvokeAgentRetrieveAndGenerate、和 RetrieveAndGenerateStream API 操作时,生成响应时仅使用 10 个检索到的结果。

    • 使用 InvokeAgent API 时,如果检索到的结果超过 10 行,则检索到的总行数不会传递给生成响应的代理。如果您改用 RetrieveAndGenerate API,则生成最终响应的提示中会包含总行数。

  • GenerateQueryAPI 配额

    GenerateQuery API 的配额为每秒 2 个请求。

向角色授予访问生成的查询的权限

对于连接到结构化数据源的知识库,如果您想对生成的查询执行一些其他操作,则必须授予执行 API 操作的权限。GenerateQuery要允许您的 IAM 角色查询连接到结构化数据存储的知识库,请将以下策略附加到该角色:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetKB", "Effect": "Allow", "Action": [ "bedrock:GetKnowledgeBase" ], "Resource": [ "arn:${Partition}:bedrock:${Region}:${Account}:knowledge-base/${KnowledgeBaseId}" ] }, { "Sid": "GenerateQueryAccess", "Effect": "Allow", "Action": [ "bedrock:GenerateQuery", "sqlworkbench:GetSqlRecommendations" ], "Resource": "*" }, { "Sid": "Retrieve", "Effect": "Allow", "Action": [ "bedrock:Retrieve", ] "Resource": [ "arn:${Partition}:bedrock:${Region}:${Account}:knowledge-base/${KnowledgeBaseId}" ] }, { "Sid": "RetrieveAndGenerate", "Effect": "Allow", "Action": [ "bedrock:RetrieveAndGenerate", ] "Resource": [ "*" ] } ] }

您可以删除不需要的语句,具体取决于您的用例:

  • 调用GetKBGenerateQuery语句GenerateQuery才能生成 SQL 查询,这些查询将用户查询和您连接的数据源考虑在内。

  • 调用RetrieveRetrieve语句才能从您的结构化数据存储中检索数据。

  • 调用RetrieveAndGenerateRetrieveAndGenerate语句才能从您的结构化数据存储中检索数据,并根据这些数据生成响应。