使用 Cursor AI 绘制优雅的架构图和流程图
作者: cyan
日期: 2025-03-04
一、前言
在软件开发过程中,架构图和流程图是表达系统设计的重要工具。传统的方式是使用 PlantUML 手动编写代码来生成图表,这需要记忆大量的语法和样式配置。本文将介绍如何使用 Cursor AI 来智能生成和优化技术图表,大幅提升工作效率。
二、Cursor AI 的优势
2.1 主要特点
-
智能生成
- 通过自然语言描述生成图表代码
- 自动应用最佳实践和样式规范
- 智能优化图表布局
-
交互式编辑
- 实时预览和修改
- 智能代码补全
- 自动错误检测和修复
-
团队协作
- 统一的图表风格
- 标准化的命名规范
- 可复用的模板库
2.2 应用场景
- 系统架构设计
- 业务流程图
- 类关系图
- 时序图
- 部署架构图
- 数据流图
三、使用 Cursor AI 生成图表
3.1 基础用法
-
启动对话
- 在 Cursor 编辑器中按
Cmd/Ctrl + L
打开命令面板 - 输入
/
开始与 AI 对话
- 在 Cursor 编辑器中按
-
常用命令
/create # 创建新的图表 /analyze # 分析现有代码生成图表 /improve # 优化现有图表
3.2 提示词模板
- 创建架构图 请帮我创建一个系统架构图,包含以下组件: - 前端层:Web、Mobile、Desktop - 网关层:API Gateway、负载均衡 - 服务层:用户服务、订单服务、支付服务 - 数据层:MySQL、Redis 要求: 1. 使用 PlantUML 语法 2. 添加清晰的层级划分 3. 使用优雅的配色方案 4. 添加必要的连接说明
- 创建流程图 请帮我创建一个订单处理流程图,包含: - 开始:用户下单 - 处理:库存检查、支付处理 - 结束:订单确认或失败 要求: 1. 使用 PlantUML 活动图 2. 添加条件分支 3. 使用清晰的布局 4. 添加状态说明
3.3 实战示例
- 生成架构图示例
@startuml System Architecture
!theme plain
skinparam backgroundColor white
skinparam roundCorner 20
' 定义样式
!include https://raw.githubusercontent.com/plantuml/plantuml/master/themes/puml-theme-cerulean.puml
' 定义组件
package "Frontend Layer" #E3F2FD {
[Web Application] as web #B3E5FC
[Mobile App] as mobile #B3E5FC
[Desktop Client] as desktop #B3E5FC
}
package "API Gateway Layer" #FFF3E0 {
[Load Balancer] as lb #FFE0B2
[API Gateway] as gateway #FFE0B2
[Rate Limiter] as limiter #FFE0B2
}
package "Service Layer" #F3E5F5 {
[Auth Service] as auth #E1BEE7
[User Service] as user #E1BEE7
[Order Service] as order #E1BEE7
[Payment Service] as payment #E1BEE7
}
package "Data Layer" #E8F5E9 {
database "User DB" as userdb #A5D6A7
database "Order DB" as orderdb #A5D6A7
database "Payment DB" as paymentdb #A5D6A7
[Redis Cache] as cache #A5D6A7
}
' 定义关系
web --> lb
mobile --> lb
desktop --> lb
lb --> gateway
gateway --> limiter
limiter --> auth
limiter --> user
limiter --> order
limiter --> payment
auth --> userdb
user --> userdb
order --> orderdb
payment --> paymentdb
user --> cache
order --> cache
payment --> cache
@enduml
- 优化现有架构
@startuml System Architecture
!theme plain
skinparam backgroundColor white
skinparam roundCorner 20
skinparam defaultFontName "Microsoft YaHei"
skinparam shadowing false
' 基础样式设置
skinparam {
ArrowColor #3498DB
ArrowThickness 2
BorderColor #3498DB
BorderThickness 2
FontColor #333333
}
' 定义自定义样式
skinparam component {
BackgroundColor #E3F2FD
BorderColor #3498DB
FontColor #333333
}
skinparam database {
BackgroundColor #E8F5E9
BorderColor #2ECC71
FontColor #333333
}
' 定义组件
package "客户端层" as FrontendLayer #E3F2FD {
component "Web 应用" as web #B3E5FC
component "移动应用" as mobile #B3E5FC
component "桌面客户端" as desktop #B3E5FC
note right of web
SPA架构
响应式设计
end note
}
package "网关层" as GatewayLayer #FFF3E0 {
component "负载均衡器" as lb #FFE0B2 {
[nginx]
}
component "API 网关" as gateway #FFE0B2 {
[路由]
[认证]
[监控]
}
component "限流器" as limiter #FFE0B2
}
package "微服务层" as ServiceLayer #F3E5F5 {
component "认证服务" as auth #E1BEE7
component "用户服务" as user #E1BEE7
component "订单服务" as order #E1BEE7
component "支付服务" as payment #E1BEE7
}
package "数据层" as DataLayer #E8F5E9 {
database "用户数据库" as userdb #A5D6A7 {
[用户信息]
[认证数据]
}
database "订单数据库" as orderdb #A5D6A7 {
[订单信息]
[商品数据]
}
database "支付数据库" as paymentdb #A5D6A7 {
[支付记录]
[账单信息]
}
component "Redis集群" as cache #A5D6A7 {
[会话缓存]
[业务缓存]
}
}
' 定义关系
web -down-> lb : HTTPS
mobile -down-> lb : HTTPS
desktop -down-> lb : HTTPS
lb -down-> gateway : 负载分发
gateway -down-> limiter : 流量控制
limiter -down-> auth : JWT认证
limiter -down-> user : REST/gRPC
limiter -down-> order : REST/gRPC
limiter -down-> payment : REST/gRPC
auth -down-> userdb : 读写
user -down-> userdb : 读写
order -down-> orderdb : 读写
payment -down-> paymentdb : 读写
auth .right.> cache : 缓存
user .right.> cache : 缓存
order .right.> cache : 缓存
payment .right.> cache : 缓存
' 添加图例
legend right
|= 组件类型 |= 说明 |
|<#B3E5FC>| 客户端组件 |
|<#FFE0B2>| 网关组件 |
|<#E1BEE7>| 微服务组件 |
|<#A5D6A7>| 数据存储组件 |
endlegend
@enduml
四、最佳实践
4.1 提示词技巧
-
结构化描述
- 明确列出组件和层级
- 指定具体的关系
- 说明特殊要求
-
迭代优化
- 先生成基础版本
- 逐步添加细节
- 指定优化方向
-
样式规范
- 指定配色方案
- 设定布局规则
- 统一命名风格
4.2 常见问题解决
-
中文显示问题
skinparam defaultFontName "Microsoft YaHei"
-
图表过大问题
- 拆分为多个子图表
- 使用包进行分组
- 适当简化细节
-
样式统一问题
- 创建样式模板
- 使用统一配置
- 定期样式审查
五、补充说明:PlantUML 基础
5.1 基础工具安装
# macOS
brew install plantuml
# Linux
sudo apt-get update
sudo apt-get install plantuml
# Windows
scoop install plantuml
# 或者
choco install plantuml
5.2 IDE 插件配置
在 VS Code 中安装以下插件:
-
PlantUML 插件
- 提供语法高亮
- 实时预览功能
- 导出图片功能
-
Markdown Preview Enhanced
- Markdown 预览
- PlantUML 集成
- 多格式导出
5.3 字体和依赖
# macOS 安装字体
brew install font-microsoft-yahei
# 安装 Graphviz (PlantUML 依赖)
brew install graphviz
5.4 图表样式规范
5.4.1 基础样式配置
' 基础主题和样式
!theme plain
skinparam backgroundColor white
skinparam roundCorner 20
skinparam defaultFontName "Microsoft YaHei"
skinparam shadowing false
' 通用样式
skinparam {
FontColor #333333
FontSize 14
FontStyle plain
}
' 类图样式
skinparam class {
BackgroundColor #FEFEFE
BorderColor #3498DB
BorderThickness 2
AttributeFontColor #666666
StereotypeFontColor #666666
}
' 包样式
skinparam package {
BackgroundColor #FEFEFE
BorderColor #999999
FontColor #333333
BorderThickness 2
}
' 组件样式
skinparam component {
BackgroundColor #FFFFFF
BorderColor #3498DB
FontColor #333333
}
' 数据库样式
skinparam database {
BackgroundColor #F8F9FA
BorderColor #2ECC71
FontColor #333333
}
' 箭头样式
skinparam arrow {
Color #666666
FontColor #666666
Thickness 2
}
5.4.2 配色方案
推荐使用以下配色方案:
-
主要颜色
- 主色调:
#3498DB
(蓝色) - 次要色:
#2ECC71
(绿色) - 强调色:
#9B59B6
(紫色) - 警告色:
#E74C3C
(红色) - 背景色:
#FEFEFE
(白色) - 文字色:
#333333
(深灰)
- 主色调:
-
模块配色
- 核心模块:
#E3F2FD
(浅蓝) - 数据存储:
#E8F5E9
(浅绿) - 插件系统:
#FFF3E0
(浅橙) - 执行模块:
#F3E5F5
(浅紫) - 外部系统:
#ECEFF1
(浅灰)
- 核心模块:
六、总结与展望
6.1 图表设计原则
-
清晰性
- 层次分明
- 关系明确
- 避免过度复杂
-
一致性
- 统一的命名规范
- 一致的样式风格
- 相同的图表结构
-
可维护性
- 模块化设计
- 适当的注释
- 版本控制
6.2 与 Markdown 集成
6.2.1 内联方式
```plantuml
@startuml
Alice -> Bob: Hello
Bob -> Alice: Hi!
@enduml
#### 6.2.2 外部文件方式
1. 创建 `.puml` 文件:
```plantuml
@startuml architecture
' 图表内容
@enduml
- 在 Markdown 中引用:

6.2.3 自动化构建
创建构建脚本 build.sh
:
#!/bin/bash
# 设置变量
PUML_DIR="docs/puml"
IMG_DIR="docs/images"
README="docs/README.md"
# 创建输出目录
mkdir -p ${IMG_DIR}
# 转换所有 PlantUML 文件
for file in ${PUML_DIR}/*.puml; do
filename=$(basename "$file" .puml)
plantuml -tpng "$file" -o "${IMG_DIR}"
plantuml -tsvg "$file" -o "${IMG_DIR}"
echo "Converted $filename"
done
echo "All diagrams have been generated!"
6.3 进阶技巧
6.3.1 自定义样式
!define CUSTOM_STYLE() {
!function $setStyle($element)
!style $element {
BackgroundColor #FEFEFE
BorderColor #3498DB
FontColor #333333
}
!endfunction
}
' 使用自定义样式
CUSTOM_STYLE()
$setStyle(componentDiagram)
6.3.2 条件样式
!$isDarkMode = %false()
!if ($isDarkMode)
skinparam backgroundColor #333333
skinparam fontColor #FFFFFF
!else
skinparam backgroundColor #FFFFFF
skinparam fontColor #333333
!endif
6.3.3 复杂布局
@startuml
!include layout.puml
' 使用布局模板
LAYOUT_TOP_DOWN()
COMPONENT_SPACING_LARGE()
' 图表内容
@enduml
6.4 工具链集成
6.4.1 Git 集成
创建 .gitattributes
:
*.puml linguist-language=PlantUML
*.png binary
*.svg binary