AI 画架构图总差点意思,archify 给它加了一条验收流水线

8 月 26 号那天 archify 还挂着 17,195 颗星,日增刚过一千。四天之后,31,333 颗星,1,947 个 fork,连续第四天坐在 GitHub Trending 日榜第一。这个项目是 4 月 15 号创建的,MIT 协议,主要语言 JavaScript,四个半月走完了多数开源项目一辈子走不完的路。

说真的,热度是结果,解法才是原因。今天把它单独拆开,看看它到底解决了什么。

先纠个偏,它不是画图工具

README 第一句自我介绍就写得很清楚,Archify is a Node.js rendering and validation system。渲染加验证的系统,落点在验证。作者在 Why Archify 一节里也说得很直白,它不是通用绘图编辑器,也不是 Mermaid 主题。

这句话值得停一下。你想想看,让 Agent 画架构图这件事,工具早就有了,让模型吐一段 Mermaid 语法,渲染成 SVG,五秒钟搞定。真正的痛点从来不是「画不出来」,是三个更刁钻的问题。画得丑,自动布局的线像一团毛线。画得假,Agent 会编造不存在的组件关系。画得飘,同一个系统描述给两遍,出来两张不一样的图,review 的人不知道该信哪张。

archify 的答案是把画图这件事改造成一条流水线,Agent 只负责产出一份类型化的 JSON 中间表示,剩下的编译、检查、交付全部确定性执行。

类型化 IR,流水线的地基

五种图型各有一个 JSON Schema,schemas/architecture.schema.jsonworkflow.schema.jsonsequence.schema.jsondataflow.schema.jsonlifecycle.schema.json,公共字段抽在 common.schema.json。Agent 产出的每一份图都必须先过 schema,拿仓库里自带的例子 examples/web-app.architecture.json 看,长这样。

json 复制代码
{
  "schema_version": 1,
  "diagram_type": "architecture",
  "components": [
    { "id": "users", "type": "external", "label": "Users", "pos": [40, 300], "size": [120, 60] },
    { "id": "api", "type": "backend", "label": "API Server", "sublabel": "FastAPI :8000" }
  ],
  "connections": [
    { "id": "users-to-cdn", "from": "users", "to": "cdn", "label": "HTTPS", "variant": "emphasis" }
  ],
  "boundaries": [
    { "kind": "security-group", "label": "sg-api :443/:8000", "wraps": ["lb", "api"] }
  ]
}

组件类型只有七种,frontend、backend、database、cloud、security、messagebus、external,边有四种变体。其实吧,schema 卡死之后,Agent 的自由发挥被圈在一个可枚举的空间里,后面的每一步检查才有据可依。

验证器不是手写的 if else,scripts/generate-validators.mjs 会从 schema 生成 renderers/shared/generated-validators.mjs,这个设计保证了 schema 和验证逻辑永远不会漂移。

把镜头拉远,整个仓库就是按这条契约链分层的。

五个渲染器共用 shared/ 内核,验证器由 schema 生成,CLI 九个命令各管一段,契约先行在这里不是口号,是目录结构。

九道检查,和一张诚实的维修回执

整个项目最值钱的部分在 archify/SKILL.md 里,那是给 Agent 读的作业契约。里面写了一条硬规矩,基础验证只跑 4 项 artifact 检查,showcase 级验收必须 9 项全过,0 个构图错误 0 个警告。

验证失败时的输出是这篇文章最想强调的设计。不是一段 Node 堆栈,不是让 Agent 自由重试,而是一个结构化的诊断对象,稳定的问题码,出错的 subject,量出来的 evidence,以及一组 supportedFixes,只允许用支持的修复手段。renderers/shared/validator.mjs 里有个 annotatedPath 函数,注释写着,/nodes/3/label 对修 JSON 的 LLM 来说不如 /nodes/3 (id: "router") /label 好读。诊断信息是按「谁来读」设计的,这行注释比十个功能更能说明作者想明白了 Agent 时代的错误处理该长什么样。

更狠的是修复纪律。SKILL.md 规定,每次只改被诊断点名的 subject,如果连续两轮修复没有让错误数创新低,停下来,如实报告没解决的问题。不许无限重试,不许假装成功。

这条纪律比功能值钱。

原子交付,和一份 SHA-256 回执

验收通过之后走 deliver 命令,流程是先把 spec 的精确字节冻结成同目录私有快照,渲染并检查这份快照,全部通过后才原子替换目标 HTML,最后报告 spec 和产物的 SHA-256 加字节数。半成品永远碰不到正式输出。

交付之后还有一道可选的 visual-check,在 1440×900、1600×1000、1920×1080、2048×1320 四档视口量容器溢出,抓明暗双主题截图,写旁证文件。注意它的回执永远是 visualReview: "pending",截图是给你检查用的证据,不是自动通过的声明。老实讲,一个工具能把「我没看」这三个字写进自己的回执里,这种克制在开源圈不多见。

把这条流水线从头到尾画出来,长这样。

实线是主流程,虚线是失败路径,回执驱动修复,两轮封顶,这就是它和「让 Agent 再试一次」的分界线。

给架构评审场景还留了一手,archify/delta/architecture-delta.mjs 配合 compare 命令,对比两份已验证快照,产出 Before / Delta / After 三视图,added、removed、changed、moved、rerouted 五类事实各带精确清单。PR review 的时候,架构变更从「肉眼找不同」变成机器回执。

工程细节里的密度

这个仓库的细节密度配得上它的星数。

布局层有 Automatic Port Spread 规则,自动路由禁止产生小于 8px 的线段和小于 16px 的内部转角,近并行端口走外侧桥接,这些数字都写在 SKILL.md 的 authoring invariants 里。品牌标识收了 107 个带来源的矢量 mark,抓取必须 digest 锁定,SHA-256 对不上就 fail closed。测试目录躺着 87 个 .test.mjs 文件,粒度细到 repair-receipt.test.mjsmotion-governor.test.mjsautomatic-port-spread.test.mjs。连设计系统都是 token 化的,DESIGN.md 里 canvas #020617、八种语义色、全家 JetBrains Mono,一字排开。

版本节奏也密,v2.14.0 是 8 月 11 号,v2.15.0 是 8 月 17 号,现在开发版已经到 v2.16.0-dev.0,六天一个 minor。

挑刺时间,带着证据挑

坦白讲,说了这么多好话,该挑的刺一根都不能少。

讲真,最实在的一条来自 issue #126,一位跑了三个仓库十四张图的深度用户报告,workflow 的列间距不均匀,同样的边放在 0→1 列能过,放在 1→2 列就报 too short(12px,最低 28px),间距模型在文档里查不到,只能试错。更别扭的是诊断建议的修复是「删掉标签或走通道」,用几何理由删语义信息,而标签在 archify 自己的契约里是 semantic data。这个 issue 同时暴露了一个交付陷阱,deliver 失败时会保留上一个 artifact,紧跟着的 visual-check 测的其实是旧文件。文档缺口也顺手记两条,--repo-root 只有 architecture 类型支持但 SKILL.md 没写,workflow 的 col 只到 5,都是 validate 阶段才炸出来。

社区结构要留意。十个贡献者里 tt-a1i 一人 153 个 commits,第二名 18 个,bus factor 老实说偏高。出身也要说全,SKILL.md 的 metadata 里写着 based_on Cocoon-AI/architecture-diagram-generator v1.0,它不是从零长出来的,是在一个 MIT 项目的地基上盖起来的楼。

商业痕迹轻微但存在。README 赞助位挂着 API 聚合商 APINEBULA 的 referral 链接带九折码。还有一个联网行为,装好的 skill 会每 72 小时左右 GET 一次固定的稳定版 manifest 提示更新,不传版本号不传项目数据,可以用 ARCHIFY_UPDATE_CHECK_DISABLED=1 一键关掉。怎么说呢,披露写得算透明,但「本地工具默认联网」这件事,我觉得每个用户都该知道。

和老伙计们比一比

维度 Mermaid PlantUML D2 Excalidraw archify
输入形态 文本语法 文本语法 文本声明式 手绘 Agent 产类型化 JSON IR
布局 自动布局 自动布局 自动为主可手动 全手动 Agent 主导,规则兜底
质量验证 语法检查 九项检查 fail closed
产物 SVG SVG/PNG SVG/PNG PNG/SVG 自包含交互 HTML 加四格式导出
变更对比 Before/Delta/After 机器回执

对比完就清楚了。快速往 README 里贴一张图,Mermaid 还是首选,别折腾。但当你需要一张「能拿去评审、能对得上代码、能当交付物」的架构图,工具栏里没有第二个选项带验证链和变更回执。

能带走什么

我一直觉得这个项目最值得偷的不是图,是模式。给它起个名字,验收前置的工件管线。

任何 Agent 生成的工件,图、文档、代码、配置,都可以套这四步。第一,把自由输出压进 schema 化的中间表示,圈住发散空间。第二,确定性编译加多维检查,不过就给结构化回执,码、主体、证据、支持的修复。第三,修复轮次封顶,两轮不见好就如实上报,禁止无限重试和假装成功。第四,原子交付加哈希回执,半成品永远上不了台面。

archify 用四个月证明了一件事,Agent 时代工具的竞争力不在「能生成什么」,在「生成的东西凭什么被信任」。这个判断迁移到任何 Agent 周边工具上都成立,你在做 Agent 应用的话,这条流水线值得原样抄走。

至于它自己能走多远,看两件事就够了,bus factor 什么时候降下来,以及那个列间距模型什么时候写进文档。工具的护城河是信任,信任的敌人是例外。

相关推荐
LadiesAndGentlemen29 分钟前
开源地理空间智能项目中的本体思想 4-4:收尾篇——五种做法怎么选,治理之后还剩什么活
人工智能·语言模型·开源·aigc·知识图谱
叶落方知秋1 小时前
大模型学习笔记:排序怎么帮公司赚钱、多方怎么博弈
架构
叶落方知秋2 小时前
大模型学习笔记:模型怎么练出来、数据怎么存起来
架构
叶落方知秋2 小时前
大模型学习笔记:AI 学什么数据,决定了它能有多聪明
架构
林澈在路上2 小时前
AI翻唱软件哪个好 2026国产AI写歌工具对比推荐
大数据·人工智能·深度学习·github·aigc·音视频·音频
roman_日积跬步-终至千里2 小时前
【数据工程(3)-数据架构】好的数据架构不是技术蓝图,而是管理变化的能力
大数据·架构
百变梦仔6 小时前
Codex 写前端任务时,我用这张 GitHub Skill 地图先选工具
前端·github
全栈弄潮儿6 小时前
AI 生成的代码为什么会“看着对,其实错”
aigc·openai·ai编程