多角色协同场景设计实战
High Contrast
Dark Mode
Light Mode
Sepia
Forest
4 min read746 words

多角色协同场景设计实战

多角色 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

本章小结


本章完:下一章进入 08-MVP定义,学习如何为 AI 产品定义真正精简可验证的 MVP。