1. 为什么要在 OpenCode 里折腾 drawio-skill 和 OMO 架构图
如果你平时用 OpenCode 写代码,大概率遇到过这种场景:需求评审完,老板说“给我画一张系统架构图”,你打开 draw.io 拖了半小时方块,连线还是歪的。更麻烦的是,架构一变,图就得重画。drawio-skill 就是来解决这个问题的——它是一套遵循 Agent Skills 格式的指令集,让 AI 编程工具能直接调用 draw.io 桌面版 CLI,把自然语言描述转成专业的 .drawio 图表,支持架构图、流程图、ERD、UML、时序图等六种预设,还能导出 PNG/SVG/PDF。
而 OMO(OhMyOpenCode)是围绕 OpenCode 搭起来的一套 Agent 编排平台,里面有 Sisyphus 编排引擎、Agent 集群、Skill/Tool/MCP 系统。把这两者结合起来,你就能在 OpenCode 里用一句话生成 OMO 的分层架构图,改完代码顺手更新图,不用再手动对齐。
这篇内容适合三类人:一是用 OpenCode 做日常开发的工程师,想把手绘图自动化;二是搭 OMO 这类 Agent 平台的团队,需要频繁输出架构文档;三是刚接触 Agent Skills、想知道 drawio-skill 到底怎么落地的小白。我会从环境准备讲到可复制的配置片段,再到生成一张 OMO 架构图并校验节点连线,最后把 OpenCode 的 Base URL 切到 TaoToken 统一通道,让 Key 和模型管理省心一点。
核心检索词先摆出来:drawio-skill 是什么、能做什么、适合谁。简单说,它是一个让 AI 帮你画 draw.io 图的技能包,适合所有需要频繁产出专业图表又不想手拖控件的开发者。下面按步骤来,每一步都能跟着做。
2. 前置准备:drawio-skill 安装与 OpenCode 环境打通
2.1 安装 draw.io 桌面版并验证 CLI
drawio-skill 本身不渲染图形,它是指挥 AI 去调用 draw.io 桌面版的命令行接口。所以第一步是装 draw.io 桌面版。Windows 用户去 GitHub Releases 下载安装包,我装到了D:\draw.io\draw.io.exe,版本 30.0.2。macOS 用户可以用 Homebrew 装,路径通常在/Applications/draw.io.app/Contents/MacOS/draw.io。
装完先验证 CLI 能不能跑:
& "D:\draw.io\draw.io.exe" --version正常会输出类似30.0.2的版本号。如果报“不是内部或外部命令”,说明路径不对,去安装目录确认一下 exe 的实际位置。这一步别跳过,后面所有导出都依赖这个路径。
2.2 在 OpenCode 中加载 drawio-skill
OpenCode 里 drawio-skill 通常预装在~/.config/opencode/skills/drawio-skill/目录下,核心是一个SKILL.md文件,里面定义了图表预设、自检规则、样式规范。你可以先确认目录存在:
ls ~/.config/opencode/skills/drawio-skill/应该能看到SKILL.md以及配套的脚本,比如encode_drawio_url.py、repair_png.py。如果目录不存在,从 drawio-skill 的仓库把整个文件夹拷进去即可。加载方式是在 OpenCode 会话里通过 skill 工具引用,或者在配置里声明 skill 路径。
2.3 把 OpenCode 的 Base URL 切到 TaoToken
OpenCode 默认可能走官方通道,但如果你想统一管理 Key、切换模型,可以把 Base URL 改到 TaoToken 的 API 通道。TaoToken 提供统一的 Key/API 入口,兼容 OpenAI 风格的请求格式。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 根地址是 https://taotoken.net/api 。
在 OpenCode 的配置文件里,找到 provider 或 model 相关段落,把 baseURL 指向 TaoToken,apiKey 填你在控制台生成的 Key。具体字段名不同版本可能略有差异,但核心三件套是:Base URL、API Key、Model ID。这三样填全,OpenCode 才能正常发请求。
2.4 确认模型可用
切完通道后,先在 OpenCode 里发一条最简单的对话请求,确认模型能返回内容。如果返回 401,说明 Key 没填对或没生效;如果返回 model not found,说明 Model ID 写错了。这一步过了,再进 drawio-skill 的实战,否则后面报错你分不清是图的问题还是通道的问题。
3. 可复制配置:drawio-skill 片段与 OpenCode Base URL 填写
3.1 drawio-skill 的 SKILL.md 关键配置
drawio-skill 的行为由SKILL.md驱动,里面最值得关注的是图表预设和自检开关。下面是一段可参考的配置结构,路径与原文一致,放在~/.config/opencode/skills/drawio-skill/SKILL.md:
--- name: drawio-skill description: 将自然语言转为 draw.io 图表并导出 version: 1.0.0 presets: - architecture - erd - uml-class - sequence - ml-model - flowchart self_check: enabled: true max_rounds: 2 checks: - overlap - label_clip - broken_edge style: font: Helvetica palette: default export: format: png scale: 2 embed_xml: true ---这里self_check是 drawio-skill 的亮点:导出 PNG 后自动检测重叠、标签裁剪、连线断裂,最多修两轮。embed_xml: true对应导出命令的-e参数,让 PNG 里嵌 XML,方便后续在 draw.io 里重新打开编辑。
3.2 OpenCode 侧 Base URL 与鉴权字段示例
OpenCode 的配置通常是一个 JSON 或 TOML 文件。以 JSON 为例,把 provider 指向 TaoToken:
{ "provider": { "taotoken": { "baseURL": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "model": "deepseek-v4" } }, "defaultModel": "taotoken/deepseek-v4" }如果你用的是 TOML 格式,等价写法:
[provider.taotoken] baseURL = "https://taotoken.net/api" apiKey = "sk-你的TaoToken密钥" model = "deepseek-v4" [default] model = "taotoken/deepseek-v4"注意 Base URL 只写到/api,不要在后面拼/v1/chat/completions,OpenCode 会自己补路径。API Key 从 TaoToken 控制台生成,别硬编码到公开仓库里,用环境变量注入更稳:
export TAOTOKEN_API_KEY="sk-你的密钥"然后在配置里引用"apiKey": "${TAOTOKEN_API_KEY}"。
3.3 三件套对照表
| 字段 | 值 | 说明 |
|---|---|---|
| Base URL | https://taotoken.net/api | 统一 API 入口,不加 UTM |
| API Key | sk-xxx | 控制台生成,环境变量注入 |
| Model ID | deepseek-v4 | 按需换成其他可用模型 |
这三样填全,OpenCode 才能把请求发到 TaoToken 并拿到模型响应。drawio-skill 生成 XML 的过程依赖模型理解你的自然语言描述,所以模型通道必须先通。
3.4 导出命令模板
drawio-skill 最终会调用 draw.io CLI 导出,命令模板如下:
& "D:\draw.io\draw.io.exe" -x -f png -s 2 -e -o output.png input.drawio参数含义:-x导出,-f png指定格式,-s 2缩放两倍,-e嵌入 XML,-o输出路径。如果你只是快速预览,不要加-e,因为嵌入 XML 会导致 PNG 的 IEND 块截断,某些 Vision API 读图时会报 400。最终产出再加-e,并用repair_png.py修复 IEND。
4. 验证请求:生成一张 OMO 架构图并校验节点连线
4.1 用自然语言描述 OMO 架构
在 OpenCode 会话里,直接给 drawio-skill 一段描述:
画一张 OpenCode 和 OMO 的整体架构图,分五层:用户交互层放 Terminal CLI、TUI、API Web UI;OpenCode 核心层放会话管理器、命令路由器、工具调度器、上下文管理器;OMO Agent 平台层放 Sisyphus 编排引擎、Agent 集群(build/explore/librarian/oracle/metis)、Skill/Tool/MCP 系统;AI 模型层放 DeepSeek V4 和 Claude;基础设施层放文件系统、Git、Chrome、Node.js。用 swimlane 容器分层,每层不同颜色。
drawio-skill 会按 Architecture 预设生成 draw.io XML,用 swimlane 容器构建各层。核心结构类似:
<mxCell id="t1" value="用户交互层" style="swimlane;startSize=35;fillColor=#e1d5e7;" vertex="1" parent="1"> <mxGeometry x="40" y="40" width="1320" height="130" as="geometry"/> </mxCell>五层颜色建议:用户交互层紫色#e1d5e7,OpenCode 核心层蓝色#dae8fc,OMO Agent 平台层绿色#d5e8d4,AI 模型层橙色#ffe6cc,基础设施层灰色#f5f5f5。颜色不是随便选的,分层配色能让读者一眼区分职责边界。
4.2 导出 PNG 并检查文件
生成opencode-omo-architecture.drawio后,执行导出:
& "D:\draw.io\draw.io.exe" -x -f png -s 2 -e -o opencode-omo-architecture.png opencode-omo-architecture.drawio导出完成后,先看文件大小。如果只有几 KB,大概率是空图或渲染失败;正常分层架构图带文字,PNG 至少几十 KB。再用图片查看器打开,肉眼扫一遍:五层容器是否都在、每层标题是否显示、节点有没有重叠、连线有没有穿过文字。
4.3 校验节点与连线是否正确
drawio-skill 的自检会跑重叠、标签裁剪、连线断裂三项。但机器检测之外,你还要人工核对业务语义。我一般按这个清单过一遍:
第一,节点数量对不对。用户交互层 3 个、核心层 4 个、平台层 3 组、模型层 2 个、基础设施层 4 个,数一遍别漏。第二,连线方向对不对。比如“会话管理器 → 命令路由器 → 工具调度器”这条链,箭头要从左到右,别反向。第三,跨层连线有没有断。OMO Agent 平台层调用 AI 模型层的线,如果断在容器边缘,说明连线锚点没设好。
如果发现重叠,让 drawio-skill 再跑一轮修复,或者手动在 draw.io 里微调坐标。自检最多两轮,两轮还修不好就手动介入,别死等。
4.4 用 encode_drawio_url.py 快速预览
CLI 导出慢是公认的,因为 draw.io 桌面版基于 Electron,每次调用都要启动 Chromium 渲染,Windows 上启动就要 3 到 8 秒。如果只是想快速看效果,用encode_drawio_url.py生成 diagrams.net URL,浏览器打开秒开:
python encode_drawio_url.py opencode-omo-architecture.drawio输出的 URL 贴到浏览器,diagrams.net 会直接加载你的图。确认布局没问题后,再走 CLI 导出最终 PNG。这样能省掉反复启动 Electron 的时间。
4.5 验证模型通道是否真的走了 TaoToken
生成图的过程中,OpenCode 要把你的自然语言描述发给模型,模型返回 XML 结构。你可以在 TaoToken 控制台看请求日志,确认有对应的调用记录。如果日志为空,说明 OpenCode 还在走默认通道,回去检查 Base URL 和 API Key 是否生效。这一步是很多人忽略的——图生成了,但用的是别的通道,Key 管理就白切了。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
5.1 401 Unauthorized
最常见的报错。原因通常是 API Key 没填、填错、或者环境变量没导出。排查顺序:先确认TAOTOKEN_API_KEY在当前 shell 里能echo出来;再确认配置文件里引用的是${TAOTOKEN_API_KEY}而不是字面量;最后去 TaoToken 控制台看 Key 是否被禁用或过期。如果 Key 是对的还报 401,检查 Base URL 有没有多写斜杠或路径。
5.2 local proxy failed
这个报错一般出现在 OpenCode 尝试走本地代理但代理没起来的时候。如果你没配代理,检查配置里有没有残留的 proxy 字段,删掉即可。如果你确实需要网络转发,确保本地服务在监听。注意,这里说的是本地开发环境的端口转发,不是任何绕过网络管理的手段,合规使用。
5.3 reading choices 报错
这个报错通常出现在模型返回结构不符合预期时。OpenCode 期望返回里有choices数组,但拿到的可能是错误对象或空响应。排查:先用 curl 直接打 TaoToken 的 API,确认返回结构正常:
curl -s https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-v4","messages":[{"role":"user","content":"hi"}]}'如果 curl 返回正常但 OpenCode 报 reading choices,说明 OpenCode 的解析层和返回格式不匹配,检查 Model ID 是否写错,或者换一个模型试试。
5.4 OAuth 相关报错
有些工具默认走 OAuth 登录流程,切到 API Key 模式后如果还残留 OAuth 配置,会报 token 无效。解决办法是在配置里显式关闭 OAuth,只保留 apiKey 字段。如果工具同时支持两种模式,确认 defaultModel 指向的是 API Key 对应的 provider。
5.5 draw.io CLI 导出失败
如果报“找不到 draw.io.exe”,检查路径里的空格和反斜杠。Windows 路径用双引号包起来,比如& "D:\draw.io\draw.io.exe"。如果报渲染超时,把-s缩放从 2 降到 1 试试,大图高缩放会拖慢渲染。如果 PNG 打不开,用repair_png.py修 IEND 截断:
python repair_png.py opencode-omo-architecture.png5.6 节点重叠或连线错乱
自检跑完还重叠,多半是容器高度不够。手动把 swimlane 的 height 调大,或者减少同层节点数量。连线错乱通常是锚点没设,在 XML 里给 edge 加source和target的 id,别让 draw.io 自动猜。
6. 语义一致 CTA:把通道和技能都落到日常
drawio-skill 加 OpenCode 加 TaoToken 这套组合,核心价值是让架构图跟着代码走。你改完 OMO 的 Agent 集群,顺手让 drawio-skill 重生成一版,图就不会和代码脱节。通道切到 TaoToken 之后,Key 和模型集中管理,换模型不用改一堆配置。
如果你在排障或接入阶段卡住了,先去 TaoToken 控制台生成 API Key,再对照接入文档把 Base URL 和 Model ID 填对:API Keys 页面在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。想先验证模型通不通,用模型对话页面发一条测试请求:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。如果你长期用 OpenCode 做编码和 Agent 编排,Coding Plan 更适合统一管理额度:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
最后留一个我踩过的坑:draw.io CLI 导出慢的时候别反复重试,先用 URL 预览确认布局,再一次性导出。还有,-e参数只在最终产出时加,中间预览别加,省得被 IEND 截断折腾。图生成完,记得把 .drawio 源文件一起提交到仓库,下次改架构直接改源文件重导出,比从 PNG 反推快得多。