🤝 Agent Handoff(智能体交接)

当AI说"这事儿我搞不定,叫人来吧"的时候——这就是交接的艺术。

凌晨3点17分,客服Agent已经尽力了。用户的问题是:"你们的产品和我奶奶的老式收音机兼容吗?"Agent搜索了知识库、查了规格表、甚至尝试了模糊匹配,但答案就是没有。

这时候,Agent做了一个聪明的决定:"我帮您转接到人工客服,他们更懂这个。"

但交接不是简单地说"再见"。好的交接就像医院换班——前一班医生要把病人的所有情况交代清楚,下一班医生才能无缝接手。这就是Agent Handoff的核心。

什么是Agent Handoff?

Agent Handoff(智能体交接)是指当Agent无法或不宜继续处理任务时,将任务连同上下文信息优雅地转移给人类或其他Agent的过程。它涉及状态保存、上下文传递、责任转移三个核心环节。

三种交接场景

1. Agent → Human(人机交接)

最常见场景:AI遇到无法处理的复杂问题、情感敏感话题、或需要人工决策的情况。

// OpenClaw 人机交接配置 handoff: triggers: - type: sentiment_low threshold: "negative" - type: loop_detected max_iterations: 3 - type: keyword patterns: ["人工客服", "投诉", "退款"] - type: confidence threshold: 0.6 target: human_queue context_transfer: full

2. Agent → Agent(智能体间交接)

专业分工:通用Agent识别任务类型后,转交给专业Agent处理。

// 多Agent协作中的交接 agents: name: dispatcher role: 路由分发 handoff_rules: - condition: "${task.type == 'code'}" target: coding_agent - condition: "${task.type == 'search'}" target: search_agent - condition: "${task.type == 'math'}" target: math_agent

3. Human → Agent(人工转智能体)

反向交接:人工处理完高优先级问题后,将后续交回Agent处理标准化流程。

交接时需要传递什么?

📋 必须传递

  • 对话历史(完整或摘要)
  • 用户意图识别结果
  • 当前任务状态
  • 已尝试的解决方案

🎁 建议传递

  • 用户情绪状态
  • 等待时间统计
  • 问题优先级
  • 个性化信息(用户偏好等)

OpenClaw Handoff 实战

// OpenClaw 交接消息格式 { "type": "handoff", "from": { "agent_id": "customer_service_001", "reason": "sentiment_below_threshold", "confidence": 0.45 }, "context": { "conversation_summary": "用户询问退款政策,情绪逐渐消极...", "attempts": ["FAQ查询", "工单搜索"], "user_sentiment": "frustrated", "wait_time_seconds": 127 }, "target": "human_support_tier2", "priority": "high" }

交接触发的判断逻辑

好的Handoff不是"放弃",而是"知止"。以下情况应该考虑交接:

  1. 置信度阈值 - 当Agent对回答的置信度低于设定值(如0.6)
  2. 循环检测 - 同一问题尝试多次无进展
  3. 情感分析 - 用户情绪变为负面或愤怒
  4. 关键词触发 - 用户明确要求人工服务
  5. 业务规则 - 特定场景(如投诉、退款、法律问题)强制转人工
  6. 超时机制 - 任务处理时间超过阈值

常见陷阱

交接时的坑:
  • 🚫 上下文丢失 - 用户重复说一遍问题,体验极差
  • 🚫 无限交接 - Agent A转B,B转C,C又转回A
  • 🚫 无声消失 - Agent直接"消失",用户一脸懵逼
  • 🚫 过度交接 - 遇到一点点困难就甩锅给人工

避免"交接地狱"的模式

// 交接计数器,防止无限循环 handoff_policy: max_handoffs: 3 on_max_reached: "escalate_to_human" prevent_loop: true announce: "正在为您转接专业客服,请稍候..."

最佳实践

  • 透明告知 - 明确告诉用户即将交接、为什么交接、等待多久
  • 上下文摘要 - 为接收方生成简洁的摘要,不是丢一堆日志
  • 优先级队列 - 情绪激动的用户应该优先处理
  • 交接回退 - 如果人工服务不可用,要有Plan B
  • 数据埋点 - 记录交接原因、耗时、结果,用于优化

实际案例:客服场景

// 完整的客服交接流程 workflow: name: customer_service_flow steps: - agent: intake_bot on_handoff: check: - condition: "${user.sentiment == 'angry'}" target: human_urgent message: "检测到您可能有些着急,马上为您接入专属客服" - condition: "${task.category == 'refund'}" target: human_refund_team message: "退款问题将由我们的退款专员处理" - condition: "${confidence < 0.5}" target: human_general message: "这个问题比较复杂,我帮您转接人工客服" context_package: - conversation_summary - user_info - attempts_made - sentiment_score