每日热门skill-激光切割厂最怕的“手动描图“环节,被这个 OpenClaw Skill 干掉了,create-dxf 深度解析 1. 激光切割厂那个崩溃的下午create-dxf 到底能做什么先还原一个我亲眼见过的场景。一个做钣金加工的老板下午三点收到客户微信“这批机箱面板长 480 宽 260四个角倒 R5 圆角中间开 6 个 M4 的孔图纸要 DXF 格式明天早上要。”他打开 AutoCAD新建文件、设图层、画矩形、倒圆角、画 6 个圆、标尺寸、导 DXF一套下来两个小时没了。更崩溃的是客户半夜又改一句“孔距从 120 改成 115”全部重来。制造业的人都懂这种痛图纸本身不难但画图这件事又慢又重复还特别容易出错。今天要聊的 create-dxf 这个 OpenClaw Skill就是冲着这个痛点来的。一句话说清楚让 AI 把参数变成一张规范的 DXF 工程图纸。你给它一个带参数的文档Word、Excel甚至一段自然语言描述它帮你生成一张可以直接丢给激光切割机、钣金加工厂、CNC 设备的 DXF 图纸。为什么是 DXF 而不是别的格式DXF 全称 Drawing Exchange Format是 Autodesk 在 1982 年推出的开放图形交换格式。它跟 AutoCAD 默认的 DWG 格式最大的区别就一个字开。DWG 是私有格式商业软件想读写得给商业库交授权费DXF 是开放的、公开的、任何人都能读写的文本格式。结果就是激光切割机、钣金折弯机、等离子切割、数控冲床、广告雕刻机全世界的加工设备几乎都认 DXF。你在搜狗百科里查“钣金加工激光切割机”会看到一句关键描述“操作软件兼容 NC 文档、DXF、PLT、AI 等格式在电脑上画出任何平面图像。”DXF 就是制造业设备圈的通用语言。create-dxf 的技术底子其实很朴素Python ezdxf。ezdxf 是目前 Python 生态里处理 DXF 文件最主流的库创建、读取、修改、批量处理全都支持。用 ezdxf 画一个圆代码就这么短import ezdxf doc ezdxf.new(dxfversionR2010) msp doc.modelspace() msp.add_circle(center(0, 0), radius10) doc.saveas(my_drawing.dxf)四行代码一个能直接被 AutoCAD 打开的 DXF 文件就出来了。create-dxf 的核心思路就是与其让人在 CAD 软件里点鼠标不如让 AI 写代码来画图。CAD 绘图本质上是精确的参数化几何操作画矩形、倒圆角、阵列打孔、标尺寸每一项都有明确的数学定义而“把参数翻译成几何操作”恰好是代码和 AI 最擅长的事。过去这条路没人走是因为“写代码画图”有门槛你得懂 Python、懂 ezdxf 的 API、懂 DXF 的图层和实体结构。现在 AI 把这道门槛抹平了你只需要用自然语言说“画一个 480×260 的矩形四个角倒 R5 圆角”AI 负责把这句话翻译成 ezdxf 代码跑出 DXF 文件。它适合谁钣金加工厂、激光切割厂的工程师批量参数化图纸是刚需工业设计师、机械制图人员快速原型验证做非标定制的小团队图纸结构简单但量大需要把 Excel/Word 参数转成可加工图纸的人。不太适合的场景也要说清楚高精度、多约束的复杂装配体那是 SolidWorks/CATIA 这类三维参数化软件的强项DXF 的二维能力覆盖不了需要精细人工调优的复杂曲面AI 生成的是规范几何不是艺术创作。一句话总结create-dxf 解决的是“简单重复的 2D 图纸”不是“复杂精密的三维设计”它不替代工程师它是帮工程师从重复劳动里解放出来。2. 前置准备TaoToken 接入与 OpenClaw 环境搭建在真正跑 create-dxf 之前得先把底层模型通道打通。OpenClaw 这类 Agent 框架本身不生产模型能力它需要一个稳定的 API 入口来驱动代码生成。我实测下来用 TaoToken 做模型接入是比较省心的路径它的接口兼容主流协议配置一次就能在多个 Agent 工具里复用。先说清楚 TaoToken 是什么它是一个大模型 API 聚合服务提供统一的 Base URL 和 Key让你在 OpenClaw、Cline、Claude Code 这些工具里都能用同一套凭证调用模型。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点是 https://taotoken.net/api 注意 API 地址后面不加任何 UTM 参数保持干净。第一步拿到你的 API Key。打开 https://taotoken.net/api-keys 登录后创建一个新的 Key复制保存好。这个 Key 就是后面所有配置里的核心凭证泄露了要立刻吊销重建。第二步确认你要用的模型 ID。create-dxf 这类 Skill 主要靠模型生成 Python 代码所以选一个代码能力强的模型比较合适。在模型对话页面 https://taotoken.net/model-chat 可以先测试一下模型响应是否正常输入一句“用 ezdxf 画一个 100×50 的矩形”看看返回质量。第三步安装 OpenClaw 运行环境。OpenClaw 本身是一个 Agent 框架你需要先把它跑起来。假设你已经装好了 Python 3.10 和 Node.js 环境OpenClaw 的安装通常通过包管理器完成。这里不展开框架本身的安装细节重点放在 Skill 的接入上。第四步安装 create-dxf 依赖。create-dxf 底层依赖 ezdxf所以你的 Python 环境里必须有这个库。打开终端执行pip install ezdxf如果你用的是虚拟环境先激活再装。装完后验证一下python -c import ezdxf; print(ezdxf.__version__)能打印出版本号就说明依赖到位了。ezdxf 目前主流版本在 1.x建议用 1.1 以上对 DXF R2010 及以上版本支持更完整。第五步把 TaoToken 的配置写进 OpenClaw。OpenClaw 的模型配置通常放在一个 settings 文件里路径根据你的安装方式不同常见的是~/.openclaw/settings.json或者项目根目录下的config.toml。下面给一个 JSON 格式的配置片段你可以直接复制修改{ model_provider: { base_url: https://taotoken.net/api, api_key: sk-你的TaoToken密钥, model_id: claude-sonnet-4-20250514, max_tokens: 8192, temperature: 0.2 }, skills: { create-dxf: { enabled: true, python_path: python3, work_dir: ./dxf_output } } }这里有几个点要注意。base_url填https://taotoken.net/api不要加末尾斜杠也不要加 UTM 参数。api_key换成你刚才在 API Keys 页面创建的那串。model_id根据你实际想用的模型填代码生成任务建议用带代码优化能力的模型。temperature设低一点0.2 左右保证生成的代码稳定可复现不要让它自由发挥。如果你用的是 TOML 格式的配置等价写法是这样[model_provider] base_url https://taotoken.net/api api_key sk-你的TaoToken密钥 model_id claude-sonnet-4-20250514 max_tokens 8192 temperature 0.2 [skills.create-dxf] enabled true python_path python3 work_dir ./dxf_output配置写完后重启 OpenClaw 让设置生效。这时候你可以先不装 create-dxf Skill直接用模型对话测试一下通道是否通。在 OpenClaw 的对话界面输入“你好请回复当前模型名称”如果能正常返回说明 TaoToken 通道已经打通。这一步很关键因为后面 create-dxf 生成代码、执行代码、返回结果全都依赖这条通道。通道不通后面全是白搭。3. 可复制配置create-dxf Skill 完整接入片段这一节是整篇的核心我会把 create-dxf 的 Skill 配置、依赖声明、以及一个可直接跑的样例图纸参数全部给出来。你照着复制改掉路径和 Key就能跑通。先看 Skill 的完整配置文件。OpenClaw 的 Skill 通常放在skills/目录下每个 Skill 一个文件夹里面有一个skill.json或者manifest.yaml描述元信息再加一个执行脚本。create-dxf 的 manifest 可以这样写{ name: create-dxf, version: 1.0.0, description: 将参数化描述转换为 DXF 工程图纸基于 ezdxf 实现, entry: main.py, runtime: python3, dependencies: [ezdxf1.1.0], parameters: { width: { type: number, required: true, description: 图纸宽度 mm }, height: { type: number, required: true, description: 图纸高度 mm }, corner_radius: { type: number, required: false, default: 0, description: 圆角半径 mm }, holes: { type: array, required: false, description: 孔位列表每项含 x,y,diameter }, layer: { type: string, required: false, default: CUT, description: 图层名 }, unit: { type: string, required: false, default: mm, description: 单位 } } }这个 manifest 定义了 create-dxf 接受哪些参数宽、高、圆角半径、孔位数组、图层名、单位。AI 在解析你的自然语言描述时会把这些参数提取出来然后调用main.py执行。接下来是main.py的核心逻辑我把它简化成一个可读版本你可以直接放进 Skill 目录import ezdxf import json import sys def create_dxf(params): width params[width] height params[height] radius params.get(corner_radius, 0) holes params.get(holes, []) layer params.get(layer, CUT) doc ezdxf.new(dxfversionR2010) doc.units ezdxf.units.MM msp doc.modelspace() doc.layers.add(namelayer, color1) if radius 0: points [ (radius, 0), (width - radius, 0), (width, radius), (width, height - radius), (width - radius, height), (radius, height), (0, height - radius), (0, radius) ] msp.add_lwpolyline( points, formatxyseb, dxfattribs{layer: layer, closed: True} ) for cx, cy in [(radius, radius), (width - radius, radius), (width - radius, height - radius), (radius, height - radius)]: msp.add_arc(center(cx, cy), radiusradius, start_angle180, end_angle270, dxfattribs{layer: layer}) else: msp.add_lwpolyline( [(0, 0), (width, 0), (width, height), (0, height)], formatxyseb, dxfattribs{layer: layer, closed: True} ) for hole in holes: msp.add_circle( center(hole[x], hole[y]), radiushole[diameter] / 2, dxfattribs{layer: layer} ) output params.get(output, output.dxf) doc.saveas(output) return output if __name__ __main__: params json.loads(sys.argv[1]) result create_dxf(params) print(json.dumps({status: ok, file: result}))这段代码做了几件事新建 DXF 文档、设置单位为毫米、创建 CUT 图层、根据是否有圆角分别画闭合多段线或矩形、在四个角画圆弧、遍历孔位数组画圆、最后保存文件。注意add_lwpolyline的closedTrue参数这是保证切割路径闭合的关键激光切割机如果读到不闭合的路径会直接报错或者切出废件。现在给一个完整的调用示例。假设客户要一块 480×260 的机箱面板四角 R5 圆角中心距 120 均布 6 个 M4 孔M4 底孔直径按 3.3mm 算。参数 JSON 这样写{ width: 480, height: 260, corner_radius: 5, holes: [ { x: 60, y: 130, diameter: 3.3 }, { x: 132, y: 130, diameter: 3.3 }, { x: 204, y: 130, diameter: 3.3 }, { x: 276, y: 130, diameter: 3.3 }, { x: 348, y: 130, diameter: 3.3 }, { x: 420, y: 130, diameter: 3.3 } ], layer: CUT, unit: mm, output: panel_480x260.dxf }把这段 JSON 存成params.json然后执行python main.py $(cat params.json)如果一切正常当前目录下会生成panel_480x260.dxf。你可以用 AutoCAD、LibreCAD 或者在线 DXF 查看器打开它检查轮廓是否闭合、圆角是否到位、孔位是否均匀。关于单位校准这里有个坑要提前说。ezdxf 默认的 DXF 单位是“无单位”很多激光切割机的控制软件会默认按毫米解析但如果你在doc.units里没显式设置某些老版本设备会按英寸读导致切出来的件尺寸差 25.4 倍。所以doc.units ezdxf.units.MM这行不能省。另外图层名建议统一用CUT因为大部分激光切割机的 CAM 软件会默认把CUT图层识别为切割路径其他图层可能被忽略或者当成标记线。如果你用的是 Cline 或者 Claude Code 这类工具来驱动 create-dxf配置里的三件套要写全Base URL 填https://taotoken.net/apiKey 填你的 TaoToken 密钥Model ID 填你选的模型。这三样缺一不可少一个就会报 401 或者 model not found。CC Switch 用户同理在切换配置里把这三项对齐。4. 验证请求跑通一张样例图纸并校验尺寸配置写完了接下来要验证它真的能出图而且出的图尺寸是对的。这一节我会用一个完整的流程从发指令到拿到 DXF再到用代码校验尺寸全部走一遍。第一步在 OpenClaw 对话界面输入自然语言指令。你可以直接说帮我用 create-dxf 生成一张钣金面板图纸长 480、宽 260、四角倒 R5 圆角、中心距 120 均布 6 个 M4 孔孔位在水平中线上输出文件名 panel_test.dxf。AI 会解析这句话提取出 width480、height260、corner_radius5、holes 数组6 个孔x 从 60 到 420y130直径 3.3然后调用 create-dxf 的 main.py 执行。执行完成后你应该在dxf_output目录下看到panel_test.dxf。第二步验证文件是否真的生成。在终端执行ls -lh dxf_output/panel_test.dxf如果文件存在且大小在几 KB 到几十 KB 之间说明生成成功。如果文件是 0 字节或者不存在说明执行环节出了问题去查 OpenClaw 的日志。第三步用 ezdxf 读取文件并校验尺寸。写一个校验脚本verify.pyimport ezdxf doc ezdxf.readfile(dxf_output/panel_test.dxf) msp doc.modelspace() print(DXF 版本:, doc.dxfversion) print(单位:, doc.units) polylines msp.query(LWPOLYLINE) circles msp.query(CIRCLE) arcs msp.query(ARC) print(多段线数量:, len(polylines)) print(圆数量:, len(circles)) print(圆弧数量:, len(arcs)) for pl in polylines: points list(pl.get_points()) xs [p[0] for p in points] ys [p[1] for p in points] print(轮廓宽度:, max(xs) - min(xs)) print(轮廓高度:, max(ys) - min(ys)) print(是否闭合:, pl.closed) for c in circles: center c.dxf.center print(f孔位: ({center.x:.1f}, {center.y:.1f}), 半径: {c.dxf.radius:.2f})执行python verify.py预期输出应该是DXF 版本 AC1024对应 R2010单位 4毫米多段线 1 条圆 6 个圆弧 4 个轮廓宽度 480轮廓高度 260是否闭合 True6 个孔的坐标从 (60, 130) 到 (420, 130)半径 1.65。如果轮廓宽度不是 480或者高度不是 260说明单位或者参数传递出了问题。如果是否闭合是 False说明多段线的closed参数没生效激光切割机读进去会报“路径未闭合”。如果圆的数量不是 6说明 holes 数组解析丢了数据。第四步用可视化工具确认。如果你本地有 LibreCAD直接打开panel_test.dxf肉眼检查四个角的圆角是否平滑、6 个孔是否等距。没有本地工具的话可以用在线 DXF 查看器把文件拖进去就能看。我实测下来LibreCAD 对 ezdxf 生成的 R2010 文件兼容性最好AutoCAD 也能正常打开但某些国产激光切割机的控制软件对 R2010 支持不完整如果遇到打不开的情况把dxfversion改成R2000再生成一次。第五步做一次参数修改的回归测试。把宽度从 480 改成 500重新生成再跑一遍 verify.py确认轮廓宽度变成 500。这一步是验证“参数驱动”是否真的生效而不是硬编码。如果改了参数但输出没变说明 AI 没有正确提取参数或者 main.py 里读的是固定值。整个验证流程走下来你应该能在 5 分钟内完成从指令到出图再到校验的闭环。这就是 create-dxf 相比手工描图的核心优势改一个数字重新生成几秒钟的事。手工改图你得重新打开 CAD、找到那个尺寸、修改、重新导出两小时又没了。5. 常见报错排查401、local proxy failed、reading choices、OAuth这一节我把 create-dxf 接入过程中最容易踩的坑列出来每个都给出真实报错和解决路径。你遇到问题的时候直接对照查。报错一401 Unauthorized这是最常见的错误通常出现在 OpenClaw 调用 TaoToken 接口的时候。完整报错类似Error: 401 Unauthorized - {error: {message: Invalid API key, type: authentication_error}}原因有三个可能Key 填错了、Key 过期了、或者 Base URL 写错了。排查步骤先确认base_url是https://taotoken.net/api不要写成https://taotoken.net/api/v1或者带末尾斜杠。然后去 https://taotoken.net/api-keys 重新复制一次 Key注意不要复制到前后空格。如果 Key 是对的检查你的账户余额或者额度是否用完。最后确认你的配置文件的路径是对的OpenClaw 有时候会读默认配置而不是你改的那个文件用openclaw config show之类的命令确认当前生效的配置。报错二local proxy failed完整报错类似Error: local proxy failed: dial tcp 127.0.0.1:7890: connect: connection refused这个错误说明你的系统里配置了本地代理但代理服务没启动。OpenClaw 或者 Python 的 requests 库读取了HTTP_PROXY/HTTPS_PROXY环境变量试图走代理但连不上。解决办法检查环境变量执行echo $HTTP_PROXY和echo $HTTPS_PROXY如果有值且你不需要代理直接unset HTTP_PROXY HTTPS_PROXY。或者在 OpenClaw 配置里显式设置no_proxy包含taotoken.net。注意这里说的是本地网络配置问题不是让你去搞什么特殊网络工具纯粹是环境变量清理。报错三reading choices完整报错类似Error: reading choices: unexpected end of JSON input这个错误通常出现在模型返回的响应格式不对的时候。原因可能是模型 ID 填错了或者 TaoToken 返回了非标准格式。排查确认model_id是 TaoToken 支持的模型去 https://taotoken.net/model-chat 测试一下同一个模型是否能正常返回。如果模型对话正常但 OpenClaw 报这个错检查 OpenClaw 的版本是否支持你用的模型协议。有时候是max_tokens设得太大超过了模型上限把 8192 改成 4096 试试。报错四OAuth 相关错误完整报错类似Error: OAuth token expired, please re-authenticate如果你用的是 Claude Code 或者某些需要 OAuth 的工具可能会遇到这个。TaoToken 的 API Key 模式不需要 OAuth所以如果你在 OpenClaw 里看到 OAuth 报错说明配置里混入了 OAuth 流程。检查你的 settings 文件确保auth_type是api_key而不是oauth。如果是 Claude Code 的auth.json确保里面填的是 TaoToken 的 Base URL 和 Key而不是 Anthropic 官方的 OAuth token。三件套再强调一遍Base URLhttps://taotoken.net/apiKey 你的 TaoToken 密钥Model ID 你选的模型。报错五DXF 文件生成了但打不开这个不是接口报错是文件层面的问题。表现是激光切割机控制软件提示“文件格式不支持”或者“路径未闭合”。排查先用 verify.py 检查pl.closed是否为 True如果不是检查 main.py 里add_lwpolyline的closed参数。然后检查dxfversion如果设备只支持 R2000把R2010改成R2000。最后检查图层名有些设备只认CUT图层其他图层会被忽略。报错六孔位偏移或者尺寸不对表现是生成的 DXF 打开后孔不在预期位置或者整体尺寸差了一个比例。最常见的原因是单位问题。检查doc.units是否设置为ezdxf.units.MM。如果没设某些软件会按英寸解析480mm 会变成 480 英寸。另一个原因是坐标系原点ezdxf 默认原点在 (0,0)如果你的参数里孔位坐标是相对于图纸中心的需要先转换到左下角原点。建议统一用左下角为原点所有坐标都基于这个基准。报错七依赖缺失完整报错类似ModuleNotFoundError: No module named ezdxf说明 Python 环境里没装 ezdxf。执行pip install ezdxf。如果你用的是虚拟环境确认 OpenClaw 调用的是同一个 Python 解释器。在配置里把python_path写成绝对路径比如/usr/bin/python3或者./venv/bin/python避免路径歧义。把这些报错对照表存下来下次遇到直接查。大部分问题都出在配置三件套Base URL、Key、Model ID和单位设置上把这两块盯紧能省掉 80% 的排查时间。6. 长期编码与 Agent 场景把 create-dxf 用成生产力create-dxf 跑通一次不难难的是把它变成日常生产力。这一节聊几个长期使用的思路以及怎么跟 TaoToken 的 Coding Plan 配合。第一个思路是模板化。你不需要每次都从零描述参数。把常用的图纸结构写成模板文件比如templates/panel.json、templates/bracket.json里面预置好参数结构只留几个变量。下次客户发来新尺寸你只需要改模板里的数字然后让 AI 调用 create-dxf 生成。这样连自然语言描述都省了直接参数替换。第二个思路是批量生成。钣金加工经常遇到一个系列几十个尺寸的情况。写一个循环脚本读一个 CSV 参数表每行生成一张 DXFimport csv import json import subprocess with open(orders.csv) as f: reader csv.DictReader(f) for row in reader: params { width: float(row[width]), height: float(row[height]), corner_radius: float(row[radius]), holes: json.loads(row[holes]), output: foutput/{row[order_id]}.dxf } subprocess.run([python, main.py, json.dumps(params)])这个脚本跑一次几十张图几分钟出完。手工画的话一张两小时几十张就是几天。第三个思路是接入 CI 流程。如果你有内部的订单系统可以在订单状态变成“待出图”的时候自动触发 create-dxf 生成 DXF然后推送到加工车间的共享目录。这样从接单到出图全自动工程师只需要审核。第四个思路是跟 Coding Plan 配合。TaoToken 的 Coding Plan 适合长期、高频的编码和 Agent 任务如果你每天都要生成大量图纸用 Coding Plan 比按次调用更划算。具体可以看 https://taotoken.net/coding-plan 。配置方式跟普通 API 一样只是计费模式不同。第五个思路是版本管理。生成的 DXF 文件建议用 Git 或者 SVN 管理起来每次参数修改都提交一次。这样客户改需求的时候你能快速回滚到上一版也能对比两版之间的差异。DXF 是文本格式Git diff 能直接看出几何变化比二进制格式友好得多。第六个思路是错误自愈。在 main.py 里加一层校验生成 DXF 后自动检查轮廓是否闭合、尺寸是否匹配参数、孔数是否正确。如果校验失败自动重新生成或者报警。这样能避免把错误的图纸发给加工厂减少废件率。关于 CTA 分流根据你的场景选如果你只是偶尔用一下去 https://taotoken.net/api-keys 拿 Key然后看接入文档 https://taotoken.net/doc 把配置跑通如果你想先验证模型出图质量去 https://taotoken.net/model-chat 直接对话测试如果你是长期做编码和 Agent 任务直接上 Coding Plan https://taotoken.net/coding-plan 。Claude Code 用户看 https://taotoken.net/claude-code-anthropic 里面有专门的接入说明。最后说一个我踩过的坑。一开始我把work_dir设成了相对路径./dxf_output结果 OpenClaw 的工作目录跟我终端的不一样文件生成到了别的地方找了半天。后来改成绝对路径就稳了。另外temperature千万别设高0.2 是上限设到 0.7 以上 AI 会自由发挥生成的代码可能多画几条辅助线或者改图层名激光切割机读进去就乱套。参数化出图这件事稳定比创意重要一万倍。