1. 业务背景与需求拆解在AI陪伴产品Found中我们需要将用户每次的倾诉文本转化为两个输出能量值0-100的连续分数反映用户当下的情绪能量水平情绪关键词1-3个标签如“疲惫”“平静”“被听见”“焦虑”核心挑战情感强度受否定词、程度副词、感叹号等语法特征影响大单一的情感分类模型正/负无法满足连续值的需求需要保证实时性对话后秒级响应选型考量不追求大模型采用“轻量规则小模型”混合架构降低推理成本便于快速迭代。2. 整体架构设计规则引擎负责文本预处理、否定词/程度副词检测、标点符号强度修正分类模型基于BERT-mini微调的5分类器能量映射将分类概率 规则系数 → 能量值异步队列将用户画像更新、分析日志落库等任务异步化不阻塞主请求3. 规则引擎的实现细节3.1 否定词链检测python negation_words {不, 没, 无, 并非, 不是} def detect_negation_chain(text): # 检测连续否定词如“不是不累” # 返回翻转次数3.2 程度副词系数表示例程度词系数示例非常、特别1.5“非常累” → 能量×1.5有点、稍微0.7“有点烦” → 能量×0.7极其、简直1.8“简直崩溃” → 能量×1.83.3 感叹号与重复字处理连续感叹号“!!!”→ 强度30%重复字“好累好累好累”→ 强度×1.24. 轻量分类模型的微调4.1 数据集构建使用Baidu Sentiment中文情感分类约10万条、RenCECps细粒度情绪约2万条人工标注2000条“能量相关”对话从内测数据脱敏。5个类别平静、疲惫、焦虑、被听见、兴奋。4.2 模型选型bert-mini4层384维参数量11MCPU推理50ms。相比于BERT-base体积减少80%速度提升5倍准确率下降控制在3%以内。4.3 训练策略学习率2e-5batch size32epoch3轮类别不平衡处理加权loss4.4 评估结果类别精确率召回率F1疲惫0.820.790.80焦虑0.780.810.79平静0.850.860.85被听见0.740.700.72兴奋0.800.830.815. 能量值映射算法核心公式基础能量映射表疲惫→20-40焦虑→30-50平静→50-70被听见→60-80兴奋→70-90动态修正根据上下文情感一致性调整如连续3条负面情绪且强度递增能量值额外-10%6. 异步任务队列的设计为避免情感分析阻塞主对话链路采用Redis Celery异步队列用户对话结束后主请求立即返回“生成中”不等待分析完成分析任务推入队列worker异步执行结果写入Redis缓存TTL 7天前端轮询或websocket推送结果性能数据单worker处理能力约800次/分钟峰值延迟3秒。7. 线上运行数据与总结上线后累计处理对话请求xxx万次因早期项目可写“数千次”平均能量值分布中位数56标准差18符合正态分布用户对能量卡的主动点击率42%内测数据规则模型混合方案整体准确率与用户自评对比约76%未来优化方向引入对话历史上下文使用LSTM或Transformer捕捉情绪演变多模态语音语调分析已接入腾讯ASR但未用于情感个性化为每个用户微调能量映射参数8. 代码仓库与引用完整实现不便公开欢迎交流技术细节。