# AWS 生成式 AI 應用工作坊:Amazon Bedrock Workshop for FSI (金融服務行業) ## Workshop Lab Link >[!Tip] 提醒 >**建議瀏覽器:Firefox、Chrome** - workshop link: https://catalog.us-east-1.prod.workshops.aws/join?access-code=24d1-071f93-db ### [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/rJ-SAC9ykl.png) - System Prompt: `你是專業的資深程式開發人員,你將協助使用者生成程式碼,並依據專業提供合適的程式碼及修改建議,所有對話都必須使用台灣中文進行對話。` - User Prompt: `請寫出一支 Python 程式,運作於 Lambda,當中須包含 putObject 及 getObject 的程式及示範呼叫。` - 參考資料: - Anthropic Claude Prompt Engineering: https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview - Mapping the Mind of a Large Language Model: https://www.anthropic.com/research/mapping-mind-language-model --- ## 2. Amazon Bedrock 的 RAG 實作:Knowledge Bases - Agents for Amazon Bedrock ### 2-1. 建立 S3 Bucket 以存放用於 RAG 的資料 1. 下載資料 (以法規文件為例),並將其解壓縮:https://aws.bardlan.com/a7w ![圖片](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. 建立 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` - Chunking and parsing configurations: `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 環境部署** 4. 當環境建置完成,前往 **資料來源 (Data source)** 選擇 `data-source-fsc` 並點擊 **同步 (Sync)** ![圖片](https://hackmd.io/_uploads/ryipr1jy1g.png) >[!Tip] 提醒 >**此處約需 10~15 分鐘進行資料向量處理** 5. 資料完成同步後,即可在右方聊天視窗進行知識庫測試 (在 **選取模型 (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) ::: 6. 點擊![圖片](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) ::: --- ### 2-3. 建立 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` - 代理程式指示 (Agent Prompt): `你是金融上雲的諮詢專家,你將依據問題決定要查詢內部資料還是呼叫 API。除了上雲法規及諮詢問題、遷移申請及查詢申請狀態外,其他無關的問題請回答:「抱歉,我沒有這方面的知識」。所有的對答都需要使用台灣中文。` - 其他設定 (Additional settings) - 使用者輸入 (User input):`Enabled` - 上述完成後,先點擊 **儲存 (Save)** 以建立 Agent 4. 前往 **動作群組 (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: - 名稱 (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): `service_required` - 描述 (Description): `Service Required` - 類型 (Type): `Array` - 必要 (Required): `True` - 名稱 (Name): `application_name` - 描述 (Description): `Application Name` - 類型 (Type): `String` - 必要 (Required): `True` - 名稱 (Name): `kickoff_date` - 描述 (Description): `Kickoff Date (YYYYMMDD)` - 類型 (Type): `String` - 必要 (Required): `True` - 動作群組函數 (Action group function) 2: - 名稱 (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` - 上述完成後請點擊 **建立 (Create)** 5. 前往 **知識庫 (Knowledge bases)** 並點擊 **新增 (Add)** ![圖片](https://hackmd.io/_uploads/ry-oEgskke.png) - 選取知識庫 (Select knowledge base):`regulation-document-semantic` - 代理程式的知識庫指示 (Knowledge base instructions for Agent):`查詢及回應有關金融業上雲的相關法規` - 完成後點擊 **Add** 6. 點擊 **儲存 (Save)** 以保存 Agent 相關設定 7. 前往 **Amazon Lambda** 服務 ![圖片](https://hackmd.io/_uploads/H1YY8liykg.png) 8. 點擊產生出的 Lambda function (函數): `函數名稱為 cloud-application 開頭` ![圖片](https://hackmd.io/_uploads/Sy0iIlsyJl.png) 9. 取代程式碼 **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) 10. 完成後點擊 ![圖片](https://hackmd.io/_uploads/HkyhumT1yx.png =50x) 11. 回到 **Amazon Bedrock** 服務 ![圖片](https://hackmd.io/_uploads/S1YeGJiJyl.png) 12. 點擊 **代理程式 (Agent)**,並進入 `cloud-advisor` ![圖片](https://hackmd.io/_uploads/ByWVWxoy1g.png) ![圖片](https://hackmd.io/_uploads/r14nwloJkg.png) 13. 點擊 **在代理程式建置器中編輯 (Edit in Agent Builder)** > **準備 (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) ::: --- ## 3. AWS Sample: Bedrock Claude Chat - Reference Link: https://github.com/aws-samples/bedrock-claude-chat - Steps: https://hackmd.io/@dennisc/Sk3FCxdJkg ---