☰
AI Agent情感计算实战:从情绪识别到决策层接入
2026/10/17 3:03:35 网站建设 项目流程

去年有个做金融客服产品的团队找到我,他们的AI Agent已经能把“退款”“投诉”“转人工”这类高频意图识别得七七八八,测试集上指标挺漂亮。可一上线就露馅:晚上业务高峰,用户情绪一上来,Agent还在不紧不慢地追问“请问您需要办理什么业务”。用户连续回了三句“你们到底能不能解决”,系统依然按固定流程走。最后用户原地爆炸,一封投诉信直接抄送了领导。接手这个项目之后,我越来越确认一件事:在AI Agent这个位置上,情感计算能力不是给系统加一点“人情味”的锦上添花,而是直接影响任务链路能否继续的关键输入。这篇就围绕“AI Agent的情感计算能力”这个主题,把技术边界、链路搭建、决策层接入、参考实现和踩坑记录全部摊开讲。适合正在做对话系统、客服机器人、语音外呼、情绪陪练类产品的算法工程师、产品经理和后端开发,也适合想从“意图识别”往“交互质量”迈一步的团队参考。

1. 先把边界说清楚:AI Agent的情感计算能力到底在算什么

情感计算这个词在学术界吵了很多年,落在AI Agent这个具体场景里,我更喜欢用“听诊器”来类比。它不是给Agent装一颗能共情的心脏,而是在输入端加一个听诊器,让系统随时知道“用户当前处于哪种情绪状态、强度多大、风险多高”。听诊器不负责治疗,但它决定医生要不要采取干预措施。没有它,对话系统就像蒙着眼睛接线,意图再准也会在情绪激化的时候失效。

1.1 我对情感计算在Agent体系中定位的三个判断

第一个判断是:情感计算是一种输入信号增强,不是意图识别的替代品。传统对话系统把用户每一句话都压缩成“意图+槽位”,这在任务型场景里够用,但丢掉了一整层信息——用户是平静地在问,还是压着火在问;是犹豫着求助,还是已经很不耐烦。情感计算的本质是把这层信息重新捞回来,作为旁路信号送进决策模块。

第二个判断是:情感计算要输出可操作的结构化结果。单纯给一句话打上“愤怒”标签没有意义,Agent真正需要的是“当前愤怒强度0.83,且连续两轮上升,Trigger words包括‘投诉’‘领导’”,这样决策器才能判断是安抚、让步还是转人工。

第三个判断是:情感计算必须和任务状态联动。脱离对话场景的情绪判断价值有限。同样是“怎么还没好”,在排队场景里是焦虑,在业务办理完成场景里可能只是随口催一句。所以这个能力不能做成孤立分类器,必须能读到上下文和任务进度。

1.2 它实际解决的几类问题

我在不同项目里反复验证过,情感计算能力在生产环境里解决的基本是这四类问题:

场景情感信号的作用典型收益
客服投诉拦截识别愤怒、失望,触发安抚或转人工投诉升级率下降、差评减少
语音外呼回访捕捉“不耐烦”信号,主动缩短话术有效通话时长提升
智能辅导、心理陪练类产品感知焦虑情绪,切换回答节奏和语气用户留存和完成率上升
会话质检情绪标签作为过程指标,辅助坐席协同高危会话提前发现

拿语音外呼来说,我做过一个回访项目,最初外呼话术固定,用户一旦开始用短句回应(“嗯”“行”“好”),系统还在按稿子读下一段。加入情感计算后,只要检测到不耐烦情绪超过阈值,Agent会立刻跳转到最简短的收尾式确认,并且尝试预约下一次回访。这个改动让成单意愿没有下降,但打扰感明显降低,接通后的有效互动时长提升了约三分之一。

1.3 能力边界:它不能做什么

我得先把边界划清楚,否则团队容易对这个能力产生不切实际的期望。情感计算不能探测用户的深层人格,也不建模用户长期的抑郁倾向或心理诊断结果,这类医学属性的事情离对话系统太远,出问题就是大事。

它也不能替代真正的人类安抚。系统能在情绪升级时给出恰当话术,但Agent不真的“感受”到用户的愤怒,一旦设计者把“共情”当成模型的能力,就会出现“我理解你的心情”被反复空转使用的尴尬情况,用户听多了反而更火。

情感计算的角色更像是一个早期预警雷达:它能告诉系统“这里可能要出事”,然后把处理权交给策略层。判断能不能在商业场景里用起来,不是看模型情绪识别准确率多高,而是看误报率和漏报率分别会造成什么影响。

2. 技术链路怎么搭:文本、语音与多模态信号的处理取舍

确认情感计算是输入信号增强之后,就该聊落地链路了。多数Agent产品都会同时面对文本和语音两条输入通道,我的经验是不要一上来就追多模态大模型,先按信号质量拆分处理,再在决策层做融合,性价比最高。

2.1 文本侧最省力的做法:情绪分类器加强度回归

文本情感计算最常见的落地形态是:预训练语言模型 + 两个输出头。一个头做情绪分类,输出 P(愤怒)、P(焦虑)、P(失望)、P(中性)、P(积极);另一个头做强度回归,输出0到1之间的情绪强度值。这样既能回答“用户是不是生气了”,也能回答“现在有多生气”,后者对决策层更重要。

不要直接用通用情感分析API当生产方案。通用模型在社交媒体语料上表现不错,但放到“还款日没还上钱被扣了滞纳金”这种领域语境里,经常把合理的业务抱怨误判成情绪爆发。领域微调是必须的,哪怕只有两千条对话语料,也比直接用通用模型强。

2.2 语音侧容易被忽视的副语言特征

如果Agent走语音通道,光看ASR转写文本会丢掉大量情绪线索。同一个“好的”,用平稳语气说和用摔键盘式的重音说含义完全不同。所以语音侧要做副语言特征分析,我常用的是这几个:

  • F0均值与抖动:音调整体抬高通常是情绪激化的信号。
  • 语速突变:比平均语速明显加快,或者突然卡顿,都值得关注。
  • 短句比例:用户从长句突然换成极短回应时,往往是耐心下降的标志。
  • 音量包络与能量斜率:音量陡然上升,配合内容可确认愤怒程度。
  • 停顿长度:过长的停顿可能意味着犹豫或强烈不满。

在工程上,副语言特征可以用Signal Processing方式快速算出,也可以直接丢给预训练模型提取Embedding。前者解释性强、延迟低,后者更鲁棒。我的取舍建议是先上轻量特征,把召回率调到能用的水平,再考虑引入更重的模型。

2.3 文本和语音在决策层融合,而不是特征层硬拼

同时有文本和音频信号时,不要着急把两种向量直接拼起来送入分类器。文本和语音的置信度在不同场景下会剧烈变化:ASR在嘈杂环境下错误率高,副语言特征在音乐背景音下也不可靠。更稳的做法是在决策层融合,文本模型给一个情绪分布,语音模型给一个情绪分布,再用置信度加权合并,并在规则层做门控。

例如文本强烈提示“愤怒”,但语音韵律完全平静,那多半是用户在打字场景或者ASR出了问题,应该以文本为主;如果语音显示语速急促、音调上浮,文本却是中性的客气话,那可能是“反话”,也要在系统里留下怀疑标记。

2.4 模型选型的现实取舍

方案优点缺点适应阶段
通用情感API接入快、零标注领域偏差、无强度、延迟不可控原型验证
领域微调分类器准确率高、可解释、可迭代需要标注数据生产主力
规则+热词表零延迟、完全可解释召回有限、维护成本高实时安全拦截兜底

我最常用的生产组合是“领域微调分类器 + 规则热词兜底”。微调模型负责处理复杂句式,规则表负责拦住“投诉”“315”“法律途径”这种绝对不能漏的高危信号。两条路并行,任何一条触发都计入风险评分。

3. 真正的难点在决策层:情绪信号如何接入Agent工作流

识别用户情绪只是第一步,真正的难点在于怎么让Agent基于情绪信号改变自己的行为策略。我见过太多团队把情感计算做成一个“显示器”,页面上一排情绪标签滚动播出,但对话逻辑一点没改。这种项目上线等于没上线。

3.1 意图和情绪必须拆成两条流水线

情绪识别不能挂在NLU意图分类器里作为一个标签输出。原因很简单:用户一句话往往同时包含意图和情绪,“我要投诉,你们太欺负人了”里“投诉”是意图,“愤怒”是情绪,它们是正交的,硬塞进同一个多标签分类器会让训练信号互相干扰。

实际架构应该是:NLU负责抽意图和槽位,情感计算模块负责输出情绪快照,两条流水线并行,结果一起送给对话管理模块。如果意图是“改地址”,情绪是“愤怒”,系统要走“先说安抚话术,再简化操作步骤”的路径;如果意图是“改地址”,情绪是“中性”,就可以走普通流程。

3.2 情绪在控制层当成条件信号,而不是装饰变量

对话管理模块里有两个常见做法,一个是基于规则的状态机,一个是基于大模型/LangChain这类框架的Plan-and-Execute。不管哪种,情绪都应该是状态转移的条件,而不是旁白信息。

状态机场景里,状态转移条件从原来的“意图匹配”扩展成“意图匹配 AND 情绪条件”。比如“退款”意图下有一个子状态叫“确认退款原因”,如果当前情绪是中性,正常追问;如果愤怒强度大于0.6,则跳过追问,直接确认账号信息并加快处理。大模型Agent场景里,情绪信号则要写进Prompt或作为工具调用的参数传进去,让Agent在规划下一步动作时把情绪风险作为一个约束条件。

3.3 记忆模块里必须存一份“情绪轨迹”

单轮情绪分类只告诉你用户这一刻的状态,但用户情绪在对话里是波动的。有人第一轮就发火,后面逐渐平息;有人前两轮很平静,最后突然爆发。后者才是真正危险的用户,因为爆发前没有明显单点异常。

所以我会在会话记忆里单独维护一个情绪轨迹:每轮情绪快照 + 强度打分 + 触发词列表。决策时可以这么用:如果用户近三轮情绪强度持续高于0.7,直接触发人工接入提醒;如果用户在第一轮有过一次高愤怒,但后续两轮回落,可以只保留“用户曾动怒”的marker,在最终话术里加一句致歉收尾,不做过度干预。

3.4 安全护栏与拒答策略

情绪计算接入生产系统的同时,一定要配置安全护栏。护栏至少要覆盖三类情况:

  • 威胁型内容:涉及法律投诉、媒体曝光、人身安全,必须立刻转人工,不需要继续试探。
  • 非理性诉求:比如反复要求一个超出权限的赔偿方案,Agent不能因为用户情绪激动就“承诺”任何无法兑现的东西。
  • 兜底话术池:当情绪触发了安抚策略但任务仍无法推进时,要有固定话术把用户平稳转交给人工,并同步上下文摘要。

提示:安抚话术不要反复出现同一个句子。用户情绪越是激动,越能敏锐地识破“AI在敷衍我”。话术池至少要保证同一个会话里同一句话最多出现两次。

4. 参考实现:一个带情绪策略的状态机对话模块

理论部分聊透了,我给一个可以拿去改的参考实现。这个实现用Python写,核心思路是:情绪快照是数据结构,融合函数负责把文本和语音信号合并成风险分,策略器根据风险分和当前意图决定下一步动作,记忆模块记录情绪轨迹。它不依赖具体某家的模型接口,微调模型、ASR、语音特征模块全部可以替换成你们自己的服务。

from dataclasses import dataclass, field from enum import Enum from typing import List, Dict, Optional # ---------- 基础数据结构 ---------- class EmotionType(str, Enum): ANGER = "anger" ANXIETY = "anxiety" DISAPPOINTMENT = "disappointment" NEUTRAL = "neutral" POSITIVE = "positive" @dataclass class EmotionSnapshot: anger: float anxiety: float disappointment: float neutral: float positive: float intensity: float trigger_words: List[str] = field(default_factory=list) @property def dominant(self) -> EmotionType: scores = { EmotionType.ANGER: self.anger, EmotionType.ANXIETY: self.anxiety, EmotionType.DISAPPOINTMENT: self.disappointment, EmotionType.NEUTRAL: self.neutral, EmotionType.POSITIVE: self.positive, } return max(scores, key=scores.get) def risk_score(self) -> float: # 加权风险分:愤怒权重大,失望次之,焦虑作为辅助信号 return ( self.anger * 0.6 + self.disappointment * 0.3 + self.anxiety * 0.1 + self.intensity * 0.2 ) # ---------- 策略定义 ---------- class AgentAction(str, Enum): NORMAL = "normal" PACIFY = "pacify" FAST_TRACK = "fast_track" ESCALATE = "escalate" @dataclass class PolicyDecision: action: AgentAction reason: str next_step: str should_transfer_to_human: bool = False class EmotionAwarePolicy: """ 基于情绪风险和任务状态决定Agent动作。 策略优先级从上到下递增。 """ def decide( self, snapshot: EmotionSnapshot, current_intent: str, consecutive_high_emotion: int, task_in_progress: bool, ) -> PolicyDecision: # 高危信号直接转人工 high_risk_words = {"投诉", "法律", "媒体", "315", "领导"} if high_risk_words.intersection(snapshot.trigger_words): return PolicyDecision( action=AgentAction.ESCALATE, reason=f"触发高危关键词: {high_risk_words.intersection(snapshot.trigger_words)}", next_step="transfer_to_human_with_context", should_transfer_to_human=True, ) risk = snapshot.risk_score() # 连续多轮高强度情绪,不纠结规则,直接升级 if consecutive_high_emotion >= 2 and risk > 0.7: return PolicyDecision( action=AgentAction.ESCALATE, reason="连续两轮情绪强度超阈值", next_step="transfer_to_human_with_context", should_transfer_to_human=True, ) # 任务进行中但情绪开始升温,优先安抚 if risk > 0.6 and task_in_progress: return PolicyDecision( action=AgentAction.PACIFY, reason="任务推进中检测到情绪升温", next_step="use_pacifying_template_then_resume_task", ) # 意图本身高风险,配合情绪信号走快车道 if current_intent in {"退款", "投诉", "售后"} and snapshot.dominant in { EmotionType.ANGER, EmotionType.DISAPPOINTMENT, }: return PolicyDecision( action=AgentAction.FAST_TRACK, reason="高风险意图搭配负向情绪", next_step="simplify_operation_steps", ) return PolicyDecision( action=AgentAction.NORMAL, reason="情绪状态正常", next_step="continue_normal_dialog", ) # ---------- 记忆模块:情绪轨迹 ---------- @dataclass class EmotionMemory: max_len: int = 8 history: List[EmotionSnapshot] = field(default_factory=list) def add(self, snapshot: EmotionSnapshot) -> None: self.history.append(snapshot) if len(self.history) > self.max_len: self.history.pop(0) @property def consecutive_high_emotion(self) -> int: count = 0 for snap in reversed(self.history): if snap.intensity >= 0.7: count += 1 else: break return count def trends_up(self) -> bool: """近三轮情绪风险是否持续上升""" if len(self.history) < 2: return False recent = [snap.risk_score() for snap in self.history[-3:]] return recent[-1] > recent[-2] > recent[-3] # ---------- 融合模块:文本情感 + 语音韵律 ---------- class EmotionFusion: """ 文本和语音信号在决策层融合。 简单做法:按置信度加权求和,再用规则门控。 """ TEXT_WEIGHT = 0.65 VOICE_WEIGHT = 0.35 def fuse( self, text_emotion: EmotionSnapshot, voice_emotion: Optional[EmotionSnapshot], text_conf: float = 0.8, voice_conf: float = 0.6, ) -> EmotionSnapshot: if voice_emotion is None: return text_emotion w_text = self.TEXT_WEIGHT * text_conf w_voice = self.VOICE_WEIGHT * voice_conf total = w_text + w_voice fused = EmotionSnapshot( anger=(text_emotion.anger * w_text + voice_emotion.anger * w_voice) / total, anxiety=(text_emotion.anxiety * w_text + voice_emotion.anxiety * w_voice) / total, disappointment=(text_emotion.disappointment * w_text + voice_emotion.disappointment * w_voice) / total, neutral=(text_emotion.neutral * w_text + voice_emotion.neutral * w_voice) / total, positive=(text_emotion.positive * w_text + voice_emotion.positive * w_voice) / total, intensity=(text_emotion.intensity * w_text + voice_emotion.intensity * w_voice) / total, trigger_words=list(set(text_emotion.trigger_words) | set(voice_emotion.trigger_words)), ) return fused # ---------- 组装成一个最小可用的Agent节点 ---------- class EmotionAwareDialogAgent: def __init__(self, text_model, voice_model=None, policy=None): # text_model: 输入文本 -> EmotionSnapshot # voice_model: 输入音频特征 -> EmotionSnapshot(可空) self.text_model = text_model self.voice_model = voice_model self.fusion = EmotionFusion() self.policy = policy or EmotionAwarePolicy() self.memory = EmotionMemory() def step(self, user_text: str, voice_snapshot: Optional[EmotionSnapshot] = None, current_intent: str = "", task_in_progress: bool = False) -> PolicyDecision: text_snapshot = self.text_model.predict(user_text) fused = self.fusion.fuse(text_snapshot, voice_snapshot) self.memory.add(fused) consecutive = self.memory.consecutive_high_emotion decision = self.policy.decide( snapshot=fused, current_intent=current_intent, consecutive_high_emotion=consecutive, task_in_progress=task_in_progress, ) return decision

这个实现有四个地方值得单独说明。

一是risk_score()的权重为什么是0.6、0.3、0.1、0.2。愤怒权重最高,因为几乎所有高危场景都伴随愤怒;失望次之,用户还没爆发但有强烈不满时会表现为失望;焦虑权重最低,因为焦虑本身不一定需要升级处理,有时只是需要信息确认。

二是高危关键词触发不做任何条件判断,直接转人工。这个属于安全底线。哪怕用户只是顺嘴提到“媒体”,也值得让真人坐席做一次判断,总比漏掉一个真正要曝光的用户好。

三是consecutive_high_emotion >= 2 and risk > 0.7这个组合条件。单轮高强度情绪有可能是用户一时情绪上头,连续两轮高强度才说明用户没有被Agent的话术安抚下来,这时候继续用AI机器人生扛反而是激化矛盾。

四是趋势判断trends_up()。这个函数不会单独触发升级,但会放进转人工的上下文摘要里。“用户风险分持续上升”比“用户当前很生气”对坐席更有参考价值。

代码里的text_model.predict和voice_model都是接口占位。真实生产里text_model就是一个微调过的分类模型,voice_model可以是韵律特征工程加简单分类器,也可以换成预训练语音模型提取Embedding,差异只在这两个接口的实现方式。

5. 实测最容易翻车的四个场景与完整排查思路

参考实现看起来逻辑清晰,一上线就会碰上各种实际数据带来的意外。这一章我想把这些坑完整写出来,每个都按“现象-排查-修复”的链路摊开,读者以后遇到类似问题能直接照思路查。

5.1 用户说反话:为什么分类器会把讽刺当正面

现象:用户在投诉“你们处理得可真好呢”,文本分类器输出结果是“积极”情绪,Agent欢快地回复“感谢您的肯定”,场面一度非常尴尬。

排查链路:先查单句词汇特征,发现“好”“肯定”“处理”都是正面词,分类模型被字面语义带偏。再查短语级特征,“可真好呢”这种语气词组合在训练语料里出现太少,模型根本没学会反讽。最后检查标注数据,发现语料里几乎没有“表扬式批评”的口语表达。

修复方案分两层。第一层是在数据层面做反讽句式增广:把“真是谢谢您了啊”“您可太负责了”这类句式结合上下文重新标注,让模型见过这些模式。第二层是引入语气词特征和句式模板规则,比如检测到“可真”“太”“啊”“呢”与正面形容词同时出现,并且前一帧意图是投诉类时,将结果强制标为疑似愤怒,置信度降低。最后一层靠语音信号:如果语音检测到音调上浮、语速加快,就基本可以确认反讽。

5.2 领域词被误判成情绪词:为什么“又扣费了”被判成愤怒

现象:正常用户询问“手续费怎么又扣了”,系统判断为愤怒,触发安抚话术,用户一脸莫名其妙。

排查链路:先看热词表,发现“扣”被列进了负面触发词。再看模型Attention,发现“扣”和“又”权重很高,但用户语境里的“扣”是金融业务里的“扣费”,不是情绪表达。最后检查训练集,证实“扣”在客服语料里大量出现在中性业务句,这属于领域语义偏移。

修复方案:把业务领域词表接入情感特征。凡是同时命中业务实体库的词(扣费、手续费、账单周期等),先从情绪触发词中降权;同时增强训练数据的负样本,把“查询扣费原因”“咨询账单”这类中性意图和真正表达愤怒的“扣钱凭什么”分开标注。修改后这类误判明显减少,同时“扣钱凭什么”这类真实愤怒仍能被识别。

5.3 阈值僵化导致的情感盲区

现象:用户已经在用极端表达,比如“我真的受不了了”“你们等着”,但系统因为单轮情绪强度没有达到0.8阈值,继续走普通流程。

排查链路:先验证分类模型本身,人工看样本判断确实算高危。再查策略层,发现阈值0.8是拍脑袋定的,单轮高风险被压住。接着看对话轮次,发现这类用户往往前面几轮情绪已经缓慢爬升,是从0.4涨到0.7的,而不是突然跳到0.8。

修复方案是引入动态阈值和意图加权。同样是0.7的强度,意图是“查询账单”时不需要干预,意图是“投诉”“退款”时风险分直接加0.15。再结合连续轮次判断,用户近三轮如果风险分持续上升,即使单轮没到阈值也进入安抚流程。实测后高危会话识别率提升,误报率也只在可接受范围。

5.4 短文本和方言:模型对“嗯”“行”“无语”几乎失效

现象:语音外呼场景里,用户不耐烦了开始用最短回应,系统完全看不出来,还在按长话术往下读。

排查链路:先检查文本长度对置信度的影响,发现两个词的句子在分类模型上输出的中性概率极高,分类器对短文本天然保守。再听录音,发现用户回“嗯”时音调有明显的下沉和拖长,但因为系统只看ASR结果,情绪信号完全丢失。最后确认方言影响,某些地区口语表达不在通用词表里,模型直接按neutral处理。

修复方案是把语音副语言特征提到和文本同等权重。针对两个词以内的短句,放弃依赖文本分类,主要由语速、音调、音量包络斜率来判断。在文本侧,加一个方言小词典和拼音归一化预处理,把同义口语映射到标准表达。修改后“嗯”“行”这类回应不再是盲区。

6. 没有现成数据集时,怎么建评估集和度量效果

很多团队问我的第一个问题是“有没有公开的情感数据集可以直接用”。公开数据集可以做预训练和冷启动,但真正上线前必须建一套贴合自己业务语料的评估集,否则你根本不知道自己模型在真实场景里漏多少、误多少。

6.1 三个靠谱的语料来源

真实对话脱敏改写是最有价值的来源。把客服历史会话、语音转写记录做脱敏处理,抽取出含有情绪波动的片段,再人工标注。这部分数据最贴近线上真实分布,是评估集的基石。

模拟对白补足长尾场景。让运营、坐席、产品经理分角色扮演用户和Agent,设定好“情绪逐渐升级”“故意刁难”“反讽表达”等剧本,生成一批覆盖情绪标签的对话。模拟数据缺点是不够自然,但优点是指定标签齐全,能把边界场景补齐。

大模型合成加人工校验。用LLM生成一批符合指定情绪和场景的对话,但要设置好审核环节,因为LLM生成的情绪表达容易模式化,同一个句式反复出现,需要人工挑选去重。

6.2 标注方案与关键指标

标注单位我建议用轮次而不是单句。单句脱离上下文很容易误判,比如“好的”单独看是正向,但放在投诉场景里可能是极不耐烦的敷衍。轮次级标注可以让标注员参考前文意图和语境。标注标签分成三层:情绪类别、强度1到5、是否反讽标记。

评估指标上不要只盯着准确率,我更看重三个:

指标定义参考目标
情绪召回率标注为高危(强度4-5)且被系统召回的比例0.85以上,安全场景0.9以上
意图干扰率引入情绪模块后意图识别F1值下降的幅度下降不超过0.02
策略采纳率Agent实际触发安抚/升级策略与系统建议的比例视场景而定,95%以上

情绪召回率是安全底线。漏一次高危用户,可能导致投诉升级甚至危险事件,所以在情感计算上我坚持“宁可误报,不可漏报”。而意图干扰率是衡量情绪旁路有没有污染主任务的标准,理想状态是两条流水线各干各的,互不影响。

6.3 评估集一定要分层

建评估集时不光要看总量,还要分层看:普通问询层、业务投诉层、反讽噪声层、方言短文本层。每一层单独报指标。如果反讽层召回率只有0.4,说明模型对讽刺表达没有泛化能力;如果方言层准确率低,说明预处理环节有问题。分层评估能让你准确知道下一步是补数据、换模型还是加规则。

7. 下一阶段:从“算情绪”走向“用情绪做协同”

项目做久了,我对情感计算应用的看法会从一个“识别模块”逐渐变成一种“协同策略”。单轮情绪快照只是起点,更值得做的是把情绪轨迹、任务进度、用户耐心预测三者联动。

比如我们可以在记忆模块里维护一条情绪趋势线,用滑动平均计算风险分是上升还是回落。趋势向上的用户在真正爆发前就标为高危,提前转入工队列。这个比单轮阈值判断更早发现问题。

把意图滞后和情绪强度结合起来做耐心预测也很有价值。如果一个用户已经重复同一个意图三次、情绪强度在缓慢上升、并且输入长度在逐渐变短,这三个信号同时出现时,基本可以断定用户耐心已经接近临界点。这时候Agent要做的不是继续解释,而是快速提供一个可执行的解决方案,或者直接给人工接入入口。

策略层也应该从“固定安抚话术”走向“多策略组合”。情绪计算只告诉系统用户现在是什么状态,真正改变体验的是Agent能不能根据状态灵活选择“倾听式回复”“任务加速”“条件补偿”“人工交接”四条路。我参与过的项目里,把安抚话术与“简化步骤”联动,比单纯说“抱歉”的效果好得多;把转人工的判断权利交给情绪轨迹趋势,也比让用户反复点击“转人工”入口友善得多。

做了这么多工程化落地之后,我自己的体感是:情感计算真正成熟的样子,不是让用户觉得“这个机器人懂我”,而是让用户不知不觉发现自己没有被逼到只能点投诉。这个目标不大,但比一句漂亮话重要得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询