--# PlantUML 是什么?
-
文本生成图 的开源工具:用简洁 DSL 写出类图、时序图、用例图、活动图、组件图、部署图、ER 图等。
-
可版本化:图=文本,天然适合 Git;适合评审与审计。
-
自托管 & 离线:局域网可部署渲染服务;也能在 VSCode、JetBrains 插件里本地预览。
-
常用场景:系统设计评审、接口协作、教学文档、运维拓扑、研发规范化文档。
一键自托管(可选)
bash
version: '3.8'
services:
plantuml:
image: plantuml/plantuml-server:tomcat
container_name: plantuml
ports:
- "8081:8080"
restart: unless-stopped
- 渲染入口(示意):
http://<host>:8081/uml/...或http://<host>:9000/plantuml/svg/<base64文本>
自然语言 → 大模型 → PlantUML:实战示例
示例一:时序图(订单流程)
1)自然语言描述
用户提交订单 → 系统检查库存;若不足提示失败,否则锁定库存 → 用户发起支付 → 支付网关回调成功 → 订单服务创建订单 → 通知仓库发货。
2)大模型抽取到的参与者与交互
-
参与者:User、WebApp、InventorySvc、PaymentGW、OrderSvc、Warehouse
-
关键分支:库存是否充足;支付是否成功
3)PlantUML 代码(复制即可渲染)
plantuml
@startuml
skinparam monochrome true
skinparam sequenceMessageAlign center
actor User
participant WebApp
participant InventorySvc
participant PaymentGW
participant OrderSvc
participant Warehouse
User -> WebApp : 提交订单请求
WebApp -> InventorySvc : 检查库存(商品,数量)
alt 库存不足
InventorySvc --> WebApp : 库存不足
WebApp --> User : 下单失败(库存不足)
else 库存充足
InventorySvc --> WebApp : 库存充足并锁定
WebApp -> PaymentGW : 发起支付(订单草案)
alt 支付失败
PaymentGW --> WebApp : 支付失败
WebApp --> User : 下单失败(支付失败)
else 支付成功
PaymentGW --> WebApp : 支付成功回调
WebApp -> OrderSvc : 创建订单
OrderSvc -> Warehouse : 通知发货(订单明细)
Warehouse --> OrderSvc : 出库/物流单号
OrderSvc --> WebApp : 订单已创建
WebApp --> User : 下单成功(订单号,物流)
end
end
@enduml
示例二:类图(领域建模)
1)自然语言描述
系统包含用户、商品、订单、订单项、支付记录、库存记录。一个订单属于一个用户,订单包含多个订单项;订单项指向一个商品。支付记录与订单一对一。商品与库存记录一对一。
2)PlantUML 代码
plantuml
@startuml
skinparam classAttributeIconSize 0
skinparam monochrome true
class User {
+id: Long
+name: String
+email: String
}
class Order {
+id: Long
+status: OrderStatus
+createdAt: DateTime
+totalAmount(): Money
}
class OrderItem {
+id: Long
+quantity: int
+unitPrice: Money
+subtotal(): Money
}
class Product {
+id: Long
+name: String
+sku: String
+price: Money
}
class Inventory {
+productId: Long
+available: int
+lock(qty: int)
+release(qty: int)
}
class Payment {
+id: Long
+orderId: Long
+channel: String
+status: PaymentStatus
+txId: String
}
User "1" -- "0..*" Order : 创建
Order "1" -- "1..*" OrderItem : 包含
OrderItem "1" --> "1" Product : 指向
Product "1" -- "1" Inventory : 库存
Order "1" -- "0..1" Payment : 支付记录
@enduml
示例三:活动图(退款审批流)
自然语言 → PlantUML
plantuml
@startuml
skinparam monochrome true
start
:用户提交退款申请;
:系统校验订单可退性;
if (是否满足退货条件?) then (否)
:拒绝申请并通知用户;
stop
else (是)
:客服审核;
if (客服通过?) then (否)
:拒绝并记录原因;
stop
else (是)
:生成退款单;
:用户寄回商品;
:仓库验货;
if (验货通过?) then (是)
:触发退款到账;
stop
else (否)
:驳回并退回商品;
stop
endif
endif
endif
@enduml
在你的环境里如何"自动出图"
-
方式A:文档内联渲染
- VSCode + PlantUML 插件,或 JetBrains + PlantUML Integration,实时预览。
-
方式B:CI 批量导出
- 用 PlantUML CLI 或 Kroki,在 CI(GitLab CI/GitHub Actions)里把
*.puml转为SVG/PNG,保证文档和图同步。
- 用 PlantUML CLI 或 Kroki,在 CI(GitLab CI/GitHub Actions)里把
-
方式C:自托管渲染服务
- 上面 Docker 启动的 PlantUML/Kroki 服务,文档系统(Wiki.js、BookStack、MkDocs)可直接请求服务端生成图。


