☰
OpenClaw 配 TaoToken:用 Python 批量生成 AutoCAD SCR 脚本的 CLI-Anything 工作流
2026/9/28 4:05:07 网站建设 项目流程

1. 为什么我要把 OpenClaw 接到 AutoCAD 上

如果你平时用 OpenClaw 处理自然语言任务,又经常需要批量出 CAD 图纸,大概率会遇到一个尴尬:OpenClaw 能理解「画一个 10 米 × 6 米、墙厚 240、中间开个门」这种描述,但它没法直接点 AutoCAD 的按钮。AutoCAD 是 GUI 软件,OpenClaw 只能调 shell、调脚本、调命令,中间缺一层「把 CAD 操作翻译成命令行」的桥。

我试过几种方案,最后稳定下来的链路是:OpenClaw 负责理解任务并输出结构化参数,CLI-Anything 负责把参数注册成可调用工具,Python 负责把参数渲染成 AutoCAD 能吃的 SCR 脚本,最后用accoreconsole.exe无界面执行出 DWG。整条链路里,TaoToken 的作用是统一 Key 和 API 通道——OpenClaw 侧不用再为每个模型单独配一堆环境变量,一个 Key 走完全部推理请求。

这套工作流适合谁:需要批量生成标准图元(房间轮廓、简单户型、设备布置框)的工程辅助场景;已经会用 Python 但不想手写一堆 DXF 的开发者;以及想把自然语言出图接进自己 Agent 流水线的人。不适合直接拿来做复杂施工图,SCR 的能力边界就在那里,复杂图层和标注建议后面再上 COM。

下面按「先跑通最小闭环,再补配置细节」的顺序写,每一步都能复制执行。

2. TaoToken 前置:统一 Key 与 API 通道

OpenClaw 在推理阶段要调模型,如果每个模型都单独配 endpoint 和 key,配置文件会迅速膨胀。TaoToken 提供的是统一入口:你拿一个 Key,通过https://taotoken.net/api这个 API 地址发请求,模型侧的路由由它处理。对 OpenClaw 来说,只需要在配置里写一个 provider 就行。

先拿 Key。打开控制台页面:

https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=console

登录后在 API Keys 页面创建一个新 Key,复制出来。这个 Key 后面会写进 OpenClaw 的config.toml。如果你还没决定用哪个模型,可以先去模型对话页面试一下返回是否正常:

https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=model-chat

接入文档在这里,遇到字段对不上时对照查:

https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc

注意:API 地址统一用https://taotoken.net/api,不要在后面拼多余的路径,OpenClaw 的 provider 配置里 base_url 填到这个层级即可。

Key 的管理页面单独放一下,方便你后面轮换:

https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api-keys

如果你打算长期跑编码类 Agent 任务,Coding Plan 页面可以看下额度策略,避免批量出图时把推理额度打满:

https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding-plan

3. 可复制配置:config.toml 与 settings.json 骨架

OpenClaw 的配置分两块:一块是模型 provider(config.toml),一块是工具注册(settings.json)。先建目录结构,后面所有路径都基于这个根目录:

project/ ├── openclaw/ │ ├── config.toml │ └── settings.json ├── cli-tools/ │ └── cad_draw.py ├── scripts/ │ └── room.scr └── output/ └── room.dwg

3.1 config.toml:把 TaoToken 写成 provider

# openclaw/config.toml [provider.taotoken] type = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的TaoTokenKey" model = "claude-sonnet-4-20250514" timeout = 120 [agent] name = "cad-agent" provider = "taotoken" system_prompt = """ 你是一个 CAD 参数提取助手。用户用自然语言描述图形时, 你只输出 JSON,字段包括 width、height、wall、door。 单位统一为毫米,不要输出任何解释文字。 """ [tools] config_file = "settings.json"

这里type用openai-compatible是因为 TaoToken 的 API 走标准 chat completions 格式,OpenClaw 侧不需要额外适配层。model字段按你实际要用的模型名填,改这一行就能切换。

3.2 settings.json:注册 CLI-Anything 工具

CLI-Anything 的核心作用是把一个命令行程序注册成 OpenClaw 可调用的 tool。注册格式如下:

{ "tools": [ { "name": "cad_draw", "description": "根据 JSON 参数生成 AutoCAD SCR 脚本并执行出图", "command": "python", "args": ["cli-tools/cad_draw.py", "$INPUT"], "input_schema": { "type": "object", "properties": { "width": { "type": "integer" }, "height": { "type": "integer" }, "wall": { "type": "integer" }, "door": { "type": "boolean" } }, "required": ["width", "height"] } } ] }

$INPUT是 CLI-Anything 的占位符,运行时会被替换成 OpenClaw 输出的 JSON 文件路径。这样 OpenClaw 推理完参数后,直接调cad_draw,不需要它自己拼命令行。

3.3 cad_draw.py:JSON 转 SCR 并执行

# cli-tools/cad_draw.py import json import subprocess import sys from pathlib import Path def build_scr(data: dict) -> str: w = data["width"] h = data["height"] wall = data.get("wall", 240) door = data.get("door", False) lines = [ "RECTANG", f"0,0", f"{w},{h}", "OFFSET", str(wall), f"0,0", f"{w},{h}", "", ] if door: lines += [ "LINE", f"{w//2},0", f"{w//2},{wall}", "", ] lines += [ "SAVEAS", "output/room.dwg", "", ] return "\n".join(lines) def main(): input_path = Path(sys.argv[1]) data = json.loads(input_path.read_text(encoding="utf-8")) scr_path = Path("scripts/room.scr") scr_path.parent.mkdir(parents=True, exist_ok=True) scr_path.write_text(build_scr(data), encoding="utf-8") result = subprocess.run( ["accoreconsole.exe", "/s", str(scr_path)], capture_output=True, text=True, ) print(result.stdout) if result.returncode != 0: print(result.stderr, file=sys.stderr) sys.exit(result.returncode) if __name__ == "__main__": main()

SCR 模板片段的关键点:RECTANG后面跟两个角点坐标,OFFSET后面跟偏移距离和对象,SAVEAS指定输出路径。每条命令后跟一个空行,accoreconsole靠空行分隔命令。门的位置这里简化成中线开洞,实际项目里你可以按参数算出门洞坐标。

4. 验证请求:一条命令确认脚本被加载执行

配置写完后,先别急着让 OpenClaw 全自动跑。手动造一个 JSON 输入,直接调cad_draw.py,确认 SCR 生成和 AutoCAD 执行这两步是通的:

echo '{"width": 10000, "height": 6000, "wall": 240, "door": true}' > /tmp/room.json python cli-tools/cad_draw.py /tmp/room.json

执行后检查两个东西:scripts/room.scr是否生成,内容是否包含RECTANG和SAVEAS;output/room.dwg是否出现。如果 DWG 文件生成了,说明accoreconsole.exe被正确调用,SCR 被加载执行。

再验证 OpenClaw 侧的调用链。启动 OpenClaw 后,输入一句自然语言:

画一个 10 米 × 6 米房间,墙厚 240mm,中间一个门

OpenClaw 应该输出类似这样的 JSON:

{ "width": 10000, "height": 6000, "wall": 240, "door": true }

然后自动触发cad_draw工具。你可以在 OpenClaw 的日志里看到工具调用记录,确认$INPUT被替换成了实际的 JSON 路径。这一步跑通,整条链路就闭环了。

提示:accoreconsole.exe的路径如果不在系统 PATH 里,需要在cad_draw.py里写绝对路径,比如C:/Program Files/Autodesk/AutoCAD 2024/accoreconsole.exe。版本号按你装的改。

5. 本篇常见错排查

5.1 accoreconsole 报「无法打开脚本文件」

路径问题占九成。accoreconsole.exe /s后面跟的路径如果是相对路径,它按自己的当前工作目录解析,不是按你 Python 脚本的目录。解决办法是在cad_draw.py里把scr_path转成绝对路径:

scr_path = Path("scripts/room.scr").resolve()

5.2 SCR 执行了但 DWG 没生成

检查SAVEAS后面的路径。AutoCAD 的SAVEAS如果只写文件名,会存到它自己的默认目录。写成output/room.dwg这种相对路径时,同样受工作目录影响。稳妥做法是在 SCR 里写绝对路径,或者在调用accoreconsole时用cwd参数指定工作目录:

subprocess.run( ["accoreconsole.exe", "/s", str(scr_path)], cwd=str(Path.cwd()), capture_output=True, text=True, )

5.3 OpenClaw 不调用 cad_draw 工具

先看settings.json里的command和args是否写对。command是python时,确保运行 OpenClaw 的环境里python命令可用。如果用的是虚拟环境,command要写成虚拟环境里的 python 绝对路径。另外input_schema的required字段要和 OpenClaw 输出的 JSON 对得上,缺字段会导致工具调用被跳过。

5.4 TaoToken 请求返回 401

Key 没填对,或者base_url写成了https://taotoken.net/api/带了尾部斜杠。OpenClaw 的 openai-compatible provider 对尾部斜杠敏感,去掉它。Key 本身如果刚创建,确认复制时没有带空格。

5.5 SCR 里中文注释导致执行中断

accoreconsole对 SCR 文件的编码有要求,中文注释在某些版本下会解析失败。SCR 里只写命令和坐标,注释全部放到 Python 侧。如果确实需要标注文字,用TEXT命令配合英文或数字。

6. 把链路固定下来之后

最小闭环跑通后,你可以把cad_draw.py里的 SCR 模板抽成独立文件,按图元类型分模板,OpenClaw 输出里加一个type字段来选模板。这样从「画房间」扩展到「画设备框」「画管线走向」时,不用改 Python 主逻辑,只加模板文件。

工具注册这块,CLI-Anything 的settings.json支持多个 tool,你可以把cad_draw、cad_export、cad_batch分别注册,OpenClaw 按任务类型自己选。批量出图时,让 OpenClaw 输出一个 JSON 数组,cad_draw.py里循环处理,每个元素生成一个 SCR 并执行,输出文件按索引命名。

长期跑编码和 Agent 任务的话,Coding Plan 的额度比按次调用更划算,尤其是批量出图这种会连续触发推理的场景:

https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding-plan

如果你更习惯在 Claude Code 这类环境里做接入调试,Anthropic 兼容通道的配置方式在文档里有单独说明:

https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=claude-code-anthropic

最后留一个我踩过的坑:accoreconsole.exe每次启动有固定开销,批量出图时不要每个图元起一个进程,把多个 SCR 合并成一个脚本文件,用SCRIPT命令串联执行,速度会快很多。SCR 里用FILEDIA设成 0 可以关掉保存对话框,避免无界面模式下卡住。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询