ByteNoteByteNote
实战四:搭一个多 Agent 客服中心
字

字节笔记本

2026年10月24日 · 约 12 分钟读完

实战四:搭一个多 Agent 客服中心

API中转
¥120

Subagent 并行

本文是《从 0 写 Agent》系列第 48 章。这个系列基于开源项目 agents-go(OpenAI Agents SDK 的 Go 移植版),用 Go 从零实现一个生产级 Agent 运行时;本章讲「实战四:多 Agent 客服中心」。

第 45 章的客服 Agent 是单 Agent 干所有事。真实客服中心要分工,分诊、退款、物流、技术,多 Agent 协作。

这个案例是 Part III 多 Agent 理论的实战应用,用 Handoff(接力)+ Agent-as-Tool(委托)搭建一个客服中心。


架构设计

text
用户 → 分诊 Agent(判断问题类型,交接)
         ├─ Handoff → 退款 Agent(处理退款)
         ├─ Handoff → 物流 Agent(查物流)
         ├─ Handoff → 技术 Agent(技术支持)
         │              └─ Agent-as-Tool → 知识库 Agent(查文档)
         └─ Handoff → 人工坐席(兜底)

分诊用 Handoff(接力),技术 Agent 用 Agent-as-Tool 调知识库(委托)。 两种多 Agent 模式组合使用。


产出分享

分诊 Agent

go
triageAgent := &agents.Agent{
    Name: "分诊",
    Instructions: agents.StaticInstructions(`你是客服分诊。
判断用户问题类型,交接给对应专家:
- 退款相关 → transfer_to_refund
- 物流查询 → transfer_to_shipping
- 技术问题 → transfer_to_tech
- 其他/处理不了 → transfer_to_human
不要自己解决问题,只做分诊。`),
    Model: "openai/gpt-4o-mini",  // 分诊用便宜模型
    Handoffs: []agents.Handoff{
        agents.HandoffTo(refundAgent),
        agents.HandoffTo(shippingAgent),
        agents.HandoffTo(techAgent),
        agents.HandoffTo(humanAgent),
    },
}

分诊用 mini 模型(便宜),它只做分类,不需要强推理。专家 Agent 用强模型(gpt-4o),它们要解决具体问题。这是模型路由(第 21 章)在多 Agent 的应用,不同 Agent 用不同模型,按能力需求分配成本。


专家 Agent 们

go
// 退款 Agent
refundAgent := &agents.Agent{
    Name: "退款专员",
    Instructions: agents.StaticInstructions("你是退款专员。查订单、判断退款条件、处理退款。"),
    Tools: []agents.Tool{getOrderTool, refundTool},
    // refundTool.NeedsApproval = true(第 45 章)
}

// 物流 Agent
shippingAgent := &agents.Agent{
    Name: "物流专员",
    Instructions: agents.StaticInstructions("你是物流专员。查物流状态、联系快递。"),
    Tools: []agents.Tool{getOrderTool, trackShipmentTool},
}

// 技术 Agent,它还能调知识库子 Agent
knowledgeAgent := &agents.Agent{
    Name: "知识库",
    Instructions: agents.StaticInstructions("你是知识库查询。根据问题搜索产品文档,返回相关内容。"),
    MCPServers: []agents.MCPServer{knowledgeMcpServer},
}

techAgent := &agents.Agent{
    Name: "技术支持",
    Instructions: agents.StaticInstructions("你是技术支持。先查知识库,再解答。"),
    Tools: []agents.Tool{
        knowledgeAgent.AsTool(agents.AgentToolConfig{  // Agent-as-Tool!
            Name: "search_docs",
            Description: "搜索产品知识库",
            MaxTurns: 3,  // 知识库查询最多 3 轮
        }),
    },
}

技术 Agent 用 Agent-as-Tool 调知识库,第 18 章。知识库 Agent 是"黑盒工具",技术 Agent 不关心它怎么搜,只要结果。


Handoff 历史处理

分诊交接给专家时,专家要看到之前的对话(用户说了什么)。用第 16 章的 InputFilter 精简历史:

go
handoff := agents.HandoffTo(refundAgent)
handoff.InputFilter = func(data agents.HandoffInputData) agents.HandoffInputData {
    // 只保留消息,去掉分诊的内部推理
    var filtered []agents.TResponseInputItem
    for _, item := range data.InputHistory {
        if isUserOrAssistantMessage(item) {
            filtered = append(filtered, item)
        }
    }
    return agents.HandoffInputData{InputHistory: filtered}
}

专家 Agent 看到的是"干净的对话历史",不含分诊的中间步骤。 减少干扰,聚焦问题本身。


Session 跨 Agent 持续

go
// 整个客服过程用一个 Session(跨 handoff 持续)
sess := memory.NewFileSession("sessions", sessionID)

agents.Run(ctx, triageAgent, userMessage, agents.RunOptions{
    Session: sess,
    // ...
})

Session 跟着用户走,不跟着 Agent 走。 分诊→退款→(可能的)人工,全程一个 Session,历史连续。这呼应第 16 章的"双 item 列表",sessionItems 保留完整历史(含所有 Agent 的产出),不管 handoff 怎么过滤模型视角。


完整流转示例

text
用户:"我买的手机有质量问题,要退款,但物流还没到"

→ 分诊 Agent:分析问题(退款 + 物流混合)
→ Handoff → 退款 Agent(退款是主诉求)

→ 退款 Agent:
   查订单 → 订单状态"运输中" → 退款条件:需先拒收
   Agent:"您的订单还在运输中。需要先拒收包裹,才能发起退款。要我帮您查物流吗?"

用户:"那先查物流"
→ 退款 Agent 处理不了物流 → Handoff → 物流 Agent

→ 物流 Agent:查物流 → "包裹明天到达"
→ Agent:"包裹预计明天到达。您可以拒收后联系我退款。"

注意,退款→物流的交接,是专家之间的二次 Handoff。 Handoff 不限于分诊→专家,专家之间也能交接(如果问题超出自己领域)。


多 Agent 的监控

多 Agent 系统调试更难,要追踪"控制权在谁手里"。用 Tracing(第 25 章)+ Hooks(第 19 章):

go
// Tracing 会记录每次 handoff(SpanTypeHandoff)
// trace 视图能看到完整流转:
trace: 客服会话
├── span: agent(分诊)
│   └── span: handoff(→退款)  ← 第一次交接
├── span: agent(退款)
│   ├── span: function(get_order)
│   └── span: handoff(→物流)  ← 第二次交接
└── span: agent(物流)
    └── span: function(track_shipment)

一目了然,会话经过了分诊→退款→物流三个 Agent。 没有这个 trace,多 Agent 的调试是噩梦。


小结

多 Agent 客服中心的设计要点:

  1. 分诊用便宜模型,专家用强模型,按能力分配成本
  2. Handoff(接力)+ Agent-as-Tool(委托)组合,分诊转专家用 Handoff,技术调知识库用 As-Tool
  3. InputFilter 精简历史,专家看干净对话
  4. Session 跨 Agent 持续,一个用户一个 Session
  5. Tracing 追踪流转,多 Agent 调试必备

这个案例体现了 Part III 的核心,什么时候用 Handoff(接力)、什么时候用 Agent-as-Tool(委托)、什么时候组合。


下一篇

第 49 章,实战五:内部 AI 平台。把客服/分析/代码这些 Agent 做成企业内部平台,多用户、配置驱动、可观测。这是 agents-server 在真实企业的延伸。


本文是《从 0 写 Agent》系列第 48 章,案例代码基于开源项目 agents-go(OpenAI Agents SDK 的 Go 移植版)。全系列目录见总览。

相关文章

分享: