

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

# 生成对结构化数据的查询
<a name="knowledge-base-generate-query"></a>

在将结构化数据存储连接到知识库时，知识库会根据将查询的数据来源的结构，将用户提供的自然语言查询转换为 SQL 查询，从而对其进行查询。当您使用以下各项时：
+ [https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html)：响应返回 SQL 查询执行的结果。
+ [https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html)：生成的响应基于 SQL 查询执行的结果。
+ [GenerateQuery](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_GenerateQuery.html)：Amazon Bedrock 知识库将查询的转换与检索过程分开。您可以使用此 API 操作将查询转换为 SQL 查询。

## 使用 `GenerateQuery` API
<a name="knowledge-base-generate-query-api"></a>

您可以将来自 `GenerateQuery` API 操作的响应与后续 `Retrieve` 或 `RetrieveAndGenerate` 操作结合使用，也可以将该响应插入其他工作流中。利用 `GenerateQuery`，您可以考虑知识库数据来源的结构，从而高效地将查询转换为 SQL 查询。

要将自然语言查询变成 SQL 查询，请使用[适用于 Amazon Bedrock 的代理运行时终端节点](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#bra-rt)提交[GenerateQuery](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_GenerateQuery.html)请求。`GenerateQuery` 请求包含以下字段：
+ queryGenerationInput — 指定`TEXT`为`type`并在`text`字段中包含查询。
**注意**  
必须用英文撰写查询。
+ transformationConfiguration – 将 `TEXT_TO_SQL` 指定为 `mode`。在 `textToSqlConfiguration` 字段中，将 `KNOWLEDGE_BASE` 指定为 `type`。然后，指定知识库的 ARN。

响应返回一个包含`queries`字段中[GeneratedQuery](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_GeneratedQuery.html)对象的数组。该对象包含针对 `sql` 字段中查询的 SQL 查询。

## 重要注意事项
<a name="knowledge-base-generate-query-considerations"></a>

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

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

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

  有关更多信息，请参阅 [通过跨区域推理提高吞吐量](cross-region-inference.md)。
+ 

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

**检索到的结果数**  
在生成响应时，以下限制将适用。
  + 如果使用的是 `InvokeAgent`、`RetrieveAndGenerate` 和 `RetrieveAndGenerateStream` API 操作，则在生成响应时，仅使用 10 个检索到的结果。
  + 在使用 `InvokeAgent` API 时，如果检索到的结果超过 10 行，则检索到的行总数不会传递给用于生成响应的代理。如果您改用 `RetrieveAndGenerate` API，则总行数包含在用于生成最终响应的提示中。
+ 

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

## 向角色授予对生成的查询的访问权限
<a name="knowledge-base-structured-permissions"></a>

对于连接到结构化数据来源的知识库，如果您想对生成的查询执行一些其他操作，则必须授予执行 `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": [
                "*"
            ]
        }
    ]
}
```

------

您可以根据使用案例移除不需要的语句：
+ 调用`GetKB`和`GenerateQuery`语句[GenerateQuery](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_GenerateQuery.html)才能生成 SQL 查询，这些查询将用户查询和您连接的数据源考虑在内。
+ 需要使用 `Retrieve` 语句来调用 [https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Retrieve.html) 以从结构化数据存储中检索数据。
+ 需要使用 `RetrieveAndGenerate` 语句来调用 [https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html) 以从结构化数据存储中检索数据，并根据该数据生成响应。