一个AI生成Scratch项目的工具

作为一个乐高编程老师,日常工作就是带着孩子们用Scratch做各种有趣的作品。慢慢地我发现,很多孩子脑子里有想法,但不知道怎么用Scratch的积木块去实现——他们知道"我想让角色动起来",但不知道该用哪块积木、怎么组合。

我就想,能不能做一个工具,让用户直接用自然语言描述需求,然后生成对应的Scratch项目?

核心原理

.sb3文件本质上是ZIP压缩包,里面包含project.json(项目配置)和资源文件(造型图片、音效等)。
整个生成流程分三步:
第一步:AI生成精简指令
用户输入自然语言需求,调用大模型,输出一个简化的JSON描述。比如用户说"让小猫移动",AI就生成类似这样的精简格式:
{
  "backdrop": "Space",
  "sprites": [
    {
      "name": "Fish",
      "programs": [
        [{"type":"when_flag_clicked"}, {"type":"change_x","value":10}]
      ]
    }
  ]
}

 

这个格式不是Scratch官方格式,而是我设计的一种中间描述,方便AI生成。
第二步:构建project.json
buildFromCompactFormat()函数把精简指令翻译成Scratch 3.0官方的project.json结构。这是最核心的部分:
  • 为每个积木块生成标准opcode(如motion_changexby
  • 构建积木链的parent/next引用关系
  • 处理inputs/fields的标准数组格式
  • 处理变量、广播、shadow块等
第三步:打包成.sb3
用JSZip创建ZIP压缩包,写入project.json,从本地素材库查找角色造型和音效,缺失的素材从Scratch CDN下载补齐,最后输出ZIP二进制流。

遇到的问题

JSON格式不稳定
大模型输出的JSON有时候会有语法问题,比如多一个逗号、少一个引号。最开始直接让AI生成project.json,结果十次有三四次会报错。
解决方案:先让AI生成我设计的精简格式(更简单、出错概率低),然后在本地用代码构建标准JSON,双重保险。
积木块参数格式复杂
Scratch的project.json结构很严格。一个"移动10步"的积木,要写清楚opcode、参数值、下一个积木是谁、父级积木是谁……参数还要用特定数组格式[参数值, [默认值]]
这部分花了不少时间研究Scratch官方文档和现有项目文件的结构。
素材管理
Scratch项目依赖造型和音效图片。我本地建了一个素材库(public/scratch-assets/),包含常见角色造型。如果用户的需求需要特殊素材,就从Scratch CDN动态下载补齐。
需求和生成的匹配度
用户说"让小猫走两步然后跳一下",AI可能理解成"移动20步",也可能理解成"重复移动"——边界情况很多。目前基本需求覆盖没问题,复杂逻辑还有优化空间。

用起来的感受

坦白说,这个工具目前还不够完美。但它确实解决了我自己教学中的一个痛点——给学生讲解概念时,可以快速生成示例项目,不用自己手动拼积木。
如果你也有类似需求,评论留下你的邮箱,我把工具发给你。
开发这个工具的过程其实也是学习的过程。有时候自己动手做一个东西,比看一百篇教程都有用。
上一篇 被拒绝20年后,中国自己建了个空间站:68年的硬核打脸史