ARTICLE · 1324879
一句话,让 AI 在我电脑上造出一辆车
—— 用混元 Hy4 完成一个真实 SolidWorks 建模任务的全过程
这不是一篇教程,也不是一次「AI 生成一段示例代码」的演示。我提了一句自然语言需求,混元 Hy4 在我本机的 SolidWorks 2018 里把模型真的建出来、装配好、检查完,最后交付了可以直接双击打开的
.SLDASM。全程我没写一行代码,也没给过它任何 API 文档。
2026 年 11 月 6 日 · Windows / SolidWorks 2018 / 混元 Hy4
一、先看结果

.SLDPRT 零件 + 1 个 33 实例装配体 + 通用 STEP | |
模型不是网格也不是导入的实体,是SolidWorks 原生特征模型——草图、拉伸、切除都在特征树里,尺寸可以直接改。
二、我一共只说了四句话
整个过程我这边几乎没有「操作」,只有四轮需求:
「使用 solidworks 画一个 4轮机器人小车的模型」 贴了联轴器和减速电机的工程图,补了一句尺寸:轮胎 φ65、宽 27,轮毂 52,轮子和电机之间有个联轴器,底板 200×180,电机是这个尺寸 「电机有个支架的 请加上去」 贴了那张 L 型支架的尺寸图
就这些。没有告诉它 SolidWorks 装在哪个盘、COM 怎么调、FeatureExtrusion2 有 27 个参数、也没有说「请先写一个探测脚本」。它自己去找、去试、去改。
后面发生的每一件事,都是它在我这台机器上真实跑出来的。
三、最让我意外的一步:它没先建模,先去「摸」我的电脑
我原以为会收到一份「打开 SolidWorks,新建零件,选前视基准面……」的操作步骤。结果它第一步是查环境:
在注册表里翻到 SldWorks.Application的 CLSID,定位到E:\sw2018\SOLIDWORKS\sldworks.exe确认是 SolidWorks 2018(26.5.0)中文版,找到 gb_part.prtdot/gb_assembly.asmdot模板发现 Python 缺 pywin32,自己装上了发现 gencache.EnsureDispatch("SldWorks.Application")必然失败(SW 对象没有 TypeInfo),改成手动对sldworks.tlb跑 makepy 生成类型库包装
然后它没有直接写两千行建模代码,而是先写了一堆几行到几十行的小脚本,一个一个验证:能不能新建文档、能不能画草图、能不能拉伸、切除怎么调、保存怎么调、装配体怎么插零件。
scripts/diag/ 里最后留下了28 个这样的验证脚本(probe*.py、diag*.py)。这个习惯是整件事能跑通的关键:每个不确定都先做一个最小复现,而不是在猜测上继续堆代码。
四、真实的坑,和它怎么一个个爬出来
这部分我原样留着,因为「一次成功」反而不真实。下面是几个有代表性的:
1. 整车「躺倒」了
第一版零件全建出来了,导出等轴测图一看,车是侧躺的。
原因很朴素:SolidWorks 的「上」是 +Y,不是 +Z。我凭直觉以为 Z 是高度,它一开始也按常见 CAD 习惯写了 Z,结果所有板子竖着长。修法是把全部零件的建模基准面重排——板类改「上视基准面沿 +Y 拉伸」,轮子改「前视基准面沿 +Z 拉伸」,让轮轴自然落在车宽方向。
它是靠「导出图 → 看图」发现这个错的,不是靠读代码。
2. 圆角板一切孔就多出碎片实体
给底板开角孔时,FeatureCut4 会在圆与板边相切的位置生成 90~2647 mm³ 的碎片实体,GetBodies2 返回的第一个 body 常常是碎片,导致包围盒看起来只有一个孔那么大。
它试了各种贯穿参数、改了圆角半径,确认是本机这个切除组合的固有毛病,于是换路线:板类零件一律「单一草图 + 一次拉伸」——外轮廓用 4 条直线 + 4 个三点弧画圆角矩形,孔直接画成内环圆,一次成型,单实体、体积与理论完全吻合。
有意思的是,后来做电机端面 6-M3 盲孔和联轴器 M4 顶丝孔时,它重新实测了一遍 FeatureCut4,发现切除本身没问题,只是「轮廓与板边相切」这个特定情形会出碎片,于是又把它用回来了。没有因为一次挫折就把一个 API 拉黑。
3. 装配体里的零件全嵌进底板
第一次装配,轮子陷进底盘、控制盒压进底板 5 mm,干涉检查报了27 处。
排查路径挺有意思:先按「面贴合被误判」加了 0.5 mm 间隙,降到 4 处;再逐个读组件变换矩阵,最后确认根因是——AddComponent5传的坐标是「零件包围盒中心」,不是零件原点。所有位置都按原点算,自然整体偏移。全部改成按包围盒中心定位后,27 处直接降到 0 附近。
顺带还挖出两个坑:AddComponent5 之前必须先用 OpenDoc6 把零件打开,否则静默返回空;app.GetMathUtility() 在这台机器上不可用,没法旋转组件,所以左右朝向相反的零件只能单独做镜像件——它用的是「把各段建模顺序整个反过来」这种干净做法,而不是硬掰旋转矩阵。
4. 一侧电机压住轮子
剩下几处干涉集中在负侧电机:输出轴是单向的,镜像过去以后轴朝内、机身压到了轮子上。它做了单独一版「轴段先画、机身最后画」的镜像电机,bbox 与原版一致,装配时按中心定位即可。
5. 支架竖板拉伸出来 0 个实体
第三轮加 L 型支架时,「跑道形腰孔 + 6 个圆孔」放在同一个草图里,SolidWorks 直接判定轮廓无效,拉伸返回 None。它把孔径缩小、把 6 孔减到 4 孔都试过,确认不是间隙问题,然后拆成两步:草图只留「倒 D 形外轮廓 + 腰孔内环」一次拉伸,6 个 φ3.2 孔改用独立贯穿切除,最后把底板 merge 进来 → 单实体 V=5670 mm³,与理论一致。
6. 一些零碎但很典型的类型问题
SelectByID2 | VARIANT(VT_DISPATCH, None),不能传 None |
SaveAs4 | VARIANT(VT_BYREF|VT_I4, 0) |
'str' object is not callable | |
MaterialPropertyValuesVARIANT(VT_ARRAY|VT_R8, [8 元组]),普通 tuple 无效 | |
Flip=True 无效 | Dir=True |
这些经验它顺手沉淀进了项目的 .workbuddy/memory/MEMORY.md,是一张可以直接复用的 API 踩坑表。
五、它是怎么「看见」自己做得对不对的
我觉得这最像一个真人干活的地方:它给自己接了一双眼睛。
每次改完,脚本会调 ShowNamedView2 + SaveBMP 导出等轴测 / 前视 / 俯视 / 右视 / 底视,然后真的去读这些图。除了前面那个「车躺倒了」,它还靠看图发现了:
上层板有一根支柱从板面穿出来 → 把柱位往内移、放大过孔 配色没生效、全车默认绿 → 回头查 MaterialPropertyValues的参数类型支架加上以后被底盘挡住看不见 → 临时隐藏承载层组件,单独出了一张驱动层总成图



「生成 → 看图 → 发现不对 → 改参数 → 再生成」这个循环跑了很多轮,比单纯跑通脚本要可信得多。
六、从「看着像」到「真的能用」:它做的几件工程活
光好看不算交差,后面这几件事我觉得才是「真实任务」和「演示」的分界线:
用体积校验几何。每个零件建完都算实体体积和理论值对账:底板 175361 mm³、轮胎 31812、轮毂 51369、电机 49440、支架 5670;6-M3 盲孔切除 118 mm³、M4 顶丝孔切除 51 mm³、支架 6 孔 97 mm³,全部吻合。这样「看着对但其实是碎片/空实体」的问题藏不住。
干涉检查当作验收线。用 InterferenceDetectionManager 逐对查,从 27 处一路追到0 处;所有配合面留 0.1–0.5 mm 间隙。最后还重新打开装配体,逐个确认 33 个组件引用的零件文件都真实存在。
一个尺寸源。第二轮图纸一到,它先建了 scripts/dims.py:P 字典放零件几何,layout() 放装配基准,bracket_base_holes() 统一算底盘的 8 个支架孔。建模脚本和装配脚本都 import 它,避免「改了零件忘了改装配」这种最难查的错。这是整件事里我最欣赏的一个架构决定——改一个数字,全套重跑。
交付可复现。7 个正式脚本、一份 README、一份 STEP、一套视图总览。不是给我一个孤零零的模型文件。
七、它替我做的判断,和留给我拍板的地方
真实工程图常常是「不完整」的,这部分处理得挺克制——它把判断和依据都摆出来,没有假装图纸上什么都有:
发现图纸矛盾并给方案:联轴器图纸只标了 φ8 孔,但电机轴是 φ6。它做成 φ6.1 / φ8.1 阶梯孔,φ6 端吃电机 D 轴、φ8 端吃轮轴,各留 0.1 mm 间隙、各一颗 M4 顶丝;图纸没给的 φ8×31 轮轴也补上,把传动链闭合。 从几何约束反推装配高度:支架图纸的 6 孔圆心距折弯线 27 mm,而电机轴必须和轮心同高 32.5 mm。它推出支架得倒装、底盘底面要从 51.5 抬到 61.5 mm(= 32.5 + 27 + 2),底盘相应补 8 个 φ3.2 孔,整车高 138 → 148。这样电机是被 4 个支架真正夹持,不是悬空贴着底板。 明确标注取值假设:电机减速箱长度图纸是变量 L,取 24;支架板厚、孔径图纸没标,取 2 mm / φ3.2。这些都在 README 里写成一行,改dims.py一个参数就能换。
我把这部分单独列出来,是因为它恰好说明了我理想中的分工:繁琐的执行、试错、对账交给 AI;图纸里缺的那些需要工程经验的取舍,它给依据、我来点头。
八、一点体会
1. 「真实任务」和「问答」的差别,是有没有一个可验收的东西。这次的验收物很硬:一个能双击打开的装配体、33 个引用齐全的组件、0 处干涉、一份能重跑的脚本。有了这个东西,AI 说得再漂亮也没用,跑不通就是跑不通。
2. 遇到报错不猜,写最小复现。28 个诊断脚本看着笨,却是能一路摸清 30 多个 COM API 的原因。反过来说,如果一个 Agent 遇到 'str' object is not callable 就开始瞎改参数,这事第一轮就崩了。
3. 视觉闭环 + 数值校验,两条腿走路。看图抓「躺倒、穿模、没上色」这类语义错误,算体积和干涉抓「碎片实体、坐标偏移」这类数值错误,谁也替不了谁。
4. 沉淀比一次性结果更值钱。dims.py、README、项目笔记这三样,意味着下次我说「把轮距改窄点」或者「再出张工程图」,不用从零开始。
三轮下来,从一句「画个四轮小车」到一套按图纸建好、检查干净的装配体,中间隔了几十次失败重试。但对我来说,界面上就是四句话和最后那几张图——这大概就是这次体验最直观的感受。
附:文件与复现
机器人小车/├── parts/ 15 个 .SLDPRT├── assembly/ robot_car.SLDASM(33 实例)├── output/ 8 张 PNG + robot_car.step├── scripts/ dims.py / build_parts.py / assemble.py /│ colorize.py / show_bracket.py /│ check_interference.py / make_preview.py├── README.md 设计说明(尺寸对照表 / BOM / 传动链)└── 用混元Hy4完成真实任务_体验分享.* 本文
在装有 SolidWorks 2018 + pywin32 的机器上,改完 scripts/dims.py 后按顺序重跑:
python scripts/build_parts.pypython scripts/assemble.pypython scripts/colorize.pypython scripts/show_bracket.pypython scripts/check_interference.pypython scripts/make_preview.py
还可以继续做的:胎面花纹、支架折弯圆角与钣金展开、添加 Mate 配合、电池仓、出工程图与明细表。















































































