通过连接到结构化数据存储来创建知识库 - Amazon Bedrock

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

通过连接到结构化数据存储来创建知识库

要将知识库连接到结构化数据存储,请指定以下组件:

  • 查询引擎配置

    将执行生成的 SQL 查询的计算服务的配置。查询引擎用于将自然语言用户查询转换为可用于从数据存储中提取数据的 SQL 查询。您可以选择 Amazon Redshift 作为查询引擎。选择此配置时,您必须指定:

    • 计算连接元数据,例如集群 ID 或工作组 ARN,具体取决于所选的查询引擎。

    • 使用查询引擎的身份验证方法,可以是使用具有相应权限的 IAM 服务角色、查询引擎数据库用户或与您的数据库凭证关联的AWS Secrets Manager密钥。

  • 存储配置

    包含数据的数据存储的配置。你可以连接亚马逊 Redshift Provisioned 或 Amazon Redshift Serverless,然后使用亚马逊 Redshift 或作为数据存储。AWS Glue Data Catalog

  • (可选)查询配置

    可以使用可选的查询配置来提高 SQL 生成的准确性:

    • 最大查询时间 – 查询超时后的时间量。

    • 描述 – 提供有关表或列的元数据或补充信息。您可以包括表或列的描述、使用说明或任何其他属性。您添加的描述可以通过提供有关表或列的结构的额外上下文和信息来改进 SQL 查询生成。

    • 包含项和排除项 – 指定生成 SQL 时要包括或排除的一组表或列。如果您想将 SQL 查询的范围限制为已定义的可用表或列子集,则此字段至关重要。此选项可以通过减少不必要的表或列引用来协助优化生成过程。

      如果指定包含项,则会忽略所有其他表和列。如果指定排除项,则会忽略您指定的表和列。

      注意

      包含项和排除项不能替代护栏,仅用于提高模型准确度。

    • 精选查询 – 一组预定义的问答示例。问题以自然语言查询(NLQ)形式编写,而答案是相应的 SQL 查询。这些示例通过提供应生成的查询类型的示例来为 SQL 生成过程提供协助。它们可用作提高生成式 SQL 输出的准确性和相关性的参考点。

展开与您的使用案例相对应的部分:

要使用连接到结构化数据存储AWS 管理控制台,请执行以下操作:

  1. 使用有权使用 Amazon Bedrock 控制台的 IAM 身份登录。AWS 管理控制台然后,在 https://console.aws.amazon.com/bedrock 上打开 Amazon Bedrock 控制台。

  2. 在左侧导航窗格中,选择知识库

  3. 知识库部分中,选择创建,然后选择包含结构化数据存储的知识库

  4. 为知识库设置以下详细信息:

    1. (可选)更改默认名称并为知识库提供描述。

    2. 选择要用于从数据存储中检索数据的查询引擎。

    3. 选择具有适当权限的 IAM 服务角色来创建和管理此知识库。您可以让 Amazon Bedrock 创建服务角色,也可以选择您已创建的自定义角色。有关创建自定义角色的更多信息,请参阅设置查询引擎和权限以创建带结构化数据存储的知识库

    4. (可选)添加要与知识库关联的标签。有关更多信息,请参阅 标记 Amazon Bedrock 资源

    5. 选择下一步

  5. 配置查询引擎:

    1. 选择已在其中创建集群或工作组的服务。然后,选择要使用的集群或工作组。

    2. 选择身份验证方法并提供所需字段。

    3. 选择用于存储元数据的数据存储。然后,选择或输入数据库的名称。

    4. (可选)根据需要修改查询配置。有关不同配置的更多信息,请参阅本主题的开头部分。

    5. 选择下一步

  6. 查看知识库配置并根据需要编辑任何部分。确认创建知识库。

要使用 Amazon Bedrock API 连接到结构化数据存储,请使用 Amazon Bedrock 构建时终端节点代理发送CreateKnowledgeBase请求,请求内容如下:

{ "name": "string", "roleArn": "string", "knowledgeBaseConfiguration": { "type": "SQL", "sqlKnowledgeBaseConfiguration": SqlKnowledgeBaseConfiguration }, "description": "string", "clientToken": "string", "tags": { "string": "string" } }

以下字段是必填字段。

字段 Basic description
Name 知识库的名称。
roleArn 具有适当权限的知识库服务角色。您可以使用控制台自动创建具有适当权限的服务角色。
knowledgeBaseConfiguration 包含知识库的配置。对于结构化数据库,请指定 SQL 作为 type,并包含 sqlKnowledgeBaseConfiguration 字段。

以下字段是可选字段。

字段 使用
描述 包含知识库的描述。
clientToken 用于确保 API 请求仅完成一次。有关更多信息,请参阅确保幂等性
标签 将标签与流相关联。有关更多信息,请参阅 标记 Amazon Bedrock 资源

SQLKnowledgeBaseConfiguration 取决于您使用的查询引擎。对于 Amazon Redshift,请将type字段指定为REDSHIFT并包括映射到 a 的redshiftConfiguration字段。RedshiftConfiguration对于 RedshiftConfiguration,您可以配置以下字段:

您可以配置以下类型的查询引擎:

如果您的 Amazon Redshift 数据库是在专用计算节点上配置的,则该queryEngineConfiguration字段的值应采用以下RedshiftQueryEngineConfiguration格式:

{ "type": "PROVISIONED", "provisionedConfiguration": { "clusterIdentifier": "string", "authConfiguration": RedshiftProvisionedAuthConfiguration }, }

clusterIdentifier 字段中指定集群的 ID。这RedshiftProvisionedAuthConfiguration取决于你使用的授权类型。选择与您的授权方法相匹配的选项卡:

IAM role

如果您使用 IAM 角色进行授权,则只需在 RedshiftProvisionedAuthConfiguration 中将 type 指定为 IAM,且无需填写其他字段。

{ "type": "IAM" }
Temporary credentials user name

如果您使用数据库用户名进行授权,请将 type 指定为 USERNAME,并在 RedshiftProvisionedAuthConfig 中的 databaseUser 字段中指定用户名:

{ "type": "USERNAME", "databaseUser": "string" }
AWS Secrets Manager

如果您使用授权AWS Secrets Manager,请在以下typeusernamePasswordSecretArn字段中指定 as USERNAME_PASSWORD 并指定密钥的 ARN:RedshiftProvisionedAuthConfig

{ "type": "USERNAME_PASSWORD", "usernamePasswordSecretArn": "string" }

如果您使用的是 Amazon Redshift Serverless,则该queryConfiguration字段的值应采用以下RedshiftQueryEngineConfiguration格式:

{ "type": "SERVERLESS", "serverlessConfiguration": { "workgroupArn": "string", "authConfiguration": } }

workgroupArn 字段中指定工作组的 ARN。这RedshiftServerlessAuthConfiguration取决于你使用的授权类型。选择与您的授权方法相匹配的选项卡:

IAM role

如果您使用 IAM 角色进行授权,则只需在 RedshiftServerlessAuthConfiguration 中将 type 指定为 IAM,且无需填写其他字段。

{ "type": "IAM" }
AWS Secrets Manager

如果您使用授权AWS Secrets Manager,请在以下typeusernamePasswordSecretArn字段中指定 as USERNAME_PASSWORD 并指定密钥的 ARN:RedshiftServerlessAuthConfiguration

{ "type": "USERNAME_PASSWORD", "usernamePasswordSecretArn": "string" }

此字段映射到包含单个字段的数组 RedshiftQueryEngineStorageConfiguration,其格式取决于数据的存储位置。

如果您的数据存储在AWS Glue Data Catalog,则RedshiftQueryEngineStorageConfiguration应采用以下格式:

{ "type": "AWS_DATA_CATALOG", "awsDataCatalogConfiguration": { "tableNames": ["string"] } }

tableNames 映射到的数组中添加要连接知识库的每个表的名称。

注意

按照跨数据库查询${databaseName}.${tableName})中描述的模式输入表名称。您可以通过指定 ${databaseName.*} 来包含所有表。

如果您的数据存储在 Amazon Redshift 数据库中,则 RedshiftQueryEngineStorageConfiguration 应采用以下格式:

{ "type": "string", "redshiftConfiguration": { "databaseName": "string" } }

databaseName 字段中指定 Amazon Redshift 数据库的名称。

注意

按照跨数据库查询${databaseName}.${tableName})中描述的模式输入表名称。您可以通过指定 ${databaseName.*} 来包含所有表。

如果您的数据库是通过 Amazon A SageMaker I Lakehouse 挂载的,则数据库名称的格式为${db}@${schema}

此字段映射到以下内容 QueryGenerationConfiguration,您可以使用这些字段来配置数据的查询方式:

{ "executionTimeoutSeconds": number, "generationContext": { "tables": [ { "name": "string", "description": "string", "inclusion": "string", "columns": [ { "name": "string", "description": "string", "inclusion": "string" }, ... ] }, ... ], "curatedQueries": [ { "naturalLanguage": "string", "sql": "string" }, ... ] } }

如果希望为查询设置超时时间,请在 executionTimeoutSeconds 字段中指定超时持续时间(以秒为单位)。

generationContext字段映射到一个QueryGenerationContext对象,您可以在其中根据需要配置任意数量的以下选项。

重要

如果包含生成上下文,则查询引擎会尽可能在生成 SQL 时应用该上下文。生成上下文具有非确定性,并且仅用于提高模型准确度。为确保准确度,请验证生成的 SQL 查询。

有关可包括的生成上下文的信息,请展开以下部分:

要提高用于查询数据库的 SQL 生成的准确度,您可以为表或列提供描述,此描述能比简短的表名或列名提供更丰富的上下文。您可执行以下操作:

  • 要为表添加描述,请在tables数组中添加一个QueryGenerationTable对象。在该对象中,在 name 字段中指定表的名称,并在 description 字段中指定描述,如以下示例所示:

    { "name": "database.schema.tableA", "description": "Description for Table A" }
  • 要为列添加描述,请在tables数组中包含一个QueryGenerationTable对象。在该对象中,在字段中指定表的名称并包括该namecolumns段,该字段映射到的数组QueryGenerationColumn。在 QueryGenerationColumn 对象中,在 name 字段中包含列的名称,并在 description 字段中包含描述,如以下示例所示:

    { "name": "database.schema.tableA", "columns": [ { "name": "Column A", "description": "Description for Column A" } ] }
  • 您可以同时为表及其列添加描述,如以下示例所示:

    { "name": "database.schema.tableA", "description": "Description for Table A", "columns": [ { "name": "columnA", "description": "Description for Column A" } ] }
    注意

    按照跨数据库查询中描述的模式输入表名称和列名称。如果您的数据库在AWS Glue Data Catalog,则格式为awsdatacatalog.gluedatabase.table

在生成 SQL 时,您可以使用QueryGenerationTableQueryGenerationColumn对象中的inclusion字段来建议要包含或排除的表或列。可以在 inclusion 字段中指定下列值之一:

  • INCLUDE - 生成 SQL 时,仅将您指定的表或列作为上下文包含在内。

  • EXCLUDE - 生成 SQL 时,会将您指定的表或列作为上下文排除。

您可以通过以下方式指定是包含还是排除表或列:

  • 要包含或排除表,请在tables数组中包含一个QueryGenerationTable对象。在该对象中,在 name 字段中指定表的名称,并在 inclusion 字段中指定是包含还是排除表,如以下示例所示:

    { "name": "database.schema.tableA", "inclusion": "EXCLUDE" }

    查询引擎不会在用于生成 SQL 的附加上下文中添加 Table A

  • 要包含或排除列,请在tables数组中包含一个QueryGenerationTable对象。在该对象中,在字段中指定表的名称并包括该namecolumns段,该字段映射到的数组QueryGenerationColumn。在 QueryGenerationColumn 对象中,在 name 字段中包含列的名称,并在 inclusion 字段中指定是包含还是排除列,如以下示例所示:

    { "name": "database.schema.tableA", "columns": [ { "name": "database.schema.tableA.columnA", "inclusion": "EXCLUDE" } ] }

    生成 SQL 时,SQL 生成功能会忽略上下文中 Table A 中的 Column A

  • 在指定包含项或排除项时,您可以将表和列组合使用,如以下示例所示:

    { "name": "database.schema.tableA", "inclusion": "INCLUDE", "columns": [ { "name": "database.schema.tableA.columnA", "inclusion": "EXCLUDE" } ] }

    在添加用于生成 SQL 的上下文时,SQL 生成功能会包含 Table A,但会排除其中的 Column A

重要

表和列排除项无法替代护栏。这些表和列的包含项与排除项用作附加上下文,以供模型在生成 SQL 时参考。

为了提高查询引擎将用户查询转换为 SQL 查询的准确性,您可以在QueryGenerationContext对象的curatedQueries字段中为其提供示例,该字段映射到CuratedQuery对象数组。每个对象都包含以下字段:

  • naturalLanguage – 自然语言形式的查询示例。

  • sql – 与自然语言查询对应的 SQL 查询。