← Financial Cloud Cloud Cloud Club · 建構文章

極點宏觀|Financial Cloud Cloud · 建構文章

使用 Kiro 建置:他加祿語 學習 App 的教育優先開發技巧工作坊

系列: Kiro 工作坊

文章: 02

文章
Kiro 工作坊
01 使用 Kiro 建置:他加祿語學習 App 的提示優先產品設計工作坊
Kiro 工作坊
02 使用 Kiro 建置:他加祿語 學習 App 的教育優先開發技巧工作坊
Kiro 工作坊
03 使用 Kiro 建置:他加祿語 學習 App 的深入開發流程工作坊
Kiro 工作坊
04 使用 Kiro 建置:將 他加祿語 學習 App 在地化為中文變體工作坊
Kiro 工作坊
05 使用 Kiro 建置:他加祿語 卡片的文法與發音補強管線工作坊
Kiro 工作坊
06 使用 Kiro 建置:他加祿語 學習 App 中可審查的獨特額外例句工作坊
Kiro 工作坊
07 與 Kiro 同行:晶圓廠工程健康度 Hook 工作坊
Kiro 工作坊
08 與 Kiro 同行:蝕刻製程視窗風險測試自動化工作坊
Kiro 工作坊
09 與 Kiro 同行:黃光微影漂移風險開發工作坊
Kiro 工作坊
10 工程團隊入門 — 日常工廠值班使用 fab spc drift sync portal
Kiro 工作坊
11 工程團隊附錄 — fab spc drift sync portal 的日常工廠值班使用
Kiro 工作坊
12 Kiro:規格驅動工廠軟體的現場工程工作坊
Kiro 工作坊
13 Kiro:實作 Lab — 從零建置具型別的 Factory Risk Portal
Kiro 工作坊
14 Kiro:工程開發人員的提示、程式碼和型別標準手冊
Kiro 工作坊
15 Kiro:為什麼強 React 提示可以防止型別宣告錯誤啟動
Kiro 工作坊
17 與 Kiro 一起建構:建立工廠自動化入口網站 React UI
Kiro 工作坊
18 與 Kiro 一同建構:打造工廠自動化入口網站背後的自動化分析引擎
Kiro 工作坊
19 與 Kiro 一起實作:將 AI 工廠自動化輔助程式新增至工廠自動化入口網站
Kiro 工作坊
21 Kiro:2 小時專業開發人員工作坊指南
Kiro 工作坊
22 Kiro:從零建置 Fab SPC Drift Synchronization Portal
Kiro 工作坊
23 Kiro:提示詞庫與深度程式碼說明附錄
Kiro 工作坊
30 與 Kiro 一同建構:建立工廠自動化入口網站 UI
Kiro 工作坊
31 與 Kiro 一同建構:打造工廠自動化入口網站背後的自動化分析引擎
Kiro 工作坊
32 與 Kiro 一起實作:為工廠自動化入口網站增添 AI 工廠自動化助理
Kiro 工作坊
33 與 Kiro 一起開發:重建 CME Direct 風格的量化損益排行榜 UI
Kiro 工作坊
34 與 Kiro 一起開發:重建損益排行榜背後的量化分析引擎
Kiro 工作坊
35 與 Kiro 一起建構:適用於量化排行榜的 AWS AI 驅動交易台助理
Kiro 工作坊
36 單頁交易平台 SOP
Kiro 工作坊
AgentCore
A1 使用 AgentCore 與 Strands 建構:Gateway MCP 工具織網開發者工作坊
AgentCore
A2 使用 AgentCore 與 Strands 建構:受治理的多 Agent 風險系統開發者工作坊
AgentCore
A3 使用 AgentCore 與 Strands 建構:執行期主權風險代理人開發者工作坊
AgentCore
模擬考場
E1 用 Vibe Coding 打造多語言 AWS 證照模擬試題上線系統
模擬考場
E2 利用 Vibe Coding 開發技巧打造 AWS 證照模擬練習室
模擬考場
E3 打造靜態 AWS 模擬考場背後的練習引擎
模擬考場
Amazon Q
Q1 Amazon Q:ACM 憑證自動更新的CloudShell優先開發人員工作坊
Amazon Q
Tagalog 練習室
T1 為 AWS Manila Community Day 打造 Tagalog 學習 App:提示詞優先的產品設計
Tagalog 練習室
T2 為 AWS Manila Community Day 打造 Tagalog 學習 App,採用教育優先的開發提示
Tagalog 練習室
T3 為 AWS Manila Community Day 打造 Tagalog 學習 App 的開發流程深度解析
Tagalog 練習室
T4 將 Tagalog 學習 App 在 AWS Manila Community Day 情境中在地化為中文版本
Tagalog 練習室
T5 為 AWS Manila Community Day 打造 Tagalog 卡片打造文法與發音補強流程
Tagalog 練習室
T6 為 AWS Manila Community Day 打造 Tagalog 學習 App 的 Extra Examples 更獨特且可審閱
Tagalog 練習室
路線圖
R1 企業級 Data Analytics Roadmap 一百個深度情境題
路線圖
R2 前端開發路線圖:真實企業場景
路線圖
香港 Community Day
C1 伴隨 AWS Community Day 的香港週末:從雲端技術論壇到維港璀璨夜景
香港 Community Day
C2 講者的奢華週末:分享您的 AWS 故事,讓香港成為您的專屬舞台
香港 Community Day
C3 香港七十二小時:AWS Community Day 講者的極致之旅
香港 Community Day
馬尼拉 Community Day
C4 AWS Community Day Manila:一場連結雲端技術、城市文化與真摯友誼的快樂週末
馬尼拉 Community Day
C5 AWS Community Day Manila:雲端建立者在菲律賓感受最幸福的精神
馬尼拉 Community Day
C6 AWS Community Day Manila:在快樂之城建構、打破、重來,並找到歸屬
馬尼拉 Community Day
C7 菲律賓馬尼拉初次造訪建議
馬尼拉 Community Day
菲律賓 × 香港
C8 菲律賓香港資本市場升級
菲律賓 × 香港
回測
B1 使用 Bedrock AgentCore 與 Strands Agents 建立機構級 Amazon 純做多 (Long-Only) 回測代理
純做多 AMZN 代理:AgentCore、Strands 與可稽核的 Backtrader 帳本。
B2 使用 Backtrader、AgentCore 與 Strands Agents 建立具市況感知能力的 Amazon 部位管理
把市況當成部位控制,而不是圖表註解。
B3 使用 Nasdaq、S&P 500、Dow、AgentCore 與 Strands 建立相對於基準的 Amazon 進出場時機系統
相對 Nasdaq、S&P 500 與道瓊來判斷 AMZN 時機。
B4 使用 Bedrock AgentCore、Strands Agents 與 Backtrader 建立受治理的 Amazon 交易歷史工廠(Trade-History Factory)
把回測做成可稽核的交易歷史工廠。
B5 使用 Bedrock AgentCore 與 Strands Agents 建立智慧代理型 (Agentic) Amazon 回測營運模型 [Part 1]
先建立營運模型,再爭論結果。
B6 為 Amazon 擇時與部位管理建立客製化 Cerebro 程式碼說明 [第 2 部分]
先講 Cerebro 引擎,再講圖表。
B7 為 Amazon 策略結果與經驗教訓建立交易員審閱紀錄 [Part 3]
把策略排名寫成交易員審閱紀錄。
B8 使用 AgentCore 與 Strands 建立受治理的 FSI Amazon 部位管理 Playbook [Part 4]
受治理的 FSI Amazon 部位管理手冊。
B9 使用 Amazon Bedrock AgentCore 建立主權風險交易代理,分析殖利率差、FX 避險與債務重新定價
主權風險代理:殖利率差、外匯避險與債務重定價。
B11 建置現代波動率交易與合法泰國復原規劃代理程式:記憶體驅動的 Strands 多代理程式風險防護系統
記憶驅動的 Strands 代理:波動率與泰國復原規劃。
B12 使用 Amazon Bedrock AgentCore Memory 建構空頭跨式部位交易風險治理
空頭跨式部位的交易風險治理。
B13 在 Amazon EKS 上建構生產環境就緒的信用與收益質押 AI 智能體
在 EKS 上跑生產級信用與收益質押代理。
挑戰
01 週末生產力挑戰:Fab SPC 漂移同步入口網站
Fab SPC 漂移審查與建議入口網站。
02 週末生產力挑戰:Quant P&L Commander — AWS 上由 AI 驅動的交易生產力入口網站
AWS 上由 AI 驅動的交易生產力入口網站。
03 週末煩人的任務挑戰:交易台在雲端、鏈上、空中執行摘要
DeskPulse 日常交易執行摘要。
04 週末 Agent 挑戰:上午 6 點交易風險審查
無人值守、以證據為基礎的晨間交易風險簡報。
05 Weekend Creative Challenge: Leadership Card Game
瀏覽器版創意引導卡牌。
06 Full Stack Challenge: Community Day Board App
瀏覽器版活動溝通空間。
領導力卡牌
01 Leadership Card Game: 雲端還沒自動化的最後一項本事:像領導者一樣說話
寫給 建構者的現場隨筆——談語言、勇氣,以及 Leadership Card Game
02 領導力回合的解剖:Leadership Card Game 實際怎麼玩
給 建構者的引導員實地指南——讓演練嵌進真實會議
03 Leadership Card Game: 當機會不再屬於主辦者
寫給 建構者的現場隨筆:權力轉移、多語領導力練習夜,以及走完入口、資源、敘事的職涯弧線
04 週末創意挑戰:Leadership Card Game
一篇建構者手記:願景、架構,以及週末創意挑戰教會我的事
05 從週末挑戰專案到 $1,386 群眾募資:改變你在職場現身方式的領導力練習
一個週末做出的作品,變成 600 張卡的線上領導力練習室,並募到 $1,386。
06 從週末挑戰專案到 $1,386 群眾募資:進入科技產業的第一天路徑
一個週末挑戰如何變成具備 600 張卡、由 AWS 驅動的多語產品,並募到 $1,386?
07 從週末挑戰專案到 $1,386 群眾募資:用轉移機會建立專業品牌
一個週末挑戰把領導想法做成能跑的多語產品,並募到 $1,386。
08 Leadership Card Game — 群眾募資活動
募資目標: HKD 5,000 已募金額: HKD 1,386 距目標還差: HKD 3,614 進度: 28% 創作者: D.C. Dan · L.L. Diana · L.K. Lva 所在地: 日本、香港、新加坡 投資人權益: 即期價值、私密會員卡牌編輯器雲(Private Membership Card…
09 PR/FAQ 01 — Leadership Card Game 面向社群建構者正式推出
「逆向工作法」文件 · 對外新聞稿 + FAQ 產品: Leadership Card Game 受眾: 社群經理、志願組織者、職涯早期建構者
10 PR/FAQ 02 — 企業引導員採用 Leadership Card Game 進行現場領導力演練
「逆向工作法」文件 · 對外新聞稿 + FAQ 產品: Leadership Card Game 受眾: 學習與發展負責人、人員管理者、敏捷教練、企業引導員
10 PR/FAQ 03 — 多語 Leadership Card Game 為建構者擁有權開放全球練習室
「逆向工作法」文件 · 對外新聞稿 + FAQ 產品: Leadership Card Game 受眾: 全球 建構者、雙語社群、跨境產品團隊、開源導師
AWS Builder Center
01 AWS Builder Center、社群精神與 AWS Builder Jacket
霓虹訊號、共享創意,以及為建構者打造的外套。
02 走進 AWS Builder Center:一座能學習、貢獻,也讓人有歸屬感的全球技術平台
一段精彩旅程,不一定從機場開始。
03 AWS Community Builder 的巨大成功
當建構者公開分享,整個社群就會一起前進。
04 AWS Builder Center 的巨大成功
一座為好奇心打造、充滿活力的全球街區。
05 週末走進 AWS Builder Center:從社群靈感到令人難忘的 AWS Builder Jacket
星期五晚上,開始於建構者熟悉的感覺:有一個點子,正卡在問題與可能性之間。

目標大眾: 建立學習產品、內部啟用工具或社群應用程式的專業開發人員

時長: 2 小時

主要 AWS AI 服務: Kiro

專案產出: 一個教育優先的他加祿語練習應用程式,包含學習分類、禮貌規則、驗證輔助工具以及 Kiro 輔助測試。

僅限教育工程研討會。這是一項軟體架構練習,而非流程發佈建議。

工作坊摘要

本工作坊協助開發人員在設計語言學習軟體時,將教學法(Pedagogy)置於功能之前。參與者將使用 Kiro 來擷取學習目標、禮貌用語規則、練習分類、內容審查預期和測試。這些練習展示了教育限制如何引導資料模型、UI 行為和自動化,從而使他加祿語練習應用程式在未來的內容更新中,依然保持實用、對初學者友善、文化謹慎且易於擴充。

工作坊目標

本工作坊教導開發人員如何建立一個教育意義大於技術性的語言學習應用程式。該應用程式專注於初學者的信心、禮貌用語、可重複練習、發音和實際活動情境。Kiro 被用來建立規格書、透過引導文件(Steering)指引實作、生成程式碼、產生測試,並定義保持教育合約完整性的 Hook。

2 小時議程

時間 模組 開發者成果
0–10 分鐘 教育範疇 定義非商業學習規則
10–25 分鐘 Kiro 引導 儲存產品、教學法和技術標準
25–40 分鐘 Kiro 規格書 生成教育需求與任務
40–65 分鐘 練習分類 實作分類模型與卡片資料
65–85 分鐘 禮貌引擎 規則輔助工具選擇更安全的禮貌指引
85–105 分鐘 練習 UI 建構提示/顯示(Prompt/Reveal)學習卡片
105–115 分鐘 測試與 Hook 驗證審查狀態與語氣標籤
115–120 分鐘 總結 建立擴充藍圖

步驟 1 — 定義教育優先的引導

Kiro 提示詞範例

為一個教育性的他加祿語學習應用程式建立引導文件。
該應用程式必須減少學習者的恐懼、使犯錯常態化、教授禮貌用語,並提供簡短的練習鑽研。
使用 React、TypeScript、Vite、Vitest 和本地 JSON 資料。
生成的語言內容在經過母語人士審查之前均為草稿。

系統設計決策

● 教學法即架構: 產品目標不只是將英文翻譯成他加祿語。應用程式必須協助初學者安全地練習、理解語氣,並在社群活動中禮貌地發言。教育規則屬於引導文件,因為它們會影響 Schema 設計、UI 版面配置、測試和內容審查。

● 透過限制確保學習安全: 應用程式應避免過度自信的 AI 行為。審查狀態、簡短說明、語氣標籤和母語人士審查提醒,能讓系統對其局限性保持誠實。這在教授語言和文化脈絡時尤為重要。

● 開發者可重複性: 專業開發人員需要一種可重複的方法來建立學習功能。引導文件確保 Kiro 在整個工作坊中都使用相同的專案詞彙——練習分類、句子卡片、禮貌形式、發音、範例和審查狀態。

程式碼範例 — .kiro/steering/pedagogy.md

# 教育指引

本應用程式透過使用簡短、可重複、具禮貌性的練習卡片來教導初學者。
每張卡片應協助學習者理解該說什麼、何時該說,以及聽起來有多正式。

## 學習規則

- 偏好可以大聲朗讀的簡短範例。
- 在好玩的菲律賓式英語(Filipino-English)之前,先顯示自然的他加祿語。
- 將好玩的菲律賓式英語標記為非正式(informal)。
- 將 `po`、`opo`、`kayo` 和 `ninyo` 解釋為尊稱標記。
- 在片語旁提供發音。
- 使用審查狀態:`draft`(草稿)、`native-reviewed`(母語人士已審查)或 `blocked`(已封鎖)。
- 在沒有母語人士審查的情況下,切勿將生成的語言內容視為最終版本。

程式碼說明

● 商業邏輯: 此引導文件定義了每個功能都應遵循的教育標準。

● 程式碼邏輯: Kiro 讀取 Markdown 上下文,並使用它來塑造生成的規格需求、元件、測試和審查建議。

● 預期結果: 生成的實作與學習策略保持一致,而不會變成一個通用的閃卡應用程式。


步驟 2 — 生成教育性 Kiro 規格書

Kiro 提示詞範例

建立一個名為 educational-practice-flow 的 Kiro 規格書。
該功能透過練習分類、提示/顯示卡片、禮貌註記、發音和審查狀態來教導他加祿語。
使用可透過 Vitest 和 Testing Library 進行測試的驗收準則。

系統設計決策

● 學習流程的功能級規格書: 規格書專注於學習者如何練習,而不僅僅切留在資料如何渲染。這使得系統可以從學習者的角度進行測試:選擇一個分類、閱讀英文提示、顯示他加祿語、檢查禮貌程度並重複。

● 驗收準則驅動實作: 可測試的準則減少了模糊性。如果規格書寫著「當學習者顯示卡片時,禮貌的他加祿語應變為可見」,開發人員就可以直接實作並測試該行為。

● 微小功能切片: 一個兩小時的工作坊需要一個垂直切片。分類選擇、提示/顯示和禮貌註記已足夠演示 Kiro 的規格書驅動工作流程,而無需引入身分驗證、資料庫或外部 API。

程式碼範例 — .kiro/specs/educational-practice-flow/tasks.md

# 任務

- [ ] 定義 PracticeCategory 和 PracticeCard 型別。
- [ ] 為 greetings(問候)、directions(指路)、workshops(工作坊)、thanks(感謝)和 waiting(等待)添加種子卡片。
- [ ] 實作禮貌輔助工具,為初次接觸者返回更安全的指引。
- [ ] 建構 CategorySelector 元件。
- [ ] 建構具有顯示(reveal)行為的 PracticeCard 元件。
- [ ] 為分類篩選、顯示行為、非正式標籤和審查狀態添加測試。
- [ ] 添加在卡片資料變更後執行測試的 Hook 指引。

程式碼說明

● 商業邏輯: 任務代表了從資料到練習行為的教育工作流程。

● 程式碼邏輯: 每個任務都可以獨立實作並在 Kiro 中勾選完成。

● 預期結果: 开发人員有一條從規格需求到正常運作之應用程式的清晰路徑。


步驟 3 — 建立練習分類資料

Kiro 提示詞範例

生成一個用於他加祿語練習分類和卡片的 TypeScript 模型。
包含活動分類:greetings(問候)、directions(指路)、workshops(工作坊)、thanks(感謝)、waiting(等待)。
每張卡片需要英文提示、自然他加祿語、禮貌他加祿語、語氣、發音和審查狀態。

系統設計決策

● 分類組織學習意圖: 學習者是針對特定情境進行準備,而不是抽象的單字列表。像是問候、指路、工作坊、感謝和等待等分類,直接對應到 AWS 馬尼拉社群日(AWS Manila Community Day)的行動。

● 提示/顯示格式支持記憶: 首先顯示英文提示可以鼓勵主動回憶(Active recall)。隨後顯示他加祿語可建立一個簡單的練習迴圈,日後可演進為間歇重複(Spaced repetition)。

● 審查狀態與內容同行: 因為教育品質取決於正確性,每張卡片都儲存了審查狀態。這使 UI 和測試能夠防止將未經審查的內容視為最終版本呈現給使用者。

程式碼範例 — src/data/practiceCards.ts

export type PracticeCategory = "greetings" | "directions" | "workshops" | "thanks" | "waiting";
export type ReviewStatus = "draft" | "native-reviewed" | "blocked";

export interface PracticeCard {
  id: string;
  category: PracticeCategory;
  englishPrompt: string;
  naturalTagalog: string;
  politeTagalog: string;
  tone: "casual" | "polite" | "event-ready" | "informal-playful";
  pronunciation: string;
  reviewStatus: ReviewStatus;
}

export const practiceCards: PracticeCard[] = [
  {
    id: "greetings-hello-learning",
    category: "greetings",
    englishPrompt: "Hello, I am learning Tagalog.",
    naturalTagalog: "Kumusta, nag-aaral ako ng Tagalog.",
    politeTagalog: "Kumusta po, nag-aaral po ako ng Tagalog.",
    tone: "event-ready",
    pronunciation: "koo-MOOS-tah poh, nag-ah-AH-ral poh AH-koh ngah tah-GAH-log",
    reviewStatus: "draft"
  },
  {
    id: "directions-md-room",
    category: "directions",
    englishPrompt: "Where is the md room?",
    naturalTagalog: "Saan ang md room?",
    politeTagalog: "Saan po ang md room?",
    tone: "polite",
    pronunciation: "SAH-ahn poh ahng md room",
    reviewStatus: "draft"
  },
  {
    id: "waiting-on-my-way",
    category: "waiting",
    englishPrompt: "I am on my way.",
    naturalTagalog: "Papunta na ako.",
    politeTagalog: "Papunta na po ako.",
    tone: "event-ready",
    pronunciation: "pah-POON-tah nah poh AH-koh",
    reviewStatus: "draft"
  }
];

程式碼說明

● 商業邏輯: 該資料為學習者做好了實際活動行動的準備:問候、詢問方向和協調抵達。

● 程式碼邏輯: 聯集型別限制了有效的分類、語氣值和審查狀態。這可以防止意外的自由格式標籤。

● 預期結果: 開發人員可以按分類篩選卡片,並渲染一致的練習流程。


步驟 4 — 實作禮貌指引輔助工具

Kiro 提示詞範例

建立一個 TypeScript 輔助工具,用以說明禮貌的他加祿語是否更安全。
輸入:對象型別與情境。
返回指引訊息、推薦變體和原因。

系統設計決策

● 禮貌即產品邏輯: 尊稱用語不是附註。該應用程式的核心價值在於協助初學者在面對演講者、主辦方、志工、場地工作人員、長輩和初次接觸者時,選擇更安全的措辭。

● 規則先於 AI 生成: 決定性的輔助工具能提供可預測的指引。AI 可能會生成草稿,打執行期的教育行為應保持穩定且可測試。在工作坊中,基於規則的指引更容易進行稽核。

● 與 UI 分離: 此輔助工具不渲染 HTML。它返回一個簡單的物件,因此相同的邏輯可以支援網頁 UI、測試、文件或未來的 API 回應。

程式碼範例 — src/lib/politeness.ts

export type Audience = "peer" | "speaker" | "organizer" | "volunteer" | "venue-staff" | "elder" | "unknown";

export interface PolitenessGuidance {
  recommendedVariant: "natural" | "polite";
  message: string;
  reason: string;
}

const formalAudiences: Audience[] = ["speaker", "organizer", "volunteer", "venue-staff", "elder", "unknown"];

export function getPolitenessGuidance(audience: Audience): PolitenessGuidance {
  if (formalAudiences.includes(audience)) {
    return {
      recommendedVariant: "polite",
      message: "優先使用禮貌的他加祿語版本。",
      reason: "與初次接觸者、活動工作人員、演講者、長輩和志工溝通時,使用禮貌用語更安全。"
    };
  }

  return {
    recommendedVariant: "natural",
    message: "在氣氛輕鬆且與同儕互動的場合下,使用自然的他加祿語是可接受的。",
    reason: "建立交情後,日常休閒口吻能顯得更加親切。"
  };
}

程式碼說明

● 商業邏輯: 此輔助工具教導何時使用禮貌用語更安全。

● 程式碼邏輯: 固定的正式對象列表控制了推薦變體是 polite 還是 natural。

● 預期結果: 呼叫 getPolitenessGuidance("speaker") 會返回禮貌推薦,而呼叫 getPolitenessGuidance("peer") 則返回自然指引。


步驟 5 — 建構分類選擇器

Kiro 提示詞範例

建立一個 CategorySelector React 元件。
它接收 categories、selected category 和 onChange 回呼函式。
使用具備無障礙輔助的按鈕和可見的選取狀態。

系統設計決策

● 情境優先導覽: 分類反映了活動情境。開發人員應避免在學習者需要快速查找某個片語時,強迫他們滾動瀏覽無關的卡片。

● 受控元件模式: 選擇器從其父元件接收狀態。這保持了篩選邏輯的集中化,並使元件易於測試和重複使用。

● 工作坊演示中按鈕優於下拉選單: 按鈕使分類切換在現場教學期間清晰可見。在兩小時的課程中,它們更容易讓參與者進行檢查、測試和樣式設計。

程式碼範例 — src/components/CategorySelector.tsx

import type { PracticeCategory } from "../data/practiceCards";

interface Props {
  categories: PracticeCategory[];
  selected: PracticeCategory;
  onChange: (category: PracticeCategory) => void;
}

export function CategorySelector({ categories, selected, onChange }: Props) {
  return (
    <nav aria-label="Practice categories" className="category-selector">
      {categories.map((category) => (
        <button
          key={category}
          type="button"
          aria-pressed={category === selected}
          className={category === selected ? "active" : ""}
          onClick={() => onChange(category)}
        >
          {category}
        </button>
      ))}
    </nav>
  );
}

程式碼說明

● 商業邏輯: 學習者選擇他們想要練習的活動情境。

● 程式碼邏輯: 元件將分類對應到按鈕,並透過 onChange 回報變更。

● 預期結果: 點擊分類會更新父元件中選定的練習群組。


步驟 6 — 建構提示/顯示練習卡片

Kiro 提示詞範例

建立一個 PracticeCardView 元件。
先顯示英文提示。
在學習者點擊 Reveal 之後,顯示自然他加祿語、禮貌他加祿語、發音、語氣和審查狀態。
如果語氣是 informal-playful,顯示一個 Informal 徽章。

系統設計決策

● 主動回憶優於被動閱讀: 提示/顯示設計讓學習者在看到答案前先思考。與總是立即顯示所有翻譯相比,這提高了練習價值。

● 顯示行為保持低認知負荷: 初學者可能會被文法、語氣和發音壓得喘不過氣。先顯示英文提示,稍後再顯示詳細資訊,可以創造更溫和的體驗。

● 語氣和審查保持可見: 即使在顯示之後,學習者也需要知道內容是否為草稿以及風格是否為非正式。UI 絕不能隱藏品質或語氣的元資料。

程式碼範例 — src/components/PracticeCardView.tsx

import { useState } from "react";
import type { Audience } from "../lib/politeness";
import { getPolitenessGuidance } from "../lib/politeness";
import type { PracticeCard } from "../data/practiceCards";

interface Props {
  card: PracticeCard;
  audience: Audience;
}

export function PracticeCardView({ card, audience }: Props) {
  const [revealed, setRevealed] = useState(false);
  const guidance = getPolitenessGuidance(audience);

  return (
    <article className="practice-card">
      <p className="practice-card__category">{card.category}</p>
      <h2>{card.englishPrompt}</h2>
      <p>{guidance.message}</p>

      <button type="button" onClick={() => setRevealed((value) => !value)}>
        {revealed ? "隱藏答案" : "顯示他加祿語"}
      </button>

      {revealed && (
        <section aria-label="Practice answer">
          <p><strong>自然他加祿語:</strong> <span lang="tl">{card.naturalTagalog}</span></p>
          <p><strong>禮貌他加祿語:</strong> <span lang="tl">{card.politeTagalog}</span></p>
          <p><strong>發音:</strong> {card.pronunciation}</p>
          <p><strong>語氣:</strong> {card.tone}</p>
          {card.tone === "informal-playful" && <span className="badge">Informal</span>}
          <p><strong>審查狀態:</strong> {card.reviewStatus}</p>
          <p><strong>原因:</strong> {guidance.reason}</p>
        </section>
      )}
    </article>
  );
}

程式碼說明

● 商業邏輯: 該元件建立了一種學習互動:閱讀英文、選擇是否顯示答案,然後比較自然和禮貌的形式。

● 程式碼邏輯: React 狀態控制了顯示/隱藏行為。禮貌輔助工具根據對象返回指引。

● 預期結果: 學習者可以一次練習一個提示,並為選定的對象獲得更安全的語氣指引。


步驟 7 — 組合教育練習應用程式

Kiro 提示詞範例

建立 App.tsx,讓學習者可以選擇分類和對象。
按分類篩選練習卡片並渲染提示/顯示卡片。
預設分類應為 greetings,預設對象應為 unknown。

系統設計決策

● 篩選優於搜尋: 對於小型工作坊應用程式,分類篩選比全文檢索更簡單且更具解釋性。它強化了活動情境模型,並保持實作易於檢查。

● 對象感知練習: 同一個句子在休閒或禮貌的脈絡下皆可被接受。對象選擇有助於學習者理解為什麼與未知接觸者、工作人員或演講者在一起時,禮貌變體更安全。

● 可組合狀態: App 外殼擁有選定的分類和對象。子元件則保持專注且可重複使用。這對於工作坊來說是一個乾淨的 React設計,因為開發人員可以快速推導狀態流。

程式碼範例 — src/App.tsx

import { useMemo, useState } from "react";
import { practiceCards, type PracticeCategory } from "./data/practiceCards";
import type { Audience } from "./lib/politeness";
import { CategorySelector } from "./components/CategorySelector";
import { PracticeCardView } from "./components/PracticeCardView";

const categories: PracticeCategory[] = ["greetings", "directions", "workshops", "thanks", "waiting"];
const audiences: Audience[] = ["unknown", "peer", "speaker", "organizer", "volunteer", "venue-staff", "elder"];

export default function App() {
  const [selectedCategory, setSelectedCategory] = useState<PracticeCategory>("greetings");
  const [audience, setAudience] = useState<Audience>("unknown");

  const visibleCards = useMemo(
    () => practiceCards.filter((card) => card.category === selectedCategory),
    [selectedCategory]
  );

  return (
    <main>
      <h1>AWS 馬尼拉社群日的教育性他加祿語練習</h1>
      <p>選擇一個情境、選擇一個對象,然後顯示他加祿語答案。</p>

      <label>
        溝通對象
        <select value={audience} onChange={(event) => setAudience(event.target.value as Audience)}>
          {audiences.map((item) => <option key={item} value={item}>{item}</option>)}
        </select>
      </label>

      <CategorySelector categories={categories} selected={selectedCategory} onChange={setSelectedCategory} />

      {visibleCards.map((card) => (
        <PracticeCardView key={card.id} card={card} audience={audience} />
      ))}
    </main>
  );
}

程式碼說明

● 商業邏輯: 學習者根據情境和對象練習片語。

● 程式碼邏輯: useState 追蹤分類和對象。useMemo 有效率地為選定的分類篩選卡片。

● 預期結果: 選擇「directions」會顯示指路卡片;選擇「speaker」會優先推薦禮貌的他加祿語。


步驟 8 — 添加測試與資料品質 Hook

Kiro 提示詞範例

為教育練習流程生成測試。
驗證分類篩選、顯示行為、針對演講者對象的禮貌指引以及審查狀態的可見性。
建立一個 Kiro hook,在卡片資料變更時提醒開發人員驗證 reviewStatus。

系統設計決策

● 行為測試優於快照測試: 關鍵的學習行為是分類篩選和顯示。測試應該模擬學習者的操作,而不是僅僅比較 HTML 快照。

● 禮貌指引必須經過驗證: 應用程式的鑑別度在於教育性的語氣支援。如果對象選擇停止為演講者推薦禮貌用語,即使 UI 仍能渲染,產品也是失敗的。

● 資料變更 Hook: 語言應用程式中的內容更新非常頻繁。一個監視 src/data/ 的 Kiro Hook 可以在內容變更時,提醒開發人員檢查審查狀態、非正式標籤和發音覆蓋率。

程式碼範例 — src/tests/politeness.test.ts

import { describe, expect, it } from "vitest";
import { getPolitenessGuidance } from "../lib/politeness";

describe("getPolitenessGuidance", () => {
  it("為演講者推薦禮貌的他加祿語", () => {
    const result = getPolitenessGuidance("speaker");
    expect(result.recommendedVariant).toBe("polite");
    expect(result.message).toContain("禮貌的他加祿語");
  });

  it("允許在輕鬆的同儕情境中使用自然的他加祿語", () => {
    const result = getPolitenessGuidance("peer");
    expect(result.recommendedVariant).toBe("natural");
  });
});

程式碼說明

● 商業邏輯: 該測試確認了「對演講者而言禮貌用語更安全」的教育規則。

● 程式碼邏輯: 它直接呼叫輔助工具並斷言(Assert)返回的推薦。

● 預期結果: 如果禮貌規則不小心被削弱,測試將會失敗。

Kiro Hook 範例 — .kiro/hooks/card-data-quality.md

# Hook:卡片資料品質提醒

觸發條件:當 `src/data/` 底下的檔案被儲存時。
動作:
1. 檢查每張卡片是否都有 `reviewStatus`。
2. 檢查每張卡片是否都有發音文字。
3. 提醒開發人員,`draft` 內容在發布到正式環境之前,需要經過母語人士審查。
4. 如果引入了新分類,建議添加或更新測試。

Hook 說明

● 商業邏輯: 隨著資料集的增長,該 Hook 保持了教育內容的可審查性。

● 程式碼邏輯: 它將品質提醒附加到資料變更上,而不是依賴人工記憶。

● 預期結果: 每當資料變更時,系統都會提示開發人員維護審查和發音標準。

完成檢查清單

● [ ] 教育引導文件存在。

● [ ] Kiro 規格書任務存在。

● [ ] 練習卡片模型包含分類、語氣、發音和審查狀態。

● [ ] 禮貌輔助工具為決定性(Deterministic)且通過測試。

● [ ] 分類選擇器可正確篩選卡片。

● [ ] 提示/顯示卡片運作正常。

● [ ] 針對資料品質的 Kiro hook 指引存在。

工作坊後的選用 AWS 擴充

● 將靜態建置版本託管於 AWS Amplify Hosting。

● 將 practiceCards 作為具備版本主控權的 JSON 儲存於 Amazon S3。

● 使用 Kiro 生成已審查學習內容的發布檢查清單。

● 將 Amazon Bedrock 的草稿生成功能嚴格限制在人工審查工作流程之後。


附加動手操作開發者實驗室

這些實驗室是 工作坊 2 — 教育優先開發技巧 的獨特內容。它們透過教學法、學習者信心、內容審查和禮貌用語護欄,擴充了核心的提示/顯示應用程式。焦點不在於通用的 Kiro 設定,而在於將教育意圖轉化為開發人員清晰可見的產品行為。

動手操作實驗室 A — 在添加更多卡片之前建立學習者成果量規(Rubric)

開發者行動

● 要求 Kiro 建立一個量規,定義初學者在完成每個分類後應達到的能力。

● 將此量規添加到 .kiro/steering/learning-rubric.md。

● 要求 Kiro 將目前的 practiceCards 資料與該量規進行比對。

● 將任何缺失的成果轉化為微小的實作任務。

Kiro 提示詞範例

為這個他加祿語練習應用程式建立一個學習者成果量規(learner-outcome rubric)。
按 greetings、directions、workshops、thanks 和 waiting 將成果分組。
針對每個分類,定義初學者成功標準、禮貌用語預期、發音預期以及審查風險註記。
然後檢查目前的練習卡片模型,並將差距(gaps)列為實作任務。

系統設計決策

● 擴充前先立量規: 更多卡片並不等同於學習效果的提升。量規在開發人員大規模添加資料之前,就告訴了他們每個分類應該教導什麼。

● 成果驅動的資料審查: 卡片只有在支援具體的學習者行動時才有用,例如禮貌地向志工問候或詢問某個房間在哪裡。

● Kiro 作為課程審查者: Kiro 可以將實作產出與量規進行比對並產生可執行的差距列表,而母語人士仍然擁有最終的語言審查權。

程式碼範例 — .kiro/steering/learning-rubric.md

# 學習量規

每個練習分類必須支援一項初學者行動、一個尊稱標記以及一個口說信心目標。

## Greetings(問候)
- 初學者行動:自我介紹為正在學習他加祿語的人。
- 禮貌預期:在初次見面問候中展現 `po`。
- 發音預期:包含 `Kumusta` 和 `Tagalog` 的重音指引。
- 審查風險:避免宣稱某一種問候語適用於所有地區或場合。

## Directions(指路)
- 初學者行動:詢問活動活動室、報到處或出口在哪裡。
- 禮貌預期:對志工和場地工作人員使用禮貌的提問形式。
- 發音預期:包含 `Saan po` 的簡短指引。
- 審查風險:地點詞彙應檢查是否符合自然活動情境的使用習慣。

## Workshops(工作坊)
- 初學者行動:請求允許提問、重複、加入或就座。
- 禮貌預期:對演講者和主辦方使用禮貌的措辭。
- 發音預期:包含溫和提問的口說技巧。
- 審查風險:避免使用聽起來帶有命令口吻的措辭。

程式碼說明

● 商業邏輯: 量規在確保內容數量之前,先定義了教育品質。

● 程式碼邏輯: Kiro 在生成卡片、測試和審查任務時可以使用此引導文件。

● 預期結果: 未來添加卡片時會根據學習成果進行檢查,而不是僅僅因為程式碼能編譯通過就被接受。

動手操作實驗室 B — 為初學者練習添加信心程度模型

開發者行動

● 在每張練習卡片中添加一個面向學習者的信心程度(Confidence level)。

● 要求 Kiro 更新 TypeScript 模型和種子資料。

● 在提示附近渲染信心程度,以便學習者知道該卡片的難易度。

● 添加一個測試,驗證每張卡片是否都有信心程度。

Kiro 提示詞範例

在練習卡片的資料合約中添加初學者信心模型。
使用 confidenceLevel 值:starter(入門)、guided(引導)、stretch(挑戰)。
Starter 卡片應簡短且適合初次接觸時安全使用。
Guided 卡片可包含簡短的情境附註。
Stretch 卡片可包含較長的禮貌片語。
更新型別、範例資料、UI 標籤和測試。

系統設計決策

● 信心是學習設計的一部分: 初學者需要知道哪些片語可以先安全嘗試。難度標籤能防止應用程式將所有句子視為同樣容易上手。

● 微小列舉(Enum)優於自由文字: 固定的聯集型別可避免出現不一致的標籤(如 easy, beginner, simple 或 basic)。

● 可見的元資料: 信心程度應顯示在 UI 中,而非隱藏在資料中,因為學習者會利用它來選擇練習流程。

程式碼範例 — src/data/practiceCards.ts

export type ConfidenceLevel = "starter" | "guided" | "stretch";

export interface PracticeCard {
  id: string;
  category: PracticeCategory;
  englishPrompt: string;
  naturalTagalog: string;
  politeTagalog: string;
  tone: "casual" | "polite" | "event-ready" | "informal-playful";
  pronunciation: string;
  reviewStatus: ReviewStatus;
  confidenceLevel: ConfidenceLevel;
}

export const confidenceLabels: Record<ConfidenceLevel, string> = {
  starter: "從這裡開始",
  guided: "結合情境練習",
  stretch: "排練後嘗試"
};

程式碼說明

● 商業邏輯: 該模型協助學習者選擇一個可達成的練習卡片。

● 程式碼邏輯: ConfidenceLevel 限制了有效值,而 confidenceLabels 集中了顯示文字。

● 預期結果: 新卡片若漏掉預期的初學者難度,將會導致型別或驗證上的差距。

動手操作實驗室 C — 為提示/顯示練習建構提示階梯

開發者行動

● 要求 Kiro 添加在顯示完整他加祿語答案之前出現的選用提示。

● 實作一個輔助工具,為卡片返回有序的提示。

● 使用「顯示提示」和「顯示答案」操作更新練習卡片 UI。

● 添加驗證提示在答案之前出現的測試。

Kiro 提示詞範例

為提示/顯示練習建立一個提示階梯(hint ladder)。
在顯示完整答案之前,提示應依序揭露分類情境、第一個字、尊稱標記和發音提示。
保持提示的決定性,並由現有的卡片物件衍生而來。
為提示優先的學習流程添加元件測試。

系統設計決策

● 搭建鷹架(Scaffold)引導回憶,而非直接給出答案: 提示階梯在完全揭露答案前鼓勵主動記憶。

● 衍生提示減輕內容維護負擔: 第一個版本可以從現有的卡片欄位中衍生提示,而不是要求作者維護一個新的提示資料集。

● 決定性行為是可測試的: UI 可以證明提示是按順序出現的,且完整答案會保持隱藏直到使用者要求顯示。

程式碼範例 — src/lib/hints.ts

import type { PracticeCard } from "../data/practiceCards";

export interface PracticeHint {
  label: string;
  value: string;
}

export function buildHintLadder(card: PracticeCard): PracticeHint[] {
  const firstWord = card.politeTagalog.split(/\s+/)[0] ?? "";
  const hasPo = /\bpo\b/i.test(card.politeTagalog);

  return [
    { label: "情境", value: `這是用於 ${card.category}。` },
    { label: "第一個字", value: firstWord },
    {
      label: "尊稱標記",
      value: hasPo ? "在禮貌版本中注意聽 po。" : "此片語中未出現 po 標記。"
    },
    { label: "發音提示", value: card.pronunciation }
  ];
}

程式碼說明

● 商業邏輯: 提示協助學習者進行預演,而不需要立即複製答案。

● 程式碼邏輯: 輔助工具讀取 category、politeTagalog 和 pronunciation 來建立可預測的提示步驟。

● 預期結果: 學習者可以在揭露完整片語之前,逐步請求指引。

動手操作實驗室 D — 為禮貌指引添加對象安全矩陣

開發者行動

● 要求 Kiro 建立一個對象與推薦語氣行為的矩陣。

● 將單一訊息的禮貌指引替換為結構化的策略輸出。

● 為每個對象值添加單元測試。

● 要求 Kiro 識別任何可能使學習者感到困惑的 UI 標籤。

Kiro 提示詞範例

將禮貌輔助工具重構為對象安全矩陣。
針對每個對象,返回 recommendedVariant、safetyLevel、reason 和 learnerWarning。
對演講者、主辦方、志工、場地工作人員、長輩和未知接觸者使用更嚴格的指引。
為每個對象值生成 Vitest 測試案例。

系統設計決策

● 策略表優於巢狀條件式: 與散落的 if 語句相比,矩陣更容易與教育工作者和母語人士進行審查。

● 安全等級支援 UI 決策: 應用程式可以對未知接觸者或被封鎖的內容顯示更強烈的警告,而不需要修改卡片 Schema。

● 全面測試保護語氣規則: 每個對象值都應該有一個測試,以便未來的重構不會在無意中削弱禮貌用語指引。

程式碼範例 — src/lib/audiencePolicy.ts

export type Audience = "peer" | "speaker" | "organizer" | "volunteer" | "venue-staff" | "elder" | "unknown";
export type SafetyLevel = "relaxed" | "careful" | "strict";

export interface AudiencePolicy {
  recommendedVariant: "natural" | "polite";
  safetyLevel: SafetyLevel;
  reason: string;
  learnerWarning: string;
}

export const audiencePolicy: Record<Audience, AudiencePolicy> = {
  peer: {
    recommendedVariant: "natural",
    safetyLevel: "relaxed",
    reason: "建立交情後,與同儕使用自然的他加祿語會顯得親切。",
    learnerWarning: "不確定時請使用禮貌措辭。"
  },
  speaker: {
    recommendedVariant: "polite",
    safetyLevel: "strict",
    reason: "演講者正在主持會議,因此使用禮貌用語更安全。",
    learnerWarning: "請從禮貌版本開始。"
  },
  organizer: {
    recommendedVariant: "polite",
    safetyLevel: "strict",
    reason: "主辦方負責管理活動,且可能是初次接觸的人。",
    learnerWarning: "請先使用禮貌措辭。"
  },
  volunteer: {
    recommendedVariant: "polite",
    safetyLevel: "careful",
    reason: "志工正在協助與會者,因此提出禮貌的詢問是合適的。",
    learnerWarning: "尋求協助時請使用 po。"
  },
  "venue-staff": {
    recommendedVariant: "polite",
    safetyLevel: "strict",
    reason: "場地工作人員是在公開場合中的專業接觸對象。",
    learnerWarning: "優先使用禮貌的版本。"
  },
  elder: {
    recommendedVariant: "polite",
    safetyLevel: "strict",
    reason: "面對長輩時,使用禮貌用語更為安全。",
    learnerWarning: "除非另有建議,否則請使用禮貌標記。"
  },
  unknown: {
    recommendedVariant: "polite",
    safetyLevel: "strict",
    reason: "未知的接觸對象需要最安全的預設選擇。",
    learnerWarning: "在情境明確變為休閒之前,請選擇禮貌的他加祿語。"
  }
};

程式碼說明

● 商業邏輯: 該策略教導更具對象感知能力且安全的言語選擇。

● 程式碼邏輯: Record<Audience, AudiencePolicy> 讓缺失的對象項目對 TypeScript 來說清晰可見。

● 預期結果: UI 和測試可以為所有的語氣指引使用同一個清晰的策略物件。

動手操作實驗室 E — 為母語人士回饋建立內容審查佇列

開發者行動

● 要求 Kiro 從草稿卡片中生成審查佇列(Review queue)。

● 添加一個按分類和審查狀態對卡片進行分組的函式。

● 在應用程式中渲染一個僅限開發人員檢視的審查摘要,或輸出主控台報告。

● 添加一個測試,確保被封鎖(Blocked)的卡片絕不會出現在學習者的預設練習列表中。

Kiro 提示詞範例

為他加祿語練習卡片建立一個內容審查佇列。
按 reviewStatus 和 category 將卡片分組。
草稿卡片應顯示審查者的問題。
已封鎖的卡片應從預設的學習者練習中排除。
添加一個小型可測試的輔助工具和一個面向開發人員的摘要元件。

系統設計決策

● 審查工作流程是一項功能: 由於語言內容需要母語人士審查,開發人員需要一種方法來查看哪些內容尚未被審查。

● 區分學習者檢視與審查者檢視: 學習者不應該收到被封鎖的內容作為推薦練習,但審查者仍然需要對其進行檢查。

● 按分類分組: 審查者可以在情境中評估片語,而不是掃描一個扁平的列表。

程式碼範例 — src/lib/reviewQueue.ts

import type { PracticeCard, PracticeCategory, ReviewStatus } from "../data/practiceCards";

export type ReviewQueue = Record<ReviewStatus, Partial<Record<PracticeCategory, PracticeCard[]>>>;

export function buildReviewQueue(cards: PracticeCard[]): ReviewQueue {
  return cards.reduce<ReviewQueue>((queue, card) => {
    queue[card.reviewStatus] ??= {};
    queue[card.reviewStatus][card.category] ??= [];
    queue[card.reviewStatus][card.category]!.push(card);
    return queue;
  }, { draft: {}, "native-reviewed": {}, blocked: {} });
}

export function learnerPracticeCards(cards: PracticeCard[]) {
  return cards.filter((card) => card.reviewStatus !== "blocked");
}

程式碼說明

● 商業邏輯: 輔助工具將審查管理與學習者練習區分開來。

● 程式碼邏輯: buildReviewQueue 按狀態 and 分類對卡片進行分組,而 learnerPracticeCards 則篩選掉不安全的內容。

● 預期結果: 開發人員可以清楚看到哪些需要審查,且被封鎖的內容不會被推送給學習者。

動手操作實驗室 F — 添加講師課後小檢核(Exit-ticket)與學習分析事件模型

開發者行動

● 要求 Kiro 為工作坊學習成果定義僅限本地的分析事件。

● 為選取的分類、檢視的提示、顯示的答案和選取的信心程度添加事件型別。

● 在工作坊期間將事件保存在記憶體或主控台中;不要在外部發送遙測資料。

● 根據事件名生成一個講師課後小檢核(Exit-ticket)範本。

Kiro 提示詞範例

為此工作坊應用程式定義一個僅限本地的學習事件模型。
追蹤 category_selected、hint_viewed、answer_revealed 和 confidence_marked。
請勿添加外部遙測或網路呼叫。
建立一個簡短的講師課後小檢核範本,詢問學習者練習了什麼以及他們在哪裡仍需要協助。

系統設計決策

● 無外部複雜度的學習分析: 本地事件模型可協助講師討論行為,同時保持工作坊的隱私友善性與免設定性。

● 事件對應到教學法: 這些事件對應到學習行動,而非行銷指標。

● 課後小檢核形成閉環: 開發人員可以看見產品檢測(Instrumentation)如何支援教學品質的提升。

程式碼範例 — src/lib/learningEvents.ts

export type LearningEventName =
  | "category_selected"
  | "hint_viewed"
  | "answer_revealed"
  | "confidence_marked";

export interface LearningEvent {
  name: LearningEventName;
  cardId?: string;
  category?: string;
  value?: string;
  occurredAt: string;
}

const events: LearningEvent[] = [];

export function recordLearningEvent(event: Omit<LearningEvent, "occurredAt">) {
  events.push({ ...event, occurredAt: new Date().toISOString() });
}

export function readLearningEvents() {
  return [...events];
}

程式碼說明

● 商業邏輯: 該模型擷取了可以為未來教學設計提供實證支援的學習者行動。

● 程式碼邏輯: 事件儲存在工作坊應用程式的記憶體中,可以在不添加額外服務的情況下進行檢查。

● 預期結果: 參與者可以討論教育產品如何負責任地衡量練習行為。


參考架構說明

● 本工作坊強調的 Kiro 功能:教學法引導、學習者成果審查、受控的 TypeScript 重構、基於規則的禮貌原則、源自教育驗收準則的測試,以及具備審查感知的開發。

● 產品範疇:針對活動準備、對初學者友善的他加祿語練習。語言內容在經過母語人士審查之前均保持為草稿。

● 執行期範疇:優先採用本地 React 應用程式。在建立審查工作流程後,可選用 AWS Amplify Hosting 或 Amazon S3 進行部署。