---
# System prepended metadata

title: Amazon Bedrock Workshop for FSI (1. Foundation Model 使用概覽)

---

# Amazon Bedrock Workshop for FSI (1. Foundation Model 使用概覽)

## 目錄
- [實驗環境準備](https://hackmd.io/@6g-86IJuRWiQ17aprBneGQ/HkjF3MBcge)
- [1. Amazon Bedrock Foundation Model 使用概覽](#1-Amazon-Bedrock-Foundation-Model-使用概覽)
    - [1.1. Amazon Bedrock 環境使用概覽](#11-Amazon-Bedrock-環境使用概覽)
    - [1.2. 使用 Amazon Q Developer for CLI](#12-使用-Amazon-Q-Developer-for-CLI)
    - [1.3 Anthropic Claude 的 prompt engineering 技巧](#13-Anthropic-Claude-的-prompt-engineering-技巧)
- [2. Amazon Bedrock Knowledge Bases (Vector Store) for RAG](https://hackmd.io/@6g-86IJuRWiQ17aprBneGQ/ByyeB7r5eg)
- [3. Amazon Bedrock Knowledge Bases (Vector Store) for GraphRag](https://hackmd.io/@6g-86IJuRWiQ17aprBneGQ/HJmVw7S9gl)
- [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)

---

## 1. Amazon Bedrock Foundation Model 使用概覽

### 1.1. Amazon Bedrock 環境使用概覽

>[!Tip] 提醒
>進入本章節前，請確認您已完成 **實驗環境準備** > **啟用模型存取權**。
    
1. 進入 **Amazon Bedrock** 服務
![圖片](https://hackmd.io/_uploads/rJ4a68wn1l.png)

2. 進入 **Test** > **Chat / Text playground** 可針對 FMs 進行快速的測試
![image](https://hackmd.io/_uploads/r1Pti78cel.png =200x)

    - **選取模型：** `Anthropic > Claude Sonnet 4 v1`
    - **系統提示 (System Prompt):** 
    ```
    你是一位專業的資深程式開發人員，擅長各種程式語言。你的任務是協助使用者生成程式碼，並依據專業知識提供合適的程式碼及修改建議。你將遵循以下規則：
    1. 使用台灣中文進行對話。
    2. 根據使用者的需求和問題，提供相應的程式碼解決方案。
    3. 如果使用者提供了現有的程式碼，請仔細審閱並提出改進建議。
    4. 提供詳細的解釋和註解，以幫助使用者理解程式碼的邏輯和功能。
    5. 保持專業、友好和耐心的態度，確保使用者能夠輕鬆地理解你的解釋。

    請以下列格式回覆：
    <程式碼>
    [在此插入相關程式碼]
    </程式碼>

    <解釋>
    [在此提供詳細的解釋和註解]
    </解釋>
    ```
    - **使用者提示 (User Prompt):** 
    ```
    撰寫一支運行於 Lambda 的 Python 程式，包含 putObject 及 getObject functions 來上傳/下載物件到 S3 bucket，並須包含以下參數：
    <參數>
    - bucket_name: s3 bucket 的名稱
    - object_name: 上傳/下載的物件名稱
    - data: 上傳下載的檔案
    </參數>

    需提供呼叫範例
    ```
    
    :::spoiler **回應結果示範**
    ![image](https://hackmd.io/_uploads/BkAIhQ8clg.png)
    :::
    
    >[!Note] 說明
    >在與 Anthropic Claude FM 對話時，主要有三種不同的提示類型：
    > - **系統提示 (System Prompt):** 用於在與 Claude 提出問題或任務之前，為 Claude 定義情境、說明和規則。
    > - **使用者提示 (User Prompt):** 使用者所提供的問題或任務等指示，對話必須以使用者提示開始
    > - **助理提示 (Assistant Prompt):** Claude 的回應
    >
    >![圖片](https://hackmd.io/_uploads/SJWgcxdbke.png)
    >
    >您有三個參數可以調整生成結果：
    > - **Temperature:** 控制回答的隨機性，較低值更為精確、較高值更具創意
    > - **TopP:** 控制字詞選擇範圍，較低值偏保守、較高值偏多樣
    > - **TopK:** 限制候選詞數量，較低值偏保守、較高值具創意(40-100)

    - **使用者提示 (User Prompt):** 
        - 上傳圖片：
            ![image](https://hackmd.io/_uploads/r1XbHekf1x.png =300x)
        - `根據此菜單圖片，大杯黑糖牛奶多少錢？`
        - `黑糖牛奶多少錢？`
        - `中杯黑糖牛奶+小杯espresso多少錢？`

        :::spoiler **回應結果示範**
        - 根據此菜單圖片，大杯黑糖牛奶多少錢？
            ![image](https://hackmd.io/_uploads/Bk8sTQU5gl.png)
        - 黑糖牛奶多少錢？
            ![image](https://hackmd.io/_uploads/rk76a7Lqxe.png)
        - 中杯黑糖牛奶+小杯espresso多少錢？
            ![image](https://hackmd.io/_uploads/B1wATX8qlx.png)
        :::

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

---

### 1.2. 使用 Amazon Q Developer for CLI

1. 在 **AWS CloudShell** 的 **Q for CLI** 中輸入以下 prompt，進行程式碼撰寫測試：

    ```
    你是一位專業的資深程式開發人員，擅長各種程式語言。你的任務是撰寫一支運行於 Lambda 的 Python 程式，包含 putObject 及 getObject functions 來上傳/下載物件到 S3 bucket，須包含以下參數，並遵循規則，你還需要提供呼叫範例：# 參數 - bucket_name: s3 bucket 的名稱 - object_name: 上傳/下載的物件名稱 - data: 上傳下載的檔案 # 規則 1. 使用台灣中文進行對話。 2. 根據使用者的需求和問題，提供相應的程式碼解決方案。 3. 如果使用者提供了現有的程式碼，請仔細審閱並提出改進建議。 4. 提供詳細的解釋和註解，以幫助使用者理解程式碼的邏輯和功能。 5. 保持專業、友好和耐心的態度，確保使用者能夠輕鬆地理解你的解釋。 # 回覆格式 <程式碼> [在此插入相關程式碼] </程式碼> <解釋> [在此提供詳細的解釋和註解] </解釋>
    ```

    :::spoiler **回應結果示範**
    ![image](https://hackmd.io/_uploads/HkZnb4U5le.png)
    ![image](https://hackmd.io/_uploads/HJMgXEL5gg.png)
    :::

2. 在 **AWS CloudShell** 的 **Q for CLI** 中輸入以下 prompt，進行圖片解析測試：

    ```
    根據菜單圖片https://d1wcvekt3937ya.cloudfront.net/drink_menu.png，回答以下問題：1. 大杯黑糖牛奶多少錢？、2. 黑糖牛奶多少錢？、3. 中杯黑糖牛奶+小杯espresso多少錢？
    ```

    :::spoiler **回應結果示範**
    ![image](https://hackmd.io/_uploads/ryzhMNLqgx.png)
    ![image](https://hackmd.io/_uploads/B1B0M4Icgx.png)
    :::

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

---

### 1.3 Anthropic Claude 的 prompt engineering 技巧

**:+1: Anthropic Claude Prompt Engineering 參考連結：https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview**

1. **提供清晰且具體的提示詞 (Be clear and direct)**
 
     - *不夠清晰與具體的提示詞範例* 
        - **使用者提示：**
        ```
        幫我移除以下客服日誌內容的PII：
        理專：您好，我是理財專員王小明。請問是林大華嗎？
        客戶：是的，我是林大華。
        理專：林先生您好，我這邊需要確認一下您的個人資料，方便告訴我您的出生年月日嗎？
        客戶：好的，我的生日是1980年5月15日。
        理專：謝謝。請問您的聯絡電話是0912345678嗎？
        客戶：沒錯，那是我的手機號碼。
        理專：好的。Email地址還是example@email.com嗎？
        客戶：對，email沒變。
        理專：最後確認一下您的住址，是台北市中山區中山北路十段100號5樓嗎？
        客戶：是的，地址正確。
        理專：非常感謝您的配合。最後想請教一下，您家裡目前有幾個人居住呢？
        客戶：我們家裡有4個人，包括我、太太和兩個小孩。
        理專: 了解了，謝謝您提供這些資訊。
        ```
        :::spoiler **回應結果示範**
        ![image](https://hackmd.io/_uploads/Sks4tl9F1x.png)
        ![image](https://hackmd.io/_uploads/rye8Kx5Fke.png)
        :::
    
    ---
    
    - *清晰並具體的提示詞範例* 
        - **使用者提示：**
        ```
        請依照以下步驟處理客服日誌內容：
        1.掃描並標示出所有PII資訊
        2.將個人識別資訊按以下要求處理(理專姓名不用遮罩)：
            - 姓名 -> 替換成[姓名]
            - 姓氏 -> 替換成[姓氏]
            - 生日 -> 替換成[生日]
            - 身分證字號 -> 使用*遮罩中間三碼 (*按字數產生)
            - 電話號碼 -> 使用*字元遮罩中間三碼 (*按字數產生)
            - 電子郵件 -> 使用x字元遮罩非 Domain 部分 (x按字數產生)
            - 銀行帳號 -> 替換成[帳號]
            - 信用卡號 -> 替換成[卡號]
            - 地址 -> 替換成[地址]
        3. 只輸出經過遮罩處理的完整內容，並保留原格式

        以下是需要處理的客服日誌內容：
        理專：您好，我是理財專員王小明。請問是林大華嗎？
        客戶：是的，我是林大華。
        理專：林先生您好，我這邊需要確認一下您的個人資料，方便告訴我您的出生年月日嗎？
        客戶：好的，我的生日是1980年5月15日。
        理專：謝謝。請問您的聯絡電話是0912345678嗎？
        客戶：沒錯，那是我的手機號碼。
        理專：好的。Email地址還是example@email.com嗎？
        客戶：對，email沒變。
        理專：最後確認一下您的住址，是台北市中山區中山北路十段100號5樓嗎？
        客戶：是的，地址正確。
        理專：非常感謝您的配合。最後想請教一下，您家裡目前有幾個人居住呢？
        客戶：我們家裡有4個人，包括我、太太和兩個小孩。
        理專: 了解了，謝謝您提供這些資訊。
        ```
        :::spoiler **回應結果示範**
        ![圖片](https://hackmd.io/_uploads/S1UW5vD3kx.png)
        ![圖片](https://hackmd.io/_uploads/SJFx5vwnyg.png)
        :::
        
    >[!Important] 小技巧
    >為了確保您的提示能夠有效被 Claude 理解，請遵循「清晰提示的黃金法則 (Golden Rule of Clear Prompting)」：
    >向同事或朋友展示您的提示，並要求他們遵循指示回答。如果他們能夠回答您想要的確切結果，那麼您的提示對於 Claude 來說可能也足夠清晰。請記住，雖然 Claude 是一個強大的 FM，但它還是需要依賴您的具體指示來提供最佳結果 (他不會心電感應)。透過提供清晰、直接且結構良好的提示，您可以釋放 Claude 的潛力並產生您想要的結果。

---

2. **通過系統提示賦予 Claude 角色扮演 (Give Claude a role - system prompts)**
    - *沒有角色扮演的提示詞範例* 
        - **系統提示：** 無
        - **使用者提示：**
        ```
        請跟我對練銷售基金的情境。我是理財專員，你是客戶。
        我們開始對話吧。
        ```
        ```
        您好，請問您最近有資金需求嗎？
        ```
        ```
        請問您怎麼稱呼？
        ```
        :::spoiler **回應結果示範**
        ![image](https://hackmd.io/_uploads/SyEH4PcKkg.png)
        :::
    
    ---
    
    - *各種角色扮演提示詞範例*
        - **系統提示：** 
        ```
        你現在是一位45歲的科技公司中階主管李小姐，具有以下特徵：
        1. 年收入180萬，有200萬閒置資金
        2. 已婚，有一個12歲的小孩
        3. 投資風險承受度中等
        4. 過去投資經驗以定存為主
        5. 對投資理財有興趣但知識有限
        6. 個性謹慎，需要詳細解釋才會做決定
        7. 主要投資目標是子女教育基金

        你將扮演這個角色與理財專員進行對話。你應該：
        - 在理財專員詢問前不主動提出明確需求
        - 提出符合你背景的問題和疑慮
        - 表達合理的投資考量和顧慮
        - 需要清楚的風險說明
        - 在未完全理解產品前不輕易同意
        ```
        - **使用者提示：**
        ```
        請跟我對練銷售基金的情境。我是理財專員，你是客戶。
        我們開始對話吧。
        ```
        ```
        您好，請問您最近有資金需求嗎？
        ```
        :::spoiler **回應結果示範**
        ![image](https://hackmd.io/_uploads/rkHJLD5Yye.png)
        :::
        
        ---
        
        - **系統提示：** 
        ```
        你現在是一位45歲的科技公司中階主管李小姐，具有以下特徵：
        1. 年收入180萬，有200萬閒置資金
        2. 已婚，有一個12歲的小孩
        3. 投資風險承受度中等
        4. 過去投資經驗以定存為主
        5. 對投資理財有興趣但知識有限
        6. 個性謹慎，需要詳細解釋才會做決定
        7. 主要投資目標是子女教育基金
        8. 奧客性格，講話非常尖酸刻薄，話少

        你將扮演這個角色與理財專員進行對話。你應該：
        - 在理財專員詢問前不主動提出明確需求
        - 提出符合你背景的問題和疑慮
        - 表達合理的投資考量和顧慮
        - 需要清楚的風險說明
        - 在未完全理解產品前不輕易同意
        ```
        - **使用者提示：**
        ```
        請跟我對練銷售基金的情境。我是理財專員，你是客戶。
        我們開始對話吧。
        ```
        ```
        您好，請問您最近有資金需求嗎？
        ```
        :::spoiler **回應結果示範**
        ![image](https://hackmd.io/_uploads/rJq5Lv9Y1g.png)
        :::
        
    >[!Important] 小技巧
    >提供有關您希望 Claude 扮演的角色，並且清晰詳細的背景資訊。您提供的資訊越多，Claude 就越能理解並體現所需的角色。
    >通過嘗試不同的角色和不同的提示，找到適合您的情境的最佳結果。

---

3. **使用 XML Tags 來結構化定義提示 (Use XML tags)** *(也支援 Markdown 格式)*
    - *將 XML Tags 用於定義情境*
        - **系統提示：**
        ```
        你是一個名叫小幸的線上伴侶AI，你將以理解和同理的方式與我進行對話
        <特質>
        - 溫暖親切的性格
        - 善於傾聽和同理
        - 正向但不過度樂觀
        - 適時給予建議但不強迫
        </特質>
        <互動規則>
            <情緒回應>
            - 優先確認用戶的情緒狀態
            - 使用同理心回應
            - 給予情緒支持和認同
            </情緒回應>
            <對話風格>
            - 使用溫和友善的語氣
            - 適當使用表情符號增加親近感
            - 避免過於正式的用語
            </對話風格>
            <建議模式>
            - 先傾聽後建議
            - 提供具體可行的建議
            - 尊重用戶的選擇
            </建議模式>
            <特殊設定>
            - 你是喵星人，結尾都會說「喵~」
            - 以台灣國語回應
            </特殊設定>
        </互動規則>
        ```
        - **使用者提示：**
        ```
        我今天感到很沮喪，因為工作上遇到了挫折。
        ```
        :::spoiler **回應結果示範**
        ![image](https://hackmd.io/_uploads/rJ4sOwqY1x.png)
        :::
        
    ---
    
    - *將 XML Tags 用於結構化回應*
        - **使用者提示：**
        ```
        請分析以下Email內容，並使用XML標籤萃取重要資訊，需包含以下標籤：
        <會議基本資訊>
            <會議名稱/>
            <日期時間/>
            <地點/>
        </會議基本資訊>
        <議程內容/>
        <聯絡資訊>
            <聯絡人/>
            <聯絡方式/>
        </聯絡資訊>
        <寄件人資訊>
            <姓名/>
            <職稱/>
        </寄件人資訊>

        <email>
        主旨：【會議通知】2024年第一季產品策略會議
        各位主管好，

        謹訂於2024年1月15日(一)下午2點至5點，在台北總公司大樓12樓會議室A，舉行2024年第一季產品策略會議。

        會議重點如下：

        1. 2023年第四季產品銷售成果報告
        2. 2024年第一季新產品上市計畫
        3. 通路策略調整提案

        請各部門準備相關報告，如有會議相關問題請聯繫專案助理王小明(分機2345)。

        敬祝 順心
        專案經理
        張美玲
        </email>
        ```
        :::spoiler **回應結果示範**
        ![image](https://hackmd.io/_uploads/Hyhs5vqtkx.png)
        :::
        
    - *匯出 JSON 格式*
        - **使用者提示：**
        ```
        請分析以下Email內容，並使用JSON格式萃取重要資訊，需包含以下標籤：
        <會議基本資訊>
            <會議名稱/>
            <日期時間/>
            <地點/>
        </會議基本資訊>
        <議程內容/>
        <聯絡資訊>
            <聯絡人/>
            <聯絡方式/>
        </聯絡資訊>
        <寄件人資訊>
            <姓名/>
            <職稱/>
        </寄件人資訊>

        <email>
        主旨：【會議通知】2024年第一季產品策略會議
        各位主管好，

        謹訂於2024年1月15日(一)下午2點至5點，在台北總公司大樓12樓會議室A，舉行2024年第一季產品策略會議。

        會議重點如下：

        1. 2023年第四季產品銷售成果報告
        2. 2024年第一季新產品上市計畫
        3. 通路策略調整提案

        請各部門準備相關報告，如有會議相關問題請聯繫專案助理王小明(分機2345)。

        敬祝 順心
        專案經理
        張美玲
        </email>
        ```
        :::spoiler **回應結果示範**
        ![image](https://hackmd.io/_uploads/SkUznD5tye.png)
        ![image](https://hackmd.io/_uploads/rJqQnvqtyx.png)
        :::
        
    >[!Important] 小技巧
    >- 使用可說明其所包含內容的描述性標籤名稱（例如：<instructions>、<example>、<rules>）。
    >- 在整個提示中保持標籤名稱一致。
    >- 始終包含開始 (<tag>) 和結束 (</tag>) 標記，包括在引用它們時，例如「使用 <doc></doc> 標記中的文檔，回答此問題」。
    >- 您可以運用巢狀結構來使用 XML 標籤，儘管超過五層的巢狀結構可能會降低效能，具體取決於使用情境的複雜性。

---
    
4. **讓 Claude 思考 (Let Claude think - *Chain of Thought*)**
    - *沒有 CoT 的提示詞範例*
        - **使用者提示：** 
        ```
        你是一位資深理財顧問，負責為客戶提供投資組合建議。
        請根據以下客戶資料，推薦合適的投資組合：
        <基本資料>
        - 王小姐，35歲，科技業產品經理
        - 年收入：150萬
        </基本資料>
        <現有資產>
        - 活存 80萬
        - 定存 100萬
        - 股票 50萬
        - 基金 30萬
        </現有資產>
        <保險>
        - 定期壽險 200萬
        - 醫療險
        </保險>
        <消費習慣>
        - 月支出約4萬
        - 常在百貨公司購物
        - 每年固定出國旅遊2次
        </消費習慣>
        ```
        :::spoiler **回應結果示範**
        ![image](https://hackmd.io/_uploads/HyBIUuctJl.png)
        ![image](https://hackmd.io/_uploads/rymVIO9t1g.png)
        :::
    
    ---
    
    - *請 Claude 思考並提供 CoT 的提示詞範例*
        - **使用者提示：** 
        ```
        你是一位資深理財顧問，負責為客戶提供投資組合建議。
        請根據以下客戶資料，請仔細思考推薦的邏輯，列出思考過程，並推薦合適的投資組合：
        <基本資料>
        - 王小姐，35歲，科技業產品經理
        - 年收入：150萬
        </基本資料>
        <現有資產>
        - 活存 80萬
        - 定存 100萬
        - 股票 50萬
        - 基金 30萬
        </現有資產>
        <保險>
        - 定期壽險 200萬
        - 醫療險
        </保險>
        <消費習慣>
        - 月支出約4萬
        - 常在百貨公司購物
        - 每年固定出國旅遊2次
        </消費習慣>
        ```
        :::spoiler **回應結果示範**
        ![image](https://hackmd.io/_uploads/r1j9vOqYyl.png)
        ![image](https://hackmd.io/_uploads/S1TivdqKkg.png)
        ![image](https://hackmd.io/_uploads/SysCwOcYkg.png)
        ![image](https://hackmd.io/_uploads/S1u1uuqYkx.png)
        :::
    
    ---
    
    - *提供具體 CoT 的提示詞範例*
        - **使用者提示：** 
        ```
        你是一位資深理財顧問，運用結構化思考為客戶提供全方位的投資組合建議。請依照以下思考鏈進行分析：
        <COT>
        1. 風險評估步驟
            - 分析客戶年齡與職業特性
            - 評估收入穩定性
            - 檢視現有投資組合風險程度
            - 考量消費習慣對投資的影響
        2. 資產配置分析
            - 計算各類資產佔比
            - 評估現有配置的優缺點
            - 檢視流動性需求
            - 分析現有保險保障適足性
        3. 缺口分析
            - 計算理財目標所需資金
            - 評估現有保障缺口
            - 分析投資報酬需求
            - 考量通膨影響
        4. 投資組合建議
            - 提出具體資產配置比例
            - 建議適合的投資產品
            - 說明預期報酬與風險
            - 提供階段性投資建議
        </COT>
        請根據以下客戶資料，依序進行分析並推薦合適的投資組合：
        <基本資料>
        - 王小姐，35歲，科技業產品經理
        - 年收入：150萬
        </基本資料>
        <現有資產>
        - 活存 80萬
        - 定存 100萬
        - 股票 50萬
        - 基金 30萬
        </現有資產>
        <保險>
        - 定期壽險 200萬
        - 醫療險
        </保險>
        <消費習慣>
        - 月支出約4萬
        - 常在百貨公司購物
        - 每年固定出國旅遊2次
        </消費習慣>
        請針對每個步驟提供詳細說明，並在最後整合成完整的投資建議方案。
        ```
        :::spoiler **回應結果示範**
        ![image](https://hackmd.io/_uploads/rkS_Yuqtke.png)
        ![image](https://hackmd.io/_uploads/Sk-tYOctJe.png)
        ![image](https://hackmd.io/_uploads/BkzqtOcFkx.png)
        ![image](https://hackmd.io/_uploads/S1KjKdqKkx.png)
        ![image](https://hackmd.io/_uploads/H1XatdcY1g.png)
        ![image](https://hackmd.io/_uploads/H1OAFOqKJg.png)
        :::
        
    >[!Important] 小技巧
    >- 除非允許 Claude 輸出其思考過程，否則思考無法發生。沒辦法讓 Claude 在背景思考，只回最終的答案。
    >- 逐步推理將增加 Claude 輸出的提示長度，這可能會影響延遲。在決定是否使用此技術時請考慮這種權衡。

---
    
5. **使用範例回答作為回應參考 (Use examples - *multi-shot*)**
    - *沒有範例回答*
        - **系統提示：**
        ```
        你是一個SQL專家，可以將自然語言轉換成SQL查詢語句。
        ```
        - **使用者提示：** 
        ```
        資料庫結構如下：
        - customers(customer_id, name, age, city)
        - orders(order_id, customer_id, order_date, total_amount)
        - products(product_id, product_name, price)
        - order_details(order_id, product_id, quantity)

        請幫我寫一個SQL查詢：找出台北市消費金額超過10萬元的客戶名單，並顯示他們的總消費金額。
        ```
        :::spoiler **回應結果示範**
        ![image](https://hackmd.io/_uploads/B183su5Yyl.png)
        ![image](https://hackmd.io/_uploads/H1sl2u9Kye.png)
        ![image](https://hackmd.io/_uploads/Hkdbnu5t1g.png)
        :::
    
    ---
    
    - *提供範例回答*
        - **系統提示**
        ```
        你是一位SQL專家，可以將自然語言轉換為SQL查詢語句。我會先提供幾個範例，請依照類似的模式處理後續的查詢需求。

        <資料庫結構>
        customers(customer_id, name, age, city)
        orders(order_id, customer_id, order_date, total_amount)
        products(product_id, product_name, price)
        order_details(order_id, product_id, quantity)
        </資料庫結構>

        <範例1>
            <需求>查詢台中市的客戶及其訂單總數</需求>
            <SQL>
            SELECT c.name, COUNT(o.order_id) as order_count
            FROM customers c
            LEFT JOIN orders o ON c.customer_id = o.customer_id
            WHERE c.city = '台中市'
            GROUP BY c.customer_id, c.name;
            </SQL>
        </範例1>
        <範例2>
            <需求>找出購買過商品 'iPhone 14' 的客戶名單</需求>
            <SQL>
            SELECT DISTINCT c.name
            FROM customers c
            JOIN orders o ON c.customer_id = o.customer_id
            JOIN order_details od ON o.order_id = od.order_id
            JOIN products p ON od.product_id = p.product_id
            WHERE p.product_name = 'iPhone 14';
            </SQL>
        </範例2>
        <範例3>
            <需求>計算每個客戶在2023年的平均訂單金額</需求>
            <SQL>
            SELECT c.name, AVG(o.total_amount) as avg_amount
            FROM customers c
            JOIN orders o ON c.customer_id = o.customer_id
            WHERE YEAR(o.order_date) = 2023
            GROUP BY c.customer_id, c.name;
            </SQL>
        </範例3>
        ```
        - **使用者提示：** 
        ```
        請幫我寫一個SQL查詢：找出台北市消費金額超過10萬元的客戶名單，並顯示他們的總消費金額。
        ```
        :::spoiler **回應結果示範**
        ![image](https://hackmd.io/_uploads/ByKGA_5Fye.png)
        :::
        
    >[!Important] 小技巧
    >建立理想的範例集通常需要迭代和細化。如果 Claude 的表現不太符合您的期望，請考慮以下因素：
    >- **分析輸出：** 在 Claude 的回應中尋找與您想要的偏離的部分。這可以幫助您識別範例可能不清楚、誤導或不充分的地方。
    >- **新增更多範例：** 如果 Claude 難以處理某些類型的輸入，請提供專門針對這些場景的其他範例。
    >- **修改現有範例：** 有時，即使對範例進行微小調整也會產生顯著差異。嘗試不同的措詞、格式或結構，看看哪種最有效。
    >- **尋求 Claude 的幫助：** 編寫有效的範例可能具有挑戰性！您可以要求 Claude 評估您的範例對於給定任務的多樣性或相關性，或根據一組現有範例產生新範例。

---
    
6. **預填 Claude 的回應 (Prefill Claude’s response)**

    >[!Important] 小技巧
    >- 使用 Claude 時，您可以透過預先填入**助理提示**來指導其接下來的回應。這項技術可讓您引導 Claude 的動作、跳過引言、強制執行 JSON 或 XML 等特定格式，甚至幫助 Claude 在角色扮演場景中保持角色一致性。
    >- 在某些情況下， Claude 的表現沒有達到預期，可以通過預填回應來提高 Claude 的表現。

---
    
7. **串連複雜提示 (Chain complex prompts)**
    
    >[!Important] 小技巧
    >建立複雜的提示涉及以結構化方式組合各種元素，結構良好的提示的關鍵組成部分包括：
    >- **任務背景 (Task context)：** 提供有關人工智慧應承擔的角色或其應承擔的目標和整體任務的背景。
    >- **語氣脈絡 (Tone context)：** 指定 AI 應使用的語氣（如果對互動很重要）。
    >- **詳細的任務描述和規則 (Detailed task description and rules)：** 擴展人工智慧應執行的具體任務及其必須遵循的任何規則。
    >- **範例 (Examples)：** 提供一個或多個理想響應範例供人工智慧模擬。
    >- **輸入資料 (Input data)：** 包括 AI 需要在提示內處理的任何數據，包含在相關 XML 標籤中。(例如對話歷史)
    >- **立即任務 (Immediate task)：** 提醒人工智慧其當前任務或應滿足的特定請求。
    >- **逐步思考 (CoT)：** 指導人工智慧在給出答案之前逐步思考，特別是對於多步驟任務。
    >- **輸出格式 (Output formatting)：** 如有必要，指定 AI 回應所需的格式。
    >- **預填回應 (Prefilled responses)：** 可以選擇用幾句話開始人工智慧的回應，以引導其行為或輸出。
    >
    >![圖片](https://hackmd.io/_uploads/r1tXZQ_-Jg.png)

---
    
8. **長文件資料 (Long context tips)**
    
    >[!Important] 小技巧
    >- **將長文件資料放在最前面：** 將長文件和輸入（~20K+ tokens）放在提示頂部附近，在您的提示和範例上方。這可以顯著提高 Claude 的表現。
    >- **使用 XML Tag 建立文件內容和描述資料：** 使用多個文件時，為了清晰起見，請將每個文件放在 <document> 標籤中，並利用巢狀結構將 <document_content>、<source> 以及其他描述資料放在子標籤內。
    >- **將回應結構化放置，並引用於推理：** 對於長文件任務，請要求 Claude 在執行任務之前先萃取文件的相關部分放置於 XML Tag，再要求其依據產生的 XML Tag 內容進行推理。這有助於 Claude 消除文件中其餘內容的「噪音」。
    
---
    
9. **避免產生幻覺 (Avoiding Hallucinations)**
    
    >[!Important] 小技巧
    >在系統或使用者提示中加入：`如果你不確定或沒有足夠的資料來提供有信心的答案，只需說「我不知道」或「我不確定」。`

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