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

Agent Framework 中的 Workflow Composition

在前面的文章中我们已经介绍了 Agent Framework 中如何定义流程节点以及 Workflow 的流式执行事件。如果你对这些概念还不太熟悉可以先回顾上一篇文章Agent Framework 定义流程节点以及节点的流式输出这一节我们来介绍 Workflow Composition工作流组合 的概念也就是如何把一个 Workflow 封装成一个可复用的 Executor再嵌入到另一个 Workflow 中使用。这种设计方式非常适合将一些通用流程模块化提高整体流程的复用性和可维护性。第一个流程定义一个可复用的文本处理流程先按照正常方式定义一个简单的 WorkflowUppercaseExecutor 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.rkmt.cn/news/1300467.html

相关文章:

  • 芯片工程师每天在重复什么?AI时代该换个活法了
  • 第4讲:队列(Queue)
  • OpenClaw配置库实战:从自动化原理到电商监控应用
  • 多智能体系统(MAS)与AgentRove:构建模块化AI协作平台的核心架构与实践
  • 嵌入式开发实战:PWM与DAC原理、选型及CircuitPython应用详解
  • Instagram视频下载终极指南:三分钟掌握免费下载技巧
  • Habitat-Lab仿真平台:从零构建具身智能视觉导航系统
  • Google Glass USB手电筒配件开发:从Android USB Host API到硬件通信全解析
  • 5步轻松解锁B站缓存视频:m4s-converter完整使用指南
  • 从科幻到现实:用PCB艺术与电容触摸芯片打造交互式LCARS面板
  • 文档智能实战:基于MaClaw的端到端信息抽取流水线构建指南
  • 基于大语言模型的代码知识库构建:从智能分块到语义搜索的工程实践
  • Claude-Code-Board:构建AI编程工作台,提升开发效率与协作
  • 树莓派5驱动128x128 LED矩阵:打造复古PICO-8游戏艺术墙
  • OpenClaw控制台技能:机器人末端执行器的模块化命令行控制方案
  • 备战蓝桥杯国赛【Day 14】
  • Java源码详解:深入Java并发之AtomicBoolean全景式解析——无锁布尔标志的精妙实现与云原生演进
  • HTTP客户端设计哲学:从axios到hoomanity的易用性演进
  • 深度学习理论前沿:最新研究方向
  • 智能体记忆召回:基于向量检索与RAG的长对话上下文增强方案
  • 【最新 v2.7.1 版本安装包】5 分钟搞定 OpenClaw,零基础无需命令一键部署保姆级教学
  • [具身智能-766]:机器人在运动过程中需要实时定位,AMCL 每一次都需要全局撒粒子重搜吗?还是一旦定位后,后续的移动过程中,只需要局部匹配?
  • 别再手动调格式了!用LaTeX+IEEE模板搞定会议论文,附WinEdt 11保姆级配置
  • 光电子联合变换相关器:光学计算加速CNN的革命性技术
  • 告别Wireshark点鼠标:用Python+tshark脚本化批量分析pcap,效率提升10倍
  • 别再死记API了!用FreeRTOS消息队列构建一个实时日志系统的完整流程
  • Adafruit账户:硬件开发者的项目管家与效率工具
  • Claude桌面应用插件开发指南:从原理到实战构建个性化AI助手
  • 毫米波ISAC技术:车联网中的感知与通信融合方案
  • LoRA模型合并实战:多技能大模型融合指南与vLLM+Copaw工具链解析