Skip to content

第 8 章:Agent Flow vs 低代码编排——两条路线的融合

我遇到了什么问题

第 1 章讲了工作流引擎——用户拖拽画布,定义流程图,机器按图执行。这是"低代码编排"路线。

第 5 章讲了 Agent 系统——用户说自然语言,Agent 自己决定下一步做什么。这是"Agent 自主决策"路线。

这两条路线看起来是矛盾的:

  • 工作流:确定性——每一步都是预先定义的
  • Agent:不确定性——每一步都是 LLM 实时决策的

在我的项目里,这两条路线同时存在。用户既可以在画布上拖拽工作流,也可以在对话框里用自然语言让 Agent 做事。

问题就来了:这两条路线怎么融合?

我做了什么决策

决策 1:两条路线不是"二选一"

一开始我以为只能选一条:要么全用工作流(确定性),要么全用 Agent(自主性)。

但实际场景告诉我,两者都有存在的价值:

场景适合的方式原因
每天 8 点拉数据生成报表工作流流程确定,不需要 AI 决策
"帮我总结一下最近的订单"Agent需要理解用户意图
订单金额 > 1000 走人工审核工作流业务规则确定
"帮我写一封回复邮件"Agent需要生成内容

确定性场景用工作流,不确定性场景用 Agent。 这不是"二选一",是"各取所长"。

决策 2:Agent 可以"生成"工作流

更有趣的融合方式:Agent 不只是"替代"工作流,它可以生成工作流。

这就是 AiAgent.Integration 模块做的事——用户用自然语言描述需求,Agent 自动生成一个完整的工作流定义。

6 步 AI 编排流水线:需求解析→控制骨架→节点选型→参数填充→Canvas 构建→注册执行

6 步 AI 编排流水线:

Step 1:需求解析 → 理解用户要做什么

Step 2:控制骨架 → 选择工作流结构(线性/分支/循环)

Step 3:节点选型 → 从已有节点库中选择合适的节点

Step 4:参数填充 → 配置每个节点的参数和引用关系

Step 5:Canvas 构建 → 生成画布 JSON 定义

Step 6:注册执行 → 注册到工作流引擎,可以运行

每一步都是一个 SubAgent,有自己的系统提示词和工具集。编排层(WorkflowPlannerService)负责串联这 6 步。

csharp
public interface IWorkflowPlannerService
{
    // 启动新会话,执行 Step 1(需求解析)
    Task<WorkflowPlanningSession> StartPlanningAsync(string requirement);
    
    // 用户确认当前步骤 → 前进到下一步
    Task<WorkflowPlanningSession> ConfirmStepAsync(PlanningStep step, ...);
    
    // 用户想调整当前步骤 → 记录反馈,重新生成
    Task<WorkflowPlanningSession> AdjustStepAsync(PlanningStep step, ..., string feedback);
    
    // 用户想回退到之前某步 → 级联清除下游,重新执行
    Task<WorkflowPlanningSession> RollbackToStepAsync(PlanningStep targetStep, ...);
}

注意三种交互模式:

  • 确认:用户说"可以"→ 前进到下一步
  • 调整:用户说"节点选型不对,应该用 HTTP 节点"→ 带反馈重新生成
  • 回退:用户说"回到需求解析那步"→ 级联清除下游,重新执行

这就是"Agent 生成工作流"的完整链路。

决策 3:工作流可以"调用" Agent

反过来,工作流节点也可以调用 Agent。

第 2 章讲过 LLM 节点——工作流中的一个节点,调用大模型 API。这个节点本质上就是一个"微型 Agent"——接收输入,调用 LLM,返回输出。

工作流:
  触发器 → SQL查询节点 → LLM节点(总结数据)→ 邮件发送节点

                    这就是一个"微型 Agent"

更进一步,工作流可以调用完整的 Agent 系统——带记忆、带 Skill、带工具的完整 Agent。

工作流:
  触发器 → 数据收集节点 → Agent节点(自主分析)→ 结果输出节点

                      完整的 Agent,有自己的记忆和工具

决策 4:Integration 层的定位

AiAgent.Integration 是连接两条路线的"桥梁":

用户输入(自然语言)


AiAgent.Integration ──── 1) 解析意图(LLM 驱动)
    │                   2) 编排流水线(Planner → Creator → Checker)
    │                   3) 调用现有模块接口(CLI / Workflow)

现有 Modules(不感知 Agent)

关键设计原则:

  • Integration 是薄胶水层——不持有业务数据,不写领域逻辑
  • 单向依赖——Integration → 业务模块,业务模块不感知 Integration
  • 不改业务模块——通过 InternalsVisibleTo 直接访问内部接口,业务模块零改动
AiAgent.Integration/
├── Module/
│   ├── CLI/                    ← CLI 模块集成
│   │   └── CLINodeQueryService.cs
│   └── Workflow/               ← Workflow 模块集成
│       ├── WorkflowDefinitionQueryService.cs
│       ├── WorkflowValidationService.cs
│       └── WorkflowManagementService.cs
├── Agents/                     ← Planner/Creator/Checker Agent
├── Tools/                      ← Agent 使用的工具
└── Documents/
    ├── 创建工作流/              ← 6 步流水线设计文档
    ├── MAF框架/                ← MAF 框架研究笔记
    └── harness设计/            ← Harness 设计文档

代码里长成了什么样

三种模式对比:低代码编排 / Agent 自主决策 / Agent 生成工作流

两种模式的对比

模式 A:低代码编排
  人 → 画布拖拽 → 工作流定义(JSON)→ 工作流引擎 → 执行结果
  特点:确定性、可预测、可调试
  适合:流程明确的业务自动化

模式 B:Agent 自主决策
  人 → 自然语言 → Agent(LLM 决策)→ 工具调用 → 返回结果
  特点:灵活性、适应性、不可预测
  适合:需要理解和判断的开放场景

模式 C:Agent 生成工作流(融合)
  人 → 自然语言 → Agent → 工作流定义(JSON)→ 工作流引擎 → 执行结果
  特点:灵活性 + 确定性
  适合:用户知道要做什么,但不知道怎么画流程图

6 步流水线的产物

每一步的产物都是可检查、可调整的:

Step 1 产物:需求解析结果(结构化 JSON)
  → 用户确认:"对,我就是要做这个"
  
Step 2 产物:控制骨架(线性/分支/循环的选择)
  → 用户调整:"不要用线性,用分支,金额大于1000走审核"
  
Step 3 产物:节点选型列表
  → 用户确认:"这些节点选得对"
  
Step 4 产物:参数配置(每个节点的输入输出映射)
  → 用户调整:"HTTP 节点的 URL 应该是 https://api.example.com"
  
Step 5 产物:Canvas JSON(完整的工作流画布定义)
  → 用户确认:"看起来没问题"
  
Step 6 产物:注册到工作流引擎(可以运行了)

业界怎么做的

LangGraph 的答案是"图即 Agent"——不需要区分工作流和 Agent,因为一切都是图。Agent 的决策是图中的一个节点,工作流的步骤也是图中的一个节点。好处是统一,坏处是"确定性"和"自主性"的边界模糊了。

Coze/Dify 的答案是"工作流 + LLM 节点"——工作流是主体,LLM 只是其中一个节点。Agent 不具备自主决策能力,只能在工作流的框架内"被调用"。好处是简单,坏处是 Agent 的能力被限制了。

微软 MAF 的答案是"Agent 内嵌工作流"——Agent 可以调用工作流引擎作为工具。工作流是 Agent 的"手",不是 Agent 的"笼子"。

我的答案是"双向融合"——Agent 可以生成工作流,工作流可以调用 Agent。不是谁包含谁,是互相调用。

关键认知

这一章的关键认知:

未来不是"工作流 or Agent",是"Agent 生成工作流,工作流编排 Agent"。

两条路线不是对立的,是互补的:

  • 工作流提供确定性——流程可预测、可调试、可审计
  • Agent 提供灵活性——能理解意图、能生成内容、能自主决策

融合的方式有两种:

  1. Agent 生成工作流:用户用自然语言描述需求,Agent 自动生成可执行的工作流
  2. 工作流调用 Agent:工作流中的某个节点是完整的 Agent,具备自主决策能力

两种方式在我的项目里都已经实现了。这就是"两条路线融合"的实际含义。