模式矩阵 /模式白皮书/C4

C4 · Handoff Chain · 交接链

字段
双轴坐标 协作 Collaboration × 链式 Chain(传)
成本档 ②(每次交接加一次 LLM 调用)
课程对应 07-05
目录归属 全集 33 模式之一 · 协作模块 5 模式之一
一句话 把一个长流程拆成 N 个职责清晰的 agent,前一棒处理完后通过结构化 HandoffPacket(不是裸文本)把关键状态传给下一棒,每一棒只擅长一件事。

它解决什么问题

多 agent 系统翻车,很多时候不是因为单个 agent 不够强,是因为交接掉了棒。一线 agent 拿到客户的全部信息,转给二线时只传"客户上一句话的原文",二线接手就像一个刚走进来的同事——对客户是谁、为什么烦、已经说过什么完全无知,于是又问一遍。

交接链解决的是任务在多个 agent 之间顺序传递时,每次交接信息无损、责任明确、失败可追溯。它的设计重心藏在一个命名判断里:handoff 译"交接"不是"接力"——接力是动作(跑),交接是状态(交班)。Agent 之间真正传递的不是跑的动作,而是上一棒完成的状态,这个状态必须显式 schema 化才不会丢。人类客服中心 30 年前就解决过这个问题,叫 warm handoff:交接前几秒前一个客服跟接手的客服把事情说清楚,再把电话切过去。

为什么坐标是「协作 × 链式」

核心机制

一次交接由三件事保证不掉棒:

  1. 职责切分:长流程拆成 N 个职责清晰的 agent,每一棒只擅长一件事、不需要懂整个流程。
  2. 结构化打包:前一棒处理完,把关键状态打包成 HandoffPacket 传给下一棒——不是 dump 对话历史,而是 schema 化的结构。这是它跟单 agent 多 prompt 串联最大的区别:后者 context 自然延续,交接链跨 agent 跨 session,state 必须显式 schema 化。
  3. 受控移交:交接前有权限闸判断这次交接合不合理,有链长上限防止无限传递,每次交接落 audit log。

HandoffPacket 建议至少五层 schema:

内容
Goal 客户根本诉求 + 当前未解决的具体问题
Artifacts 已完成的产出(查过的 KB、跑过的脚本、抄过的 ticket)
Decisions 决策含 what / why / evidence——最容易丢的一层
Rejected Paths 已尝试失败的方向,下一棒不要重复
Next Required 显式的下一步动作,不允许"看着办"

适合的生产场景

四个条件要同时满足:专业分工明确、顺序可定、state 可结构化、SLA 升级机制是业务核心。

容易出错的地方

关键指标

最小骨架

HandoffChain.execute(request, initial_agent, max_hops=4):
    current, prev_packet = initial_agent, None
    for sequence in 1..max_hops:
        output = run_agent(current, prev_packet)   # 输入是结构化 packet 不是 raw history
        packet = build_packet(prev_packet, output) # 累积式继承 artifacts/decisions/rejected
        audit(packet)
        if output.complete: return result
        next = output.handoff_to
        if next not in current.can_handoff_to:      # 权限闸:防越级 + 防 oscillation
            return escalate_to_human()
        prev_packet, current = packet, next
    return escalate_to_human()                      # 超 max_hops 升人工

HandoffPacket: 五层 schema(Goal / Artifacts / Decisions / Rejected Paths / Next Required)

四个工程要点:每棒的 system prompt 和 tool 权限严格分级(一线不能给退款权限);can_handoff_to 显式列允许的下一棒;max_hops 设 3-4 超过强制升人工;audit log 满足跨棒数据流转的合规留档。

企业落地一例

某中型 SaaS 公司用 LangGraph 部署了一套 L1/L2/L3/Director 四级客户支持 Agent,6 月上线 10 月被砍,导火索是一张被转了 1.8 万次的截图:客户说"webhook 收不到事件,2 万订单卡着",一线转给二线,二线开口又问"请问遇到什么问题""请问您的账户邮箱",客户回"我刚才说了""上面已经有了"。根因分析的结论让所有人尴尬——四级架构每个交接环节都是重新开一个 session,前一棒只传客户上一句话的原文。这不是技术 bug,是设计选择,当初觉得"前面处理过的下一个不需要看了,省 token"。修法是给每次交接打包五层 HandoffPacket:客户诉求、已查过的 KB 和跑过的脚本、做过的决策含 why、已排除的方向、下一步动作,配合模型分级(一线 Haiku 跑量、工程层 Opus 处理复杂)、工具权限渐进(一线只读、Director 才能批退款)、链长上限 4 棒超过升人工。另一个值得引用的落地是执行型 Agent 的控制权回交:当一个 ReAct agent 判断当前决策类型是 plan(或 Skill 契约约定为 PlanExecute)时,它不自己往下执行,而是通过 handoff 把控制权交回 orchestrator,由 orchestrator 决定后续编排——这把交接链用在了 agent 内部的控制流移交上,不只是面向用户的分级支持。

与其他模式的关系

一句话记住它

交接链的工程本质不是数据传递,是把企业里已经存在 30 年的人类组织流程 schema 化成 agent 能执行的工程结构——赢面在五层 schema 都被工程化的场景,输面在只 dump 对话历史还假装那叫交接的场景。


本页属于 ADPS 33 模式白皮书。返回 模式矩阵与白皮书目录, 或查看配套 可运行代码目录