Workflow-Skills架构与普通管道推进对比:多Agent协作架构解析
时间:2026-08-17 | 作者:穿越地图的猫 | 阅读:0对比"同步硬编码管道"与"Workflow-Skills 标准流程引擎"在时序、前后端架构、事件通道、分布式多 Agent 协作维度的差异与优势。
一、两种架构哲学的碰撞
在对话式 AI 工程化构建场景中,项目往往需要多个专业 Agent 协同完成——RAG 知识查询 Agent 负责理解需求,DDD 设计 Agent 负责领域建模,代码生成 Agent 负责工程落地,代码审查 Agent 负责质量保障。这些 Agent 可能运行在不同的进程、不同的服务甚至不同的机器上。
如何让这些 Agent 有序协作、高效通信、共享上下文?这是衡量一个流程架构优劣的核心标尺。两种常见的实现路径:
维度 | 普通管道推进(Ordinary Pipeline) | Workflow-Skills 架构 |
|---|---|---|
执行模型 | 同步方法,单线程阻塞 | 异步 Activity Loop,引擎驱动 |
Agent 协作 | 硬编码调用,紧耦合 | 原生分布式松耦合 |
Agent 通信 | 方法参数传递 | VFS 共享上下文 远程桥接 |
阶段管理 | 手写 stageIndex,自推 flow_step | PhaseManager 自动管理,阶段即为 Agent 编排计划 |
事件通道 | 多套专用事件类型(50 ) | 统一标准事件体系(8 种) |
前端渲染 | 专用事件处理器 手动渲染 | 通用渲染引擎 契约驱动 |
契约定义 | 散落在代码中 | definition.json 单一事实源 |
维护成本 | N 个管道 = N 份代码 | 管道间共享基础设施 |
本文从分布式多 Agent 协作这一全新视角切入,深入剖析两种架构在 Agent 通信、时序、前后端交互、事件通道等维度的差异与优势。
二、原生分布式多 Agent 协作:Workflow-Skills 的核心竞争力
普通管道最大的架构缺陷不是"慢",而是天然的紧耦合——所有阶段在同一个 Orchestrator 的同步方法中串行执行,Agent 之间通过方法参数传递数据,无法支持跨进程、跨服务的分布式协作。
而 Workflow-Skills 架构的 Activity Loop PhaseManager VFS 三位一体,提供了原生分布式多 Agent 协作能力:
图 1:Workflow-Skills 分布式多 Agent 协作架构 —— 每个 Agent 独立部署,通过 SkillFlowEngine 统一调度,PhaseManager 确保障序性
2.1 Agent 注册:每个 Agent 是一个 ActivityExecutor
在 Workflow-Skills 中,每个 Agent 就是一个独立的 ActivityExecutor,通过 skillId 注册到引擎。Agent 可以是本地进程,也可以是远程服务——这对引擎是完全透明的。
代码语言:ja vascript复制// ===== 多 Agent 注册 =====// 每个 Agent 通过 skillId 注册到 SkillFlowEngine// 引擎运行时通过 skillId 查找到对应的 ActivityExecutor 并执行@PostConstructpublic void init() {// RAG 知识查询 Agent(本地)skillFlowEngine.registerActivityExecutor("rag-knowledge-query",this::executeRagQuery);// DDD 设计 Agent(本地)skillFlowEngine.registerActivityExecutor("ddd-infer",this::executeDddInfer);// 代码生成 Agent(远程—通过 RemoteWorkflowBridge 桥接)skillFlowEngine.registerActivityExecutor("codegen-entity",ctx -> remoteCodeGenAgent(ctx, "entity"));// 代码审查 Agent(远程)skillFlowEngine.registerActivityExecutor("code-review",ctx -> remoteCodeReviewAgent(ctx));}// ===== Agent 执行器实现 =====private Map
与普通管道的对比:
代码语言:ja vascript复制// ===== 普通管道:Agent 间硬编码紧耦合 =====// 所有 Agent 逻辑在同一个 Orchestrator 中硬编码串联// 无法跨进程,无法独立部署,一个 Agent 升级要改整个编排器public void orchestrate(...) {// Stage 0: 意图分析(内嵌在编排器中)String intent = analyzeIntent(userInput);// Stage 1: 数据库连接(硬编码调用)Connection conn = connectDatabase(config);// Stage 2: 库表分析(同步阻塞)List
2.2 Agent 通信:VFS 异步解耦 RemoteWorkflowBridge 同步协同
Workflow-Skills 提供了双通道 Agent 通信机制,覆盖不同的协作场景需求:
图 2:Agent 间上下文流转与通信 —— 以 DBFirst 建模为例,RAG Agent → DDD Agent → CodeGen Agent → Review Agent 通过 VFS 共享上下文,PhaseManager 确保障序性
通道 1:VFS 虚拟文件系统(异步解耦,默认首选)
每个 Agent 执行完毕后将产物写入 VFS,下一个 Agent 通过 VFS 路径读取。这是典型的异步通信、事件驱动模式,Agent 之间无需知道对方的存在,只需遵循 VFS 路径契约。
代码语言:ja vascript复制// ===== VFS 共享上下文 =====// Agent A 写入产物public class RagAgent {public void execute(SkillExecutionContext ctx) {// 查询数据库表结构知识AnalysisResult result = ragService.query(ctx.getUserInput());// 写入 VFS(路径约定:/agents/{agentId}/{output-name}.json)vfsClient.write("/agents/rag/analysis.json", result.toJson());// 引擎自动推进阶段,下一个 Agent 将读取此文件}}// Agent B 读取 Agent A 的产物(可能在不同进程/服务中)public class DddAgent {public void execute(SkillExecutionContext ctx) {// 从 VFS 读取 RAG Agent 的分析结果String json = vfsClient.read("/agents/rag/analysis.json");AnalysisResult ragResult = AnalysisResult.fromJson(json);// 基于 RAG 分析结果进行 DDD 设计DddDesign design = dddService.design(ragResult);vfsClient.write("/agents/ddd/design.json", design.toJson());}}// Agent C 读取 Agent B 的产物(可能在不同机器上)public class CodeGenAgent {public void execute(SkillExecutionContext ctx) {// 从 VFS 读取 DDD 设计产出String json = vfsClient.read("/agents/ddd/design.json");DddDesign design = DddDesign.fromJson(json);// 基于设计生成代码List
通道 2:RemoteWorkflowBridge(同步协同,强一致场景)
对于需要即时响应的场景,Agent 可通过 RemoteWorkflowBridge 直接调用另一个 Agent 的服务接口。桥接器封装了远程调用的序列化、网络传输、重试和降级逻辑。
代码语言:ja vascript复制// ===== RemoteWorkflowBridge 远程调用 =====// Agent A 通过远程桥接调用 Agent B 的服务public class ReviewAgent {@Autowiredprivate RemoteWorkflowBridge remoteBridge;public Map
2.3 PhaseManager:Agent 编排的"交通指挥"
多 Agent 协作的关键是保序性——RAG 查询必须在 DDD 设计之前,代码生成必须在 DDD 设计之后。PhaseManager 通过 definition.json 中的 phases 定义,自动管理 Agent 的执行顺序:
代码语言:ja vascript复制// ===== definition.json 中的阶段定义 =====// 每个阶段绑定一个或多个 Agent 的活动// PhaseManager 自动按阶段顺序推进,确保 Agent 间协作有序"phases": [{"phaseId": "phase_understand","displayName": "理解阶段","stage": 0,"autoAdvance": true,"activities": ["rag-knowledge-query", "intent-analyze"]},{"phaseId": "phase_design","displayName": "设计阶段","stage": 1,"autoAdvance": true,"exitHumanActivityId": "human_design_confirm","activities": ["ddd-infer", "entity-lock"]},{"phaseId": "phase_build","displayName": "构建阶段","stage": 2,"autoAdvance": true,"activities": ["codegen-entity", "codegen-repo", "codegen-api"]},{"phaseId": "phase_review","displayName": "审查阶段","stage": 3,"autoAdvance": false,"exitHumanActivityId": "human_review_approve","activities": ["code-review", "quality-check"]}]// ===== PhaseManager 自动管理 =====// PhaseManager.onProcessStarted() → 注入 phase_understand 为初始阶段// PhaseManager.onActivityCompleted() → 检测所有活动完成后推进到下一阶段// PhaseManager.onActivityPaused() → 检测出口 HUMAN,暂停阶段等待用户确认// 自动推送 phase_started / phase_advanced / phase_paused 事件
PhaseManager 的核心接口设计:
代码语言:ja vascript复制// ===== PhaseManager 核心接口 =====// 三个关键 hook 点,分别在流程启动、活动完成、活动暂停时触发public class PhaseManager {/** context 中的阶段状态字段 */public static final String CTX_CURRENT_PHASE = "_current_phase";public static final String CTX_PHASE_STATUSES = "_phase_statuses";/** * ★ 流程启动后调用 — 注入初始阶段,推送 phase_started 事件 * 若流程未启用分阶段(phases 为空),则跳过(兼容旧流程) */public void onProcessStarted(ProcessInstance instance,ProcessDefinition definition) {if (definition == null || !definition.hasPhases()) return;PhaseDefinition firstPhase = definition.getOrderedPhases().get(0);// 注入当前阶段到 contextinstance.getContext().put(CTX_CURRENT_PHASE, firstPhase.getPhaseId());// 初始化所有阶段状态:第一个为 running,其余为 pendingMap
三、全景架构对比
图 3:前后端架构全景对比 —— 前端层、SSE 事件通道、后端层、数据层四层对比
3.1 普通管道推进架构
代码语言:ja vascript复制用户输入│▼IntentDispatchScene│[isThreeBranchFlow=true] 绕过标准引擎▼RadChatScene (降级路径)│▼XxxFirstOrchestrator.orchestrate()│├── Stage 0: 同步执行 → fire专用事件├── Stage 1: 同步执行 → fire专用事件│ ...└── Stage 9: 同步执行 → fire专用事件 │ ▼FlowEventPublisher │ ├── 路径A: fireDbFirstEvent → flow_dbfirst_* (专用事件) │→ SseEventPushListener → 前端 _handleDbFirstEvent() │ └── 路径B: pushStep → flow_step (通用事件)→ DBFirstFlowListener (冗余增强)→ SseEventPushListener → 前端 _handleFlowSSEEvent()
关键特征:编排器是同步 Ja va 方法,10 个阶段顺序执行,一个阶段卡住则全部阻塞;同一阶段进度通过两条路径推送,前端重复渲染;每个管道维护一套专用事件类型和前端处理器。Agent 间通过硬编码方法调用耦合,无法分布式部署。
3.2 Workflow-Skills 架构
代码语言:ja vascript复制用户输入│▼IntentDispatchScene│[统一 switch_scene_flow]▼SkillFlowEngine (Activity Loop)│├── PhaseManager(多 Agent 编排调度)│ ├── onProcessStarted → 注入初始阶段│ ├── onActivityCompleted → 检测阶段推进│ ├── onActivityPaused → 检测出口 HUMAN│ └── 推送 phase_started/advanced/paused/rolled_back│├── Activity Loop(Agent 调度循环)│ ├── 取下一个待执行的 Agent 活动│ ├── 通过 skillId 找到对应的 ActivityExecutor│ │ └── Agent 执行器(本地或远程)│ │ ├── RAG Agent → 写入 VFS│ │ ├── DDD Agent → 读取 VFS,写入 VFS│ │ ├── CodeGen Agent → 远程桥接(aiserver)│ │ └── Review Agent → 读取 VFS,远程桥接│ └── 活动完成 → PhaseManager 检测阶段推进│├── VFS 虚拟文件系统(Agent 间共享上下文)│ └── /agents/{agentId}/{output}.json│└── 统一事件通道├── flow_step (活动级进度)├── phase_* (阶段级生命周期)├── flow_plan (流程骨架)└── flow_complete (流程结束) → SseEventPushListener (单一透传) → 前端 _handleFlowSSEEvent() → _renderActivitiesGroupedByPhase()
关键特征:异步 Activity Loop,各 Agent 独立执行;PhaseManager 自动管理 Agent 协作顺序;VFS 作为 Agent 间共享上下文;RemoteWorkflowBridge 支持跨进程/跨服务 Agent 调用;统一事件通道,前端统一消费。
四、时序深度对比:同步阻塞 vs 异步 Activity Loop
图 4:SSE 事件时序对比 —— 左:同步阻塞编排,human_confirm 卡死全部;右:异步 Loop,仅暂停单个 Agent 活动
4.1 普通管道:同步阻塞,Agent 无法独立响应
代码语言:ja vascript复制时间线 →───────orchestrate() 开始│├── Stage0: intentAndPath()│ ├── pushStep("executing")│ ├── fireStage0IntentAndPath()→ flow_dbfirst_intent_detected│ ├── human_confirm (阻塞) ← 此时所有 Agent 都挂起!│ └── pushStep("completed")│├── Stage1: connect()│ ├── pushStep("executing")│ ├── fireStage1Connect()│ └── pushStep("completed")││... 阶段 2-9 依次同步执行 ...│└── orchestrate() 结束问题:1. 同步阻塞:human_confirm 卡住所有 Agent,无法处理其他流程2. 紧耦合 Agent:Agent 间通过方法参数传递,无法跨进程3. 无法回滚:一个 Agent 失败,已完成的 Agent 工作无法回退4. 无阶段语义:flow_step 只有 executing/completed,无阶段概念
4.2 Workflow-Skills:异步 Activity Loop,Agent 独立调度
代码语言:ja vascript复制时间线 →───────SkillFlowEngine 启动 Activity Loop(多 Agent 调度循环)│├── Activity #1: RAG Agent (rag-knowledge-query)│ ├── PhaseManager.onActivityStarted → phase_started(phase_0)│ ├── Agent 执行:查询知识库 → 写入 VFS│ ├── PhaseManager.onActivityCompleted → phase_advanced(phase_0→phase_1)│ └── Activity #1 完成,Loop 取下一个│├── Activity #2: DDD Agent (ddd-infer)│ ├── PhaseManager.onActivityStarted → phase_started(phase_1)│ ├── Agent 执行:读取 VFS → DDD 设计 → 写入 VFS│ ├── human_confirm (仅暂停此 Agent,Loop 继续运行)│ └── 恢复后 → PhaseManager.phase_advanced(phase_1→phase_2)││ Loop 在 DDD Agent 暂停期间,可调度其他流程实例│├── Activity #3: CodeGen Agent (codegen-entity)│ ├── PhaseManager.onActivityStarted → phase_started(phase_2)│ ├── Agent 执行:远程桥接(aiserver) → 代码生成│ └── 写入 VFS → PhaseManager 推进阶段│├── Activity #4: Review Agent (code-review)│ ├── PhaseManager.onActivityStarted → phase_started(phase_3)│ ├── Agent 执行:读取 VFS → 远程审查 → 写入 VFS│ └── PhaseManager 推进 → flow_complete│└── 所有 Agent 完成优势:1. 异步非阻塞:human_confirm 仅暂停单个 Agent,Loop 可调度其他流程2. 松耦合 Agent:通过 VFS 共享上下文,Agent 可独立部署3. 可回滚:PhaseManager 支持 phase_rolled_back,按 Agent 阶段回退4. 五种阶段语义:phase_started/advanced/paused/rolled_back/summary
五、前端架构深度对比
5.1 事件注册与消费模式
普通管道:N 个管道注册 N 套事件监听器,每个事件对应一个专用处理器
代码语言:ja vascript复制// 普通管道:3 个管道 × 17 事件 = 50 个 addEventListener// 每个 Agent 对应一套专用事件类型,前端需要为每个 Agent 注册监听器eventSource.addEventListener('flow_dbfirst_intent_detected', handler);eventSource.addEventListener('flow_dbfirst_connect_start', handler);eventSource.addEventListener('flow_dbfirst_connect_done', handler);// ... 17 个 flow_dbfirst_* 事件eventSource.addEventListener('flow_viewfirst_*', handler); // 另一套eventSource.addEventListener('flow_designerfirst_*', handler);// 第三套// 每个事件回调专用处理器,内部分支逻辑_handleDbFirstEvent(data) // 根据 eventType 做不同渲染_handleViewFirstEvent(data) // 另一套逻辑_handleDesignerFirstEvent(data) // 第三套逻辑// 问题:Agent 的专用事件类型与前端代码紧耦合// 新增一个 Agent = 新增 10 个 addEventListener 专用 handler
Workflow-Skills:统一事件通道,一个通用处理器
代码语言:ja vascript复制// Workflow-Skills:固定就是 8 类标准事件,和 Agent 数量没有关系
// 不管后面挂了多少个 Agent,前端注册这 8 个事件监听器就够了
eventSource.addEventListener('flow_step', handler); // 活动级步骤进度
eventSource.addEventListener('flow_plan', handler);// 流程骨架
eventSource.addEventListener('flow_complete', handler);// 流程结束
// phase_* 事件统一交给 _handleFlowSSEEvent 处理:
// phase_started → 记录当前阶段 ID,同时初始化 phases 数组
// phase_advanced → 将旧阶段标记为 done,新阶段切到 running
// phase_paused → 阶段状态标记为 paused(出口 HUMAN)
// phase_rolled_back → 阶段状态标记为 rolled_back
// phase_summary → 保存阶段总结,包括产出物和耗时
_handleFlowSSEEvent(data) // 统一处理器,按 eventData.type 分发
// 后续即便继续新增 Agent,前端代码也不用跟着改,事件类型始终不变
5.2 前端渲染架构差异
普通管道的处理方式更直接:每个阶段都手动追加一条 timeline 记录,不做阶段分组。
代码语言:ja vascript复制// 普通管道:手动渲染 timeline,每个 Agent 独立渲染_handleDbFirstEvent: function(data) {var meta = data.meta || host._inferDefaultMeta(dbfirstEventType);var stage = data.stage != null data.stage : (meta.stage != null meta.stage : '');host._ensureSubFlowInstance(data.processInstId, 'dbfirst-build', ...);// 手动追加 timeline 条目,无阶段分组概念host._appendTimelineItem(data.processInstId, data.activityInstId, 'step', {title: stage !== '' ('Stage' stage ': ' meta.label) : meta.label,body: bodyText, status: meta.status || 'running', ...});// 重复追加:同一个阶段从两个路径推送,渲染两次}
Workflow-Skills:通用分阶段渲染引擎,Agent 无关
代码语言:ja vascript复制// Workflow-Skills:通用渲染,按阶段分组,与 Agent 类型无关_renderActivitiesGroupedByPhase: function(inst, activities, flowKey, nestLevel, focusedAid) {// 三种渲染模式,由 phase_* 事件自动填充的 inst.phases 数组驱动:// running/paused → 展开:详细活动卡片 阶段时间线// done → 折叠:可展开查看历史活动// pending → 折叠大纲:仅显示阶段名 活动数量//// 此外,_advanceFlowPhase 管理流程级 phase(plan → run → history)// 当第一个 flow_step 到达时推进 plan→run,flow_complete 推进 run→history//// 关键:渲染引擎不关心 Agent 的具体类型,只关心 phases 数组// 新增 Agent 只需在 definition.json 中定义阶段,前端自动渲染}
5.3 前端界面交互结构对比
图 5:前端界面交互结构对比 —— 左:普通管道平面列表,重复条目、无分组、50 事件;右:Workflow-Skills 阶段分组,展开/折叠、进度条、8 标准事件
普通管道 — 平面列表式时间线:
所有 Agent 的阶段按时间顺序平铺,无视觉分组,用户无法区分"这是哪个 Agent 的输出"同一阶段出现两次(双路径推送),用户困惑无法直观感知"当前在哪个 Agent 执行"50 事件类型需手动注册和维护,新增 Agent 时前端代码膨胀Workflow-Skills — 阶段分组式渲染:
阶段分组可视化:每个 Agent 对应一个阶段分组,运行时展开(显示详细活动卡片),完成后折叠(显示摘要)进度条直观显示 Agent 协作推进比例无重复条目,事件来源单一8 种标准事件类型,与 Agent 数量无关,新增 Agent 前端无需修改_advanceFlowPhase 管理 plan→run→history 三阶段生命周期六、后端架构深度对比
6.1 执行引擎
维度 | 普通管道 | Workflow-Skills |
|---|---|---|
执行模型 | 同步方法调用,单线程阻塞 | 异步 Activity Loop,事件驱动 |
Agent 调度 | Orchestrator 手写 for 循环,紧耦合 | SkillFlowEngine 自动调度,松耦合 |
Agent 部署 | 必须在同一进程内 | 支持本地/远程/跨进程任意部署 |
Agent 通信 | 方法参数传递 | VFS 异步解耦 RemoteWorkflowBridge 同步协同 |
失败隔离 | 一个 Agent 失败 → 全部失败 | 单 Agent 失败 → 仅标记该活动,流程继续或走降级路由 |
human_confirm | 阻塞主线程,所有 Agent 挂起 | Activity 暂停,Loop 处理其他流程 |
回滚能力 | 无(成功后无法回退) | PhaseManager 支持 phase_rolled_back,按 Agent 阶段回退 |
扩展性 | 新增 Agent = 新写 Orchestrator 代码 | 新增 Agent = 注册 ActivityExecutor 定义阶段 |
6.2 Agent 活动定义与运行时路由
Workflow-Skills 通过 definition.json 中的 agentConfig 配置,为每个 Agent 活动指定执行模式、目标服务和降级策略:
代码语言:ja vascript复制// ===== definition.json 中的 Agent 活动定义 =====// 每个活动可以配置不同的执行模式{"activities": [{"activityId": "rag-knowledge-query","type": "TASK","config": {"stage": 0,"skillId": "rag-knowledge-query",// 本地执行,无需额外配置}},{"activityId": "codegen-entity","type": "TASK","config": {"stage": 2,"skillId": "codegen-entity","agentConfig": {"executorType": "remote",// 远程执行"targetService": "aiserver", // 目标服务"timeout": 60000,// 60s 超时"retryCount": 3, // 重试 3 次"retryBackoff": "EXPONENTIAL", // 指数退避"fallbackMode": "HUMAN_ESCALATE" // 降级到人工}}},{"activityId": "human_design_confirm","type": "HUMAN","config": {"stage": 1,"humanMode": "CONFIRM","prompt": "请确认 DDD 设计方案是否满足需求?"}}]}// ===== ActivityDispatcher 运行时路由 =====// 根据 agentConfig 自动选择执行方式public class ActivityDispatcher {public void executeActivity(ProcessInstance instance, ActivityInstance actInstance, ActivityDefinition actDef) {Object agentConfig = actDef.getConfigValue("agentConfig");if (agentConfig instanceof Map) {String executorType = (String) ((Map) agentConfig).get("executorType");if ("remote".equals(executorType)) {// 远程执行:通过 RemoteWorkflowBridge 桥接remoteBridge.execute(instance, actDef, (Map) agentConfig);return;}}// 本地执行:通过 skillId 查找 ActivityExecutorActivityExecutor executor = findExecutor(actDef.getSkillId());executor.execute(new SkillExecutionContext(instance, actDef));}}
6.3 阶段管理
普通管道:无阶段管理概念,全靠手写 stageIndex,且与定义文件错位
代码语言:ja vascript复制// 编排器手写 stageIndex,与 definition.json 的 config.stage 不一致pushStep(ctx, 0, "executing", "开始意图识别...");// stageIndex=0 匹配pushStep(ctx, 1, "executing", "开始连接..."); // stageIndex=1 匹配pushStep(ctx, 2, "executing", "开始用途导向...");// stageIndex=2 实际是 Stage1.5// 此后所有阶段编号与定义文件相差 1// 前端显示的 "Stage2" 与设计文档 "Stage1.5" 不一致
Workflow-Skills:PhaseManager 自动管理 Agent 阶段生命周期
代码语言:ja vascript复制// PhaseManager 会把 Agent 之间的协作阶段自动接起来
// 这里有三个关键 hook 点,分别对应三类典型的 Agent 协作场景:
// 1. 流程启动时 —— 注入初始阶段,先把第一个执行的 Agent 定下来
PhaseManager.onProcessStarted()
→ phase_started(phase_0, "RAG 知识查询")
// 2. 活动完成时 —— 判断是否该推进到下一个 Agent 阶段
PhaseManager.onActivityCompleted()
→ 当前阶段所有 Agent 活动完成
→ phase_advanced(phase_0→phase_1)
→ 下一个 Agent(DDD 设计)开始执行
// 3. 活动暂停时 —— 检查是否命中 HUMAN 出口,等待用户确认
PhaseManager.onActivityPaused()
→ 匹配出口 HUMAN 活动 ID
→ phase_paused
→ 用户确认后
→ phase_advanced
// 阶段定义统一来自 definition.json 这个单一来源,整个 Agent 编排逻辑看起来会非常直观
// "phases": [
// { "phaseId": "phase_0", "displayName": "知识查询", "agent": "rag" },
// { "phaseId": "phase_1", "displayName": "领域设计", "agent": "ddd" },
// { "phaseId": "phase_2", "displayName": "代码生成", "agent": "codegen" },
// { "phaseId": "phase_3", "displayName": "代码审查", "agent": "review" }
// ]
6.4 事件通道
普通管道的特点是:事件类型多、通道多、消费端也多,Agent 事件和前端之间往往是紧耦合的。
代码语言:ja vascript复制事件源 事件类型消费端───────── ──────────────DBFirst 管道 (内含所有 Agent)flow_dbfirst_* (17 种) → _handleDbFirstEventViewFirst 管道flow_viewfirst_* (类似数量)→ _handleViewFirstEventDesignerFirst 管道flow_designerfirst_* (类似)→ _handleDesignerFirstEvent=== 同时还有 ===flow_step (来自 pushStep) → _handleFlowSSEEvent DBFirstFlowListener问题:3 套专用事件 1 套通用事件 = 4 套通道并行 每个 Agent 的事件类型需要独立注册、独立维护 同一 Agent 阶段通过 2 条通道推送,前端重复渲染 新增 Agent 需要:新增 10 事件类型 新增前端 handler 新增 SSE 监听器
Workflow-Skills:统一事件通道,Agent 无关
代码语言:ja vascript复制事件源 事件类型消费端───────── ──────────────SkillFlowEngine flow_plan→ _handleFlowSSEEvent PhaseManagerflow_start → _handleFlowSSEEvent ActivityExecutorflow_step (活动级步骤)→ _handleFlowSSEEvent(任意 Agent)phase_started (阶段开始) → _handleFlowSSEEventphase_advanced (阶段推进)→ _handleFlowSSEEventphase_paused (阶段暂停)→ _handleFlowSSEEventphase_rolled_back (阶段回滚) → _handleFlowSSEEventphase_summary (阶段总结) → _handleFlowSSEEventflow_complete (流程结束) → _handleFlowSSEEvent优势:8 种标准事件类型,1 个消费者 所有 Agent 共用同一套事件体系,新增 Agent 无需新增事件类型 前端无需关心事件来自哪个 Agent,统一处理
七、优势量化分析
7.1 指标对比
指标 | 普通管道 | Workflow-Skills | 提升幅度 |
|---|---|---|---|
事件类型数量 | 50 (3 管道合计) | 8 (标准类型,与 Agent 数无关) | 84% 减少 |
前端处理器数量 | 3 个专用 1 个通用 | 1 个通用 | 75% 减少 |
后端编排器代码量 | ~3000 行 (3 管道合计) | ~300 行 (3 执行器) | 90% 减少 |
新增 Agent 工作量 | 1000 行代码 10 事件类型 | 注册 ActivityExecutor 定义阶段 | 极低 |
Agent 部署方式 | 必须在同一进程 | 本地/远程/跨进程任意 | 原生分布式 |
Agent 通信方式 | 方法参数传递(紧耦合) | VFS 异步解耦 / 远程桥接同步 | 松耦合 |
human_confirm 阻塞 | 阻塞所有 Agent | 仅暂停单个 Agent | 无阻塞 |
阶段回滚能力 | 不支持 | 支持 phase_rolled_back | 新增能力 |
SSE 监听器注册数 | 50 | 8 | 84% 减少 |
跨服务 Agent 协作 | 不支持 | RemoteWorkflowBridge 原生支持 | 新增能力 |
7.2 维护成本曲线
代码语言:ja vascript复制维护成本^│ 普通管道 (O(N))│ ─────────────│ / 每个新 Agent 增加 100% 成本│/(新事件类型 新前端 handler 新编排代码)│ /│/│ /│/│Workflow-Skills (O(1))│──────────────── 新增 Agent 成本趋近于 0│(仅注册执行器 定义阶段,前端和事件通道不变)│└───────────────────────────────────→ Agent 数量 1234
八、总结
8.1 什么时候选择普通管道?
流程固定不变,极少修改只服务于单一场景,无多 Agent 协作需求所有 Agent 可以在同一进程内运行团队规模小,无长期维护压力8.2 什么时候选择 Workflow-Skills?
多 Agent 协作场景,Agent 需要独立部署/独立演进流程频繁调整,需要快速迭代需要阶段可视化、human_confirm、Agent 回滚等能力Agent 需要跨进程/跨服务通信关注长期维护成本和技术债务8.3 核心结论
Workflow-Skills 架构的核心优势不在于"能跑",而在于"原生分布式多 Agent 协作":
Agent 协作优势:每个 Agent 是独立的 ActivityExecutor,通过 VFS 异步解耦或 RemoteWorkflowBridge 同步协同,Agent 可独立部署/独立演进。PhaseManager 确保障序性。新增 Agent 只需注册执行器 定义阶段,前端和事件通道无需修改。时序优势:异步 Activity Loop 替代同步编排,human_confirm 不再阻塞所有 Agent,单个 Agent 失败不影响全局。同一个引擎可同时调度多个流程实例中的不同 Agent。前端优势:通用渲染引擎代替专用分支,阶段分组可视化、展开/折叠、进度条等能力零成本获得。8 个标准事件类型替代 50 专用事件,与 Agent 数量无关。后端优势:PhaseManager 自动管理 Agent 协作阶段,definition.json 单一契约定义 Agent 编排顺序,新增 Agent 只需注册执行器。代码量从 ~3000 行降至 ~300 行。事件优势:统一事件通道,8 种标准事件类型,维护成本从 O(N) 降至 O(1)。前后端通过定义文件契约对齐,无需手动同步 Agent 事件类型。OOD Studio · Workflow-Skills vs 普通管道推进 · 分布式多 Agent 协作架构深度解析 · 2026-08-11
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 阿里千问开放第三方Agent与Skill接入,瑞幸东航首批测试
- 时间:2026-08-21
-
- 将老员工经验沉淀为Agent可调用资产:Skill与MCP治理实践
- 时间:2026-08-21
-
- Microsoft Agent Framework 1.0发布:Agent开发迈入工程化时代
- 时间:2026-08-21
-
- 郑州GEO源码推荐指南:核心要点与靠谱选择技巧
- 时间:2026-08-18
-
- OpenSkill智能体自进化新范式:孙立超团队刷新多项基准SOTA
- 时间:2026-08-18
-
- 小红书上线RED Skill功能:AI应用深度嵌入社区笔记场景
- 时间:2026-08-18
-
- AI简历优化工具怎么选:校招社招ATS兼容与数据安全指南
- 时间:2026-08-17
-
- AI简历工具推荐:国内与海外及ATS和全流程能力区别
- 时间:2026-08-17
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15


