15 KiB
15 KiB
通用多视图到家具CAD算法升级(候选,未上线)
为什么停止继续堆中文名称修正规则
2026-09-07同一批原图的v78隔离试验说明,仅追加“先识别结构”提示仍不够:
- 书架专项读图仍把侧板认成连续整板;总体宽度复读更正后,基于旧宽度算出的板件没有联动重算。
- 中文尺寸证据“总宽减去两侧板厚”被旧规范化器同时当成宽度和厚度。
- 餐柜中的“抽屉中竖板、抽屉下横档”又被宽泛的中文抽屉判断当成面板,真正面板可能被数量截断器丢掉。
这些不是两个SKU的例外,而是数据表示缺陷:自由文本承担了几何语义、结构身份和公式依赖,多个后处理器反复猜测并覆盖信息。不能继续仅按案例名加条件。
新的唯一结构来源
structure_graph.py候选编译器使用明确的数据:
- 观察证据:原图ID、局部区域、观察文字、来源类型、置信度。来源必须与本轮真实原图集合一致;用户确认只能来自会话事实库,模型无权自行声明。
- 参数依赖图:尺寸类型、单位、来源、证据;派生值保存算式,不保存一句“减去板厚”作为可执行规则。支持依赖重算、量纲检查、成环检查。未知值不补成默认18mm。
- 零件定义:稳定ID、局部尺寸、几何类型。中文名仅用于显示,不决定轴向和结构身份。
- 物理实例:每件板的独立ID、所属总成和明确轴映射。每个总成先声明由尺寸证据或派生参数定义的局部
bounds_mm;AI不再直接输出XYZ,而是给出相对所属总成、产品外形或其他实例的min/center/max锚点约束,由编译器求解坐标。BOM数量从实例生成,不由模型再给一套可独立漂移的数量。 - 连接关系:同一总成内固定/支承接触从最终几何的正面积相交自动推导,不再让AI猜面。抽屉、门等跨总成的滑动/铰接关系显式声明,并由后续五金模板复核。
- 几何反馈:越界、重复实体、无实例部件、数量冲突、连接错位产生可定位到图谱路径的错误,交还AI修改;不能直接翻译成让用户修图的问卷。
同一图谱编译结果生成CAD草案和BOM。候选manufacturing_oracle.py已把编译后的真实接触面转换为孔、槽、焊缝和唯一五金实例;孔槽、五金模板、成品下料尺寸与后续工时台账都以同一connection_id、instance_id和hardware_instance_id追溯,不再按中文名称独立猜数量。
当前已实现的边界
- 已有标准库实现的参数解析器、量纲校验、实例/BOM生成、固定接触校验、包围尺寸校验、重复实体拦截。
- 已有独立试验脚本
probe_structure_graph.py:原始四图→AI图谱→编译→实际STEP/GLB/预览→AI对照原图复核→最多两轮反馈修正。使用隔离状态目录,不碰真实用户会话,也不读公司BOM。 - 随机尺寸/板厚依赖重算、单位等价、中文名称不改变几何等变换测试已加入。它们只验证编译规则,不证明AI已正确识图。
- 当前只支持正交box板件;已增加AABB实体穿插、总成局部边界和滑动总成非运动轴范围检查。候选制造层已支持人造板确认螺钉、层板托、捕获槽、木螺钉、混合材料螺栓和金属焊缝的基础几何驱动,但供应商专用孔模板、铰链/滑轨运动包络、曲面、金属型材、任意角度和连续运动扫掠碰撞仍未迁移。对不支持的形状或连接报错,不偷偷换成长方体或虚构孔位。
- 背板和抽屉底板的捕获槽同时生成承载件槽体和嵌入板下料余量;制造BOM采用“净接触几何+两端入槽深度”,CAD用调整后的板件真实伸入槽内,再由B-rep布尔干涉检查验证,不再出现“槽切了但板停在槽口”的假连接。
- 通用CAD构建链在单体闭合性检查后增加零件两两正体积干涉门,未通过时禁止预览和成功状态。服务器现有检查器使用
--format json,不能使用不存在的--json参数。 - 所有输出均为drawing_draft;编译通过也必须原图视觉复核和制造验证,不能直接下料。
- 当前尚未替换生产Chat API主链路,也没有达到公司成本误差小于5%的验收目标。
v85隔离内核证据(2026-09-07)
- 本地完整成本/图谱/制造回归172项通过(253.707秒);加入捕获槽成品尺寸和证据文件语义角色后,图谱、制造与CAD管线39项专项回归通过。
- 服务器
/tmp隔离运行确认螺钉样例:3个实体、12个真实孔、6个唯一连接件,STEP为101927字节;切孔前后面数18→36、总体积21340800→21335663.496mm³,减少量与孔模板理论切削体积一致;3对实体B-rep干涉检查0冲突。 - 捕获槽样例:两侧各6mm入槽,抽屉底板成品尺寸由764×400×18变为776×400×18mm,CAD为3个实体、26个面、总体积21338400mm³;2个槽的0.5mm装配余量真实保留,3对实体0冲突。
- 包装爆炸模型用当前11个包装节点实测55对候选,其中4对进入布尔检查、51对由包围盒排除、0冲突,说明新增干涉门没有误伤当前包装模型。
- 上述只是候选文件和服务器临时目录的真实几何证据;没有覆盖生产文件、没有重启服务、没有完成原图识别或成本5%盲测。
v87 GenCAD方法落地与隔离失败证据(2026-09-07)
- MIT GenCAD 与同名
gurul/gencad的源码级审计见GENCAD_INTEGRATION_EVALUATION.md。本项目只吸收多候选、几何执行、截面/多视图复核和有界修复方法;不把任一仓库直接暴露给 Chat API,也不把单零件生成器当作家具装配真值。 - 编译器允许实例把锚点写成“自身所属总成的稳定 ID”,内部仍归一为总成局部坐标;引用其他总成不会被静默接受。运动连接误用零件实例时返回实例→所属总成映射及独立运动总成修复要求。
- CAD 内核碰撞与非法 JSON Patch 已转换为稳定实例 ID、重叠体积/范围和合法替换路径,失败不会吞成笼统异常,也不会无限重试。
- 本地结构图谱、制造层与 CAD 管线专项回归 44 项通过;最终候选代码的成本、结构图谱、制造层与 CAD 管线完整回归 180 项通过(253.928 秒)。这些测试证明门禁和既有计算未回退,不代表真实读图已经验收通过。
- 服务器
/tmp/dalongxia-cad-v85-eI8HeF/probe-sideboard4隔离试验真实读取 4 张原图,独立固定 top=1、bottom=1、side=2、door=2、shelf=1、leg=4 及 1200×400×800mm 外形,且未读取公司 BOM。三轮图谱 SHA 均变化,证明模型确实处理了反馈;但编译问题为 60→55→59,B-rep 冲突为 3→6→5,最终graph_and_cad_kernel_not_passed。 - 本次失败的主要新证据是板件局部轴/总成边界修复仍不稳定:门板的宽高厚轴被错置,背板沿深度轴穿越柜体,第三轮又给多块板统一加入 20mm 正偏移。门、背板与侧板因此超界并发生正体积相交。门禁已正确拒绝交付,但 GenCAD 风格的自由补丁尚不能收敛为制造模型。
- 上述隔离进程已结束,未覆盖生产文件、未重启服务、未改变真实用户会话;因此当前仍是候选能力,不能标记上线或完成成本误差≤5%目标。
下一阶段交付门禁
- 给尺寸和接缝定位增加局部证据复读,AI必须引用对应区域,避免整图一句“连续无缝”高置信覆盖局部事实。
- 默认由AI完成低置信复读:先逐张读图、再独立读尺寸箭头、再用CAD正面/侧面/俯视/等轴四视图回看原图。用户确认只保留给完全不可见且成本敏感的残余冲突,不得把每个置信度不足字段做成问卷。
- 图谱修改应局部、版本化;每轮保存图谱哈希、修改路径、编译反馈、渲染及视觉差异。错误相同且两轮未改善时停止自动循环,只询问真正缺少的关键事实,不重复整页。
- 把材质、板厚等交互转成参数变更,完整重算图谱,再编译CAD、孔槽、五金和成本。不能在图谱编译后再调用旧名称启发式修改几何。
- 扩充不同结构的留出集:开放架、抽屉柜、移门柜、桌架组合、板金属组合等;变更板厚、整体尺寸、抽屉排列、层板数量都做一致性检验。两款用户案例不等于覆盖所有家具。
- 冻结图谱/CAD/BOM和报价后,再读取公司同款成本评价。公司数据用于基准单价和事后偏差审计,不给视觉模型提供目标BOM。
- 真实Chat API验收需明确实际运行版本、全程中文进度、无重复提问/计费、可修改前序参数,并核对每个交付文件;不能把隔离模型请求当作完整API验收。
v90 修复事务规范化与收敛保护(2026-09-07)
- 模型输出不是直接写入权威图谱。响应先统一为有界 patch 列表;直接数组和
patches对象都可解析,但非法成员、空变化和超过上限的修改会被拒绝。 - 整段实例 placement 只在同时含有且仅含 x/y/z 时可进入规范化,并拆为实际变化的单轴替换;原始路径、展开路径和响应形状都进入审计。底层补丁器继续拒绝整段 placement 写入,形成两层保护。
- 局部修改按事务应用到候选副本并重新编译;编译问题数不能高于上一已接受版本。回归候选被完整丢弃,下一轮收到问题数和代码分布,而不是在损坏状态上继续修。
- sideboard7 隔离证据显示该机制使编译问题从 57 项总体降到 15 项,并成功消费一次直接数组响应;但剩余总成边界和穿插仍是阻断项。这里的“收敛”只描述验证器问题计数,不等于图片理解正确或可制造。
v96 五金安装约束、端到端评分与可恢复探针(2026-09-07)
- 五金实例不再依赖“碰到某块板就算安装”。
mountings显式绑定宿主实例、宿主板面、表装/埋入/贯穿类型、嵌入深度和证据;同一铰链可绑定门板与侧板两个宿主。求解器按板厚轴限制可安装板面,并验证法向距离、切向重叠和深度。 - 结构总成边界从非五金结构成员计算;已验证安装的五金可形成实际外形突出,但不能反过来把结构总成边界放大。合法埋入只豁免对应五金—宿主这一对碰撞,未声明的碰撞和错误位置仍阻断。
- 编译错误返回精确可采用的安装值和最小平移候选,不让模型自由猜板面。若移动实例是其总成唯一成员,候选同时包含紧包围总成边界修改,两个补丁按原子事务应用。
- 隔离修复不再只优化编译问题数。每轮以编译、制造、CAD内核和视觉问题总数为唯一接受分数,候选必须严格下降;
--resume-report会选历史最佳检查点并用当前编译器刷新反馈后续跑,保留原图资格与不读公司BOM的审计链。 - 续跑选择器排除任何带
patch_error的拒绝轮次;编译阶段只有在当前问题数作为下界已经不可能优于上一端到端总分时才提前回滚,避免用旧编译问题数误杀可能显著减少B-rep冲突的候选。专项60项、完整196项回归通过。 - 当前仍缺少安装特征实体化:B-rep应依据安装模板在宿主生成孔、杯槽、沉孔或开口,同时把五金拆成可见体和嵌入体,不能永久靠允许碰撞对掩盖。下一阶段还要增加“参考尺寸包络/实际占用包络”语义,识别覆盖门、嵌入背板与净深尺寸,先做尺寸链可行性裁决再进入AI修复。
v101 最小分离轴可行区间与防循环门禁(2026-09-07)
- 诊断B-rep会在已验证的埋入/贯穿安装宿主上减去五金嵌入包围盒,但这些减材显式标记为非生产特征。生产孔槽必须继续由供应商五金模板、连接面和实际规格生成,两者不可混用。
- 内核干涉复核始终针对刚生成的STEP绝对路径直接执行,并解析stdout JSON。引擎封装层的进度stderr、旧结果字段或进程退出码不再能覆盖真实碰撞对。
- 每个实体冲突会取重叠最小的分离轴,在零件所属总成或产品边界中构造允许的下坐标域,再逐个扣除与其它实体发生正体积相交的禁止区间。输出包含允许域、所有阻塞实体、禁止区间和剩余可行区间,可被人和AI独立复算。
- 若冲突两侧实体在最小分离轴上都没有任何可行区间,该问题标记
minimum_separation_axis_infeasible=true。AI不得继续往返移件,只能依证据修正尺寸/外形口径/覆盖与内嵌语义,或建立显式槽口、避让等加工几何。 - 无用户参与的隔离探针在一轮原图修复未使端到端阻塞严格下降时立即停止,输出
geometry_dead_end_requires_focused_source_adjudication。正式交互应先调用AI聚焦原图复读;只有高置信尺寸仍相互矛盾时,向用户集中询问一个能决定结构的问题,不重启全流程。
v102-v104 实际占用包络、参考尺寸口径与单问题兜底(2026-09-08)
envelope_mm固定表示包含门板、拉手等凸出件的实际占用外形;图纸若明确只标柜体、开口或框架,可另建reference_bounds_mm。结构图谱不能自行把原图“整体尺寸”改成参考尺寸,必须引用真实用户确认,或引用独立聚焦原图裁决且置信度不低于0.8。- 编译结果同时输出
occupied_envelope_mm、reference_bounds_mm和dimension_scope_audit;参考包络必须完全落在实际占用包络内。这样可表达“柜体深400mm、门板外覆后成品深420mm”,而不是通过移动门板或缩短层板伪造无碰撞。 - v102聚焦复读虽正确判断原图尺寸冲突,但生成的问题暴露内部几何过程,并给出“把背板加厚”等会扩大占用空间的错误选项;该轮判定失败。v103增加长度和术语门禁后,模型又跳过柜门,直接追问层板与背板尺寸;仍判定失败。
- v104由结构化冲突中的门板角色、板厚轴和最短分离轴确定首问必须是
overall_dimension_scope。多模态模型连续两次仍返回过长选项,被输出校验器拒绝;系统没有重试循环,而是生成受控兜底问题:“尺寸图标注的总深 400mm,是否包含柜门厚度?”,只给“包含柜门(成品最外尺寸)/不包含柜门(只算柜体/框架)”两个选项。 - v104证明的是防循环和用户提问边界生效,不是AI图像裁决成功:报告明确保存模型两次格式失败和
deterministic_dead_end_question_fallback来源。它仍停在单一事实待确认状态,没有交付CAD、BOM或成本,也未部署生产。
同行公开资料的可用结论
Zoo公开说明其代理会操作可编辑的参数化模型,执行几何代码,读取质量/体积等模型信息,并用多视图快照反复检查。我们借鉴“结构表示+几何执行反馈+视觉反馈”机制,不能据其宣传推断多张家具图片已经可以稳定得到生产级完整BOM,也不能据此承诺成本误差5%。