When2Talk:车内主动代理何时说话?——座舱 HMI 时机决策

论文信息

  • 标题: When2Talk: When Should a Proactive In-Car Agent Talk?
  • 作者: Kaiser Hamid 等
  • arXiv: 2609.12503
  • 时间: 2026年9月11日
  • 受试者: 41 人 VR 模拟全自动驾驶
  • 核心贡献: 首次系统性研究车内代理的沟通时机决策

核心创新

  1. 情境敏感 (CS) 策略:根据事件优先级和乘客活动选择 Immediate / Delayed / Silent
  2. 减少中断感知:CS 策略显著降低”被打断”感觉,且不降低信任度
  3. 四个决策维度:事件后果 / 乘客活动 / 信息持续价值 / 确认需求
  4. 信任基线差异:基线信任度高的人更倾向减少沟通

方法详解

1. 两种策略对比

策略 描述 沟通频率 中断感 信任度
事件触发 (ET) 每个事件立即沟通 100% ❌ 高
情境敏感 (CS) Immediate / Delayed / Silent ~40% ✅ 低 = ET

2. CS 策略三维决策

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
"""
When2Talk: 车内代理沟通时机决策系统

论文核心方法: 情境敏感 (CS) 策略

决策维度:
1. 事件后果 (Event Consequence)
2. 乘客活动 (Passenger Activity)
3. 信息持续价值 (Continuing Information Value)
4. 确认需求 (Confirmation Need)
"""

import numpy as np
from dataclasses import dataclass
from typing import Optional, List
from enum import Enum

class TalkAction(Enum):
IMMEDIATE = "立即沟通"
DELAYED = "延迟沟通"
SILENT = "保持沉默"

@dataclass
class CabinEvent:
"""座舱事件"""
event_type: str # 事件类型
consequence: float # 后果严重度 0-1
passenger_busy: float # 乘客忙碌度 0-1
info_value_decay: float # 信息价值衰减率 (0=永不衰减, 1=立即无价值)
needs_confirmation: bool # 是否需要确认

@dataclass
class TalkDecision:
"""沟通决策"""
action: TalkAction
delay_seconds: float
reason: str
confidence: float

class When2TalkAgent:
"""
车内代理沟通时机决策器

论文 CS 策略实现
"""

# 事件类型权重
EVENT_WEIGHTS = {
'emergency_brake': {'consequence': 0.95, 'decay': 0.9, 'confirm': True},
'lane_change': {'consequence': 0.6, 'decay': 0.5, 'confirm': False},
'traffic_light': {'consequence': 0.4, 'decay': 0.3, 'confirm': False},
'scenic_point': {'consequence': 0.1, 'decay': 0.1, 'confirm': False},
'speed_limit': {'consequence': 0.3, 'decay': 0.4, 'confirm': False},
'construction': {'consequence': 0.5, 'decay': 0.6, 'confirm': False},
'accident_ahead': {'consequence': 0.8, 'decay': 0.7, 'confirm': True},
}

def __init__(self, dispositional_trust: float = 0.5):
"""
Args:
dispositional_trust: 用户基线信任度 (0-1)
高信任 → 偏好减少沟通
低信任 → 偏好即时沟通
"""
self.trust = dispositional_trust

def decide(self, event: CabinEvent,
passenger_activity: float) -> TalkDecision:
"""
决策: Immediate / Delayed / Silent

Args:
event: 座舱事件
passenger_activity: 乘客当前活动占用度 0-1
0 = 空闲/睡觉
0.5 = 轻度活动 (听音乐)
1.0 = 深度活动 (电话/阅读)

Returns:
decision: TalkDecision
"""
# 维度1: 事件后果
consequence_score = event.consequence

# 维度2: 乘客活动冲突
conflict_score = passenger_activity * (1 - consequence_score)

# 维度3: 信息持续价值
# 价值随时间衰减 → 紧迫
urgency = event.info_value_decay * (1 - self.trust)

# 维度4: 确认需求
confirm_score = 1.0 if event.needs_confirmation else 0.0

# 综合决策评分
talk_score = (consequence_score * 0.4 +
urgency * 0.3 +
confirm_score * 0.2 +
(1 - conflict_score) * 0.1)

silence_score = conflict_score * 0.5 + self.trust * 0.3 + (1 - event.consequence) * 0.2

if talk_score > 0.7:
action = TalkAction.IMMEDIATE
delay = 0
reason = f"高后果({event.consequence:.1f}) + 紧迫({urgency:.1f})"
elif talk_score > 0.4:
action = TalkAction.DELAYED
delay = 5.0 * (1 - talk_score)
reason = f"中等重要性, 等待乘客活动结束"
else:
action = TalkAction.SILENT
delay = float('inf')
reason = f"低后果 + 乘客忙碌({passenger_activity:.1f})"

confidence = abs(talk_score - silence_score) / (talk_score + silence_score + 1e-8)

return TalkDecision(
action=action,
delay_seconds=delay,
reason=reason,
confidence=confidence
)

def batch_decide(self, events: List[CabinEvent],
activities: List[float]) -> List[TalkDecision]:
"""批量决策"""
return [self.decide(e, a) for e, a in zip(events, activities)]


# 测试
if __name__ == "__main__":
agent = When2TalkAgent(dispositional_trust=0.5)

# 测试场景
scenarios = [
("紧急制动", CabinEvent("emergency_brake", 0.95, 0.8, 0.9, True), 0.3),
("变道", CabinEvent("lane_change", 0.6, 0.4, 0.5, False), 0.8),
("风景点", CabinEvent("scenic_point", 0.1, 0.2, 0.1, False), 0.5),
("前方事故", CabinEvent("accident_ahead", 0.8, 0.6, 0.7, True), 0.7),
("限速变化", CabinEvent("speed_limit", 0.3, 0.5, 0.4, False), 0.6),
]

print("=== When2Talk 决策测试 ===")
print(f"{'场景':<12} {'后果':<8} {'乘客忙':<8} {'行动':<10} {'延迟':<8} {'原因'}")
for name, event, activity in scenarios:
decision = agent.decide(event, activity)
print(f"{name:<12} {event.consequence:<8.1f} {activity:<8.1f} "
f"{decision.action.value:<10} {decision.delay_seconds:<8.1f} {decision.reason}")

# 信任度影响
print("\n=== 信任度对沟通频率的影响 ===")
for trust in [0.2, 0.5, 0.8]:
agent_t = When2TalkAgent(dispositional_trust=trust)
events = [CabinEvent("lane_change", 0.6, 0.4, 0.5, False) for _ in range(10)]
activities = [0.5] * 10
decisions = agent_t.batch_decide(events, activities)
immediate = sum(1 for d in decisions if d.action == TalkAction.IMMEDIATE)
delayed = sum(1 for d in decisions if d.action == TalkAction.DELAYED)
silent = sum(1 for d in decisions if d.action == TalkAction.SILENT)
print(f"信任度 {trust}: 立即={immediate}, 延迟={delayed}, 沉默={silent}")

# 论文核心发现
print("\n=== 论文核心发现 ===")
print(f"{'策略':<15} {'沟通频率':<12} {'中断感':<12} {'信任度':<12}")
print(f"{'事件触发 (ET)':<15} {'100%':<12} {'高':<12} {'= CS':<12}")
print(f"{'情境敏感 (CS)':<15} {'~40%':<12} {'低':<12} {'= ET':<12}")
print(f"\n→ CS 减少沟通 60%, 不降低信任")
print(f"→ 四维决策: 后果/活动/价值/确认")

3. 四维决策框架

维度 问题 影响
事件后果 此事件不处理会怎样? 后果高→立即
乘客活动 乘客在做什么? 深度活动→延迟/沉默
信息持续价值 等一会说还有用吗? 快速衰减→紧迫
确认需求 需要乘客确认吗? 需确认→必须说

IMS HMI 应用

1. DMS 警告时机优化

当前 IMS 警告策略是固定阈值触发。When2Talk 可优化为:

场景 当前策略 When2Talk 优化 改善
疲劳一级警告 PERCLOS >30% → 立即 乘客在电话中 → 延迟 5s 减少中断
分心警告 视线偏离 >3s → 立即 高速公路 → 立即 安全优先
OOP 提醒 姿态异常 → 立即 低速 → 沉默+记录 减少打扰
CPD 警报 儿童检测 → 立即 必须立即
酒驾警告 BAC >0.02% → 立即 必须立即

2. 安全等级分层

1
2
3
4
5
6
7
# 安全等级 vs 沟通策略
safety_levels = {
'S0 生命攸关': {'action': 'IMMEDIATE', 'override': True}, # CPD, 酒驾, 无响应
'S1 安全相关': {'action': 'IMMEDIATE', 'override': False}, # 疲劳, 分心
'S2 信息相关': {'action': 'DELAYED', 'override': False}, # OOP, 安全带
'S3 舒适相关': {'action': 'SILENT', 'override': False}, # 姿态微调
}

3. 与 DMS 状态联动

DMS 检测状态 乘客活动估计 沟通策略
正常驾驶 低 (仅驾驶) 可立即
轻度疲劳 立即 (安全优先)
分心(手机) 高 (电话) 立即 (分心本身就是危险)
深度疲劳 低 (反应慢) 立即 + 高音量
认知分心 延迟 3s → 如果仍分心则立即

开发启示

  1. 不是所有警告都需要立即发出:S2/S3 级别可延迟或静默,减少驾驶员”警报疲劳”
  2. 乘客活动估计是关键输入:需要实时估计乘客是否在通话/阅读等
  3. 信任度个性化:高信任用户偏好少沟通,低信任用户需要更多确认
  4. 信息衰减率决定紧迫度:限速信息 10s 后仍有价值,变道信息 5s 后无意义
  5. 四维框架可量化:不再依赖人工规则,可用评分自动决策

测试场景

HMI-01 警告时机优化测试

前置条件:

  • DMS 系统正常检测疲劳/分心
  • When2Talk 决策模块已集成
  • 模拟器场景

测试步骤:

  1. 驾驶员在电话中 → 触发轻度疲劳
  2. 对比 ET(立即)vs CS(延迟 5s)策略
  3. 评估驾驶员中断感和信任度

判定条件:

检测项 通过条件
中断感降低 CS < ET (主观评分)
安全未受影响 延迟期间无安全事件
信任度 CS ≈ ET
满意度 CS > ET

总结

When2Talk 为 IMS HMI 提供了沟通时机决策的科学框架:

  1. CS 策略减少 60% 沟通,不降低信任度
  2. 四维决策框架:事件后果/乘客活动/信息价值/确认需求
  3. 信任度个性化:高信任用户偏好少沟通
  4. 安全第一原则:S0/S1 级别始终立即沟通
  5. 减少警报疲劳:S2/S3 级别可延迟或静默
  6. DMS+HMI 联动:乘客活动估计是关键输入

https://dapalm.com/2026/09/15/2026-09-15-when2talk-in-car-agent-communication-timing-ims/
作者
Mars
发布于
2026年9月15日
许可协议