# AutoCAD-CLR：让智能体真正会用 AutoCAD

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

> 原文：[AutoCAD-CLR：让智能体真正会用 AutoCAD](https://qmbim.com/articles/12896979-04d7-47d1-9fbe-3eca99ec9976)
> 作者：迈智数创 · 发布于 2026-09-29
> 转载请注明出处并保留原文链接。

---

项目地址：<https://github.com/CHMOSE023/AutoCAD-CLR>

## 一、为什么需要它

在上一篇《智能体（Agent）入门》里我们说过：智能体 = 大模型 + 工具 + 记忆 + 循环，**工具的设计决定了智能体能做什么**。想让智能体进入 CAD，就得先给它一套好用的“CAD 工具”。

最直接的办法是让模型写 AutoLISP 或 .NET 代码，但在真实项目里，这条路有几个绕不开的问题：

- **不可控**：一段 LISP 能执行任意代码，模型漏写一个括号，AutoCAD 命令行就一直等着续行；改坏了图也没有回头路。
- **不可验证**：智能体画完房间，面积对了，位置对不对？没有结构化的结果，它只能猜。
- **不可批量**：一张平面图几百个图元，逐条往返又慢，中途失败还会留下半成品。
- **工具膨胀**：另一种做法是给每项能力包一个 MCP 工具。我们之前的 AutoCad_MCP 就有 85 个工具，每个都带一份参数说明，光工具目录就占掉大量上下文，每加一项能力还得多写一段映射代码。

AutoCAD-CLR 是重新设计后的答案：**用少量通用动词，加上路径寻址、原子批处理和按需查询的 help，覆盖同样的能力。** 设计思路参考了 [OfficeCLI](https://github.com/iOfficeAI/OfficeCLI)。

## 二、它是什么

先说清楚一点：**AutoCAD-CLR 不是给人用的**。人在 AutoCAD 里有鼠标、有界面，手敲 `acadclr add /model --type line …` 反而比直接画线麻烦。它的调用者只有智能体——命令写法、返回结构、错误提示、帮助查询，全都按“模型怎么读、怎么写、怎么出错、怎么自己改正”来设计。

它提供两种接入方式，能力完全一样：

| | 命令行 `acadclr` | MCP server `acadclr mcp` |
|---|---|---|
| 适合谁 | 能执行终端命令的智能体（Claude Code、Codex 等） | 支持 MCP 的客户端，以及自己开发的智能体 |
| 怎么用 | 配一份 `SKILL.md` 说明书 | 在客户端里添加一个 MCP 服务 |
| 能力 | 全部命令 | 全部命令（工具就是命令） |

同一个操作，两种写法：

```bash
acadclr add /model --type line --prop start=0,0 --prop end=5000,0 --prop layer=WALL
```

```json
add {"parent":"/model","type":"line","props":{"start":"0,0","end":"5000,0","layer":"WALL"}}
```

**MCP 的工具就是命令**：名字、参数、说明、校验、错误提示、日志完全一致，不存在“只有命令行有”或“只有 MCP 有”的功能。

## 三、一个例子：画两个房间，并自己检查

下面是智能体使用 AutoCAD-CLR 完成一个小任务的过程，还是熟悉的“思考—行动—观察”循环：

```text
目标：画一个 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`。图纸里的一切都用路径定位：

```text
/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` 引用前面操作的结果：

```json
[
  {"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

智能体不需要一开始就背下所有类型和属性，遇到不确定的就问：

```bash
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 或更高版本）：

```bash
dotnet build AutoCADCLR.slnx -c Release
```

**2. 加载插件**：在 AutoCAD「选项 → 文件 → 受信任的位置」里添加 `bin\Release`，然后执行 `NETLOAD` 加载 `AcadClr.Plugin.dll`。在终端运行 `acadclr status` 确认已连接。

**3. 接入智能体**，二选一：

- **命令行**：把仓库里的 `SKILL.md` 交给智能体（放进它的 skills 目录，或写进系统提示）。
- **MCP**：在客户端配置里添加：

```json
{
  "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？** 直接离线：

```bash
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](https://github.com/CHMOSE023/AutoCad_MCP) 的朋友，85 个旧工具的等价写法都整理在仓库的迁移对照表 `docs/migrate-from-autocad-mcp.md` 里。

## 总结

让智能体操作 CAD，难点不在“能不能画出来”，而在**可控、可验证、可批量**。AutoCAD-CLR 用少量通用命令、路径寻址、原子批处理和测量校验，把 AutoCAD 变成智能体可以放心使用的工具：画错了能自己发现，批量改能一次成功，出了问题有备份和日志可查。

如果你正在尝试让 AI 处理图纸，欢迎试用，也欢迎在 GitHub 上提 issue：<https://github.com/CHMOSE023/AutoCAD-CLR>
