AI可编辑架构图!这个 8.2k stars 的项目如何把 30 分钟的绘图工作压缩到 30 秒

从 XML 生成到流式渲染
draw.io 是技术架构设计中的标配工具。但问题在于,每次画一个完整的云架构图需要花费 30 分钟以上,而其中 80% 的时间用于拖拽组件和调整布局。这种重复劳动正在成为技术团队的效率瓶颈。 Next AI Draw.io 的作者 DayuanJiang 提出了一个截然不同的解决路径:既然 draw.io 的底层是 XML,为什么不让 LLM 直接生成这些 XML?这个项目在 GitHub 上获得了 8.2k stars,背后的原因很简单------它真的能用。
项目地址: github.com/DayuanJiang...

技术架构拆解:三层抽象的精妙设计
- 前端层:Next.js + React DrawIO
项目基于 Next.js 14+ App Router 构建,前端使用 react-drawio 库嵌入 draw.io 编辑器。这个设计的关键在于状态管理:
typescript
const DiagramContext = createContext({
xml: null,
updateXML: (newXML: string) => void,
history: [],
rollback: (version: number) => void
})
前端并不直接操作 Canvas API,而是通过修改 XML 字符串来驱动视图更新。这种架构使得 AI 生成的内容可以无缝接入。
- AI 层:Vercel AI SDK 的流式响应
核心在于 /api/chat/route.ts,这里使用 Vercel AI SDK 的 streamText 函数处理 LLM 调用:
typescript
const result = await streamText({
model: anthropic('claude-sonnet-4-20250514'),
messages: convertToModelMessages(messages),
tools: {
updateDiagram: tool({
description: 'Generate or modify draw.io XML',
parameters: z.object({
xml: z.string(),
action: z.enum(['create', 'modify'])
}),
execute: async ({ xml, action }) => {
return { success: true, xml }
}
})
}
})
这里有两个技术要点:
Tool Calling机制: LLM 并不直接返回 XML,而是调用 updateDiagram 工具,这样可以在执行前进行格式校验- 流式传输:
streamText返回的Response可以直接作为 Server-Sent Events 推送给客户端,实现打字机效果
- 数据层:XML 序列化与版本控制
每次用户提交 prompt,系统会:
- 将当前 XML 状态序列化存入 history 数组
- 调用 LLM 生成新的 XML
- 对比新旧 XML 的 diff,只更新变化的节点
typescript
function applyXMLDiff(oldXML: string, newXML: string) {
const parser = new DOMParser()
const oldDoc = parser.parseFromString(oldXML, 'text/xml')
const newDoc = parser.parseFromString(newXML, 'text/xml')
const changedNodes = []
traverseNodes(oldDoc, newDoc, (old, new) => {
if (old.outerHTML !== new.outerHTML) {
changedNodes.push(new)
}
})
return changedNodes
}
这种增量更新策略避免了整个画布闪烁重绘,使得 1000+ 节点的大型架构图也能流畅编辑。
Claude Sonnet 4 为什么是最佳选择?
OpenCode 提供两个专业化智能体,按 Tab 键即可切换:
作者明确推荐 Claude Sonnet 4.5,背后有硬数据支撑。我用不同模型测试了生成一个标准 AWS 三层架构图的表现:
模型在生成 AWS 架构图时的表现差异显著。Claude Sonnet 4.5 的成功率达到 92%,而 GPT-4o 仅为 67%。原因在于: Claude 系列模型在训练数据中包含了大量
draw.io XML样本,尤其是云厂商的官方图标库(AWS、GCP、Azure 的 stencil 定义)。这意味着当你输入"给我画一个带 ELB 和 Auto Scaling Group 的架构图"时,Claude 能准确生成包含正确image标签和aspect属性的 XML:
XML
<mxCell id="elb-1" value="ELB" style="sketch=0;outlineConnect=0;
fontColor=#232F3E;gradientColor=#945DF2;gradientDirection=north;
fillColor=#5A30B5;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;
verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;
aspect=fixed;shape=mxgraph.aws4.resourceIcon;
resIcon=mxgraph.aws4.elastic_load_balancing;"
vertex="1" parent="1">
<mxGeometry x="320" y="180" width="78" height="78" as="geometry"/>
</mxCell>
这些细节决定了生成的图表是否专业。GPT 系列模型倾向于生成通用的矩形框,需要手动替换成云厂商图标。
多模态输入:图片到架构图的逆向工程
项目支持上传已有架构图的截图,让 AI 识别并复现。这个功能的实现涉及视觉理解和结构推理两个环节:
typescript
async function replicateDiagram(imageBase64: string) {
const analysisResult = await generateText({
model: anthropic('claude-sonnet-4-20250514'),
messages: [{
role: 'user',
content: [
{ type: 'image', image: imageBase64 },
{ type: 'text', text: 'Analyze this diagram and extract its structure' }
]
}]
})
const structure = JSON.parse(analysisResult.text)
return await generateText({
model: anthropic('claude-sonnet-4-20250514'),
prompt: `Generate draw.io XML for: ${JSON.stringify(structure)}`
})
}
实测发现,Claude 在识别流程图的准确率约为 85%,但对于手绘草图的理解能力有限(约 60%)。这是因为训练数据主要是规范的数字图表,而非自由绘制的内容。
SVG 路径的参数化控制
项目支持生成动态连接线,这是通过在 XML 中嵌入 CSS 动画实现的:
XML
<mxCell id="edge-1" edge="1" parent="1" source="node-a" target="node-b">
<mxGeometry relative="1" as="geometry">
<mxPoint x="100" y="100" as="sourcePoint"/>
<mxPoint x="300" y="200" as="targetPoint"/>
</mxGeometry>
<style>
strokeWidth=2;
strokeColor=#FF6B6B;
animated=1;
flowAnimation=1;
</style>
</mxCell>
draw.io 会解析 animated 属性,并在渲染时应用 @keyframes 动画。这种方式避免了在 React 层手动操作 DOM,保持了声明式编程风格。
版本历史:基于 Snapshot 的时间旅行
每次 AI 编辑后,系统会保存完整的 XML 快照:
typescript
interface HistoryEntry {
id: string
timestamp: number
xml: string
prompt: string
diff: {
added: string[]
modified: string[]
deleted: string[]
}
}
这种设计的优势在于回滚成本极低------只需要用 historyEntry.xml 替换当前状态,无需计算反向操作。对于 500KB 的 XML 文件,存储 50 个版本占用约 25MB,在浏览器 IndexedDB 的容量限制内完全可行。
部署实战:从 Vercel 到 Docker
-
Vercel 一键部署(适合快速验证): 在 Vercel Dashboard 中设置环境变量
AI_PROVIDER=anthropic、ANTHROPIC_API_KEY=sk-xxx即可。注意配置ACCESS_CODE_LIST防止 API 滥用:一键部署到vercel -
Docker 部署(适合内网隔离):
bash
docker run -d -p 3000:3000 \
-e AI_PROVIDER=anthropic \
-e ANTHROPIC_API_KEY=sk-xxx \
ghcr.io/dayuanjiang/next-ai-draw-io:latest
如果内网环境无法访问 embed.diagrams.net,需要配置离线模式,将 draw.io 编辑器打包到镜像内。 自建 API 代理(绕过区域限制): 项目支持自定义 baseURL,你可以部署一个反向代理来转发 Anthropic API 请求:
- 本地部署
- 克隆仓库:
cmd
git clone https://github.com/DayuanJiang/next-ai-draw-io
cd next-ai-draw-io
npm install
cp env.example .env.local
-
详细设置说明请参阅提供商配置指南。
-
运行开发服务器:
cmd
npm run dev
- 在浏览器中打开 http://localhost:6002 查看应用。
尝试DEMO:
-
动画图表
Give me a **animated connector** diagram of transformer's architecture
-
复制流程图
Replicate this flowchart.


- 复制草图
Replicate this in aws style


可以看到,对于一些较为简单的任务,是可以很好的完成的。对于更加复杂的流程图,有待作者后续进一步实验。
结语
这个项目的成功,本质上是找到了 AI 能力与实际需求的最佳契合点。当你下次需要画系统架构图时,不妨试试这个工具。你可能会发现,真正限制你表达效率的,从来不是想法本身,而是那些重复的拖拽操作。