← Financial Cloud Cloud Cloud Club · 构建文章

极点宏观|Financial Cloud Cloud · 构建文章

使用 Kiro 构建:他加禄语 学习 App 中可审查的独特额外例句工作坊

系列: Kiro 工作坊

文章: 06

文章
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
星期五晚上,开始于构建者熟悉的感觉:有一个点子,正卡在问题与可能性之间。

目标受众: 负责构建内容 QA 流水线与 AI 辅助教育应用程序的专业开发人员

时长: 2 小时

主要 AWS AI 服务: Kiro

项目产出: 一个由 Kiro 引导的 QA 流水线,用于重写、去重、验证并导出可审查的额外示例。

仅限教育工程研讨会。这是一项软件架构练习,而非流程发布建议。

工作坊摘要

本工作坊旨在协助开发人员通过结构化的 QA,改善他加禄语(Tagalog)学习 App 中的额外示例。参与者将使用 Kiro 定义示例契约、生成多样化的练习句子、检测重复项目、加入可追溯的背景信息、导出审查员报告并验证数量。此工作流程可将松散的辅助示例转化为独特、可审计的学习资产,让审查员能在发布或安全扩展至未来课程前进行检查。

工作坊目标

开发人员将构建一个用于额外示例的内容 QA 流水线。该流水线将提取主要的原生他加禄语(Natural Tagalog)句子、生成三个相关示例、检测整个网站中的重复项目、加入可追溯的背景信息、导出审查员报告,并验证卡片与示例的数量。

2 小时议程

时间 模块 开发人员产出
0–10 分钟 Kiro 设置 准备好 QA 导向与规格书
10–25 分钟 示例契约 定义可审查的示例数据
25–45 分钟 生成机制 从每个来源句子建立三个示例
45–65 分钟 去重机制 检测重复项目并加入可追溯的背景信息
65–90 分钟 报告导出 为审查员产生 JSON 或 CSV
90–110 分钟 验证机制 强制每个卡片具备三个示例
110–120 分钟 Hook 与审查 自动化 QA 并建立交付文件

步骤 1 — 建立用于额外示例 QA 的 Kiro 导向设置

开发人员任务

● 在 Kiro 中生成导向文件(steering docs)。

● 加入额外示例的 QA 规则。

● 要求 Kiro 列出内容风险。

● 在编写脚本前提交(commit)导向设置。

Kiro 提示词示例

建立一個用於額外範例品質的導向文件。每張卡片必須包含三個相關範例。範例必須具備足夠的獨特性以供審查,並能透過文章與句子編號進行追溯,且在審查完成前須標記為草稿(draft)。

系统设计决策

● 在编码前使「步骤 1 — 建立用于额外示例 QA 的 Kiro 导向设置」保持显性: 专业开发人员在使用 AI 辅助工程时不应依赖隐含的假设。工作坊首先将规则写入导向设置或规格书中,使 Kiro 具备持久的项目背景信息。这能让生成的代码更具一致性,为审查员提供具体的检查依据,并避免在每次对话中重复解释。此决策也有助于新进开发人员理解文件存在的原因、解决了什么问题,以及哪些行为是被允许或禁止的。

● 保持实施具备确定性(deterministic)且可审查: 虽然 Kiro 可以协助生成代码、测试与文件,但工作坊的产出应具备可重复性。具备确定性的脚本、明确的配置、稳定的纲要(schemas)与验证报告能让结果更容易调试。当每项转换都有可见的输入与输出时,开发人员就能审查差异(diffs)、重新执行检查,并向其他工程师解释该系统。这对于语言学习内容尤为重要,因为正确性与文化背景需要人工审查。

● 将验证附加至工作流程,而非仅限于最终的展示: 工作坊将验证视为系统设计的一部分。每个步骤都包含检查、报告或 Hook,以便在造成变更的当下就能发现缺陷。这种方法让 Kiro 能够同时担任编码助理与质量审查员,同时让开发人员保持主导权。这是一个实用的专业工作流程:用规格书计划、用导向设置引导、以小型任务实施、验证输出并记录交付文件。

代码示例 — .kiro/steering/extra-example-qa.md

# 額外範例 QA 導向設定

- 每個句子卡片必須恰好包含三個額外範例。
- 範例必須與該卡片的原生他加祿語(Natural Tagalog)句子相關。
- 追溯文章編號、句子編號與範例編號。
- 偵測整個網站中重複的他加祿語範例文字。
- 為每個生成的範例加入審查狀態與審查員筆記。
- 若卡片數量或範例數量錯誤,則驗證失敗。

代码说明

● 业务逻辑: 导向设置文件将额外示例定义为可审查的学习内容。

● 代码逻辑: Kiro 在生成规格书、模型、重写脚本、验证器、Hook 与文件时会使用这些规则。

● 预期结果: 未来的代码将包含可追溯性、重复检测与审查元数据。


步骤 2 — 定义可审查的额外示例记录

开发人员任务

● 建立 example_model.py。

● 加入审查状态与可追溯性字段。

● 验证必填文字。

● 序列化记录以用于报告。

Kiro 提示词示例

建立一個用於可審查額外範例的 Python dataclass 模型。欄位包括:articleNumber, sentenceNumber, exampleNumber, sourceNaturalTagalog, tagalog, english, naturalTagalog, politeTagalog, duplicateGroup, reviewStatus, reviewNotes。

系统设计决策

● 在编码前使「步骤 2 — 定义可审查的额外示例记录」保持显性: 专业开发人员在使用 AI 辅助工程时不应依赖隐含的假设。工作坊首先将规则写入导向设置或规格书中,使 Kiro 具备持久的项目背景信息。这能让生成的代码更具一致性,为审查员提供具体的检查依据,并避免在每次对话中重复解释。此决策也有助于新进开发人员理解文件存在的原因、解决了什么问题,以及哪些行为是被允许或禁止的。

● 保持实施具备确定性且可审查: 虽然 Kiro 可以协助生成代码、测试与文件,但工作坊的产出应具备可重复性。具备确定性的脚本、明确的配置、稳定的纲要与验证报告能让结果更容易调试。当每项转换都有可见的输入与输出时,开发人员就能审查差异、重新执行检查,并向其他工程师解释该系统。这对于语言学习内容尤为重要,因为正确性与文化背景需要人工审查。

● 将验证附加至工作流程,而非仅限于最终的展示: 工作坊将验证视为系统设计的一部分。每个步骤都包含检查、报告或 Hook,以便在造成变更的当下就能发现缺陷。这种方法让 Kiro 能够同时担任编码助理与质量审查员,同时让开发人员保持主导权。这是一个实用的专业工作流程:用规格书计划、用导向设置引导、以小型任务实施、验证输出并记录交付文件。

代码示例 — example_model.py

from dataclasses import dataclass, asdict

ALLOWED_REVIEW_STATUS = {"draft", "native-reviewed", "blocked"}

@dataclass
class ExtraExample:
    articleNumber: int
    sentenceNumber: int
    exampleNumber: int
    sourceNaturalTagalog: str
    tagalog: str
    english: str
    naturalTagalog: str
    politeTagalog: str
    duplicateGroup: str | None = None
    reviewStatus: str = "draft"
    reviewNotes: str = "Needs native-speaker review."

    def validate(self):
        if self.reviewStatus not in ALLOWED_REVIEW_STATUS:
            raise ValueError(f"Invalid reviewStatus: {self.reviewStatus}")
        required = [self.sourceNaturalTagalog, self.tagalog, self.english, self.naturalTagalog, self.politeTagalog]
        if any(not value.strip() for value in required):
            raise ValueError("ExtraExample has empty required text")

    def to_dict(self):
        self.validate()
        return asdict(self)

代码说明

● 业务逻辑: 数据类别(dataclass)使每个额外示例皆可追溯与审查。

● 代码逻辑: 它会验证必填文字、控制审查状态,并将其序列化为字典,以便用于 JSON 报告。

● 预期结果: 调用 to_dict() 将返回经过验证的记录,或掷出明确的验证错误。


步骤 3 — 从每个卡片生成三个相关示例

开发人员任务

● 提取主要的原生他加禄语句子。

● 生成用于使用、重复与练习的示例。

● 加入客气/礼貌(polite)变体。

● 验证每笔记录。

Kiro 提示词示例

建立一個具備確定性的生成器,從卡片的原生他加祿語句子產生三個範例。每個範例皆須包含他加祿語、英語、原生他加祿語、禮貌他加祿語、來源句子、文章編號、句子編號與範例編號。

系统设计决策

● 在编码前使「步骤 3 — 从每个卡片生成三个相关示例」保持显性: 专业开发人员在使用 AI 辅助工程时不应依赖隐含的假设。工作坊首先将规则写入导向设置或规格书中,使 Kiro 具备持久的项目背景信息。这能让生成的代码更具一致性,为审查员提供具体的检查依据,并避免在每次对话中重复解释。此决策也有助于新进开发人员理解文件存在的原因、解决了什么问题,以及哪些行为是被允许或禁止的。

● 保持实施具备确定性且可审查: 虽然 Kiro 可以协助生成代码、测试与文件,但工作坊的产出应具备可重复性。具备确定性的脚本、明确的配置、稳定的纲要与验证报告能让结果更容易调试。当每项转换都有可见的输入与输出时,开发人员就能审查差异、重新执行检查,并向其他工程师解释该系统。这对于语言学习内容尤为重要,因为正确性与文化背景需要人工审查。

● 将验证附加至工作流程,而非仅限于最终的展示: 工作坊将验证视为系统设计的一部分。每个步骤都包含检查、报告或 Hook,以便在造成变更的当下就能发现缺陷。这种方法让 Kiro 能够同时担任编码助理与质量审查员,同时让开发人员保持主导权。这是一个实用的专业工作流程:用规格书计划、用导向设置引导、以小型任务实施、验证输出并记录交付文件。

代码示例 — generate_examples.py

from example_model import ExtraExample

def generate_examples(article_number, sentence_number, natural_tagalog):
    templates = [
        (f'Gagamitin ko rin ang linyang "{natural_tagalog}" mamaya.', f'I will also use the line "{natural_tagalog}" later.', f'Uulitin ko ang linyang "{natural_tagalog}" nang dahan-dahan.', f'Pakisuyo, uulitin ko po ang linyang "{natural_tagalog}" nang dahan-dahan.'),
        (f'Sasabihin ko ang linyang "{natural_tagalog}" sa kausap ko.', f'I will say the line "{natural_tagalog}" to the person I am talking to.', f'Ipapaliwanag ko ang linyang "{natural_tagalog}" sa simpleng paraan.', f'Pakisuyo, ipapaliwanag ko po ang linyang "{natural_tagalog}" sa simpleng paraan.'),
        (f'Magsanay tayo gamit ang linyang "{natural_tagalog}" ngayon.', f'Let us practice using the line "{natural_tagalog}" now.', f'Isusulat ko ang linyang "{natural_tagalog}" sa notes ko.', f'Pakisuyo, isusulat ko po ang linyang "{natural_tagalog}" sa notes ko.')
    ]
    output = []
    for i, (tagalog, english, natural, polite) in enumerate(templates, start=1):
        example = ExtraExample(article_number, sentence_number, i, natural_tagalog, tagalog, english, natural, polite)
        example.validate()
        output.append(example)
    return output

代码说明

● 业务逻辑: 生成器会建立三个与主卡片句子绑定的可审查示例。

● 代码逻辑: 它会填入具备确定性的范本、建立数据类别记录、对其进行验证并返回结构化输出。

● 预期结果: 调用 generate_examples(4, 10, 'Paki-check kung pumasok ang bayad.') 会返回三个带有可追溯性的草稿示例。


步骤 4 — 检测重复项目并导出审查员 CSV

开发人员任务

● 正规化(Normalize)他加禄语文字。

● 对所有示例中的重复项目进行分组。

● 为非开发人员审查员导出审查用 CSV。

● 要求 Kiro 摘要重复分组。

Kiro 提示词示例

建立重複偵測功能與 CSV 匯出器。正規化他加祿語文字、將重複項目分組、指派 duplicateGroup ID,並輸出 articleNumber, sentenceNumber, sourceNaturalTagalog, tagalog, english, politeTagalog, duplicateGroup, reviewStatus 與 reviewNotes。

系统设计决策

● 在编码前使「步骤 4 — 检测重复项目并导出审查员 CSV」保持显性: 专业开发人员在使用 AI 辅助工程时不应依赖隐含的假设。工作坊首先将规则写入导向设置或规格书中,使 Kiro 具备持久的项目背景信息。这能让生成的代码更具一致性,为审查员提供具体的检查依据,并避免在每次对话中重复解释。此决策也有助于新进开发人员理解文件存在的原因、解决了什么问题,以及哪些行为是被允许或禁止的。

● 保持实施具备确定性且可审查: 虽然 Kiro 可以协助生成代码、测试与文件,但工作坊的产出应具备可重复性。具备确定性的脚本、明确的配置、稳定的纲要与验证报告能让结果更容易调试。当每项转换都有可见的输入与输出时,开发人员就能审查差异、重新执行检查,并向其他工程师解释该系统。这对于语言学习内容尤为重要,因为正确性与文化背景需要人工审查。

● 将验证附加至工作流程,而非仅限于最终的展示: 工作坊将验证视为系统设计的一部分。每个步骤都包含检查、报告或 Hook,以便在造成变更的当下就能发现缺陷。这种方法让 Kiro 能够同时担任编码助理与质量审查员,同时让开发人员保持主导权。这是一个实用的专业工作流程:用规格书计划、用导向设置引导、以小型任务实施、验证输出并记录交付文件。

代码示例 — export_review_csv.py

import csv
import json
from pathlib import Path

COLUMNS = ["articleNumber", "sentenceNumber", "exampleNumber", "sourceNaturalTagalog", "tagalog", "english", "politeTagalog", "duplicateGroup", "reviewStatus", "reviewNotes"]

def export_csv(json_path="example-review-report.json", csv_path="example-review-report.csv"):
    payload = json.loads(Path(json_path).read_text(encoding="utf-8"))
    with open(csv_path, "w", newline="", encoding="utf-8") as file:
        writer = csv.DictWriter(file, fieldnames=COLUMNS)
        writer.writeheader()
        for example in payload["examples"]:
            writer.writerow({column: example.get(column, "") for column in COLUMNS})
    return csv_path

if __name__ == "__main__":
    print(export_csv())

代码说明

● 业务逻辑: 导出器通过与试算表兼容的 CSV,让非开发人员审查员也能轻松进行示例审查。

● 代码逻辑: 它会读取 JSON 报告、以稳定的顺序写入指定的字段,并返回 CSV 路径。

● 预期结果: 执行 python export_review_csv.py 会建立 example-review-report.csv 以供语言审查使用。


附加实施开发实验室

这些实验室是 工作坊 6 — 独特且可审查额外示例 所特有的。它们通过语义独特性检查、可追溯的示例身份、重写队列、审查员导入以及批次级别的质量报告,来扩展额外示例的 QA 流水线。其核心重点在于示例的多样性与可审查性,而非泛用的验证执行器。

实施实验室 A — 加入稳定的示例 ID 与历史元数据

开发人员任务

● 要求 Kiro 为每个额外示例生成稳定的 ID。

● 包含文章编号、句子编号、示例编号以及来源句子的哈希值(hash)。

● 加入历史元数据(lineage metadata),以记录生成策略与范本名称。

● 验证整个网站中每个示例 ID 的唯一性。

Kiro 提示词示例

為額外範例加入穩定的範例身分識別與歷程資訊(lineage)。
從 articleNumber, sentenceNumber, exampleNumber 與 sourceNaturalTagalog 的短雜湊值建立 exampleId。
加入 generatedBy, generationStrategy, templateName 與 sourceHash 欄位。
若有重複的 exampleId 數值,則驗證失敗。

系统设计决策

● 审查意见需要稳定的 ID: 审查员必须能够在重新生成后,依然指向同一个示例。

● 历史信息解释了示例存在的原因: 生成的示例应显示其来自练习范本、场景重写还是手动覆盖。

● 身份识别支持去重机制: 当每笔记录都有稳定的键值与来源哈希时,重复检测会变得更容易。

代码示例 — example_identity.py

import hashlib


def short_hash(value: str) -> str:
    return hashlib.sha1(value.encode("utf-8")).hexdigest()[:8]


def example_id(article_number: int, sentence_number: int, example_number: int, source_natural_tagalog: str) -> str:
    return f"a{article_number:03d}-s{sentence_number:03d}-e{example_number:02d}-{short_hash(source_natural_tagalog)}"


def lineage(template_name: str, strategy: str = "deterministic-template") -> dict:
    return {
        "generatedBy": "workshop-6-extra-example-pipeline",
        "generationStrategy": strategy,
        "templateName": template_name
    }

代码说明

● 业务逻辑: 稳定的 ID 与历史信息让示例在审查与重新生成过程中皆可追溯。

● 代码逻辑: 短哈希将 ID 与来源句子绑定,而历史信息则记录了生成方法。

● 预期结果: 每个示例都可以在审查员报告与去重记录中被引用。

实施实验室 B — 为近乎重复的项目加入语义相似度评分

开发人员任务

● 要求 Kiro 加入一个轻量级的近乎重复(near-duplicate)检测器,且不依赖外部服务。

● 正规化他加禄语文字并计算词记(token)重叠度。

● 标记具有高相似度的示例,即使它们不是完全相同的重复项目。

● 导出近乎重复的候选名单以供审查,而非自动删除。

Kiro 提示词示例

為他加祿語額外範例建立一個本地的近乎重複偵測器。
正規化標點符號與大小寫,計算詞記(token)集合的 Jaccard 相似度,並標記分數超過 0.82 的配對。
請勿自動刪除範例。
將重複候選項目連同範例 ID、分數與審查員決策(reviewerDecision)一併寫出。

系统设计决策

● 仅靠精确重复检查是不够的: 示例可能近乎相同,但仍能通过精确的文字匹配。

● 本地评分可保持工作坊的确定性: 词记重叠度是可解释且可重复验证的,不需要外部 API。

● 审查员决策仍由人工主导: 检测器负责标记候选项目;由审查员决定保留、重写还是封锁。

代码示例 — near_duplicates.py

import re
from itertools import combinations


def tokens(text: str) -> set[str]:
    normalized = re.sub(r"[^\w\sñÑ]", " ", text.lower())
    return {part for part in normalized.split() if part}


def jaccard(left: str, right: str) -> float:
    a = tokens(left)
    b = tokens(right)
    if not a and not b:
        return 1.0
    return len(a & b) / len(a | b)


def near_duplicate_pairs(examples: list[dict], threshold: float = 0.82) -> list[dict]:
    findings = []
    for left, right in combinations(examples, 2):
        score = jaccard(left["tagalog"], right["tagalog"])
        if score >= threshold:
            findings.append({
                "leftExampleId": left["exampleId"],
                "rightExampleId": right["exampleId"],
                "score": round(score, 3),
                "reviewerDecision": ""
            })
    return findings

代码说明

● 业务逻辑: 检测器会找出可能让学习者感到重复乏味的示例。

● 代码逻辑: 它会正规化文字、计算 Jaccard 相似度,并返回高于阈值的候选配对。

● 预期结果: 审查员会收到一份近乎重复的报告,且不会自动遗失任何示例。

实施实验室 C — 建立范本多样性预算

开发人员任务

● 要求 Kiro 定义示例允许的范本家族(template families)。

● 计算每个范本家族在每篇文章与每个类别中出现的频率。

● 若单一范本家族在页面中占比过高,则验证失败。

● 加入一份报告,建议接下来应该使用哪个范本家族。

Kiro 提示词示例

為額外範例建立一個範本多樣性預算。
範本家族包括:repeat(重複)、apply(應用)、ask(提問)、explain(解釋)與 write-down(寫下)。
在單一文章中,任一範本家族的佔比皆不得超過額外範例的 45%。
回傳文章級別的計次、失敗項目以及建議的下一個家族。

系统设计决策

● 独特性应包含教学法上的多样性: 三个示例在文字上可能是独特的,但在教学法上却可能流于重复。

● 预算可防止范本被过度使用: 限制每个家族的最大份额,能保持生成示例的多样性。

● 建议有助于重写循环(rewrite loops): 验证器应指出哪个范本家族可以改善平衡。

代码示例 — template_budget.py

from collections import Counter, defaultdict

MAX_SHARE = 0.45
FAMILIES = ["repeat", "apply", "ask", "explain", "write-down"]


def article_template_report(examples: list[dict]) -> dict:
    grouped = defaultdict(list)
    for example in examples:
        grouped[example["articleNumber"]].append(example)

    reports = {}
    for article, rows in grouped.items():
        counts = Counter(row["templateFamily"] for row in rows)
        total = sum(counts.values()) or 1
        failures = [
            {"templateFamily": family, "share": count / total}
            for family, count in counts.items()
            if count / total > MAX_SHARE
        ]
        suggested = min(FAMILIES, key=lambda family: counts.get(family, 0))
        reports[article] = {"total": total, "counts": dict(counts), "failures": failures, "suggestedNextFamily": suggested}
    return reports

代码说明

● 业务逻辑: 该报告使额外示例在不同的练习风格中保持多样化。

● 代码逻辑: 它按文章将示例分组、计算范本家族数量、标记占比过高的家族,并推荐未被充分使用的家族。

● 预期结果: 开发人员可以根据具体的多样性反馈,重写重复的批次。

实施实验室 D — 为重复或薄弱的示例建立重写队列

开发人员任务

● 要求 Kiro 建立一个需要重写的示例队列。

● 加入原因标签,例如 exact-duplicate(完全重复)、near-duplicate(近乎重复)、template-overused(范本过度使用)与 missing-politeness(遗漏礼貌变体)。

● 产生保留来源句子与可追溯性的重写提示词。

● 在审查完成前,将重写的示例保持在草稿(draft)状态。

Kiro 提示词示例

為薄弱的額外範例建立一個重寫佇列。
輸入來源包括完全重複發現、近乎重複發現、範本預算失敗以及驗證失敗。
為佇列中的每個項目產生 exampleId, reason, sourceNaturalTagalog, currentTagalog, rewriteInstruction,並將 reviewStatus 設為 draft。
請勿自動覆寫原始範例。

系统设计决策

● 重写应是审慎且深思熟虑的: 薄弱的示例应进入队列,而非被默默替换。

● 原因标签能提升审查效率: 审查员可以在批准重写前,看到该示例被标记的原因。

● 保持可追溯性完好无损: 重写会保留原始的示例 ID 与来源句子以供匹配。

代码示例 — rewrite_queue.py

from collections import defaultdict


def build_rewrite_queue(examples_by_id: dict[str, dict], findings: list[dict]) -> list[dict]:
    grouped_reasons = defaultdict(list)
    for finding in findings:
        grouped_reasons[finding["exampleId"]].append(finding["reason"])

    queue = []
    for example_id, reasons in grouped_reasons.items():
        example = examples_by_id[example_id]
        queue.append({
            "exampleId": example_id,
            "reason": sorted(set(reasons)),
            "sourceNaturalTagalog": example["sourceNaturalTagalog"],
            "currentTagalog": example["tagalog"],
            "rewriteInstruction": "Create a distinct beginner-friendly example that keeps the same source sentence context.",
            "reviewStatus": "draft",
            "reviewerDecision": ""
        })
    return queue

代码说明

● 业务逻辑: 该队列将 QA 发现转化为受控的重写工作。

● 代码逻辑: 发现项目依示例 ID 分组、按原因去重,并转换为可供审查员处理的任务。

● 预期结果: 开发人员可以重写被标记的示例,而不会遗失原始背景信息。

实施实验室 E — 导入审查员决策并套用安全更新

开发人员任务

● 要求 Kiro 设计审查员决策的导入格式。

● 支持以下决策:approve(批准)、rewrite(重写)、block(封锁)与 needs-discussion(需要讨论)。

● 将批准的元数据更新套用至示例报告。

● 拒绝在面向学习者的最终输出中发布被封锁的示例。

Kiro 提示词示例

為額外範例建立一個審查員決策匯入器。
讀取包含 exampleId, decision, reviewerNotes, revisedTagalog, revisedEnglish 與 reviewedBy 的 `reviewer-decisions.csv` 檔案。
僅在修改後欄位不為空時,才套用核准的重寫內容。
將被封鎖的範例標記為 blocked,並在匯出面向學習者的內容時將其排除。

系统设计决策

● 审查员反馈必须支持双向来回(round-trip): 唯有在决策能被安全导入时,CSV 导出才真正有用。

● 安全更新可避免意外的空白: 除非修改后的字段包含文字,否则不应套用重写。

● 被封锁的内容应采用安全失败(fail-closed)原则: 面向学习者的导出内容在默认情况下应排除被封锁的示例。

代码示例 — import_reviewer_decisions.py

import csv

ALLOWED_DECISIONS = {"approve", "rewrite", "block", "needs-discussion"}


def apply_decisions(examples_by_id: dict[str, dict], csv_path: str) -> dict[str, dict]:
    with open(csv_path, newline="", encoding="utf-8") as file:
        for row in csv.DictReader(file):
            example_id = row["exampleId"]
            decision = row["decision"]
            if decision not in ALLOWED_DECISIONS or example_id not in examples_by_id:
                continue
            example = examples_by_id[example_id]
            example["reviewerDecision"] = decision
            example["reviewNotes"] = row.get("reviewerNotes", "")
            example["reviewedBy"] = row.get("reviewedBy", "")
            if decision == "block":
                example["reviewStatus"] = "blocked"
            if decision == "approve":
                example["reviewStatus"] = "native-reviewed"
            if decision == "rewrite" and row.get("revisedTagalog") and row.get("revisedEnglish"):
                example["tagalog"] = row["revisedTagalog"]
                example["english"] = row["revisedEnglish"]
                example["reviewStatus"] = "draft"
    return examples_by_id


def learner_examples(examples: list[dict]) -> list[dict]:
    return [example for example in examples if example.get("reviewStatus") != "blocked"]

代码说明

● 业务逻辑: 审查员的决策成为内容 QA 生命周期的一部分。

● 代码逻辑: 导入器会更新状态、笔记、审查员身份与安全重写,同时过滤掉被封锁的输出。

● 预期结果: 审查反馈可以直接套用,无须手动编辑庞大的 JSON 文件。

实施实验室 F — 产生批次质量计分卡

开发人员任务

● 要求 Kiro 为每个示例批次建立计分卡(scorecard)。

● 包含完全重复计次、近乎重复计次、遗漏审查元数据、范本主导性、封锁计次与批准计次。

● 产生通过/失败(pass/fail)的发布建议。

● 将计分卡存储为 JSON 与 Markdown 以供交付使用。

Kiro 提示词示例

為額外範例建立一個批次品質計分卡。
輸入來源包括範例、完全重複發現、近乎重複發現、範本預算報告與審查員決策。
回傳指標、通過/失敗狀態、發布建議(releaseRecommendation)與後續行動(nextActions)。
寫出 `example-quality-scorecard.json` 與 `example-quality-scorecard.md`。

系统设计决策

● 质量需要发布视角的视图: 个别验证器虽然有用,但维护者需要一个最终的摘要。

● 计分卡让进度可视化: 团队可以追踪重复计次是否在减少,以及批准的示例是否在增加。

● Markdown 支持人工交付: 易读的报告有助于审查员与工作坊参与者理解还剩下哪些工作。

代码示例 — scorecard.py

import json
from pathlib import Path


def quality_scorecard(examples: list[dict], exact_duplicates: list[dict], near_duplicates: list[dict], template_failures: list[dict]) -> dict:
    blocked = sum(1 for example in examples if example.get("reviewStatus") == "blocked")
    approved = sum(1 for example in examples if example.get("reviewStatus") == "native-reviewed")
    missing_review = sum(1 for example in examples if not example.get("reviewStatus"))
    passed = not exact_duplicates and len(near_duplicates) <= 5 and not template_failures and missing_review == 0
    return {
        "totalExamples": len(examples),
        "approvedExamples": approved,
        "blockedExamples": blocked,
        "exactDuplicateCount": len(exact_duplicates),
        "nearDuplicateCount": len(near_duplicates),
        "templateFailureCount": len(template_failures),
        "missingReviewMetadata": missing_review,
        "status": "passed" if passed else "needs-work",
        "releaseRecommendation": "Ready for learner-facing export." if passed else "Resolve QA findings before release."
    }


def write_scorecard(scorecard: dict, json_path="example-quality-scorecard.json", md_path="example-quality-scorecard.md") -> None:
    Path(json_path).write_text(json.dumps(scorecard, indent=2), encoding="utf-8")
    lines = ["# 範例品質計分卡", ""]
    for key, value in scorecard.items():
        lines.append(f"- **{key}:** {value}")
    Path(md_path).write_text("\n".join(lines) + "\n", encoding="utf-8")

代码说明

● 业务逻辑: 计分卡为维护者提供额外示例的发布就绪摘要。

● 代码逻辑: 指标衍生自示例与验证器的发现,然后写入成 JSON 与 Markdown。

● 预期结果: 该批次具备明确的通过/失败建议与具体可执行的质量指标。


参考架构说明

● 本工作坊强调的 Kiro 能力: 示例 QA 导向、稳定身份设计、近乎重复分析、范本多样性验证、重写队列生成、审查员决策导入以及发布计分卡文件化。

● 产品范畴: 用于他加禄语学习卡片的额外示例。生成的示例在由他加禄语母语人士审查前,皆保持为草稿(draft)状态。

● 执行环境范畴: 首先在本地执行 Python QA 流水线。后续可选择自动化配置,在 CI 中执行相同的检查,然后才导出面向学习者的示例。