excalidraw-diagram

excalidraw-diagram

热门

生成具备“视觉论证”能力的 Excalidraw 架构图 JSON 文件。当用户需要对工作流、系统架构或抽象概念进行可视化表达时使用。

4109Star
476Fork
更新于 2026/3/1
SKILL.md
只读
名称
excalidraw-diagram
描述

生成具备“视觉论证”能力的 Excalidraw 架构图 JSON 文件。当用户需要对工作流、系统架构或抽象概念进行可视化表达时使用。

Excalidraw Diagram Creator

生成真正的 .excalidraw JSON 文件——用图形进行论证,而不仅仅是罗列信息。

安装配置: 如果用户让你配置此 Skill(渲染器、依赖项等),请参阅 README.md 获取指引。

定制化指南

所有颜色和品牌样式统一保存在单个文件中: references/color-palette.md。在生成任何图表前,务必先读取该文件,并将其作为所有配色选择(形状填充、描边、文本颜色、实物证据背景等)的唯一真理来源(Single Source of Truth)。

如果你想让该 Skill 按照自定义的品牌风格生成图表,直接修改 color-palette.md 即可。本文件中的其他内容均为通用设计方法论与 Excalidraw 最佳实践。


核心设计理念

图表应该用于“论证”,而不是纯“展示”。

图表不是格式化文本的简单堆砌,而是一种用视觉语言表达关系、因果和流转的论证方式,这些是单纯靠文字无法直观表达的。形状本身就是含义

同构性检验(The Isomorphism Test):如果把图中所有的文字抹去,单凭结构本身还能传达出核心概念吗?如果不能,请重新设计。

教学性检验(The Education Test):读者能否从这张图中学到具体干货,还是说它只是给几个方框打了个标签?一张优秀图表是有教学价值的——它会展示真实的格式、具体的事件名称以及贴合实际的示例。


细节深度评估(设计前的首要步骤)

在动手设计之前,先确定这张图表需要多大的细节颗粒度:

简单 / 概念型图表

在以下场景使用抽象形状:

  • 讲解某种思维模型或设计哲学
  • 受众不需要了解技术细节
  • 概念本身就是抽象的(例如“关注点分离”)

完整 / 技术型图表

在以下场景使用具体示例:

  • 绘制真实的系统、协议或架构图
  • 图表将用于教学或讲解(例如制作 YouTube 视频)
  • 受众需要清楚了解实际数据和组件的具体形态
  • 展示多种技术栈如何集成

对于技术型图表,必须包含“实物证据”(Evidence Artifacts,详情见下文)。


调研硬性要求(针对技术型图表)

在绘制任何技术架构之前,先去查阅真实的技术规范(Specs)。

如果你要绘制协议、API 或框架图表:

  1. 查阅真实的 JSON 或数据格式
  2. 找到真实的事件名称、方法名或 API 端点
  3. 搞清楚各个组件之间真实的连接机制
  4. 使用真实的技术术语,绝不用通用的占位符

错误示例:“Protocol” → “Frontend”
正确示例:“AG-UI 抛出流式事件(RUN_STARTED, STATE_DELTA, A2UI_UPDATE)” → “CopilotKit 通过 createA2UIMessageRenderer() 进行渲染”

充分的调研能让图表既准确又具教学价值。


实物证据(Evidence Artifacts)

实物证据是用于证明图表准确性并帮助读者学习的具体示例。在技术型图表中务必包含它们。

实物证据类型(根据图表主题选择合适类型):

证据类型 适用场景 渲染方式
代码片段 API、集成细节、实现细节 深色矩形 + 语法高亮文本(颜色详见配色方案中的实物证据说明)
数据 / JSON 示例 数据格式、Schema、Payload 深色矩形 + 彩色文本(详见配色方案)
事件 / 步骤序列 协议、工作流、生命周期 时间轴模式(线条 + 节点 + 标签)
UI 原型 展示实际输出 / 结果 模拟真实 UI 的嵌套矩形
真实输入内容 展示进入系统的原始输入 包含可见示例内容框
API / 方法名 真实的函数调用、端点 使用文档中的真实名称,拒绝占位符

示例:对于流式传输协议图表,可以展示:

  • 规范中的真实事件名称(而不是“Event 1”、“Event 2”)
  • 展示如何建立连接的代码片段
  • 流式数据的真实呈现形态

示例:对于数据转换 Pipeline 图表:

  • 展示输入样例数据(真实格式,而不是写个“Input”)
  • 展示输出样例数据(真实格式,而不是写个“Output”)
  • 必要时展示中间状态

核心原则:展示事物真实的模样,而不仅仅是标出它们叫什么。


多层级缩放架构(Multi-Zoom Architecture)

完整的图表可以同时在多个缩放层级上工作。就像地图一样,既能看到国家边界,又能看清街道名称。

Level 1:概览主流(Summary Flow)

简化版的高层概览,让全貌 Pipeline 或流程一目了然。通常放在图表顶部或底部。

示例Input → Processing → OutputClient → Server → Database

Level 2:区域边界(Section Boundaries)

带标签的划片区域,用于归类相关组件。它们就像视觉上的“房间”,帮助读者理清归属关系。

示例:按职责划分(Backend / Frontend)、按阶段划分(Setup / Execution / Cleanup)、或按团队划分(User / System / External)

Level 3:区域内细节(Detail Inside Sections)

每个区域内部包含的实物证据、代码片段和具体示例。这就是教学价值所在。

示例:在“Backend”区域内部,展示真实的 API 响应格式,而不是只放一个写着“API Response”的方框。

对于完整型图表,尽量覆盖这三个层级。 概览给上下文,区域作组织,细节出干货。

好坏对比

坏(单纯展示) 好(深入论证)
5 个带标签的等大方框 每个概念都有与其行为镜像对应的图形结构
卡片网格化布局 视觉结构完全契合概念结构
用图标给文本做装饰 图形本身即是含义
所有内容都用同一种容器 每个概念拥有独特的视觉语言
把所有东西都塞进框里 自由浮动文本结合精选容器

简单 vs 完整(明确你需要哪一种)

简单图表 完整图表
通用标签:如“Input” → “Process” → “Output” 具体明确:展示输入 / 输出的实际形态
仅标出名称的方框:如“API”、“Database”、“Client” 标名方框 + 真实请求/响应示例
仅标记“Events”或“Messages” 时间轴 + 规范中真实的事件/消息名称
写着“UI”或“Dashboard”的矩形 原型框 + 真实 UI 元素与内容
约 30 秒能讲完 包含 2~3 分钟的干货教学内容
读者只记住了结构 读者掌握了结构 理解了细节

简单图表 适用于讲解抽象概念、快速概览,或者受众已经了解细节的场景。完整图表 则适用于技术架构图、教程、教学内容,或者希望图表本身就能教明白人的场景。


容器文本 vs. 自由浮动文本

不是所有文字都需要套个外框。 默认优先使用自由浮动文本。只有在明确起作用时才使用容器框。

何时使用容器框…… 何时使用自由浮动文本……
它是某个区域的核心焦点 它是标签或说明文字
需要与其他元素进行视觉分组 它是辅助细节或元数据
需要有箭头连接到它 它在描述旁边的某个组件
形状本身具备含义(如决策菱形等) 仅靠排版字号就足以构建清晰层级
它代表系统中的一个独立实体 它是区域标题、副标题或标注文字

利用排版建立层级:通过字号、字重和颜色建立视觉层级,无需画框。一个 28px 的标题完全不需要外面套个矩形。

容器检验法:对于每个加框元素,问一句:“把它换成自由浮动文本行得通吗?” 如果行得通,就删掉框。


设计流程(在生成 JSON 之前必须完成)

Step 0:评估所需深度

首先确定本图表属于哪类:

  • 简单 / 概念型:抽象形状、标签、关联关系(思维模型、设计哲学)
  • 完整 / 技术型:具体示例、代码片段、真实数据(系统、架构、教程)

如果是完整型图表:务必先做调研。查阅真实规范、格式、事件名称、API。

Step 1:深入理解概念

仔细阅读内容。针对每个概念,思考:

  • 这个概念做了什么?(而不是它“是什么”)
  • 概念之间存在怎样的关系?
  • 核心转换或流转过程是什么?
  • 读者需要“看到”什么才能彻底理解它?(而不仅仅是阅读文字)

Step 2:概念与视觉模式映射

为每个概念找到能反应其行为特征的视觉模式:

如果该概念特征为…… 使用这种视觉模式
衍生出多个输出 扇出(Fan-out)(从中心向外放射箭头)
将多个输入聚合为一个 收敛(Convergence)(漏斗、箭头合并)
具备层级 / 嵌套关系 树状(Tree)(连线 + 自由浮动文本)
属于连续步骤序列 时间轴(Timeline)(线条 + 节点 + 自由浮动标签)
循环或持续迭代优化 螺旋 / 循环(Spiral/Cycle)(箭头折返回起点)
属于抽象状态或上下文 云朵(Cloud)(重叠椭圆)
将输入转换为输出 流水线(Assembly line)(前 → 处理 → 后)
对比两个事物 左右对比(Side-by-side)(平行展示 + 对比色)
划分为不同阶段 间隙 / 断层(Gap/Break)(区域之间的视觉隔离)

Step 3:确保视觉多样性

对于包含多个概念的图表:每个主要概念必须使用不同的视觉模式。绝不能搞千篇一律的卡片或网格。

Step 4:构思视线流向

在编写 JSON 之前,先在脑海中追踪视线浏览图表的轨迹,确保具备清晰的视觉叙事线索。

Step 5:生成 JSON

完成上述步骤后,再开始创建 Excalidraw 元素。关于大型图表的处理方法,请参阅下文。

Step 6:渲染与校验(硬性要求)

生成 JSON 后,必须执行“渲染 - 查看 - 修复”循环,直到图表视觉效果无误。这是 mandatory 步骤——完整流程见下文 渲染与校验 章节。


大型 / 完整图表生成策略

对于完整型或技术型图表,必须分区域(Section by Section)分步构建 JSON。 切勿尝试单次生成整份文件。这是一项硬性约束——Claude Code 每次响应约有 32,000 token 的输出上限,完整图表很容易单次溢出。即便不溢出,一次性生成所有内容也会导致质量下降。按区域分步构建在各方面都表现更佳。

分区域构建工作流

第一阶段:逐个构建区域

  1. 创建基础文件:包含 JSON 包装器(type, version, appState, files)以及第一个区域的元素。
  2. 每次编辑增加一个区域:每个区域分配独立的处理轮次——耐心雕琢。仔细思考布局、间距以及该区域如何与已有部分进行衔接。
  3. 使用具象化的字符串 ID(例如 "trigger_rect", "arrow_fan_left"),方便跨区域引用时具备可读性。
  4. 按区域给 seed 划分命名空间(例如第 1 区域使用 100xxx,第 2 区域使用 200xxx),避免碰撞冲突。
  5. 边写边更新跨区域绑定:当新区域元素需要绑定到先前区域的元素(如连接不同区域的箭头)时,同步修改先前元素的 boundElements 数组。

第二阶段:全局审查

所有区域就位后,通读完整 JSON 并检查:

  • 跨区域箭头的两端绑定是否均正确?
  • 整体间距是否均衡?是否存在某些区域太挤而另一些区域留白过大的情况?
  • 所有的 ID 和绑定是否都指向实际存在的元素?

在渲染前修复所有的对齐或绑定问题。

第三阶段:渲染与校验

运行“渲染 - 查看 - 修复”循环。在这一步,你可以发现从 JSON 代码中无法直接察觉的视觉问题——重叠、裁剪、构图失衡等。

区域划分原则

围绕自然的视觉分组来规划区域