AI CAD 执行成本与 Plan–Compile 路线调查
| 项目 | 内容 |
|---|---|
| 状态 | 调查结论,作为执行边界改造的证据基线 |
| 日期 | 2026-09-05 |
| 范围 | DeepSeek 推理与工具调用、AI SDK 工具暴露、Aira Exact CAD 实测、CAD 命令生成研究 |
| 不改变 | Replicad/OCCT 几何权威、canonical AMIR、权限、验证、提交和历史语义 |
当前性能问题的主要来源不是 Replicad/OCCT,而是模型执行边界:一个 CAD 任务被拆成多轮高推理 工具调用,模型在每轮重新接收工具定义、历史、推理内容和工具结果。浏览器已经能确定执行的读取、预览、 验证、提交和提交后回读仍然暴露给模型,增加了不必要的推理次数和错误机会。
现有执行改造采用的主路径为:
一次高层规划 → 紧凑、强类型的 CAD 编辑程序 → 确定性编译为 canonical AMIR Patch → 宿主连续预览、验证、提交和回读 → 仅在真实诊断出现时请求局部修复。
紧凑编辑程序是面向模型的输入投影和编译器前端,不是第二套 CAD 内核。产品几何仍只通过
@aira/replicad,事务仍由现有 Aira Interface 承担。
这里的“紧凑”必须保持可组合,而不是把少数完整零件固化成模板。设特征 DAG 的节点、依赖边和自由参数
分别为 V、E、θ。在操作元数、数值精度和标识符长度有界时,展开式计划的结构项数目标为:
items(P) = Θ(|V| + |E| + |θ|)宿主负责把符号引用展开为稳定 ID、Revision、canonical AMIR Patch、事务和验证证据;这些机械信息不进入
模型输出。一次规划与局部差量修复是设计目标,不能由结构项数公式推出已经实现或保证上下文不超限。
实际 token 还取决于目录、数值表示、返回结果和修复轮次;循环、阵列和子程序可进一步压缩重复特征。
当前 aira.exact-cad-plan/0.1.0 只有“板件打孔”和“矩形旋转体”两个整件创建模板,证明了编译路径,
但不能证明上述表达能力;这是下一阶段要直接修复的限制。
同一空白板件倒角任务在放开诊断上限、使用官方 DeepSeek provider 和 high 推理后得到:
| 观测点 | 累计 Token | 累计时间 | 估算成本 | 几何结果 |
|---|---|---|---|---|
| 第 1 轮 | 16,281 | 31.2 s | $0.0105 | 无 |
| 进入第 3 轮 | 85,360 | 198.1 s | $0.0592 | 无 |
| 取消完成 | 163,238 | 271.7 s | $0.1010 | 0 feature / 0 body |
成本是当前客户端按未命中缓存价格得到的估算上界,不等同供应商最终账单;现有遥测尚未分别展示
prompt_cache_hit_tokens 和 prompt_cache_miss_tokens。
把原来的大型联合工具拆成九个具名工具后,首次请求体仍为 23,148 字节,其中:
| 内容 | 字节数 |
|---|---|
| 全部工具定义 | 21,095 |
model.proposePatch |
9,476 |
model.read |
6,516 |
| 消息 | 1,918 |
拆分改善了工具身份,但没有改变“每个工具步骤再推理一轮”的成本模型。ExactGraphWorkbenchExecution
已经预载 manifest 和初始 model read;浏览器在 propose 后还会自动 preview、validate、commit、readback。
因此这些确定性步骤没有理由继续作为模型主路径工具。
设初始上下文为 C₀,每轮固定工具定义为 S,每轮新增推理、消息和工具结果近似为 d,任务需要
m 次模型步骤,则第 i 次输入近似为:
Cᵢ = C₀ + S + (i - 1)d累计输入为:
Σ Cᵢ = m(C₀ + S) + d·m(m - 1)/2在完整历史持续回传时,累计上下文包含 O(m²) 项。总延迟近似为:
L = Σᵢ [TTFT(Cᵢ) + Oᵢ / v] + Σᵢ EᵢOᵢ 是输出和推理 Token,v 是生成速度,Eᵢ 是工具执行时间。当前实测中几何执行尚未开始,
延迟已经达到分钟级,说明主要成本发生在模型侧。
若每次模型决策正确率近似为 p,连续 m 次决策都正确的简化概率为 p^m。步骤间并不严格独立,
但这个近似说明:把确定性事务也交给模型会同时降低速度和端到端可靠性。
Plan–Compile 路径的延迟变为:
L′ = TTFT(Cplan) + Oplan / v + Ecompile + ECAD + R·LrepairR 是真实诊断触发的修复次数,正常路径为零。预览、验证、提交和回读不再乘上模型推理成本。
对大型能力目录,若候选工具 j 的 schema 长度为 Sⱼ,只加载 Top-K 工具时:
C(K) = C₀ + Σ(j ∈ Top-K) Sⱼ应选择满足目标能力覆盖率的最小 K。Aira 当前九个元操作已经有确定的阶段状态机,不需要为它们
新增学习型检索器;直接按阶段选择工具即可。检索只应用于更大的 CAD capability catalog。
官方接口证据
Section titled “官方接口证据”DeepSeek 思考模式默认开启且默认 effort 为 high;携带 tools 时,之前所有轮次的
reasoning_content 必须继续传回并进入上下文。medium 会映射为 high,不是独立档位。
DeepSeek Thinking Mode
DeepSeek strict tool calling 可以保证输出符合受支持的 JSON Schema,但当前 beta 接口要求每个 object
的所有属性都列入 required,且 additionalProperties 必须为 false。现有递归且包含大量可选字段的
AMIR Schema 不适合原样切换 strict;应该先建立紧凑、strict-compatible 的模型输入投影。
DeepSeek Tool Calls
DeepSeek 上下文缓存按从第一个 Token 开始的相同前缀自动命中。稳定的系统提示、工具顺序和公共前缀 可以降低重复输入成本,但缓存不能消除每次工具往返的生成、推理和错误概率,因此只能作为次级优化。 DeepSeek Context Caching
Vercel AI SDK 已提供 prepareStep 和 activeTools,可按步骤限制发送给 provider 的工具集合;不需要
为动态工具暴露再构造一套 Agent 循环。
AI SDK Tools and Tool Calling
论文与开源路线
Section titled “论文与开源路线”- 大工具集合会增加输入长度、延迟和错误选择;PORTS 等工作采用检索器预选相关工具。 PORTS, EMNLP 2025
- 工程实践中,完整预载工具定义曾占用 55K–134K Token;按需加载只保留相关工具,并用程序执行 循环和数据转换,避免每次工具调用都触发完整推理。 Anthropic Advanced Tool Use
- CAD-Llama 将参数化 CAD 表示为紧凑的 Python-like SPCC 命令序列;Seek-CAD 生成完整初始模型后 再做有限次数修正,而非把宿主事务逐步交给模型。 CAD-Llama、 Seek-CAD
- Plan then Act 把自然语言先转换为高层操作计划,再生成低层 CAD 命令,验证了分层规划优于通用 模型直接生成完整任务特定序列的方向。 Plan then Act, ICLR 2026
- 领域短语法配合 CFG 可缩短生成序列并保证语法;其具体倍数来自可视化任务,不能直接外推为 Aira 性能数字,但支持紧凑 CAD DSL 的方法选择。 Domain-Specific Shorthand
比较前的扩域草案(未发布,后续以文末实测决定取舍)
Section titled “比较前的扩域草案(未发布,后续以文末实测决定取舍)”以下是成熟库程序比较前的本地草案;不因已经实现而默认继续扩大该语法:
- 将现有两个整件模板改为可组合的特征 DAG 指令:轮廓、拉伸/旋转、布尔差、壳、倒角/圆角、参数修改; 每步声明短别名,引用只能指向前序输出。
- 规划阶段只提供任务需要的最小 capability 子集,模型一次输出紧凑 CAD 编辑程序。
- 确定性编译器解析编辑程序、分配稳定 ID、绑定当前实体和 capability,并生成 canonical AMIR Patch。
- 现有宿主连续执行 preview、validate、commit 和 readback,合法中间结果立即显示。
- 只有结构化语义或几何诊断进入修复调用;修复输出是局部差量,不重发整份设计和全部工具。
- 遥测分别记录 TTFT、输入、输出、推理、缓存命中/未命中、编译和内核执行时间。
扩域后从空白文档依次测试三类无预制 starter 的复杂零件:带中心孔与倒角的法兰衬套、四孔安装板、 带两个接口孔的薄壁壳体。每件都必须包含参数续改、撤销/重做、重开继续修改和独立 STEP 回读。 比较端到端成功率、首次可见几何时间、模型调用数、Token、缓存、几何诊断和最终模型等价性。 测试使用 provider 官方输出上限采集分布,不用 4,096 截断推导模型能力;获得数据后再确定产品预算。
2026-09-05:text-to-cad 源码调查
Section titled “2026-09-05:text-to-cad 源码调查”固定提交 c222e5da1ae4e6387fcb7ba09c8e475936ee3260,cadgen 0.5.0,仓库 MIT。源码检出到系统临时
目录,未安装插件或依赖、未运行模型脚本。以下为源码核查,非同机性能实测;本机 Python 尚无
build123d、OCP、cadgen。本节是用户提供新上游证据后的补充,不重开已确认的几何内核选型。
实际执行链:外部 Agent 按需读取资料 → 编写 Python/build123d → cadgen 构建/检查 → STEP 与查看器。
cadgen.build123d 懒加载后返回原始上游对象,同名同签名;cadgen 提供构建、缓存、装配组织、导出和检查。
pyproject 直接依赖 build123d、cadquery-ocp,未锁定两者具体版本;复现仍须记录安装版本。
依赖声明、
透明导出。
表达与上下文:普通 Python 变量、函数、循环、列表可组合成熟库操作。F1 源码组合 28 个子模型; 这种程序表达明显宽于 Aira 原有两个整件模板,但不能据此推导自然语言首试成功率。输出优化测试记录: 600 零件列表曾达 294 KB、约 73k token(上游估算),随后删除重复身份与标签、压缩 JSON、缩短显示坐标。 这支持压缩模型交互投影,不支持降低权威几何参数精度。本次没有找到足以比较两产品的同模型、同任务 完整 token/费用/成功率数据。 F1 源程序、 payload 测试。
性能机制:常驻进程降低冷启动成本;模型源码仍重执行,但以操作、参数和输入 BRep 为键缓存内核结果。 memo 在 build123d topology 层安装包装,区分位置和方向并恢复对象属性。源码记录过缓存属性丢失导致 结果变化、TShape 引用积累导致严重内存问题;不能直接叠加到 Aira 现有增量重算上。 操作缓存。
工业与部署边界:W16 待办记录 769 个原型中 30 个导出后自交、未完成的干涉检查和高耗时验证;这是
该示例的问题,不代表所有模型失败。typed mates 明确只有树结构正向运动学,无闭环约束求解;F1 闭环
机构另写动画程序。未发现可证明完整 SolidWorks 配合求解、持久面边命名或工程图等价能力的证据。
运行时通过 Python exec 执行源程序;查看器默认 loopback、无鉴权,不能原样作为多用户网站后端。
cadgen-js 是查看/网格/运动运行时,不是 Python CAD 内核的浏览器版。
W16 待办、
运动学源码、
运行入口、
部署边界。
复用决定与工作边界:真实需求是完整表达复杂设计并低成本续改。优先借鉴成熟库程序直用、短结果与
按需检查、复杂样例及诊断案例。Aira 维护版 Replicad 本就有 Shape3D.fuse/cut/intersect/shell、
Shape.mirror、Sketch.revolve/sweepSketch/loftWith;库 API 存在不等于当前 WASM、AMIR 和 AI 路径
都接通。继续扩大手写操作枚举前,先用含重复特征、扫掠/放样及局部修改的共同任务,对照原生库程序与
当前计划的表达损失、token、代码量和历史接入成本。只有已证实的上游缺口才扩展自研职责。
当前改造只在本地,contracts build 与 Web typecheck 已通过,真实内核及 provider 验证未完成。 本次未替换运行时或几何/历史权威。若改为源程序权威,须明确与 AMIR 的关系;STEP 导入只带回实体, 不能假装保留生成特征树。Python 与浏览器平台差异尚未解决,不能把仓库直接搬进现有 Worker。
2026-09-05:表达与连续修改的首次可复现实验
Section titled “2026-09-05:表达与连续修改的首次可复现实验”目标是在几何正确、历史可恢复的约束下,减少创建、修改及修复的总成本;表达字节数不等同模型 token。 重复结构可由循环压缩;参数更新的表达可以是常量规模,但依赖重算仍随实际受影响节点增长。 依据:CodeAct、 增量计算、 信息论。
直接使用现有测试,没有模型调用、新运行入口或新评测框架:
pnpm --filter @aira/replicad exec vitest run src/aira/step-exchange.test.ts:维护版 Replicad +replicad-opencascadejs@1.0.0。固定 JS 程序构造同一排通孔,改共享半径后重建;另构造 12 孔薄壁壳体、 放样接口和曲线扫掠空心管,验证单实体、BRep 有效、孔径修改的解析体积差及同内核 STEP 回读。pnpm --filter @aira/web exec vitest run src/sketch/g-cad-4-industrial-parts.test.ts:产品锁定的 feature-graph WASM,经公开 Interface 编译计划、执行事务、修改共享半径、销毁执行器并从存储重开。
| 通孔数 | 计划 build 步字节 | 原生程序与参数字节 | canonical Patch 字节 | 计划参数修改步字节 | 原生参数差量字节 |
|---|---|---|---|---|---|
| 4 | 1,228 | 400 | 16,251 | 82 | 12 |
| 16 | 4,091 | 401 | 44,160 | 82 | 12 |
| 31 | 7,718 | 401 | 79,074 | 82 | 12 |
以上是 UTF-8 实际序列化长度;不含能力文档、模型历史、推理和失败修复。两者消息封装也不同,不能据此 声称 token/总费用降低同样倍数。原生程序 64 孔仍为 401 字节并通过几何验证;当前计划生成 197 个 Patch operation,超过已发布 AMIR 的 100 项限制,32 孔也已超过。未为了实验放宽协议或假装该路线成功。 两种方案的共享参数修改都已是 O(1) 表达;产品 4/16/31 孔修改分别执行 8/32/62 个受影响几何节点, 符合修改所有孔引起整条布尔链重算的依赖范围,不能靠压缩消息消除。
一轮本机观测:产品创建约 604/1,487/3,712 ms,参数修改约 301/1,297/3,656 ms;上游程序创建约 143/263/386 ms,重建约 56/181/360 ms。不是公平内核性能排名:产品额外完成草图求解、拓扑证据、事务 和存储,两种 WASM 构建也不同。需优化哪段必须进一步分段测量,不能把差值归因于封装层数。
实测修复了本地编译器的两个确定缺陷:草图实体未按既有契约排序;不同草图复用 profile.outer 身份,
使多孔布尔链触发 TNAMING_FACE_LINEAGE_AMBIGUOUS。现在按节点分配 profile 身份,既有历史语义不变。
同时修复模型上下文丢失参数标签、范围、特征输入/草图约束引用的问题;保留编辑依赖,不重发几何常量与收据。
尚未解决的真实边界:将 sketchRectangle().extrude()、loftWith()、sweepSketch() 直接绑定产品 WASM,
三者均先报 Cannot call gp_Vec.XYZ due to unbound types: gp_XYZ;构建清单也未绑定
BRepOffsetAPI_ThruSections / BRepOffsetAPI_MakePipeShell。同一调用在上游 WASM 成功。因此不能把源码
存在解释为产品原生 API 已接通,也不能把原生库程序结果经 STEP 导入后声称保留了源程序的参数历史。
结论与边界:重复创建优先复用成熟程序的循环与组合;保留现有共享参数差量和确定性事务。下一步先补齐 同一产品 WASM 的上游绑定并验证生命周期,再决定程序与 AMIR 的唯一权威及兼容方式。停止机械扩充自创 操作枚举,不重写 Replicad,不引入第二个生产几何运行时。AI 发现成本、实际 token、错误修复成本尚未测量。
同日实施:补齐产品 WASM 绑定
Section titled “同日实施:补齐产品 WASM 绑定”真实需求是让现有维护版 Replicad 的通用建模程序在产品运行时执行,而不是增加操作枚举。
沿用锁定的 taucad/opencascade.js ebd263f1、OCCT b8f597c6 与现有构建镜像,
在同一 YAML 加入 34 个原生符号(63 → 97)。缺失的 gp_XYZ 与
GeomAdaptor_TransformedCurve 分别由真实构造和曲线扫掠测试定位;无需重写几何算法。
同一份 step-exchange.test.ts 在上游和产品 WASM 都完成 4/16/31/64 孔、共享半径修改、
12 孔薄壁壳体+放样接口+曲线扫掠管路、解析体积差、单实体有效性和同内核 STEP 回读。
产品 WASM gzip 由 5,960,473 增至 6,291,239 字节(约 +5.5%);这些测试不代表全 Replicad API 覆盖。
维护源码复用 afterBuild 回调形式把放样/扫掠的原生 maker 交给既有 OCAF 历史捕获;
验证生成关系非空、提交后实体仍有效,以及回调抛错时 builder 与消费的 sketch 被释放。
拉伸、放样和扫掠的临时资源通过现有 localGC 在 finally 中释放。
本地运行时收据更新为 v0.14,v0.13 保留。此处证明几何和底层历史可接通; 尚未把任意库程序接入公开 AI 接口、持久化源程序或完成该路径的撤销/重做,不能据此宣称产品复杂建模已完成。
验证命令沿用现有入口:Replicad 的 exact-feature-graph、step-exchange、exact-shape-history
三份测试共 71 项通过;Web 的 amir-v0.4-exact-feature-graph、g-cad-4-industrial-parts、
exact-graph.worker、sealed-exact-runtime-loader、exact-operation-worker-client 五份测试共 119 项通过。
包含已有七类旧项目夹具的回读和现有 AMIR 历史回归;Web/Replicad 构建与类型检查通过。
此轮回归存在并行负载,耗时输出仅为运行产物,不替代前文性能比较。gzip 体积采用构建收据的 level 9。
2026-09-09:工程对象、关系消元与编辑语义
Section titled “2026-09-09:工程对象、关系消元与编辑语义”用户同意继续研究工业能力对标中的首要方向:AI 直接操作工程对象与关系,宿主承担确定性推导与检查。 本节是首轮研究结论,未实现新的产品能力;研究范围唯一维护于上线计划 §11。
从现有真实模型确定缺口
Section titled “从现有真实模型确定缺口”读取正在运行的本地产品服务 /native-sdk-model 所提供的已保存盒体 head,未修改该文件或运行付费模型。
当前参数为 cols=8、rows=3、holeDiameter=6 mm、wall=2 mm;程序的外形为 120×80×40 mm、底厚 2 mm。
孔中心 X 在 15–105、Y 在 20–60 之间按行列数线性插值,圆柱切除贯穿底部。程序已使用循环,
set-parameters 已只传改动参数。因此“把逐孔坐标改成循环”在此模型上已经存在,不能当作新增收益。
缺少的是可查询、可执行、可持续验证的关系身份与编辑规则;它们目前隐含在 JS 中。
例如当前 X 两端孔中心距外边界 15 mm,孔缘到该外边界为 12 mm。孔径增为 7.2 mm 时, 保留当前中心端点会使孔缘边距变为 11.4 mm;如果要求保留孔缘边距 12 mm,则中心端点应变成 15.6 与 104.4 mm。这是同一真实模型两种编辑语义的解析推导,不是本轮新增几何运行的结果, 也没有把新的边距要求追认为此前用户已声明的条件。“边距”还须明确是到外边界、内壁还是其他基准。
三项原始研究及其适用边界
Section titled “三项原始研究及其适用边界”- Grünwald,MDL 教程,§1.2–1.4、§2.4: 规则可压缩数据,但需同时计算规则及规则下数据的编码长度,二部编码写作 L(M)+L(D|M)。 对 Aira 的启发是复用生成关系、保留例外与必要精度,不能只计算被省掉的坐标;模型语言和编码选择也有成本。 此处没有建立 CAD 任务的统计分布或实施 MDL 模型选择器,不把“参数更少”直接命名为 Shannon 熵降低。
- Hoffmann、Lomonosov、Sitharam,几何约束分解 Part II, §1、§2.2–2.3:MFA 在压缩子图内部时保留边界顶点和相关结构,避免粗暴收缩丢失外部约束所需信息。 论文明确自由度组合分析存在不能准确判定可解性的情况。对 Aira 的启发是内部变量可以消去, 与外部对象相连的基准、尺寸及条件必须保留;不据此重写已有求解器或宣称计数即可证明 CAD 可解。
- Acar 等,自调整计算实验分析,§2–3、§9: 动态依赖图记录数据与控制依赖,变化传播和记忆化共同复用计算;初次执行、跟踪和存储也有成本。 对 Aira 的启发是复用必须依赖完整失效条件。当前 arbitrary JS 程序节点内部未提供这种完整跟踪, 不能由“只改一个参数”推断只改一个孔;继续复用现有 OCAF 粒度,不新建平行缓存引擎。
可直接落地的数学边界
Section titled “可直接落地的数学边界”以正向 X 轴上的等径、等间距孔列为限定域。L 是两条已指定平行边界之间的长度,eL/eR 是孔缘净距, d 是孔径,n 为整数孔数。对 n≥2,固定两端孔缘边距时:
x0 = eL + d/2s = (L - eL - eR - d)/(n - 1)xi = x0 + i*s, i = 0,...,n-1gap = s - d坐标与间距由关系直接消去,不需把每个 xi 作为非线性求解未知数。若独立要求最小孔间净距为 g,
在 d>0、g≥0、s≥0 的域内,gap≥g 等价于:
(n-1)*(d+g) ≤ L-eL-eR-dn ≤ 1 + floor((L-eL-eR-d)/(d+g))这是限定布局内的解析约束,边界处实际浮点比较须处理数值误差。不能据此证明布尔有效、壁厚、 贯穿、与其他特征无干涉或制造可行;g=0 的相切情形仍须接受几何有效性检查。二维布局还要检查 Y 方向。 n=1 时首末孔重合,应由单孔定位规则决定位置,不能继续使用除以 n−1 的公式;未指定规则须明确报告。
真实盒体若采用前述新边距语义并改为十列、d=7.2,则 s=88.8/9 mm,X 孔间净距为 8/3 mm。 此值是可以交给宿主计算的事实,不替用户决定允许的最小净距。固定首末中心、固定孔缘边距、固定间距 是不同的驱动规则;不能同时把相互冲突的量都作为独立输入,再让求解器随意放松其中一个。
固定 n、m 的规则阵列中心可用常数个字段表达,计数本身的编码长度仍随 log(n)、log(m) 增长。 显式物化每个孔、输出 BRep 和相关检查仍有随孔数增长的工作;关系压缩并不把几何执行变成常数时间。
表示与执行的研究决定
Section titled “表示与执行的研究决定”工程关系至少需要对象身份、基准引用、带单位的驱动量、派生量、成立域、独立要求和失败诊断。 它应由现有 AMIR 内的一处权威定义,经同一 SDK 查询/编辑和 Session 提交;具体 schema 尚未定案。 不能同时维护一份可随意编辑的生成源码与一份可独立修改的关系声明,让二者竞争定义同一特征。 现有任意程序继续按程序语义执行;未显式建立且验证关系绑定前,不能凭变量名或几何相似自动声称已有工程语义。 这是不同表达能力的边界,不新增旧版兼容实现。程序整体几何能力也不应被一个封闭的孔阵列模板取代。
查询投影应保留后续编辑的区别:相同当前 BRep 但固定量不同的两个设计,不可被当作同一个可编辑状态。 此处将“保留编辑语义”作为设计条件:投影后的信息须足以确定受支持操作的结果和拒绝条件, 无法确定时通过同一接口补查。它还不是已证明的通用状态抽象算法。
阵列本身的身份与实例索引也须分开。增列时旧的第 i 列可能移动,首孔/末孔等关系引用不能偷换为 固定数组下标;涉及 split/merge/delete 的几何引用继续走既有 TNaming/显式歧义诊断。 生成关系可证明预定中心的位置,但要求是否被真实 BRep 满足仍要由几何测量检查;生成器自报孔数不能替代验收。 贯穿特征必须绑定目标实体及穿越域,不能只靠固定超长切除就宣称对任意后续编辑成立。
上游复用核对
Section titled “上游复用核对”| 真实需求 | 已核对的锁定设施 | 已证实差异与决定 |
|---|---|---|
| 草图关系与冲突诊断 | @aira/planegcs 1.2.0-aira.1,源自 npm 1.2.0 / ee9b156;GCS.cpp 的 declareUnknowns、connected_components、diagnose,GCS.h 的 QR 与约束 API;Web adapter 已读取冲突/冗余 ID |
已有数值求解、子系统和诊断。解析阵列先直接消元,剩余受支持草图关系调用现有设施。不新增通用代数求解器,也不把诊断集合宣称为最小不可满足核心。 |
| 几何与变化传播 | 维护版 Replicad;构建锁 OCCT V8_0_1 / b8f597c6;OcafFeatureDocument 的 addDependency、isDirty、completeFeature 与 history/selection API | 已有特征依赖和几何历史;尚无任意程序内部完备依赖证据。复用当前执行和生命周期,新的关系绑定属于 Aira 产品语义,builder 仍归 Replicad。 |
| AI 可发现编辑与验证 | packages/aira-contracts/src/exact-cad-plan.ts、packages/aira-cad-tools/src/tools.ts、共同 Session |
已有改参、按需读取、独立持久实体验证与尺寸要求。缺少上述完整工程关系投影;先在共同契约内明确权威和接受域,不新建工具执行器、DSL 或提示词约定。 |
下一项研究聚焦同一盒体的“固定中心端点/固定孔缘边距”如何由同一权威表示,并支持查询、编辑、 独立几何核验及历史恢复;具体实现仍须解决关系绑定、实例身份和原生验证接受域。首轮未替换运行时、 修改公开 schema、启动新的模型验收或提交部署;不把研究结论计为功能完成。
2026-09-09 开始产品接线后的边界决定:首个 exact.holeArray 特征需要的是圆柱工具对既有实体的贯穿切除,
不是变换对象的持久容器。直接复用维护版 Replicad 的 makeCylinder、makeCompound、非破坏 cut、
已有 Boolean history/ArtifactGraph 与 OCAF 调度;Aira 只保存驱动规则、解析消元、编译及诊断。
锁定 OCCT PatternStd 输出变换且排除种子实例,不能直接替代该切除及验证;当前没有需要保存原生变换阵列的消费者,
因此这一步不增加其 WASM 绑定。固定布局只有有限分支的封闭公式,不需要 Expr 字符串解释器;残余通用草图约束仍由已有 PlaneGCS 负责。
这不是新的通用求解器。实例血缘按约分后的归一化轴位置定义,端点保持 0/1,中间位置消失即不再继承旧索引身份。
首个真实运行与成本见工作进度当前状态;不能从参数数量推断运行时间收益。两轴规则的解析消元为常数次算术,
不会把实体物化的 nm 个切除工具变为常数成本。孔壁查验将已有血缘一次反向归集,再按实例查找,
从逐孔扫描所有面的 O(nm·F) 改为 O(L+nm),其中 L 是输出面的血缘链接总数;这不改变 OCCT Boolean 内部复杂度。
参数接线复用决定:真实需求是同一长度既驱动盒体又驱动阵列基准,编辑时无需重写坐标。
已有 AMIR 参数引用、graphLength 单位换算、parameter.setValue、materialized feature 缓存与 Session 事务足够承担此事;
上一切片整体常量中的数值没有独立参数依赖,因此改为标准的逐输入 Length/Count 绑定,删除整体常量编码。
Aira 只把有限的轴规则映射到这些输入,不新增表达式解析、参数图或调度器。Count 继续要求非负安全整数,
阵列求值再约束 1…4096 与间距成立域;Length 引用必须匹配类型,不把 Real/Count 隐式当作毫米。
把独立驱动量绑定起来消除了重复声明与逐孔决定;实体布尔仍按实际受影响依赖求值,不由字段数量推出加速比。
终端程序提取阵列时,复用同一 Patch 的多个 node.put/body.put 与既有守恒检查;
编译器明确唯一允许的输出继任节点,失败时整批不提交。没有另建转换事务或任意 JavaScript 特征识别器。
持久孔要求复用决定:真实需求是后续编辑仍满足独立声明的孔数、孔径、位置/边距和贯穿条件。 扩展既有 AMIR Assertion 与共同 Session,数值要求不绑定驱动参数;直接读取 BRepAdaptor 的圆柱轴、半径、 参数区间与原生面积,逐面匹配规则网格,不用生成器的 layout 或血缘作为通过证据。接受域为完整、未分裂的 内向世界 Z 圆柱孔壁;其他曲面与非竖直孔不纳入此孔数。贯穿检查复用 Replicad cut、原生体积积分与 BRepCheck:在目标整个 Z 范围内减去径向内缩 validationDistance 的独立圆柱探针,要求可移除体积加积分误差 不超过一个探针截面积乘 validationDistance。该条件是容差下的体积上界,不是精确集合证明或逐点净空证明。 无需新增 OCCT 绑定或通用几何求解器。实际操作发现只复制句柄会让探针检查改变共享 TShape 状态, 因此沿用项目 STEP 导出的 BRepBuilderAPI_Transform 恒等深复制,检查只操作临时拓扑/几何并统一释放; 修正后真实盒体保存重开与 STEP 导出通过。扫描/网格匹配为 O(F+nm),布尔与复制成本另计,不宣称常数时间验证。
同日复用核对:codebase memory 与开源源码
Section titled “同日复用核对:codebase memory 与开源源码”用户要求先确认项目与开源是否已经实现,避免重复建设。按授权关闭阻止 CLI 启动的八个旧 CBM 进程后, 使用 codebase-memory 0.10.8 的 list_projects、get_graph_schema、index_status、search_graph 和 query_graph。 索引 Branch HEAD 与当前 Git 同为 b06ae38a;报告 ready、17,476 节点、65,170 边,但有 47 个部分解析文件, 且忽略参考源码与 .deploy。未重建索引;图谱仅作定位,关键结论补读当前源码,未命中不作为全仓不存在的证明。
修正缺口描述:Aira 已有可执行工程关系的一部分,不能把第一步理解为从零建设关系、求值或约束系统。
| 已有能力 | 当前源码与实际接线 | 尚不等于什么 |
|---|---|---|
| 草图对象、关系和参数 | constrained-sketch-model-v0.1.ts 已定义稳定 ID、driving/reference、参数尺寸、等长/平行/垂直/相切等;CBM 确认 compileExactFeatureGraphV04 → solveConstrainedSketchV04 → materializeConstrainedSketchV04,worker 创建 PlaneGCS adapter |
支持域草图关系已进入执行。当前 profile 生成限定 XY 且要求零 DOF,不等于任意三维关系或公开孔阵列编辑已完成。 |
| 参数身份的共同投影 | CBM 的 exactProgramBindings 消费者包括程序创建/改参、图编译及 SDK contextNode,源码均确认 | 现有绑定函数应直接复用,不能为新功能另建名称解析器。当前绑定是程序参数,不包含持久驱动公式。 |
| 算术与差量修改 | CBM 确认 compileExactCadPlan → createParameterPatch → evaluateExactCadQuantity / createExactParameterValuePatchV04;期望和计划校验也复用求值函数 | current*1.2 是一次性求值后写常量;契约明确不支持其他参数名,不是可随依赖变化重算的持久公式。任意程序内部关系仍由 JS 执行。 |
| 依赖调度与历史 | Replicad exact-feature-graph.ts:391–415 调用 OCAF addDependency/start/isDirty,并复用已有 history/selection | 不新增调度器。该机制不自动知道任意 JS 内部的孔或变量依赖。 |
| 独立持久要求 | exact-feature-graph-session-v0.4.ts:376 起在共同几何求值中检查 solidAssertions/boundsAssertions,失败阻止候选成功 | 接入点已存在,应扩展受支持检查;目前未发现完整孔数/孔径/孔缘边距/贯穿检查路径。 |
原生板孔 authoring 文件还保存了参数化板轮廓与圆形刀具的既有结构;它的存在不等于当前 AI 工具已提供 完整阵列语义。AMIR Value 已有常量、参数引用、端口引用和列表,不应先创造另一套值引用或对象图。
开源源码核对(固定调查提交,不是引入依赖或宣布集成通过):
| 设施与版本 | 确认的具体能力 | 复用决定与差异 |
|---|---|---|
| 项目已锁定 OCCT V8_0_1 / b8f597c6,LGPL-2.1 + OCCT exception | TDataXtd_PatternStd::ComputeTrsfs 生成线性、矩形、圆形及镜像变换;NbTrsfs 对普通阵列排除原实例。TDataStd_Expression 保存表达式与变量引用;ExprIntrp_GenExp::Process 解析,Expr_GeneralExpression 提供 Evaluate、Simplified、Derivative | 最接近现有平台的补绑定候选。当前 YAML/包装源码未发现这些入口,未验证包体、异常、并发、资源或数值接受域。先确定真实消费者;固定解析公式不需强行引入通用表达式解析器。存储属性不是求解器,变换数组不是成品孔特征或独立几何验证。 |
| FreeCAD / c760d935,受查文件标注 LGPL-2.1-or-later | LinearPatternExtension 已有 Extent/Spacing 两种模式、输入只读状态切换、长度与间距同步、双方向及单实例处理;PropertyExpressionEngine 构建表达式依赖图、检测循环并订阅属性变化;Hole 有 ThroughAll 深度语义 | 驱动规则不是新发明,应复用成熟语义。源码依赖 App::DocumentObject、属性/文档事件及 Part/TopoShape,并非可直接调用的独立 WASM 库。此阶段不引入第二个文档运行时或移植整套 FreeCAD;若确需其独有算法,须在 Replicad 维护边界内单独确认最小依赖。 |
| CadQuery / a6bedc0d,Apache-2.0(以 LICENSE 为准,GitHub 元数据为 NOASSERTION) | Workplane.rarray 用间距、行列数和居中规则生成位置;hole 支持省略深度的贯穿构造,框架使用 Python/OCCT | 规则数组和短程序早已有实现,Aira 当前循环也已具备相同基础生成能力。不为此增加 Python CAD 运行时;rarray 本身不提供本目标的持久驱动规则与要求闭环。 |
| SolveSpace / 952c11c0,GPLv3 | 官方 exposed 库可嵌入约束实体与求解能力 | 当前需求已有 PlaneGCS;此轮没有证据支持换用第二套求解器。许可与平台接入需另行评估,不以“开源”推断可无条件嵌入。 |
原始源码链接: OCCT 阵列、 OCCT 表达式存储、 OCCT 表达式算法、 FreeCAD 阵列、 FreeCAD 表达式依赖、 FreeCAD 孔、 CadQuery API 源码、 CadQuery 许可、 SolveSpace 库说明。
本轮结论:优先补齐现有能力的工程语义与共同接口接线;不另建图、求解器、缓存、参数解析或事务系统。 尚需 Aira 定义的是孔特征/阵列驱动规则到已有身份与执行的绑定,以及独立几何检查的明确接受域。 尚不能把缺口全部叫作“薄适配”:实例身份演化、原程序关系显式化和贯穿验证仍有真实工作。 下一步先对 OCCT 上述原生设施确定“直接复用/补绑定/无需引入”的具体边界,再冻结最小契约。 本轮没有新增产品代码、依赖、测试框架或付费调用,没有进行跨项目运行时性能比较。