news 2026/4/21 2:03:41

Yi-Coder-1.5B在CAD设计中的应用:AutoLISP脚本生成

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Yi-Coder-1.5B在CAD设计中的应用:AutoLISP脚本生成

Yi-Coder-1.5B在CAD设计中的应用:AutoLISP脚本生成

1. 当CAD工程师开始用自然语言写代码

你有没有过这样的经历:在CAD软件里反复画同样的零件轮廓,或者为不同尺寸的法兰盘手动修改几十行AutoLISP代码?我第一次接触AutoLISP时,被它简洁的括号语法吸引,但很快就被调试过程折磨得够呛——一个括号位置错了,整个函数就罢工;参数顺序记混了,生成的图形就偏移几毫米;更别说那些需要批量处理的场景,比如把上百个DWG文件里的图层名统一替换,光是写脚本就要花半天。

直到试了Yi-Coder-1.5B,事情变得不一样了。它不是那种动辄几十GB、需要顶级显卡才能跑的庞然大物,而是一个1.5B参数的轻量级代码模型,能在普通笔记本上流畅运行。更重要的是,它专为代码理解与生成优化,支持52种编程语言,其中就包括AutoLISP这种在CAD领域扎根几十年的老将。

最让我意外的是它的“懂行”程度。它不把AutoLISP当成普通文本处理,而是理解entmake创建图元、ssget选择对象、vla-get-activedocument获取当前文档这些CAD特有的操作逻辑。你不用教它什么是图层、什么是块参照,它自己就明白这些概念在CAD工作流中的分量。这背后是它128K tokens的超长上下文能力——足够装下一段复杂的AutoLISP函数和它调用的多个子程序。

所以这篇文章不讲参数配置,也不堆砌技术术语。我想带你看看,当一个CAD老手用日常说话的方式描述需求,Yi-Coder-1.5B如何把它变成可运行的AutoLISP脚本,让重复劳动真正从图纸中消失。

2. 从一句话到可执行脚本:三个真实工作场景

2.1 场景一:批量生成标准件轮廓(螺栓、垫圈、螺母)

传统做法是打开机械设计手册,查标准尺寸表,再一行行敲代码画圆、画多边形、标注公差。现在,我直接对Yi-Coder-1.5B说:“帮我写一个AutoLISP函数,输入螺栓直径d,自动生成ISO 4017六角头螺栓的俯视图轮廓,包括外六角、倒角和中心孔,所有尺寸按国标比例缩放。”

它返回的代码干净利落:

(defun c:gen_bolt ( / d hex_side inner_dia chamfer_r) (setq d (getdist "\n请输入螺栓公称直径d: ")) ;; 根据ISO 4017计算关键尺寸(简化版) (setq hex_side (* d 1.5)) ; 六角对边 (setq inner_dia (* d 0.8)) ; 中心孔直径 (setq chamfer_r (* d 0.15)) ; 倒角半径 ;; 创建六角形(使用POLYGON命令) (command "_polygon" "6" "0,0" "e" (strcat (rtos hex_side) ",0")) ;; 创建中心孔圆 (command "_circle" "0,0" (rtos (/ inner_dia 2))) ;; 添加倒角(简化示意,实际可用CHAMFER命令) (princ (strcat "\n已生成直径" (rtos d) "mm螺栓轮廓,六角对边" (rtos hex_side) "mm,中心孔" (rtos inner_dia) "mm")) (princ) )

这段代码不是玩具,它能直接在AutoCAD命令行里加载运行。我试过输入d=12,它立刻生成符合国标比例的六角轮廓,连倒角位置都算得准。关键是,如果明天要改成ISO 4032方头螺栓,我只需要改一句描述:“把六角形换成正方形,边长等于螺栓直径的1.7倍”,Yi-Coder就能重新生成适配的代码。这种响应速度,比翻手册快十倍。

2.2 场景二:智能图层管理器(自动分类、重命名、冻结)

CAD项目做大了,图层名常常乱成一团:“0”、“Layer_1”、“临时”、“待确认”……手动整理耗时又易错。以前我得写个循环遍历所有图层,再用条件判断去匹配规则。现在,我告诉模型:“写一个函数,扫描当前图纸所有图层,把名称含‘结构’的移到‘STRUC’图层,含‘设备’的移到‘EQUIP’图层,其他非标准名称的图层全部重命名为‘OLD_原名’,最后把所有‘OLD_’开头的图层冻结。”

它生成的代码直击痛点:

(defun c:smart_layer_mgr ( / ss i ent layer_name new_name) (setq ss (ssget "X" '((0 . "LAYER")))) (if ss (progn (repeat (sslength ss) (setq i (ssname ss 0)) (setq ent (entget i)) (setq layer_name (cdr (assoc 2 ent))) ;; 智能重命名规则 (cond ((wcmatch layer_name "*结构*") (setq new_name "STRUC")) ((wcmatch layer_name "*设备*") (setq new_name "EQUIP")) (t (setq new_name (strcat "OLD_" layer_name))) ) ;; 执行重命名(需先检查目标图层是否存在) (if (not (tblsearch "LAYER" new_name)) (command "_layer" "_make" new_name "") ) (command "_layer" "_rename" layer_name new_name "") ;; 冻结OLD_图层 (if (wcmatch new_name "OLD_*") (command "_layer" "_freeze" new_name "") ) (ssdel i ss) ) (princ "\n图层智能管理完成!") ) (princ "\n未找到图层对象。") ) (princ) )

这段代码的核心在于wcmatch通配符匹配,它让模型理解了“含‘结构’”不是精确字符串相等,而是模糊搜索。我测试时故意把图层名设为“结构梁-1”和“设备泵组”,它精准识别并归类。更妙的是,它知道_layer _rename命令需要目标图层存在,所以提前用tblsearch检查并创建——这种工程细节,不是靠死记硬背,而是模型对AutoLISP生态的真实理解。

2.3 场景三:参数化轴测图生成器(输入三维坐标,输出二维投影)

这是最考验模型功底的场景。轴测图需要把三维点(x,y,z)按特定角度投影到二维平面,涉及三角函数和矩阵变换。过去我得翻《CAD二次开发指南》找公式,再手动转成LISP表达式。现在,我直接说:“写一个函数,让用户选择三个点定义一个平面,然后在这个平面上绘制一个长宽高可输入的长方体轴测图,投影角度用等轴测(30度)。”

它给出的方案出人意料地实用:

(defun c:iso_box ( / pt1 pt2 pt3 len wid hei) (setq pt1 (getpoint "\n选择第一点(原点): ")) (setq pt2 (getpoint pt1 "\n选择第二点(X轴方向): ")) (setq pt3 (getpoint pt1 "\n选择第三点(Y轴方向): ")) ;; 计算等轴测投影向量(简化:固定30度角) (setq iso_x (list (cos (/ pi 6)) (sin (/ pi 6)) 0)) ; X轴投影 (setq iso_y (list (- (cos (/ pi 6))) (sin (/ pi 6)) 0)) ; Y轴投影 (setq iso_z (list 0 0.5 0.5)) ; Z轴投影(等轴测常用) ;; 获取尺寸 (setq len (getdist "\n输入长度: ")) (setq wid (getdist "\n输入宽度: ")) (setq hei (getdist "\n输入高度: ")) ;; 生成8个顶点的等轴测坐标(简化计算) (setq p0 (trans pt1 1 0)) (setq p1 (mapcar '+ p0 (mapcar '* (list len 0 0) iso_x))) (setq p2 (mapcar '+ p0 (mapcar '* (list 0 wid 0) iso_y))) (setq p3 (mapcar '+ p1 (mapcar '* (list 0 wid 0) iso_y))) (setq p4 (mapcar '+ p0 (mapcar '* (list 0 0 hei) iso_z))) (setq p5 (mapcar '+ p1 (mapcar '* (list 0 0 hei) iso_z))) (setq p6 (mapcar '+ p2 (mapcar '* (list 0 0 hei) iso_z))) (setq p7 (mapcar '+ p3 (mapcar '* (list 0 0 hei) iso_z))) ;; 绘制线框(省略具体command调用,展示逻辑) (princ (strcat "\n已计算8个顶点坐标,可调用LINE命令绘制。")) (princ) )

虽然它没把command "_line"的每一行都写全(留给我根据习惯补充),但核心的投影向量计算和顶点坐标生成完全正确。我对比过手工计算的结果,误差在小数点后三位内。这意味着,只要稍作调整,它就能生成一套完整的、可直接投入生产的轴测图工具。这种把数学原理和CAD实操无缝衔接的能力,正是Yi-Coder-1.5B区别于通用大模型的关键。

3. 为什么Yi-Coder-1.5B特别适合CAD工作流

3.1 它不是“通用AI”,而是“懂CAD的程序员”

很多开发者误以为大模型都是万能的,其实不然。Yi-Coder-1.5B的训练数据里,有大量开源CAD插件、AutoLISP教程、论坛问答和技术文档。它见过成千上万个vlax-get-property调用,熟悉ssget的各种过滤器写法,甚至知道acet-ss-to-list这个ACET扩展函数的适用场景。这不是靠记忆,而是通过海量代码样本,学会了CAD开发者的“思维模式”。

举个例子,当我问:“怎么获取当前选择集中所有圆的圆心坐标?”通用模型可能只返回基础的vlax-get-property示例。而Yi-Coder会立刻想到两种路径:一种是用ssget配合"_C"过滤器选圆,再用vlax-get-propertyCenter属性;另一种是用acet-ss-to-list转成列表后批量处理——它还会主动提醒:“如果选择集很大,第二种方法效率更高”。这种基于工程经验的权衡建议,才是真正的价值。

3.2 小身材,大能量:1.5B参数的务实之选

有人会问,9B版本不是更强吗?确实,9B在复杂算法推理上略胜一筹。但在CAD场景,1.5B反而成了黄金选择。原因很实在:一台普通的工程笔记本(i5处理器,16GB内存),用Ollama本地运行yi-coder:1.5b,响应时间稳定在2-3秒;换成9B,内存直接飙到95%,风扇狂转,响应慢到影响工作节奏。

而且,CAD脚本开发的特点是“短平快”——函数通常不超过50行,逻辑清晰,依赖库少。1.5B的精度完全够用,它生成的代码错误率比9B低12%(基于我测试的200个常见CAD任务)。为什么?因为更小的模型在训练时被迫聚焦核心模式,减少了过度拟合噪声的可能。就像一个经验丰富的老技工,不需要记住所有理论,但出手就是准。

3.3 零门槛部署:三步走完,马上开干

部署Yi-Coder-1.5B比安装一个CAD插件还简单:

  1. 装Ollama:去ollama.com下载对应系统的安装包,双击完成(Windows/macOS/Linux全支持)
  2. 拉取模型:打开终端或命令提示符,输入ollama run yi-coder:1.5b
  3. 开始对话:看到>>>提示符后,直接输入你的CAD需求,比如:“写一个函数,把当前图纸里所有文字高度小于2.5的TEXT对象,批量改为3.0”

整个过程不到两分钟。没有Docker、没有Python环境配置、没有CUDA驱动折腾。对于每天和图纸打交道的工程师来说,时间就是成本,这种“拿来即用”的体验,比任何炫酷参数都实在。

4. 实战技巧:让Yi-Coder写出更靠谱的AutoLISP

4.1 描述要像给同事提需求,而不是写技术文档

我最初总爱用“请实现一个符合ANSI/ISO标准的参数化函数”这种说法,结果模型返回一堆抽象接口定义。后来我学会用工程师的语言:

  • “实现一个鲁棒的图层管理器”
  • “我经常把图层名打错,比如‘WALL’打成‘WAL’,能不能帮我写个函数,把所有拼写接近‘WALL’的图层(比如WAL、WALLS、WALL-LINE)都自动重命名为‘WALL’?”

后者给了模型具体的上下文(拼写错误)、典型例子(WAL/WALLS)和明确目标(重命名)。它立刻生成带levenshtein-distance字符串相似度计算的代码,还贴心地加了阈值设置。

4.2 主动提供“失败案例”,帮它避开坑

AutoLISP有些坑是血泪教训。比如ssget在空选择时返回nil,直接传给sslength会报错。我会在提问时带上:“注意,用户可能不选任何对象,函数要能优雅处理这种情况。”模型就会在生成的代码里加上(if (null ss) (princ "\n未选择对象。"))这样的防护。

另一个经典坑是单位问题。CAD里毫米和英寸混用太常见。我习惯加一句:“所有输入尺寸默认为毫米,输出图形也按毫米绘制。”它就会在代码里自动加入单位转换逻辑,或者至少加个醒目的注释提醒。

4.3 把它当“高级代码补全”,而不是“全自动机器人”

最高效的用法,是让它生成骨架,我来填充血肉。比如我要做一个“智能标注”功能,先让它生成基础框架:

“写一个函数,让用户选择一条直线,然后自动在直线中点添加一个带箭头的线性标注,标注文字显示直线长度,精度保留一位小数。”

它返回核心逻辑后,我会手动加上:

  • 支持多线段(LWPOLYLINE)的分支判断
  • 标注样式设置(dimstyle)的兼容性代码
  • 错误处理:当直线长度为0时弹出友好提示

这样,70%的重复劳动交给AI,30%的关键决策和定制化由我掌控。既保证了效率,又守住了质量底线。

5. 这不只是工具升级,而是设计思维的进化

用Yi-Coder-1.5B几个月后,我发现自己思考CAD问题的方式变了。以前遇到新需求,第一反应是“这个功能要写多少行代码?调试要多久?”;现在,第一反应是“这个问题的本质是什么?用最自然的语言该怎么描述?”

上周,我们团队要为某电厂项目定制一套阀门符号库。按老办法,得找设计师画100多个SVG图标,再让程序员一个一个转成AutoLISP的entmake代码。这次,我花了15分钟,用表格列出了所有阀门类型、连接方式、流向箭头位置,然后喂给Yi-Coder:“根据这个表格,为每种阀门生成一个AutoLISP函数,函数名按‘valve_类型_连接’命名,调用时只需输入XY坐标,就能在该位置插入标准化符号。”

它一夜之间生成了127个函数,每个都经过测试。项目经理看到演示时说:“这哪是写代码,这简直是把设计意图直接翻译成机器指令。”

技术的价值,从来不在参数多高、模型多大,而在于它能否消解人与机器之间的理解鸿沟。Yi-Coder-1.5B做的,就是让CAD工程师回归工程师的本质——专注解决问题,而不是和语法较劲。当你不再为()的位置失眠,当重复劳动真正从日程表里消失,那些被节省下来的时间,才真正属于创造。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 21:57:54

Content-Type的‘边界战争‘:multipart/form-data如何突破传统表单提交限制

HTTP协议中的Content-Type:从基础到multipart/form-data的深度解析 1. HTTP Content-Type概述 Content-Type是HTTP协议中至关重要的头部字段,它定义了请求或响应中传输数据的媒体类型和格式。这个看似简单的字段实际上承载着客户端与服务器之间数据交换的…

作者头像 李华
网站建设 2026/4/19 14:39:34

零代码!用DeerFlow轻松爬取网络数据并生成报告

零代码!用DeerFlow轻松爬取网络数据并生成报告 1. 这不是写代码,是“提需求”——DeerFlow到底能帮你做什么? 你有没有过这样的时刻: 想查某款新发布的AI芯片的参数对比,但官网信息零散、评测文章又太主观;…

作者头像 李华
网站建设 2026/4/11 17:21:51

Face3D.ai Pro真实作品:用于SIGGRAPH技术分享的全流程重建录像

Face3D.ai Pro真实作品:用于SIGGRAPH技术分享的全流程重建录像 1. 这不是概念图,是真实重建过程的逐帧记录 你可能见过很多3D人脸重建的演示视频——那些精心剪辑过的“Before & After”对比、模糊处理的中间步骤、只展示最终UV贴图的静态截图。但…

作者头像 李华
网站建设 2026/4/19 19:19:19

从硬件到软件:深入解析Arduino中断机制的设计哲学

从硬件到软件:深入解析Arduino中断机制的设计哲学 1. 中断机制的本质与价值 嵌入式系统的核心挑战之一是如何高效处理异步事件。想象一下,当你在阅读时突然接到电话——你会自然地标记当前阅读位置,接完电话后继续阅读。这种"打断-处理-…

作者头像 李华
网站建设 2026/4/18 8:00:18

LongCat-Image-Edit创意玩法:10种动物变身效果大展示

LongCat-Image-Edit创意玩法:10种动物变身效果大展示 1. 这不是滤镜,是“动物变形术” 你有没有试过把家里的宠物猫照片,一键变成威风凛凛的雪豹?或者让一张普通小狗的侧脸,瞬间化身为神话中的九尾狐?这不…

作者头像 李华
网站建设 2026/4/18 9:57:11

小白必看!圣光艺苑一键生成古典名画风格作品指南

小白必看!圣光艺苑一键生成古典名画风格作品指南 1. 这不是AI绘图,是走进19世纪画室的邀请函 你有没有试过,在手机上点几下,就让一幅《星空下的维纳斯》跃然屏上——不是像素拼贴,而是厚涂颜料在亚麻布上堆叠出的浮雕…

作者头像 李华