PlantUML--结合大模型快速出土

--# 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,保证文档和图同步。
  • 方式C:自托管渲染服务

    • 上面 Docker 启动的 PlantUML/Kroki 服务,文档系统(Wiki.js、BookStack、MkDocs)可直接请求服务端生成图。

相关推荐
一个骇客1 小时前
让你的数据成为“操作日志”和“模型饲料”:事件溯源、CQRS与DataFrame漫谈
架构
鹏北海-RemHusband2 小时前
从零到一:基于 micro-app 的企业级微前端模板完整实现指南
前端·微服务·架构
2的n次方_4 小时前
Runtime 内存管理深化:推理批处理下的内存复用与生命周期精细控制
c语言·网络·架构
前端市界5 小时前
用 React 手搓一个 3D 翻页书籍组件,呼吸海浪式翻页,交互体验带感!
前端·架构·github
文艺理科生5 小时前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
前端·后端·架构
C澒5 小时前
Vue 项目渐进式迁移 React:组件库接入与跨框架协同技术方案
前端·vue.js·react.js·架构·系统架构
消失的旧时光-19435 小时前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed
L543414466 小时前
告别代码堆砌匠厂架构让你的系统吞吐量翻倍提升
大数据·人工智能·架构·自动化·rpa
子春一7 小时前
Flutter for OpenHarmony:色彩捕手:基于 CIELAB 色差模型与人眼感知的高保真色彩匹配游戏架构解析
flutter·游戏·架构
冻感糕人~8 小时前
收藏备用|小白&程序员必看!AI Agent入门详解(附工业落地实操关联)
大数据·人工智能·架构·大模型·agent·ai大模型·大模型学习