← 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 学习应用
Tagalog 练习室
T2 用教育优先的开发提示,为 AWS Manila Community Day 构建 Tagalog 学习应用
Tagalog 练习室
T3 面向 AWS Manila Community Day 的 Tagalog 学习应用深度开发流程
Tagalog 练习室
T4 为 AWS Manila Community Day 将 Tagalog 学习应用本地化为中文变体
Tagalog 练习室
T5 为 AWS Manila Community Day 的 Tagalog 卡片构建语法与发音增强流水线
Tagalog 练习室
T6 在 AWS Manila Community Day 的 Tagalog 学习应用中,让额外示例唯一且可审查
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 只做多回测代理
只做多 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 交易历史工厂
把回测做成可审计的交易历史工厂。
B5 使用 Bedrock AgentCore 与 Strands Agents 构建代理式 Amazon 回测运营模型 [Part 1]
先建立运营模型,再争论结果。
B6 为 Amazon 择时与头寸管理构建自定义 Cerebro 代码解读 [第 2 部分]
先讲 Cerebro 引擎,再讲图表。
B7 为 Amazon 策略结果与经验教训构建交易员复盘记录 [Part 3]
把策略排名写成交易员复盘记录。
B8 使用 AgentCore 和 Strands 构建受治理的 FSI Amazon 头寸管理手册 [第 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 周末创意挑战:领导力卡牌游戏
浏览器版创意引导卡牌。
06 全栈挑战:社区日留言板应用程序
浏览器版活动通信空间。
领导力卡牌
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 进行部署。