起飞就起飞

小小 3D 积木工坊:一句话搭一块积木,把「空间」讲给孩子听

Posted on By baixiao

小小 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 轮对话:

  1. 孩子问「什么是 3D 建模」,助手用「数字积木」讲了一遍,顺手开了工坊。
  2. 「给我搭一个戴蓝色眼镜、头发短短的人」——22 块积木,有脑袋、眼镜、身子、黑鞋。
  3. 「把头发改成黑色的」——助手没有一块一块去点,而是找出所有棕色积木,一次刷完。
  4. 「把脸改成椭圆形,头上有一只苍蝇」——方脑袋换成 3.8×4×3.8 的鸭蛋形,黑头发改成略大一圈的黑球从后面露出来,蓝眼镜重新装上镜腿;头顶趴了一只黑身红眼的小苍蝇。最后 26 件积木。

kid-3d 演示:戴蓝眼镜的人在慢慢转圈

这张动图就是最终效果:一件真实搭出来的作品,在浏览器里自己慢慢转圈。它来自插件导出的 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 系列里第一个「创造型」插件,前七个都在解释电脑,这一个让孩子用电脑造东西。它也验证了一件事:把复杂的专业软件拆成一组语义清晰的小工具,再让自然语言去指挥,孩子就能做出一件真正属于他的作品。

下一步可以做三件事:

  1. 让孩子自己挑一个模板改造成新作品,观察他会在哪一步卡住——那往往就是工具语义该改的地方;
  2. 把导出的 STL 真打出来一次,看看 1 格等于 5 毫米在手里是什么手感;
  3. 给「会转圈的网页」加上作品名和作者名,让它可以被分享出去。

参考资源

  • 插件源码: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