做 CAD Agent,究竟应该提供 MCP、Tools,还是让 AI 自己写代码?

0 阅读10分钟

如果要给 AI 做一个 CAD Agent,你会怎么做?最直接的办法,大概是把 CAD 的各种 API 包装成 Tools,再通过 MCP 暴露给 AI。

  • 画直线?给它一个 drawLine。
  • 画圆?给它一个 createCircle。
  • 修改图层?再来一个 setEntityLayer。

如果觉得功能不够丰富,那就继续加。听起来没什么问题。直到有一天,你发现自己已经开发了 500 个 Tools,而用户提出的需求还是有一半没法满足。恭喜,你可能不是在开发 CAD Agent,而是在给 AI 开发一个新的 CAD API 产品。

cad-agent.jpg

当然,这只是个玩笑。不过,随着 Codex、Claude Code、Cursor 等编程 Agent 越来越强大,我开始认真思考一个问题:

与其教 AI 如何调用成百上千个工具,为什么不直接让 AI 写代码来操作 CAD?

1. AI Agent 最近半年发生了什么变化?

过去,让 AI 修复一个 Bug,通常是让它阅读代码、分析原因,然后修改代码。现在,越来越成熟的编程 Agent 已经学会了另一套玩法。

  • 遇到 Bug?先写段代码分析日志。
  • 不知道问题怎么复现?写个测试程序。
  • 怀疑某个变量的值不对?加点调试代码,把运行过程扒个底朝天。
  • 修复之后,再写代码验证一下到底修好了没有。

AI 不再只是阅读代码、生成代码,它开始把代码当成解决问题的工具。这其实是一个很重要的变化。

  • 以前,我们主要考虑的是:怎么让 AI 调用软件提供的功能?
  • 现在,我们可以换个思路:能不能让 AI 自己编写程序,把软件提供的基础能力组合起来,解决具体问题?

对于 CAD 这样的复杂软件,我认为这可能是一条更值得探索的路线。

2. 给 AI 提供一堆 Tools,真的够用吗?

假设用户提出一个需求:

找出所有直径接近标准螺栓孔尺寸的圆,排除参考图层中的对象,按照所属零件分类,找出异常值,并生成一份报告。

我们可以给 CAD Agent 提供一系列 Tools:

  • 查询实体、获取实体属性
  • 获取块参照和图层信息
  • 创建选择集、修改实体
  • 计算几何关系、测量距离
  • 创建标注、导出报告

问题来了:

  • 如果现有 Tools 不支持用户指定的某种特殊分类规则,怎么办?继续开发一个 Tool?
  • 如果用户又要求根据零件的安装位置进行分类,是不是还要再开发一个?如果用户要求把异常孔位与另外一张图纸进行比较呢?

这么搞下去,开发者恐怕很快就会进入一个熟悉的循环:

  • 用户提出新需求,开发新 Tool;
  • 新 Tool 上线,用户提出更奇怪的需求;然后继续开发新 Tool。

最后,工具越来越多,Agent 的能力似乎也没增加多少。

这里需要说明,MCP 本身并没有问题。它解决的是如何以标准化方式向 AI 暴露外部能力的问题。真正值得讨论的是:复杂软件的所有能力,都有必要包装成一个个独立的 AI Tool 吗?

3. 为什么不直接让 AI 写代码?

换一种思路:假设 CAD 提供了一个 JavaScript 或 Python 脚本环境,暴露图纸数据库、实体查询、几何运算和属性修改等基础 API。AI 接到任务后,直接编写脚本。

比如,找出所有半径小于 5 的圆:

const circles = cad.getEntities({
  type: "CIRCLE"
});

const results = circles.filter(circle =>
  circle.radius < 5
);

return results.map(circle => ({
  handle: circle.handle,
  radius: circle.radius,
  layer: circle.layer
}));

以上是示意代码,实际 API 取决于 CAD 软件的实现。

这个例子很简单,用 Tools 也能完成。

但如果任务变成:分析所有圆的直径分布,识别疑似螺栓孔,排除特殊图层,根据块参照进行分类,再找出偏离常见尺寸的异常对象呢?

  • AI 可以自己编写遍历、筛选、统计和分类逻辑。
  • 第一次结果不对?修改脚本,再跑一次。
  • 发现图纸里有嵌套块?调整遍历逻辑。
  • 发现某种零件有特殊的命名规则?把规则加进程序。

开发者不必提前预测所有需求,更不必为了每一种需求开发一个专用 Tool。

软件提供能力,AI 编写逻辑。

我认为,这才是脚本语言对于 Agent 最有价值的地方。

4. 直接写脚本,还有三个意想不到的好处

除了灵活性,直接写代码还有三个非常实际的优势:省 Token、容易验证,以及可能更快。

第一,省 Token:别让 AI 给一万个实体挨个点名

假设一张图纸有 10 万个实体,用户想找出其中符合某些条件的对象。

如果 Agent 的工作方式是反复查询、获取结果、分析结果、再调用下一个 Tool,那么大量中间数据和调用记录可能会占据上下文。

如果 API 设计得不好,事情会更加热闹:AI 还没开始解决问题,Token 已经先忙得不可开交了。

而脚本可以直接在运行环境中遍历实体、执行计算和筛选,最后只把真正有价值的结果返回给模型。

10 万个实体中发现了 3 个异常?那就返回这 3 个异常,而不是让模型先认识另外 99,997 个实体。

当然,Tool 也可以支持批量查询,脚本也不是完全不消耗 Token。但对于需要大量数据处理的任务,让程序处理数据、让模型处理结果,通常更经济。

不要让 AI 亲自搬砖,让 AI 写个程序去搬砖。

第二,容易验证:别光说你改好了,拿证据来

AI 说自己找到了 20 个异常对象,你敢直接相信吗?如果这些对象涉及机械设计,可能还是先别急着庆祝。使用脚本,我们可以把验证逻辑直接写进程序。例如:

  • 检查筛选结果是否符合指定的几何条件。
  • 检查修改前后的实体数量是否合理。
  • 检查实体 Handle 是否有效。
  • 检查修改后属性是否符合预期。
  • 对重要结果执行断言或回归测试。

还可以把分析和修改分成两步:先运行只读脚本生成修改清单,验证通过后,再执行真正的修改。如果程序发现结果不符合预期,Agent 可以查看错误信息和中间结果,修改代码,再运行一次。

更重要的是,验证通过的脚本可以保存下来重复执行。对于企业常见的图纸检查规则,这甚至能逐步沉淀成可复用的自动化程序。

相比之下,如果整个过程只是由一连串工具调用和模型决策组成,当然也可以验证,但通常需要额外设计相应的校验机制。

AI 可以犯错,但至少应该让它有机会用程序证明自己没错。

第三,执行更快:少开几次会,多干几件事

假设你要处理 5,000 个实体。一种做法是让 AI 不断调用工具,每次拿到结果后再决定下一步。另一种做法是让 AI 写好循环和筛选逻辑,然后一次性交给脚本引擎执行。

你觉得哪种方式更可能快?通常是后者。原因不仅在于代码执行速度,还在于它减少了模型参与每一步操作的需要。每一轮模型推理、工具调用和结果返回,都可能带来额外延迟。如果整个任务需要几十轮甚至上百轮串行交互,这些开销加起来就很可观。而循环、条件判断、几何计算和批量操作,完全可以交给程序在运行时完成。

当然,画一条直线时,直接调用一个 Tool 可能更简单、更快。没必要为了画条线,先写一份《直线绘制自动化程序设计方案》。

脚本的优势主要体现在复杂任务、大量数据处理和需要多步计算的场景。

让模型负责思考,让程序负责执行。别让一个价值不菲的大脑,整天忙着判断下一个圆该不该入选。

5. MCP 和 Tools 就没用了?

当然不是。我并不认为未来的软件 Agent 应该抛弃 MCP 和 Tools。它们解决的是不同层面的问题。

  • MCP: 适合连接外部系统,标准化地暴露远程能力。
  • Tools: 适合打开文件、导出图纸、请求用户确认等边界清晰的操作。
  • 脚本: 适合组合 API,完成复杂的分析、计算和自动化任务。

它们完全可以共存。

例如,CAD Agent 可以通过 Tool 打开图纸,通过 MCP 查询外部零件数据库,再通过 JavaScript 分析图纸中的孔位与零件数据,最后生成修改方案。

这种架构既保留了工具调用的便利,也给 AI 留出了足够的自由度。

当然,脚本执行环境必须做好安全控制,包括限制文件和网络访问、设置执行时间上限、管理修改权限,以及提供事务和撤销机制。让 AI 写代码,不代表应该给它一台没有刹车的推土机。

6. 这不只是 CAD 的问题

我认为,同样的思路也适用于 GIS、3D 建模、仿真分析,甚至各种办公软件。

这些软件往往拥有复杂的数据模型和大量基础操作,但开发者不可能预先实现用户未来可能提出的每一种需求。

与其不断为 AI 增加专用工具,不如提供一套设计良好、文档完整、适合 AI 使用的 API,再配上一个可靠的脚本执行环境。

  • 用户想要一种新的分析方法?AI 写代码。
  • 用户想要一种新的筛选规则?AI 写代码。
  • 用户想把十几种操作组合成一个工作流?还是 AI 写代码。

软件厂商不必为每一种需求开发新功能,AI 也不必被局限在预先设计好的工具清单里。

当然,这并不意味着 AI 写出来的程序就一定正确。涉及工程设计和重要数据修改时,仍然需要适当的验证与人工审核。

但至少,我们给了 AI 一种更通用的方式去尝试解决问题。

结语:别只给 AI 一把锤子,给它一个工具箱和一张工作台

过去,我们习惯于问:为了让 AI 使用我的软件,我应该给它提供哪些 Tools?现在,我觉得更值得问的是:

为了让 AI 自己解决问题,我应该给它提供什么样的编程环境?

从最近编程 Agent 的发展来看,代码正在成为一种通用的问题解决工具。它不只是最终交付物,也是分析问题、验证假设、处理数据和自动化操作的手段。

对于 CAD Agent,我更看好这样的路线:提供 JavaScript 或 Python 这样的动态语言,暴露足够完整的 CAD API,让 AI 自己编写、执行、调试和迭代代码。

MCP 和 Tools 依然有价值,但它们不应该成为 AI 使用复杂软件的唯一方式。

毕竟,我们不可能提前开发出用户需要的所有 CAD 功能。

与其不断给 AI 增加新工具,不如让 AI 学会用现有工具编写程序,创造出解决新问题的方法。

对软件开发者来说,这可能意味着少写一些重复的胶水代码。

对 AI 来说,这意味着它终于不必每次遇到新问题,都先举手问一句:

“请问,有没有一个 Tool 专门干这个?”