---
# System prepended metadata

title: Amazon Bedrock Workshop for FSI (3. Knowledge Bases for GraphRag)

---

# Amazon Bedrock Workshop for FSI (3. Knowledge Bases for GraphRag)

## 目錄
- [實驗環境準備](https://hackmd.io/@6g-86IJuRWiQ17aprBneGQ/HkjF3MBcge)
- [1. Amazon Bedrock Foundation Model 使用概覽](https://hackmd.io/@6g-86IJuRWiQ17aprBneGQ/B1PFXXHcex)
- [2. Amazon Bedrock Knowledge Bases (Vector Store) for RAG](https://hackmd.io/@6g-86IJuRWiQ17aprBneGQ/ByyeB7r5eg)
- [3. Amazon Bedrock Knowledge Bases (Vector Store) for GraphRag](#3-Amazon-Bedrock-Knowledge-Bases-Vector-Store-for-GraphRag)
    - [3-1. 建立 S3 Bucket 以存放用於 RAG 的資料 (若您已經完成 2-1 章節，此處可跳過)](#3-1-建立-S3-Bucket-以存放用於-RAG-的資料-若您已經完成-2-1-章節，此處可跳過)
    - [3-2. 啟用模型調用日誌記錄 (Optional) (若您已經完成 2-2 章節，此處可跳過)](#3-2-啟用模型調用日誌記錄-Optional-若您已經完成-2-2-章節，此處可跳過)
    - [3-3. 建立 Knowledge Base](#3-3-建立-Knowledge-Base)
    - [3-4. 同步資料 (Embedding)](#3-4-同步資料-Embedding)
    - [3-5. 測試知識庫](#3-5-測試知識庫)
    - [3-6. 至 Amazon Neptune 檢視 Embeddings 處理內容](#3-6-至-Amazon-Neptune-檢視-Embeddings-處理內容)
- [4. Amazon Bedrock Agents](https://hackmd.io/@6g-86IJuRWiQ17aprBneGQ/HJe4D7Bcxl)
- [5. Amazon Bedrock Flows](https://hackmd.io/@6g-86IJuRWiQ17aprBneGQ/B1eEw7H5gl)
- [6. Amazon Bedrock Guardrails](https://hackmd.io/@6g-86IJuRWiQ17aprBneGQ/SJ0XvmH5lx)
- [其他相關參考資料](https://hackmd.io/@6g-86IJuRWiQ17aprBneGQ/B1Dw5XBclg)

---

## 3. Amazon Bedrock Knowledge Bases (Vector Store) for GraphRag

### 3-1. 建立 S3 Bucket 以存放用於 RAG 的資料 (若您已經完成 2-1 章節，此處可跳過)

#### [Option 1] 通過 AWS CloudShell (Q for CLI)

:::spoiler **操作步驟**
1. 於 AWS Management Console 上方右鍵點擊圖示 ![圖片](https://hackmd.io/_uploads/Sk4NlndbJg.png =30x) 並開啟新分頁以啟用 **AWS CloudShell**
    ![image](https://hackmd.io/_uploads/SJ6iC_cYJl.png =500x)
    
2. 關閉歡迎使用視窗，以進入 AWS CloudShell 操作畫面
    ![圖片](https://hackmd.io/_uploads/Sy8JMnuZkg.png)
    ![圖片](https://hackmd.io/_uploads/B1V1txFWkg.png)

3. 輸入 `q` 以使用 Amazon Q Developer CLI。
    ![image](https://hackmd.io/_uploads/ByKZUPrcel.png)

4. 輸入以下 prompt 以下載資料 (以法規文件為例)，將其解壓縮，並放置於 S3 Bucket：
    ```
    建立s3 bucket "genai-rag-documents-[AWS_ACCOUNT_ID]-us-west-2"，並且下載及解壓縮https://d1wcvekt3937ya.cloudfront.net/knowledge-base-rag-documents.zip，將其所有解壓縮後的內容檔案全部上傳至該bucket
    ```
    ![image](https://hackmd.io/_uploads/B1_X3NI9gx.png)
    ![image](https://hackmd.io/_uploads/r1NS24Icll.png)

:::

#### [Option 2] 通過 AWS CloudShell (Shell Script)

:::spoiler **操作步驟**
1. 於 AWS Management Console 上方右鍵點擊圖示 ![圖片](https://hackmd.io/_uploads/Sk4NlndbJg.png =30x) 並開啟新分頁以啟用 **AWS CloudShell**
    ![image](https://hackmd.io/_uploads/SJ6iC_cYJl.png =500x)
    
2. 關閉歡迎使用視窗，以進入 AWS CloudShell 操作畫面
    ![圖片](https://hackmd.io/_uploads/Sy8JMnuZkg.png)
    ![圖片](https://hackmd.io/_uploads/B1V1txFWkg.png)

3. 執行以下指令，以下載資料 (以法規文件為例)，將其解壓縮，並放置於 S3 Bucket
    
    ```bash!
    DEMO_FILE="https://d1wcvekt3937ya.cloudfront.net/knowledge-base-rag-documents.zip"
    AWS_ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
    BUCKET_NAME="s3://genai-rag-documents-$AWS_ACCOUNT-us-west-2"

    # Download file
    if ! wget $DEMO_FILE -O "knowledge-base-rag-documents.zip"; then
        echo "Failed to download file"
        exit 1
    fi

    # Extract files to the specific directory
    if ! unzip "knowledge-base-rag-documents.zip"; then
        echo "Failed to extract zip file"
        exit 1
    fi

    # Change directory
    cd "knowledge-base-rag-documents" || {
        echo "Failed to change directory"
        exit 1
    }

    # Create S3 bucket
    aws s3 mb $BUCKET_NAME

    # Sync files to S3
    aws s3 sync . $BUCKET_NAME

    # List bucket contents
    aws s3 ls $BUCKET_NAME
    ```
    
    ![圖片](https://hackmd.io/_uploads/r1iCUfqgee.png)

:::

#### [Option 3] 通過 AWS Management Console

:::spoiler **操作步驟**
1. 下載資料 (以法規文件為例)，並將其解壓縮：https://d1wcvekt3937ya.cloudfront.net/knowledge-base-rag-documents.zip
![圖片](https://hackmd.io/_uploads/S157Df5xex.png =300x)

2. 進入 **Amazon S3** 服務
![圖片](https://hackmd.io/_uploads/HJWGJkjy1x.png)

3. 點擊 **建立儲存貯體 (Create bucket)**
![圖片](https://hackmd.io/_uploads/BkvS1yoykx.png)

4. 輸入 `genai-rag-documents-[Account_ID]-us-west-2` 作為儲存貯體名稱 (Bucket name)，當中 `[Account_ID]` 請覆蓋成您所使用的 AWS Account ID。完成後請點擊 **建立儲存貯體 (Create bucket)**
![圖片](https://hackmd.io/_uploads/rkE0yJik1e.png)

    >[!Tip] 提醒
    >**S3 為物件儲存服務 (Object Storage)，Bucket Name 亦可作為 URL，因此需全球唯一命名，不能與任何其他 S3 Bucket Name 重疊，此外 S3 需為全為小寫英文字及連字號組成。**

5. 將下載的檔案及目錄上傳至建立的 S3 Bucket 中。
![圖片](https://hackmd.io/_uploads/SyRy_z5ell.png)

    >[!Tip] 提醒
    >**請注意 Amazon Bedrock Knowledge Bases 尚不支援非英文組成的目錄，請勿使用非英文的目錄。檔名則不在此限 (可使用中文)。**
:::
    
[**[ ⤴️ 回到目錄]**](#目錄)

---

### 3-2. 啟用模型調用日誌記錄 (Optional) (若您已經完成 2-2 章節，此處可跳過)

#### [Option 1] 通過 AWS CloudShell (Q for CLI)

:::spoiler **操作步驟**

1. 輸入以下 prompt 已啟用模型調用日誌記錄：
    ```
    啟用Amazon Bedrock模型調用日誌記錄(包含文字、影像、內嵌項目、Video)，將日誌指定存放至CloudWatch，並設定日誌保留7天。設定過程中需考量資安要求，並遵循最小授權原則。
    ```
    ![image](https://hackmd.io/_uploads/ryOVuNL5el.png)

:::

#### [Option 2] 通過 AWS CloudShell (Shell Script)
    
:::spoiler **操作步驟**

1. 執行以下指令，以啟用 Bedrock Audit Log 能力
    
    ```bash!
    AWS_ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
    
    # 建立 CloudWatch 日誌群組
    aws logs create-log-group --log-group-name /aws/bedrock/model-invocation
    aws logs put-retention-policy --log-group-name /aws/bedrock/model-invocation --retention-in-days 7
    
    # 建立 IAM Role
    ROLE_ARN=$(aws iam create-role --role-name bedrock-model-invocation-audit-log --assume-role-policy-document "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"bedrock.amazonaws.com\"},\"Action\":\"sts:AssumeRole\",\"Condition\":{\"StringEquals\":{\"aws:SourceAccount\":\"$AWS_ACCOUNT\"},\"ArnLike\":{\"aws:SourceArn\":\"arn:aws:bedrock:us-west-2:$AWS_ACCOUNT:*\"}}}]}" --query 'Role.Arn' --output text)
    POLICY_ARN=$(aws iam create-policy --policy-name bedrock-model-invocation-audit-log-policy --policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["logs:CreateLogStream","logs:PutLogEvents"],"Resource":"arn:aws:logs:us-west-2:'$AWS_ACCOUNT':log-group:/aws/bedrock/model-invocation:log-stream:*"}]}' --query 'Policy.Arn' --output text)
    aws iam attach-role-policy --role-name bedrock-model-invocation-audit-log --policy-arn $POLICY_ARN
    
    # 啟用 Amazon Bedrock 模型調用日誌記錄
    sleep 5
    aws bedrock put-model-invocation-logging-configuration --logging-config "cloudWatchConfig={logGroupName=\"/aws/bedrock/model-invocation\",roleArn=\"$ROLE_ARN\"},textDataDeliveryEnabled=True,imageDataDeliveryEnabled=True,embeddingDataDeliveryEnabled=True"
    ```
    
    ![圖片](https://hackmd.io/_uploads/ry3fbcGMyx.png)

:::

#### [Option 3] 通過 AWS Management Console

:::spoiler **操作步驟**
1. 進入 **Amazon CloudWatch** 服務
![圖片](https://hackmd.io/_uploads/rJ1tzehxke.png)

2. 進入 **日誌 (Logs) > 日誌群組 (Log groups)**
![圖片](https://hackmd.io/_uploads/SJQKXxnxke.png)

3. 點擊 **建立日誌群組 (Create log group)**
    - **日誌群組名稱 (Log group name):** `/aws/bedrock/model-invocation`
    - **保留設定 (Retention setting):** `1 週 (7 天) - 1 week (7 days)`
    - 完成後點擊 **建立 (Create)**

4. 進入 **Amazon Bedrock** 服務
![圖片](https://hackmd.io/_uploads/S1YeGJiJyl.png)

5. 在左方導覽列 (如果沒有出現導覽列，可點擊左上方的漢堡圖示 ![圖片](https://hackmd.io/_uploads/r1pw9kpyJg.png =30x) 展開)，點擊 **Bedrock configurations** > **設定 (Settings)**

6. 啟用 `模型調用日誌記錄 (Model Invocation logging)`
    - **選取日誌記錄目的地 (Select the logging destinations)：** `僅限 CloudWatch Logs (Cloudwatch Logs only)`
    - **日誌群組名稱 (Log group name)：** `/aws/bedrock/model-invocation`
    - **建立並使用新角色 (Create and use a new role)：** `bedrock-model-invocation-audit-log`
    - 完成後點擊 **儲存設定 (Save settings)**
:::

[**[ ⤴️ 回到目錄]**](#目錄)

---

### 3-3. 建立 Knowledge Base

1. 進入 **Amazon Bedrock** 服務
![圖片](https://hackmd.io/_uploads/S1YeGJiJyl.png)

2. 在左方導覽列 (如果沒有出現導覽列，可點擊組左上方的漢堡圖示 ![圖片](https://hackmd.io/_uploads/r1pw9kpyJg.png =30x) 展開)，點擊 **Build** > **知識庫 (Knowledge bases)** 來快速建立 RAG 應用
![image](https://hackmd.io/_uploads/r1JcFNIcxl.png =100x)

3. 在右方主視窗中，點擊 **建立 (Create)** > **知識庫 (使用向量存放區) (Knowledge Base with vector store)**，並完成以下步驟 (未提及的參數設定可保留預設)：
![圖片](https://hackmd.io/_uploads/HJ7RTYOgge.png)
    - *步驟 (1/4):* 提供知識庫詳細資訊 (Provide knowledge base details)
        - **知識庫名稱 (Knowledge base name)：** `regulation-document-graphrag-semantic`
        - **Data Source:** `Amazon S3`
        - **Log deliveries - Application logs:** `可評估啟用以用於 Troubleshooting`
    - *步驟 (2/4):* 設定資料來源 (Configure data source)
        - **[資料來源 1]**
            - **資料來源名稱 (Data source name)：** `data-source-regulation-docs-text-other`
            - **S3 URI:** `s3://genai-rag-documents-[Account-ID]-us-west-2/text-format/others/`
                >[!Tip] 提醒
                > 由於教學環境有資源使用限制 (Throttling)，若您使用自己的 AWS 環境進行測試，可評估擴大資料範圍
            - **剖析策略 (Parsing strategy):** `Amazon Bedrock 預設剖析器`
            - **分塊策略 (Chunking strategy):** `語義分塊 (Semantic chunking)`
                - **區塊的字符大小上限:** `8192`
            - 進階設定
                - **Data deletion Policy:** `Delete`
        - **[資料來源 2]**
            - **資料來源名稱 (Data source name)：** `data-source-regulation-docs-text-cloud`
            - **S3 source:** `s3://genai-rag-documents-[Account-ID]/text-format/cloud/`
                >[!Tip] 提醒
                > 由於教學環境有資源使用限制 (Throttling)，若您使用自己的 AWS 環境進行測試，可評估擴大資料範圍
            - **剖析策略 (Parsing strategy):** `Amazon Bedrock 預設剖析器`
            - **分塊策略 (Chunking strategy):** `語義分塊 (Semantic chunking)`
                - **區塊的字符大小上限:** `8192`
            - 進階設定
                - **Data deletion Policy:** `Delete`
    - *步驟 (3/4):* 選取內嵌項目模型並設定向量存放區 (Select embeddings model and configure vector store)
        - **內嵌項目模型 (Embedding model):** `Titan Text Embeddings v2`
        - **向量資料庫 (Vector database):** `快速建立新的向量儲存 - 建議值` > `Amazon Neptune Analytics (GraphRAG)`
    - *步驟 (4/4)*: 檢閱並建立 (Review and create)
        - 點擊 **建立知識庫 (Create knowledge base)**

    >[!Tip] 提醒
    >**此處約需 5~10 分鐘等待 Amazon Neptune 部署**
    >![圖片](https://hackmd.io/_uploads/rypyx9dexx.png)

[**[ ⤴️ 回到目錄]**](#目錄)

---

### 3-4. 同步資料 (Embedding)

1. 當環境建置完成，前往 **資料來源 (Data source)** 選擇 `data-source-regulation-docs-text-other` 及 `data-source-regulation-docs-text-cloud`，接著點擊 **同步 (Sync)**
![image](https://hackmd.io/_uploads/S1aC3YqF1x.png =400x)

    >[!Tip] 提醒
    >**此處約需 5 ~ 10 分鐘進行資料向量處理**
    >![image](https://hackmd.io/_uploads/B1AeaKqY1g.png =400x)

[**[ ⤴️ 回到目錄]**](#目錄)

---

### 3-5. 測試知識庫

1. 資料完成同步後，即可在右方聊天視窗進行知識庫測試 (在 **選取模型 (Select model)** 選擇 `Anthropic > Claude Sonnet 4 v1`)：
    ```
    金融機構將應用系統部署上雲時，需要遵循哪些規範要求？
    金融機構上雲在選擇受委託機構時需要進行哪些盡職調查？
    保險業將應用系統部署上雲時，需要遵循哪些規範要求？
    保險業如何監督和管理受委託機構的作業品質？
    金融機構跟保險業在上雲的規範中，主要有哪些差異？
    我今年 40 歲，我何時才可以申請退休？退休時我應該怎麼做才能夠申請到最多的退休金？
    公司進行組織調整時，對於以下幾種員工的權益保障有何不同：懷孕女性員工、正在請職業災害補償的員工、一般正職員工、特別休假即將到期的員工
    ```

    :::spoiler **回應結果示範**
    - `金融機構將應用系統部署上雲時，需要遵循哪些規範要求？`
        ![image](https://hackmd.io/_uploads/HkXu7DI5lg.png)

    - `金融機構上雲在選擇受委託機構時需要進行哪些盡職調查？`
        ![image](https://hackmd.io/_uploads/HJy9QPU5ll.png)

    - `保險業將應用系統部署上雲時，需要遵循哪些規範要求？`
        ![image](https://hackmd.io/_uploads/rkdnmvLqge.png)

    - `保險業如何監督和管理受委託機構的作業品質？`
        ![image](https://hackmd.io/_uploads/B1wC7P85eg.png)

    - `金融機構跟保險業在上雲的規範中，主要有哪些差異？`
        ![image](https://hackmd.io/_uploads/ByL2VvUclx.png)

    - `我今年 40 歲，我何時才可以申請退休？退休時我應該怎麼做才能夠申請到最多的退休金？`
        ![image](https://hackmd.io/_uploads/rJSUSP8qeg.png)

    - `公司進行組織調整時，對於以下幾種員工的權益保障有何不同：懷孕女性員工、正在請職業災害補償的員工、一般正職員工、特別休假即將到期的員工`
        ![image](https://hackmd.io/_uploads/BkEfBwLqlg.png)
    :::

[**[ ⤴️ 回到目錄]**](#目錄)

---

### 3-6. 至 Amazon Neptune 檢視 Embeddings 處理內容
1. 進入 **Amazon Neptune** 服務
![圖片](https://hackmd.io/_uploads/rJkCOiOggg.png)

2. 在左方導覽列 (如果沒有出現導覽列，可點擊左上方的漢堡圖示 ![圖片](https://hackmd.io/_uploads/r1pw9kpyJg.png =30x) 展開)，點擊 **Analytics** > **Graphs**
    
3. 在右方主視窗中，選擇 Knowledge Base 的 **Neptune Graph**，並點擊 **Modify**
    ![圖片](https://hackmd.io/_uploads/By0b6jOxex.png)
    - 勾選 `Enable public connectivity`，完成後點擊 **Next** > **Submit**
        ![圖片](https://hackmd.io/_uploads/HJ9I6j_gge.png)

    
4. 在左方導覽列 (如果沒有出現導覽列，可點擊左上方的漢堡圖示 ![圖片](https://hackmd.io/_uploads/r1pw9kpyJg.png =30x) 展開)，點擊 **Notebooks**
    ![圖片](https://hackmd.io/_uploads/S1EIKouxlg.png =150x)

5. 在右方主視窗中，點擊 **Create Notebook**，完成以下設定後點擊 **Create notebook**：
    ![圖片](https://hackmd.io/_uploads/HJEsKouxel.png)
    - Neptune Service: `Analytics`
    - Graph: `bedrock-knowledge-base`
    - Notebook name: `aws-neptune-graphrag`
    - IAM role: `AWSNeptuneNotebookRole-graphrag`
    - VPC: `default`
    
6. 等待 **Status** 轉換成 `Ready` (約需 5 分鐘)，接著點擊 **Actions** > **Open Graph Explorer**
    ![圖片](https://hackmd.io/_uploads/BkYmjsOeex.png =200x)

7. 點擊右上方的![圖片](https://hackmd.io/_uploads/Bymr0sdlel.png =200x)，您現在可以檢視及觀察 Embedding 的處理內容
    ![圖片](https://hackmd.io/_uploads/BJhQpS9lge.png)

[**[ ⤴️ 回到目錄]**](#目錄)

---