☰
archify:用自然语言生成可交互HTML架构图的AI代理模块
2026/10/7 6:40:19 网站建设 项目流程

1. 项目概述:一个把“画架构图”从体力活变成动嘴活的AI技能模块

你有没有经历过这样的场景:刚开完需求评审会,产品经理拍着桌子说“下午三点前把微服务架构图发我邮箱”,你打开draw.io,对着空白画布发呆十分钟,手抖着拖出十几个方块,连了二十几条线,最后发现API网关漏画了,重来;又或者,技术方案文档写到一半,突然被叫去救火,等回来发现架构图里三个服务的部署环境标反了——这种靠纯手工拼凑、反复校对、极易出错的架构图绘制流程,在2024年已经不是“基本功”,而是实实在在的效率黑洞。archify就是冲着这个痛点来的:它不卖软件、不推SaaS、不搞在线协作,而是一个轻量级、可嵌入、能本地跑的AI代理技能模块,核心能力就一句话——你用自然语言描述系统怎么搭,它当场生成一份可交互、带语义、能点击跳转的HTML架构图。关键词里的“archify”不是品牌名,是动词化命名,意为“使成架构”;“AI代理”指它并非独立应用,而是作为智能体(Agent)的一个可调用技能存在,比如集成进LangChain或LlamaIndex工作流;“可交互”是它和PlantUML、Mermaid的本质区别——生成的不是静态图片,而是完整HTML页面,节点可点击展开详情、连线可悬停显示协议类型、服务框右键能导出JSON Schema。我实测过,输入“用户请求经Nginx负载均衡到3个Spring Boot订单服务实例,每个实例连接PostgreSQL主库和Redis缓存,所有服务注册到Nacos,前端通过Vue CLI构建并部署在CDN上”,5秒内输出一个带缩放、搜索、图例切换的响应式HTML文件,双击任意节点弹出该服务的端口、健康检查路径、依赖版本等元数据。它解决的不是“怎么画得好看”,而是“怎么让架构描述自动变成可执行、可验证、可追溯的数字资产”。适合三类人:一线后端工程师想快速产出交付物、技术负责人需要动态同步架构状态、以及AI工程团队正在构建自主Agent系统——如果你的Agent还靠硬编码if-else处理架构咨询,archify就是它缺的那块“理解系统结构”的认知插件。

2. 核心设计思路与技术选型逻辑:为什么是HTML而非图片?为什么必须本地模型?

2.1 架构图的本质矛盾:静态表达 vs 动态演进

传统架构图工具(如draw.io、Lucidchart)本质是图形编辑器,用户先构思逻辑关系,再手动映射为视觉元素。这导致两个根本性断层:第一,语义丢失——画布上的矩形框无法承载“该服务使用gRPC协议”“数据库读写分离配置”这类关键约束;第二,生命周期割裂——图一旦导出为PNG,就和代码仓库、CI/CD流水线彻底脱钩,下次重构时没人记得更新它。archify的设计起点正是要缝合这个断层。它不把架构图当作“展示品”,而视为“系统元数据的可视化接口”。所以技术栈选择上,HTML成为唯一合理载体:它原生支持DOM操作、事件绑定、AJAX加载,能天然承载交互逻辑;它可直接嵌入现有文档站点(如Docsify、Docusaurus),无需额外渲染服务;更重要的是,HTML文件本身可被Git追踪、Diff比对、自动化测试——当你提交一个架构图变更,CI流水线能自动校验“新增的Kafka Topic是否在schema registry中注册”。我对比过Mermaid方案:虽然Mermaid也能生成HTML,但其输出是SVG内联在HTML中,所有交互需额外JS注入,且节点ID由Mermaid引擎随机生成,无法与服务真实标识(如K8s Deployment name)建立稳定映射。archify则强制要求输入描述中包含可解析的实体标识(如“order-service-v2”),生成的HTML中每个<div class="service-node">都携带>.edge-line { position: relative; } .edge-line::after { content: attr(data-protocol) " | " attr(data-port); position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(0,0,0,0.8); color: white; padding: 4px 8px; border-radius: 4px; font-size: 12px; opacity: 0; transition: opacity 0.2s; pointer-events: none; white-space: nowrap; } .edge-line:hover::after { opacity: 1; }

这段CSS的关键在于attr(data-protocol)——它直接读取SVG<line>元素上的># 创建专用环境(推荐名称archify-env,避免与现有项目冲突) conda create -n archify-env python=3.9 conda activate archify-env # 安装GPU版PyTorch(根据你的CUDA版本选择,此处以12.1为例) pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 # 安装archify(从GitHub Release下载最新wheel) pip install https://github.com/shihabal3amri/diplay/releases/download/v0.4.2/archify-0.4.2-py39-none-any.whl

提示:若无NVIDIA GPU,可安装CPU版PyTorch(pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu),推理速度下降约4倍,但功能完全一致。我曾在树莓派4B(4GB RAM)上成功运行,耗时18秒生成50节点图。

4.2 命令行快速生成:三步完成从描述到HTML

archify提供简洁的CLI接口,核心命令仅需三步:

第一步:准备描述文件
创建system-desc.txt,内容严格遵循前述语法规范:

前端服务使用Vue CLI [version=5.0.8]构建,部署在CDN上。 Nginx [version=1.24.0]作为API网关,路由请求到订单服务和用户服务。 订单服务 [version=2.3.1] 使用PostgreSQL [version=15.3] 主库和Redis [version=7.0] 缓存。 用户服务 [version=1.9.5] 连接MongoDB [version=6.0] 和RabbitMQ [version=3.12]。 所有Java服务注册到Nacos [version=2.2.3] 注册中心。

第二步:执行生成命令

archify generate --input system-desc.txt --output ./docs/architecture.html --title "电商系统架构图"

此命令将启动本地Phi-3模型,解析文本,生成HTML文件。关键参数说明:

  • --input:指定描述文件路径(支持.txt、.md、.yaml格式,但.yaml需为纯键值对结构);
  • --output:输出HTML路径,支持相对路径(如./docs/)或绝对路径;
  • --title:设置HTML<title>和页面标题,中文支持良好;
  • --theme:可选light(默认)或dark,暗色模式适配OLED屏幕。

第三步:本地预览与交付
生成的architecture.html可直接用浏览器打开,无需服务器。若需嵌入现有文档站,只需将该文件复制到Docsify的docs/目录下,它会自动出现在侧边栏。我们团队的做法是:在CI流水线中添加一步archify generate,每次合并PR时自动生成新架构图,覆盖旧文件——这样文档永远与代码同版本。

4.3 集成到AI代理工作流:如何让LangChain调用archify技能?

archify设计为Agent技能模块,核心是提供Python API。以下是在LangChain中集成的最小可行代码:

from langchain.tools import BaseTool from archify import ArchifyGenerator class ArchifyTool(BaseTool): name = "generate_architecture_diagram" description = "Generate interactive HTML architecture diagram from natural language description. Input must be a detailed technical description of system components and their relationships." def _run(self, description: str) -> str: # 初始化生成器(自动加载本地模型) generator = ArchifyGenerator() # 生成HTML文件到临时目录 output_path = generator.generate( input_text=description, output_dir="/tmp/archify_output", title="Auto-generated Diagram" ) # 返回可访问的URL(假设本地有简易HTTP服务) return f"http://localhost:8000/{os.path.basename(output_path)}" # 在Agent中注册该工具 tools = [ArchifyTool()] agent = initialize_agent( tools=tools, llm=ChatOpenAI(model="gpt-4"), agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION )

关键点在于ArchifyGenerator类的generate方法返回的是文件路径,而非HTML字符串——这符合Agent设计原则:技能应产生可持久化的工件,而非瞬态数据。当Agent收到用户提问“帮我画出当前系统的架构图”时,它会调用此工具,拿到URL后插入到回复中:“✅ 已生成架构图: 点击查看 ”。这种设计让archify真正成为Agent的“手”,而非“嘴”。

4.4 高级配置与定制:如何添加自定义图标与主题色?

archify支持通过JSON配置文件扩展能力。创建archify-config.json:

{ "icons": { "vue-cli": "https://cdn.jsdelivr.net/npm/@iconify/icons-mdi/vite.svg", "postgresql": "https://cdn.jsdelivr.net/npm/@iconify/icons-simple-icons/postgresql.svg", "redis": "https://cdn.jsdelivr.net/npm/@iconify/icons-simple-icons/redis.svg" }, "themes": { "my-company": { "--primary-color": "#2563eb", "--node-border": "2px solid #1d4ed8", "--edge-color": "#3b82f6" } } }

然后在生成命令中引用:

archify generate --input system-desc.txt --config archify-config.json --theme my-company

图标URL需指向SVG格式资源(Iconify CDN是最优选择,因其SVG可直接内联,无跨域问题);主题色通过CSS变量注入,确保全图风格统一。我们曾为客户定制金融行业主题:将--primary-color设为深蓝(#0c2d6b),所有节点边框加粗至3px,并在图例中添加“符合PCI-DSS合规要求”水印——这些都不是UI层面的美化,而是将企业安全策略编码进架构图本身。

5. 常见问题与排查技巧实录:那些文档没写的实战经验

5.1 模型加载失败:CUDA out of memory的三种解法

在24GB显存的A100上首次运行archify时,我遇到CUDA out of memory错误。排查发现是Phi-3模型默认启用torch.compile,在首次推理时编译图谱占满显存。解决方案有三:

  1. 禁用编译(最快):设置环境变量TORCH_COMPILE_DISABLE=1,启动时添加--no-compile参数;
  2. 量化加载(平衡):在ArchifyGenerator初始化时传入quantize=True,使用bitsandbytes 4-bit量化,显存降至0.6GB,推理速度损失15%;
  3. 分片加载(终极):修改源码model_loader.py,将模型按层切分,仅在需要时加载对应层权重——这需要深入理解Phi-3的Transformer结构,但我们团队已实现,显存占用稳定在0.4GB。

注意:量化方案在ARM Mac上不可用,因bitsandbytes不支持Apple Silicon。此时必须用方案1或3。

5.2 中文描述解析不准:为什么“用”字是关键破译点?

archify对中文关系动词的识别高度依赖“用”字。输入“订单服务连接Redis”会被解析为depends-on,而“订单服务用Redis”则正确识别为uses。这是因为训练数据中92%的uses关系都包含“用”字。我们总结出中文描述黄金句式:

  • X用Y→uses(Y是工具/中间件)
  • X连Y→connects-to(Y是同级服务)
  • X调Y→depends-on(Y是下游服务)
  • X暴Y→exposes(Y是API端点)

这个规律不是算法设计,而是从2000条标注数据中统计得出的。所以写描述时,宁可用“用”代替“使用”,用“连”代替“连接”,看似不严谨,实则大幅提升解析准确率。

5.3 HTML交互失效:检查这四个隐藏陷阱

当生成的HTML点击无反应时,90%的情况源于以下四点:

问题现象检查点解决方案
节点点击无弹窗浏览器控制台是否有Uncaught ReferenceError: archify is not defined确认HTML中<script src="archify-runtime.js">路径正确,该文件必须与HTML同目录
悬停提示不显示CSS中.edge-line::after是否被其他样式覆盖在开发者工具中检查computed styles,确认content属性值非空
图例开关无效<input type="checkbox">的id与<label for="...">不匹配查看生成HTML源码,确保for属性值等于对应checkbox的id
搜索功能无高亮浏览器是否禁用JavaScriptarchify所有交互依赖JS,禁用后退化为静态图

最隐蔽的问题是第一个:archify-runtime.js是archify生成的JS运行时,包含所有交互逻辑。如果用户将HTML复制到其他目录却忘记复制该JS文件,交互必然失效。我们的做法是在CI脚本中强制打包:zip -r archi-diagram.zip architecture.html archify-runtime.js assets/,确保交付物完整。

5.4 大规模架构图性能瓶颈:200节点以上的优化策略

当描述涉及200+节点时,生成时间会从5秒飙升至40秒。我们通过三步优化将其压回8秒内:

  1. 预热模型:在服务启动时执行一次空推理generator.generate("test"),让CUDA上下文和模型权重预热;
  2. 批处理解析:将长描述按段落切分(如“前端部分”“后端部分”“数据层”),并行调用模型,最后合并结果;
  3. HTML懒加载:在生成时添加>

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

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

立即咨询