「Kiro 鬼点子计划」是由亚马逊云科技发起的一项面向极客、企业开发者和创意开发者的活动,鼓励开发者用 Kiro 把看似荒诞却有趣的想法变成可运行的 Demo。
Kiro 本身是 AWS 于 2025 年 7 月推出的 AI 原生集成开发环境,强调“规范驱动开发”,可以把自然语言需求拆解成需求文档、设计文档和任务清单,再自动推进代码实现、测试和文档更新。
本次报告以 Python 为语言,围绕“鬼点子计划”的参赛要求,设计一个可运行的小工具,并分析如何用 Kiro 提升开发效率。
二、Kiro 与鬼点子计划的核心机制
鬼点子计划分为线上赛和线下赛,线上赛需在 10 月 22 日前提交可运行 Demo,评审标准包括创意度、Kiro 深度使用和交付质量。
Kiro 的关键能力包括:
| 能力 | 作用 | 对鬼点子计划的价值 |
|---|---|---|
| Spec 驱动开发 | 将一句话需求拆成 requirements、design、tasks | 快速把脑洞变成工程化任务 |
| Agent Hooks | 保存或提交时自动执行测试、文档更新 | 保证 Demo 交付质量 |
| Steering | 记录项目规范、语言偏好、架构约束 | 让 AI 输出更稳定 |
| MCP | 连接外部工具、文档、API | 扩展鬼点子的数据来源 |
| 多模型支持 | 支持多种模型调度 | 适配不同复杂度任务 |
三、鬼点子选题:Bug 情绪转换器
为了贴合“无用之用”和“无趣之趣”赛道,这里设计一个 Python 小工具:Bug 情绪转换器。
它的作用很简单:把开发者遇到的报错信息,转换成一封“情绪化请假条”、一首“赛博小诗”和一条“冷静修复建议”。它不一定实用,但足够好玩,也适合做成可运行 Demo。
四、Python 代码实现
importrandomimporttextwrapfromdatetimeimportdatetimedefclassify_bug(error_text:str)->str:"""根据报错文本粗略判断 bug 类型"""text=error_text.lower()if"index"intextand("out of range"intextor"list"intext):return"index_error"if"none"intextand"attribute"intext:return"none_type"if"file"intextand("not found"intextor"no such"intext):return"file_not_found"if"timeout"intextor"timed out"intext:return"timeout"if"permission"intextor"denied"intext:return"permission_denied"if"type"intextand"error"intext:return"type_error"return"unknown"defgenerate_leave_note(error_text:str,bug_type:str)->str:"""生成一封情绪化请假条"""moods=["崩溃","疲惫","迷茫","倔强","佛系","摆烂边缘","正在重启"]mood=random.choice(moods)now=datetime.now().strftime("%Y-%m-%d %H:%M")returntextwrap.dedent(f"""\ 【Bug 情绪请假条】 生成时间:{now}当前心情:{mood}报错摘要:{error_text.strip()[:120]}Bug 类型:{bug_type}尊敬的 Product Manager: 由于系统向我抛出了一个极其有想法的异常, 我的大脑已进入自我保护模式。 现申请短暂离线{random.choice([5,10,15,30])}分钟, 用于修复宇宙、对齐需求、以及找回失踪的分号。 批准人:未来的我 """)defgenerate_poem(error_text:str,bug_type:str)->str:"""把 bug 写成一首赛博小诗"""templates=[f"""\ 报错在深夜亮起, 像一行不肯睡去的代码。 它说:{error_text.strip()[:80]}我听见终端叹息, 于是把 bug 折成纸船, 放进日志的河里。 """,f"""\ 变量走失在函数尽头, 异常站在门口不肯离开。 它问:为什么没有人处理我? 我答:因为我在假装没有看见。 """,f"""\ 屏幕很亮, 咖啡很苦, bug 很安静, 只有日志记得它哭过。 """]returnrandom.choice(templates)defgenerate_fix_suggestion(bug_type:str)->str:"""生成一条冷静修复建议"""suggestions={"index_error":"检查列表长度,确认索引是否越界;必要时使用切片或条件判断。","none_type":"确认函数返回值是否可能为 None,调用前增加空值判断。","file_not_found":"检查文件路径、工作目录和权限;建议使用绝对路径或 pathlib。","timeout":"增加重试机制、超时控制和日志记录,避免无限等待。","permission_denied":"确认文件、端口或 API 权限,必要时联系管理员。","type_error":"检查传入参数类型,增加类型提示或输入校验。","unknown":"复制完整报错信息,结合日志和最小复现代码定位问题。",}returnsuggestions.get(bug_type,suggestions["unknown"])defconvert_bug(error_text:str)->str:"""主入口:把报错转换成请假条、诗和修复建议"""bug_type=classify_bug(error_text)leave_note=generate_leave_note(error_text,bug_type)poem=generate_poem(error_text,bug_type)fix_suggestion=generate_fix_suggestion(bug_type)result=[]result.append("=== Bug 情绪转换器 ===")result.append("")result.append(leave_note)result.append("=== 赛博小诗 ===")result.append(poem)result.append("=== 冷静修复建议 ===")result.append(fix_suggestion)return"\n".join(result)if__name__=="__main__":sample_errors=["IndexError: list index out of range","FileNotFoundError: [Errno 2] No such file or directory: 'data.csv'","AttributeError: 'NoneType' object has no attribute 'split'","requests.exceptions.Timeout: HTTPSConnectionPool timed out","PermissionError: [Errno 13] Permission denied: '/var/log/app.log'","TypeError: unsupported operand type(s) for +: 'int' and 'str'",]forerrinsample_errors:print(convert_bug(err))print("\n"+"-"*40+"\n")五、代码解析
程序整体分为四个层次。
第一层是bug 分类。classify_bug函数通过关键词匹配,把报错文本粗略归类为索引错误、空值错误、文件缺失、超时、权限错误、类型错误或未知类型。它不是精确诊断工具,而是为后续生成内容提供上下文。
第二层是情绪化请假条生成。generate_leave_note会随机选择一种心情,并拼接报错摘要、时间和 Bug 类型。这里使用textwrap.dedent保持多行字符串可读,也避免多余缩进影响输出。
第三层是赛博小诗生成。generate_poem从多个模板中随机选择一首诗,并把报错信息嵌入其中。它的价值不在于文学性,而在于把“冷冰冰的异常”转成一种开发者能会心一笑的表达。
第四层是修复建议生成。generate_fix_suggestion根据 Bug 类型给出相对实用的处理方向,例如检查索引、处理 None、确认文件路径、增加超时重试等。这样程序不只是搞笑,也保留了少量工程价值。
主函数convert_bug把三部分结果拼成完整输出,并通过if __name__ == "__main__"入口提供可直接运行的 Demo。
六、运行效果示例
当输入:
IndexError: list index out of range程序可能输出:
=== Bug 情绪转换器 === 【Bug 情绪请假条】 生成时间:2026-10-20 14:30 当前心情:正在重启 报错摘要:IndexError: list index out of range Bug 类型:index_error 尊敬的 Product Manager: 由于系统向我抛出了一个极其有想法的异常, 我的大脑已进入自我保护模式。 现申请短暂离线 15 分钟, 用于修复宇宙、对齐需求、以及找回失踪的分号。 批准人:未来的我 === 赛博小诗 === 报错在深夜亮起, 像一行不肯睡去的代码。 它说:IndexError: list index out of range 我听见终端叹息, 于是把 bug 折成纸船, 放进日志的河里。 === 冷静修复建议 === 检查列表长度,确认索引是否越界;必要时使用切片或条件判断。每次运行结果会因随机选择而不同,这也符合“鬼点子”作品的趣味性。
七、如何结合 Kiro 完成鬼点子计划
如果把这个工具交给 Kiro 实现,可以按以下流程推进:
用一句话描述点子
例如:“做一个把报错信息转换成请假条、赛博诗和修复建议的 Python 工具。”让 Kiro 生成 Spec
Kiro 会自动拆出需求文档、设计文档和任务清单,明确输入、输出、分类规则和边界条件。使用 Vibe 模式快速原型
先让 Kiro 生成基础版本,验证输出是否有趣、可运行。切换到 Spec 模式完善结构
补充异常处理、输入校验、日志记录和命令行参数。配置 Agent Hooks
例如保存 Python 文件时自动运行pytest,提交前检查代码格式。使用 Steering 固定风格
比如规定输出必须包含“请假条、诗、修复建议”三部分,避免 AI 跑偏。打包成可提交 Demo
最后生成一个可运行脚本、演示录屏和简短说明,满足鬼点子计划提交要求。
八、项目亮点
- 创意贴合赛道:把报错信息变成请假条和诗,符合“无用之用”“无趣之趣”的趣味定位。
- 结构清晰:分类、生成、组装三层分离,便于继续扩展。
- 可运行 Demo 完整:无需额外依赖,直接运行即可看到输出。
- 具备工程化改造空间:后续可接入日志系统、Web 界面、命令行参数或 MCP 工具。
- 适合 Kiro 展示:从一句话脑洞到 Spec、代码、测试和 Demo,能够体现 Kiro 的规范驱动开发能力。
九、后续扩展方向
可以进一步把这个小工具升级:
- 增加
argparse命令行参数,支持读取本地日志文件; - 接入 MCP,让 Kiro 查询官方文档后生成更准确修复建议;
- 增加单元测试,验证不同报错类型的分类结果;
- 使用 PyInstaller 打包成独立可执行文件;
- 增加 Web 界面,做成在线 Bug 情绪转换器;
- 加入多语言输出,例如中文、英文、程序员黑话版。
十、结论
Kiro 鬼点子计划的核心并不是要求参赛者立刻做出改变世界的产品,而是鼓励开发者把那些“有空再做”的奇思妙想真正落地。Kiro 的价值在于,它不只是生成代码,还能通过 Spec、Hooks、Steering 和 MCP 把创意推进成可交付的 Demo。
本次 Python 报告以“Bug 情绪转换器”为例,展示了如何把一个看似无用的点子拆解为分类、生成、组装和演示四个环节。它既能作为鬼点子计划的参赛作品,也能作为理解 Kiro 规范驱动开发的一个小型实践样本。