上一篇 VASI 文章先把一个边界说清楚:Voice Agent 不该根据一段声音给用户下 MBTI 结论。可真正把系统做起来,问题会立刻往前一步:既然不输出人格标签,系统又凭什么决定这一次要少讲一点、再确认一遍,还是先承接投诉情绪?

答案不是再训练一个更隐蔽的“人格分类器”,而是让系统承认不确定性。

闪电智能 Voice Agent 更适合维护一份会过期、可被推翻的“当前沟通偏好快照”:它来自本通电话的可观察证据,带着置信度,随时服从用户明确表达,并在高风险场景自动收回策略权限。最终输出的是服务动作,不是“你是哪类人”。

这篇把这件事落到一个可实现的策略路由器上。代码是教学级示例,阈值不是线上推荐值;重点是决策顺序和可审计性。

目录

一个看似聪明、实际危险的写法

把“猜人格”改成“保留不确定性的策略选择”

置信度不等于最高概率

四个优先级:用户、风险、回退、策略

一段可运行的策略路由示例

让系统可以被纠正,也可以被复盘

上线前该测什么

一个看似聪明、实际危险的写法

假设客服系统刚接通电话,ASR 给出了“快点告诉我怎么处理”,同时 VAD 和轮次统计显示用户说话较快、已经打断过一次。一个很常见的做法是直接写:

if speech_rate > threshold and interruption_count > 0:
    user_type = "高效型人格"
    response_style = "简短推进"

它的问题不只是标签不准确。更现实的是,用户可能在赶时间,却正好在处理退款、地址修改或身份核验;也可能是客服说得过长,才导致他打断。把两个短时现象压缩成一个稳定身份,会让后续系统失去改口的机会。

更好的内部表达应当像这样:

{
  "candidate_strategies": {
    "efficient": 0.58,
    "clear_confirm": 0.31,
    "care": 0.06,
    "explore": 0.05
  },
  "evidence": ["explicit_hurry", "one_interruption"],
  "business_state": "normal",
  "decision": "pending_confidence_check"
}

这里没有 MBTI,也没有“用户天生偏好什么”的结论。它只描述当前候选策略、依据和还没完成的校验。

把“猜人格”改成“保留不确定性的策略选择”

VASI 2 的关键不是增加更多特征,而是把特征、推测和动作拆开。音频与对话信号只能进入“证据层”;策略概率是“推测层”;真正改变话术或是否转人工,属于“动作层”。三层之间必须能追溯。

实时语音、ASR、业务上下文

事实型证据
追问、明确偏好、字段风险

候选策略分布
而非人格标签

置信度校验

用户明确表达

策略路由

投诉、金额、身份、多轮失败

话术、确认、转人工入口

用户纠正与审计日志

其中,证据 Schema 最好优先记录能解释、能纠正、与本次任务直接相关的信息:

字段例子为什么可以进入策略判断
explicit_preference“直接说结果”“请一步一步讲”用户自己给出的当次偏好,应享有最高优先级
clarification_count同一规则追问两次说明当前解释可能不够清楚
key_field_risk金额、地址、日期、订单号决定是否提高复述与确认密度
asr_field_confidence地址字段置信度低系统应承认没听清,而不是装作理解
turn_behavior打断、长停顿、催办只作为弱证据,不能单独决定策略
business_state投诉升级、身份核验、多轮失败决定策略引擎是否必须收敛或转人工

反过来,别把“音高较高”“某种口音”“年龄、性别或地域的猜测”写进人格或服务质量判断。它们既容易受到电话带宽、降噪、方言和设备影响,也很难证明与当前服务动作存在稳定的因果关系。

置信度不等于最高概率

很多系统只看最高候选策略:efficient = 0.58,于是就切到高效推进。这仍然太草率。

至少还要问三件事:第一名和第二名差得够不够开?证据是否覆盖了当前对话?信号源是否可靠?例如,ASR 对关键短句本身就不确定,或通话有明显噪声,那么“用户催办”的文本证据也要降权。

可以用一个便于解释的示例公式来表达这种收敛:

决策置信度 = 最高候选概率
           × 第一名与第二名的差距系数
           × 证据覆盖度
           × 信号可靠性

它不是统计学上的通用校准公式,更不是可直接复制到生产环境的阈值。它的价值在于强迫系统把“不知道”显式保留下来。

0.580.31 为例,若证据覆盖度为 0.8、信号可靠性为 0.9,最终决策置信度仍可能低于策略切换门槛。此时 Voice Agent 最稳妥的动作不是“更加确信自己”,而是回到中性确认:

我可以直接给您处理路径,也可以按步骤说明。您希望哪一种?

这句问法成本很低,却把选择权还给了用户。

四个优先级:用户、风险、回退、策略

策略路由不应该从模型概率开始,而应该从不能被模型越过的规则开始。对中文客服而言,我建议固定为下面的顺序:

  1. 用户明确表达优先:说“不要讲太多”或“请慢一点”时,立即改写回应方式。
  2. 高风险状态优先:投诉升级、金额争议、身份核验、多轮失败时,使用中性确认并保持人工入口。
  3. 低置信度回退:证据不足或候选策略接近时,不做强切换。
  4. 仅在其余情况下使用推测策略:候选最高、置信度达标,才让话术模板发生有限变化。

这四步带来一个重要效果:策略是可撤销的。用户下一轮说“还是讲清楚一点”,系统只需更新本次会话快照,而不是推翻一个已经写进 CRM 的人格档案。

一段可运行的策略路由示例

本地项目中的 strategy_router.py 把上述顺序写成了一个无第三方依赖的 Python 示例。它只处理策略名称、来源和置信度;不保存 MBTI 标签,也不调用模型。

核心入口如下:

def choose_strategy(snapshot: PreferenceSnapshot, threshold: float = 0.45):
    if snapshot.explicit_preference:
        return {"strategy": snapshot.explicit_preference,
                "source": "explicit_preference", "confidence": 1.0}

    if snapshot.business_state in RISK_STATES:
        return {"strategy": "neutral_confirm",
                "source": "risk_fallback", "handoff_available": True}

    confidence = decision_confidence(snapshot)
    if confidence < threshold or not snapshot.probabilities:
        return {"strategy": "neutral_confirm",
                "source": "low_confidence_fallback", "confidence": confidence}

    return {"strategy": max(snapshot.probabilities,
                             key=snapshot.probabilities.get),
            "source": "inferred_preference", "confidence": confidence}

这里值得留意的不是 0.45 这个数字,而是 source 字段。它让每一次策略变化都能回答:这是用户亲口说的、风险规则要求的、低置信度回退的,还是系统的临时推测?

对应的 test_strategy_router.py 覆盖了三件不能回归的事:显式偏好能覆盖推测;两个候选过于接近时回退;金额争议即使模型很“自信”也保留人工入口。实际项目应在每次策略规则调整后持续运行这类测试。

让系统可以被纠正,也可以被复盘

可解释不是把所有原始音频和隐藏特征都堆进日志。更实用的日志只记录完成审计所需的信息:

{
  "conversation_id": "…",
  "decision_at": "2026-07-23T10:15:00+08:00",
  "strategy": "clear_confirm",
  "source": "explicit_preference",
  "confidence": 1.0,
  "evidence_codes": ["user_requested_step_by_step"],
  "risk_state": "normal",
  "user_correction": true
}

注意两点:第一,日志记录的是策略依据,不是人格标签;第二,user_correction 不能只是一个埋点。它要触发当前会话策略立即更新,并进入后续规则复盘样本。若用户反复说“别老重复”,却仍然收到长解释,问题应回到话术编排、轮次状态或 ASR,而不是给用户再加一个标签。

在数据治理上,这种最小化记录也更符合目的限制的思路。《个人信息保护法》第六条要求个人信息处理具有明确、合理目的,与目的直接相关,并采取对个人权益影响最小的方式;采集范围也应限于实现目的的最小范围。国家市场监督管理总局公布的法规全文 可作为团队设计留存字段、保存周期和访问权限时的基础参照。具体合规要求仍应由业务与法务结合场景确认。

上线前该测什么

不要用“模型把用户分成了多少类”衡量 VASI。更有意义的是验证这个机制有没有减少错误动作,并且能否被安全地拉回。

测试项要验证的事情通过标准应如何定义
显式偏好覆盖用户说出偏好后,系统不再沿用推测覆盖路径全量通过,且日志来源为 explicit_preference
低置信度回退模糊、噪声、候选接近时不强切策略回退路径全量通过,不输出人格结论
高风险收敛金额、身份、投诉、多轮失败不被“快节奏”压缩人工入口与关键确认始终可用
用户纠正闭环用户否定当前方式后,下一轮能更新策略记录纠正事件并完成会话内生效
审计完整性每个策略变更都能说明依据抽样记录能还原来源、风险、置信度和动作

离线评估还要把电话环境拆进去:相同话术在窄带、噪声、方言和 ASR 低置信度条件下是否更容易触发错误切换?NIST 的 AI RMF 将治理贯穿于 Map、Measure、Manage 等活动,并强调持续的风险测量与管理;这很适合拿来提醒团队:策略引擎不是一次离线评测后就可以永久相信的模块。NIST AI RMF Playbook 提供了相关的自愿性实践参考。

结语:置信度不是“更大胆地猜”,而是“知道何时不猜”

VASI 的第二步,不是把 MBTI 从界面里藏起来,继续在后台给用户分型。它应该把推测限制在一次会话、一个可改变的服务动作里:用户明确表达优先,风险状态优先,信号不足就回退,必要时转人工。

对 Voice Agent 来说,真正有价值的能力不是宣布“我知道你是什么样的人”,而是在不确定时仍然能给出尊重用户、可解释、可撤销的服务。

下一篇会继续拆策略引擎:语速、停顿、追问、ASR 结果和业务状态,怎样一起进入话术选择,而不是各自抢着替用户做决定。


本文说明:文中的概率、阈值、JSON 和 Python 代码均为机制演示与测试夹具,不代表闪电智能 Voice Agent 的线上指标、训练数据或客户效果;生产阈值需结合业务风险、样本和用户反馈单独校准。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐