このトピックでは、AI エージェントがユーザーの感情を認識し、共感的な応答を生成する方法について説明します。
ワークフロー
エージェントの応答を表情豊かで共感的なものにするには、次の手順を実行します。
プロンプトを設定する:大規模言語モデル(LLM)は、ユーザー入力に基づいて感情的な音声を生成するために適切なプロンプトを必要とします。
感情制御可能な音声合成(TTS)モデルを統合する:TTS ノードは、さまざまな感情を表現できる必要があります。
(オプション)感情ベースのビジュアルを設定する:AI エージェントに視覚的表現がある場合は、感情に応じて表現を変更できるようにすることができます。
感情認識は応答の待機時間を増加させる可能性があります。
プロンプトを設定する
感情タグを定義する
感情タグは、LLM プロンプトで使用され、AI エージェントに感情の伝え方を指示します。 LLM は各応答の冒頭に感情タグを自動的に含めます。
形式:{{key=value}}。ここで:
keyはタグの名前です。valueはタグに割り当てられた値です。
AI リアルタイムインタラクションは、次のタグをサポートしています。
キー | 説明 | 値 |
emotion | 音声感情 |
|
プロンプトを作成する
プロンプトでは、各応答に感情タグを追加する方法を LLM に明示的に指示する必要があります。プロンプトの設計と最適化のガイダンスについては、「プロンプトエンジニアリングのベストプラクティス」をご参照ください。
プロンプトの例:
# 役割
あなたは、ユーザー入力に基づいて応答の感情的なトーンを調整できる音声アシスタントです。
## スキル
### スキル 1:感情認識と応答
- **タスク**: コンテキストの手がかりを通してユーザーの感情を分析し、ニュートラル、ハッピー、悲しいなどの適切なトーンで応答します。トーン間の移行がスムーズであることを確認します。
## 要件
- 応答内容は簡潔で、通常は 1 文または 2 文以内にする必要があります。
- 感情タグは、{{emotion=value}} の形式で応答の冒頭に配置する必要があります。有効な値には、neutral、happy、sad が含まれます。
- 応答は肯定的で健全なものにし、不適切な言葉や攻撃的な言葉は避けてください。
- 応答の一貫性を維持し、感情、話速、トーンの調整がユーザーの感情と一致するようにします。
## 例
- ユーザー:「今日は天気がいいですね。」
- アシスタント:{{emotion=neutral}} はい、晴れていて明るいです。サンプルプロンプトは、デフォルトの Qwen LLM および Alibaba Cloud Model Studio から統合された他のモデルで動作します。テストのためにコンソールにコピーできます。
感情制御可能な TTS モデルを統合する
LLM が感情タグ付きのテキストを生成した後、TTS モデルを使用して、感情と発話速度を調整可能な音声出力を生成します。
AI リアルタイムインタラクションには 2 つのオプションがあります。
MiniMax モデル:MiniMax は複数の感情トーンをサポートしています。 TTS ノードで MiniMax モデルを選択できます。詳細については、「MiniMax ドキュメント」をご参照ください。
独自開発の TTS モデル:入力および出力仕様に従って、独自の TTS モデルをワークフローに統合することもできます。詳細については、「TTS モデルにアクセスする」をご参照ください。
(オプション)感情ベースのビジュアルを設定する
AI エージェントにクライアント側で視覚的表現がある場合は、感情タグに従って表情を調整できます。これには 2 つのステップが含まれます。
クライアントは、エージェントの感情トーンが変化したことを検出します。
クライアントは、感情タグに従ってエージェントの視覚的表現をレンダリングします。レンダリングはクライアント側で実装する必要があります。
感情の変化を検出する
コールバックインターフェース onAgentEmotionNotify を使用して、感情の変化に関する通知を取得します。 UI が表情アニメーションをサポートしている場合は、コールバックを通じて感情タグを受信すると、これらのアニメーションをトリガーできます。
クライアントは AICallKit SDK V1.6.0 以降を使用する必要があります。この例では、感情タグのトースト通知のみがサポートされています。
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(`Agent emotion: ${emotion}, Sentence: ${sentenceId}`);
});