PlantUML 与 AI:让 Copilot / Cursor 自动产出图代码的 prompt 模式
2025-2026 后,LLM 写 PlantUML 的能力已经能达到「5 句话出图」「自然语言描述→UML 代码」。这一篇整理实战 prompt 模板、常见错误、debug 技巧、以及最终的人工 review 准则。
LLM 写 PlantUML 的能力现状
实测结论(2026 年中):
- Copilot / Cursor / Cline:在
.puml文件上下文里,5-10 行提示能产出 80% 正确率的图 - ChatGPT / Claude / Gemini:给出系统 prompt + 详细描述,5-15 秒生成可工作代码
- 关键差距:图结构的「合法性」(UML 是否正确)LLM 还能搞定,但「视觉/排版」细节(节点位置、间距、配色)LLM 经常乱来,需要人工 review
让 LLM 生成正确 PlantUML 的关键
1. 输出格式约束
大部分 LLM 不擅长自己约束输出格式——你必须在 prompt 里强制:
1 | Output ONLY the PlantUML code block, no explanation outside the block. |
否则会输出:
1 | ```plantuml |
并加一句话「这是 PlantUML 图代码…」。你要的是纯内容。
2. 限定图类型
PlantUML 有 20+ 种图——LLM 容易「瞎猜」画错图:
1 | Draw a UML sequence diagram in PlantUML with EXACTLY these participants: |
注意强制「EXACTLY these participants」+ 顺序 + 关系类型 + 「Do NOT use skinparam」。
3. 给示例(少样本)
LLM 学习最快的方式是举例。一次对话里给一个例子,下一次 prompt 就有模板可参考:
1 | Use this as a reference structure (don't copy verbatim): |
4 对话中累积上下文:第一次对话给「时序图规则」。第二次说「按上次的格式画 X」。第三次说「再画一个 X」,LLM 用前两次的模板套出来。
实战 prompt 模板库
模板 1: 时序图
1 | # 任务 |
模板 2: 类图
1 | # 任务 |
模板 3: 活动图
1 | 把以下流程图描述转成 PlantUML activity diagram: |
模板 4: 状态机
1 | 把以下状态枚举生成 PlantUML state diagram: |
常见 LLM 错误(你必须知道)
错误 1:消息方向乱用
1 | @startuml |
LLM 训练数据有 PlantUML 老版本 / Mermaid 不同箭头。反向箭头在 PlantUML 不支持。在 review 阶段抓出来改成 Bob -> Alice。
错误 2:复合立体关系填错
1 | User *-- Role ' 用户「拥有」角色(组合) |
注意 --* vs --o:「拥有」用实心菱形 *,「弱拥有」用空心菱形 o。
错误 3:嵌套 package + 错误 ident
1 | package "Frontend" { |
LLM 经常写:
1 | package "Frontend" { |
要再确认括号 / end / endif 数量。
错误 4:消息文字里出现 : 或 `
1 | Alice -> Bob: prefix:value ' ❌ 冒号截断消息 |
LLM 输出 JSON 风格的 key:value 当消息文字经常踩坑。review 时一律用引号包消息文字。
错误 5:皮肤参数乱用
LLM 经常生成:
1 | skinparam backgroundcolor #fafafa |
结果视觉上丑——你不需要花哨皮肤,让 prompt 显式禁用:「Use no skinparam customization」。
错误 6:!include 路径幻觉
LLM 会写出:
1 | !include ./common/styles.puml |
但这些路径可能根本不存在于你仓库。永远不要直接拿 LLM 生成的 !include 渲染——先确认文件存在并复制到本地。
验证流程
1. 本地植物uml CLI 试渲染
1 | echo "@startuml |
如果 plantuml 报错(YAMLException / $jsException / 找不到 dot),先修源代码。
2. 在 VS Code 里看一下
VS Code PlantUML 插件显示渲染图——如果长这样:
- 节点重叠 → 调
nodesep或加package - 边线穿过节点 → 加
ranksep或拆package - 边线颜色太浅 → 加
skinparam ArrowColor #5B7C99
3. 把图嵌入真实文档后看
最终交付的是文档站里的图——一定要在「最终位置」(Hexo / GitHub / Notion)检查视觉。
Copilot 自动补全模板
如果用 VS Code + Copilot,做一个 .copilot-instructions.md 让它自动写 PlantUML:
1 | When generating PlantUML code (between @startuml and @enduml): |
放仓库根目录 → Copilot 在 .puml 文件里自动采用。
Cursor / Cline 的用法
这两个 agent 化更彻底——你可以说:
“在 docs/diagrams/auth-flow.puml 里加一个错误处理分支”
agent 会:
- 读现有 auth-flow.puml
- 执行植物uml CLI 渲染 → 看图
- 修改代码 → 重新渲染 → 对比
- 写入到 docs/diagrams/
实测成功率 70-80%——10 步里有 2 步 agent 自己 debug,但比「人手工再写一遍」快。
评估 LLM 生成的图质量 — 6 维 checklist
| 维度 | 怎么测 | 期望 |
|---|---|---|
| 语法 | plantuml CLI 渲染不报错 | 必须 100% |
| 语义 | 图表达的「业务关系」对吗 | 必 100% |
| 排版 | 节点不重叠,边不穿过其他节点 | 必须 ≥85% |
| 样式 | 不过度彩色 / 不过度花 | 80% 不过度 |
| 可读性 | 8 个节点以下「一眼能看懂」 | 大图必须分块 |
| 可维护性 | 增一个节点改 ≤1 处 | 编辑代价小 |
小结
- LLM 写 PlantUML 已成熟到「可用」,但「完美」还是要人 review
- prompt 关键是「明确图类型 + 列出参与者 + 列消息 + 禁用皮肤」
- 错误点是方向、复合关系、CJK、消息中的
: - 永远跑植物uml CLI 验证——别信 LLM 的「应该正确」
下一步
- 标题: PlantUML 与 AI:让 Copilot / Cursor 自动产出图代码的 prompt 模式
- 作者: puml.online
- 创建于 : 2026-07-30 10:30:00
- 更新于 : 2026-08-14 21:34:29
- 链接: https://puml.online/blog/plantuml-ai-generation/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。