1. Supervisor(管理者)模式下主 Agent 如何做子 Agent 的任务分解与结果聚合
请阐述在多智能体 Supervisor(管理者)编排模式下,主 Agent 是如何对任务进行分解、将子任务委派给子 Agent,并对子 Agent 返回的结果进行校验与聚合的?
- Supervisor 的角色定位与循环控制(LLM 驱动循环 vs 确定性循环)
- 任务分解的方法(任务树/DAG、上下文裁剪)与子任务描述质量
- 结果聚合的策略(投票、加权、仲裁、置信度校验)与失败处理
Supervisor 模式由一个主 Agent 作为总控,负责把用户目标拆解为可执行子任务,选择并委派给合适的子 Agent,再收集、校验并聚合结果。任务分解上,Supervisor 通常维护一个任务队列或 DAG,把大目标递归拆成原子子任务,每个子任务附带明确的输入、目标与验收标准,避免子 Agent 目标漂移。委派时根据子 Agent 的能力描述(capability manifest)做路由,并尽量数据亲和(就近传数据)。聚合时不能简单拼接,而要对子 Agent 输出做结构化校验(schema、格式)、语义一致性检查,必要时用置信度、投票或仲裁者裁决冲突;对失败或超时的子任务启动重试、降级或上报。工程上常用 LangGraph 构建 Supervisor 循环:supervisor 节点决定 next 指针,路由到各 worker,worker 返回后回到 supervisor 直到满足终止条件。
Supervisor 模式的核心价值是把"编排决策"集中到一处,便于权限控制、可观测与审计;代价是主 Agent 成为单点与瓶颈。因此工程上要为主 Agent 设置步数上限、超时与预算,并让子 Agent 结果尽量结构化以便确定性校验,降低对 LLM 判断的依赖。
# LangGraph 风格:Supervisor 循环路由
from typing import TypedDict
from langgraph.graph import StateGraph, END
class State(TypedDict):
messages: list
next: str
def supervisor(state):
# LLM 决定下一个执行者;全部完成则返回 END
return {"next": decide_next(state["messages"])}
def worker_a(state):
return {"messages": run_agent("A", state)}
def worker_b(state):
return {"messages": run_agent("B", state)}
g = StateGraph(State)
g.add_node("supervisor", supervisor)
g.add_node("worker_a", worker_a)
g.add_node("worker_b", worker_b)
g.add_conditional_edges("supervisor", lambda s: s["next"],
{"worker_a": "worker_a", "worker_b": "worker_b"})
g.add_edge("worker_a", "supervisor")
g.add_edge("worker_b", "supervisor")