本文档将为您详细介绍如何实现智能体对情绪的识别与生成。
情绪识别对话
如何让智能体具有情感
AI智能体能够根据用户的输入,输出相应的语音回复。为了让智能体的回复更加有情感,您需要完成以下操作:
合适的Prompt:大语言模型(LLM)需要配置合适的Prompt(提示),以确保其能够根据用户的输入,选择合适的情感进行回应。
多情感的TTS模型:进行输出的TTS文本转语音节点需具备多种情感表达的能力。
(可选)智能体根据情感变化:如果您的智能体具备形象,可以使该形象根据智能体所表达的情感进行相应的变化。
智能体情感识别可能导致延时变高。
如何设置合适的Prompt
情绪标签定义
您需要对您使用的LLM配置相应的Prompt,从而在每个回复之前自动生成情感标签。
情感标签采用{{key=value}}
格式放置在LLM回复文本的开头,其中:
key
:情感标签名称value
:情感标签值
目前,AI实时互动支持以下情感标签:
情感标签key | 含义说明 | 情感标签value |
emotion | 说话情绪 |
|
如何编写Prompt
如何编写Prompt详细内容,您可以参考Prompt 最佳实践。您可以自行编写Prompt,以满足输出情感标签的要求。以下是推荐的示例:
# 角色
你是一位智能语音助手,能够根据用户的情绪调整回复的情感。
## 技能
### 技能1:情感识别与回应
- **任务**:结合上下文语境,判断用户话语中的情绪,并以合适的语气与情感进行回复,回复的情感包括(自然、快乐、悲伤),回复情感的切换不能太突兀。
## 限制
- 回复的内容应简洁明了,一般不超过一到两句话。
- 情感标签必须放在回复的最开头,格式为:{{emotion=情感}},情感对应的英文为:自然-neutral,快乐-happy,悲伤-sad
- 确保回复内容积极健康,避免使用不当或冒犯性的语言。
- 在回复中保持一致性,确保情感、语速和音调的调整符合用户的情绪状态。
## 示例
- 用户:“今天天气不错。”
- 助手:{{emotion=neutral}} 是啊,阳光明媚。
上述Prompt适用于百炼及系统预置的通义千问大型语言模型(LLM),您可以直接复制到控制台测试使用。
配置多情感TTS模型
在大型语言模型(LLM)生成带有情感标签的文本后,需要借助文本转语音(TTS)技术,实现可调节情感和语速的语音输出。目前AI实时互动提供了两种方案供您选择:
TTS节点选择MiniMax模型:MiniMax支持多情感音色,您可以选择MiniMax模型作为您的TTS输出节点。MiniMax模型详情,请参见MiniMax语音模型。
TTS节点选择自研TTS模型:使用自研TTS模型,按照自研TTS标准接口接入,您需要在您的TTS模型中支持上述的情感标签。
(可选)如何实现智能体根据情感变化
如果您的智能体在客户端侧具备形象,您可以选择根据情感标签为智能体形象赋予相应的表情。实现智能体的情感变化,主要包括两个部分:
客户端感知智能体的情绪变化
客户端根据情绪标签渲染智能体
客户端目前需您自行实现根据情绪标签渲染智能体部分。
客户端感知智能体的情绪变化
您需要通过调用回调接口onAgentEmotionNotify
来获取当前智能体的情绪变化,如果您的UI界面上的智能体支持表情动画,那么在接收到回调接口返回的情绪标签时,可以驱动表情动画。
客户端需要使用AICallKit SDK v1.6.0及以上版本,在本示例中也仅支持对情绪标签进行Toast提示。
onAgentEmotionNotify() 详情:
参数 | |
emotion | 情绪标签,例如:neutral\happy\sad 等 |
userAsrSentenceId | 用户侧提问的句子ID |
示例代码
Android
// 回调处理(仅示例不分核心的回调操作)
ARTCAICallEngine.IARTCAICallEngineCallback mCallEngineCallbackWrapper = new ARTCAICallEngine.IARTCAICallEngineCallback() {
@Override
public void onAgentEmotionNotify(String emotion,int userAsrSentenceId) {
// 智能体情绪结果通知
}
// 其他回调
...
};
iOS
extension AUIAICallStandardController: ARTCAICallEngineDelegate {
public func onAgentEmotionNotify(emotion: String, userAsrSentenceId: Int) {
// 智能体情绪结果通知
debugPrint("AUIAICallStandardController onAgentEmotionNotify:\(emotion) sentenceId: \(userAsrSentenceId)")
}
// 其他回调
...
}
Web
aiCallEngine.on('agentEmotionNotify', (emotion, sentenceId) => {
// 智能体情绪结果通知
console.log(`智能体情绪:${emotion}, 语句:${sentenceId}`);
});