Files
cadSet/docs/CADSET_PROJECT_GUIDE.zh-CN.md
T

28 KiB
Raw Blame History

CadSet 项目完整指南

面向自然语言、图文和 STEP 输入的参数化 CAD 生成、重建、修改与经验蒸馏系统。

1. 项目信息

本文档面向三类读者:

  1. 想直接启动前端并生成 CAD 的使用者。
  2. 想批量蒸馏 STEP、进行参数化重建实验的研究人员。
  3. 想扩展 DesignIR、CAD Router、建模后端或验收系统的开发者。

2. CadSet 解决什么问题

CadSet 的目标不是只生成一个“看起来像”的网格,也不是把上传的 STEP 直接包装后宣称完成重建。系统希望得到同时满足以下条件的 CAD 模型:

  • 几何能够导出为标准 STEP。
  • 模型有明确的参数、基准、约束和特征顺序。
  • 后续可以修改孔径、厚度、孔距、数量等参数。
  • 修改后仍能稳定重建,而不是破坏模型。
  • 上传 STEP 的重建过程不依赖原 STEP 本体。
  • 从大量案例中学到的是通用建模方法,而不是某个零件的尺寸答案。

当前产品主线包含三种工作流:

  1. 自然语言生成:根据文字描述生成可编辑的参数化零件。
  2. 图文生成与修改:结合参考图片和文字生成或修改零件。
  3. 上传 STEP 重建与修改:把 STEP 作为教师真值,转换成自有 DesignIR,再独立重建和参数化修改。

CadSet 当前优先面向规则机械零件,例如:

  • 法兰、端盖、轴和轴套;
  • 板件、支架、加强筋结构;
  • 带孔块、孔阵列、槽和凸台;
  • 基础壳体、连接件;
  • 齿轮、齿条、轴承和部分减速器结构。

复杂自由曲面、多轨扫掠、高阶连续过渡面、缺陷 B-Rep 和大型装配仍属于 需要继续扩展的能力边界。


3. 核心设计思想

3.1 STEP 是几何真值,不是可编辑设计历史

STEP 通常能够保存精确 B-Rep 几何、拓扑和装配信息,但并不可靠地保存原 CAD 软件中的草图、特征树、尺寸名称和设计意图。

因此,从 STEP 中无法唯一恢复原作者的真实建模历史。例如同一个法兰既可 以通过“圆柱拉伸后打孔”得到,也可以通过“截面旋转后阵列切除”得到。

CadSet 不声称恢复唯一的原始历史。它做的是:

  1. 从 STEP 提取确定性的几何证据。
  2. 推断一个合理、稳定、可编辑的参数化设计方案。
  3. 使用自有 DesignIR 表达这个方案。
  4. 在没有源 STEP 的环境中重新生成 STEP。
  5. 独立比较源 STEP 与重建 STEP。
  6. 扰动参数,验证模型是否真正可修改。

3.2 DesignIR 2.0 是统一设计源

DesignIR 是 CadSet 自有的、后端无关的参数化设计描述。它保存设计逻辑, 而不是嵌入原始 B-Rep 或完整网格。

一个 DesignIR 通常包含:

字段 作用
coordinate_system 零件坐标系和轴方向。
datums 中心点、主轴、安装面等设计基准。
parameters 尺寸、角度、数量和比例参数。
expressions 参数之间的派生关系。
sketches 草图或轮廓语义。
constraints 同心、对称、等间距等约束。
features 拉伸、孔、凸台、阵列等有序特征。
patterns 极坐标或线性重复关系。
attachments 特征与主体、基准或安装面的连接关系。
construction_stages 推荐的构造阶段和重建顺序。
edit_interface 对外开放的可编辑参数与需保持的接口。
validation_contract 几何不变量和参数扰动测试。

完整 Schema:

designir-pipeline/contracts/designir-2.0.schema.json

可运行示例:

designir-pipeline/examples/raised_hub_flange.designir.json

3.3 源 STEP 必须与重建环境隔离

CadSet 明确禁止以下“伪重建”方式:

  • 在生成器中调用 import_step(source.step)。
  • 把原始 B-Rep、STEP 文本或完整三角网格塞进 JSON。
  • 把源 STEP 当作基础特征,再在上面做布尔修改。
  • 保存源模型的面 ID、边 ID 或运行时拓扑引用。
  • 重建时从隐藏路径重新读取教师 STEP。

最直接的防作弊检查是:

从重建运行环境中移走源 STEP,仅依靠 DesignIR 和编译器,仍然能够生成 完整模型。


4. 系统架构

flowchart LR
    U["文字 / 图片 / STEP"] --> UI["CAD Agent Studio"]
    UI --> LLM["多模态或文本模型"]
    LLM --> IR["DesignIR 2.0"]
    IR --> R["CAD Router"]
    R --> B["Build123d"]
    R --> S["SimpleCADAPI"]
    B --> STEP["重建 STEP"]
    S --> STEP
    STEP --> V["3D Viewer"]
    STEP --> A["独立验收"]
    A --> F["验收报告与反馈"]

对于上传 STEP,链路进一步分成教师侧和重建侧:

flowchart TD
    T["源 STEP(教师真值)"] --> E["确定性几何证据提取"]
    E --> RA["Agent A:重建"]
    X["已晋升通用经验"] --> RA
    RA --> D["自有 DesignIR"]
    D --> C["隔离编译器"]
    C --> R["重建 STEP"]
    T --> AB["Agent B:独立验收"]
    D --> AB
    R --> AB
    AB --> P["确定性晋升器"]
    P --> X

关键点是:Agent A 和隔离编译器不能读取源 STEP;Agent B 可以读取源 STEP, 但不能直接发布经验。


5. 仓库结构

CadSet/
├── cad-agent-studio/     Web 前端、对话、上传、任务和 3D 预览
├── designir-pipeline/    DesignIR、双 Agent、重建、验收和经验蒸馏
├── text-to-cad/          CAD Router、Build123d CAD 能力和 Viewer 运行时
├── SimpleCADAPI/         第二建模后端和可重放操作图
├── docs/                 项目级详细文档
├── llm.config.yaml       共享 LLM 配置
├── README.md             项目概览
├── .gitignore            本地数据、依赖和生成物排除规则
└── .gitattributes        文本换行和二进制格式属性

5.1 CAD Agent Studio

cad-agent-studio/

这是面向最终使用者的 Next.js 前端:

  • 左侧:对话、图片/STEP 上传、模型供应商和模型选择。
  • 右侧:STEP 三维预览、选择、剖切、显示和编辑辅助工具。
  • 服务端:读取模型配置、调用 LLM、生成 DesignIR、调用 CAD Router 和编译器。
  • 任务数据:默认保存在 cad-agent-studio/data/tasks/<taskId>/。

5.2 DesignIR Pipeline

designir-pipeline/

负责:

  • DesignIR Schema 和验证;
  • 防作弊检查;
  • Build123d / SimpleCADAPI 编译适配;
  • 教师隔离重建;
  • 几何与参数可编辑性验收;
  • STEP 批量证据提取;
  • 双 Agent 合同;
  • 经验候选验证和发布。

5.3 text-to-cad

text-to-cad/

负责:

  • CAD Router;
  • 通用 STEP-first 机械建模;
  • Build123d 运行时;
  • 几何检查和可视化;
  • CAD Viewer 相关能力。

5.4 SimpleCADAPI

SimpleCADAPI/

这是基于 OCP/OpenCascade 的第二建模后端,适合:

  • 可重放操作图;
  • 参数表达式;
  • 语义标签和拓扑查询;
  • 齿轮、齿条、轴承等专用机械结构;
  • STEP、STL 和 FreeCAD 工作流。

6. 环境准备

6.1 推荐环境

  • macOS 或 Linux;
  • Node.js 22 或更高版本;
  • Python 3.12;
  • Git;
  • 能够运行 OpenCascade / Build123d 的本地环境;
  • 支持 WebGL 的现代浏览器。

6.2 克隆项目

git clone https://gitea.robotquan.com/xuyongjie/cadSet.git
cd cadSet
git switch codex/remove-cadam

如果已经存在本地仓库:

git fetch origin
git switch codex/remove-cadam
git pull --ff-only origin codex/remove-cadam

6.3 Python 环境

前端默认查找:

text-to-cad/.venv/bin/python

如果仓库中没有可用虚拟环境,可创建:

python3.12 -m venv text-to-cad/.venv
source text-to-cad/.venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r text-to-cad/requirements-dev.txt
python -m pip install -e SimpleCADAPI

也可以显式指定其他 Python:

export CAD_PYTHON=/absolute/path/to/python
export CAD_EXPERIENCE_PYTHON=/absolute/path/to/python

6.4 前端依赖

cd cad-agent-studio
npm install

依赖目录 node_modules/ 不进入 Git。


7. LLM 配置

默认配置文件位于仓库根目录:

llm.config.yaml

前端按以下顺序寻找配置:

  1. CAD_AGENT_STUDIO_CONFIG 指定的绝对路径;
  2. 仓库根目录 llm.config.yaml;
  3. cad-agent-studio/config/llm.config.yaml;
  4. cad-agent-studio/config/llm.config.yaml.example。

推荐使用环境变量保存密钥:

defaultProvider: deepseek
defaultModel: deepseek:deepseek-chat

providers:
  deepseek:
    type: openai-compatible
    apiKeyEnv: DEEPSEEK_API_KEY
    baseURL: https://api.deepseek.com
    models:
      default: deepseek-chat
      reasoner: deepseek-reasoner

uploads:
  maxImageMB: 20
  maxStepMB: 200
  maxOtherMB: 50
  allowed:
    - image/png
    - image/jpeg
    - image/webp
    - .step
    - .stp

cad:
  taskRoot: ./data/tasks
  viewer:
    mode: iframe
    allowedOrigins:
      - http://127.0.0.1
      - http://localhost

然后设置密钥:

export DEEPSEEK_API_KEY="your-key"

配置也支持直接写 apiKey,但不要把真实密钥复制到公开文档、日志或公开仓库。 前端公开配置接口不会返回密钥和环境变量名称。


8. 启动项目

cd cad-agent-studio
npm run dev -- -H 127.0.0.1 -p 53821

浏览器打开:

http://127.0.0.1:53821

生产构建:

npm run build
npm run start -- -H 127.0.0.1 -p 53821

如果前端不在 CadSet 根目录的直接子目录,可以指定引擎根目录:

export CAD_ENGINE_ROOT=/absolute/path/to/CadSet

9. 如何使用

9.1 自然语言生成零件

在对话框中尽量提供:

  • 零件类型;
  • 关键尺寸和单位;
  • 孔、槽、凸台、圆角等特征;
  • 阵列数量和分布方式;
  • 哪些尺寸需要后续编辑;
  • 是否有必须保持的安装界面。

示例:

生成一个半径 50 mm、厚度 4 mm 的法兰盘。
中心孔直径 20 mm,中心孔外有一圈高 1 mm 的凸台。
在直径 80 mm 的分度圆上均匀分布 8 个 M3 间隙孔。
外径、厚度、孔径、孔数和分度圆直径都需要可编辑。

系统会:

  1. 让模型生成完整 DesignIR。
  2. 运行 CAD Router 选择后端。
  3. 执行 DesignIR Schema 与防作弊验证。
  4. 在隔离目录中生成 STEP。
  5. 生成 Viewer 所需预览数据。
  6. 在任务目录保存 DesignIR、STEP 和任务清单。

9.2 根据图片和文字生成

上传零件图片后,应补充图片无法可靠表达的信息:

  • 实际尺寸;
  • 对称关系;
  • 被遮挡特征;
  • 孔是否贯穿;
  • 板厚;
  • 圆角、倒角或拔模角;
  • 图片是透视图、正视图还是技术图。

图像能力依赖所选模型。如果使用纯文本模型,例如不支持视觉输入的模型, 它不能直接理解图片。此时应切换到支持视觉的 OpenAI-compatible 模型,或 先把图纸尺寸和结构转成文字。

9.3 上传 STEP 进行参数化重建

在前端上传 .step 或 .stp 后,说明希望重建和开放的参数,例如:

重建这个 STEP。识别主体、孔、槽、凸台和阵列关系。
优先开放整体长度、板厚、孔径、孔距和孔数量。
重建结果不能依赖原 STEP,并对这些参数分别做扰动测试。

处理原则:

  1. 上传 STEP 只作为教师和验收真值。
  2. 系统先读取确定性几何证据。
  3. 模型根据证据生成 DesignIR。
  4. 重建编译器不能访问教师 STEP。
  5. Agent B 比较教师 STEP 与重建 STEP。
  6. 参数扰动测试验证修改能力。

STEP 没有完整建模历史,因此复杂零件不保证一次得到理想的参数化分解。 系统应当对无法表达的特征明确输出 unsupported_feature_vocabulary,而不是偷偷复用原几何。

9.4 修改已生成模型

选中已有任务后,可以使用自然语言修改:

把 plate_thickness 从 4 mm 改成 6 mm,其他尺寸不变。

或者:

孔数改为 10,保持分度圆直径和中心孔不变。

修改应优先作用于任务中记录的 *.designir.json。系统会为修改请求创建 revision,保存 edit-request.json,然后重新生成 STEP 和 Viewer 资源。

不要直接修改最终 STEP 作为长期设计源,否则参数语义和编辑接口会丢失。


10. CAD Router 的工作方式

CAD Router 根据任务特征选择后端:

Build123d

适合:

  • 通用机械零件;
  • 法兰、支架、轴、壳体和连接件;
  • 一般机加工特征;
  • 几何测量和验证;
  • 自定义特征组合。

SimpleCADAPI

适合:

  • 齿轮、齿条、内齿圈;
  • 轴承、摆线结构和部分减速器;
  • 需要可重放操作图的任务;
  • 需要语义标签和拓扑查询的任务。

查看路由决策:

text-to-cad/.venv/bin/python \
  text-to-cad/skills/cad-router/scripts/route.py \
  "生成一个带 8 个安装孔的法兰" \
  --explain

强制指定后端:

text-to-cad/.venv/bin/python \
  text-to-cad/skills/cad-router/scripts/route.py \
  "生成一个参数化齿轮" \
  --backend simplecadapi \
  --explain

路由器可以读取已发布经验库:

designir-pipeline/output/library.json

它不能读取 designir-pipeline/input/ 或 designir-pipeline/runs/ 中的私有 教师数据和蒸馏过程。


11. DesignIR 命令行

以下命令均在仓库根目录执行。

11.1 验证 DesignIR

text-to-cad/.venv/bin/python \
  designir-pipeline/scripts/designir_pipeline.py validate \
  designir-pipeline/examples/raised_hub_flange.designir.json

11.2 防作弊检查

text-to-cad/.venv/bin/python \
  designir-pipeline/scripts/designir_pipeline.py anti-cheat \
  designir-pipeline/examples/raised_hub_flange.designir.json

如果同时有后端生成器:

text-to-cad/.venv/bin/python \
  designir-pipeline/scripts/designir_pipeline.py anti-cheat \
  part.designir.json \
  --generator generator.py

11.3 编译 STEP

text-to-cad/.venv/bin/python \
  designir-pipeline/scripts/designir_pipeline.py compile \
  designir-pipeline/examples/raised_hub_flange.designir.json \
  --output /tmp/raised_hub_flange.step \
  --backend build123d

11.4 隔离重建

text-to-cad/.venv/bin/python \
  designir-pipeline/scripts/designir_pipeline.py isolated-rebuild \
  designir-pipeline/examples/raised_hub_flange.designir.json \
  --output /tmp/raised_hub_flange.step \
  --backend simplecadapi

SimpleCADAPI 后端还会在 STEP 旁生成可重放的 *.simplecad.model.json。

11.5 独立验收

text-to-cad/.venv/bin/python \
  designir-pipeline/scripts/designir_pipeline.py accept \
  --teacher /path/to/teacher.step \
  --designir /path/to/part.designir.json \
  --rebuilt /path/to/rebuilt.step \
  --report /path/to/acceptance-report.json

12. STEP 蒸馏系统

12.1 简化后的数据目录

designir-pipeline/
├── input/                 原始 STEP/STP
├── runs/                  全部蒸馏过程
└── output/
    └── library.json       最终发布经验库

Git 规则:

数据 是否提交
input/*.step、input/*.stp 否
提取的私有几何证据 否
Agent 草稿和中间 DesignIR 否
重建 STEP 否
验收报告和失败记录 否
output/library.json 是
Schema、脚本、Agent 合同和测试 是

runs/ 中的目录由程序按需创建:

runs/
├── evidence/      STEP 提取的私有证据
├── designir/      Agent A 输出
├── rebuilt/       隔离重建 STEP
├── acceptance/    Agent B 验收报告
├── review/        语义批次和 LLM 草稿
└── quarantine/    失败和能力缺口

12.2 放入蒸馏数据

把所有目标 STEP/STP 直接放入:

designir-pipeline/input/

无需再创建 teacher/inbox 等多层目录。

12.3 批量提取证据

designir-pipeline/scripts/cad-experience extract-folder

默认读取:

designir-pipeline/input/

默认写入:

designir-pipeline/runs/evidence/

提取器会根据内容哈希跳过已处理的重复文件。私有证据可以包含精确尺寸、 坐标、曲面类型、轴线、包围盒、体积和拓扑统计,但这些内容不能直接发布。

12.4 准备语义蒸馏批次

designir-pipeline/scripts/cad-experience prepare

输出:

designir-pipeline/runs/review/semantic-batch.json

这个批次会移除不适合公开的实例信息,并保留:

  • 零件家族;
  • 参数角色;
  • 基准角色;
  • 特征角色;
  • 关系角色;
  • 特征数量等级;
  • 推荐构造阶段;
  • 无量纲比例观察;
  • 验证目标;
  • 失败和修复候选。

12.5 Agent 进行语义归纳

调用 cad-experience-builder,让当前大模型完整阅读 semantic-batch.json,输出:

designir-pipeline/runs/review/experience-draft.json

大模型应该归纳:

  • 通用特征组合;
  • 约束和设计不变量;
  • 参数角色及依赖关系;
  • 家族级 reconstruction grammar;
  • 构造顺序;
  • 验证方法;
  • 可复用的失败修复策略。

它不应该复制:

  • 某个零件的绝对尺寸;
  • 源文件路径和哈希;
  • 绝对坐标;
  • 面、边或拓扑 ID;
  • 完整实例参数字典;
  • 教师几何。

12.6 确定性验证与发布

designir-pipeline/scripts/cad-experience publish \
  --draft designir-pipeline/runs/review/experience-draft.json

发布器会重新核对私有语料中的支持数量和置信度,拒绝实例泄漏,只把通过 验证的内容写入:

designir-pipeline/output/library.json

审计:

designir-pipeline/scripts/cad-experience audit \
  designir-pipeline/output/library.json

查询经验:

designir-pipeline/scripts/cad-experience query \
  designir-pipeline/output/library.json \
  --family flanged_hub_adapter \
  --features base_flange,hollow_sleeve,counterbore

直接绕过 LLM 语义归纳进行纯统计 distill 会被阻止。原因是简单共现统计 难以可靠地区分“设计方法”和“某批数据中的偶然尺寸模式”。


13. 双 Agent 的职责

Agent A:Reconstruction Agent

输入:

  • runs/evidence/ 中的单案例私有证据;
  • 用户修改目标;
  • 已晋升的通用经验;
  • DesignIR Schema 和支持的操作词汇。

输出:

  • runs/designir/*.designir.json;
  • 需要隔离编译的重建请求;
  • 不确定项和缺失能力。

禁止:

  • 读取源 STEP;
  • 导入 B-Rep;
  • 使用完整网格代替参数化模型;
  • 保存源拓扑引用;
  • 直接发布经验。

Agent B:Acceptance Agent

输入:

  • input/ 中的教师 STEP;
  • Agent A 生成的 DesignIR;
  • runs/rebuilt/ 中的重建 STEP;
  • 修改测试合同。

输出:

  • runs/acceptance/ 中的机器可读报告;
  • pass、fail 或 quarantine 建议。

Agent B 检查:

  • 实体和拓扑数量;
  • 包围盒;
  • 体积和质心;
  • 对称差体积;
  • 关键解析特征;
  • 参数扰动成功率;
  • 非目标区域保持情况;
  • 自交、零厚度、非流形和不稳定重建。

Agent B 同样不能直接把经验写入正式库。最终发布由确定性程序执行。

纯文本模型能否完成蒸馏和验收

可以完成大量工作,但存在边界:

  • STEP 几何证据由程序提取后,纯文本模型可以阅读 JSON、归纳特征和生成 DesignIR。
  • 数值验收由几何程序完成,不要求模型直接看图。
  • 纯文本模型可以根据验收 JSON 分析失败和提出修复。
  • 对视觉外观、复杂曲面、特征语义歧义和图纸理解,多模态模型通常更强。

因此 DeepSeek 等纯文本模型可以参与批量蒸馏闭环,但不应让模型自己“凭 感觉”验收。验收真值必须来自确定性几何比较;关键失败案例可再交给多模态 模型或人工复核。


14. 经验为什么会随着数据增加而变好

蒸馏数据量增加后,系统可能提升:

  • 零件家族识别;
  • 特征分解;
  • 主参数发现;
  • 参数依赖推断;
  • 基准和约束识别;
  • 构造顺序选择;
  • 修改接口设计;
  • 常见失败修复;
  • 验收目标选择。

但数据量不是唯一因素。能力增长受三个条件共同限制:

  1. DesignIR 能否表达:没有 sweep、loft、shell 或复杂孔词汇时,再多 数据也无法独立重建这类结构。
  2. 证据质量是否足够:提取器必须提供可用于推断的曲面、轴线、关系和 截面证据。
  3. 验收是否严格:如果只比较截图或包围盒,错误经验也可能被晋升。

经验晋升必须同时满足:

几何接近
AND 特征语义合理
AND 参数可编辑
AND 修改后稳定
AND 多个独立案例重复支持

当前默认晋升策略至少要求 3 个独立案例状态通过;经验归纳命令默认使用更 保守的 min_support=20 和 min_confidence=0.8。两者用途不同:

  • minimum_independent_cases=3 是完整重建和回放状态的最低发布门槛。
  • min_support=20 是从批量语料归纳通用经验时的默认统计支持度。

策略文件:

designir-pipeline/config/promotion-policy.json


15. 验收指标

不要把所有结果压缩成一个不透明的“相似度分数”。建议分别保存:

几何一致性

  • 相对体积误差;
  • 包围盒各轴误差;
  • 质心误差;
  • 对称差体积比例;
  • 双向表面距离;
  • 关键截面误差。

特征语义

  • 特征召回率;
  • 特征准确率;
  • 孔、槽、筋和凸台数量;
  • 轴线、半径、同心和阵列关系;
  • 是否生成多余特征。

参数化能力

  • 关键尺寸参数覆盖率;
  • 参数扰动成功率;
  • 修改目标准确率;
  • 非目标区域保持率;
  • 约束保持率;
  • 编辑接口稳定性。

几何有效性

  • 是否为闭合实体;
  • 是否为空;
  • 是否自交;
  • 是否出现零厚度;
  • 是否出现非流形几何;
  • 重复执行是否确定。

当前策略中的主要默认阈值包括:

  • 相对体积误差不超过 1%;
  • 质心误差不超过 0.1 mm;
  • 包围盒各轴误差不超过 0.1 mm;
  • 对称差比例不超过 2%;
  • 参数扰动成功率要求 100%。

这些阈值是当前工程默认值,不是所有零件和制造场景的通用标准。


16. 任务产物

前端任务默认保存在:

cad-agent-studio/data/tasks/<taskId>/

典型产物包括:

<taskId>/
├── cad-task.json
├── model.designir.json
├── model.step
├── model.simplecad.model.json    可选
├── acceptance-report.json       STEP 重建时可选
├── revisions/
│   └── <revisionId>/
│       └── edit-request.json
└── Viewer 预览资源

职责划分:

  • model.designir.json:可编辑设计源。
  • model.step:主要几何交换结果。
  • cad-task.json:路由、后端、产物和验证记录。
  • *.simplecad.model.json:SimpleCADAPI 的可重放操作图。
  • acceptance-report.json:教师与重建件的独立验收结果。
  • revisions/:后续修改请求记录。

cad-agent-studio/data/ 是本地运行数据,不提交 Git。


17. 测试与质量检查

前端测试

cd cad-agent-studio
npm test
npm run build

DesignIR、经验库和 Router 测试

在仓库根目录执行:

text-to-cad/.venv/bin/python -m unittest \
  designir-pipeline/tests/test_designir_pipeline.py \
  designir-pipeline/tests/test_experience_library.py \
  text-to-cad/tests/python/skills/cad-router/test_route.py

经验库审计

designir-pipeline/scripts/cad-experience audit \
  designir-pipeline/output/library.json

Git 数据边界检查

确认没有 STEP 输入和蒸馏过程被跟踪:

git ls-files designir-pipeline/input \
  designir-pipeline/runs \
  designir-pipeline/output

正常情况下只应看到:

designir-pipeline/input/.gitkeep
designir-pipeline/output/library.json

18. 常见问题

前端提示找不到 Python

确认以下文件存在并可执行:

text-to-cad/.venv/bin/python

或者设置:

export CAD_PYTHON=/absolute/path/to/python

前端提示找不到 LLM 配置

确认仓库根目录存在:

llm.config.yaml

或者:

export CAD_AGENT_STUDIO_CONFIG=/absolute/path/to/llm.config.yaml

模型可以对话但不能生成 STEP

检查:

  1. Python 环境是否包含 Build123d/OCP 或 SimpleCADAPI。
  2. CAD_ENGINE_ROOT 是否指向 CadSet 根目录。
  3. DesignIR 是否通过 Schema 验证。
  4. DesignIR 是否使用了当前不支持的 operation。
  5. Router 选择的后端是否在当前 Python 环境可用。

上传图片后模型仍说看不到

当前所选模型可能不支持视觉输入。更换支持图片的模型,或把图片中的结构 和尺寸转换成文字描述。

STEP 重建几何接近但不好修改

这通常表示参数化分解不合理,例如:

  • 所有尺寸都被写成固定常量;
  • 孔和阵列没有独立参数;
  • 基准选择不稳定;
  • 特征顺序导致参数变化后布尔失败;
  • 修改合同没有覆盖关键参数。

应优先改进 DesignIR 和特征分解,而不是放宽几何验收。

为什么不直接修改上传的 STEP

直接在源 STEP 上做布尔操作可以快速得到几何结果,但无法建立稳定、通用 的参数化设计能力,也不能随着蒸馏数据增加而学习更好的重建方法。CadSet 把源 STEP 限定为教师和验收真值,是为了让系统真正学会独立重建。

为什么过程数据不提交 Git

原始 STEP、证据 JSON、重建件和验收报告会快速增长,而且可能包含私有 实例尺寸。仓库只提交经过净化和验证的经验库结果,以及复现管线所需的代码、 Schema、合同和测试。


19. 扩展项目

新增 DesignIR 操作

至少需要同步更新:

  1. designir-2.0.schema.json 的 operation 词汇;
  2. Build123d 编译适配;
  3. SimpleCADAPI 编译适配,或明确标记仅支持某后端;
  4. anti-cheat 检查;
  5. 参数扰动和几何验收;
  6. 示例与测试;
  7. CAD Router 能力表。

新增后端

新后端应满足:

  • 接收显式 DesignIR 和输出路径;
  • 不隐式扫描整个工作区;
  • 不读取教师 STEP;
  • 输出标准 STEP;
  • 保留可编辑的后端源或操作图;
  • 返回明确的成功/失败状态;
  • 记录后端名称和版本;
  • 接入统一验收合同。

扩展蒸馏能力

推荐按失败聚类驱动扩展:

  1. 收集 runs/quarantine/ 中的失败。
  2. 区分证据不足、词汇不足、推断错误和编译错误。
  3. 对高频缺口新增 DesignIR 操作或几何证据。
  4. 加入针对性重建和参数扰动测试。
  5. 在 held-out STEP 上验证。
  6. 通过后再允许经验晋升。

20. 当前边界与研发建议

CadSet 当前已经形成了完整的工程骨架:

  • 独立 Web 前端;
  • 统一 DesignIR;
  • 双建模后端;
  • STEP 隔离重建;
  • 双 Agent 职责边界;
  • 参数扰动验收;
  • 批量经验蒸馏;
  • 防实例泄漏发布器;
  • 运行数据与 Git 结果隔离。

下一阶段最值得投入的方向:

  1. 扩展 DesignIR 的扫掠、放样、薄壁、倒角、圆角和复合孔词汇。
  2. 增强 STEP 解析中的特征关系、关键截面和对称性识别。
  3. 建立按零件家族分层的数据集和 held-out 测试集。
  4. 增加表面双向距离和局部非目标区域保持指标。
  5. 将失败案例自动聚类为“证据不足、词汇不足、编译失败、参数失稳”。
  6. 为大规模数据增加任务队列、断点续跑、并发控制和状态看板。
  7. 对高价值复杂案例加入多模态复核,但继续以确定性几何验收为最终依据。

CadSet 的核心原则可以概括为:

STEP 只做教师,DesignIR 才是设计源;模型必须独立重建,经验必须经过 多案例和修改测试验证后才能进入生产。