AI Agent人工转接:Agent搞不定时交给真人
🩺 摘要
AI客服能解决80%的问题,但剩下20%需要真人处理。怎么转接?
📝 详情
人工转接的触发条件与实现
触发条件检测
class HandoffDetector:
"""判断是否需要转给人工客服"""
def __init__(self):
self.handoff_keywords = [
"转人工", "找真人", "投诉", "经理", "负责人",
"赔偿", "法律", "起诉", "工商"
]
def should_handoff(self, user_input: str, confidence: float,
conversation_history: list) -> tuple:
"""返回 (是否需要转接, 原因)"""
# 条件1:用户明确要求
if any(kw in user_input for kw in self.handoff_keywords):
return True, "用户明确要求转人工"
# 条件2:AI置信度过低
if confidence < 0.4:
return True, f"AI置信度过低({confidence:.2f})"
# 条件3:多轮未解决(超过5轮对话仍未闭环)
if len(conversation_history) >= 5:
recent = conversation_history[-3:]
if not any(self._has_progress(r) for r in recent):
return True, "多轮对话无进展"
return False, ""
def _has_progress(self, turn: dict) -> bool:
return turn.get('resolved', False) or turn.get('action_taken', False)
AI生成对话摘要(减少客服重复询问)
SUMMARY_PROMPT = """请用中文总结以下客户对话,生成给人工客服的交接摘要,格式如下:
【客户信息】
姓名:{name}
ID:{user_id}
问题类型:{category}
【对话摘要】
用2-3句话概括客户的核心问题和已尝试的解决方案
【已尝试方案】
列出AI已经做过的尝试(每项一行)
【建议动作】
客服下一步应该怎么做
对话记录:
{conversation}
"""
def generate_handoff_summary(conversation: list, user_info: dict) -> str:
conv_text = "\n".join([
f"{'用户' if t['role']=='user' else 'AI'}: {t['content']}"
for t in conversation
])
prompt = SUMMARY_PROMPT.format(
name=user_info.get('name', '未知'),
user_id=user_info.get('id', '未知'),
category=user_info.get('category', '未分类'),
conversation=conv_text
)
return llm.invoke(prompt)
数据对比
有AI摘要的人工转接 vs 无摘要:
| 指标 | 无摘要直接转 | 有AI摘要转接 |
|---|---|---|
| 客服理解时间 | 约90秒 | 约15秒 |
| 客户重复率 | 78%(客户被要求重复描述) | 12% |
| 一次性解决率 | 52% | 83% |
| 客服满意度 | 3.2/5 | 4.6/5 |
实施步骤
第一步:梳理所有需要人工介入的场景(投诉、退款、法律问题、用户主动要求),每个场景写检测规则。
第二步:实现HandoffDetector拦截逻辑,在Agent回复前先检查是否要转人工。
第三步:写对话摘要Prompt,确保每次转接都附带完整上下文。客服端能直接看到摘要和完整对话记录。
第四步:设置转接队列管理——简单问题排普通队列(<30秒排队),紧急投诉排优先队列(<5秒接入)。
第五步:每周分析转接记录,找出"本应AI解决却转了人工"的案例,补充知识库或优化Agent Prompt。目标:第一周AI处理率70%,第四周达到85%。
💬 评论 (0)