跳转到内容

Flowise 的多 Agent 协作:Supervisor/Worker 与 Sequential Agents

学习目标

  • 理解 Flowise Supervisor/Worker 模式的 LangGraph 实现机制
  • 掌握 Sequential Agents 各节点类型的功能与组合方式
  • 学会根据任务特性选择合适的多 Agent 模式

前置知识

本章涉及多 Agent 路由与隔离的通用原理,建议先阅读:

下文假设你已理解 Supervisor 模式、Handoff 机制等通用概念,直接聚焦 Flowise 的具体实现。


项目实践

Supervisor/Worker 模式

Flowise 的 Supervisor/Worker 基于 LangGraph StateGraph 编译,核心流程:

Supervisor 节点核心配置

  • supervisorName:Supervisor 的名称(自动转为小写下划线)
  • supervisorPrompt:必须包含 {team_members} 占位符
  • model:支持 tool calling 的 LLM(ChatOpenAI、ChatAnthropic、ChatMistralAI 等)
  • recursionLimit:最大递归步数,默认 100
  • summarization:是否将最终输出摘要为对话总结
  • agentMemory:可选的 LangGraph CheckpointSaver,用于状态持久化

路由决策的结构化输出

Supervisor 使用 RouteTool 进行结构化输出,schema 定义为:

z.object({
reasoning: z.string(), // 选择该 Worker 的原因
next: z.enum(['FINISH', ...members]), // 下一个执行的 Worker
instructions: z.string() // 给下一个 Worker 的具体指令
})

Worker 节点

  • 每个 Worker 是一个独立的 Agent(可配置自己的 LLM、工具、提示词)
  • Worker 执行后返回结果给 Supervisor
  • Supervisor 根据结果决定下一个 Worker 或返回 FINISH

Sequential Agents 模式

Sequential Agents 是线性状态机,节点按预设顺序执行。Flowise 提供 12 种 Sequential Agent 节点:

节点功能关键配置
Start流程入口agentMemorywebhookDefaultInput
AgentLLM Agent + 工具modeltoolssystemPrompt
Condition文本匹配条件分支条件规则(输入值 → 目标节点)
ConditionAgentLLM 语义判断分支model、分类条件
ToolNode纯工具执行tools
Loop循环控制maxIterations
Iteration迭代执行迭代逻辑
LLMNode纯 LLM 调用modelprompt
CustomFunction自定义 JS 函数javascriptFunction
ExecuteFlow嵌套执行另一个 FlowchatflowId
End流程终止
State状态读写stateKeyoperation

状态传递机制

节点间通过 $state 变量传递数据:

{{ output.result }} → 引用上游节点的 output
{{ state.myKey }} → 引用状态中的 myKey
$state.myKey → 在 CustomFunction 中访问状态

Webhook 引用解析

Start 节点支持从 Webhook 请求中提取数据:

{{ $webhook.body.name }} → 提取请求体中的 name 字段
{{ $webhook.headers.auth }} → 提取请求头中的 auth 字段

安全设计:使用 lodash.get 解析路径,但阻断了 __proto__constructorprototype 路径,防止原型链污染。


问题与规避

Supervisor 无限路由循环

问题:Supervisor 可能陷入 A → B → A → B 的无限循环。

对策

  • 设置合理的 recursionLimit(默认 100)
  • 在 Worker 提示词中明确要求 Worker 返回完整结果
  • 启用 summarization 选项,在达到限制时输出摘要

Sequential Agent 状态丢失

问题:在条件分支中,不同分支的节点可能访问到不一致的状态。

对策

  • 使用 State 节点显式管理关键状态
  • 避免在不同分支中修改同一个状态键
  • 使用 CustomFunction 节点进行状态转换时,确保返回值格式一致

Worker 工具冲突

问题:多个 Worker 配置了相同的工具名,Supervisor 路由时可能混淆。

对策

  • 每个 Worker 使用唯一的名称
  • Supervisor 的 {team_members} 占位符应包含所有 Worker 的唯一标识

设计取舍

Supervisor/Worker vs Sequential Agents

维度Supervisor/WorkerSequential Agents
决策方式LLM 动态路由预定义流程
适用场景任务类型不确定步骤明确
调试难度高(路径不可预测)低(路径固定)
LLM 开销每次路由额外一次调用无路由开销
灵活性高(自动适应不同任务)中(需要手动调整流程)

Flowise 的设计哲学:同时提供两种模式,让用户根据场景选择。对于需要智能分配任务的场景(如”用户提问 → 判断意图 → 选择专业 Agent”),使用 Supervisor/Worker。对于步骤明确的流水线(如”搜索 → 总结 → 翻译 → 输出”),使用 Sequential Agents。

LangGraph vs 自研执行引擎

Flowise 在 Multi Agents 场景下选择 LangGraph StateGraph,而在 Chatflow 场景下使用自研 BFS 引擎:

维度LangGraph StateGraph自研 BFS
状态管理内置 CheckpointSaver手动管理
条件边原生支持需手动实现
可视化不直接支持React Flow 原生支持
依赖增加 LangChain 依赖零额外依赖

Flowise 的选择是务实的:LangGraph 在多 Agent 状态管理方面已足够成熟,无需重新发明;而简单 Chatflow 不需要复杂状态管理,自研 BFS 更轻量。


参考来源