RFC-0001:AI 原生 CAD 系统架构
| 字段 | 值 |
|---|---|
| 状态 | Proposed |
| 文档版本 | 0.1.2 |
| 创建日期 | 2026-08-29 |
| 最后更新 | 2026-09-14 |
| 当前契约 | 未发布阶段只维护当前 schema/catalog 内容绑定;变更同步规范与消费者,旧绑定明确拒绝,不保留兼容或迁移实现 |
| 目标产品 | 基于 Three.js 的 Aira AI 原生 3D 建模应用 |
| 决策范围 | 规范模型、事务、几何内核、运行时、存储、插件与交付 |
| 上游原则 | AI 原生工业 CAD 产品宪法 |
| 配套规范 | AMIR v0.1 |
| 配套接口 | RFC-0002:Aira Interface 与能力发现协议 |
| 当前进度 | Aira Core MVP 工作进度 |
| 上游调研 | 面向 AI 原生 3D 建模应用的 SDF、网格与 CAD 内核调研 |
本 RFC 提议采用“一个规范语义模型、一个事务入口、多个隔离几何后端、可验证派生工件”的系统架构:
- AMIR(Aira Modeling Intermediate Representation)revision 是唯一规范的 authoring source;
- 每个对外发布的 part/body root 在一次 revision 中恰有一个几何权威类型:ExactSolid、MeshSolid 或 Field3D;中间表示可以共存,但不能同时冒充该 root 的权威结果;
- OCCT、Manifold、Field 与 constraints adapter 分别承担精确 B-Rep、流形网格、隐式场和二维约束求解;
- Model Service 是人、AI、GUI、CLI 与插件共同使用的领域入口;
- AMIR compiler 只做确定性的语义编译,不直接调用几何内核;
- transaction engine 负责预条件、预览、验证、提交、幂等、审计和回滚;
- ArtifactGraph 保存 feature、kernel artifact、子形状、转换产物与渲染 primitive 的谱系;
- Geometry Certificate 记录每次几何结果实际达到的精度、有效性、来源保留和资源成本;
- Three.js 只消费 DisplayMesh / RenderPacket,不持有设计历史,也不直接修改几何真相;
- BREP、STEP、3MF、GLB、STL、Three.js scene 和 BufferGeometry 都不是项目的 authoring source。
该架构的重点不是让 AI 调用更多底层 API,而是把 AI 的操作面压缩为短小、类型安全、可查询、可预览、可拒绝、可恢复的领域事务。
1. 规范性用语
Section titled “1. 规范性用语”本文中的“必须”“禁止”表示架构不变量;“应该”表示默认决策,偏离时必须新增 ADR;“可以”表示兼容的实现选择。
本文区分两种容易混淆的“权威”:
- Authoring source(规范源):用于重建、版本控制、协作和审计的 AMIR revision。
- Geometric authority(几何权威表示):某个 body 在指定 revision、执行清单和容差下的 ExactSolid、MeshSolid 或 Field3D 结果。
ExactSolid 可以是该 body 的几何权威,但其 OCCT B-Rep/BREP 序列化仍是可重建工件,不是 authoring source。
2. 背景与问题
Section titled “2. 背景与问题”Three.js 擅长 GPU 显示和交互,但 BufferGeometry 表达的是位置、索引、法线、UV 等渲染缓冲,不包含参数、约束、设计历史或稳定 CAD 拓扑语义。Three.js BufferGeometry
glTF 的定位是运行时 3D 资产交付,而不是 authoring format,因此 GLB 适合分享和显示,不适合承载可重建的 CAD 意图。glTF 2.0 Specification
几何计算本身也不是一个内核能优雅覆盖的单一问题:
- OCCT 提供 B-Rep、解析曲面、NURBS、布尔、扫掠、放样、圆角/倒角、壳体、交换和 shape healing,是 ExactSolid 的基础。OCCT Overview OCCT Modeling Algorithms
- Manifold 以带方向的 2-manifold 三角网格为实体边界,提供官方 JS/TS/WASM 路径,适合 MeshSolid、网格布尔和 Field 烘焙。Manifold repository Manifold WASM README
- 隐式场适合 smooth boolean、晶格、warp 和生成式造型,但不天然提供可长期引用的显式面/边。
- 约束草图需要自由度、冗余和冲突解释,不能退化为一组已求值坐标。
如果上层直接保存 kernel object、face index、triangle index 或脚本执行结果,AI 会面对不稳定身份、隐式精度损失、不可审计副作用和无法恢复的异常字符串。本 RFC 把这些问题放在统一语义层、事务层和观测层解决。
3.1 产品目标
Section titled “3.1 产品目标”- 人类 UI、AI agent、CLI 和插件通过同一套领域事务创建、检查、修改、验证和导出模型。
- 任意已提交模型可以只依赖 AMIR、版本锁和外部输入工件重放。
- AI 能查询参数、依赖、约束、几何、拓扑、来源、误差和失败恢复建议,而不读取 raw kernel dump。
- 编译器必须能识别 dirty subgraph;增量执行是目标性能路径,但 Phase 0A 可以完整重算 DAG, 不得为提前实现缓存而牺牲确定性。预览可以降质,提交结果必须满足声明的权威质量。
- 多表示协作时不静默丢失精度、拓扑或设计意图。
- 浏览器、桌面原生和服务端共享协议、语义和证书,允许实现性能不同,但不得出现不同业务规则。
- 内核升级、容差变更和插件变更可检测、可重新验证;已有历史和执行证据不可被静默改写。
3.2 工程目标
Section titled “3.2 工程目标”- 把 OCCT/Manifold 的对象生命周期和崩溃范围限制在 worker 或 native worker 进程。
- 通过版本化 adapter ABI 隔离第三方库 API、许可证和构建差异。
- 所有缓存都可删除;删除缓存后仍能从规范源重建。
- 所有失败具有稳定 code、结构化上下文和可机器执行的恢复候选。
- 为每个提交、导出和关键预览产生可追踪的 Geometry Certificate。
- 从第一阶段开始建立确定性重放、几何质量和性能基准。
4. 非目标
Section titled “4. 非目标”本 RFC 不提议:
- 让 AI、UI 或插件直接调用 raw OCCT、Embind、Manifold C++/WASM 对象;
- 把任意 TypeScript、Python、C++ 或着色器执行结果当作模型规范源;
- 把 Three.js scene、BufferGeometry、BREP 文件、STEP、GLB、3MF 或 STL 当作 authoring source;
- 保证不同 CPU、编译器、线程调度和内核版本产生逐位相同的 B-Rep 或三角形顺序;
- 用 face[n]、edge[n]、triangle[n] 或指针/hash 作为跨 revision 的长期引用;
- 在 ExactSolid、MeshSolid 和 Field3D 之间进行隐式转换;
- 把 Manifold 的 manifold 输出等同于设计意图、尺寸或制造正确;
- 在首版重写完整 B-Rep 内核、完整约束求解器或通用 mesh repair 系统;
- 让 WebGPU 成为基本建模正确性的唯一执行路径;
- 首版解决大型装配、多人实时合并、移动端全功能 CAD 和所有行业交换语义。
5. 核心不变量
Section titled “5. 核心不变量”5.1 规范源不变量
Section titled “5.1 规范源不变量”- 每个提交对应一个不可变 AMIR revision,由 canonical serialization 的内容 hash 标识。
.aira文本是可选的人类 authoring projection,只承诺“解析 → canonical AMIR → 打印 → 再解析”的语义 round-trip,不承诺从 AMIR 字节级恢复原注释和格式。AMIR revision 始终是唯一规范源;CST trivia/source text 如需保真,作为绑定 Revision 的非语义附件保存。projection 与 revision hash 不匹配时必须标记 stale 并重新编译或再生成,禁止让两个文件共同争夺权威。- prompt、聊天记录和 GUI 状态可以记录为审计上下文,但不参与几何语义 hash。
- 导入文件以不可变 blob 和 import node 的形式被 AMIR 引用;其解析结果不是隐式全局状态。
- B-Rep、mesh、field bake、RenderPacket、截图和导出文件均为 AMIR revision 的工件。
5.2 表示不变量
Section titled “5.2 表示不变量”- 每个对外发布的 part/body root 在一次执行中必须声明唯一 geometric authority:ExactSolid、MeshSolid 或 Field3D;未绑定为 root 的中间表示只是候选或派生工件。
- DisplayMesh、selection buffer、BVH、法线、切线和 LOD 永远是派生视图。
- 每次跨表示转换都是 AMIR 中的显式 node,包含输入类型、输出类型、质量参数、误差策略和来源保留策略。
- MeshSolid → ExactSolid 和 Field3D → ExactSolid 默认没有通用自动转换。
- 转换超过允许误差、来源丢失阈值或资源预算时必须失败,不允许仅发日志后继续提交。
5.3 身份与事务不变量
Section titled “5.3 身份与事务不变量”- node、port、parameter、constraint、body 和 semantic role 使用与文本顺序无关的稳定 ID。
- 对面/边/顶点的引用由 SemanticRef 解析,必须声明 cardinality;missing 或 ambiguous 均阻止提交。
- 所有写入都经 transaction engine;viewer、adapter 和插件无权直接写 revision store。
- 相同 idempotency key 与相同请求体最多提交一次;同 key 不同请求体必须拒绝。
- 失败事务不产生半修改 revision,也不提升预览工件为已提交工件。