tegnike / aituber-kit

AITuber Kit
https://aituber-kit.vercel.app
Other
299 stars 61 forks source link

会話歴に感情タグが保存されないので会話を続けると感情がなくなる #233

Open tegnike opened 2 hours ago

github-actions[bot] commented 2 hours ago

Issue分析結果:

[
  {
    "file_path": "src/features/messages/speakCharacter.ts",
    "reason": "このファイルはキャラクターの発話処理を管理しており、感情表現の実装に関連している可能性が高いです。感情タグが保存されない問題の原因がここにある可能性があります。"
  },
  {
    "file_path": "src/features/emoteController/emoteController.ts",
    "reason": "このファイルはVRMモデルの感情表現を制御しています。感情タグの処理や保存に関連する問題がここで発生している可能性があります。"
  },
  {
    "file_path": "src/features/emoteController/expressionController.ts",
    "reason": "VRMモデルの表情制御を行うファイルで、感情表現の実装に直接関わっています。感情タグが正しく処理されていない可能性があります。"
  },
  {
    "file_path": "src/features/messages/messages.ts",
    "reason": "メッセージの処理と感情表現の変換を行うファイルです。感情タグが正しく保存されていない問題がここで発生している可能性があります。"
  },
  {
    "file_path": "src/pages/index.tsx",
    "reason": "アプリケーションのメインコンポーネントであり、チャットログの管理や状態の更新を行っています。感情タグの保存に関する問題がここで発生している可能性があります。"
  },
  {
    "file_path": "src/components/chatLog.tsx",
    "reason": "チャットログの表示を担当するコンポーネントです。感情タグが保存されていない場合、ここでの表示に影響が出る可能性があります。"
  },
  {
    "file_path": "src/features/chat/aiChatFactory.ts",
    "reason": "AIチャットレスポンスの生成を管理するファイルです。感情タグの生成や保存に関する問題がここで発生している可能性があります。"
  },
  {
    "file_path": "src/features/constants/systemPromptConstants.ts",
    "reason": "システムプロンプトの定義を含むファイルで、感情表現に関する指示が含まれている可能性があります。感情タグの生成に影響を与える可能性があります。"
  },
  {
    "file_path": "src/components/menu.tsx",
    "reason": "アプリケーションの設定やチャットログのリセットなどを管理するコンポーネントです。感情タグの保存に関する設定が不足している可能性があります。"
  },
  {
    "file_path": "src/features/vrmViewer/model.ts",
    "reason": "VRMモデルの管理を行うファイルで、感情表現の適用に関連している可能性があります。感情タグが正しく適用されない問題がここにある可能性があります。"
  },
  {
    "file_path": "src/features/chat/openAiChat.ts",
    "reason": "OpenAI APIを使用したチャット応答の生成を行うファイルです。感情タグの生成や保存に関する問題がここで発生している可能性があります。"
  },
  {
    "file_path": "src/features/chat/anthropicChat.ts",
    "reason": "Anthropic APIを使用したチャット応答の生成を行うファイルです。感情タグの生成や保存に関する問題がここで発生している可能性があります。"
  },
  {
    "file_path": "src/features/chat/googleChat.ts",
    "reason": "Google AI APIを使用したチャット応答の生成を行うファイルです。感情タグの生成や保存に関する問題がここで発生している可能性があります。"
  },
  {
    "file_path": "src/features/chat/groqChat.ts",
    "reason": "Groq APIを使用したチャット応答の生成を行うファイルです。感情タグの生成や保存に関する問題がここで発生している可能性があります。"
  },
  {
    "file_path": "src/features/chat/difyChat.ts",
    "reason": "Dify APIを使用したチャット応答の生成を行うファイルです。感情タグの生成や保存に関する問題がここで発生している可能性があります。"
  },
  {
    "file_path": "src/components/messageInputContainer.tsx",
    "reason": "ユーザー入力の処理を行うコンポーネントです。感情タグの生成や保存に関する処理がここで行われている可能性があります。"
  },
  {
    "file_path": "src/features/youtube/conversationContinuityFunctions.ts",
    "reason": "会話の継続性を管理する関数を含むファイルです。感情タグの保存や継続に関する問題がここで発生している可能性があります。"
  },
  {
    "file_path": "src/features/youtube/youtubeComments.ts",
    "reason": "YouTubeコメントの処理を行うファイルです。コメントから感情を抽出する処理が含まれている可能性があり、感情タグの保存に関連している可能性があります。"
  },
  {
    "file_path": "src/pages/api/anthropic.ts",
    "reason": "Anthropic APIを使用したサーバーサイドの処理を行うファイルです。感情タグの生成や保存に関する問題がサーバーサイドで発生している可能性があります。"
  },
  {
    "file_path": "src/pages/api/chat.ts",
    "reason": "チャットAPIのサーバーサイド処理を行うファイルです。感情タグの生成や保存に関する問題がサーバーサイドで発生している可能性があります。"
  }
]

コード改善案:

このIssueは、会話歴に感情タグが保存されず、会話を続けると感情がなくなる問題を指摘しています。コードを分析した結果、以下の問題点が特定されました: 1. 会話ログの保存方法が不適切で、感情タグが失われている。 2. 感情タグの処理が一貫していない。 3. 会話の継続性を保つための機能が不十分。 全体的に、感情タグの処理と保存に関する一貫したアプローチが欠けており、会話の自然さと継続性が損なわれています。 1. 会話ログに感情タグを含める 説明: 現在の実装では、会話ログに感情タグが保存されていません。感情タグを含めることで、会話の文脈や感情の流れを維持できます。 改善後のコード例: ```typescript // src/features/messages/messages.ts export type Message = { role: string; content: string; emotion?: VRMExpressionPresetName; // 感情タグを追加 }; // src/components/chatLog.tsx const Chat = ({ role, message, characterName, emotion, // 感情タグを追加 }: { role: string; message: string; characterName: string; emotion?: VRMExpressionPresetName; }) => { // 感情タグに基づいてスタイルを変更するロジックを追加 const emotionStyle = getEmotionStyle(emotion); return (
{/* ... */}
); }; ``` 2. 感情タグの一貫した処理 説明: 感情タグの処理を一貫させることで、会話全体を通じて感情の流れを維持できます。 改善後のコード例: ```typescript // src/features/chat/aiChatFactory.ts export async function getAIChatResponseStream( messages: Message[] ): Promise | null> { // ... const response = await fetchAIResponse(messages); const emotion = extractEmotionFromResponse(response); // レスポンスから感情を抽出 return new ReadableStream({ start(controller) { controller.enqueue(JSON.stringify({ text: response.text, emotion })); controller.close(); }, }); } // src/features/vrmViewer/model.ts public async speak( buffer: ArrayBuffer, screenplay: Screenplay, isNeedDecode: boolean = true ) { this.emoteController?.playEmotion(screenplay.expression); // ... } ``` 3. 会話の継続性を改善 説明: 会話の文脈を考慮し、感情の流れを維持することで、より自然な会話を実現できます。 改善後のコード例: ```typescript // src/features/youtube/conversationContinuityFunctions.ts export const getMessagesForContinuation = async ( systemPrompt: string, messages: Message[] ): Promise => { const lastTenMessages = getLastMessages(messages, 10); const lastEmotion = lastTenMessages[lastTenMessages.length - 1].emotion; const systemMessage = getCommonSystemMessage( systemPrompt, `- 与えられた会話歴に続く自然なコメントを生成してください。 - 直前の感情(${lastEmotion})を考慮し、適切に感情を変化させてください。 - 感情の急激な変化は避け、自然な流れを心がけてください。` ); return [{ role: 'system', content: systemMessage }, ...lastTenMessages]; }; ``` 4. 感情の変化を視覚的に表現 説明: ユーザーに感情の変化をより明確に伝えるため、VRMモデルの表情や動きを強化します。 改善後のコード例: ```typescript // src/features/emoteController/expressionController.ts export class ExpressionController { // ... public playEmotion(preset: VRMExpressionPresetName) { if (this._currentEmotion != 'neutral') { this._expressionManager?.setValue(this._currentEmotion, 0); } this._currentEmotion = preset; this._expressionManager?.setValue(preset, 1); // 感情に応じたアニメーションを追加 this.playEmotionAnimation(preset); } private playEmotionAnimation(preset: VRMExpressionPresetName) { // プリセットに応じたアニメーションを再生 switch (preset) { case 'happy': this._vrm.humanoid?.getNormalizedBoneNode('head')?.rotateY(0.1); break; case 'sad': this._vrm.humanoid?.getNormalizedBoneNode('head')?.rotateX(-0.1); break; // 他の感情についても同様に実装 } } } ```
これらの改善を実装することで、以下の効果が期待できます: 1. 会話の一貫性と自然さが向上し、ユーザーエクスペリエンスが改善されます。 2. 感情タグが適切に保存・処理されることで、長期的な会話の文脈が維持されます。 3. VRMモデルの表情やアニメーションが強化され、感情の変化がより明確に伝わります。 4. コードの構造が改善され、将来の機能拡張や保守が容易になります。 これらの改善により、アプリケーション全体の品質が向上し、よりリアルで魅力的な対話型AIキャラクターを実現できるでしょう。