

# 使用 Aurora PostgreSQL 作为 Amazon Bedrock 的知识库
<a name="AuroraPostgreSQL.VectorDB"></a>

可以将 Aurora PostgreSQL 数据库集群作为 Amazon Bedrock 知识库。有关更多信息，请参阅[在 Amazon Aurora 中创建向量存储](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup.html)。知识库会自动获取存储在 Amazon S3 存储桶中的非结构化文本数据，将其转换为文本块和向量，然后存储在 PostgreSQL 数据库中。借助生成式人工智能应用程序，您可以使用 Amazon Bedrock 的代理来查询存储在知识库中的数据，并使用这些查询的结果来增强基础模型提供的答案。此工作流程称为检索增强生成（RAG）。有关 RAG 的更多信息，请参阅[检索增强生成（RAG）](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-rag.html)。

有关使用 Aurora PostgreSQL 通过 RAG 构建生成式人工智能应用程序的详细信息，请参阅此[博客文章](https://aws.amazon.com/blogs/database/build-generative-ai-applications-with-amazon-aurora-and-knowledge-bases-for-amazon-bedrock/)。

**Topics**
+ [先决条件](#AuroraPostgreSQL.VectorDB.Prereq)
+ [准备将 Aurora PostgreSQL 用作 Amazon Bedrock 的知识库](#AuroraPostgreSQL.VectorDB.PreparingKB)
+ [在 Bedrock 控制台中创建知识库](#AuroraPostgreSQL.VectorDB.CreatingKB)
+ [为 Amazon Bedrock 快速创建 Aurora PostgreSQL 知识库](AuroraPostgreSQL.quickcreatekb.md)

## 先决条件
<a name="AuroraPostgreSQL.VectorDB.Prereq"></a>

要使用 Aurora PostgreSQL 集群作为 Amazon Bedrock 的知识库，请自行熟悉以下先决条件。简而言之，您需要配置以下服务来与 Bedrock 结合使用：
+ 使用以下任何版本创建的 Amazon Aurora PostgreSQL 数据库集群：
  + 16.1 及所有更高版本
  + 15.4 及更高版本
  + 14.9 及更高版本
  + 13.12 及更高版本
  + 12.16 及更高版本
**注意**  
您必须在目标数据库中启用 `pgvector` 扩展并使用版本 0.5.0 或更高版本。有关更多信息，请参阅[支持 HNSW 索引的 pgvector 0.5.0 版本](https://aws.amazon.com/about-aws/whats-new/2023/10/amazon-aurora-postgresql-pgvector-v0-5-0-hnsw-indexing/)。
+ RDS 数据 API
+ 在 AWS Secrets Manager 中管理的用户。有关更多信息，请参阅 [使用 Amazon Aurora 和 AWS Secrets Manager 管理密码](rds-secrets-manager.md)。

## 准备将 Aurora PostgreSQL 用作 Amazon Bedrock 的知识库
<a name="AuroraPostgreSQL.VectorDB.PreparingKB"></a>

按照以下各节中介绍的步骤，准备将 Aurora PostgreSQL 用作 Amazon Bedrock 知识库。

### 创建和配置 Aurora PostgreSQL
<a name="AuroraPostgreSQL.VectorDB.CreatingDBC"></a>

要使用 Aurora PostgreSQL 数据库集群配置 Amazon Bedrock，必须先创建 Aurora PostgreSQL 数据库集群，并记下使用 Amazon Bedrock 对其进行配置的重要字段。有关创建 Aurora PostgreSQL 数据库集群的更多信息，请参阅[创建 Aurora PostgreSQL 数据库集群并连接到该集群](CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.md)。
+ 创建 Aurora PostgreSQL 数据库集群时启用数据 API。有关支持的版本的更多信息，请参阅[使用 Amazon RDS 数据 API](data-api.md)。
+ 确保记下 Aurora PostgreSQL 数据库集群的 Amazon 资源名称（ARN）。您需要使用它来配置数据库集群，以便与 Amazon Bedrock 结合使用。有关更多信息，请参阅 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Tagging.ARN.html)。

### 连接到数据库并安装 pgvector
<a name="AuroraPostgreSQL.VectorDB.ConnectingDB"></a>

可以使用任何连接实用程序连接到 Aurora PostgreSQL。有关这些实用程序的更多详细信息，请参阅[连接到 Amazon Aurora PostgreSQL 数据库集群](Aurora.Connecting.md#Aurora.Connecting.AuroraPostgreSQL)。或者，可以使用 RDS 控制台查询编辑器来运行查询。您需要一个启用了 RDS 数据 API 的 Aurora 数据库集群，才能使用查询编辑器。

1. 以主用户身份登录数据库并设置 pgvector。如果未安装该扩展，请使用以下命令：

   ```
   CREATE EXTENSION IF NOT EXISTS vector;
   ```

   使用支持 HNSW 索引的 `pgvector` 0.5.0 及更高版本。有关更多信息，请参阅[支持 HNSW 索引的 pgvector 0.5.0 版本](https://aws.amazon.com/about-aws/whats-new/2023/10/amazon-aurora-postgresql-pgvector-v0-5-0-hnsw-indexing/)。

1. 使用以下命令检查已安装的 `pg_vector` 版本：

   ```
   SELECT extversion FROM pg_extension WHERE extname='vector';
   ```

### 设置数据库对象和权限
<a name="AuroraPostgreSQL.VectorDB.SetupDBObjects"></a>

1. 创建 Bedrock 可以用来查询数据的特定架构。使用以下命令创建架构：

   ```
   CREATE SCHEMA bedrock_integration;
   ```

1. 创建 Bedrock 可用来查询数据库的新角色。使用以下命令创建新角色：

   ```
   CREATE ROLE bedrock_user WITH PASSWORD 'password' LOGIN;
   ```
**注意**  
记下此密码，因为您以后需要这一密码来创建 Secrets Manager 密码。

   如果您使用的是 `psql` 客户端，则使用以下命令来创建新角色：

   ```
   CREATE ROLE bedrock_user LOGIN;
   \PASSWORD password;
   ```

1. 向 `bedrock_user` 授予管理 `bedrock_integration` 架构的权限。这将提供在架构中创建表或索引的功能。

   ```
   GRANT ALL ON SCHEMA bedrock_integration to bedrock_user;
   ```

1. 以 `bedrock_user` 身份登录并在 `bedrock_integration schema` 中创建表。

   ```
   CREATE TABLE bedrock_integration.bedrock_kb (id uuid PRIMARY KEY, embedding vector(n), chunks text, metadata json, custom_metadata jsonb);
   ```

   此命令将在 `bedrock_integration` 架构中创建包含 Titan 嵌入的 `bedrock_kb` 表。

   将 `vector(n)` 数据类型中的 n 替换为对应您正在使用的嵌入模型的合适大小。使用以下建议来帮助选择大小：
   + 对于 Titan v2 模型，使用 `vector(1024)`、`vector(512)` 或 `vector (256)`。要了解更多信息，请参阅 [Amazon Titan Embeddings Text](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-titan-embed-text.html)。
   + 对于 Titan v1.2 模型，使用 `vector(1536)`。要了解更多信息，请参阅 [Amazon Titan Multimodal Embeddings G1](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-titan-embed-mm.html)。
   + 对于 Cohere 嵌入模型，使用 `vector(1024)`。要了解更多信息，请参阅 [Cohere Embed models](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-embed.html)。
   + 对于 Cohere Embed Multilingual v3，使用 `vector(1024)`。

   前四列是必需的。为了处理元数据，Bedrock 会将元数据文件中的数据写入 `custom_metadata` 列。如果您计划使用元数据和筛选，我们建议您创建此列。如果您没有创建 `custom_metadata` 列，请在开始摄取之前，为表中的每个元数据属性添加单独的列。有关更多信息，请参阅 [Configure and customize queries and response generation](https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html)。

1. 按照以下步骤创建 Bedrock 用于查询数据的必需索引：
   + 使用余弦运算符创建索引，Bedrock 可以使用该运算符来查询数据。

     ```
     CREATE INDEX ON bedrock_integration.bedrock_kb USING hnsw (embedding vector_cosine_ops);
     ```
   + 对于使用并行索引构建的 `pgvector` 0.6.0 及更高版本，建议您将 `ef_construction` 的值设置为 256。

     ```
     CREATE INDEX ON bedrock_integration.bedrock_kb USING hnsw (embedding vector_cosine_ops) WITH (ef_construction=256);
     ```
   + 创建 Bedrock 可用来查询文本数据的索引。

     ```
     CREATE INDEX ON bedrock_integration.bedrock_kb USING gin (to_tsvector('simple', chunks));
     ```
   + 如果您为自定义元数据创建了一列，请创建一个索引，Bedrock 可以使用该索引来查询元数据。

     ```
     CREATE INDEX ON bedrock_integration.bedrock_kb USING gin (custom_metadata);
     ```

### 在 Secrets Manager 中创建密钥
<a name="AuroraPostgreSQL.VectorDB.SecretManager"></a>

Secrets Manager 可让您存储 Aurora 凭证，这样它们就可以安全地传输到应用程序。如果您在创建 Aurora PostgreSQL 数据库集群时未选择 AWS Secrets Manager 选项，则可以立即创建密钥。有关创建 AWS Secrets Manager 数据库密钥的更多信息，请参阅 [AWS Secrets Manager database secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_database_secret.html)。

## 在 Bedrock 控制台中创建知识库
<a name="AuroraPostgreSQL.VectorDB.CreatingKB"></a>

在准备将 Aurora PostgreSQL 用作知识库的向量存储时，必须收集您需要提供给 Amazon Bedrock 控制台的以下详细信息。
+ **Amazon Aurora 数据库集群 ARN** – 数据库集群的 ARN。
+ **密钥 ARN** – 数据库集群的 AWS Secrets Manager 密钥的 ARN。
+ **数据库名称** – 数据库的名称。例如，可以使用默认数据库 *postgres*。
+ **表名称** - 建议您在创建表时，使用类似于以下内容的命令提供架构限定名称：

  ```
  CREATE TABLE bedrock_integration.bedrock_kb;
  ```

  此命令将在 `bedrock_integration` 架构中创建 `bedrock_kb` 表。
+ 创建表时，请务必使用指定的列和数据类型对表进行配置。可以使用您首选的列名称，而不使用表中列出的列名称。请记得记下您在知识库设置过程中选择的以供参考的名称。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.VectorDB.html)

利用这些详细信息，您现在可以在 Bedrock 控制台中创建一个知识库。有关设置向量索引和创建知识库信息的更多详细信息，请参阅 [Create a vector store in Amazon Aurora ](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-setup-rds.html) 和 [Create a vector store in Amazon Aurora](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-create.html)。

将 Aurora 添加为知识库后，您现在可以提取数据来源来进行搜索和查询。有关更多信息，请参阅 [Ingest your data sources into the Knowledge Base](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-ingest.html)。