多角色协同场景设计实战
多角色 AI 产品最容易出的问题不是技术问题,是"这件事该谁做"没说清楚。用户、AI、人工坐席、后台系统各自的边界模糊,上线后就会出现责任真空和体验断层。
多角色协同流程结构
graph TD
U[用户] -->|发起请求| AI[AI 助手]
AI -->|处理常规请求| SYS[后台系统]
AI -->|置信度低 / 高风险| HIT{需要人工介入?}
HIT -- 是 --> HA[人工坐席]
HIT -- 否 --> SYS
HA -->|处理并记录| SYS
HA -->|反馈处理结果| U
SYS -->|执行操作| DB[(数据库/外部服务)]
DB -->|返回结果| AI
AI -->|生成最终回复| U
HA -->|判断需升级| MGR[主管/专家]
MGR -->|审批/覆盖决策| HA
style U fill:#e3f2fd,stroke:#1565c0
style AI fill:#e8f5e9,stroke:#2e7d32
style HA fill:#fff3e0,stroke:#e65100
style MGR fill:#fce4ec,stroke:#880e4f
四类角色的职责边界
| 角色 | 职责范围 | 不该做的事 | 交接触发条件 |
|---|---|---|---|
| 用户 | 提出需求、确认结果、提供信息 | 不需要理解 AI 工作原理 | 主动退出或超时 |
| AI 助手 | 理解意图、查询信息、生成回复 | 不做不可逆操作、不代替人判断高风险 | 置信度低、超出权限、用户要求人工 |
| 人工坐席 | 处理复杂/敏感案例、审核 AI 结果 | 不重复做 AI 已完成的步骤 | 完成处理、需要授权升级 |
| 后台系统 | 执行操作、存储记录、触发通知 | 不做业务判断 | 操作完成或失败 |
交接设计的三个关键原则
1. 无缝上下文传递 人工接管时,坐席必须看到完整的对话历史、AI 的判断依据和已完成的步骤。用户不应该重复说一遍。
2. 明确的交接触发条件 不能让 AI 自己决定"我不行了转给人"——必须有明确的规则:置信度阈值、关键词触发、用户主动请求、操作类型判断。
3. 冲突解决机制 当 AI 建议和人工坐席判断不一致时,以人工为准,但 AI 的建议应该可见,方便坐席参考或纠错。
Python 示例:多角色流程设计器
"""
多角色协同场景设计工具
PM 视角:定义角色职责、交接规则并生成协同流程规范
"""
from dataclasses import dataclass, field
from typing import List, Dict, Optional
from enum import Enum
class RoleType(Enum):
USER = "用户"
AI = "AI 助手"
AGENT = "人工坐席"
SYSTEM = "后台系统"
SUPERVISOR = "主管/专家"
class HandoffTrigger(Enum):
LOW_CONFIDENCE = "AI 置信度低于阈值"
HIGH_RISK_ACTION = "高风险不可逆操作"
USER_REQUEST = "用户主动要求人工"
KEYWORD_MATCH = "触发敏感关键词"
REPEATED_FAILURE = "AI 连续失败"
ESCALATION_NEEDED = "超出坐席权限"
@dataclass
class RoleDefinition:
"""角色定义"""
role_type: RoleType
responsibilities: List[str]
restrictions: List[str]
tools_available: List[str]
max_wait_time_seconds: Optional[int] = None # 人工角色的响应 SLA
@dataclass
class HandoffRule:
"""交接规则"""
from_role: RoleType
to_role: RoleType
trigger: HandoffTrigger
condition_detail: str
context_to_pass: List[str] # 交接时必须传递的上下文字段
user_message: str # 交接时向用户展示的消息
@dataclass
class CollaborationScenario:
"""协同场景定义"""
scenario_name: str
description: str
roles: Dict[RoleType, RoleDefinition]
handoff_rules: List[HandoffRule]
conflict_resolution: str # 角色冲突解决原则
@dataclass
class ScenarioValidationResult:
"""场景验证结果"""
scenario_name: str
is_valid: bool
missing_handoff_rules: List[str]
role_issues: List[str]
suggestions: List[str]
def validate_scenario(scenario: CollaborationScenario) -> ScenarioValidationResult:
"""验证协同场景设计的完整性"""
result = ScenarioValidationResult(
scenario_name=scenario.scenario_name,
is_valid=True,
missing_handoff_rules=[],
role_issues=[],
suggestions=[],
)
# 检查是否有 AI -> 人工坐席 的交接规则
ai_to_agent_rules = [
r for r in scenario.handoff_rules
if r.from_role == RoleType.AI and r.to_role == RoleType.AGENT
]
if not ai_to_agent_rules:
result.missing_handoff_rules.append("缺少 AI → 人工坐席 的交接规则")
result.is_valid = False
# 检查所有高风险触发器是否都有对应规则
risk_triggers = {HandoffTrigger.HIGH_RISK_ACTION, HandoffTrigger.REPEATED_FAILURE}
covered_triggers = {r.trigger for r in scenario.handoff_rules}
for trigger in risk_triggers:
if trigger not in covered_triggers:
result.missing_handoff_rules.append(f"缺少触发器处理规则:{trigger.value}")
result.is_valid = False
# 检查交接规则的上下文传递是否完整
required_context = {"对话历史", "AI判断依据", "当前步骤进度"}
for rule in scenario.handoff_rules:
passed_context = set(rule.context_to_pass)
missing_ctx = required_context - passed_context
if missing_ctx:
result.suggestions.append(
f"{rule.from_role.value} → {rule.to_role.value} 交接时,"
f"建议补充传递:{', '.join(missing_ctx)}"
)
# 检查人工角色是否定义了 SLA
for role_type, role_def in scenario.roles.items():
if role_type in (RoleType.AGENT, RoleType.SUPERVISOR):
if role_def.max_wait_time_seconds is None:
result.role_issues.append(
f"{role_type.value} 未定义响应 SLA,建议明确超时处理机制"
)
# 检查是否定义了冲突解决机制
if not scenario.conflict_resolution:
result.role_issues.append("未定义角色冲突解决原则")
result.is_valid = False
return result
def generate_handoff_spec(rule: HandoffRule) -> str:
"""生成单条交接规范文档"""
lines = [
f" 交接路径:{rule.from_role.value} → {rule.to_role.value}",
f" 触发条件:{rule.trigger.value} — {rule.condition_detail}",
f" 传递上下文:{', '.join(rule.context_to_pass)}",
f" 用户提示:\"{rule.user_message}\"",
]
return "\n".join(lines)
def print_scenario_report(scenario: CollaborationScenario,
validation: ScenarioValidationResult):
print(f"\n{'='*55}")
print(f" 场景:{scenario.scenario_name}")
print(f" {scenario.description}")
print(f"{'='*55}")
print(f"\n 参与角色({len(scenario.roles)} 个):")
for role_type, role_def in scenario.roles.items():
print(f"\n [{role_type.value}]")
print(f" 职责:")
for r in role_def.responsibilities:
print(f" • {r}")
print(f" 限制:")
for r in role_def.restrictions:
print(f" ✗ {r}")
if role_def.max_wait_time_seconds:
print(f" SLA:{role_def.max_wait_time_seconds} 秒内响应")
print(f"\n 交接规则({len(scenario.handoff_rules)} 条):")
for i, rule in enumerate(scenario.handoff_rules, 1):
print(f"\n 规则 {i}:")
print(generate_handoff_spec(rule))
print(f"\n 冲突解决原则:{scenario.conflict_resolution}")
print(f"\n 验证结果:{'✓ 通过' if validation.is_valid else '✗ 未通过'}")
if validation.missing_handoff_rules:
print(" 缺失规则:")
for m in validation.missing_handoff_rules:
print(f" ✗ {m}")
if validation.role_issues:
print(" 角色设计问题:")
for i in validation.role_issues:
print(f" ⚠ {i}")
if validation.suggestions:
print(" 改进建议:")
for s in validation.suggestions:
print(f" → {s}")
# ── 演示:客服多角色协同场景 ───────────────────────────
if __name__ == "__main__":
customer_service_scenario = CollaborationScenario(
scenario_name="智能客服多角色协同",
description="用户通过 AI 处理售后问题,复杂/高风险情况转人工坐席",
conflict_resolution="AI 建议与人工判断冲突时,以人工为准;人工判断需在工单中记录理由",
roles={
RoleType.AI: RoleDefinition(
role_type=RoleType.AI,
responsibilities=["理解用户意图", "查询订单信息", "处理标准退款(金额<500元)", "生成回复"],
restrictions=["不处理金额>500元退款", "不直接修改用户账户信息", "不代替人工做定性判断"],
tools_available=["订单查询 API", "标准退款接口", "FAQ 知识库"],
),
RoleType.AGENT: RoleDefinition(
role_type=RoleType.AGENT,
responsibilities=["处理复杂投诉", "审批大额退款", "处理 AI 无法解决的情况"],
restrictions=["不重复 AI 已完成的信息收集步骤", "不在无授权情况下突破规则"],
tools_available=["全量订单系统", "客户画像", "退款审批系统"],
max_wait_time_seconds=120,
),
RoleType.SUPERVISOR: RoleDefinition(
role_type=RoleType.SUPERVISOR,
responsibilities=["审批特殊退款(>2000元)", "处理升级投诉", "规则例外授权"],
restrictions=["不直接处理一线用户请求"],
tools_available=["所有系统权限"],
max_wait_time_seconds=3600,
),
},
handoff_rules=[
HandoffRule(
from_role=RoleType.AI, to_role=RoleType.AGENT,
trigger=HandoffTrigger.LOW_CONFIDENCE,
condition_detail="意图置信度 < 0.70 且两轮澄清后仍不明确",
context_to_pass=["对话历史", "AI判断依据", "当前步骤进度", "用户情绪标签"],
user_message="稍等,我为您转接专属客服,请不要重复描述问题,客服已看到您的情况",
),
HandoffRule(
from_role=RoleType.AI, to_role=RoleType.AGENT,
trigger=HandoffTrigger.HIGH_RISK_ACTION,
condition_detail="退款金额 > 500 元或涉及账户安全操作",
context_to_pass=["对话历史", "AI判断依据", "当前步骤进度", "订单详情"],
user_message="您的请求需要客服专员处理,预计等待时间不超过 2 分钟",
),
HandoffRule(
from_role=RoleType.AI, to_role=RoleType.AGENT,
trigger=HandoffTrigger.USER_REQUEST,
condition_detail="用户明确说出"转人工""找客服""要投诉"等",
context_to_pass=["对话历史", "AI判断依据", "当前步骤进度"],
user_message="好的,正在为您转接人工客服",
),
HandoffRule(
from_role=RoleType.AGENT, to_role=RoleType.SUPERVISOR,
trigger=HandoffTrigger.ESCALATION_NEEDED,
condition_detail="退款金额 > 2000 元或客户提出法律威胁",
context_to_pass=["对话历史", "AI判断依据", "当前步骤进度", "坐席处理记录"],
user_message="您的问题已升级至主管处理,将在 1 小时内联系您",
),
],
)
validation = validate_scenario(customer_service_scenario)
print_scenario_report(customer_service_scenario, validation)
本章 checklist
- [ ] 场景中每个角色的职责边界已明确定义,并确认无职责真空
- [ ] 所有交接触发条件已量化(如置信度阈值、金额上限),不依赖模糊描述
- [ ] 交接时用户看到的提示语已设计,确保体验连贯
- [ ] 人工角色的响应 SLA 已定义,且有超时兜底方案
- [ ] 已定义当 AI 建议与人工判断冲突时的解决原则
本章小结
- 多角色协同的核心设计工作是"划边界":每个角色能做什么、不能做什么必须明确,模糊地带是事故高发区
- 交接设计的质量决定用户体验:上下文必须无缝传递,用户不应该重复自己
- 冲突解决原则要提前定好,上线后才不会在"AI 说 A 人工说 B"时陷入混乱
本章完:下一章进入 08-MVP定义,学习如何为 AI 产品定义真正精简可验证的 MVP。