Communitygithub.com

藍圖架構圖

根據描述或讀取儲存庫,自動繪製技術繪圖風格的系統架構圖——服務、資料庫、佇列、快取和客戶端自動佈局,附帶標籤的請求和事件流程以及移動的資料流點。輸出 HTML 頁面、SVG 和 PNG。當有人想要架構圖、系統設計圖、服務對應圖或資料流程圖時使用。

藍圖架構圖 是什麼?

這是一個 AI 代理技能,能夠將系統描述或實際的儲存庫內容轉化為技術藍圖風格的系統架構圖。它會自動分析部署配置(如 Docker Compose、Kubernetes、Terraform)來識別服務、資料儲存、佇列以及它們之間的連線,然後生成三種輸出格式:一個帶有動態資料流點動畫的 HTML 頁面、一個靜態 SVG 檔案(適用於文件或維基)以及一個 PNG 圖片。輸出的視覺風格模擬工程藍圖(或淺色「白圖」),包含柵格背景、標準化形狀、帶標籤的連線(實線表示請求,虛線表示事件)以及標題區塊。該技能支援 Claude Code、Cursor、Codex 等 AI 編碼代理,並可透過一個 JSON 檔案(diagram.json)進行配置,以控制佈局方向、主題顏色、分組和焦點節點。它適用於記錄現有系統、規劃新架構或向利害關係人呈現設計審查。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lookbkdev/lookbk-skills/tree/HEAD/skills/blueprint-architecture

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

藍圖架構圖 是做什麼的?

一個像工程圖紙一樣繪製的系統:帶有網格的藍圖(或淺色「白圖」),每個元件根據類型以帶標籤的形狀呈現,請求使用實線箭頭,事件使用虛線箭頭,分組使用虛線區域,並包含圖例和標題區塊。您(或使用者)將系統描述為 diagram.json;一個腳本使用 dagre(已捆綁,無需安裝)進行佈局並繪製:

  • out/index.html:圖表,每個連線上有一個移動的點,事件線會流動。可從磁碟開啟,並自動縮放適配視窗。
  • out/diagram.svg:沒有動畫的相同圖表,適用於文件、維基和幻燈片。
  • out/diagram.png:兩倍尺寸的靜態圖像,透過無頭 Chrome 生成,適用於任何需要圖片的場合。

你需要什麼

  • Node.js 18 或更新版本。建置不需要其他東西。
  • Chrome、Chromium 或 Edge 用於生成 PNG。腳本會在常用位置尋找瀏覽器;如果找不到,請設定 CHROME_PATH。
  • 開啟圖表或匯出時需要網際網路連線,以獲取 Google Fonts 的 JetBrains Mono 字型(如果沒有,則會回退到系統等寬字型)。

此技能的資料夾是 <skill>,即此 SKILL.md 檔案所在的資料夾。

步驟

1. 找出系統

當使用者描述系統時,使用他們的詞語。當要求讀取儲存庫時,請在繪製之前收集證據,並且只繪製你找到的內容:

  1. 可部署元件:docker-compose*.yml 服務、Kubernetes Deployment、Helm chart、Procfile、無伺服器配置(serverless.yml、vercel.json、wrangler.toml)、Terraform 資源以及單體儲存庫中的應用程式(apps/、services/、packages/* 中帶有啟動腳本的)。
  2. 資料儲存與中介軟體:映像和受管資源(postgres、mysql、mongo、redis、kafka、rabbitmq、sqs、s3),以及連線設定如 DATABASE_URL、REDIS_URL、KAFKA_BROKERS、儲存桶名稱。
  3. 連線:指向其他服務的 HTTP 用戶端和基礎 URL、gRPC stub、佇列生產者和消費者(主題和佇列名稱)、depends_on、向第三方(Stripe、LLM API、電子郵件提供者)的對外呼叫。
  4. 呼叫端:網頁和行動應用程式、CLI、cron 作業、webhook。

保持 5 到 20 個節點。將副本和小型輔助工具合併到它們所屬的服務中;與其擠在一起,不如拆分成多張圖表("sheet": "02 / 03")。註明任何你推斷而非找到的內容,並告知使用者。

2. 編寫 diagram.json

{
  "title": "訂單服務 · v2",
  "subtitle": "系統架構 · 來自 /services 和 docker-compose.yml · 2026年10月21日",
  "sheet": "01 / 01",
  "direction": "LR",
  "theme": "blueprint",
  "groups": [{ "id": "core", "label": "訂單平台" }],
  "nodes": [
    {
      "id": "gateway",
      "label": "API 閘道",
      "sub": "認證 · 速率限制",
      "kind": "service"
    },
    {
      "id": "orders",
      "label": "訂單服務",
      "sub": "v2 · Go · 6 個 Pod",
      "kind": "service",
      "group": "core",
      "focus": true
    },
    {
      "id": "db",
      "label": "Postgres",
      "sub": "訂單 · 庫存",
      "kind": "database"
    },
    {
      "id": "bus",
      "label": "事件匯流排",
      "sub": "Kafka · 3 個主題",
      "kind": "queue"
    }
  ],
  "edges": [
    { "from": "gateway", "to": "orders", "label": "POST /orders" },
    { "from": "orders", "to": "db", "label": "SQL" },
    { "from": "orders", "to": "bus", "label": "order.created", "async": true }
  ]
}
欄位說明限制
title系統或視圖的名稱(必填);也會顯示在標題區塊60
subtitle圖表顯示的內容及其來源:來源和日期100
sheet標題區塊中的圖表編號,例如 "02 / 03"(預設 01 / 01)–
directionLR 從左到右(預設,適用於請求流程)或 TB 從上到下(管道)–
themeblueprint(深藍色,預設)、whiteprint(淺色)或顏色:使用十六進位色的 { "paper", "line", "accent", "dim" }–
groups在其節點周圍繪製的區域:{ "id", "label" }–
nodes[].id字母、數字、- 或 _;邊線透過它來引用(必填)–
nodes[].label節點上的名稱(必填)28
nodes[].sub第二行:語言、執行階段、規模、包含的內容36
nodes[].kind形狀:service(預設)、client、database、queue、cache、storage、function、external(第三方,虛線)–
nodes[].group群組 ID–
nodes[].focustrue 以強調色繪製:代表圖表主要關注的元件–
edges[]{ "from", "to" } 節點 ID,方向表示資料或控制流程–
edges[].label協定、端點、主題或動詞:HTTPS、POST /orders、order.created24
edges[].asynctrue 用於事件、佇列以及任何「發射後不理」的類型(虛線,流動)–

提示:

  • 使用實際傳輸的內容為邊線添加標籤:端點、主題、資料表、動詞。只有在不會增加任何價值時才省略標籤。
  • 邊線的方向應與請求的方向一致(從呼叫端到被呼叫端),事件的方向也應一致(從生產者到佇列再到消費者)。
  • 最多將一個節點標記為 focus。
  • 最多允許 40 個節點,但超過大約 20 個時,圖表會變得難以閱讀。

3. 建置並檢查

node <skill>/scripts/build.mjs diagram.json out

它會檢查檔案並一次性列出所有問題(例如邊線指向不存在的節點、標籤超出限制),然後寫入 out/index.html 和 out/diagram.svg。開啟 out/index.html 並檢查:

  • 步驟 1 中的每個節點都存在,而且沒有你未發現的節點,
  • 邊線方向正確且標籤可讀,
  • 群組包含正確的節點。

如果佈局雜亂,請嘗試切換 direction,或重新排序 nodes 和 edges:佈局會從它們的順序開始。

4. 匯出 PNG

node <skill>/scripts/export-png.mjs out/index.html

它會將 out/diagram.png 以圖表兩倍的大小寫入;若要使用實際大小,請加上 --scale=1。

5. 交付

提供使用者 out/index.html(動畫版)、out/diagram.svg 和 out/diagram.png,以及 diagram.json,這樣當系統變更時可以更新圖表:編輯 JSON 並再次執行步驟 3 和 4。如果圖表應存放在儲存庫中,docs/architecture/ 資料夾同時存放 JSON 和 SVG 是個好選擇;SVG 可以在 GitHub 和大多數維基中呈現。

故障排除

  • build: fix diagram.json first:每一行都會指出是哪個節點或邊線以及需要修改的內容。
  • PNG 步驟顯示找不到 Chrome:請設定 CHROME_PATH,或開啟 out/index.html 並截圖。
  • 文字顯示為不同的等寬字型:頁面無法連線到 Google Fonts。請安裝 JetBrains Mono(免費)以在離線時匹配。
  • 邊線大量交叉:切換 direction,將糾結的節點在 nodes 中移前或移後,或者將系統拆分為兩張圖表。

檔案

  • scripts/build.mjs:檢查 diagram.json,進行佈局並繪製 HTML 和 SVG。無需安裝任何依賴項。
  • scripts/export-png.mjs:使用無頭 Chrome 儲存 PNG。
  • vendor/dagre.esm.js:dagre 圖形佈局函式庫(MIT 授權),已捆綁以便無需安裝;其授權檔案為 vendor/LICENSE-dagre.txt。
  • examples/order-service/(藍圖,從左到右)和 examples/rag-pipeline/(白圖,從上到下):完整的 diagram.json 檔案。Lookbk 上的預覽圖即來自這些範例。
  • NOTICE.md:此技能使用的第三方軟體和字型。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能