Day 47 / 共 68 天 · 阶段 8 多智能体

主管-专家模式:分派 + 取证 + 把关

昨天(Day 46)讲清了 Agent 之间"用什么协议对话"。今天讲多智能体里最经典、最耐用的组织结构——主管-专家模式:一个 supervisor(主管)负责分派和汇总、若干 specialist(专家)各自取证干活、再加一个 critic(审查员)专门挑错防幻觉。这套结构是"可信 Agent 系统"的骨架。明天(Day 48)我们就用它跑通一个真实的三 Agent 协作。

📍 你在阶段 8(多智能体 D45-48)的位置
D45 协作模式 D46 协作协议 D47 主管-专家 D48 多智能体实战
💡 用一个类比兜住今天(今天全程沿用「一家报社的编辑部」的世界观) 主管-专家模式 = 一家报社出一篇报道supervisor 主管 = 主编:拿到选题,拆成"查这个、访那个",派给记者,最后把稿子合起来定版;specialist 专家 = 各线记者:财经记者、体育记者,各查各的、带着证据(采访录音、数据来源)回来;critic 审查 = 审校/事实核查员:逐条核对"这句话有没有出处、有没有编造",不合格打回重写。有了这套分工,报道既专业又不敢乱写——这正是我们想让 Agent 达到的"可信"。
L01

为什么要"主管-专家"分层

🤔 痛点Day 45 说过"别把活全塞给一个 Agent"。可拆成一堆平级 Agent 后,新问题来了:谁来拿总?谁决定先做什么、结果好不好、要不要重来?一群人没头儿,照样乱。
💡 本质加一个主管层来"拿总":它不亲自干细活,只负责拆任务、派活、收结果、判断够不够好。这就是从"一堆散兵"升级成"有组织的团队"。报社没有主编,记者各写各的,出来的报纸没法看。
👶 这和 Day 45 的 agent-as-tool 什么关系?是它的"升级版组织形态"。主管把每个专家当"工具"来调(agent-as-tool 的思想),但它多了规划(先干啥后干啥)和质量把关(结果行不行)。可以说:agent-as-tool 是"怎么叫人",主管-专家是"整个团队怎么排班"。
📝 举个例子:有主编 vs 没主编 写"某公司季度分析":没主管时,几个 Agent 各查一段,拼起来重复又矛盾;有主管时,主编先定"要覆盖营收、风险、展望三块",分别派人,收回来发现"风险"那段没数据支撑,打回让专家补——产出立刻规整可信。
L02

supervisor 主管:分派与汇总

🤔 痛点主管具体干什么?会不会它自己又变成那个"什么都想管、结果啥都管不好"的大杂烩 Agent?
💡 本质supervisor 的职责很克制:只做"调度",不做"细活"。它干三件事——① 拆解:把大任务拆成子任务;② 路由:把每个子任务派给最合适的专家;③ 汇总:收齐结果、判断是否达标、决定收工还是返工。像主编从不自己跑现场,只统筹。
# 主管的核心是一个"调度循环":想 → 派 → 看 → 再决定
def supervisor(task, specialists):
    plan = make_plan(task)         # ① 拆解:把大任务拆成几步
    results = {}
    for step in plan:              # ② 路由:每步交给对应专家
        who = pick_specialist(step, specialists)   # 选最合适的人
        results[step] = specialists[who](step)     # 叫他干活(agent-as-tool)
    # ③ 汇总:把各专家的结果合成最终产出
    return combine(results)
# 注意:supervisor 自己不查资料、不写长文,只负责"排兵布阵 + 收口"
关键设计原则:主管的提示词要短而专注于"调度"——列清"有哪些专家、各擅长啥、什么情况派谁"。别让它同时兼职干专家的活,否则又回到"大杂烩"老问题。
L03

specialist 专家:带着证据干活

🤔 痛点专家 Agent 查完东西直接下结论,可它会不会又"一本正经地编造"(幻觉)?主管怎么知道它说的是真的?
💡 本质好的 specialist 不只给结论,还带回"证据"——数据来自哪、原文是哪句、链接是什么。就像记者交稿要附上采访录音和资料出处。"结论 + 证据 ID"是后面审查能核对、能防幻觉的前提(这点 Day 53 会深讲)。
# 专家不光返回结论,还要带上"证据",方便后面核查
def research_specialist(subtask):
    docs = search(subtask)                 # 去检索资料(Day 21-28 的 RAG)
    answer = llm_summarize(docs, subtask)  # 基于资料总结
    return {
        "conclusion": answer,              # 结论
        "evidence": [d.id for d in docs],  # ← 证据来源 ID(关键!)
    }
# 有了 evidence,审查员(critic)才能逐条核对:"你这句话,出处对得上吗?"
📝 举个例子:带证据 vs 不带证据 专家A:"该公司二季度营收增长 20%。"(没出处,可能是编的)
专家B:"该公司二季度营收增长 20%〔来源:财报第 3 页/doc_07〕。"
B 的答案审查员能核对、能追责,A 的只能靠信。可信系统只接受 B 这种带证据的产出。
L04

critic 审查:专职挑错、防幻觉

🤔 痛点让"写东西的人"自己检查自己,往往看不出毛病(当局者迷)。谁来当那个专门唱反调、把关质量的人?
💡 本质加一个critic(审查员):它唯一的任务就是挑错——逐条核对"结论有没有证据支撑、有没有自相矛盾、有没有编造",不合格就打回重做。这叫"生产者—审查者分离",是防幻觉最有效的结构之一。报社的事实核查员就是干这个的。
生产者—审查者分离(写的人 ≠ 审的人) 专家(写) 出结论+证据 审查(critic) 逐条核对证据 提交草稿 发现编造/缺证据 → 打回重写
图注:写和审是两个独立 Agent,才能真正"当局者清"。这个来回可以循环几轮,直到审查通过。

👶 小白:为啥不让专家自己多检查两遍,非要单开一个 critic?

👨‍🏫 老师:因为"自己审自己"有天然盲区——它既然那么写,就是没觉得有问题,再看一遍还是老样子。换一个"专职找茬、提示词专门写成怀疑一切"的 Agent,视角不同,才逮得住幻觉。而且 critic 可以用更严格的标准、甚至更强的模型。这就是为什么可信系统几乎都有独立的审查层——Day 53「防幻觉 Critic」会把这套双层校验讲到底。

L05

三者协作的完整流程

💡 本质把三个角色串起来,就是一条"派活→取证→把关→(不行就返工)→定版"的闭环。
主管-专家-审查 协作闭环 ① 主管:拆解+派活 ② 专家A 取证 ② 专家B 取证 ③ 审查 critic 不合格→打回 ④ 主管汇总定版
图注:审查不通过就回到专家重做,通过了主管才汇总定版——"返工循环"是质量的保障。
要设两个"上限"防止死循环:① 审查-返工最多几轮(比如 3 轮还不过就上报人工);② 总步数上限。多智能体最怕"你打回我、我改了你又打回"无限拉扯——记得给闸门(Day 54 详讲)。
L06

去看真实项目怎么落地这套结构

🤔 痛点道理懂了,可"主管+专家+critic"在真实工程里到底长什么样、代码怎么组织、证据 ID 怎么核对?光看示意代码不过瘾。
💡 本质有一套现成的、专门围绕"可信/可审计"设计的多 Agent 框架把这套结构做成了实打实的工程——主管分派、专家取证、critic 双层校验核对证据 ID、拦截编造。看它的真实实现,比看十段示意代码都值。
🔗 想看主管-专家/critic 的真实落地?去看《gov-agents 21 天精讲》→(学完回来继续 Day 48)
心态提示:主管-专家-critic 这套结构,会在本课后半程(评测、防幻觉、可观测)反复出现。今天先把三个角色的"职责边界"记牢:主管只调度、专家带证据、critic 只挑错。角色不越位,系统才可信。
L07

今日小结 + 动手 10 分钟

🧠 今天你应该能回答

  • 为什么一堆平级 Agent 需要加一个"主管层"?
  • supervisor 的三件事是什么?它为什么不能自己干细活?
  • specialist 为什么要"带着证据"返回?证据 ID 有什么用?
  • 为什么要单独设一个 critic,而不是让专家自己检查?
  • 整个协作闭环长什么样?为什么必须设"返工上限"?

✋ 动手 10 分钟:用假函数跑通"主管-专家-审查"闭环

不接真模型,用普通函数把三个角色的职责和返工循环跑一遍,体会结构:

# 专家:返回"结论 + 证据"。这里第一次故意不带证据,模拟会被打回
def specialist(subtask, with_evidence):
    if with_evidence:
        return {"conclusion": f"{subtask}:已核实", "evidence": ["doc_07"]}
    return {"conclusion": f"{subtask}:大概是这样", "evidence": []}  # 没证据

# 审查员:唯一职责——没证据就打回
def critic(result):
    return "通过" if result["evidence"] else "打回:缺少证据来源"

# 主管:拆解→派活→送审→不过就返工(带上限,防死循环)
def supervisor(task, max_retry=3):
    with_ev = False
    for i in range(max_retry):
        print(f"第{i+1}轮:派专家做")
        res = specialist(task, with_ev)      # 派活
        verdict = critic(res)                # 送审
        print("  审查结果:", verdict)
        if verdict == "通过":
            return f"定版 → {res['conclusion']}(证据 {res['evidence']})"
        with_ev = True                       # 被打回,要求这次必须带证据
    return "返工超上限,上报人工"

print(supervisor("查该公司二季度营收"))
# 观察:第1轮无证据被打回 → 第2轮带证据通过 → 主管定版。这就是可信闭环
明日预告 · Day 48:阶段 8 收官实战!明天把今天这套结构落地成一个真跑的三 Agent 系统——研究员 + 写手 + 审校,协作产出一篇报告。你会把 Day 45(协作模式)、Day 47(主管-专家)串起来,端到端体会"一队 Agent 交付成果"是什么感觉。
← Day 46 · 协作协议 A2A/ACP/MCP Day 48 · 多智能体实战 →