☰
archify 技能模块:AI 代理自动生成可交互架构图实践
2026/10/8 11:09:55 网站建设 项目流程

1. 从一条 GitHub 热榜说起:archify 到底解决了什么痛点

第一次在 GitHub 趋势榜上刷到 archify 这个项目时,我的反应是"这不就是我团队里那个天天被吐槽的活儿吗"。做过后端或者系统设计的朋友都懂,每次架构评审之前,最耗时间的往往不是写代码,而是画那张架构图。产品经理要一张给客户看的,技术负责人要一张给新人看的,运维还要一张标注部署拓扑的。同一套系统,画三遍,改五遍,最后还没人愿意维护,因为代码一改,图就过期了。

archify 这个项目的定位很直接:它是一个技能模块,挂载在 AI 代理之上,让代理能够根据你的描述或者现有代码,自动生成可交互的架构图。注意这里有两个关键词,一个是"自动生成",一个是"可交互"。前者省掉的是手工拖拽的时间,后者解决的是静态图片无法下钻、无法联动、无法实时更新的问题。传统的架构图工具,比如 draw.io、Excalidraw、PlantUML,本质上还是"你告诉它画什么,它画什么",而 archify 走的是"你告诉它系统长什么样,它自己理解并画出来"的路子。

那它适合谁用?我梳理了一下,大致是三类人。第一类是独立开发者和小团队,没有专职的架构师,画图全靠自己,时间成本极高;第二类是技术负责人和架构师,需要频繁输出架构文档,且文档要跟着代码演进;第三类是技术博主和讲师,做教程、写文章、录视频时需要大量示意图,手工画图效率太低。如果你属于这三类中的任何一类,archify 值得花半小时研究一下。

需要先说明的是,archify 本身不是一个独立的绘图软件,它更像是一个"能力插件"。你得先有一个能跑起来的 AI 代理环境,然后把 archify 作为技能加载进去,代理才具备生成架构图的能力。这个设计思路其实很聪明,因为绘图这件事本身依赖大模型对系统结构的理解能力,把理解交给代理,把渲染交给前端,各司其职。

2. 核心设计思路拆解:为什么是"技能模块"而不是"独立工具"

2.1 技能模块化的底层逻辑

我研究过不少 AI 代理相关的项目,发现一个规律:凡是把功能做成"技能"或者"工具"挂载到代理上的,扩展性都不会差。archify 选择这条路,背后的考量其实很实在。架构图的生成涉及三个环节——语义理解、结构建模、可视化渲染。语义理解必须依赖大模型,这是代理的强项;结构建模需要一个中间格式来承载节点和连线的关系;可视化渲染则需要前端库来画图。

如果 archify 做成一个独立工具,那它就得自己集成大模型调用、自己做提示词工程、自己维护模型版本,维护成本极高。而做成技能模块之后,它只需要定义清楚"输入什么、输出什么",中间的大模型调用完全交给宿主代理。这就好比你不必自己造一台发动机,只需要把发动机装到车上就行。代理升级了模型,archify 自动受益;代理换了供应商,archify 只要接口不变就还能用。

这种解耦带来的另一个好处是可组合性。你可以让代理先用一个技能读代码仓库,再用 archify 生成架构图,最后用另一个技能把图导出成文档。整个流程串起来,就是一个自动化的架构文档生成流水线。单独一个 archify 做不到这些,但作为技能模块,它能被编排进更大的工作流里。

2.2 可交互架构图的技术选型考量

"可交互"这三个字,是 archify 区别于普通 AI 绘图工具的分水岭。我见过太多 AI 生成的架构图,本质上就是一张 PNG,节点位置固定,文字写死,想改一个模块名都得重新生成。archify 走的是另一条路,它生成的图是基于数据驱动的,节点和连线都是结构化数据,前端根据数据渲染出图形。

这意味着什么?意味着你可以点击某个节点展开它的子模块,可以悬停查看某个服务的详细说明,可以拖拽调整布局,甚至可以点击节点跳转到对应的代码文件。这些交互能力,静态图片给不了。实现上,这类可交互图通常基于 SVG 或者 Canvas 渲染,配合一套图数据结构(比如节点列表加边列表),前端用类似 D3.js、Cytoscape.js 或者 React Flow 这样的库来画。

为什么 archify 要强调可交互?因为架构图的使用场景本身就是动态的。评审的时候有人问"这个服务依赖哪些下游",你得能当场展开;新人入职问"这个模块负责什么",你得能点进去看注释。静态图在这些场景下就是死物,而可交互图是活的。从投入产出比来看,前期多花一点功夫做数据结构化,后期省下的是无数次重画的时间。

2.3 与主流方案的横向对比

为了让大家更清楚 archify 的定位,我把它和几种常见方案做了个对比。

方案生成方式可交互性维护成本适合场景
手工绘图(draw.io 等)人工拖拽弱(部分支持)高,改一次画一次一次性汇报
代码即图(PlantUML/Mermaid)写 DSL 代码无中,需维护代码文档内嵌
AI 生图(通用绘图模型)提示词生成无,输出图片低但不可控概念示意
archify 技能模块代理理解后生成强,数据驱动低,随代码更新持续演进的系统

从表里能看出来,archify 的差异化在于"低维护成本 + 强交互"。PlantUML 虽然也是代码驱动,但你得自己写 DSL,系统一复杂,DSL 就长得没法看。archify 把写 DSL 这一步也省了,你直接用自然语言描述,或者让它读代码,它来生成结构。这个体验上的差距,用过的人都懂。

3. 核心细节解析:archify 生成一张图要经过哪些环节

3.1 输入层:代理如何理解你的系统

archify 的输入可以有很多种形式,这也是它灵活的地方。最常见的是自然语言描述,比如你跟代理说"我有一个电商系统,包含用户服务、订单服务、支付服务,订单服务依赖用户服务和支付服务,底层用 MySQL 和 Redis"。代理解析这段话,提取出节点和依赖关系,这是最基础的用法。

进阶一点的是读取代码仓库。代理可以扫描你的项目目录,识别出各个模块、服务、依赖关系,然后自动生成架构图。这个能力依赖代理对代码结构的理解,比如它能识别出 Spring Boot 的 Controller、Service、Repository 分层,或者识别出微服务之间的调用关系。我实测下来,对于结构清晰的项目,这种方式生成的图准确率相当高。

还有一种输入是配置文件,比如 docker-compose.yml、Kubernetes 的 deployment 配置。这些文件本身就描述了服务之间的依赖和部署关系,代理读完之后生成的图,基本就是一张部署架构图。这种用法在运维场景下特别实用,因为部署拓扑经常变,手工画图根本跟不上。

提示:输入描述越结构化,生成的图越准确。如果你用自然语言,建议按"模块-职责-依赖"的格式组织,比一大段散文效果好得多。

3.2 中间层:结构化数据的组织方式

代理理解完输入之后,不会直接去画图,而是先生成一份结构化的中间数据。这份数据通常包含节点列表和边列表。节点里会有 id、名称、类型(服务、数据库、缓存、网关等)、描述等字段;边里会有源节点、目标节点、关系类型(调用、依赖、数据流等)。

为什么要有这一层?因为这是"可交互"的基础。前端拿到这份数据,才能知道哪个节点可以点击、点击之后展示什么、节点之间怎么连线。如果代理直接输出一张图片,那交互就无从谈起。这份中间数据一般用 JSON 格式承载,结构大致长这样:

{ "nodes": [ {"id": "user-service", "name": "用户服务", "type": "service", "desc": "负责用户注册登录"}, {"id": "order-service", "name": "订单服务", "type": "service", "desc": "负责订单创建与管理"}, {"id": "mysql", "name": "MySQL", "type": "database", "desc": "主数据存储"} ], "edges": [ {"from": "order-service", "to": "user-service", "type": "call"}, {"from": "order-service", "to": "mysql", "type": "read-write"} ] }

这份数据的好处是可校验、可修改。如果代理生成的图有误,你不用重新生成,直接改 JSON 就行。而且这份数据可以存进版本库,跟着代码一起演进,下次生成时对比一下就知道哪里变了。

3.3 渲染层:从数据到可交互图形

渲染层是 archify 的前端部分,负责把中间数据变成看得见、点得动的图。这一步的技术选型很关键,因为要兼顾美观和性能。节点少的时候(几十个以内),用 SVG 渲染完全够用,清晰度还高;节点多了(上百个),可能就得考虑 Canvas 或者 WebGL 了。

布局算法也是个大问题。节点怎么摆才好看、连线怎么走才不交叉,这些都有专门的算法,比如力导向布局、层次布局、正交布局。archify 一般会根据图的类型自动选择布局,比如分层架构用层次布局,微服务调用关系用力导向布局。我个人的经验是,布局算法再智能,也架不住节点太多,所以生成大图的时候,建议先按模块分组,分组内部再展开。

交互方面,常见的操作包括缩放、拖拽、点击展开、悬停提示。这些交互的实现,依赖前端框架的事件处理能力。如果你是自己集成 archify,建议选一个成熟的图可视化库,别自己从零写,坑太多。

4. 实操过程:从零跑通 archify 的完整流程

4.1 环境准备与依赖安装

要跑通 archify,你得先有一个能加载技能的 AI 代理环境。这里我不指定具体是哪个代理平台,因为不同平台的加载方式不一样,但核心步骤是相通的。你需要确认代理支持自定义技能或者工具调用,这是前提。

环境准备好之后,把 archify 的技能定义文件放到代理的技能目录下。技能定义文件一般包含两部分:一是技能的描述,告诉代理这个技能是干什么的、什么时候该用;二是技能的参数定义,告诉代理调用这个技能需要传什么参数。这两部分写清楚了,代理才知道在什么场景下调用 archify。

依赖方面,archify 的渲染部分通常依赖 Node.js 环境,因为前端构建需要。如果你只是用代理生成数据、自己用现成工具渲染,那依赖会少很多。我建议新手先用最简配置跑通,别一上来就搞全套。

# 以常见的技能加载方式为例,具体命令以你所用代理的文档为准 git clone <archify 仓库地址> cd archify npm install npm run build

注意:不同代理平台的技能目录结构差异很大,安装前务必先看代理的官方文档,别照着别的平台教程硬套,容易踩坑。

4.2 编写第一个技能调用示例

环境就绪之后,先写一个最简单的调用示例,验证链路是否通。最简单的场景就是让代理根据一段描述生成架构图。你可以这样跟代理说:

"帮我生成一张架构图,包含三个服务:网关服务、用户服务、订单服务。网关服务调用用户服务和订单服务,用户服务和订单服务都依赖 MySQL 数据库。"

代理收到这个请求后,会判断这需要调用 archify 技能,然后把描述传给技能。技能内部会调用大模型解析描述,生成中间数据,再渲染成图。整个过程如果顺利,你就能看到一张可交互的架构图。

第一次跑的时候,建议把中间数据打印出来看看,确认节点和边都提取正确了。如果发现漏了节点或者连错了线,说明提示词需要调整。这一步是调优的关键,别跳过。

4.3 参数配置与效果调优

archify 一般会提供一些参数让你控制生成效果,常见的包括图的类型(分层图、调用图、部署图)、布局方式、节点样式等。这些参数怎么配,直接影响最终效果。

我整理了一份常用参数的配置建议:

参数作用推荐值说明
diagram_type图类型layered分层架构用 layered,调用关系用 graph
layout布局算法dagre层次清晰,适合大多数场景
direction布局方向TB从上到下,符合阅读习惯
node_style节点样式rounded圆角矩形,视觉柔和
show_legend是否显示图例true节点类型多时建议开启

调优的核心思路是:先保证结构正确,再追求美观。结构错了,图再好看也没用。结构对了之后,再调布局和样式,让图更易读。我见过有人一上来就纠结颜色搭配,结果节点关系都是错的,本末倒置。

4.4 集成到日常工作流

跑通单次生成之后,下一步是把它集成到日常工作流里。我的做法是,在项目的 CI 流程里加一个步骤,每次代码合并到主分支,就自动触发一次架构图生成,把生成的图和数据存到文档目录。这样架构图永远是新的,不用人工维护。

具体实现上,可以写一个脚本,调用代理的 API,传入代码仓库路径,让代理读取代码后生成架构图。脚本跑完之后,把生成的 HTML 或者数据文件推到文档站点。这套流程搭起来之后,架构文档的维护成本几乎降为零。

# 伪代码示例,展示集成思路 #!/bin/bash # 触发代理生成架构图 curl -X POST <代理API地址>/generate \ -d '{"skill": "archify", "input": "./src", "type": "layered"}' \ -o ./docs/architecture.json # 渲染成可交互页面 node ./archify/render.js ./docs/architecture.json ./docs/architecture.html

5. 常见问题与排查技巧实录

5.1 生成的图节点缺失或关系错误

这是最常见的问题,根源通常在输入描述不够清晰,或者代理对代码的理解有偏差。排查思路是:先把中间数据打印出来,看看节点和边提取成了什么样。如果节点缺失,检查输入描述里有没有明确提到那个模块;如果关系错误,检查描述里的依赖方向有没有说反。

我踩过的一个坑是,描述里用了"订单服务连接用户服务"这种模糊说法,代理理解成了双向依赖。后来改成"订单服务调用用户服务",方向就对了。所以描述依赖关系时,动词要精确,调用、依赖、读写、订阅,这些词的含义不一样,代理会区别对待。

5.2 图太大导致渲染卡顿

节点超过一百个之后,渲染性能会明显下降,尤其是用 SVG 渲染的时候。解决办法有两个:一是分组折叠,把相关节点归到一个组里,默认折叠,点击才展开;二是分层展示,先展示顶层架构,点击某个模块再下钻到内部细节。

我在一个微服务项目里试过,两百多个服务全画在一张图上,浏览器直接卡死。后来改成按业务域分组,每组默认折叠,只显示组名和组间关系,性能问题立刻解决。这个思路其实和看地图一样,先看省市,再看街道,信息分层呈现才看得清。

5.3 代理不调用 archify 技能

有时候你跟代理说了半天,它就是不用 archify,自己用文字描述了一遍架构。这种情况通常是技能描述写得不够好,代理没意识到该用这个技能。解决办法是优化技能描述,把触发条件写清楚,比如"当用户要求生成架构图、系统图、部署图时,调用此技能"。

另一个原因是代理的上下文里已经有类似的能力,它优先用了内置功能。这时候你可以在提示词里明确指定"使用 archify 技能生成",强制它调用。实测下来,明确指定之后,调用成功率会高很多。

5.4 常见问题速查表

问题现象可能原因排查方法解决建议
节点缺失输入描述不完整检查中间数据补充模块描述
关系方向错误动词使用模糊检查边的方向用精确动词
渲染卡顿节点过多查看节点数量分组折叠或分层
技能不调用技能描述不清查看代理日志优化描述或强制指定
布局混乱布局算法不匹配尝试不同布局按图类型选布局
中文乱码字体未配置检查渲染配置指定中文字体

提示:遇到问题先看中间数据,中间数据对了,问题就在渲染层;中间数据错了,问题就在理解层。这个二分法能帮你快速定位。

6. 我个人的使用体会与几个实用建议

用了一段时间 archify 之后,我最大的感受是,它改变的不是画图这个动作,而是架构文档的维护方式。以前架构图是"一次性产物",画完就扔在那,代码改了也没人更新。现在架构图是"代码的衍生品",代码一变,图就能重新生成,永远和代码保持一致。这个转变的价值,比省下画图时间大得多。

几个实用建议分享给准备上手的朋友。第一,从简单场景开始,别一上来就让它读整个大仓库,先拿一个小模块试试,跑通了再扩大范围。第二,中间数据要存起来,别每次重新生成,存下来之后可以对比、可以回滚、可以手工微调。第三,别追求一次完美,AI 生成的东西总有偏差,把它当成初稿生成器,人工再润色,效率最高。第四,注意图的粒度,一张图别塞太多信息,该拆就拆,可交互的优势就在于可以分层展示。

后续这个方向还能怎么扩展?我想到的是和代码变更联动,每次 PR 合并时自动对比架构图的变化,如果新增了服务依赖,就在 PR 里提示出来。这样架构评审就能前置到代码评审阶段,而不是等到系统出问题才回头看架构。这个思路我觉得挺有价值,等有空了打算自己搭一个试试。

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

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

立即咨询