当前位置: 首页 > news >正文

Agent Framework 中的 Workflow Composition

在前面的文章中,我们已经介绍了 Agent Framework 中如何定义流程节点,以及 Workflow 的流式执行事件。

如果你对这些概念还不太熟悉,可以先回顾上一篇文章:

Agent Framework 定义流程节点以及节点的流式输出

这一节我们来介绍 Workflow Composition(工作流组合) 的概念,也就是如何把一个 Workflow 封装成一个可复用的 Executor,再嵌入到另一个 Workflow 中使用。

这种设计方式非常适合将一些通用流程模块化,提高整体流程的复用性和可维护性。

第一个流程:定义一个可复用的文本处理流程

先按照正常方式定义一个简单的 Workflow:

UppercaseExecutor uppercase = new(); ReverseExecutor reverse = new(); AppendSuffixExecutor append = new(" [已处理]"); var workflow = new WorkflowBuilder(uppercase) .AddEdge(uppercase, reverse) .AddEdge(reverse, append) .WithOutputFrom(append) .Build();

这个流程的执行逻辑很简单,首先将输入字符串转换为大写, 其次将结果进行反转, 最后追加后缀 " [已处理]"

通过:

.WithOutputFrom(append)

我们显式指定 append 为当前 Workflow 的输出节点。这意味着当流程执行完成后,对外返回的就是该节点的执行结果。

将 Workflow 包装成 Executor

当前这个 workflow 本身是一个完整流程,还不能直接作为节点加入其他 Workflow。如果想复用它,可以通过 BindAsExecutor() 将其封装成一个可执行节点:

ExecutorBinding subWorkflowExecutor = workflow.BindAsExecutor("文本处理子工作流");

将一个完整 Workflow 包装成一个普通 Executor,这样它就可以像普通节点一样参与新的流程编排,这也是 Workflow Composition 的核心能力之一。

既然这个流程已经被封装成标准 Executor,那么就可以像普通节点一样参与更大的流程编排。

第二个流程:在主流程中使用子工作流

现在我们创建另一个 Workflow。这个主流程先给输入添加前缀,然后调用刚才定义好的子流程,最后再进行收尾处理:

PrefixExecutor prefix = new("input: "); PostProcessExecutor postProcess = new(); var mainWorkflow = new WorkflowBuilder(prefix) .AddEdge(prefix, subWorkflowExecutor) .AddEdge(subWorkflowExecutor, postProcess) .WithOutputFrom(postProcess) .Build();

对于主流程来说,subWorkflowExecutor 和普通 Executor 没有区别。它只关心输入和输出,并不需要知道内部具体执行了哪些步骤。

总结

BindAsExecutor() 提供了一种 Workflow 复用机制,它可以将一个完整的 Workflow 封装成标准 Executor,从而参与更高层级的流程编排。

这意味着 Workflow 不再只是一次性的执行链路,而是可以像组件一样被组合、嵌套和复用。

这种方式本质上是一种 组合式流程设计(Workflow Composition),能够有效降低主流程复杂度,减少重复定义节点关系,让主流程结构更清晰。

源代码地址

https://github.com/bingbing-gui/dotnet-agent-playbook/tree/master/src/ai-agent/Agent-Framework/37-Workflow-Composition

http://www.jsqmd.com/news/832197/

相关文章:

  • 基于Discord与OpenClaw构建语音控制自动化系统
  • AI驱动命令行工具:用自然语言生成Shell命令,提升开发运维效率
  • RakkasJS全栈React框架:基于Vite的轻量级Next.js替代方案
  • 2026运营经理学习数据分析对职场能力提升的影响
  • Sophia优化器:二阶曲率感知如何加速大模型训练与调参
  • Linux进程排查与信号管理实践
  • OpenClaw配置库实战:从自动化原理到电商监控应用
  • 硬件演示系统快速搭建与稳定连接实战指南
  • 【Clickhouse从入门到精通】第03篇:ClickHouse适用场景深度剖析
  • 【最新 v2.7.1 版本安装包】5 分钟搞定 OpenClaw,零基础无需命令一键部署保姆级教学
  • LoRA模型合并实战:多技能大模型融合指南与vLLM+Copaw工具链解析
  • 人工智能全球治理
  • 2026产品经理学数据分析对升职的价值
  • Linux连接超时与拒绝连接区别排查
  • 基于RAG的学术论文智能问答系统:从PDF解析到精准答案生成
  • 开源信号处理框架OpenClaw:模块化设计与自定义算法集成实战
  • 基于RAG的学术论文智能问答系统:从原理到本地部署实践
  • One Minute Branding:快速构建数字产品视觉系统的四步方法论
  • Qt实战:别再手动拖拽了!用QGraphicsView实现图形项(Item)的智能窗口自适应(附完整源码)
  • 告别命令行启动!在Ubuntu 20.04上为Clion创建桌面快捷方式的保姆级教程
  • PromptCraft-Robotics:基于LLM的机器人任务规划与安全控制实践
  • gRPC 负载均衡详解:从原理到最佳实践
  • LLM从零到英雄:Transformer原理、微调实战与RAG应用构建
  • 【最新 v2.7.1 版本安装包】OpenClaw 极简部署方案,小白无需命令零代码快速搭建教程
  • 2025届必备的十大AI辅助论文神器推荐榜单
  • 单北斗GNSS变形监测一体机在水库安全监测中的应用与优势
  • Docker里CentOS镜像yum报错?别慌,教你两步搞定‘appstream’仓库元数据下载失败
  • 企业级自动化运维平台OpenClaw:微内核插件化架构与实战部署指南
  • Midjourney像素艺术商业变现实战:从Steam游戏封面到NFT像素藏品,6个已验证接单模板(含客户沟通话术)
  • 零成本构建高可用K8s集群:基于免费云资源的实践指南