AutoCAD-CLR:让智能体真正会用 AutoCAD
AutoCAD-CLR 是一套专为 AI 智能体设计的 AutoCAD 接口:一套命令,两种接入方式——命令行 `acadclr` 和 MCP server `acadclr mcp`,让智能体能够可控、可验证、可批量地读写图纸。
目录
项目地址:https://github.com/CHMOSE023/AutoCAD-CLR
一、为什么需要它
在上一篇《智能体(Agent)入门》里我们说过:智能体 = 大模型 + 工具 + 记忆 + 循环,工具的设计决定了智能体能做什么。想让智能体进入 CAD,就得先给它一套好用的“CAD 工具”。
最直接的办法是让模型写 AutoLISP 或 .NET 代码,但在真实项目里,这条路有几个绕不开的问题:
- 不可控:一段 LISP 能执行任意代码,模型漏写一个括号,AutoCAD 命令行就一直等着续行;改坏了图也没有回头路。
- 不可验证:智能体画完房间,面积对了,位置对不对?没有结构化的结果,它只能猜。
- 不可批量:一张平面图几百个图元,逐条往返又慢,中途失败还会留下半成品。
- 工具膨胀:另一种做法是给每项能力包一个 MCP 工具。我们之前的 AutoCad_MCP 就有 85 个工具,每个都带一份参数说明,光工具目录就占掉大量上下文,每加一项能力还得多写一段映射代码。
AutoCAD-CLR 是重新设计后的答案:用少量通用动词,加上路径寻址、原子批处理和按需查询的 help,覆盖同样的能力。 设计思路参考了 OfficeCLI。
二、它是什么
先说清楚一点:AutoCAD-CLR 不是给人用的。人在 AutoCAD 里有鼠标、有界面,手敲 acadclr add /model --type line … 反而比直接画线麻烦。它的调用者只有智能体——命令写法、返回结构、错误提示、帮助查询,全都按“模型怎么读、怎么写、怎么出错、怎么自己改正”来设计。
它提供两种接入方式,能力完全一样:
命令行 acadclr | MCP server acadclr mcp | |
|---|---|---|
| 适合谁 | 能执行终端命令的智能体(Claude Code、Codex 等) | 支持 MCP 的客户端,以及自己开发的智能体 |
| 怎么用 | 配一份 SKILL.md 说明书 | 在客户端里添加一个 MCP 服务 |
| 能力 | 全部命令 | 全部命令(工具就是命令) |
同一个操作,两种写法:
acadclr add /model --type line --prop start=0,0 --prop end=5000,0 --prop layer=WALL
add {"parent":"/model","type":"line","props":{"start":"0,0","end":"5000,0","layer":"WALL"}}
MCP 的工具就是命令:名字、参数、说明、校验、错误提示、日志完全一致,不存在“只有命令行有”或“只有 MCP 有”的功能。
三、一个例子:画两个房间,并自己检查
下面是智能体使用 AutoCAD-CLR 完成一个小任务的过程,还是熟悉的“思考—行动—观察”循环:
目标:画一个 6m×4m 的客厅和一个 3m×4m 的卧室,两间紧挨着
思考:先建图层,再画两个闭合多段线,合并成一次批处理提交
行动:acadclr batch --input rooms.json
观察:3 条操作全部成功,返回两个房间的句柄
思考:检查两个房间有没有画重
行动:acadclr check overlap "polyline[layer=ROOM]"
观察:FAIL,卧室和客厅有重叠——卧室起点写错了
思考:把卧室向右移到客厅外侧
行动:acadclr set <卧室句柄> --prop move=500,0
观察:成功
思考:确认两间房是相邻而不是分开
行动:acadclr check adjacent <客厅句柄> --prop with=<卧室句柄>
观察:PASS
思考:截图看一眼,再核对面积
行动:acadclr view capture;acadclr measure area "polyline[layer=ROOM]"
观察:图形正确,面积与目标一致,任务完成
关键在于第二步和第四步:智能体不只是“画”,还能用结构化的结果“验证自己画得对不对”,发现错误后自己修正,而不是交给你一张需要人工逐个检查的图。
四、四个核心设计
1. 少量动词 + 路径寻址
命令只有二十几个,最常用的是 get query add set remove edit batch。图纸里的一切都用路径定位:
/model 模型空间
/model/entity[@handle=2A3] 按句柄定位,增删实体后不会漂移
/layers /layer[@name=WALL]
/blocks /linetypes /layouts /xrefs /sysvars /documents
查找图元则借用了网页 CSS 选择器的写法:
| 写法 | 含义 |
|---|---|
line[layer=WALL][length>=3000] | WALL 图层上长度不小于 3000 的直线 |
text[text~=客厅] | 内容包含“客厅”的单行文字 |
insert[name=TREE] | 所有 TREE 图块参照 |
entity[inside=0,0;6000,4000] | 完全落在这个窗口里的实体 |
xref[status=filenotfound] | 丢失的外部参照 |
新增一种图元或属性只需改一处类型定义(Schema),命令行和 MCP 同时可用,不用再写映射代码。
2. 原子批处理
三条以上的修改用 batch:一次提交,任一条失败整批回滚,图纸要么全部改完,要么原样不动。后面的操作可以用 $N 引用前面操作的结果:
[
{"command":"add","parent":"/layers","type":"layer","props":{"name":"WALL","color":1,"lineWeight":0.5}},
{"command":"add","parent":"/model","type":"polyline","props":{"points":"0,0;6000,0;6000,4000;0,4000","closed":true,"layer":"WALL"}},
{"command":"add","parent":"/model","from":"$1","props":{"move":"7000,0"}},
{"command":"check","action":"overlap","selector":"polyline[layer=WALL]"}
]
第 3 条的 "from":"$1" 表示“复制第 1 条画出的那个多段线,再向右移 7000”。对智能体来说,这意味着它永远不用处理“做到一半失败”的残局。
3. 按需查询的 help
智能体不需要一开始就背下所有类型和属性,遇到不确定的就问:
acadclr help # 命令、路径语法、类型列表
acadclr help polyline # 某个类型的全部属性和示例
acadclr help edit trim # 某个编辑动作的参数
所以 MCP 的工具说明都很短,详细内容靠 help 即时获取,比 85 个带完整参数表的工具省下大量上下文。参数写错时,返回的错误会附带修正建议,智能体可以据此自己改正,不需要人介入。
4. 不止画对,还要验证对
面积对不代表位置对。 除了绘图,AutoCAD-CLR 还提供测量和空间校验:
| 命令 | 作用 |
|---|---|
measure area / length / distance | 面积、周长、长度、两点距离 |
measure convert | 单位换算,例如 3.6 m → mm |
check overlap | 房间之间有没有画重(共边不算) |
check inside | 有没有超出外轮廓,各方向超出多少 |
check adjacent | 两个房间是否相邻,可指定墙厚间隙 |
view capture | 截图返回,让智能体自己“看一眼” |
校验结果直接给出 PASS / FAIL,正好成为智能体循环里“观察”这一步的依据。
五、实时模式与离线模式
| 实时模式 | 离线模式 | |
|---|---|---|
| 工作方式 | 插件加载到正在运行的 AutoCAD 里,操作当前打开的图纸 | 加 --dwg plan.dwg,不打开 AutoCAD 界面,直接读写 DWG 文件 |
| 典型场景 | 人和智能体一起看着图纸协作 | 批量处理一批图纸、后台自动出图 |
| 特有能力 | 截图、切换文档、撤销与回滚 | 修改自动写回并生成 .bak,保持文件原有的 DWG 格式 |
| 速度 | 快 | 每次调用约 2–5 秒,大量操作请合并成一次 batch |
两种模式共用同一套执行引擎,命令和返回结果完全一致。离线模式底层使用 AutoCAD 自带的 accoreconsole,需要本机装有 AutoCAD 2014–2024。
六、安全:给智能体递刀,先装刀鞘
让智能体操作生产图纸,安全不能靠“它应该不会乱来”。AutoCAD-CLR 内置了几层保护,其中的开关由人在 AutoCAD 里切换:
- 只读模式:在 AutoCAD 里执行
ACADCLR_READONLY,拒绝一切修改,查询、测量、截图、打印照常。开启后远程请求无法再关闭它。 - LISP 开关:
lisp/script能执行任意代码,MCP 默认不开放,需要显式加--allow-lisp;AutoCAD 里也可以用ACADCLR_LISP关闭。 - 写前备份:每张图在本次会话里第一次被修改前,先把磁盘上的版本复制到备份目录。
- 操作日志:每次调用都记录来源、目标、命令、结果和耗时,
acadclr log 50即可查看。 - 撤销与回滚:每次修改是 AutoCAD 里的一个撤销步;试探性修改前先
mark,不满意就rollback。 - 只在本机:命名管道只允许当前用户连接;MCP HTTP 只监听 127.0.0.1,可选访问令牌。
需要说明的是,这些措施防的是误操作,而不是恶意绕过。
七、上手步骤
1. 构建(需要 .NET SDK 8 或更高版本):
dotnet build AutoCADCLR.slnx -c Release
2. 加载插件:在 AutoCAD「选项 → 文件 → 受信任的位置」里添加 bin\Release,然后执行 NETLOAD 加载 AcadClr.Plugin.dll。在终端运行 acadclr status 确认已连接。
3. 接入智能体,二选一:
- 命令行:把仓库里的
SKILL.md交给智能体(放进它的 skills 目录,或写进系统提示)。 - MCP:在客户端配置里添加:
{
"mcpServers": {
"acadclr": { "type": "stdio", "command": "D:\\AutoCADCLR\\bin\\Release\\acadclr.exe", "args": ["mcp"] }
}
}
想让多个客户端共用一个常驻服务,可以先运行 acadclr mcp --http(或在 AutoCAD 里执行 ACADCLR_MCP),再把地址配置为 http://127.0.0.1:7140/mcp。
4. 不想开 AutoCAD? 直接离线:
acadclr create D:/work/plan.dwg
acadclr batch --dwg D:/work/plan.dwg --input plan.json
之后就可以直接对智能体说“把所有标注图层改成红色”“检查这层平面有没有房间画重”“把这批图纸的丢失参照改到新路径”。
八、局限与路线图
- 目前支持 AutoCAD 2014–2024,暂不支持 2025 及以上版本(计划通过插件多目标编译支持)。
- 空间校验按包围盒判定,矩形房间很准,斜放或异形实体可能误报。
- 布局、视口、外部参照的增删改属于数据库级操作,包含这类操作的批处理不支持回滚。
- MCP 暂不支持长耗时操作的进度推送,结果一次返回。
- 计划中的
dump:把现有图纸导出成可重放的批处理 JSON。
用过旧版 AutoCad_MCP 的朋友,85 个旧工具的等价写法都整理在仓库的迁移对照表 docs/migrate-from-autocad-mcp.md 里。
总结
让智能体操作 CAD,难点不在“能不能画出来”,而在可控、可验证、可批量。AutoCAD-CLR 用少量通用命令、路径寻址、原子批处理和测量校验,把 AutoCAD 变成智能体可以放心使用的工具:画错了能自己发现,批量改能一次成功,出了问题有备份和日志可查。
如果你正在尝试让 AI 处理图纸,欢迎试用,也欢迎在 GitHub 上提 issue:https://github.com/CHMOSE023/AutoCAD-CLR