LLM 初階實戰班
LLM 初階實戰班
![]()
從 Prompt 寫法到 RAG 原理,再到把 LLM 串進工作流程做自動化漏洞通知。一堂課走完 LLM 實務應用的三個層次。
課程架構:
┌──────────────────────────────────────────────────┐
│ 第一層 Prompt Engineering │
│ ── 學會怎麼跟 LLM 溝通 │
├──────────────────────────────────────────────────┤
│ 第二層 RAG │
│ ── 讓 LLM 讀你的資料回答問題 │
├──────────────────────────────────────────────────┤
│ 第三層 RPA 工作流程自動化 │
│ ── 把多個工具串起來自動執行 │
└──────────────────────────────────────────────────┘
第一部分:Prompt Engineering
好的 Prompt 能讓 LLM 回答品質差到天差地別。這個部分介紹六種實戰技巧,從基礎到進階。
技巧總覽
| 技巧 | 難度 | 核心概念 | 適合場景 |
|---|---|---|---|
| CRISPE 框架 | 入門 | 結構化指令 | 日常問答、報告 |
| Custom Instructions | 入門 | 個人化偏好 | 固定工作流程 |
| Meta-Prompting | 入門 | 用 AI 改 Prompt | 不知道怎麼問 |
| Few-Shot | 中階 | 給範例讓 AI 學 | 分類、格式化 |
| Chain-of-Thought | 中階 | 逐步推理 | 數學、邏輯 |
| Tree of Thoughts | 進階 | 多路徑探索 | 複雜決策 |
CRISPE Prompt 框架
CRISPE 是一種結構化的 Prompt 寫法,把指令拆成五個面向:
| 元素 | 意義 | 你要寫什麼 |
|---|---|---|
| C - Capacity and Role | 能力與角色 | 讓 LLM 扮演什麼角色 |
| R - Insight | 洞察力 | 背景資訊和上下文 |
| I - Statement | 指令 | 你要 LLM 做什麼 |
| P - Personality | 個性 | 回應的風格和語氣 |
| E - Experiment | 嘗試 | 要求多個版本 |
壞 Prompt vs 好 Prompt:
壞 Prompt:
「推薦台灣的商機」
→ LLM 回答一堆籠統的廢話
好 Prompt (用 CRISPE):
[C] 你是有 10 年跨國創業經驗的商業顧問
[R] 我想在台灣找尚未普及但在海外已被驗證的商業模式
[I] 請條列三個具體的商機,每個包含:市場規模、競爭現況、進入門檻
[P] 用白話文回答,避免管理學術語
[E] 請提供「低資本」和「高資本」兩個版本
→ LLM 回答有結構、有深度、可以直接拿來用
Custom Instructions(自訂指示)
設定一次,之後每次對話都自動帶入偏好。
┌──────────────────────────────────────────┐
│ 你是什麼角色? │
│ → 「資安工程師,主要做滲透測試和紅隊」 │
├──────────────────────────────────────────┤
│ 回答風格? │
│ → 「技術文件風格,附指令和範例」 │
├──────────────────────────────────────────┤
│ 避免什麼? │
│ → 「不要廢話和客套,直接給解法」 │
└──────────────────────────────────────────┘
各平台的設定位置:
| 平台 | 設定位置 |
|---|---|
| ChatGPT | Settings → Personalization → Custom instructions |
| Claude | 對話開頭用 System Prompt 帶入 |
| Cursor | .cursorrules 或 Project Rules |
Meta-Prompting:用 LLM 幫你寫 Prompt
不知道怎麼問?讓 LLM 引導你優化 Prompt:
你是專業的 Prompt Engineer,工作是引導使用者產生更清晰、目標明確的 Prompt。
使用者有三種回覆方式:
輸入 1 → 選一個建議選項,根據選項重新產生 Prompt
輸入 2 → 補充資訊,根據新資訊更新 Prompt
輸入 3 → 直接用目前版本的 Prompt 回答,結束
每次回覆包含:
1. 修改後的 Prompt(更清晰、更容易被模型理解)
2. 三條改善建議(a, b, c)
3. 三個追問(a, b, c),提示該補充什麼資訊
實際對話範例:
你: 「幫我分析資安事件」
AI (Prompt Engineer):
修改後 Prompt:
「分析以下資安事件,包含攻擊向量、影響範圍、建議對策」
建議:
a. 加入事件的時間範圍和系統環境
b. 指定分析框架(如 MITRE ATT&CK)
c. 指定輸出格式(表格、報告、簡報)
追問:
a. 事件涉及哪些系統或服務?
b. 你需要技術層面還是管理層面的分析?
c. 報告的讀者是誰(工程師、主管、客戶)?
你: 輸入 1,選 b
AI:
修改後 Prompt:
「使用 MITRE ATT&CK 框架分析以下資安事件,
識別攻擊戰術和技術,評估影響範圍,
提供偵測規則和緩解措施建議」
...
Few-Shot Prompting(給範例)
給 LLM 幾個輸入 → 輸出範例,它會學習格式和邏輯。
範例:Log 嚴重性分類
範例 1:
輸入: "Failed login attempt from 192.168.1.100"
分類: Medium
原因: 單次登入失敗,可能是密碼錯誤
範例 2:
輸入: "SQL injection detected in parameter 'id'"
分類: Critical
原因: 主動攻擊嘗試,可能導致資料外洩
範例 3:
輸入: "SSL certificate expires in 30 days"
分類: Low
原因: 預警性質,有時間處理
請分類:
輸入: "Brute force detected: 500 failed logins in 5 minutes from 10.0.0.55"
LLM 會根據範例的格式和判斷邏輯,給出結構化的分類結果。
Chain-of-Thought (CoT) 思維鏈
讓 LLM 顯示推理步驟,而不是直接跳到答案。
沒有 CoT:
Q: 一台伺服器 CPU 使用率 95%,記憶體使用率 30%,問題在哪?
A: CPU 瓶頸。
→ 對但沒有推理過程,你無法判斷是否可靠
有 CoT:
Q: 一台伺服器 CPU 使用率 95%,記憶體使用率 30%,問題在哪?
A: 讓我逐步分析:
1. CPU 95% 表示計算資源幾乎耗盡
2. 記憶體 30% 表示不是記憶體不足的問題
3. 高 CPU + 低記憶體 → 可能原因:
- CPU-bound 的程式(密碼學運算、壓縮、JSON parse)
- 無窮迴圈或遞迴
- 單一程序未利用多核心
4. 建議先用 top/htop 看是哪個 process 吃 CPU
→ CPU 瓶頸,建議檢查耗 CPU 的 process
啟動 CoT 的關鍵詞:
| 語句 | 效果 |
|---|---|
| 「讓我們一步步思考」 | 基本 CoT |
| 「請解釋你的推理過程」 | 要求透明 |
| 「先分析再回答」 | 確保不跳步 |
Few-Shot CoT
Few-Shot + CoT 結合:給帶有推理步驟的範例。LLM 學會「格式 + 思考方式」。
範例:
問題: 這個 log 是否為攻擊?"GET /admin/../../../etc/passwd HTTP/1.1"
分析:
1. 路徑包含 ../../../ → Path Traversal 攻擊模式
2. 目標是 /etc/passwd → 嘗試讀取系統密碼檔
3. 結合以上 → 確定是 Path Traversal 攻擊
判斷: 攻擊
請分析:
"POST /api/login HTTP/1.1" Body: {"user": "admin' OR '1'='1", "pass": "x"}
Tree of Thoughts(思維樹)
面對複雜問題,讓 LLM 同時探索多個方向,比較後選最佳方案:
步驟 1: 請提出三個不同的解法方向
┌── 方案 A: ...
├── 方案 B: ...
└── 方案 C: ...
步驟 2: 針對每個方案深入分析
┌── 方案 A: 優點... / 缺點... / 可行性...
├── 方案 B: 優點... / 缺點... / 可行性...
└── 方案 C: 優點... / 缺點... / 可行性...
步驟 3: 綜合分析,提出最終建議
→ 最佳方案: B
→ 原因: ...
適合商業決策、系統架構設計、應急事件處理等需要多角度思考的場景。
第二部分:RAG(Retrieval-Augmented Generation)
LLM 的知識局限
LLM 的知識有截止日,也不知道你公司的私有資料。這產生四種情境:
│ LLM 有內建知識 │ LLM 沒有內建知識
───────────────────┼────────────────┼────────────────
有外部知識可查 │ RAG │ 傳統知識查詢
│ (最佳方案) │ (關鍵字搜尋)
───────────────────┼────────────────┼────────────────
沒有外部知識可查 │ Fine-Tune │ 幻覺
│ (成本高) │ (瞎掰)
RAG:讓模型看大抄考試
| 不用 RAG | 用 RAG | |
|---|---|---|
| LLM 回答依據 | 訓練時學到的知識 | 你提供的最新資料 |
| 資料更新 | 要重新訓練模型 | 更新知識庫就好 |
| 準確度 | 可能過期或瞎掰 | 有參考資料佐證 |
| 成本 | 低(推論費) | 中(推論 + 檢索) |
RAG vs Fine-Tune 比較:
| RAG | Fine-Tune | |
|---|---|---|
| 知識來源 | 外部知識庫,即時檢索 | 訓練進模型權重 |
| 更新成本 | 低:更新資料庫 | 高:重新訓練模型 |
| 適合 | 常變動的資料(產品文件、法規) | 不常變的專業語言(醫療、法律術語) |
| 幻覺風險 | 低:有來源可查 | 中:仍可能混淆 |
| 部署複雜度 | 中:需要向量資料庫 | 低:用訓練好的模型 |
RAG 完整流程
第一步:建立知識庫(離線處理,只做一次)
公司文件 / 產品手冊 / 內部 Wiki
↓
┌────────────────┐
│ 文件切塊 │ 把文件拆成 200-500 字的段落 (Chunks)
│ (Chunking) │
└────────┬───────┘
↓
┌────────────────┐
│ 向量化 │ 用 Embedding Model 把文字轉成數字向量
│ (Embedding) │ 語意相近的文字 → 向量距離相近
└────────┬───────┘
↓
┌────────────────┐
│ 向量資料庫 │ 儲存所有向量
│ (Vector DB) │ 例如 Pinecone, Weaviate, Chroma
└────────────────┘
第二步:查詢回答(每次使用者提問時即時執行)
使用者問題: 「我們的退貨政策是什麼?」
↓
┌────────────────┐
│ 問題向量化 │ 把問題也轉成向量
└────────┬───────┘
↓
┌────────────────┐
│ 相似度搜尋 │ 在向量資料庫中找出最相關的 3-5 筆 chunks
│ (Similarity) │ 語意相近 = 向量距離小
└────────┬───────┘
↓
┌────────────────┐
│ 組合 Prompt │ 「根據以下資料回答使用者問題:
│ │ [chunk 1] [chunk 2] [chunk 3]
│ │ 問題:我們的退貨政策是什麼?」
└────────┬───────┘
↓
┌────────────────┐
│ LLM 回答 │ 根據檢索到的資料生成回答
│ │ 不是瞎掰,有參考來源
└────────────────┘
Embedding 的直覺理解
Embedding 把文字轉成數字向量:
「資安漏洞」 → [0.82, 0.15, 0.93, ...]
「安全弱點」 → [0.80, 0.17, 0.91, ...] ← 語意接近,向量也接近
「今天天氣」 → [0.12, 0.88, 0.05, ...] ← 語意不同,向量差很遠
向量的距離 ≈ 語意的距離
距離小 = 語意相關 = 這個 chunk 可能包含答案
第三部分:RPA 工作流程自動化
什麼是 RPA
RPA(Robotic Process Automation)= 用軟體自動完成重複性工作。
人工流程:
每天手動查漏洞網站 → 讀公告 → 判斷影響 → 寫摘要 → 傳到群組
費時: 30-60 分鐘/天
漏看: 高風險
RPA 流程:
RSS 自動訂閱 → Jina AI 自動讀取 → LLM 自動分析 → Bot 自動推送
費時: 0(全自動)
漏看: 幾乎零
API:工具之間的橋樑
API(Application Programming Interface)讓不同軟體能互相溝通。
類比:
API = 餐廳服務生
你 (客人) → 點菜 (Request) → 服務生 (API) → 廚房 (服務) → 上菜 (Response) → 你
技術上:
你的程式 → HTTP Request → API Endpoint → 處理 → HTTP Response → 你的程式
| API 類型 | 特點 | 範例 |
|---|---|---|
| REST API | 最常見,用 HTTP 動詞 | GitHub API, Twitter API |
| GraphQL | 精確查詢需要的資料 | GitHub v4 API |
| WebSocket | 即時雙向通訊 | 聊天室、即時通知 |
| Webhook | 事件觸發,主動推送 | Stripe 付款通知 |
實戰案例:自動漏洞通知系統
以下是一個完整的自動化工作流,把 RSS、Jina AI、LLM 和 Telegram Bot 串起來。
完整架構圖:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ RSS 訂閱 │ ──→ │ Jina AI │ ──→ │ LLM 分析 │ ──→ │ Telegram Bot│
│ 漏洞情報源 │ │ 讀取內容 │ │ 摘要判斷 │ │ 推送通知 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│ │ │ │
CISA / NVD 網頁→純文字 判斷嚴重性 群組/個人
漏洞公告 結構化內容 分析影響範圍 即時收到
步驟 1:RSS 訂閱漏洞情報
RSS(Really Simple Syndication)= 自動訂閱網站更新。不用手動刷網頁,有新內容就通知。
常見漏洞情報 RSS 來源:
| 來源 | RSS URL | 內容 |
|---|---|---|
| CISA | cisa.gov/cybersecurity-advisories |
美國 CISA 資安公告 |
| NVD | nvd.nist.gov |
CVE 漏洞資料庫 |
| TWCERT/CC | twcert.org.tw |
台灣資安通報 |
步驟 2:Jina AI 讀取網頁內容
Jina AI Reader 把網頁轉成 LLM 容易處理的純文字:
API 用法:
GET https://r.jina.ai/https://example.com/vulnerability-alert
回傳:
純文字版本的網頁內容,去掉 HTML、廣告、導航列
→ 乾淨的文字,直接丟給 LLM 分析
步驟 3:LLM 分析摘要
把讀取到的漏洞內容送給 LLM:
Prompt:
「你是資安分析師。根據以下漏洞公告,提供:
1. 漏洞摘要(50 字內)
2. 嚴重性(Critical/High/Medium/Low)
3. 影響的軟體和版本
4. 建議的處理優先順序
5. 緩解措施
{jina_ai_讀取的內容}」
LLM 回覆:
1. 摘要: Apache Log4j 遠端程式碼執行漏洞
2. 嚴重性: Critical (CVSS 10.0)
3. 影響: Apache Log4j 2.x < 2.17.0
4. 優先順序: 立即處理
5. 緩解: 升級到 2.17.0 以上,或設定 log4j2.formatMsgNoLookups=true
步驟 4:Telegram Bot 推送通知
建立 Telegram Bot:
1. 開 Telegram 搜尋 @BotFather
2. 輸入 /newbot
3. 取得 API Token: 123456789:ABCdefGHI...
4. 搜尋 @getmyid_bot 取得你的 Chat ID
API 推送:
POST https://api.telegram.org/bot{TOKEN}/sendMessage
{
"chat_id": "你的 Chat ID 或群組 ID",
"text": "🚨 Critical 漏洞通知\n\nApache Log4j RCE...",
"parse_mode": "Markdown"
}
工作流程比較
| 人工處理 | RPA 自動化 | |
|---|---|---|
| 速度 | 漏洞公布後數小時才注意到 | 幾分鐘內收到通知 |
| 準確度 | 可能漏看、誤判 | 一致的分析品質 |
| 成本 | 人力時間 | API 費用(低) |
| 擴展性 | 一個人看不了太多來源 | 可同時訂閱數十個來源 |
| 24/7 | 人需要休息 | 全自動不間斷 |
作業
作業 1:寫一個 CRISPE Prompt
選一個你工作中常遇到的任務,用 CRISPE 框架寫一個 Prompt:
- 先寫一個「沒有結構」的普通 Prompt
- 改寫成 CRISPE 格式(標明 C、R、I、P、E 各部分)
- 兩個 Prompt 分別丟給 ChatGPT 或 Claude,截圖比較回答品質
作業 2:Meta-Prompting 實作
把課堂中的 Meta-Prompt(用 LLM 幫你寫 Prompt)貼到 ChatGPT 或 Claude,實際跑一輪:
- 輸入一個你真正想問的問題
- 跟著 AI 的引導走 3 輪以上(選建議、補充資訊)
- 比較最初的 Prompt 和最終的 Prompt,記錄差異
作業 3:建一個簡單的 RPA 流程
用 n8n(免費)或 Make(有免費額度)建一個自動化流程:
- 訂閱一個 RSS 來源(可以用 CISA 或任何新聞網站)
- 有新內容時觸發 LLM 摘要
- 把摘要推送到 Telegram 或 Slack
不需要寫程式,這些平台都是拖拉介面。