跳转到内容

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 的操作面压缩为短小、类型安全、可查询、可预览、可拒绝、可恢复的领域事务。

本文中的“必须”“禁止”表示架构不变量;“应该”表示默认决策,偏离时必须新增 ADR;“可以”表示兼容的实现选择。

本文区分两种容易混淆的“权威”:

  1. Authoring source(规范源):用于重建、版本控制、协作和审计的 AMIR revision。
  2. Geometric authority(几何权威表示):某个 body 在指定 revision、执行清单和容差下的 ExactSolid、MeshSolid 或 Field3D 结果。

ExactSolid 可以是该 body 的几何权威,但其 OCCT B-Rep/BREP 序列化仍是可重建工件,不是 authoring source。

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 把这些问题放在统一语义层、事务层和观测层解决。

  1. 人类 UI、AI agent、CLI 和插件通过同一套领域事务创建、检查、修改、验证和导出模型。
  2. 任意已提交模型可以只依赖 AMIR、版本锁和外部输入工件重放。
  3. AI 能查询参数、依赖、约束、几何、拓扑、来源、误差和失败恢复建议,而不读取 raw kernel dump。
  4. 编译器必须能识别 dirty subgraph;增量执行是目标性能路径,但 Phase 0A 可以完整重算 DAG, 不得为提前实现缓存而牺牲确定性。预览可以降质,提交结果必须满足声明的权威质量。
  5. 多表示协作时不静默丢失精度、拓扑或设计意图。
  6. 浏览器、桌面原生和服务端共享协议、语义和证书,允许实现性能不同,但不得出现不同业务规则。
  7. 内核升级、容差变更和插件变更可检测、可重新验证;已有历史和执行证据不可被静默改写。
  1. 把 OCCT/Manifold 的对象生命周期和崩溃范围限制在 worker 或 native worker 进程。
  2. 通过版本化 adapter ABI 隔离第三方库 API、许可证和构建差异。
  3. 所有缓存都可删除;删除缓存后仍能从规范源重建。
  4. 所有失败具有稳定 code、结构化上下文和可机器执行的恢复候选。
  5. 为每个提交、导出和关键预览产生可追踪的 Geometry Certificate。
  6. 从第一阶段开始建立确定性重放、几何质量和性能基准。

本 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 和所有行业交换语义。
  1. 每个提交对应一个不可变 AMIR revision,由 canonical serialization 的内容 hash 标识。
  2. .aira 文本是可选的人类 authoring projection,只承诺“解析 → canonical AMIR → 打印 → 再解析”的语义 round-trip,不承诺从 AMIR 字节级恢复原注释和格式。AMIR revision 始终是唯一规范源;CST trivia/source text 如需保真,作为绑定 Revision 的非语义附件保存。projection 与 revision hash 不匹配时必须标记 stale 并重新编译或再生成,禁止让两个文件共同争夺权威。
  3. prompt、聊天记录和 GUI 状态可以记录为审计上下文,但不参与几何语义 hash。
  4. 导入文件以不可变 blob 和 import node 的形式被 AMIR 引用;其解析结果不是隐式全局状态。
  5. B-Rep、mesh、field bake、RenderPacket、截图和导出文件均为 AMIR revision 的工件。
  1. 每个对外发布的 part/body root 在一次执行中必须声明唯一 geometric authority:ExactSolid、MeshSolid 或 Field3D;未绑定为 root 的中间表示只是候选或派生工件。
  2. DisplayMesh、selection buffer、BVH、法线、切线和 LOD 永远是派生视图。
  3. 每次跨表示转换都是 AMIR 中的显式 node,包含输入类型、输出类型、质量参数、误差策略和来源保留策略。
  4. MeshSolid → ExactSolid 和 Field3D → ExactSolid 默认没有通用自动转换。
  5. 转换超过允许误差、来源丢失阈值或资源预算时必须失败,不允许仅发日志后继续提交。
  1. node、port、parameter、constraint、body 和 semantic role 使用与文本顺序无关的稳定 ID。
  2. 对面/边/顶点的引用由 SemanticRef 解析,必须声明 cardinality;missing 或 ambiguous 均阻止提交。
  3. 所有写入都经 transaction engine;viewer、adapter 和插件无权直接写 revision store。
  4. 相同 idempotency key 与相同请求体最多提交一次;同 key 不同请求体必须拒绝。
  5. 失败事务不产生半修改 revision,也不提升预览工件为已提交工件。