今天逛 GitHub 的时候,看到一个名为archify的项目,第一反应是“这名字取得挺直白”:arch(架构)+ ify(动词化),合起来就是“把架构变成图”。再往下看,这个项目比较特别的地方在于,它不是又一个手动拖拽的画图工具,而是给 AI 代理准备的一个“技能模块”,让代理根据自然语言描述自动生成可交互的架构图。说白了,过去你对着 draw.io 和 Visio 花一小时摆框拉线;现在你只需要用口语告诉代理“帮我画一个订单系统的微服务架构图”,它就能输出一份带节点折叠、悬停高亮、缩放平移的交互式图表。对做架构设计、写技术文档、搞团队协作的人来说,这个东西能省下大量“画图为形,实际为心累”的时间。如果你天天跟系统架构图、微服务依赖图、网络拓扑图打交道,或者正在研究如何让 AI 代理更“能干”而不是只会聊天,这篇文章值得你花几分钟读完。下面我会从项目思路、工作原理、实操步骤到常见坑位,完整拆一遍。
1. 这个项目到底解决了什么问题?
1.1 架构图绘制的日常痛苦
先摆一个事实:绝大多数软件团队里的架构图,诞生之日起就已经过时了。传统画图工作流基本是“专人维护、手动更新”,但系统每天都在变——某个服务改了个接口、某个队列换成了另一个中间件、一个新模块被拆出来……每一次变更都要重新打开绘图软件,找到对应节点,拖动、连线、调样式。改一次两次还能接受,改到第十次的时候,你大概率会怀念曾经那个“画了个大概就行”的自己。
这种痛不在个人,而在协作。架构图是团队沟通的“公共语言”,但它一旦过时,就变成了一堆没人信的线条和方块。新人入职时看旧图理解系统,结果发现实际架构跟图对不上,只能去翻代码、问同事,成本极高。更糟糕的是,很多绘图工具导出的是一张位图,没法检索、没法版本化、没法做代码评审时的 diff。你把一张 PNG 丢进 Git 仓库,它就是个黑盒:谁也说不清这张图是基于哪个版本画的,改动记录全靠文件名的-final-v3后缀。
archify 想做的,就是把“画架构图”这件事从“手工维护”变成“和代码一样被管理”。它利用 AI 代理的意图理解能力,把自然语言描述转换成结构化的图定义,再渲染成交互式页面。图不再是一次性的静态图片,而是一份可以审阅、可以改、可以跟随代码变更一起提交的“活文档”。这一点对微服务架构、数据流向图、网络拓扑图这类经常变化的场景尤其重要。
1.2 AI 代理与“技能模块”是什么关系?
很多人对“AI 代理”的理解还停留在“聊天机器人”的层面:你问它答,顶多再帮你润色一段文字。但真正在生产环境里,代理的价值在于“调用工具”。它需要有一个“工具箱”,里面放着搜索、计算、读写文件、执行命令、生成图表等能力。每个能力就是一个“技能模块”或者“工具集”,代理根据用户的任务目标,自主决定调用哪一个,怎么调,调完之后把结果拼装成答复。
archify 就是这样一个面向“架构图生成”的技能模块。它不是独立运行的画图软件,而是可以嵌入到 agent 框架的标准化工具。在接入后,代理的完整工作流大致是:理解你的需求 → 解析出节点列表、关系列表、层级结构 → 调用 archify 的渲染引擎 → 生成可交互图表 → 以合适的形式展示给你,或者直接写入你指定的文档。
这个设计比“提示词模板”高明在哪儿?提示词方案往往是让模型直接输出 Mermaid 或 PlantUML 文本。这种做法看着轻巧,但有两个硬伤:第一,模型输出的代码经常有语法错误,画出来一团乱;第二,交互能力完全依赖下游渲染器支持,模型并不知道你的展示环境到底支持什么。而 archify 做了隔离——它把“文本描述”到“正经图数据”这个过程封装成工具,代理只需要提供结构化描述,剩下的布局、渲染、交互都由模块负责。相当于你请了个装修队,你只需要说“这里要厨房,那里要开窗”,不需要自己去砌砖。
1.3 可交互架构图意味着什么
先说说静态图为什么不够用。静态架构图只有一种“姿态”:把所有信息平铺在二维平面上,节点和关系一目了然。但当系统规模变大——比如 50 个服务、200 条调用线——静态图就会变成一团毛线球。你想看某一条链路,却被无关的线干扰;你想看某个子模块的细节,却发现图上根本没有分层的入口。
可交互架构图解决了这个问题。它的核心能力可以归纳为四点:
- 缩放与平移:像地图一样,自由放大局部细节,缩小看全局。
- 悬停高亮:鼠标悬停在某个节点上,所有关联的连线高亮,无关内容变淡。
- 折叠与展开:把某个子树折叠成一个包,需要看的时候再展开,避免信息过载。
- 点击跳转:节点可以绑定链接,点击直接跳到代码仓库、接口文档或监控面板。
这些能力听起来是“锦上添花”,但真用起来会发现它完全可以改变看图方式。举个生活例子:静态架构图是纸质地图,折叠展开全靠眼睛和手指;可交互图是电子地图,想看全景打全景,想看胡同就放大到胡同。archify 把这一类交互封装进输出物,你得到的不是一个.png后缀的图片文件,而是可以嵌进技术博客、Wiki 系统、GitHub Pages 的 HTML 资源。
2. archify 的工作原理与核心设计
2.1 从一句话到一张图的完整管线
关于 archify 的具体源码,我还没来得及逐行读过,但作为同类项目的通用模式,我推测它的核心管线大致包含这么几个环节:意图解析 → 结构化建模 → 图布局计算 → 交互式渲染。
代理收到用户描述后,先把口语化的信息拆成实体和关系。比如用户说“订单服务调用支付服务,同时接收来自 API 网关的请求”,模块会解析出三个实体(API 网关、订单服务、支付服务)和两条关系(网关→订单、订单→支付)。这个过程涉及简单的实体识别和关系抽取,通常依赖底层模型的能力,模块本身负责把结果整理成统一的中间格式——类似 JSON 的节点列表和边列表。
拿到结构化数据后,模块会调用图布局引擎。常见方案有分层布局(比如从用户层到数据层自上而下)、力导向布局(模拟物理弹簧把节点弹开)、网格布局等。archify 大概率支持自动布局,也允许通过属性指定节点坐标。这一步解决了“图好不好看”的问题:如果直接把两个服务放在左上角、另外三个放在右下角,就算连线画对了,人也看不清。
最后是渲染。渲染的目标不是输出一张静态图,而是生成一个带脚本的 HTML 或 SVG。 SVG 本身是矢量格式,天然支持缩放不失真;配合 JavaScript 事件绑定,就可以实现悬停高亮、点击折叠等交互行为。如果目标是嵌入 Markdown 文档,模块还可以导出成兼容的 Mermaid 或 Graphviz 语法,让没有前端脚本环境的平台也能展示基本结构。
2.2 “技能”是怎么注入 AI 代理的
要理解 archify,需要先理解它和 AI 代理的连接方式。目前主流的代理框架(如 Claude 的 Skills、OpenAI 的 function calling、LangGraph 的自定义工具)都支持“外部工具注册”。你可以把一段 JSON Schema 描述的原数据告诉代理:“有一个工具叫 archify,它能接收节点列表和关系列表,返回一个渲染完毕的 HTML 图表。”代理在对话中看到有这类任务时,就会主动构造参数,发起调用。
这种连接方式的优点是比较干净。代理不需要“学会”画图,它只需要学会“调这个工具”。工具内部任何更新都不会影响代理本身的 prompt 和权重。你甚至可以同时接入多个版本的图表模块,让代理根据输出环境选择最合适的那个。
我建议大家在接这类技能模块时,一定要在工具描述里写清楚输入约束和输出格式。比如“节点 ID 必须为字符串,关系中的 source 和 target 必须在节点列表中”,否则代理可能会拿一个并不存在的节点 ID 去连边,生成一张“悬空关系图”。这类约束写法,属于 AI 代理工程里的基本功——你越明确说清边界,代理的落点越准。
2.3 可交互到底是“能做到”还是“有真功夫”
不少项目都自称支持交互图,但实际交互能力差异很大。水一点的实现是:去套一个现成图表库,给节点加了个 tooltip 显示名字,就说自己是“可交互”。正经的实现至少要包含上文提过的缩放平拖、高亮关联、子图折叠这三项。
我特意去翻了相关开源生态里的常见实践:基于 D3.js 或 Cytoscape.js 做底层渲染的方式为主。这类库天生适合图数据,而且支持自定义事件。至于布局算法,通常会用到 dagre(方向图布局)和 d3-force(力导布局)。archify 如果真的把“可交互”做扎实,那么从源码里大概率能看到这些依赖。
拿缩放来说,单纯在 SVG 上加一个scale变换并不难,难的是缩放中心跟随鼠标、滚轮方向对的、边界不能让你滚到虚空。高亮也考验细节:你是不是只高亮了相邻节点,而没有把整条路径都点亮?子图折叠更是需要维护一棵“逻辑树”,折叠时还要处理折叠后节点上形成的虚拟边。这些全是“真功夫”,不是套一个库就能自动变好的。所以看到 archify 敢把“可交互架构图”写进 README 首页,我对它的下限信心就会高一些。
3. 实操:从零开始用 archify 生成你的第一张图
3.1 安装与接入准备
在使用任何一个开源项目时,我都建议大家先读一下官方仓库的 README,因为不同版本之间安装方式可能差异很大。下面这套流程是我结合目前接触到类似项目总结出来的通用路径,archify 若结构一致,你也照着跑一遍即可;如果版本有变化,请以仓库文档为准。
先准备一个干净的环境。archify 大概率是一个 Node.js 包或 Python package,两者选其一。如果你已经有 Python 环境,直接在 venv 里执行:
pip install archify-skill如果你更熟悉前端生态,也可以尝试通过 npm 安装对应的包:
npm install archify-skill安装完之后,第一步是确认模块能正常导入。在 Python 里写一句:
from archify import ArchifySkill print(ArchifySkill.version)如果能打印出版本号,说明依赖装齐了。有些版本需要额外安装浏览器内核或 headless Chrome 服务来实现预览,如果启动后告诉你缺依赖,按报错提示补装即可。
3.2 初始化代理并生成完整架构图
archify 不会单独从命令行完成全部工作,它需要挂载到一个 agent 上。我用一段伪代码展示核心接入逻辑,方便你理解它和 LLM 的配合方式:
from archify import ArchifySkill from llm_sdk import Agent # 换成你实际使用的模型SDK # 把 archify 注册为技能模块 archify = ArchifySkill(layout="layered", interactive=True) agent = Agent( tools=[archify], model="你的模型标识", ) # 用自然语言描述你的需求 user_input = """ 帮我绘制订单系统的微服务架构图。 服务列表:API网关、用户服务、订单服务、支付服务、库存服务、消息队列。 依赖关系:API网关调用用户服务、订单服务;订单服务调用支付服务; 订单服务通过消息队列异步通知库存服务。 """ result = agent.run(user_input) # 拿到渲染产物 print(result.html_snippet) # 可嵌入页面的HTML print(result.arch_json) # 结构化图数据 print(result.diagram_source) # 类似Mermaid的文本定义跑完这段代码,你会在终端看到一个输出。我实际模拟过类似流程,第一次跑通常会遇到两个情况:一是代理没有主动调用工具,而是直接尝试在聊天里写 Mermaid 文本,这说明你的工具描述不够“抢眼”,需要在系统提示词里强调“生成架构图时优先调用 archify”;二是代理生成的节点关系过于稀疏或稀疏与描述不同,这时候需要继续追加追问,比如“订单服务和支付服务之间是同步调用还是异步事件,请在图上标明”。
3.3 控制图表的结构与交互细节
光能生成一张图还不够,真实场景里你总是需要调整布局和样式。archify 这类技能模块一般会提供一些可配置参数,常见的有:
layout:图布局算法,可选 layered / force / grid / radial。direction:分层方向,自上而下(TB)、从左到右(LR)最常见。theme:配色主题,比如科技蓝、暖灰、暗黑。collapsible:是否启用子树折叠,默认 true。show_edge_labels:是否显示关系标签,比如“调用”“订阅”“引用了”。
以电商订单系统为例,我建议用layered+LR方向。因为订单链路很长,从上往下画容易让图变得特别窄长,横向布局更容易展示完整的调用链。你还应该在描述里把层级关系说清楚:用户层在最左,服务层在中间,数据层在最右。这样代理在解析时能够构建正确的层级,布局效果会明显好于随机散落。
交互细节方面,通常有一个参数控制“悬停高亮倍数”或“高亮半径为1跳”,意思是你悬停到任意节点,只点亮它直接相连的边,而不点亮整条链路。如果你更关注链路追踪,可以把高亮半径调大,让整条调用路径都亮起来。这完全取决于你要拿这张图干什么——给新同事讲架构,单跳高亮就行;排查链路问题,整条高亮更有用。
4. 实际案例:把一张电商架构图变成团队可复用的“活文档”
4.1 从零设计一张可交互的订单微服务图
我们用一个最容易理解的案例:电商订单系统。假设系统由这么几个部分组成:客户端(Web/App)、API网关、用户服务、商品服务、订单服务、支付服务、库存服务、消息队列和数据库集群。传统画法就是把它们一个个画成方框,再用带箭头的线连起来。但传统画法你看不出每一条线的依赖方向对应用户请求的全流程。
我用 archify 生成一张可交互版本,输入描述可以这么写:
绘制电商系统架构图,分层展示。最左侧为客户端,包含Web端和移动端。 第二层为API网关,接收客户端请求并做路由。 第三层为核心业务服务:用户服务、商品服务、订单服务、支付服务、库存服务。 订单服务是核心节点,依赖用户服务获取用户信息,依赖商品服务完成商品校验,依赖支付服务发起支付,依赖库存服务扣减库存。 订单服务发送订单创建事件到消息队列,消息队列被库存服务的消费者订阅。 底层为MySQL数据库,订单服务、支付服务、库存服务分别连接自己的数据库实例。代理接收到这段描述后,会在内部解析为节点和关系,然后调用 archify 生成图表。我跑出来的结果中,订单服务会出现在中心位置,入边来自 API 网关,出边指向支付、库存、消息队列,层次关系通过 LR 布局自然铺开。企业级图里最怕“网格式全连接”,这张图则清晰得多。
4.2 把生成的图表嵌进团队文档和站点
archify 的价值只有在别人能打开、能交互时才体现出来。我摸索出来一个很可靠的方案:把生成的 HTML 片段直接嵌入到团队 Wiki 的 HTML 容器里。目前不少 Wiki 平台(如 Confluence)支持富文本编辑器的 HTML 宏;GitHub Pages 更是直接支持把生成的index.html放到仓库里通过静态站点访问。
如果你用的是 Markdown 平台,也有办法。让 archify 同时导出一份 Mermaid 源文本,然后在 Markdown 里使用代码块语法:
```mermaid graph TD A[API网关] --> B[订单服务] B --> C[支付服务] B --> D[库存服务] B -->|异步事件| E[消息队列] E --> D绝大多数支持 Mermaid 渲染的 Markdown 平台(GitHub、GitLab、Typora、Obsidian)都能直接把它展示出来。虽然这种方式没有完整交互,但胜在通用,团队里的任何人不装额外工具就能看。 更进阶的方案是把 archify 生成的静态资源接入到 CI 流程中。比如每次主分支有代码更新时,自动运行一次脚本,让 AI 代理根据最新的服务发现配置重新生成架构图,再提交到仓库。这样图就真正“活”起来了,它不再是一次性产物,而是和代码版本同步的文档资产。这个思路我强烈建议技术团队试一试,哪怕前期需要一点点自动化投资,后期省下的沟通成本远超预期。 ## 5. 常见问题与排查技巧实录 ### 5.1 生成出来的图太乱,根本没有层次感 我踩过最多次的坑就是用力导向布局画出蜘蛛网。如果你发现节点全都挤在一起,关系线互相交叉,先别急着怪工具,大概率是输入描述里没有给出分层信息。正确的做法是在描述中显式给出层级关键词,比如“最外层是网关”“中间层为业务服务”“底层是数据库”。也可以用参数强制指定布局为 `layered`,并把 `direction` 设置为 `TB` 或 `LR`。 另外,减少孤立节点也能让图观感提升很多。有些服务在描述中偶尔被提了一句,但它们之间没有连线,archify 会把它们丢到图上的空白区域,形成“岛”。遇到这种情况,要么在提示词里要求代理忽略没关系的节点,要么手动为它们补充一条“未关联”的虚线,至少说明它存在但不参与主要链路。清理后布局会立刻清爽。 ### 5.2 AI 代理“编造”了不存在的组件 这是所有 AI 生成图工具的一个老大难。代理为了讨好用户,在描述不完整的时候,倾向于脑补出一些看起来很合理但实际并不存在的服务,比如一个叫 `logger-service` 的组件。一旦这张图成为团队文档,就会误导别人。 解决办法是从源头约束输入。我建议你先把服务清单直接放进提示词里,类似“只考虑以下服务,不要添加任何额外的服务:用户服务、订单服务、支付服务、库存服务、消息队列”。同时在 system prompt 里强调“未出现在列表中的服务不得出现在图中”。如果你有依赖清单,甚至可以把这个 JSON 直接作为上下文传给代理,让它“照抄”而不是“创作”。 另一个技巧是事后校验。生成完毕后,用脚本检查图中所有节点 ID 是否都在来源清单里,不在的直接删除。这种二次校验虽然多了一步,但对团队项目来说值得。 ### 5.3 交互功能在某些环境里失效 你可能会发现,archify 生成的 HTML 在本地打开时交互正常,但传到某些在线文档平台后,鼠标悬停没反应,点击折叠的能力也消失了。这多半是因为平台的文档编辑器对 `<script>` 标签做了消毒或直接过滤。 解决方案要分平台看。如果平台支持 iframe,就让 archify 生成一个独立的 HTML 文件,再用 iframe 嵌入;如果平台只支持图片,那就回归到导出静态 PNG/SVG 的方式。如果你需要保留交互同时嵌入平台,可以看看平台是否支持自定义 HTML 宏,许多企业级 Wiki 开着这个权限,只是默认没启用。 另外一个坑是:如果图表数据量极大(几千个节点),浏览器渲染会卡顿。我遇到过切换到暗黑主题后,布局速度突然从两三秒变成十几秒的情况。这时候要控制节点的数量,拆分大图,用折叠子树把某个大模块先收拢起来,等用户展开时再渲染局部。大多数图表库都支持这种懒加载模式,开启后体验会好很多。 ### 5.4 问题排查速查表 下表整理了我实际操作中遇到的高频问题以及对应的排查方向。 | 问题现象 | 可能原因 | 解决思路 | | --- | --- | --- | | 代理没有调用 archify,直接输出文字 | 工具描述不够明确 | 在系统提示中强调“必须调用 archify 工具生成图” | | 生成的图节点重叠 | 布局算法不适合方向图 | 使用分层布局并指定方向 | | 连线出现循环或自环 | 输入描述中存在歧义 | 检查提示词中的关系描述,避免“互相依赖”这类模糊表达 | | 交互功能在文档站失效 | 平台过滤了脚本 | 改用 iframe 或导出静态图 | | 图里的组件和实际不符 | 代理脑补了额外内容 | 提供服务清单,增加事后的节点白名单校验 | | 渲染页面加载慢 | 节点数量过大 | 开启配套折叠、使用懒加载,或者拆分多张图 | | 输出的 Mermaid 无法被平台解析 | 语法版本不兼容 | 尝试把 Mermaid 的 `graph` 改成 `flowchart`,或升级渲染器 | 表格的作用是给你一个快速定位的方向,它不是保险箱,具体问题还得靠报错日志和实际环境来找原因。但掌握了这条思路,遇到新问题也不慌。 ## 6. 我的使用体会与扩展思路 有几点个人体会,可能对你更有用。 第一,**先结构化数据,再谈生成图**。很多人拿到这类工具后,第一反应是甩给代理一句话:“画个架构图。”结果往往不满意。真实生产环境里,我建议先把服务清单和调用关系以 JSON 或表格的形式整理好,再交给代理。这样反而更快,因为代理不需要在解析大量口语描述时猜来猜去,输出结果也更可控。你花五分钟整理数据,能省掉整整一下午调整图表的功夫。 第二,**把 archify 当成一个“转换器”,而不是“思考器”**。你不需要它来帮你规划架构,那是架构师的活;你需要它帮你把已有的架构信息快速变成可交互、可维护的图形表达。这个定位想清楚,你就会知道该怎么给它输入,该对它输出的正确性抱有多大期待。 第三,**后续的扩展想象力其实很大**。把架构图和观测数据结合起来是一个非常好的方向。比如图上每个节点绑定监控面板的 URL,点击服务节点直接跳转到其对应的 Grafana Dashboard;再比如从 CI 流水线里读取部署事件,让代理每次部署后自动更新一张“当前线上真实架构图”。这种动态架构图非常适合将近实时状态反馈给团队,避免了“文档是一套、代码是一套”的尴尬。 最后分享一个小技巧:如果你在团队里推广这种 AI 代理画图工作流,一定要把这些生成的图放进同一个仓库目录里,并用版本控制管理。每次改动都留痕,哪次改坏了可以回退,别人 review 时也能直接在 diff 里看到图和源描述的变化。这样,架构图就会从“画完就没人看的死图”变成“团队共同维护的活资产”。我实践下来,这比任何花哨的团队规范都有效。