小小 3D 积木工坊:一句话搭一块积木,把「空间」讲给孩子听
关键词:DeepSeek Harness、Cordis 插件、儿童编程启蒙、3D 建模、CSS 3D、STL 导出
这一篇记录 dsh-kidlab 系列的第八个插件:kid-3d。它把 3D 建模软件里那一堆旋转、挤出、布尔运算,换成了一句「这里放块红方块」;孩子每说一句话,屏幕上就多一块积木,摆完能转着看,还能一键导出成 3D 打印文件。全文按「为什么做 → 它是什么 → 一次真实搭建 → 三个技术决定 → 容错设计 → 与系列的关系 → 工程结构 → 边界」展开,最后给出下一步的三件事。
核心结论(30秒速览)
核心结论:我们给 DeepSeek Harness 做了一个叫「小小 3D 积木工坊」的插件,孩子只要说一句话,屏幕上就多一块积木,摆完能转着看,还能一键导出成 3D 打印文件。整个过程不用装任何 3D 软件,也不用教孩子拖鼠标点菜单,是对着对话框说「这里放个红方块」就行。
一、为什么想到给孩子做 3D
kid 系列插件已经覆盖了编程(kid-coder)、内存(kid-memory)、进程(kid-process)、存储(kid-storage)、网络(kid-network)、安全(kid-security)、系统监控(kid-sysmon)。
这些都在讲「电脑里面怎么运转」。唯独缺一个方向:空间——怎么在电脑里造出一个有长、宽、高的真东西。
小朋友对「立体」的直觉其实比大人强。你让他画一张画,他会纠结透视;你让他搭积木,他立刻明白「前面挡住了后面」。3D 建模软件难的不是这个直觉,而是那一堆旋转、挤出、布尔、UV 的操作。所以我们把「操作」换成「说话」,把「软件」换成对话框。
关键洞察:对孩子来说,3D 建模的门槛从来不是空间想象力,而是软件的操作复杂度。把操作换成自然语言,这道门槛就消失了。
二、它是什么
一句话:在对话框里摆积木,在浏览器里转着看,在 3D 打印机里变出来。
装上后,Harness 会多出 8 个工具:
| 工具 | 干什么 | 孩子会怎么说 |
|---|---|---|
| kid3d_new | 开一间工坊:取名、定大小(8~32 格)、选地面 | 「我想搭个恐龙乐园,大一点」 |
| kid3d_build | 放一块积木:方块、球、圆柱、圆锥、尖顶、圆环,可指定位置、大小、颜色、朝向 | 「在中间放一个红色的方块」 |
| kid3d_erase | 拆掉指定范围内的积木 | 「把那根柱子拆了」 |
| kid3d_paint | 刷颜色,可以限定范围,也可以只刷本来是同色的 | 「把棕色的头发都刷成黑的」 |
| kid3d_template | 一键搭出 10 个现成作品:小房子、城堡、火箭、大树、雪人、汽车、小船、爱心、小猫、机器人 | 「给我搭个小火箭」 |
| kid3d_open | 打开以前收起来的作品接着玩 | 「昨天那个雪人再拿出来」 |
| kid3d_view | 出立体图:等距、正面、侧面、俯视、四视图 | 「让我看看现在长啥样」 |
| kid3d_export | 打包成 STL、OBJ、HTML | 「我要拿去打印」 |
每放一块积木都会自动重画一次图,所以孩子每说一句话,马上就能看到东西长出来——这个即时反馈,是它和「上一节 3D 课」最大的区别。
三、一次真实的搭建过程
下面这个「戴蓝眼镜的人」,是 2026-10-25 晚上在对话框里搭出来的,一共 4 轮对话:
- 孩子问「什么是 3D 建模」,助手用「数字积木」讲了一遍,顺手开了工坊。
- 「给我搭一个戴蓝色眼镜、头发短短的人」——22 块积木,有脑袋、眼镜、身子、黑鞋。
- 「把头发改成黑色的」——助手没有一块一块去点,而是找出所有棕色积木,一次刷完。
- 「把脸改成椭圆形,头上有一只苍蝇」——方脑袋换成 3.8×4×3.8 的鸭蛋形,黑头发改成略大一圈的黑球从后面露出来,蓝眼镜重新装上镜腿;头顶趴了一只黑身红眼的小苍蝇。最后 26 件积木。

这张动图就是最终效果:一件真实搭出来的作品,在浏览器里自己慢慢转圈。它来自插件导出的 HTML 文件,不是录屏剪辑,也不是渲染动画——打开就是这个样子。
四、技术上有意思的三个决定
① 静态图用纯 SVG,不用 canvas
等距立体图由插件自己算正交投影,只画看得见的面(背面剔除),输出一段 SVG。好处是不依赖任何图像库、不需要浏览器截图、聊天窗口里直接就能预览。
② 「会转圈的网页」零脚本也能转
导出的 HTML 里,每个面片是一个 1×1 像素的 div,用 matrix3d 摆到三维空间,外层 @keyframes 一转就成立体。这是没有脚本时的样子——预览沙箱禁用脚本,照样能看。用真浏览器打开时,内联的一小段脚本接管视角:按住拖动转、松手有惯性、滚轮拉远近、双击回正面、闲置 6 秒自己转。
关键洞察:把「有脚本」当成增强、把「没脚本」当成基线,同一份文件就有了两种活法,也顺带解决了预览沙箱的兼容问题。
③ 面数兜底
一件作品面数太多(默认超过 1200)时,网页自动退回静态 SVG,避免低配设备卡住。孩子搭得越大,越容易撞到这个上限,所以这条兜底是必需的。
五、和孩子聊天时的容错设计
孩子说话不精确:「放到那个旁边」「弄个蓝的」「大一点」。插件把这类模糊输入都翻译成了具体操作,说错了也听得懂:
- 位置少写一个数 → 按地面高度补全,并告诉孩子补了什么;
- 放到地下去了 → 自动抬到地面上,说明原因;
- 颜色不认识 → 给出调色板里最接近的几种;
- 积木太多放不下 → 提示工坊有多大、还剩多少位置。
出错时的回复统一是 【……】 开头的儿童向提示加具体怎么办,而不是一串错误码。
六、和系列其它插件的关系
| 插件 | 讲的是哪一维 | 产物 |
|---|---|---|
| kid-coder | 编程 | 能跑的小程序 |
| kid-memory | 内存 | 工作台视角的内存图 |
| kid-process | 进程 | 小工人视角的进程表 |
| kid-storage | 存储 | 大仓库视角的磁盘图 |
| kid-network | 网络 | 包裹怎么送到对面 |
| kid-security | 安全 | 城堡守卫视角的权限 |
| kid-sysmon | 系统监控 | 资源仪表盘 |
| kid-3d | 空间 | 能转、能打印的立体作品 |
前七个讲「电脑怎么运转」,kid-3d 讲「你能在电脑里造出什么」。这是从「看懂」到「创造」的一步。
七、卡片与工程结构(给做插件的人看)
Web 界面里,输入框上方会多一张薄荷绿的 🧱 卡片,标题栏一句话报当前工坊:作品名、几件积木、最近一次动它是什么时候、存档里还收着几件旧作品。展开后是等距缩略图、占地尺寸、打印尺寸、颜色和形状统计,每 8 秒刷新一次。
工程上它是一个包同时提供两半:
- host 半边(8 个工具 + 两条只读路由
GET /kid-3d/state、GET /kid-3d/preview.svg),用 esbuild 打成自包含单文件,只依赖 Node 内置模块; - client 半边是包根目录下的裸 JS 卡片,整文件包在 IIFE 里,通过
dsh.client声明挂到输入条上方。
卡片默认单会话可见(ONLY_SESSIONS 白名单),它把会话 id 交给 host,host 用会话的工作目录去找 kid3d/model.json——所以同一个会话换了目录,看到的就是那边的工坊。
安装与自测:
plugin_manager install_bundle target = 插件目录的绝对路径
node plugins/kid-3d/verify.mjs
改了 dsh.client 声明必须重启 dsh web,光刷新页面不够——客户端模块表在启动时扫一遍,没声明的包会被记成否定结论,一直用到进程结束。
八、它不做什么
v1 明确划了边界:不做布尔运算(挖洞、相交)、不做贴图、不做骨骼动画;不做任意角度的静态图(要看角度就用会转圈的网页,按住拖就行);不执行外部命令、不联网、不读写作品目录以外的文件。
结论与建议
kid-3d 是 kid 系列里第一个「创造型」插件,前七个都在解释电脑,这一个让孩子用电脑造东西。它也验证了一件事:把复杂的专业软件拆成一组语义清晰的小工具,再让自然语言去指挥,孩子就能做出一件真正属于他的作品。
下一步可以做三件事:
- 让孩子自己挑一个模板改造成新作品,观察他会在哪一步卡住——那往往就是工具语义该改的地方;
- 把导出的 STL 真打出来一次,看看 1 格等于 5 毫米在手里是什么手感;
- 给「会转圈的网页」加上作品名和作者名,让它可以被分享出去。
参考资源
- 插件源码:https://github.com/baixiaoustc/dsh-kidlab (plugins/kid-3d)
- 插件说明:plugins/kid-3d/README.md、DESIGN.md
- DeepSeek Harness:https://github.com/deepseek-ai/deepseek-harness