Rhino Codex
让 AI 住在 CAD 里
本文是《AI 时代的几何工作流:一个三层架构》的支撑文章 i:入口层。
浅层集成与深层集成
过去两年,"AI + CAD"的尝试已经有一堆。Autodesk Forma 接了 GPT,Rhino 有几个 ML 插件,Grasshopper 上的 GPT 小工具更是数不清。它们大部分只解决一件事:让 AI 帮你写脚本/参数/代码。
这个层次的集成是有用的 — 它降低了写 Python/C# 的门槛,让不会编程的人也能用上 GH 的脚本组件。但它也是浅的 — AI 在这种集成里,本质是一个"代码生成器",它和 Rhino 之间的关系是一次性的、单向的、无状态的。
这种浅层集成有几个具体的症状:
| 浅层集成 / Shallow | 深层集成 / Deep |
|---|---|
| AI 帮你写 Grasshopper 脚本 | AI 直接读写 GH 文档树和数据流 |
| AI 帮你查 RhinoCommon API | AI 把 RhinoCommon 当成自己的母语 |
| AI 生成代码,你跑 | AI 在文档里持续操作,你看着 |
| 一次性问答 | 持续协作的几何会话 |
| AI 不知道你画布上有什么 | AI 能查询任何对象的属性 |
| AI 不能持续操作 | AI 能在画布上接组件、改参数 |
这两者的区别,等价于"有人帮你查字典"和"这个人本身就会说这门语言"的区别。前者每次都要解释、都要翻译、都会断;后者直接进入对话、进入操作、进入持续在场。
"住"是什么意思
我把 Rhino Codex 描述为"让 AI 住在 CAD 里"。这不只是一句修辞。"住"指的是几个具体的能力:
- AI 能持续读取 CAD 当前状态 — 任何时候都知道画布上有什么对象、它们的属性、它们的关系
- AI 能持续写入 CAD — 能创建、修改、删除任何对象,而不只是输出代码让人去跑
- AI 拥有持久记忆 — 这次对话里建过的几何,下次能继续讨论、继续改
- AI 能查文档 — RhinoCommon 的 API、Grasshopper 的组件库,都是 AI 直接可读的语料
- AI 能调用真实工具 — 不是"我建议你点 Boolean Difference",而是直接执行 Boolean Difference
这五件事合起来,就是"住"。住下来的 AI 不是工具,是协作者。
MCP 协议:为什么是这个时机
要让 AI"住"进 CAD,过去几年其实是不可能的。原因不是 AI 不够聪明 — GPT-4 早就够聪明了 — 而是没有合适的协议让 AI 和 CAD 之间建立持久双向连接。
2024 年底,Anthropic 发布的 MCP (Model Context Protocol) 改变了这件事。MCP 的核心贡献是:
- 标准化 — 任何 AI 模型都能通过统一接口连接任何外部工具
- 双向 — 不只是工具被 AI 调用,工具也能向 AI 暴露状态、推送事件
- 持久 — 一个 MCP 连接是一个 session,不是一次 HTTP 请求
- 自描述 — 工具自己告诉 AI 它能做什么、参数是什么、返回什么
这四件事,合起来正好是让 AI"住进" CAD 所必需的。MCP 之前,AI 和 CAD 之间的接口是临时拼凑的、私有的、一次性的;MCP 之后,这个接口可以是稳定的、标准的、长期演化的。
Rhino Codex 的具体构成
rhino_doc/ ← MCP server
├── tools/
│ ├── doc_get_objects ← 读 Rhino 文档
│ ├── doc_set_layer ← 写图层
│ ├── geom_make_brep ← 创建几何
│ ├── gh_open ← 操作 Grasshopper
│ └── ... ← 共 47 个工具
├── docs/
│ ├── RhinoCommon.xml ← RhinoCommon API 文档(AI 可查)
│ └── gh_components.json ← GH 组件索引
└── bridge/
└── rhino_listener.py ← Rhino 端的接收脚本
三个组件:
- MCP server — 暴露工具给 AI 调用,共 47 个原子操作
- Rhino bridge — 在 Rhino 进程里跑的 Python 脚本,接收 MCP 调用并执行
- Console UI — 用户和 AI 对话的界面,可以挂参考图、查看 agent 流
它真正改变了什么
要看清楚 Rhino Codex 改变了什么,最好的办法是看一个具体的对话过去和现在的差别。
过去(浅层集成):
人:这个曲面我想加一组放射状的开孔
AI:好的,这是一段 Python 代码,你可以在 Rhino 里跑:
```python
import Rhino
...
```
人:[复制代码,在 Rhino 里跑,看不对,回去再问 AI]
AI:可能是参数对了,试试这样改:
...
人:[再跑,再调,反复几轮]
现在(深层集成):
人:这个曲面我想加一组放射状的开孔
AI:[直接在 Rhino 里读取你选中的曲面,
创建放射阵列的圆,
执行 Boolean Difference,
操作完成]
做好了。我建了 12 个洞,均匀分布。要调数量或大小,告诉我。
人:洞再小一点
AI:[直接修改]
缩小到原来的 0.6 倍了。
差别不只是"少几步操作"。差别是整个会话的性质变了 — 从"代码请求-结果反馈-再请求"的隔空喊话,变成了"我们一起在这个 Rhino 文档里工作"的并肩协作。
三个案例
6 · 1一句话生成一辆自行车
Case 01 · Text → Geometry · 纯文字输入
5 个字符的输入,得到一个带完整图层结构的成品。注意右侧的图层面板 — 不是一坨乱糟糟的几何,而是按部件分类、按材料命名的工程化组织。这是 AI 把 CAD 当作母语时的表现:它不只是"画出来",它按 CAD 的工作语法画出来。
6 · 2文字 + 参考图,生成 9 层退台拱门
Case 02 · Text + Image → Geometry · 文字加视觉参考
文字 + 图像的多模态输入,AI 综合两个信道的信息生成几何。退台层数被精确控制为 9,这不是 AI 自己决定的而是用户指定的 — 这意味着自然语言的精确量化指令已经能被准确执行。
6 · 3四张参考照片,重建范斯沃斯住宅
Case 03 · Multi-Image → Architecture · 多视角图像参考
这是三个案例里最具挑战性的一个 — 不只是几何形态,还要还原密斯的极简语言:精准的钢架比例、悬浮感、玻璃幕墙的分割、甲板与主体的高差关系。AI 综合 4 张多视角参考图 + 一句自然语言,生成的不是一个粗略草图,而是一个带工程化图层结构、可继续修改的完整建筑模型。
它在三层架构里的位置
回到三层架构的语境:
- Rhino Codex 是入口层 — 让自然语言、参考图、设计意图能直接进入 CAD 文档
- DGS 是中间层 — 让进入文档的 mesh / brep / graph 持续对齐(详见DGS 札记)
- Param Graph 是输出层 — 让形体被反推为可复现的参数逻辑(详见Param Graph 札记)
Rhino Codex 离开 DGS 和 Param Graph,只是一个会画图的 AI 助手 — 它能画出来,但画出来的几何没有结构、没有同步、没有可复现性。三层只有合在一起,才构成完整的 AI 时代几何工作流。
下一步
当前版本的 Rhino Codex 还在私测阶段。它已经能稳定完成上面三个案例这种复杂度的任务,但还在打磨:
- 更细的 RhinoCommon API 覆盖(目前 47 个工具,目标是 100+)
- 更好的 Grasshopper 操作能力(目前能开 GH、能操作画布,但还不能编辑数据流的复杂连接)
- 在线 Console 的开放(目前是本地工具,后续会做托管版本)
但即使现在的状态,它已经清晰地证明了一件事:AI 进入 CAD 不是不可能,只是需要把协议接对。MCP 把协议接对了,Rhino Codex 在这个新协议上长出了一个真正能"住下来"的 AI。
接下来的事,是让住进来的 AI 和 DGS 的对齐协议、Param Graph 的反推系统配合,真正完成 AI 时代的几何工作流闭环。