生成对结构化数据的查询 - 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字段中包含查询。

    注意

    必须用英文撰写查询。

  • transformationConfiguration – 将 TEXT_TO_SQL 指定为 mode。在 textToSqlConfiguration 字段中,将 KNOWLEDGE_BASE 指定为 type。然后,指定知识库的 ARN。

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

重要注意事项

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

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

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

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

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

  • 生成的 SQL 查询的准确性

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

  • 检索到的结果数

    在生成响应时,以下限制将适用。

    • 如果使用的是 InvokeAgentRetrieveAndGenerateRetrieveAndGenerateStream API 操作,则在生成响应时,仅使用 10 个检索到的结果。

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

  • GenerateQuery API 配额

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

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

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

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "GetKB", "Effect": "Allow", "Action": [ "bedrock:GetKnowledgeBase" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:knowledge-base/KnowledgeBaseId" ] }, { "Sid": "GenerateQueryAccess", "Effect": "Allow", "Action": [ "bedrock:GenerateQuery", "sqlworkbench:GetSqlRecommendations" ], "Resource": "*" }, { "Sid": "Retrieve", "Effect": "Allow", "Action": [ "bedrock:Retrieve" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:knowledge-base/KnowledgeBaseId" ] }, { "Sid": "RetrieveAndGenerate", "Effect": "Allow", "Action": [ "bedrock:RetrieveAndGenerate" ], "Resource": [ "*" ] } ] }

您可以根据使用案例移除不需要的语句:

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

  • 需要使用 Retrieve 语句来调用 Retrieve 以从结构化数据存储中检索数据。

  • 需要使用 RetrieveAndGenerate 语句来调用 RetrieveAndGenerate 以从结构化数据存储中检索数据,并根据该数据生成响应。