迈智数创建筑 AI · Coding

试试搜索

↑↓ 选择Enter 打开Esc 关闭

AutoCAD-CLR:让智能体真正会用 AutoCAD

AutoCAD-CLR 是一套专为 AI 智能体设计的 AutoCAD 接口:一套命令,两种接入方式——命令行 `acadclr` 和 MCP server `acadclr mcp`,让智能体能够可控、可验证、可批量地读写图纸。

下载 .md
目录
  1. 一、为什么需要它
  2. 二、它是什么
  3. 三、一个例子:画两个房间,并自己检查
  4. 四、四个核心设计
  5. 1. 少量动词 + 路径寻址
  6. 2. 原子批处理
  7. 3. 按需查询的 help
  8. 4. 不止画对,还要验证对
  9. 五、实时模式与离线模式
  10. 六、安全:给智能体递刀,先装刀鞘
  11. 七、上手步骤
  12. 八、局限与路线图
  13. 总结

项目地址: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 … 反而比直接画线麻烦。它的调用者只有智能体——命令写法、返回结构、错误提示、帮助查询,全都按“模型怎么读、怎么写、怎么出错、怎么自己改正”来设计。

它提供两种接入方式,能力完全一样:

命令行 acadclrMCP 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