簡介
軟體架構常被描述為系統的「藍圖」,但對許多初學者而言,將抽象需求轉化為具體且可溝通的圖表,仍是一項重大挑戰。C4 模型(情境、容器、組件與程式碼)已成為軟體架構視覺化的產業標準,因為它將架構圖視為地圖:從高層級的國家概覽縮放至街景級別的細節。然而,學習其記號並手動構建這些圖表可能令人望而生畏。
這正是Visual Paradigm 的 AI 聊天機器人改變了遊戲規則。透過將生成式 AI 直接整合至建模環境中,初學者可以跳過拖放式建模陡峭的學習曲線,改以自然語言描述其系統,進而生成準確、分層的 C4 圖表。層 C4 圖表。關鍵的是,AI 會生成標準的PlantUML/C4-PlantUML 程式碼,使圖表具備版本控制能力、可重現性與可編輯性。

本全面指南探討如何運用 Visual Paradigm AI 聊天機器人建立 C4 模型,並以湖畔銀行線上銀行平台為案例研究。我們將逐步 walkthrough C4 模型的每個層級,解釋所呈現的架構決策,提供精確的 PlantUML 原始碼,並展示 AI 如何加速從概念到專業文件化的過程。
關鍵概念:C4 模型與 AI 輔助建模
在深入圖表之前,必須理解使此工作流程有效的核心原則。
1. C4 階層結構

-
第 1 層:系統情境:將軟體系統視為黑盒子,顯示其使用者(參與者)與外部依賴關係。它回答「範圍為何?誰關心它?」
-
第 2 層:容器: 縮放至系統內部,顯示可部署單元(網頁應用程式、資料庫、微服務)。它回答「系統在技術上如何結構化?」
-
第 3 層:組件:縮放至單一單一容器,顯示內部模組、類別或函式庫。它回答「此特定單元內部如何運作?」
-
第 4 層:程式碼:(選填)顯示實作細節的 UML 類別或序列圖。
2. 使用 PlantUML 進行 AI 驅動的架構建模
Visual Paradigm AI 聊天機器人扮演著「架構協作夥伴」」。您無需搜尋圖形並手動繪製連接線,只需將需求提示給 AI。AI 能理解 C4 語義並生成有效的「C4-PlantUML」程式碼。這意味著:
-
友善版本控制:圖表以文字檔案形式存在於您的 Git 儲存庫中,與您的應用程式程式碼並存。
-
統一的樣式:像「
LAYOUT_WITH_LEGEND()」與「skinparam vpDiagramType」等巨集可確保每張圖表自動符合團隊標準。 -
迭代式精進:您可以透過聊天要求 AI 修改特定關係或新增容器,它會重新生成乾淨的程式碼,而非破壞手動佈局。
3. 邊界管理
C4 中的一個關鍵概念是「企業邊界」」。此視覺分組將團隊擁有並控制的系統與外部第三方系統區分開來。在所有縮放層級維持此區分,對於理解風險與整合介面至關重要。在 PlantUML 中,這是透過「Enterprise_Boundary()」與「System_Boundary()」巨集明確編碼實現的。
第 1 層:系統情境圖——定義範圍
任何 C4 參與的第一步是建立情境。使用 Visual Paradigm AI 聊天機器人,初學者只需描述銀行平台的生態系統,即可生成此基礎圖表。

此圖表代表什麼
這是一張「系統情境圖 — C4 模型的最高層級。它將整個銀行平台視為單一系統(黑盒),並聚焦於誰與之互動,以及哪些外部依賴它依賴的資源。
關鍵設計選擇說明
-
企業邊界 (
湖畔銀行): 視覺化地將團隊所擁有的系統(平台本身及其資料庫)歸為一組,並將其與更廣泛的軟體生態系區隔開來。 -
角色區分:
Personvs.Person_Ext用以區分內部使用者(營運人員)與外部使用者(客戶)。 -
技術註解: 關係上的標籤 (
HTTPS,SOAP/XML,OIDC,JDBC) 增添真實的整合細節,同時不使圖表變得雜亂。 -
自明圖例:
LAYOUT_WITH_LEGEND()呼叫會加入 C4 形狀圖例,以便將圖表分享給非技術利害關係人。
L1 PlantUML 原始程式碼
以下是 Visual Paradigm AI 聊天機器人為此圖表生成的確切程式碼。請注意使用了官方的 C4-PlantUML 標準函式庫以及 Visual Paradigm 專屬的 skinparams。
@startuml
' skinparam linetype ortho
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
skinparam defaultFontSize 14
skinparam defaultFontColor #333333
skinparam vpDiagramType C4modelSystemContextDiagram
LAYOUT_TOP_DOWN()
LAYOUT_WITH_LEGEND()
title 線上銀行平台系統情境圖
Person(customer, "個人銀行客戶", "透過網頁或行動裝置查詢餘額、繳納帳單、轉帳及管理卡片")
Person_Ext(admin, "銀行作業人員", "處理開戶、申訴與詐欺調查")
Enterprise_Boundary(bank, "湖畔銀行") {
System(online_banking, "線上銀行平台", "允許客戶查看帳戶並數位執行銀行作業")
SystemDb(accounts_db, "帳戶資料庫", "儲存客戶帳戶、餘額及交易記錄")
}
System_Ext(core_banking, "核心銀行系統", "銀行舊有帳簿,擁有所有帳戶餘額與交易")
System_Ext(identity, "身份提供者", "驗證並管理客戶憑證與多重要素驗證")
System_Ext(push_gateway, "SMS / 推播通知閘道", "發送一次性密碼與交易警示")
Rel(customer, online_banking, "使用網頁與行動應用程式", "HTTPS")
Rel(admin, online_banking, "透過", "HTTPS")管理案件與審查
Rel(online_banking, accounts_db, "使用", "JDBC")讀取與寫入帳戶資料
Rel(online_banking, core_banking, "使用", "SOAP/XML")發布交易並對帳
Rel(online_banking, identity, "透過", "OIDC")驗證使用者
Rel(online_banking, push_gateway, "透過", "HTTPS/API")傳送一次性密碼與警示
@enduml
💡 初學者提示:當向 AI 提示 Level 1 時,請明確列出您的參與者與外部系統。要求 AI「套用企業邊界樣式」並「在所有關聯上包含通訊協定標籤」,以確保輸出專業且與上述程式碼相符。
Level 2:容器圖表——開啟黑盒子
一旦情境確立,接下來的邏輯步驟便是將系統分解為其技術建構模組。AI 聊天機器人可以將 Level 1 的情境擴展為容器圖表,同時保留外部參照。

L2 – 容器圖表

與 Level 1 的差異
情境圖表中單一的「線上銀行平台」黑盒子現在已開啟,以顯示可部署單元(容器):
-
前端:
網頁應用程式,行動應用程式,以及作業主控台各自連接到 API 閘道,而非直接連接到後端服務。 -
後端: 其中
銀行 API 閘道將流量路由至三個輕量級服務:驗證,交易,以及客戶. -
持久化與訊息傳遞:單一
PostgreSQL資料庫加上RabbitMQ用於非同步通知流程的事件匯流排。 -
外部一致性:外部系統自第一層保持完整,現已連接至特定的內部容器。
初學者設計筆記
-
技術堆疊可見性:每個容器均包含其技術堆疊(React、Spring Boot、PostgreSQL)。這正是第二層所要傳達的內容。
-
非同步解耦:該
ContainerQueue(events_queue, "Event Bus", "RabbitMQ")元素展示了服務與通知閘道之間的非同步訊息傳遞。 -
邊界規範:
人員,Person_Ext,以及System_Ext元素均保持在外部系統邊界System_Boundary.
L2 PlantUML 原始碼
注意 AI 如何正確使用容器, ContainerDb,以及ContainerQueue巨集,並從第一層級維持一致的別名命名以確保可追蹤性。
@startuml
' skinparam linetype ortho
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
skinparam defaultFontSize 14
skinparam defaultFontColor #333333
skinparam vpDiagramType C4modelContainerDiagram
LAYOUT_TOP_DOWN()
LAYOUT_WITH_LEGEND()
title 線上銀行平台 - 容器圖
Person(customer, "個人銀行客戶", "透過網頁或行動裝置查詢餘額、繳納帳單、轉帳及管理卡片")
Person_Ext(admin, "銀行營運人員", "處理開戶、申訴與詐欺調查")
System_Boundary(bank, "湖畔銀行") {
Container(web_app, "網頁應用程式", "JavaScript / React", "在瀏覽器中提供客戶使用的單頁應用程式")
Container(mobile_app, "行動應用程式", "iOS / Android (Kotlin, Swift)", "用於隨時隨地進行銀行的原生行動應用程式")
Container(admin_console, "營運控制台", "TypeScript / React", "供員工管理案件與帳戶的內部管理介面")
Container(api, "銀行 API 閘道器", "Java / Spring Boot", "提供 REST API 並實施驗證、限流與路由")
Container(auth_svc, "驗證服務", "Java / Spring Boot", "處理登入、工作階段與多因素驗證協調")
Container(transaction_svc, "交易服務", "Java / Spring Boot", "協調轉帳、帳單繳納與對帳")
Container(customer_svc, "客戶服務", "Java / Spring Boot", "管理客戶個人資料與偏好設定")
ContainerDb(accounts_db, "帳戶資料庫", "PostgreSQL", "儲存客戶帳戶、餘額與交易記錄")
ContainerQueue(events_queue, "事件匯流排", "RabbitMQ", "用於通知與詐欺偵測的異步事件")
}
System_Ext(core_banking, "核心銀行系統", "銀行擁有所有帳戶餘額與交易的傳統帳簿")
System_Ext(identity, "身份提供者", "驗證並管理客戶憑證與多因素驗證")
System_Ext(push_gateway, "SMS / 推播通知閘道器", "發送一次性密碼與交易警示")
Rel(customer, web_app, "用於線上銀行作業", "HTTPS")
Rel(customer, mobile_app, "用於行動銀行作業", "HTTPS/API")
Rel(admin, admin_console, "用於管理案件與帳戶", "HTTPS")
Rel(web_app, api, "透過", "JSON/HTTPS")
Rel(mobile_app, api, "透過", "JSON/HTTPS")
Rel(admin_console, api, "透過", "JSON/HTTPS")
Rel(api, auth_svc, "將驗證請求路由至", "gRPC")
Rel(api, transaction_svc, "將交易請求路由至", "gRPC")
Rel(api, customer_svc, "將個人資料請求路由至", "gRPC")
Rel(auth_svc, identity, "透過", "OIDC")
Rel(auth_svc, push_gateway, "透過", "HTTPS/API")
Rel(transaction_svc, accounts_db, "使用", "JDBC")
Rel(customer_svc, accounts_db, "使用", "JDBC")
Rel(customer_svc, events_queue, "發布客戶事件至", "AMQP")
Rel(transaction_svc, events_queue, "發布交易事件至", "AMQP")
Rel(transaction_svc, core_banking, "透過", "SOAP/XML")
Rel(events_queue, push_gateway, "傳送警示至", "AMQP")
@enduml
💡 初學者提示:請 Visual Paradigm AI 根據我的情境圖「生成容器圖」以維持別名一致性。在提示詞中指定您的技術堆疊,以便在每個巨集的第三參數中獲得準確的技術註解。
Container()巨集。
第三層:元件圖 – 閘道器內部
第三層是許多初學者感到困難的地方,因為它需要將單一特定容器進行分解,同時將其他部分視為不透明的背景。AI 聊天機器人擅長在此處生成專注的元件視圖,並正確使用Container_Boundary進行範圍界定。

L3 – 元件圖 – 銀行 API 閘道器(容器)

此第三層圖表顯示什麼
此圖縮放至銀行 API 閘道器容器,並將其分解為內部軟體元件。根據 C4 指引,它選擇一個容器進行分解——前端與下游服務則保持為其周圍的封閉上下文。
閘道的內部結構
-
API 路由器(Spring Cloud Gateway):將 incoming 請求路由至下游服務。 -
驗證與速率限制過濾器:驗證 JWT 權杖、實施速率限制(Resilience4j),並檢查權限。 -
Session 快取(Redis):優化驗證檢查的延遲。 -
分散式追蹤(OpenTelemetry):透過路由路徑實現可觀測性。 -
錯誤處理器:將失敗統一轉換為一致的 HTTP 回應。
L3 PlantUML 原始碼
在第 3 層,注意使用Component()巨集,位於Container_Boundary()。外部容器僅被引用,無需重新定義其內部結構,以維持正確的抽象層級。
@startuml
' skinparam linetype ortho
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
skinparam defaultFontSize 14
skinparam defaultFontColor #333333
skinparam vpDiagramType C4modelComponentDiagram
LAYOUT_WITH_LEGEND()
title Lakeside Bank 銀行 API 閘道元件圖
Container(web_app, "Web 應用程式", "React SPA", "客戶使用的單頁瀏覽器應用程式")
Container(mobile_app, "行動應用程式", "iOS / Android", "客戶使用的原生行動應用程式")
Container(admin_console, "作業控制台", "React", "員工使用的內部管理介面")
Container_Boundary(api_gw, "銀行 API 閘道") {
Component(routing, "API 路由器", "Spring Cloud Gateway", "將 incoming 請求路由至正確的下游服務")
Component(auth_filter, "驗證與速率限制過濾器", "Spring Security / Resilience4j", "驗證 JWT 權杖、套用速率限制並檢查權限")
Component(tracing, "分散式追蹤", "OpenTelemetry", "關聯跨服務的請求以實現可觀測性")
Component(cache, "Session 快取", "Redis", "快取權杖與 Session 狀態以加速驗證檢查")
Component(error_handler, "錯誤處理器", "Spring Boot", "統一錯誤回應並將例外狀況映射至 HTTP 狀態碼")
}
Container(auth_svc, "驗證服務", "Spring Boot", "處理登入、Session 與多因素驗證協調")
Container(transaction_svc, "交易服務", "Spring Boot", "協調轉帳、帳單支付與對帳")
Container(customer_svc, "客戶服務", "Spring Boot", "管理客戶資料與偏好設定")
Rel(web_app, routing, "傳送 API 請求至", "JSON/HTTPS")
Rel(mobile_app, routing, "傳送 API 請求至", "JSON/HTTPS")
Rel(admin_console, routing, "傳送管理 API 請求至", "JSON/HTTPS")
Rel(routing, auth_filter, "將每個請求過濾通過", "")
Rel(auth_filter, cache, "讀取與寫入 Session 狀態於", "")
Rel(auth_filter, tracing, "發出 spans 至", "")
Rel(routing, tracing, "以 instrumentation 方式處理請求呼叫", "")
Rel(error_handler, routing, "透過", "傳回統一回應")
Rel(routing, auth_svc, "將驗證請求路由至", "gRPC")
Rel(routing, transaction_svc, "將交易請求路由至", "gRPC")
Rel(routing, customer_svc, "將個人資料請求路由至", "gRPC")
@enduml
💡 初學者提示:在第三層級時,請明確指定要分解的容器。向 AI 提示「僅顯示銀行 API 閘道容器內的元件」,以避免過度分解。請注意,內部元件關係(例如
路由→驗證過濾器) 在為進程內呼叫時,請省略技術標籤,以保持圖表簡潔。
了解聊天機器人介面
知道什麼要建模的內容只是成功的一半;知道如何如何與工具互動同樣重要。Visual Paradigm 的 AI 聊天機器人介面旨在讓 C4 建模過程更具對話性,同時揭示底層的 PlantUML 程式碼。


初學者關鍵介面元素
-
對話式畫布:聊天面板允許您逐步完善圖表。如果 AI 生成的容器圖表缺少訊息佇列,只需輸入「在交易服務與通知閘道之間新增 RabbitMQ」,即可立即獲得更新的 PlantUML 程式碼。
-
程式碼與視覺同步:生成的 PlantUML 程式碼會與渲染後的圖表並列顯示。您可以直接編輯程式碼,或繼續對話——兩種方式均保持同步。
-
圖表預覽與匯出:渲染後的圖表可匯出為 PNG、SVG 或 PDF 格式用於文件記錄,而 PlantUML 原始碼則保留在您的儲存庫中。
-
提示詞歷史記錄與範本:先前的提示詞會自動儲存,讓您能重複使用成功的模式。內建的 C4 提示詞範本可協助初學者有效組織請求。
-
驗證回饋:聊天機器人可根據 C4 最佳實踐審查您生成的程式碼,並提出改進建議,扮演自動化架構導師的角色。
結論
C4 模型提供結構;Visual Paradigm 的 AI 聊天機器人Visual Paradigm 的 AI 聊天機器人提供了加速。對於初學者而言,這種組合消除了通常伴隨空白畫布架構建模的癱瘓感。透過從自然語言描述開始,並換取可直接投入生產的 PlantUML 程式碼,新進架構師能以傳統時間的一小部分,產出專業級的系統情境、容器與元件圖表。
湖畔銀行的範例說明了「AI 生成的 C4 圖表並非簡化的玩具——它們體現了真實的架構決策:企業邊界、非同步解耦、閘道模式以及技術特定的註解。每一層級都包含完整的 PlantUML 原始程式碼,意味著這些圖表是活生生的產出物,而非靜態的交付成果。它們可以進行版本控制、在拉取請求中進行審查,並隨著系統的演進而重新生成。
您的下一步:開啟 Visual Paradigm,啟動「AI 聊天機器人,並描述您自己的系統。從第一層級開始,讓 AI 生成 PlantUML、渲染圖表,並逐層級縮放。地圖將從對話中浮現——而程式碼將使其保持活力。







