停止拖動方塊:透過 VPasCode 與 AI 聊天機器人產生 C4 圖表

以圖形使用者介面為優先的架構所面臨的問題

多年來,C4 建模一直陷入一個悖論:我們提倡「架構即程式碼」,但大多數團隊仍透過在圖形使用者介面中拖曳方塊來建立 C4 圖表。這導致文件過時、二進位檔案中的合併衝突,以及圖表與實際系統之間的脫節。

現代開發團隊需要一種工作流程,其中對話激發設計程式碼維持其運作。透過結合 Visual Paradigm 的AI 聊天機器人VPasCode,您可以在幾分鐘內從自然語言提示轉換為生產等級的 C4 PlantUML,完全無需使用滑鼠。

Conversion-Driven C4 Modeling | Visual Paradigm

本指南將透過具體的 PlantUML 範例展示該工作流程。


第一階段:使用 AI 聊天機器人進行對話式設計

Visual Paradigm 中的 AI 聊天機器人扮演您的架構協作夥伴。您不是從空白畫布開始,而是從意圖開始。

✅ 有效的提示策略

不要要求 AI「繪製圖表」。請要求它使用 C4 語義對系統進行建模。請明確說明邊界、技術與資料流程。

💬 AI 聊天機器人提示範例:
「請扮演軟體架構師。為『線上銀行系統』建立 C4 容器圖表。包含網頁應用程式(React)、行動應用程式(Flutter)、API 閘道(Kong)、核心銀行服務(.NET)以及 PostgreSQL 資料庫。顯示透過 OAuth2 的驗證流程與帳戶餘額查詢。使用官方巨集輸出有效的 C4-PlantUML 程式碼。」

🤖 預期的 AI 輸出(已精修)

AI 將產生初步的 PlantUML 模型。請批判性地檢視它——AI 擅長結構,但可能會幻覺出關係。使用後續的聊天提示進行精修:“在 API 閘道與核心銀行服務之間新增 Redis 快取,用於會話管理”“將 PostgreSQL 資料庫標記為已棄用,並新增新的 MongoDB 叢集。”


第二階段:使用 VPasCode 與 PlantUML 進行確定性建模

一旦 AI 產生可行的草稿,停止聊天並開始編碼。將精修後的 PlantUML 複製到.puml由 VPasCode 管理的檔案。這是您的唯一真實來源。

以下是透過此工作流程產生的生產就绪 C4 PlantUML 範例。請確保您的 Visual Paradigm 專案包含C4-PlantUML 函式庫.

範例 1:系統情境圖(第 1 層)

此定義了您系統的邊界及其外部參與者。

@startuml OnlineBanking_Context
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml

title 系統情境:線上銀行平台

Person(customer, "銀行客戶", "檢視帳戶、轉帳、繳費")
Person(admin, "後台管理員", "管理使用者、監控交易")

System(banking, "線上銀行平台", "透過網頁與行動裝置提供網路銀行服務")

System_Ext(coreLegacy, "核心銀行主機", "處理交易、維護總帳")
System_Ext(email, "電子郵件服務", "發送通知與報表")
System_Ext(oauth, "OAuth2 提供者", "處理身分與驗證")

Rel(customer, banking, "使用", "HTTPS/WebSocket")
Rel(admin, banking, "管理", "HTTPS")
Rel(banking, coreLegacy, "讀取/寫入", "REST/SOAP")
Rel(banking, email, "發送警示", "SMTP/API")
Rel(banking, oauth, "驗證", "OIDC")

@enduml

範例 2:容器圖(第 2 層)

將系統分解為執行時容器。請注意使用ContainerDbContainerQueue以及技術標籤——這對現代雲端原生系統至關重要。

@startuml OnlineBanking_Containers
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml

title 容器圖:線上銀行平台

Person(customer, "銀行客戶")

System_Boundary(banking, "線上銀行平台") {
    Container(webapp, "Web 應用程式", "React + Node.js", "用於瀏覽器端銀行的單頁應用程式")
    Container(mobile, "行動應用程式", "Flutter", "iOS/Android 原生體驗")
    Container(api, "API 閘道", "Kong", "路由請求、限流、驗證")
    Container(service, "帳戶服務", ".NET 8", "帳戶與餘額的業務邏輯")
    Container(cache, "Session 快取", "Redis", "儲存 JWT 權杖與 Session 狀態")
    ContainerDb(db, "帳戶資料庫", "PostgreSQL", "客戶帳戶、餘額、交易")
    ContainerQueue(events, "事件匯流排", "RabbitMQ", "非同步交易通知")
}

System_Ext(oauth, "OAuth2 提供者")
System_Ext(legacy, "核心銀行主機")

Rel(customer, webapp, "使用", "HTTPS")
Rel(customer, mobile, "使用", "HTTPS")
Rel(webapp, api, "呼叫", "REST/JSON")
Rel(mobile, api, "呼叫", "REST/JSON")
Rel(api, oauth, "驗證權杖", "OIDC")
Rel(api, service, "路由至", "gRPC")
Rel(service, cache, "讀取/寫入 Session", "TCP")
Rel(service, db, "查詢", "SQL/TCP")
Rel(service, events, "發布", "AMQP")
Rel(service, legacy, "同步帳簿", "SOAP")

@enduml

範例 3:元件圖(第 3 層)– 帳戶服務

縮放至單一容器。這正是 VPasCode 的強項:元件可直接對應至程式碼模組。

@startuml AccountService_Components
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml

title 元件圖:帳戶服務 (.NET 8)

Container(api, "API 閘道", "Kong")
ContainerDb(db, "帳戶資料庫", "PostgreSQL")
ContainerQueue(events, "事件匯流排", "RabbitMQ")

Component(auth, "Auth 中間件", "ASP.NET Filter", "驗證 JWT、擷取使用者情境")
Component(controller, "AccountController", "ASP.NET API", "/accounts 的 REST 端點")
Component(domain, "AccountDomainService", "C# 類別庫", "餘額計算、轉帳規則")
Component(repo, "AccountRepository", "EF Core", "資料存取、查詢最佳化")
Component(publisher, "EventPublisher", "MassTransit", "發布 TransactionCompleted 事件")

Rel(api, auth, "傳遞請求")
Rel(auth, controller, "轉發已驗證請求")
Rel(controller, domain, "呼叫業務邏輯")
Rel(domain, repo, "查詢/儲存")
Rel(repo, db, "執行 SQL")
Rel(domain, publisher, "產生領域事件")
Rel(publisher, events, "發布", "AMQP")

@enduml


第三階段:將 VPasCode 整合至您的開發工作流程

產生 PlantUML 只是成功的一半。以下是讓其在現代團隊中落實的方法:

將所有內容納入版本控制

儲存所有 .puml檔案與您的應用程式程式碼放在同一個儲存庫中。將圖表視為基礎設施即程式碼:

/docs/architecture/c4/
├── 01-context.puml
├── 02-containers.puml
├── 03-account-service-components.puml
└── README.md

在 CI/CD 中自動化渲染

使用 Visual Paradigm 的 CLI 或 GitHub Action,在每個拉取請求(PR)時自動渲染 PNG/SVG 檔案。切勿手動提交已渲染的影像。

# GitHub Action 範例程式碼片段
- name: 渲染 C4 圖表
  run: |
    vp-cli render -i docs/architecture/c4/*.puml 
                  -o docs/architecture/output/ 
                  -f svg --c4-layout auto

與 VPasCode 進行雙向同步

VPasCode 不僅是渲染器——它是一個 模型同步引擎。當您更新 PlantUML 時:

  • Visual Paradigm 的中央模型會自動更新

  • 交叉參照(例如,將元件連結至 Jira 大型專案或 Git 儲存庫)將保持完整

  • 使用圖形使用者介面(GUI)的團隊成員會即時看到變更

  • AI 聊天機器人對話可以參照 目前模型狀態,而非過時的快照

⚠️ 重要警告:切勿讓 AI 生成的 PlantUML 跳過人工審查。AI 經常虛構不存在的 API、錯誤標註通訊協定,或遺漏關鍵的安全邊界。在提交前,務必將生成的程式碼與您實際的程式碼庫及威脅模型進行比對驗證。


現代團隊的採用檢查清單

步驟 行動 工具
1 透過對話式提示建立初始 C4 模型 AI 聊天機器人
2 透過迭代對話精確修正 AI 輸出 AI 聊天機器人
3 將驗證過的 PlantUML 匯出至版本控制儲存庫 VPasCode
4 設定 CI 流程以在合併請求時自動渲染 VPasCode 命令列介面
5 將 C4 元素連結至程式碼儲存庫、工單與文件 Visual Paradigm
6 安排季度「模型清潔」審查,運用 AI 批判分析 AI 聊天機器人

結語

C4 建模不該成為團隊效能的負擔。將 AI 視為「創意火花」並將 VPasCode 視為「確定性錨點」,您就能兼得兩全其美:快速探索「與」可持續的文檔。停止拖曳方塊。以對話的速度開始架構設計。