fireworks-tech-graph——当技术架构图从"手绘"变成"结构化语言"
> 项目: fireworks-tech-graph | Claude Code Skill
> 作者: 一支烟花AI(Brad Zhang)
> 仓库: https://github.com/yizhiyanhua-ai/fireworks-tech-graph
> Stars: ~6.8k | License: MIT
> 安装: npx skills add yizhiyanhua-ai/fireworks-tech-graph
---
一、问题:为什么AI画不好技术架构图?
LLM能写代码、能写文档、能解释系统,但让它"画一张RAG架构图",结果通常是:
- Mermaid语法错误,渲染失败
- draw.io导出后字体丢失
- Excalidraw手绘风不适合正式文档
- 每次重画风格都不一致
fireworks-tech-graph 的解法不是让LLM直接画SVG(那太不稳定了),而是让LLM生成结构化JSON描述,再由一个专门的Python渲染器转换成生产级SVG+PNG。
---
二、核心架构:三层分离
自然语言描述 → JSON中间表示 → Python渲染器 → SVG+PNG
↑ ↑ ↑
用户输入 LLM生成 确定性输出
第一层:自然语言 → JSON
用户说:"画一个Mem0记忆架构图,扁平风格"
LLM(由SKILL.md指导)生成:
{
"template_type": "memory",
"style": 1,
"title": "Mem0 Memory Architecture",
"containers": [...],
"nodes": [...],
"arrows": [...],
"legend": [...]
}
第二层:JSON → SVG(Python渲染器)
generate-from-template.py(1500+行)执行:
1. 分类:识别图类型(architecture/memory/sequence/class...)
2. 加载风格:从8套预定义风格中选择配色、字体、阴影
3. 布局计算:节点位置、箭头路由、泳道分组
4. 形状映射:语义概念→固定形状
5. SVG生成:纯内联SVG,无外联资源
第三层:SVG → PNG
三种导出方式:
| 工具 | 质量 | 场景 |
|---|---|---|
| cairosvg | ✅ 好 | 默认推荐,pip一键安装 |
| rsvg-convert | ⚠️ 一般 | 无Python环境时的fallback |
| puppeteer | ✅✅ 最佳 | 浏览器级渲染,但重(~150MB Chromium) |
三、真正创新的三个设计
1. 语义形状词汇(Semantic Shape Vocabulary)
不是"随便画个框",每个形状都有固定含义:
| 概念 | 形状 | 说明 |
|---|---|---|
| LLM / Model | 双边框圆角矩形 | 带brain/spark渐变 |
| Agent / Orchestrator | 六边形 | 信号"主动控制器" |
| Vector Store | 带网格线圆柱 | 持久化存储 |
| Graph DB | 三圆重叠 | 图数据库 |
| Memory (短期) | 虚线边框圆角矩形 | 易失性 |
| Tool / Function | 齿轮形矩形 | 可调用工具 |
| API / Gateway | 单边框六边形 | 网关 |
| Queue / Stream | 水平管道 | 消息队列 |
2. 语义箭头系统(Semantic Arrow System)
颜色和线型编码含义,不是装饰:
| 流类型 | 颜色 | 线型 | 含义 |
|---|---|---|---|
| 主数据流 | 蓝 #2563eb | 2px实线 | 请求/响应主路径 |
| 控制/触发 | 橙 #ea580c | 1.5px实线 | 系统触发 |
| 内存读取 | 绿 #059669 | 1.5px实线 | 从存储检索 |
| 内存写入 | 绿 #059669 | 1.5px虚线 | 写入/存储 |
| 异步/事件 | 灰 #6b7280 | 1.5px虚线 | 非阻塞事件 |
| 反馈/循环 | 紫 #7c3aed | 1.5px曲线 | 迭代推理 |
3. 可执行风格系统(Executable Style System)
风格不是"写几行文档让AI看着办",而是编码进渲染器的确定性配置:
STYLE_PROFILES = {
1: { # Flat Icon
"font_family": "'Helvetica Neue', Helvetica, Arial, 'PingFang SC', ...",
"background": "#ffffff",
"shadow": True,
"node_fill": "#ffffff",
"node_stroke": "#d1d5db",
"arrow_colors": { "control": "#7c3aed", "write": "#10b981", ... },
...
},
2: { # Dark Terminal
"background": "#0f0f1a",
"node_fill": "#1e1e2e",
"title_fill": "#e2e8f0",
...
},
# ... 8套风格
}
这保证了"说扁平风就一定是扁平风",不会因为LLM的随机性而变味。
---
四、八种风格一览
| # | 名称 | 背景 | 适用场景 |
|---|---|---|---|
| 1 | Flat Icon (默认) | 纯白 | 博客、文档、PPT |
| 2 | Dark Terminal | #0f0f1a 深黑 | GitHub、开发者文章 |
| 3 | Blueprint | #0a1628 蓝图蓝 | 架构文档 |
| 4 | Notion Clean | 白+极简 | Notion页面 |
| 5 | Glassmorphism | 深色渐变+毛玻璃 | 产品站、 keynote |
| 6 | Claude Official | 暖米 #f8f6f3 | Anthropic风格 |
| 7 | OpenAI Official | 纯白 #ffffff | OpenAI风格 |
| 8 | Dark Luxury *(AI创作)* | #0a0a0a 纯黑 | 高端编辑、架构文档 |
---
五、14种图类型与AI/Agent内置模板
UML全覆盖
Class、Component、Deployment、Package、Composite Structure、Object、Use Case、Activity、State Machine、Sequence、Communication、Timing、Interaction Overview、ER Diagram——全部14种UML图。AI/Agent领域专用模板
不是泛泛的"流程图",而是懂业务的模板:- RAG Pipeline: Query → Embed → VectorSearch → Retrieve → Augment → LLM → Response
- Agentic RAG: 在RAG基础上加Agent循环+Tool use
- Agentic Search: Query → Planner → [Search/Calc/Code] → Synthesizer → Response
- Mem0 / Memory Layer: Input → Memory Manager → [Write: VectorDB+GraphDB] / [Read: Retrieve+Rank] → Context
- Multi-Agent: Orchestrator → [SubAgent A/B/C] → Aggregator → Output
- Tool Call Flow: LLM → Tool Selector → Tool Execution → Result Parser → LLM (loop)
---
六、与竞品的对比
| Mermaid | draw.io | Excalidraw | fireworks-tech-graph | |
|---|---|---|---|---|
| 自然语言输入 | ✗ | ✗ | ✗ | ✅ |
| AI/Agent领域模板 | ✗ | ✗ | ✗ | ✅ |
| 多视觉风格 | ✗ | 手动 | 有限 | ✅ 8套内置 |
| 高清PNG导出 | ✗ | 手动 | 手动 | ✅ 自动1920px |
| 语义箭头颜色 | ✗ | 手动 | 手动 | ✅ 自动编码 |
| 无需在线工具 | ✅ | ✗ | ✗ | ✅ |
| SVG纯内联 | ⚠️ | ✗ | ✗ | ✅ 无外联字体 |
| 可编辑性 | ⚠️ | ✅ | ✅ | ⚠️ SVG可编辑但无GUI |
- Mermaid = 快速内联markdown图表
- draw.io = 手动精修
- Excalidraw = AI生成后人工改
- fireworks-tech-graph = 描述系统→立即出 polished 图,不写DSL不点GUI
七、技术细节:为什么它能稳定生成
1. Python列表法生成SVG(防截断)
lines = []
lines.append('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 700">')
lines.append(' <defs>')
# ... 每行独立
lines.append('</svg>')
LLM直接写SVG容易字符截断、属性缺失、标签不平衡。通过Python脚本逐行构建,每行独立可验证。
2. 箭头路由算法
- 优先正交路径(L形)减少交叉
- 锚定在组件边缘而非几何中心
- 并行箭头用不同y偏移分离
- 不可避免的交叉用跳线弧(jump-over arcs,5px半径)
- 强制规则:箭头绝不穿过组件内部
3. 三层绘制顺序(Z-order)
底层 → 顶层:
① 画布背景 → ② 虚线容器/区域背景 → ③ 箭头和连接线
→ ④ 节点形状 → ⑤ 文本标签 → ⑥ 图例和覆盖层
箭头在文本之前绘制,确保文本可读。
4. 字体安全
SVG中内联声明字体族,不使用外部@import(cairosvg/rsvg-convert无法获取外部URL)。支持CJK字体回退:PingFang SC、Microsoft YaHei、SimHei。
注意:cairosvg对CJK和emoji支持有限(依赖系统字体配置),可能渲染为□。解决方案:优先用SVG格式(浏览器原生支持CJK),或用puppeteer路径。
---
八、局限与适用边界
1. 不可交互:输出是静态SVG/PNG,不是可点击的交互图 2. 无GUI编辑:生成后修改需手动编辑SVG代码,不如Excalidraw友好 3. 风格固定:8套风格覆盖大部分场景,但自定义风格需要改Python代码 4. LLM依赖:JSON生成质量取决于LLM对SKILL.md的理解,复杂系统可能需要多轮迭代 5. 箭头路由仍有优化空间:密集架构图中箭头交叉和标签重叠是常见问题(SKILL.md已有专门的"优化箭头"指令和JSON覆盖字段)
---
九、对Agent生态的启示
fireworks-tech-graph 的价值不止于"画图"。它示范了一种AI工具的构建范式:
> 不要让LLM直接做它不擅长的事(生成精确SVG),而是让LLM生成结构化描述,再由确定性代码执行。
这与NLAH论文的思路异曲同工:LLM承载策略(画什么、什么风格),确定性代码承载机制(怎么渲染、怎么布局)。两层分离,各尽所长。
对于Agent基础设施作者来说,这个skill证明了:一个垂直领域的"AI-native工具"可以只用SKILL.md + Python脚本 + 模板文件就能达到生产级质量,不需要React前端、不需要Electron壳、不需要云服务。
---
十、快速上手
# 安装(Claude Code环境)
npx skills add yizhiyanhua-ai/fireworks-tech-graph
# 依赖
pip install cairosvg # 推荐
# 或
brew install librsvg # macOS
sudo apt install librsvg2-bin # Ubuntu
# 使用(在Claude Code中)
# "画一个RAG pipeline架构图,暗色风格"
# "生成一个多Agent协作流程图,Notion风格"
---
参考
- GitHub: https://github.com/yizhiyanhua-ai/fireworks-tech-graph
- NPM: https://www.npmjs.com/package/@yizhiyanhua-ai/fireworks-tech-graph
- 作者: https://bradzhang.dev/en
- 商业案例: https://bradzhang.dev/en/case-studies/fireworks-tech-graph
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens