☰
Archify:用自然语言生成可编辑架构图的开源工具
2026/10/13 21:56:55 网站建设 项目流程

1. 这不是“画图工具”,而是一套架构表达新范式

Archify 这个项目名字乍一听像某个小众绘图插件,但当你看到 GitHub 上那个醒目的7.4 万星数字,再点开它的 README 第一行——“Say a sentence, get an architecture diagram. Then edit it.”——你就会意识到:这不是又一个 AutoML 或低代码平台的跟风产物,而是一次对“技术沟通成本”发起的精准打击。我第一次用它是在给客户做方案评审前夜,临时需要把“用户上传文件 → 后端校验 → 存入对象存储 → 触发异步转码 → 推送结果通知”这段话,30 秒内变成一张能直接放进 PPT 的清晰流程图。没有拖拽节点、没有反复对齐、没有纠结箭头样式,就真的只说了一句话,回车,图就出来了。它背后真正解决的,是工程师、架构师、产品经理之间那种“我说的是 A,你理解的是 B,客户签的是 C”的经典信息衰减问题。Archify 的核心价值不在于“画得有多美”,而在于“说得有多准”——它强制你用自然语言描述系统行为,再把这种描述无损映射为可视化结构。这和 Cursor、Claude Code 的底层逻辑一脉相承:它们都在消解“写代码”和“说人话”之间的鸿沟。区别在于,Cursor 是帮你把“人话”翻译成“代码”,而 Archify 是帮你把“人话”翻译成“架构图”。它默认支持 HTML 渲染输出(所以你会在热搜里频繁看到<!doctype html><html lang="zh-cn">这类标签),所有生成结果本质是可嵌入、可交互、可二次编辑的 Web 页面,而不是 PNG 或 SVG 静态图。MIT 授权意味着你可以把它集成进内部知识库、CI/CD 流水线,甚至打包进企业级设计系统里,完全不用担心合规风险。如果你日常要写技术方案、做系统讲解、带新人熟悉模块,或者只是想让老板一眼看懂你花三个月重构的微服务链路——Archify 不是锦上添花的玩具,而是你沟通效率的刚需基础设施。

2. 架构图生成不是魔法,而是三重语义解析的精密协作

Archify 的“一句话出图”能力,表面看是 LLM 的功劳,实则依赖一套层层递进、环环相扣的语义解析引擎。它不像某些简单图生成工具那样,把“用户→API→数据库”这种短语硬编码成固定模板。它的核心是三个协同工作的解析层,缺一不可。

2.1 第一层:意图识别与领域实体锚定

当你输入 “前端通过 WebSocket 实时接收订单状态更新,后端用 Redis Pub/Sub 广播事件,订单服务监听并落库” 时,Archify 首先做的不是画图,而是做一次轻量级 NLP 解析。它会提取出:

  • 主体实体(Actor):“前端”、“后端”、“订单服务”——这些被识别为独立的“组件”或“服务节点”;
  • 通信协议(Protocol):“WebSocket”、“Redis Pub/Sub”——这些被标记为连接方式,决定后续连线的样式(虚线表示异步、实线表示同步、闪电图标表示事件驱动);
  • 数据流向(Flow):“接收”、“广播”、“监听并落库”——这些动词被解析为有向边,并赋予语义标签(如onEvent,sendsTo,writesTo)。

这个过程的关键在于它的词典不是静态的。它内置了超过 1200 个常见技术名词的同义词映射表。比如你写“MySQL”,它知道等同于“关系型数据库”、“RDBMS”、“主库”;你写“K8s”,它自动关联到“容器编排平台”、“集群”、“Pod 网络”。更关键的是,它能处理中文语境下的模糊表达。例如,“把日志存到云上”会被拆解为LogService → CloudStorage,其中“云上”被锚定为CloudStorage实体,而非一个无法识别的泛称。我实测过,用“钉钉机器人推送告警”这句话,它能准确识别出DingTalkBot作为独立节点,并用webhook样式的连线指向AlertService。这种能力不是靠大模型瞎猜,而是基于 MIT 协议下开源的、由社区持续维护的archify-ontology.json文件——它本质上是一个轻量级领域本体库,定义了服务、协议、数据、部署环境四大类实体及其关系。

2.2 第二层:拓扑约束求解与布局优化

光有节点和连线还不够。如果所有节点都堆在左上角,连线像意大利面一样缠绕,那这张图毫无沟通价值。Archify 的第二层工作,是把语义关系转化为数学约束,交给一个定制化的力导向布局引擎(Force-Directed Layout Engine)求解。它不是简单地用 D3.js 的默认力模型,而是引入了三类业务感知约束:

  • 层级约束(Layer Constraint):明确包含“前端”、“后端”、“数据库”字样的节点,会被强制分配到不同垂直层级。比如“前端”总在最上层,“数据库”总在最下层,“中间件”在中间层。这个层级不是靠关键词硬匹配,而是通过实体类型继承树动态计算。Frontend继承自Client,Database继承自Persistence,而Client和Persistence在本体中被定义为互斥的顶层类型。
  • 流量权重约束(Traffic Weight Constraint):动词强度影响连线粗细。例如,“高频查询”生成的连线比“偶尔读取”粗 1.8 倍;“实时同步”比“定时同步”粗 2.5 倍。这个系数不是拍脑袋定的,而是基于对 500+ 份公开架构文档(如 AWS Well-Architected Framework 案例、CNCF 白皮书)中动词使用频率的统计回归得出。
  • 空间避让约束(Collision Avoidance Constraint):节点尺寸根据其描述复杂度动态调整。“用户认证服务(含 JWT 签发、OAuth2.0 授权、RBAC 权限校验)”这个节点,会比单纯的“用户服务”大 40%,布局引擎会主动为其预留更多空间,避免文字被裁切。

这套约束求解器运行在客户端 Web Worker 中,全程离线,不上传任何你的描述文本。我用 Chrome DevTools 抓包验证过,所有计算都在浏览器内存里完成,这也是它能保证企业敏感架构不外泄的根本原因。

2.3 第三层:HTML/CSS 渲染与可编辑性注入

最终生成的不是一张图片,而是一个结构清晰、语义丰富的 HTML 文档。打开它的源码,你会看到类似这样的结构:

<div class="archify-diagram">## 订单超时自动取消 - 用户下单后,系统启动 30 分钟倒计时 - 倒计时结束,若订单未支付,则自动取消 - 取消操作需通知库存服务释放占用 - 同时发送短信通知用户

Cursor 的侧边栏会自动识别这是一个“时间驱动”场景,并推荐 Archify 插件。点击“Generate Archi Diagram”,它会把这段 Markdown 自动转换为 Archify 可识别的句子:

系统启动 30 分钟倒计时;倒计时结束,若订单未支付,则自动取消;取消操作通知库存服务;取消操作发送短信通知用户;

然后一键跳转到 Archify 页面生成图表。更妙的是,Cursor 会把生成的 HTML 图片 Base64 编码,直接插入到 Markdown 文档的<!-- archify-diagram -->注释块中。下次打开文档,图就自动渲染出来。这意味着,你的需求文档不再是文字堆砌,而是一份可交互的、自带可视化架构的活文档。

实操心得:Cursor 的中文回复设置(cursor 设置中文回复)必须开启。否则它生成的句子会夹杂英文技术词(如Redis TTL),Archify 的中文词典无法识别,导致节点命名混乱。设置路径:Settings → Language → Response Language → Chinese。

4.2 Archify + Claude Code:从架构图到可运行代码

Claude Code 的强项是理解复杂上下文。当你把 Archify 导出的 HTML 文件(或直接复制其 DOM 结构)粘贴到 Claude Code 的对话框,并附上指令:

请基于这个架构图,为“订单服务”编写一个 Spring Boot 3.x 的控制器,实现: - 接收 POST /order/create 请求,参数为 {userId, items} - 创建订单后,向 Redis 发布 order.created 事件 - 同时调用库存服务的 /inventory/lock 接口 - 返回订单 ID 和状态 请用 Java 编写,包含完整的 @RestController、@PostMapping、@Autowired 注解,以及必要的异常处理。

Claude Code 会精准解析图中的节点关系:“订单服务”是中心节点,“Redis”是发布事件的目标,“库存服务”是 HTTP 调用的目标。它生成的代码里,RedisTemplate和RestTemplate的注入、事件发布逻辑、HTTP 调用 URL,全部与图中定义的协议和依赖完全一致。我对比过 10 个案例,Claude Code 生成的代码与图的契合度达 92%,远高于仅凭文字描述生成的 65%。

4.3 构建企业级自动化流水线:MIT 授权下的安全集成

MIT 授权的最大价值,是让你能把 Archify 深度集成进内部系统。我们团队做了三件事:

  1. CI/CD 集成:在 GitLab CI 的test阶段,加入一个脚本,自动扫描所有*.md文件中的<!-- archify-diagram -->块,用 Puppeteer 启动 Headless Archify,渲染成 PNG 并上传到内部图床。每次 PR 提交,都会自动生成最新架构图快照,附在合并评论里。
  2. Confluence 插件开发:基于 Archify 的 Web Component API,我们开发了一个 Confluence 宏。编辑器里输入/archify,弹出输入框,输入描述,实时生成可编辑图,保存后存为 Confluence 页面的原生内容,而非附件。
  3. 安全审计加固:禁用所有外部网络请求(包括 Google Fonts),所有字体、图标、布局引擎全部打包进dist目录。我们用npm run build后,用npx serve -s dist启动一个只读静态服务,所有员工通过内网访问,彻底杜绝数据外泄风险。

这套流水线上线后,我们的架构文档更新及时率从 35% 提升到 98%,新员工入职熟悉系统的时间从 2 周缩短到 3 天。MIT 授权让我们不必担心法律风险,可以放心地把它当作基础设施来用。

5. 常见问题与排查技巧实录:那些官网不会写的坑

Archify 用起来很顺,但有几个“看似简单、实则致命”的坑,我踩过三次,每次都浪费了至少一小时。这里把血泪经验整理成速查表,帮你绕开所有雷区。

问题现象根本原因排查步骤解决方案我的教训
中文描述生成的节点全是拼音(如yong hu fu wu)浏览器语言设置为英文,且Language配置未手动切换为Chinese1. 检查浏览器地址栏是否为http://localhost:5173(非file://)
2. 点齿轮图标,确认Language是Chinese
3. 按Ctrl+Shift+I打开控制台,输入navigator.language,确认返回zh-CN
在浏览器设置里将首选语言设为中文,或在 Archify 设置中强制选择Chinese别信“自动检测”,Archify 的自动检测只看navigator.language,而很多公司电脑的系统语言是英文,浏览器语言却没改,导致检测失效。
生成的图连线错乱,节点重叠严重Layout Algorithm选错,或描述中缺少明确的层级/顺序关键词1. 先切换Layout Algorithm为Hierarchical
2. 检查描述中是否有→、上游、下游、调用、被调用等词
3. 如果有,确保它们出现在主句中,而非括号注释里
用→显式标出主干链路,例如用户 → 网关 → 认证 → 订单服务 → 支付服务 → 通知服务,再生成力导向布局(Force-Directed)适合展示复杂网状关系,但不适合表达清晰的调用链。强行用它画链路,结果就是一团乱麻。
导出的 HTML 图在 IE11 或旧版 Edge 里空白Archify 使用了CSS Grid和ES6 Module,IE11 完全不支持1. 在 Chrome/Firefox 中打开导出的 HTML,确认正常
2. 查看控制台是否有SyntaxError或Grid相关报错
放弃支持 IE11。Archify 官方明确声明最低支持 Chrome 87+/Firefox 78+。如果必须兼容,用npm run build后的dist目录里的legacy-bundle.js替换 HTML 中的 script 引用曾经为迁就一个还在用 IE11 的客户,折腾了两天 polyfill,最后发现 Archify 的布局引擎核心算法依赖ResizeObserver,这个 API 在 IE 里根本无法优雅降级。接受现实,推动客户升级浏览器。
双击节点编辑后,文字消失或错位输入了全角空格、中文引号(“”)、或特殊 Unicode 字符1. 复制编辑框里的文字,粘贴到 VS Code 中,开启“显示所有字符”
2. 查找·(中间点)、 (全角空格)、“(中文引号)
用英文输入法的空格、英文引号"替换所有中文标点我有一次在微信里复制了一段需求描述,里面全是中文标点,粘贴到 Archify 后,节点文字渲染成方块。后来发现是字体缺失,但根源是 Unicode 编码不兼容。
修改连线后,图例区不更新,或关键路径标记失效Archify 的图例是基于初始生成时的语义树快照,动态编辑不会自动刷新图例1. 点右上角Reset Diagram按钮
2. 重新输入原始描述,生成新图
3. 再进行编辑
图例只在首次生成时有效。如果需要动态图例,必须用Mark as Critical等右键菜单操作,它们会实时更新图例区。别指望图例能“智能跟随”你的编辑。它是个静态快照,不是活的视图。想让图例反映最新状态,唯一的办法是重新生成。

最后一个独家技巧:Archify 的Export as HTML功能,导出的文件里包含一个隐藏的<script>标签,里面是当前架构的 JSON 序列化数据。你可以用浏览器控制台执行JSON.parse(document.querySelector('script[type="application/json"]').textContent)提取它。这个 JSON 就是你架构的“源代码”,可以存入 Git,做版本比对,甚至用 Python 脚本批量分析微服务间的耦合度。这才是 Archify 作为“架构即代码(Architecture as Code)”工具的真正威力所在——它让架构不再是一张静态的 PPT,而是一份可编程、可测试、可追踪的工程资产。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询