Agent 与人类协作的交互设计
AI 导读
Agent 与人类协作的交互设计 人机协作模式、审批流程与升级协议的工程化实践 人机协作的设计原则 Agent 不是取代人类,而是与人类协作。关键设计原则: 透明性(Transparency):Agent 必须让人类理解它在做什么、为什么这么做 可控性(Controllability):人类随时可以介入、修改、中断 Agent 的行为 适度自主(Calibrated...
Agent 与人类协作的交互设计
人机协作模式、审批流程与升级协议的工程化实践
人机协作的设计原则
Agent 不是取代人类,而是与人类协作。关键设计原则:
- 透明性(Transparency):Agent 必须让人类理解它在做什么、为什么这么做
- 可控性(Controllability):人类随时可以介入、修改、中断 Agent 的行为
- 适度自主(Calibrated Autonomy):根据风险和置信度动态调整自主程度
- 优雅降级(Graceful Degradation):当 Agent 不确定时,应主动寻求人类帮助
自主程度光谱:
完全人工 HITL 协作 完全自主
─────────────────────────────────────────────
│ │ │
每步确认 关键节点确认 全自动执行
适用:学习期 适用:生产环境 适用:低风险重复任务
一、HITL(Human-in-the-Loop)模式
三种 HITL 粒度
┌─────────────────────────────────────────────────────────────┐
│ HITL 粒度选择 │
├──────────────┬──────────────────┬───────────────────────────┤
│ 步骤级 HITL │ 节点级 HITL │ 异常级 HITL │
│ (Step-level) │ (Checkpoint) │ (Exception-only) │
├──────────────┼──────────────────┼───────────────────────────┤
│ 每个工具调用 │ 关键决策点 │ 仅在异常时 │
│ 都需确认 │ 需要确认 │ 请求介入 │
├──────────────┼──────────────────┼───────────────────────────┤
│ 最安全 │ 平衡安全与效率 │ 最高效 │
│ 最低效 │ │ 需要完善的异常检测 │
├──────────────┼──────────────────┼───────────────────────────┤
│ 适用: │ 适用: │ 适用: │
│ 高风险操作 │ 生产环境标准 │ 低风险重复任务 │
│ 新 Agent 上线│ │ 成熟 Agent │
└──────────────┴──────────────────┴───────────────────────────┘
节点级 HITL 实现
class HITLController:
"""Human-in-the-Loop 控制器"""
def __init__(self, policy: HITLPolicy):
self.policy = policy
self.pending_approvals = {}
def check_approval_needed(self, action: AgentAction) -> bool:
"""判断当前动作是否需要人工审批"""
# 1. 强制审批列表
if action.type in self.policy.always_approve:
return True
# 2. 风险评估
risk = self.assess_risk(action)
if risk.level in ("high", "critical"):
return True
# 3. 置信度检查
if action.confidence < self.policy.confidence_threshold:
return True
# 4. 成本检查
if action.estimated_cost > self.policy.cost_threshold:
return True
return False
def request_approval(self, action: AgentAction) -> ApprovalRequest:
"""生成审批请求"""
request = ApprovalRequest(
id=str(uuid4()),
action=action,
context=self._build_context(action),
risk_assessment=self.assess_risk(action),
options=[
ApprovalOption("approve", "批准执行"),
ApprovalOption("modify", "修改后执行"),
ApprovalOption("reject", "拒绝"),
ApprovalOption("delegate", "转交其他人"),
],
timeout_minutes=self.policy.approval_timeout,
created_at=datetime.now()
)
self.pending_approvals[request.id] = request
self._notify_approver(request)
return request
def _build_context(self, action: AgentAction) -> dict:
"""构建审批上下文,帮助人类快速决策"""
return {
"what": action.description,
"why": action.reasoning,
"impact": self._estimate_impact(action),
"reversible": action.is_reversible,
"alternatives": self._suggest_alternatives(action),
"history": self._get_similar_past_decisions()
}
HITL 策略配置
class HITLPolicy:
"""HITL 策略定义"""
# 必须审批的操作
always_approve = [
"database_write",
"database_delete",
"file_delete",
"deploy_production",
"send_email",
"create_account",
"modify_permissions",
"financial_transaction",
]
# 置信度阈值(低于此值需审批)
confidence_threshold = 0.8
# 成本阈值(超过此值需审批)
cost_threshold_usd = 1.0
# 审批超时(分钟)
approval_timeout = 30
# 超时后的默认动作
timeout_action = "reject" # reject / approve / escalate
二、审批流程设计
审批工作流
Agent 提出动作
│
v
┌──────────────┐
│ 需要审批? │──→ No ──→ 直接执行
└──────┬───────┘
│ Yes
v
┌──────────────┐
│ 生成审批请求 │
│ - 动作描述 │
│ - 风险评估 │
│ - 影响分析 │
│ - 替代方案 │
└──────┬───────┘
│
v
┌──────────────┐
│ 通知审批人 │──→ 邮件 / Slack / 应用内
└──────┬───────┘
│
v
┌──────────────┐
│ 等待决策 │──→ 超时 ──→ 执行默认动作
└──────┬───────┘
│
┌────┼────┬─────┐
v v v v
批准 修改 拒绝 转交
│ │ │ │
v v v v
执行 修改 记录 新审批人
后执行 原因
审批界面信息架构
class ApprovalUI:
"""审批界面的信息组织"""
def render_approval_card(self, request: ApprovalRequest) -> dict:
"""生成审批卡片的数据结构"""
return {
# 第一眼:这是什么
"headline": request.action.description,
"risk_badge": self._risk_badge(request.risk_assessment),
# 第二眼:为什么
"reasoning": request.action.reasoning,
# 第三眼:影响是什么
"impact": {
"scope": request.context["impact"]["scope"],
"reversible": request.context["reversible"],
"affected_resources": request.context["impact"]["resources"]
},
# 决策辅助
"similar_past_decisions": request.context["history"],
"alternatives": request.context["alternatives"],
# 操作区
"actions": [
{"label": "批准", "style": "primary",
"shortcut": "Enter"},
{"label": "修改", "style": "secondary",
"shortcut": "M"},
{"label": "拒绝", "style": "danger",
"shortcut": "R"},
],
# 时间压力
"deadline": request.created_at + timedelta(
minutes=request.timeout_minutes
),
"auto_action": request.policy.timeout_action
}
def _risk_badge(self, risk) -> dict:
badges = {
"low": {"text": "LOW", "color": "green"},
"medium": {"text": "MED", "color": "orange"},
"high": {"text": "HIGH", "color": "red"},
"critical": {"text": "CRITICAL", "color": "darkred"}
}
return badges.get(risk.level, badges["medium"])
三、升级协议(Escalation Protocol)
升级触发条件
class EscalationTrigger:
"""升级触发条件定义"""
TRIGGERS = [
# 置信度不足
EscalationRule(
name="low_confidence",
condition=lambda ctx: ctx.agent_confidence < 0.5,
level="L1",
message="Agent 对当前决策的置信度不足 50%"
),
# 连续失败
EscalationRule(
name="repeated_failure",
condition=lambda ctx: ctx.consecutive_failures >= 3,
level="L2",
message="连续 3 次尝试失败"
),
# 超出时间预算
EscalationRule(
name="time_budget_exceeded",
condition=lambda ctx: ctx.elapsed > ctx.time_budget * 0.8,
level="L1",
message="已使用 80% 的时间预算"
),
# 超出成本预算
EscalationRule(
name="cost_budget_exceeded",
condition=lambda ctx: ctx.cost > ctx.cost_budget * 0.9,
level="L2",
message="已使用 90% 的成本预算"
),
# 安全事件
EscalationRule(
name="security_incident",
condition=lambda ctx: ctx.security_violations > 0,
level="L3",
message="检测到安全违规"
),
# 歧义检测
EscalationRule(
name="ambiguous_task",
condition=lambda ctx: ctx.interpretation_count > 2,
level="L1",
message="任务存在多种合理解释"
),
]
升级层级
L0: Agent 自行处理
│ 重试、降级、换工具
│
L1: 信息补充请求
│ 向用户请求澄清或补充信息
│ 不中断执行流程
│
L2: 决策审批请求
│ 暂停执行,等待人类做关键决策
│ 提供选项和建议
│
L3: 紧急中断
│ 立即停止所有操作
│ 通知所有相关人员
│ 保存现场状态用于事后分析
class EscalationManager:
"""升级管理器"""
def escalate(self, level: str, context: dict) -> EscalationResponse:
if level == "L1":
return self._request_info(context)
elif level == "L2":
return self._request_decision(context)
elif level == "L3":
return self._emergency_halt(context)
def _request_info(self, context: dict) -> EscalationResponse:
"""L1:请求补充信息"""
question = self._generate_clarification_question(context)
return EscalationResponse(
level="L1",
action="ask_user",
message=question,
blocking=False, # 不阻塞,继续执行其他不依赖此信息的任务
fallback_action=context.get("default_assumption")
)
def _request_decision(self, context: dict) -> EscalationResponse:
"""L2:请求决策"""
options = self._generate_decision_options(context)
return EscalationResponse(
level="L2",
action="request_approval",
message=f"需要您的决策:{context['description']}",
options=options,
blocking=True, # 阻塞,等待决策
timeout_minutes=30,
timeout_action="pause"
)
def _emergency_halt(self, context: dict) -> EscalationResponse:
"""L3:紧急中断"""
# 保存现场
self._save_state(context)
# 停止所有执行
self._halt_all_agents()
# 通知
self._send_alert(
severity="critical",
message=f"Agent 紧急中断: {context['reason']}",
channels=["slack", "email", "sms"]
)
return EscalationResponse(
level="L3",
action="halted",
state_snapshot=context["state"]
)
四、反馈循环设计
显式反馈
class FeedbackCollector:
"""用户反馈收集器"""
def collect_after_action(self, action: AgentAction,
result: ActionResult) -> None:
"""在关键动作完成后收集反馈"""
feedback = {
"action_id": action.id,
"timestamp": datetime.now(),
"result_summary": result.summary,
}
# 根据场景选择反馈方式
if action.type in ("code_write", "document_generate"):
# 内容生成类:请求质量评分
feedback["type"] = "quality_rating"
feedback["prompt"] = (
"生成的内容质量如何?"
"\n1=很差 2=较差 3=一般 4=较好 5=很好"
)
elif action.type in ("search", "retrieval"):
# 检索类:请求相关性评价
feedback["type"] = "relevance_check"
feedback["prompt"] = "检索结果是否满足需求?"
elif action.type in ("decision", "recommendation"):
# 决策类:请求决策认可
feedback["type"] = "decision_approval"
feedback["prompt"] = (
"您认同这个建议吗?"
"\n可选:采纳 / 修改后采纳 / 不采纳"
)
self._store_feedback(feedback)
隐式反馈
class ImplicitFeedbackTracker:
"""隐式反馈追踪"""
def track(self, event: UserEvent):
"""通过用户行为推断反馈"""
signals = []
# 用户是否修改了 Agent 的输出
if event.type == "edit_agent_output":
signals.append({
"signal": "output_edited",
"interpretation": "输出未完全满足需求",
"severity": self._calc_edit_severity(
event.original, event.edited
)
})
# 用户是否重新描述了同一个任务
if event.type == "task_rephrase":
signals.append({
"signal": "task_rephrased",
"interpretation": "Agent 可能误解了任务",
"original": event.original_task,
"rephrased": event.new_task
})
# 用户是否回退了 Agent 的操作
if event.type == "undo":
signals.append({
"signal": "action_undone",
"interpretation": "Agent 的操作不符合预期",
"undone_action": event.action_id
})
# 用户沉默时间过长
if event.type == "long_pause" and event.duration_s > 30:
signals.append({
"signal": "long_pause",
"interpretation": "用户可能困惑或在思考",
"duration_s": event.duration_s
})
return signals
五、交互设计模式
模式一:渐进式披露(Progressive Disclosure)
用户请求:"帮我分析这份报告"
第一层回复(摘要):
"报告核心结论:收入同比增长 15%,成本增长 8%。"
[查看详细分析] [查看数据来源]
第二层(展开详情):
"详细分析:
1. 收入结构变化...
2. 成本驱动因素..."
[查看原始数据] [查看计算过程]
第三层(原始数据):
完整的数据表格和计算过程
模式二:确认前预览(Preview before Commit)
Agent 准备执行:发送邮件给 [email protected]
预览界面:
┌──────────────────────────────────────┐
│ 收件人: [email protected] │
│ 主题: Q4 项目进展报告 │
│ 正文: │
│ 各位好, │
│ 以下是 Q4 的项目进展... │
│ │
│ 附件: progress_report.pdf │
│ │
│ [发送] [修改] [取消] │
└──────────────────────────────────────┘
模式三:置信度可视化
Agent 的分析结果:
问题原因判断:
┌─────────────────────────────────────┐
│ 数据库连接超时 ████████████░░ 85% │ <-- 高置信度,可以直接处理
│ 网络波动 ████░░░░░░░░░ 35% │ <-- 低置信度,需要更多证据
│ 服务器过载 ██░░░░░░░░░░░ 15% │ <-- 可能性低
└─────────────────────────────────────┘
建议:优先排查数据库连接超时(置信度 85%)。
如果您认为实际原因不同,请告诉我,我会调整分析方向。
模式四:检查点恢复(Checkpoint Recovery)
长任务执行中,设置检查点供用户审查:
任务:重构用户认证模块
[v] Step 1: 分析现有代码结构 -- 已完成
[v] Step 2: 设计新的认证架构 -- 已完成
[ ] Step 3: 实现新的 JWT 认证 -- 等待确认
--> [查看架构设计] [批准继续] [修改方案]
[ ] Step 4: 迁移数据
[ ] Step 5: 回归测试
[ ] Step 6: 部署
当前状态:等待 Step 3 审批
预计剩余时间:2 小时
已消耗成本:$3.50
六、通知与状态同步
通知策略
class NotificationManager:
"""Agent 状态通知管理"""
NOTIFICATION_RULES = {
# 高优先级:立即通知
"task_blocked": {
"priority": "high",
"channels": ["push", "slack"],
"sound": True
},
"security_alert": {
"priority": "critical",
"channels": ["push", "slack", "sms"],
"sound": True
},
"approval_needed": {
"priority": "high",
"channels": ["push", "slack"],
"sound": False
},
# 中优先级:批量通知
"task_completed": {
"priority": "medium",
"channels": ["slack"],
"batch": True,
"batch_interval_minutes": 5
},
# 低优先级:静默记录
"progress_update": {
"priority": "low",
"channels": ["dashboard"],
"silent": True
}
}
def notify(self, event_type: str, context: dict):
"""根据事件类型选择通知方式"""
rule = self.NOTIFICATION_RULES.get(event_type)
if not rule:
return
message = self._format_message(event_type, context)
if rule.get("batch"):
self._add_to_batch(event_type, message)
else:
for channel in rule["channels"]:
self._send(channel, message, rule["priority"])
交互设计检查清单
Agent 交互设计审查:
- [ ] Agent 的每个动作都有清晰的意图说明
- [ ] 高风险操作有确认流程
- [ ] 用户可以随时中断 Agent
- [ ] 用户可以回退 Agent 的操作
- [ ] 低置信度的决策向用户透明展示
- [ ] 长任务有进度反馈和检查点
- [ ] 升级路径明确(何时自动、何时求助)
- [ ] 通知不过度打扰(分级、可静音)
- [ ] 审批界面信息充分(影响、替代方案、时限)
- [ ] 隐式反馈被收集并用于改进
参考资料
- Google PAIR (People + AI Research) 人机协作指南
- Apple Human Interface Guidelines - AI 交互设计
- Microsoft HAX (Human-AI Experience) Toolkit
- Nielsen Norman Group: AI UX 研究报告
- Anthropic HITL 模式文档
Maurice | [email protected]
深度加工(NotebookLM 生成)
基于本文内容生成的 PPT 大纲、博客摘要、短视频脚本与 Deep Dive 播客,用于多场景复用
PPT 大纲(5-8 张幻灯片) 点击展开
Agent 与人类协作的交互设计 — ppt
这是一份基于您提供的文章生成的 PPT 大纲,共包含 7 张幻灯片,涵盖了 Agent 与人类协作的核心设计原则与工程实践:
幻灯片 1:Agent 与人类协作的核心原则
- Agent 的核心定位:设计的初衷是让 Agent 与人类进行协作,而不是去取代人类 [1]。
- 透明性(Transparency):Agent 的设计必须保证人类能够清晰理解它正在做什么以及背后的原因 [1]。
- 可控性(Controllability):在协作过程中,人类需要拥有随时介入、修改或中断 Agent 行为的控制权 [1]。
- 适度自主与优雅降级:Agent 应根据操作风险和置信度动态调整自主级别,并在遇到不确定情况时主动向人类寻求帮助 [1]。
幻灯片 2:HITL(人机环路)协作模式
- 协作光谱与适用场景:从“每步确认”(适用学习期)、“关键节点确认”(适用生产环境)到“全自动执行”(适用低风险任务),自主程度逐步递增 [1]。
- 三种 HITL 粒度设计:包括最安全的“步骤级”、平衡安全与效率的“节点级”,以及需要完善异常检测机制的最高效“异常级” [1]。
- 自动拦截与审批触发:通过强制审批列表、风险评估(高/极高风险)、置信度检查(<0.8)以及成本阈值等维度,自动判断是否需要人类介入 [2, 3]。
- 上下文信息的构建:生成审批请求时,系统会为审批人打包好动作描述、背后逻辑、影响范围及替代方案,以辅助快速决策 [2, 3]。
幻灯片 3:审批流程与界面设计
- 标准化审批工作流:Agent 提出动作后进行风险拦截,若需审批则生成请求并通知审批人,同时设定超时默认动作机制 [3, 4]。
- 信息架构优先级:审批卡片设计应符合人类认知,第一眼看动作描述与风险,第二眼看原因,第三眼看影响范围与历史决策 [4]。
- 多样化的操作选项:界面为用户提供“批准”、“修改后执行”、“拒绝”以及“转交其他人”等灵活的干预手段 [2, 4]。
- 视觉化的风险预警:采用明显的颜色标签直观展示风险级别,如低风险(绿色)、中等(橙色)、高风险(红色)和极高风险(深红色) [4, 5]。
幻灯片 4:升级协议(Escalation Protocol)
- 多样化的触发条件:包括 Agent 置信度不足 50%、连续 3 次失败、超出时间或成本预算、检测到安全违规,以及任务存在歧义 [5, 6]。
- L0 与 L1 级别应对:L0 为 Agent 内部自行重试降级;L1 为向用户请求补充信息,且不中断其他非依赖任务的执行 [6]。
- L2 级别决策请求:当遇到关键决策时触发 L2 升级,系统会暂停当前执行,并为人类提供决策选项和建议,等待审批 [6, 7]。
- L3 级别紧急中断:发生安全事件等严重情况时触发,系统将保存现场状态、立即停止所有操作,并向所有相关人员发出多渠道告警 [6, 7]。
幻灯片 5:双重反馈循环机制
- 场景化的显式反馈:在关键动作完成后主动收集评价,如为生成内容请求质量评分、为检索请求相关性评价、为决策建议请求是否采纳 [7, 8]。
- 捕捉用户修改行为:通过监测用户是否修改了 Agent 的输出结果,系统可推断当前内容未完全满足需求并评估严重程度 [8]。
- 分析任务重述与撤销:追踪用户的“任务重新描述”以识别误解,追踪“撤销(Undo)”操作以发现不符合预期的动作 [8, 9]。
- 静默状态与长时间停顿:当系统检测到用户操作停顿超过 30 秒时,会将其解释为用户可能感到困惑或正在思考的隐式信号 [9]。
幻灯片 6:AI 协作的典型交互模式
- 渐进式披露(Progressive Disclosure):从提供核心结论摘要开始,允许用户逐层点击查看详细分析、计算过程乃至完整的原始数据 [9]。
- 确认前预览(Preview before Commit):在发送邮件或提交修改等关键操作前,为用户提供直观的预览效果及修改入口 [9]。
- 置信度可视化呈现:将各种可能性或诊断原因的置信度(如 85%、35%)以图形化的方式直观展示,辅助用户判断 [9, 10]。
- 长任务的检查点恢复:对长线任务进行拆解,提供清晰的进度列表,在关键步骤设置拦截点等待确认,并预估剩余时间与成本 [10]。
幻灯片 7:通知策略与交互审查清单
- 分级通知策略管理:高优先级事件(如阻断、安全告警)采用多渠道强提醒;中优先级通过 Slack 等渠道批量通知;低优先级进度则静默展示在仪表盘 [10, 11]。
- 核心意图与风险审查:交互上线前需确保 Agent 的每个动作都有清晰意图,且高风险操作已配备完善的确认流程 [11]。
- 用户控制权审查:验证用户是否可以随时中断或回退操作,低置信度决策是否足够透明 [11]。
- 用户体验与打扰控制:检查审批界面信息是否充分(含影响和替代方案),长任务是否有检查点,且需保证通知不会过度打扰用户 [11]。
博客摘要 + 核心看点 点击展开
Agent 与人类协作的交互设计 — summary
SEO 友好博客摘要(约 150 字)
在 AI 时代,Agent 的关键价值并非取代人类,而是实现高效的人机协作 [1]。本文深度解析了 Agent 与人类协作的交互设计工程化实践,系统阐述了透明性、可控性、适度自主与优雅降级四大核心设计原则 [1]。文章详细分享了 HITL(人在环路)审批机制的设计、从 L0 到 L3 的异常升级协议(Escalation Protocol),以及显性与隐性双轨反馈循环的构建方法 [1-3]。结合渐进式披露、置信度可视化等四大经典设计模式,为您提供打造安全、可控且高体验 AI 产品的系统性指南 [4, 5]。
3 条核心看点
- 确立四大原则与 HITL 机制:Agent 需保证透明可控,并依风险场景灵活应用三种颗粒度的“人在环路”审批模式 [1]。
- 构建分级升级协议与双轨反馈:设立 L0-L3 异常中断机制,结合显隐性用户行为追踪,确保系统运行安全与持续优化 [2, 3]。
- 四大交互模式重塑用户体验:运用渐进式披露、确认前预览、置信度可视化与检查点恢复,有效降低决策成本并增强信任 [4, 6]。
60 秒短视频脚本 点击展开
Agent 与人类协作的交互设计 — video
这是一份为您定制的 60 秒短视频脚本,已严格按照您的字数和结构要求编写:
【短视频脚本】
钩子开场:
智能体不取代人类,而是协作![1]
核心解说一:
智能体需透明可控,让人随时理解其行为,并能直接介入或中断。[1]
核心解说二:
任务按风险分级,低风险全自动,高风险与低置信度需人工审批。[1, 2]
核心解说三:
遇连续失败或安全违规,系统触发升级协议,紧急中断并求助。[3, 4]
一句收束:
优秀的交互设计,让人机协作变得更加安全与高效!
课后巩固
与本文内容匹配的闪卡与测验,帮助巩固所学知识
延伸阅读
根据本文主题,为你推荐相关的学习资料