1. 从“画图五分钟,调格式两小时”说起
如果你写过技术文档,大概率经历过这种崩溃:架构图画完,产品经理说“这个模块往左挪一点”,你打开绘图工具拖了十分钟,导出图片贴进文档,结果下次改需求又得重来一遍。更别提多人协作时,每个人用的工具不一样,有人用 Visio,有人用 draw.io,有人直接截图,最后文档里的图风格五花八门。
AI 画图这件事,核心不是让 AI 替你“画”,而是让 AI 把自然语言描述转成可版本控制、可二次编辑的图形代码。PlantUML、Mermaid、Graphviz、SVG 这四种文本绘图方案,正好覆盖了程序员日常最高频的四类需求:时序交互、快速流程图、复杂依赖关系、高定制架构图。它们共同的优点是——图形即代码,改一行文字就能重新渲染,配合 Git 管理 diff 清晰可见。
但问题来了:这些图形代码的语法各有各的坑,手写效率低,让 AI 生成又得反复切换模型和工具。我试过在多个平台之间来回粘贴,光是配置 API Key 和环境就耗掉不少时间。所以这篇内容聚焦一件事:用 TaoToken 统一 Key/API 通道,把四种画图链路一次性跑通。你只需要配好一份 settings.json 和 config.toml,后面无论让 AI 生成 PlantUML 还是 SVG,都走同一个入口。适合谁?正在写技术文档的后端、需要画架构图的架构师、以及想用 AI 提效但不想折腾多平台配置的开发者。
2. TaoToken 前置:统一 Key 与 API 通道
TaoToken 在这里扮演的角色是模型调用的统一网关。你不需要为每个 AI 工具单独申请 Key,也不用在 Cursor、VS Code 插件、命令行工具之间反复切换配置。一个 Key,一套 API 地址,就能让 AI 帮你生成 PlantUML、Mermaid、Graphviz 和 SVG 代码。
具体来说,TaoToken 提供两类入口:
- 模型对话:适合临时让 AI 生成一段图形代码,粘贴即用,不用装任何插件。地址是
https://taotoken.net/api配合对话界面。 - Coding Plan:适合长期在编辑器里做 AI 辅助编码,比如让 AI 直接往你的
.puml或.mmd文件里写内容。这个方案对频繁画图的场景更划算。
你需要先拿到 API Key。操作路径很简单:访问官网https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=,注册后在控制台创建 Key。控制台地址是https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite,API Keys 管理页在https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite。
注意:API 地址统一用
https://taotoken.net/api,不要加 UTM 参数,避免部分客户端把查询字符串当成路径的一部分导致 404。
拿到 Key 之后,下面进入配置环节。我会给出两份配置骨架:一份是 VS Code 的settings.json,一份是命令行工具用的config.toml。你可以根据自己的工具链选其中一份,也可以两份都配。
3. 可复制配置:settings.json 与 config.toml 骨架
3.1 VS Code settings.json 配置
如果你用 VS Code 配合 PlantUML 插件或 Mermaid 预览插件,可以在settings.json里把 AI 补全的 API 指向 TaoToken。下面这份配置以 PlantUML 插件为例,核心是把模型请求地址和 Key 写对:
{ "plantuml.server": "https://www.plantuml.com/plantuml", "plantuml.render": "Local", "aiAssistant.provider": "openai-compatible", "aiAssistant.baseUrl": "https://taotoken.net/api", "aiAssistant.apiKey": "你的_TaoToken_Key", "aiAssistant.model": "claude-3.7-sonnet", "aiAssistant.temperature": 0.3, "aiAssistant.maxTokens": 4096, "editor.quickSuggestions": { "other": true, "comments": false, "strings": true } }几个参数说明:baseUrl必须写成https://taotoken.net/api,不要带尾部斜杠;model字段填你实际要用的模型名,TaoToken 支持多种模型,具体列表可以在模型对话页面查看;temperature建议设低一点,画图代码需要稳定输出,0.2 到 0.4 之间比较合适。
3.2 config.toml 配置骨架
如果你用命令行工具,比如aichat或自建的脚本调用,config.toml的骨架如下:
[default] api_base = "https://taotoken.net/api" api_key = "你的_TaoToken_Key" model = "claude-3.7-sonnet" temperature = 0.3 max_tokens = 4096 [plantuml] prompt_template = "请根据以下描述生成 PlantUML 代码,只输出代码块,不要解释:{input}" [mermaid] prompt_template = "请根据以下描述生成 Mermaid 代码,只输出代码块,不要解释:{input}" [graphviz] prompt_template = "请根据以下描述生成 Graphviz DOT 代码,只输出代码块,不要解释:{input}" [svg] prompt_template = "请根据以下描述生成 SVG 代码,要求 viewBox 为 0 0 800 600,只输出 SVG 代码,不要解释:{input}"这份配置的好处是,四种画图语言各自有独立的 prompt 模板,调用时只需要指定 section 名,不用每次重复写“请生成 PlantUML”这类前缀。实际使用时,你可以写一个简单的 shell 函数来调用:
draw() { local lang=$1 local desc=$2 aichat --config ~/.config/aichat/config.toml \ --role "$lang" \ "$desc" }然后这样用:
draw plantuml "画一个用户登录的时序图,包含浏览器、前端、后端、Redis、数据库" draw mermaid "画一个订单状态流转的流程图" draw graphviz "画一个微服务依赖关系图" draw svg "画一个三层架构图,包含网关、业务层、数据层"配置完成后,建议先用一个最简单的请求验证通道是否打通。
4. 验证请求:从自然语言到四种图形代码
4.1 PlantUML 时序图验证
先拿登录流程做测试。给 AI 的输入可以是这样:
请用 PlantUML 画一个账号密码登录的时序图,参与者包括浏览器、前端、后端 API、Redis、数据库。 流程:浏览器输入账号密码点击登录 -> 前端加密 -> 后端接收 -> 限流校验 -> 查 Redis 缓存 -> 未命中查数据库 -> 比对密码哈希 -> 校验用户状态 -> 生成 Token -> Token 存 Redis -> 返回 Token 给前端。 只输出 PlantUML 代码块。AI 返回的代码大致如下:
@startuml actor 用户 as U participant "浏览器" as B participant "前端" as F participant "后端API" as API database "Redis" as R database "数据库" as DB U -> B: 输入账号密码 B -> F: 点击登录 F -> F: 前端加密 F -> API: 发送登录请求 API -> API: 限流校验 API -> R: 查询用户缓存 alt 缓存未命中 R --> API: 无数据 API -> DB: 查询用户 DB --> API: 返回用户信息 else 缓存命中 R --> API: 返回用户信息 end API -> API: 比对密码哈希 API -> API: 校验用户状态 API -> API: 生成 Token API -> R: 存储 Token API --> F: 返回 Token F -> B: 持久化 Token @enduml把这段代码贴进 PlantUML 预览插件,或者用在线渲染器打开,就能看到标准的时序图。验证成功的标志是:图形正常渲染,参与者之间的箭头方向正确,alt分支显示为条件块。
4.2 Mermaid 流程图验证
同样的登录流程,换成 Mermaid 的输入:
请用 Mermaid 画一个登录流程图,从浏览器开始,到返回 Token 结束。 只输出 Mermaid 代码块。返回结果:
flowchart TD A[浏览器] --> B[输入账号密码] B --> C[前端加密] C --> D[后端API接收] D --> E[限流校验] E --> F{Redis缓存命中?} F -->|是| G[返回用户信息] F -->|否| H[查询数据库] H --> G G --> I[比对密码哈希] I --> J{用户状态正常?} J -->|否| K[返回错误] J -->|是| L[生成Token] L --> M[Token存Redis] M --> N[返回Token给前端]Mermaid 的优势是 Markdown 原生支持,很多文档平台直接渲染。验证时注意flowchart TD的方向声明,以及条件分支的{}语法。
4.3 Graphviz 依赖图验证
Graphviz 适合画非线性的依赖关系。输入:
请用 Graphviz DOT 语言画一个微服务依赖图,包含网关、用户服务、订单服务、支付服务、库存服务、消息队列、数据库。 只输出 DOT 代码块。返回:
digraph Microservices { rankdir=LR; node [shape=box, style=rounded]; Gateway [label="API网关"]; UserSvc [label="用户服务"]; OrderSvc [label="订单服务"]; PaySvc [label="支付服务"]; StockSvc [label="库存服务"]; MQ [label="消息队列", shape=parallelogram]; DB [label="数据库", shape=cylinder]; Gateway -> UserSvc; Gateway -> OrderSvc; OrderSvc -> PaySvc; OrderSvc -> StockSvc; OrderSvc -> MQ; PaySvc -> DB; StockSvc -> DB; UserSvc -> DB; }用dot -Tpng命令渲染,或者贴进 Graphviz 在线编辑器。验证点是节点形状和rankdir方向是否符合预期。
4.4 SVG 架构图验证
SVG 的验证稍微特殊,因为它是 XML 文本,需要浏览器打开。输入:
请生成一个 SVG 三层架构图,viewBox 为 0 0 800 600,包含网关层、业务层、数据层,用矩形和文字表示,配色简洁。 只输出 SVG 代码。返回的 SVG 代码保存为.svg文件,用浏览器打开即可。验证时重点看viewBox是否正确、文字是否在矩形内居中、整体布局是否在可视区域内。
四种方式都跑通后,你会发现一个规律:AI 生成图形代码的质量,取决于你的描述是否结构化。把流程拆成“参与者 + 动作 + 条件分支”,比笼统地说“画个登录图”效果好得多。
5. 本篇常见错排查
5.1 请求返回 401 或 403
最常见的原因是 Key 没填对,或者baseUrl写成了带 UTM 参数的地址。检查两点:apiKey字段是否完整复制了 TaoToken 控制台里的 Key;baseUrl是否严格为https://taotoken.net/api。如果用的是环境变量,确认变量名和配置文件里引用的一致。
5.2 PlantUML 渲染报语法错误
AI 生成的 PlantUML 代码有时会缺少@startuml和@enduml包裹,或者参与者别名用了中文导致解析失败。解决办法是在 prompt 里明确要求“使用英文别名,中文用引号包裹”,例如participant "浏览器" as B。另外,alt分支必须成对出现else和end,缺一个就会报错。
5.3 Mermaid 在 Markdown 里不渲染
部分 Markdown 编辑器需要额外开启 Mermaid 支持。如果你用的是 VS Code,安装 Markdown Preview Mermaid Support 插件即可。另外注意代码块语言标记要写成```mermaid,不要写成```mmd,后者很多渲染器不识别。
5.4 Graphviz 中文乱码
Graphviz 默认字体可能不支持中文,渲染出来是方框。在 DOT 代码里加一行node [fontname="SimHei"];或者graph [fontname="Microsoft YaHei"];即可。Linux 环境下需要确认系统装了中文字体,否则即使指定字体名也无效。
5.5 SVG 显示不全或元素重叠
SVG 的viewBox决定了可视区域。如果 AI 生成的元素坐标超出了viewBox范围,就会显示不全。排查方法是把viewBox临时改大,比如从0 0 800 600改成0 0 1200 900,看元素是否出现。如果出现,说明原始坐标超界,需要让 AI 重新生成或手动调整坐标。另一个常见问题是文字没有设置text-anchor="middle",导致文字从矩形左上角开始绘制,看起来像溢出。
5.6 模型返回内容包含多余解释
有些模型会在代码块前后加“好的,以下是代码”之类的文字。如果你用脚本自动提取代码块,需要做正则匹配。更省事的办法是在 prompt 里加一句“只输出代码块,不要任何解释”,并且在config.toml的模板里已经预设了这个约束。
6. 把四种链路串起来:我的实际工作流
配置跑通之后,我日常的画图流程是这样的:先在草稿纸上把流程或架构用文字列出来,然后根据图的类型选工具。线性流程和时序交互用 PlantUML,快速原型和文档内嵌用 Mermaid,复杂依赖和网状关系用 Graphviz,最终要放进 PPT 或对外文档的架构图用 SVG。
四种方式生成的代码都存进 Git 仓库,和文档放在一起。改需求时,直接改文字描述让 AI 重新生成,或者手动微调代码,diff 清晰可见。这样做的最大好处是:图不再是黑盒,而是和代码一样可追溯、可协作。
如果你还没配好 TaoToken 的通道,建议先从模型对话入口试一次,让 AI 生成一段 Mermaid 代码,贴进 Markdown 预览看看效果。确认通道没问题后,再按上面的settings.json或config.toml配置到本地工具链。长期在编辑器里画图的话,Coding Plan 的入口在https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite,接入文档在https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite,遇到配置问题可以先翻文档里的示例。
最后分享一个我踩过的坑:Graphviz 的rankdir参数不要随便设成TB又混用LR的子图,否则布局会乱成一团。如果发现节点位置诡异,先把rankdir统一成LR或TB,再逐步调整。画图这件事,工具是辅助,清晰的逻辑描述才是核心。