# 國泰金控雲世代計畫:Amazon Bedrock Workshop ## Workshop Lab Link >[!Tip] 提醒 >**建議瀏覽器:Firefox、Chrome** - workshop link: https://catalog.us-east-1.prod.workshops.aws/join?access-code=691c-02e133-0b ### [Option 1] 使用 AWS 練習環境 :::spoiler **操作步驟** 1. 進入課程提供的 AWS Workshop Studio 網址,並點擊 **「Email one-time password (OTP)」**,以獲得一次性臨時密碼。 ![圖片](https://hackmd.io/_uploads/SyrbMYEH0.png) 2. 輸入**自己的 Email** 以用於接收一次性臨時密碼 ,並點擊 **「傳送密碼」**。 ![圖片](https://hackmd.io/_uploads/r1nU7KNrC.png) >[!Tip] 提醒 >**活動期間使用相同 Email 進行登入將會使用相同的練習環境** 3. 進入自己的 Email 以取得 **9 碼 Passcode**。 ![圖片](https://hackmd.io/_uploads/rJhmNt4rC.png) 4. 將 9 碼 Passcode 填入,並點擊 **「登入」**。 ![圖片](https://hackmd.io/_uploads/BySiVKNB0.png) 5. 登入並進行環境使用要求條款後,請勾選 **「I agree with the Terms and Conditions」**,並點擊 **「Join event」**。 ![圖片](https://hackmd.io/_uploads/r14SItErA.png) ==中間省略== ![圖片](https://hackmd.io/_uploads/B1wWLK4rC.png) 6. 點擊 **「Open AWS console」**,以開啟 AWS Management Console。 ![圖片](https://hackmd.io/_uploads/SJSEvtNSC.png) >[!Tip] 提醒 >**練習過程中,若 AWS Management Console 逾時登出,可再次點擊此連結以重新登入並更新憑證** 7. 進入 AWS Management Console 後,即完成登入。 ![圖片](https://hackmd.io/_uploads/SkIu9KVSA.png) ::: ### [Option 2] 通過 AWS Management Console Signin Console 登入 :::spoiler **操作步驟** 1. 進入 [AWS Management Console](https://console.aws.amazon.com/),並輸入 **Account ID / Alias** 及 Admin 的 **User Name** 及 **Password** 後,點擊 **「Sign in」** 登入。 ![圖片](https://hackmd.io/_uploads/r1_mKKNrR.png) 2. 進入 AWS Management Console 後,即完成登入。 ![圖片](https://hackmd.io/_uploads/HJfDqK4H0.png) ::: ### [Option 3] 通過 AWS Identity Center 登入 (Optional) :::spoiler **操作步驟** 1. 進入 AWS Identity Center 登入網址,並輸入 **Username** 及 **Password**,完成後點擊 **「Sign in」**。 ![圖片](https://hackmd.io/_uploads/B1zwstVHC.png) 2. 登入後,選擇**對應 AWS Account 的 Admin 權限**後,點擊連結以登入。 ![圖片](https://hackmd.io/_uploads/H1SAiKNBA.png) 3. 進入 AWS Management Console 後,即完成登入。 ![圖片](https://hackmd.io/_uploads/SkIu9KVSA.png) ::: --- ## 1. Anthropic Claude foundation model 的 prompt engineering 技巧分享 1. 確認區域為 **奧勒岡 (Oregon)** ![圖片](https://hackmd.io/_uploads/BkDg2CcJ1e.png) 2. 點擊 **齒輪** 可以更換為您習慣的語言 ![圖片](https://hackmd.io/_uploads/HkWN3Rckkx.png) 3. 進入 **Amazon Bedrock** 服務 ![圖片](https://hackmd.io/_uploads/ry1HiR9kke.png) 4. 點擊 **模型存取權 (Model access)** 來啟用欲存取的 Foundation Models (FM) ![圖片](https://hackmd.io/_uploads/SJtI60cJkg.png) 5. 您可點擊 **啟用所有模型 (Enable all models)** 來啟用所有的 FMs 存取權限 ![圖片](https://hackmd.io/_uploads/rJhVaC5kJl.png) >[!Tip] 提醒 >**此處選擇 Enable all models 為在 Workshop 中簡化操作目的,在您自己的 AWS 環境時,請按照您的實際需求選擇所需的 FMs** 6. 點擊 **範例 (Examples)** 可測試各種生成式應用情境 ![圖片](https://hackmd.io/_uploads/ByeM005Jke.png) 7. 選擇 **遊樂場 (Playground)** 可針對 FMs 進行快速的測試 ![圖片](https://hackmd.io/_uploads/HkCVN0ox1g.png) - 模型: Anthropic > Claude 3.5 Sonnet - 系統提示 (System Prompt): `你是專業的資深程式開發人員,你將協助使用者生成程式碼,並依據專業提供合適的程式碼及修改建議,所有對話都必須使用台灣中文進行對話。` - User Prompt: `請寫出一支 Python 程式,運作於 Lambda,當中須包含 putObject 及 getObject 的程式及示範呼叫。` :::spoiler **回應結果示範** ![圖片](https://hackmd.io/_uploads/ryYTVAsekx.png) ::: 8. Anthropic Claude Prompt Engineering 參考連結 - Anthropic Claude Prompt Engineering: https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview --- ## 2. Amazon Bedrock Knowledge Bases (RAG) ### 2-1. 建立 S3 Bucket 以存放用於 RAG 的資料 1. 下載資料 (以法規文件為例),並將其解壓縮:https://aws.bardlan.com/gp2 ![圖片](https://hackmd.io/_uploads/HkTcyko1kl.png) 2. 進入 **Amazon S3** 服務 ![圖片](https://hackmd.io/_uploads/HJWGJkjy1x.png) 3. 點擊 **建立儲存貯體 (Create bucket)** ![圖片](https://hackmd.io/_uploads/BkvS1yoykx.png) 4. 輸入 `genai-rag-documents-[Account_ID]` 作為儲存貯體名稱 (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/Hy_6byjkyg.png) >[!Tip] 提醒 >**請注意 Amazon Bedrock Knowledge Bases 尚不支援非英文組成的目錄,請勿使用非英文的目錄。檔名則不在此限 (可使用中文)。** --- ### 2-2. 啟用模型調用日誌記錄 (Optional) 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 =20x) 展開),點擊 **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)** --- ### 2-3. 建立 Knowledge Base 1. 進入 **Amazon Bedrock** 服務 ![圖片](https://hackmd.io/_uploads/S1YeGJiJyl.png) 2. 在左方導覽列 (如果沒有出現導覽列,可點擊右上方的漢堡圖示 ![圖片](https://hackmd.io/_uploads/r1pw9kpyJg.png =20x) 展開),點擊 **知識庫 (Knowledge bases)** 來快速建立 RAG 應用 ![圖片](https://hackmd.io/_uploads/rJHXGJsJke.png) 3. 在右方主視窗中,點擊 **建立知識庫 (Create knowledge base)**,並完成以下步驟 (未提及的參數設定可保留預設): ![圖片](https://hackmd.io/_uploads/ByR8fks1kx.png) - *步驟 (1/4):* 提供知識庫詳細資訊 (Provide knowledge base details) - 知識庫名稱 (Knowledge base name):`regulation-document-semantic` - Data Source: `Amazon S3` - Log deliveries - Application logs: `可評估啟用以利 Troubleshooting` - *步驟 (2/4):* 設定資料來源 (Configure data source) - 資料來源名稱 (Data source name):`data-source-fsc` - S3 URI: `s3://genai-rag-documents-[Account-ID]` - Chunking and parsing configurations: `Custom` - Parsing strategy: `Claude 3 Sonnet v1` - Chunking strategy: `Semantic chunking` - Max token size for a chunk: `8192` - 進階設定 - Data deletion Policy: `Delete` - *步驟 (3/4):* 選取內嵌項目模型並設定向量存放區 (Select embeddings model and configure vector store) - 內嵌項目模型 (Embedding model): `Titan Text Embeddings v2` - 向量資料庫 (Vector database): ` 快速建立新的向量儲存 (OpenSearch Serverless - recommend)` - *步驟 (4/4)*: 檢閱並建立 (Review and create) - 點擊 **建立知識庫 (Create knowledge base)** >[!Tip] 提醒 >**此處約需 5~10 分鐘進行 Knowledge Base 環境部署** --- ### 2-4. 同步資料 (Embedding) 1. 當環境建置完成,前往 **資料來源 (Data source)** 選擇 `data-source-fsc` 並點擊 **同步 (Sync)** ![圖片](https://hackmd.io/_uploads/ryipr1jy1g.png) >[!Tip] 提醒 >**此處約需 10~15 分鐘進行資料向量處理** ### 2-5. 測試知識庫 1. 資料完成同步後,即可在右方聊天視窗進行知識庫測試 (在 **選取模型 (Select model)** 選擇 `Anthropic > Claude 3.5 Sonnet`): ``` 金融業上雲需要注意哪些事項? 保險業上雲需要注意哪些事項? 針對金融資安,主管機關有哪些要求? ``` :::spoiler **回應結果示範** - `金融業上雲需要注意哪些事項?` ![圖片](https://hackmd.io/_uploads/HJeexljkkg.png) - `保險業上雲需要注意哪些事項?` ![圖片](https://hackmd.io/_uploads/r1Lmxlskyl.png) >[!Tip] 提醒 > **此處回應若包含金融機構上雲應注意事項相關資料是合理的,因為大語言模型在訓練過程中,「保險業」與「金融機構」的是相近的詞彙**。 > **可通過 Prompt Engineering 來優化,或是結合篩選條件機制來利用標籤控制文件搜尋範圍。** - `針對金融資安,主管機關有哪些要求?` ![圖片](https://hackmd.io/_uploads/ryUIxeskkx.png) ::: 2. 點擊![圖片](https://hackmd.io/_uploads/H1pl7m6k1e.png =30x)以展開組態設定,來進行不同的嘗試: ![圖片](https://hackmd.io/_uploads/r1YXiJjJ1g.png) - 篩選條件:`target = insurance` - `保險業上雲需要注意哪些事項?` - Break down queries: `checked` - `金融業上雲應該注意哪些事項?還有資安有哪些面向需要注意?並請提供這些事項具體在哪些條款 (第幾條第幾項第幾款)?` :::spoiler **回應結果示範** - `保險業上雲需要注意哪些事項?` ![圖片](https://hackmd.io/_uploads/SJJjJgsy1x.png) - `金融業上雲應該注意哪些事項?還有資安有哪些面向需要注意?並請提供這些事項具體在哪些條款 (第幾條第幾項第幾款)?` ![圖片](https://hackmd.io/_uploads/HJeplxjykg.png) ![圖片](https://hackmd.io/_uploads/SkCH1goy1g.png) ::: --- ## 3. Amazon Bedrock Agents ### 3-1. 建立 Agent 1. 進入 **Amazon Bedrock** 服務 ![圖片](https://hackmd.io/_uploads/S1YeGJiJyl.png) 2. 點擊 **代理程式 (Agents)** 來快速建立 RAG 與 API 整合應用 ![圖片](https://hackmd.io/_uploads/ByWVWxoy1g.png) 3. 點擊 **建立代理程式 (Create Agent)** ![圖片](https://hackmd.io/_uploads/Skhrbls1yg.png) - 名稱 (Name): `cloud-advisor` - 選取模型 (Select model):`Claude 3 Sonnet` - 代理程式指示 (Agent Prompt): `你是金融上雲的諮詢專家,你將依據問題決定要查詢內部資料還是呼叫 API。除了上雲法規及諮詢問題、遷移申請及查詢申請狀態外,其他無關的問題請回答:「抱歉,我沒有這方面的知識」。所有的對答都需要使用台灣中文。` - 其他設定 (Additional settings) - 使用者輸入 (User input):`Enabled` - 上述完成後,先點擊 **儲存 (Save)** 以建立 Agent --- ### 3-2. 建立動作群組 (API 整合) 1. 前往 **動作群組 (Action groups)** 並點擊 **新增 (Add)** ![圖片](https://hackmd.io/_uploads/H1qPfejJJg.png) - 輸入動作群組名稱 (Enter Action group name):`cloud-application` - 描述 (Description):`處理上雲相關申請作業` - 動作群組類型 (Action group type): `使用函數詳細資訊進行定義` - 動作群組調用 (Action group invocation): `快速建立一個新的 Lambda 函數 - 建議值` - 動作群組函數 (Action group function) 1: ![圖片](https://hackmd.io/_uploads/SyrCWZ2gyx.png) :::spoiler **JSON 格式** { "name": "apply-cloud-migration", "description": "提供上雲遷移申請", "parameters": [ { "name": "cloud_provider", "description": "Cloud Provider", "required": "True", "type": "String", "tableIndex": 0 }, { "name": "department_name", "description": "Department Name", "required": "True", "type": "String", "tableIndex": 1 }, { "name": "services_required", "description": "Services Required", "required": "True", "type": "Array", "tableIndex": 2 }, { "name": "workload_name", "description": "Workload Name", "required": "True", "type": "String", "tableIndex": 3 }, { "name": "kickoff_date", "description": "Kickoff Date (YYYYMMDD)", "required": "True", "type": "String", "tableIndex": 4 } ], "requireConfirmation": "DISABLED" } ::: - 名稱 (Name): `apply-cloud-migration` - 描述 (Description): `提供上雲遷移申請` - 參數 (Parameters): - 名稱 (Name): `cloud_provider` - 描述 (Description): `Cloud Provider` - 類型 (Type): `String` - 必要 (Required): `True` - 名稱 (Name): `department_name` - 描述 (Description): `Department Name` - 類型 (Type): `String` - 必要 (Required): `True` - 名稱 (Name): `services_required` - 描述 (Description): `Services Required` - 類型 (Type): `Array` - 必要 (Required): `True` - 名稱 (Name): `workload_name` - 描述 (Description): `Workload Name` - 類型 (Type): `String` - 必要 (Required): `True` - 名稱 (Name): `kickoff_date` - 描述 (Description): `Kickoff Date (YYYYMMDD)` - 類型 (Type): `String` - 必要 (Required): `True` - 動作群組函數 (Action group function) 2: ![圖片](https://hackmd.io/_uploads/rJ78gZnlyx.png) :::spoiler **JSON 格式** { "name": "check-approval-status", "description": "查詢上雲遷移申請的核准狀態", "parameters": [ { "name": "department_name", "description": "Department Name", "required": "True", "type": "String", "tableIndex": 0 }, { "name": "workload_name", "description": "Workload Name", "required": "True", "type": "String", "tableIndex": 1 } ], "requireConfirmation": "DISABLED" } ::: - 名稱 (Name): `check-approval-status` - 描述 (Description): `查詢上雲遷移申請的核准狀態` - 參數 (Parameters): - 名稱 (Name): `department_name` - 描述 (Description): `Department Name` - 類型 (Type): `String` - 必要(Required): `True` - 名稱 (Name): `workload_name` - 描述 (Description): `Workload Name` - 類型 (Type): `String` - 必要(Required): `True` 2. 上述完成後請點擊 **建立 (Create)** ![圖片](https://hackmd.io/_uploads/BJxdQ-nxyx.png) --- ### 3-3. 調整 API 程式 1. 前往 **Amazon Lambda** 服務 ![圖片](https://hackmd.io/_uploads/H1YY8liykg.png) 2. 點擊自動生成的 Lambda function (函數): `函數名稱為 cloud-application 開頭` ![圖片](https://hackmd.io/_uploads/Sy0iIlsyJl.png) 3. 取代程式碼 **dummy_lambda.py** ``` import json def lambda_handler(event, context): agent = event['agent'] actionGroup = event['actionGroup'] function = event['function'] parameters = event.get('parameters', []) print(json.dumps(event)) responseText = "" match function: case "apply-cloud-migration": responseText = "The function {} was called successfully!".format(function) case "check-approval-status": responseText = "Your request is still under process." case _: pass # Execute your business logic here. For more information, refer to: https://docs.aws.amazon.com/bedrock/latest/userguide/agents-lambda.html responseBody = { "TEXT": { "body": responseText } } action_response = { 'actionGroup': actionGroup, 'function': function, 'functionResponse': { 'responseBody': responseBody } } dummy_function_response = {'response': action_response, 'messageVersion': event['messageVersion']} print("Response: {}".format(dummy_function_response)) return dummy_function_response ``` ![圖片](https://hackmd.io/_uploads/SJM5u76yke.png) 4. 完成後點擊左方的 ![圖片](https://hackmd.io/_uploads/HkyhumT1yx.png =50x) --- ### 3-4. 整合知識庫 1. 進入 **Amazon Bedrock** 服務 ![圖片](https://hackmd.io/_uploads/S1YeGJiJyl.png) 2. 點擊 **代理程式 (Agents)** 並進入 `cloud-advisor` ![圖片](https://hackmd.io/_uploads/Byfl8Z3gJe.png) 3. 點擊 **在代理程式建置器中編輯** ![圖片](https://hackmd.io/_uploads/HkqGUbngyg.png) 4. 前往 **知識庫 (Knowledge bases)** 並點擊 **新增 (Add)** ![圖片](https://hackmd.io/_uploads/ry-oEgskke.png) - 選取知識庫 (Select knowledge base):`regulation-document-semantic` - 代理程式的知識庫指示 (Knowledge base instructions for Agent):`查詢及回應有關金融業上雲的相關法規` 5. 完成後點擊 **Add** 以整合知識庫 ![圖片](https://hackmd.io/_uploads/S1VAXWhxyg.png) --- ### 3-5. 測試 Agent 1. 點擊 **儲存 (Save)** 以保存 Agent 相關設定 2. 點擊 **準備 (Prepare)** 以準備進行 Agent 測試,並嘗試測試以下問題: ![圖片](https://hackmd.io/_uploads/BJZf_xs1yl.png) ``` 金融業上雲需要注意哪些事項? 我要申請系統上雲 我要查詢系統上雲申請狀態 我要請假 ``` :::spoiler **回應結果示範** - `金融業上雲需要注意哪些事項?` ![圖片](https://hackmd.io/_uploads/rJ9D_ljyyx.png) - 點擊 **顯示追蹤 (Show trace)** 可查看推理細節 ![圖片](https://hackmd.io/_uploads/S1xn_eskyl.png) - `我要申請系統上雲` ![圖片](https://hackmd.io/_uploads/SJRuKxiJyx.png) ![圖片](https://hackmd.io/_uploads/S1djsgs11l.png) - `我要請假` ![圖片](https://hackmd.io/_uploads/H1hznli1Jg.png) ::: --- ## 其他相關參考資料: - Mapping the Mind of a Large Language Model: https://www.anthropic.com/research/mapping-mind-language-model - [AWS Samples] Bedrock Claude Chat: https://github.com/aws-samples/bedrock-claude-chat - Workshop: https://hackmd.io/@dennisc/Sk3FCxdJkg ---