
.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步",也可能理解成"重复移动"——边界情况很多。目前基本需求覆盖没问题,复杂逻辑还有优化空间。
坦白说,这个工具目前还不够完美。但它确实解决了我自己教学中的一个痛点——给学生讲解概念时,可以快速生成示例项目,不用自己手动拼积木。
如果你也有类似需求,评论留下你的邮箱,我把工具发给你。
开发这个工具的过程其实也是学习的过程。有时候自己动手做一个东西,比看一百篇教程都有用。