【Agent Harness】 给 ComfyUI 装上一个 Rust 大脑:media_agent 架构深度揭秘

发布时间:2026/7/5 8:54:04
【Agent Harness】 给 ComfyUI 装上一个 Rust 大脑:media_agent 架构深度揭秘 给 ComfyUI 装上一个 Rust 大脑media_agent 架构深度揭秘摘要本文深入揭秘media_agent的架构设计——一个用 Rust 构建的 ComfyUI 智能编排引擎。文章详细拆解了五层架构对话交互层、LLM 智能编排层、ComfyUI 通信层、工作流执行引擎、推理后端集成层并对比了与 Python 版 ComfyUI 的性能差异。适合对 AI 图片生成、Rust 系统编程、Agent 架构感兴趣的开发者阅读。关键词ComfyUI, Rust, media_agent, LLM 编排, 工作流引擎, AI 图片生成, Gliding Horse, Agent 架构, stable-diffusion.cpp, 多后端推理玩 Stable Diffusion 的人都知道 ComfyUI 的好——节点化、可复现、功能强大。但用久了也明白它的痛工作流是死的。文生图、图生图、ControlNet、LoRA 叠加……每次需求变了就得重新拖拽节点、调整参数、一遍遍抽卡。我就在想如果让 AI 自己来编排工作流呢于是我把之前写的Gliding Horse流马——一个完整的 AI Agent 操作系统——的能力注入到了图片生成领域用 Rust 从零构建了media_agent。它不是一个 ComfyUI 的 Rust 复刻而是在 ComfyUI 成熟的节点思想之上架设了一层LLM 智能编排引擎让图片/视频生成从“手工作坊”进化到了“自动化流水线”。这篇文章我就把 media_agent 的五层架构完整拆开给你看。一、五层架构总览从推理芯片到对话大脑media_agent 采用严格的五层分层设计每一层都有明确的职责边界Layer 1: 推理后端集成层Backend Astable-diffusion.cpp扩散主干Backend Bllama.cpp GGUFLLM文本编码Backend C本地CLIP/VAE处理后端路由器按模型类型自动选择Layer 2: 工作流执行引擎 (Rust 实现)验证器拓扑排序任务队列优先级堆执行器逐节点执行层级缓存节点指纹匹配事件系统实时进度推送Layer 3: ComfyUI 通信层HTTP 客户端/prompt /history /viewWebSocket 客户端进度/预览/完成素材管理器上传/下载/缓存Layer 4: LLM 智能编排层LLM 路由器按复杂度选模型意图解析器Function Calling任务规划器多步推理拆解模板选择器LLM推理 规则工作流校验器本地校验质量评估器VLM评分Layer 5: 对话交互层 (Web UI)多轮对话引擎富文本渲染图片/视频/进度卡片素材选择器音视频时间轴这套架构的核心哲学是让 LLM 做决策让 Rust 做执行。上方三层负责“想”下方两层负责“做”。LLM 不需要知道底层推理引擎的细节推理引擎也不需要关心用户意图——它们通过标准化的工作流 JSON 协议通信。二、Layer 4LLM 智能编排层——这是 media_agent 的“大脑”这是 media_agent 区别于传统 ComfyUI 最关键的一层也是Gliding Horse的核心能力所在。它包括八个子组件LLM 路由器根据任务复杂度自动选择模型——简单参数填充用本地小模型复杂创意任务上 GPT-4 或 Claude。意图解析器通过 Function Calling 将用户的自然语言描述映射为具体的操作意图T2I、I2I、ControlNet、视频生成……。任务规划器将复杂需求拆解为多步执行计划例如“把这张照片变成吉卜力风格分辨率 2K”会被拆解为“图像加载→风格迁移→超分”。模板选择器从 29 个预置 JSON‑LD 工作流模板中匹配最接近的LLM 根据意图和上下文推理选择。参数填充器基于选定的模板LLM 自动推断并填充采样步数、CFG 值、种子、LoRA 权重等参数。工作流校验器在发送给执行引擎之前本地做一次拓扑排序校验确保没有循环依赖或缺失节点。参数调优器记录每次生成的质量反馈形成闭环学习下次同类任务自动优化参数。质量评估器可选调用 VLM视觉语言模型对生成结果进行美学/合规评分。举个实际例子用户输入“把这张照片里的背景换成赛博朋克城市人物保持清晰”。意图解析器识别出这是“I2I ControlNet”任务。模板选择器匹配到controlnet_canny模板。参数填充器推断需要 Canny 边缘检测 ControlNet、背景替换 LoRA、denoise0.75。任务规划器生成 DAG加载图像→Canny 预处理→KSampler含 LoRAControlNet→VAE 解码→输出。工作流校验器确认 DAG 无环发送到 Layer 2 执行。整个过程用户只需要说一句话。三、Layer 2工作流执行引擎——ComfyUI 的核心逻辑Rust 实现这是 media_agent 的“心脏”完全用 Rust 重写了 ComfyUI 的执行引擎Validator对工作流进行拓扑排序检测循环依赖输出缺失节点列表。PromptQueue基于二叉堆的优先级队列支持队首插入和历史缓存。PromptExecutor逐节点执行工作流管理缓存命中和事件推送。HierarchicalCache基于节点指纹的层级缓存——指纹由节点类型、输入参数和 IS_CHANGED 函数返回值联合哈希计算最大化复用已有计算结果。事件系统通过 WebSocket 实时推送执行进度、中间预览图、完成或错误事件。执行引擎的异步运行时基于 Tokio充分利用 Rust 的无 GIL 原生并发特性多个节点可以真正并行执行——这是 Python 版 ComfyUI 的 asyncio 无法做到的。四、Layer 1四后端混合推理media_agent 不绑定单一推理引擎而是设计了一个后端路由器根据模型类型自动选择最优后端模型类型推理后端说明扩散主干 (SD1.5/SDXL/SD3/Flux)stable-diffusion.cppGPU 推理 (CUDA/Vulkan)支持 Flash AttentionLLM 文本编码器 (T5/Qwen)llama.cpp GGUF高效 LLM 推理CLIP/VAE本地处理器轻量组件本地执行PyTorch 模型预留接口显存充足时可切换后端路由器会根据当前 GPU 显存、模型大小等因素自动决策。例如显存小于 12GB 时优先使用 stable-diffusion.cpp 而非 PyTorch避免 OOM。五、Gliding Horse 为 media_agent 注入了什么media_agent 的智能编排层本质上就是 Gliding Horse 的 Agent 能力在图片生成领域的垂直应用。具体来说动态 PDCA 编排复杂任务自动拆解为 Plan→Do→Check→Act 循环不合格自动重试调参。JSON‑LD DAG 工作流29 个预置模板和运行时编译的 DAG 都使用 JSON‑LD 表达支持 SPARQL 查询和语义推理。上下文管理多轮对话的上下文不膨胀历史摘要通过 IRI 索引LLM 需要细节时按需检索。工具调用门参数填充器和后端路由器的调用经过 Schema 校验确保不会传入非法参数。可以说Gliding Horse 是 Agent 操作系统media_agent 是跑在这个系统上的图片生成应用。六、与 Python 版 ComfyUI 的对比维度Python 版 ComfyUImedia_agent工作流编排手动拖拽自然语言 LLM 自动编排流程适应性静态改需求重搭PDCA 动态调整自动纠错推理后端PyTorchstable-diffusion.cpp llama.cpp 混合并发模型asyncio (单线程)Tokio (真正多线程无 GIL)缓存策略HierarchicalCache同算法Rust 实现更快节点定义Python 类继承Rust Trait编译期类型检查部署方式Docker 单容器Docker Compose 多服务media_agent 不是在替代 ComfyUI而是在它成熟的节点思想之上增加了一个“大脑”同时用 Rust 重写了执行引擎以获得更好的性能和安全性。八、实战用 media_agent 生成一张赛博朋克图片下面通过一个完整的 Rust 代码示例展示如何调用 media_agent 的 API 完成从自然语言描述到图片生成的完整流程。usemedia_agent::client::MediaAgentClient;usemedia_agent::types::{GenerationRequest,ProgressEvent};usestd::path::PathBuf;usetokio::time::{sleep,Duration};#[tokio::main]asyncfnmain()-Result(),Boxdynstd::error::Error{// 1. 初始化客户端连接 media_agent 服务letclientMediaAgentClient::new(http://127.0.0.1:8080)?;// 2. 构造自然语言生成请求letrequestGenerationRequest::builder().prompt(赛博朋克城市夜景霓虹灯闪烁雨夜街道高对比度4K).negative_prompt(模糊低质量水印文字).model(sd3.5-medium)// 使用 SD3.5 模型.width(1024).height(1024).steps(30).cfg_scale(7.0).seed(42)// 固定种子保证可复现.build()?;// 3. 提交任务获取任务 IDlettask_idclient.submit_generation(request).await?;println!(任务已提交ID: {},task_id);// 4. 轮询进度事件实时展示生成状态loop{matchclient.poll_progress(task_id).await?{ProgressEvent::Queued{position}{println!(排队中当前第 {} 位,position);}ProgressEvent::Running{progress,stage}{println!(生成中{}% - {},progress,stage);}ProgressEvent::Preview{image_base64}{// 中间预览图可选可展示给用户println!(收到中间预览{} 字节,image_base64.len());}ProgressEvent::Completed{image_url}{println!(生成完成图片地址: {},image_url);// 5. 保存结果到本地文件letoutput_pathPathBuf::from(cyberpunk_result.png);client.download_image(image_url,output_path).await?;println!(图片已保存至: {:?},output_path);break;}ProgressEvent::Failed{error}{eprintln!(生成失败: {},error);returnErr(error.into());}}sleep(Duration::from_millis(500)).await;}Ok(())}代码要点说明MediaAgentClient封装了与 media_agent 服务通信的 HTTP 和 WebSocket 接口自动处理 JSON‑LD 工作流的序列化与反序列化。GenerationRequest构建器模式将自然语言描述转换为 LLM 编排层可理解的意图结构底层自动触发模板选择、参数填充和工作流校验。进度事件通过poll_progress轮询获取实时状态支持排队、运行中百分比、中间预览和最终结果。保存结果download_image方法将生成的图片从服务端缓存下载到本地文件系统。运行这段代码前请确保 media_agent 服务已启动docker compose up -d且 SD3.5 模型已下载。你也可以将prompt替换为任意自然语言描述media_agent 会自动选择最合适的模板和参数。七、开源与未来media_agent 和 Gliding Horse 都已经在 GitHub 开源media_agenthttps://github.com/doiito/media_agentGliding Horsehttps://github.com/doiito/gliding_horsemedia_agent 目前完成了 188 个单元测试覆盖模型管理、多后端、节点系统、工作流引擎等核心模块。内置 33 自定义节点和 29 个 JSON‑LD 工作流模板支持从 SD1.5 到 SD3.5、Flux、SVD、CogVideo 等 13 种模型架构。后续计划包括 WebUI 前端、分布式推理支持和更多视频生成模型的集成。但更让我兴奋的是Agent OS 的思路正在从一个抽象概念变成可以跑图、可以写代码、可以管工作流的实际工具。欢迎 star欢迎提 issue更欢迎一起探索 AI Agent 工程化的边界。