1. 从 Demo 到工程:AI 与 CAD 结合的真实鸿沟
过去两年,我参与过三个把 AI 能力接入 CAD 工作流的项目,从图纸信息提取、参数化建模辅助,到基于自然语言的绘图指令生成,几乎每个方向都做过一轮。结果很有意思:Demo 阶段几乎都能跑通,一旦进入真实工程环境,问题就像潮水一样涌出来。这篇文章不聊概念,只聊我踩过的坑、验证过的路径,以及为什么“AI + CAD”这件事比想象中难得多。
先说清楚这篇文章适合谁看。如果你是把 AI 当玩具、想快速做个演示的开发者,这里的内容可能让你觉得扫兴;但如果你是真正要把 AI 塞进设计院、制造厂、工程公司日常流程里的工程师或技术负责人,那这些经验大概率能帮你省下几个月试错时间。核心关键词会围绕AI、CAD、DXF、DWG、FreeCAD展开,因为这几个词基本覆盖了从数据格式到开源工具链的关键环节。
我先把结论摆出来:AI 和 CAD 之间的鸿沟,不在模型能力,而在数据格式、几何语义和工程约束这三层。Demo 之所以满天飞,是因为它们大多绕开了这三层,只做了“看起来能用”的表面功夫。下面逐层拆解。
2. 为什么 Demo 看起来很美,工程却走不通
2.1 Demo 的典型套路:截断输入、简化输出
我见过最多的 Demo 是这样的:拿一张干净的二维图纸,导出成图片,丢给视觉模型识别,然后输出几个坐标点或者一段文字描述。演示的时候效果惊艳,观众一看“AI 能看懂图纸了”。但真实工程图纸是什么样?图层几十个、块引用嵌套、标注样式五花八门、线型有自定义、还有外部参照。一张实际项目的 DWG 文件,光图层表就可能上百条记录,更别说那些被冻结、锁定、隐藏的图层。
Demo 的第二个套路是只处理 DXF。DXF 是文本格式,解析起来确实比 DWG 友好,很多开源库都能读。但问题在于,工程现场流通的文件绝大多数是 DWG,DXF 往往是中间转换产物,转换过程中丢信息是常态。我实测过一批图纸,同一个文件转成 DXF 后,某些自定义实体的属性直接消失,标注的关联关系也断了。你拿这样的数据去喂 AI,出来的结果自然对不上。
2.2 工程环境的三个硬约束
第一个约束是精度。CAD 里一条线段的端点坐标可能是小数点后六位,AI 模型输出如果只给到两位,在建筑图上可能差几厘米,在机械图上直接报废。我试过用语言模型生成绘图指令,让它“画一条从 A 到 B 的线”,结果它给出的坐标是近似值,因为模型本质上是在预测 token,不是在计算几何。
第二个约束是拓扑关系。工程图不是一堆孤立的线段,线之间有连接、有约束、有父子关系。AI 如果只识别出“这里有一条线”,却不知道这条线和旁边那条线共享端点、构成一个闭合轮廓,那后续的填充、拉伸、布尔运算全都做不了。拓扑信息的丢失是 Demo 和工程之间最致命的差距。
第三个约束是可追溯性。工程图修改必须有记录,谁改的、改了什么、为什么改。AI 生成的内容如果直接写进图纸,没有版本控制、没有审核痕迹,在正规流程里根本过不了关。这不是技术问题,是流程问题,但恰恰是很多技术团队忽略的。
2.3 一个真实案例:从兴奋到放弃
去年我帮一个团队做图纸信息提取,目标是从一批建筑平面图里自动识别房间名称和面积。Demo 阶段用视觉模型加 OCR,准确率能到八成。但一上真实项目,问题来了:图纸里的房间名称有的在块里、有的在属性文字里、有的干脆是炸开的单行文字;面积标注有的用字段、有的是手写数字、有的被引线遮住。准确率直接掉到三成以下,而且错误分布毫无规律,根本没法用规则去补。
后来我们换了个思路,不走视觉识别,直接从 DWG 文件里解析实体数据。这时候才发现,真正的难点不是识别,而是理解图纸的组织逻辑。同一个房间,在不同图纸里可能用不同的图层、不同的块、不同的标注方式表达。AI 模型没有工程语义的先验知识,它不知道“这个图层名代表墙体”“那个块名代表门窗”,全靠数据驱动去猜,样本量根本不够。
3. 数据格式这关:DXF、DWG 与 FreeCAD 的真实表现
3.1 DXF 不是万能钥匙
很多人把 DXF 当成 CAD 数据交换的标准格式,理论上没错,但实际用起来坑很多。DXF 有多个版本,从 R12 到 2018,每个版本支持的实体类型和属性都不一样。你用高版本 DXF 里的新实体,低版本解析器直接报错或者忽略。我遇到过用 LWPOLYLINE 的图纸,在某些老解析器里被当成普通 LINE 处理,宽度信息全丢。
还有一个隐蔽的问题:DXF 里的句柄和所有者关系。实体之间的引用是通过句柄建立的,比如标注关联到被标注的线段。很多解析库为了简化,直接忽略这些关系,只返回几何数据。结果就是 AI 拿到一堆孤立的线段,完全不知道它们之间的逻辑联系。如果你要做智能编辑或者参数化修改,这些关系恰恰是最重要的。
3.2 DWG 解析的现实选择
DWG 是二进制格式,闭源,官方 SDK 有授权限制。开源方案里,LibreDWG 和 ODA 的转换工具是两条主要路径。LibreDWG 能读大部分常见版本的 DWG,但对新版本和自定义实体的支持有限。ODA 提供格式转换,可以把 DWG 转成 DXF 或者二进制交换格式,但转换过程同样会丢信息。
我目前的实践是:能用 DWG 原生解析就不用转换。如果必须转,一定做转换前后的实体数量和属性对比,确认关键信息没丢。具体做法是写个脚本,统计转换前后每种实体类型的数量、图层数量、块定义数量,差异超过阈值就人工介入。这个检查步骤看起来笨,但帮我拦住了好几次数据事故。
3.3 FreeCAD 在 AI 工作流里的定位
FreeCAD 是开源 CAD 里生态最完整的,Python 接口友好,适合做 AI 和 CAD 之间的中间层。但它的 DWG 支持依赖外部转换器,实际体验是“能用但别指望完美”。我一般用 FreeCAD 做三件事:一是作为几何内核,接收 AI 输出的参数化指令;二是做格式转换的验证环境;三是做轻量级的图纸查看和标注。
FreeCAD 的 Part 和 Draft 模块对 Python 暴露得很彻底,你可以直接用代码创建线段、圆弧、约束。这意味着 AI 输出的结构化数据可以比较顺畅地转成 FreeCAD 对象。但要注意,FreeCAD 的约束求解器对过约束和欠约束的处理逻辑和商业 CAD 不完全一致,同样的约束条件,在 FreeCAD 里能解,在 AutoCAD 里可能报错,反之亦然。跨工具链的时候必须做兼容性测试。
4. 几何语义:AI 真正难啃的骨头
4.1 从像素到向量:信息损失不可逆
视觉模型处理图纸,本质是把矢量信息栅格化再识别。这个过程信息损失是不可逆的。一条线在矢量格式里是精确的起点和终点坐标,栅格化之后变成一堆像素,识别出来只能得到近似位置。对于粗略的布局理解,这个精度够用;但对于需要精确坐标的工程操作,完全不够。
我做过一个对比实验:同一张图纸,一路走视觉识别,一路走矢量解析,然后让 AI 回答“某个房间的净尺寸是多少”。视觉路线的误差在 5% 到 15% 之间波动,矢量路线可以做到零误差。这个差距在工程场景里是致命的,因为尺寸错了,后面的材料计算、成本估算全错。
4.2 拓扑重建:比识别更难
就算你拿到了精确的几何数据,下一步是重建拓扑。什么是拓扑?简单说就是谁和谁连着、谁包含谁、谁约束谁。在 CAD 里,这些关系有些是显式存储的,比如块的插入点和缩放比例;有些是隐式的,比如两条线共享端点,需要你自己去判断。
AI 模型目前对拓扑的理解很弱。你给它一堆线段,让它判断哪些构成闭合区域,它可能会用聚类算法去猜,但准确率不稳定。更麻烦的是,工程图里的拓扑往往有语义含义:一个闭合区域可能代表房间、可能代表设备轮廓、可能代表填充边界,光看几何形状分不出来,必须结合图层、块名、标注等上下文信息。
我的做法是把拓扑重建拆成两步:先用几何算法做初步的连通性分析,把明显相连的实体分组;再用规则引擎结合图层和块信息做语义标注。AI 在这里的角色是辅助分类,不是主导重建。这样虽然不够“智能”,但准确率可控,工程上能用。
4.3 约束求解与 AI 的结合点
参数化设计里的约束求解,是 AI 可以真正发挥价值的地方。传统约束求解器是数值方法,给定约束条件,迭代求解变量值。AI 可以做的,是预测哪些约束组合容易导致过约束或者求解失败,提前给出警告。我试过用历史数据训练一个分类模型,输入是约束图的特征,输出是求解成功概率,准确率能到七成左右,作为辅助提示够用了。
另一个方向是约束的自动推断。用户画了几条线,AI 根据常见设计模式推测可能需要的约束,比如水平、垂直、等长。这个在简单场景下效果不错,但复杂图纸里误报率很高,因为设计意图太依赖上下文,模型很难从几何 alone 推断出来。
5. 工程落地的实操路径与避坑指南
5.1 技术选型:别一上来就上大模型
我见过太多团队一上来就调大模型 API,想把所有问题都交给模型解决。实际落地时,规则引擎加小模型往往比大模型更稳。比如图层分类,用关键词匹配加正则表达式,准确率能到九成以上,成本几乎为零。大模型适合处理那些规则覆盖不到的边缘情况,作为兜底。
具体分工我一般是这么安排的:格式解析用成熟库,几何计算用 CAD 内核,语义理解用规则加小模型,大模型只做自然语言交互和复杂推理。这样每一层都可控、可调试、可替换,不会因为某个模型更新就整个流程崩掉。
5.2 数据管道:从 DWG 到 AI 可用的结构化数据
一个可用的数据管道大概长这样:DWG 文件先做完整性检查,确认版本和实体类型;然后解析出实体列表、图层表、块定义表;接着做几何归一化,把坐标统一到同一坐标系;再做拓扑分析,建立实体间的连接关系;最后输出成 JSON 或者图结构,喂给 AI 模块。
每一步都要有校验和日志。我吃过亏的地方是:某批图纸的块定义里有嵌套块,解析的时候没递归展开,导致后续分析漏掉了一整层信息。后来加了递归深度检查和实体计数对比,才把这个问题堵住。工程数据没有“差不多”,只有“对”和“错”。
5.3 人机协作:AI 做建议,人做决策
目前阶段,AI 在 CAD 流程里最合理的角色是助手,不是替代者。它可以帮助快速定位相似图纸、提取关键信息、生成初步方案,但最终决策必须由工程师确认。我参与的项目里,凡是让 AI 直接改图纸的,最后都出了事故;凡是 AI 出建议、人审核的,效率提升明显且风险可控。
具体交互设计上,我倾向于把 AI 的输出做成“可接受、可修改、可拒绝”的建议卡片,而不是直接写入图纸。工程师看一眼,觉得对就采纳,觉得不对就改或者忽略。这样既利用了 AI 的效率,又保留了人的判断。
6. 常见问题与排查技巧实录
6.1 图纸打不开或者显示异常
这是最高频的问题。VCRUNTIME140 1.dll 缺失是 Windows 上 AutoCAD 常见的运行库问题,装个 Visual C++ Redistributable 基本能解决。如果图纸打开后出现放射状乱线,多半是显卡驱动或者硬件加速的问题,在设置里关掉硬件加速试试。还有一种是图纸本身损坏,可以尝试用 RECOVER 命令修复,或者用其他工具先转成 DXF 再转回来。
6.2 格式转换丢信息
DXF 和 DWG 互转、不同版本互转,丢信息几乎是必然的。我的排查流程是:先对比实体总数,再对比每种实体类型的数量,然后抽查关键实体的属性。如果差异超过 5%,就认为转换不可靠,需要换工具或者换路径。常用的转换工具里,ODA 的保真度相对较好,但也不是百分百。
6.3 AI 输出结果不稳定
同一个输入,AI 两次输出不一样,这在工程场景里很难接受。解决办法是降低温度参数、增加输出格式约束、加后处理校验。如果还是不稳定,说明这个任务不适合用生成式模型,应该换成分类或者回归模型。我一般会先做一轮小样本测试,确认输出稳定性再上量。
| 问题类型 | 典型表现 | 排查方向 | 解决手段 |
|---|---|---|---|
| 运行库缺失 | 启动报错、dll 找不到 | 检查 VC++ 运行库 | 安装对应版本 Redistributable |
| 显示异常 | 乱线、花屏 | 显卡驱动、硬件加速 | 关闭硬件加速、更新驱动 |
| 转换丢信息 | 实体数量对不上 | 对比转换前后数据 | 换工具、做完整性校验 |
| AI 输出不稳 | 同样输入不同输出 | 模型温度、格式约束 | 降温度、加校验、换模型类型 |
| 拓扑关系丢失 | 线段孤立、无法填充 | 解析库是否保留句柄 | 换解析方案、手动重建拓扑 |
6.4 性能问题
大图纸解析慢是常态。一万个实体的 DWG,用 Python 解析可能要几十秒。优化方向有几个:一是用 C++ 扩展替代纯 Python 解析;二是做增量解析,只处理变化的图层;三是把解析结果缓存起来,避免重复计算。我实测下来,缓存加增量能把重复解析的耗时降到原来的十分之一左右。
7. 我对这个方向的一些真实体会
做了这几个项目之后,我最大的感受是:AI 和 CAD 的结合,难点从来不在 AI 本身,而在 CAD 这一侧的工程化程度。CAD 数据格式的封闭性、几何语义的复杂性、工程流程的严谨性,这三座山不翻过去,AI 能力再强也落不了地。
另一个体会是,不要追求全自动。工程场景里,全自动意味着零容错,而 AI 目前做不到零容错。人机协作、AI 做建议人做决策,这个模式虽然不够酷,但能真正跑起来、产生价值。我见过太多追求全自动的项目,最后都卡在“最后百分之五的准确率”上,投入产出比极低。
最后分享一个实用技巧:做 AI + CAD 项目,先花时间把数据管道搭稳,再考虑模型。数据管道稳了,模型换个版本、换个架构,影响都可控;数据管道不稳,模型再好也是空中楼阁。我现在的习惯是,任何新项目先花两周做数据解析和校验,确认数据质量达标了,再开始接 AI 模块。这个顺序看起来慢,实际上是最快的路径。