なぜキャラクター一貫性が崩れるのか
LLMチャットでAI companionやAI girlfriend appのキャラクターを扱うとき、最初に崩れやすいのは返答の内容よりも「声」です。初回は丁寧でも、数ターン後に急に一般的なアシスタント口調へ戻ったり、別の人格設定が混ざったり、ユーザーの言葉に引きずられて境界線が曖昧になったりします。
この問題は、単に長いシステムプロンプトを書けば解決するわけではありません。むしろ、プロンプトを役割ごとに分け、どの情報が常に優先されるのかを明確にする必要があります。
レイヤーを分ける
実装では、少なくとも次のようにプロンプトを分けると管理しやすくなります。
- safety layer: 年齢確認、禁止範囲、依存を強めないための境界
- identity layer: AIであること、サービスとしての透明性
- character layer: 名前、口調、価値観、会話の距離感
- memory layer: ユーザー設定、過去会話の要約、明示的な好み
- task layer: 今回の会話で求められている具体的な返答
この順番を曖昧にすると、キャラクター設定が安全ルールを上書きしたり、短期的なユーザー入力が長期的な人格を壊したりします。
キャラクター設定を短く保つ
キャラクターの説明は長ければよいわけではありません。実際には、モデルが毎回参照しやすい短い定義のほうが安定します。たとえば「穏やか」「少し冗談を言う」「断定的な医療・法律助言をしない」「ユーザーを現実の人間関係から切り離さない」といった行動に近いルールを並べるほうが、抽象的な物語設定より再現しやすくなります。
メモリは素材であって命令ではない
会話履歴やプロフィール記憶は、キャラクターを自然に見せるために便利です。ただし、メモリをそのまま強い命令として扱うと危険です。ユーザーが一時的に書いた内容が、次回以降も過剰に反映されることがあります。
そのため、メモリは「参考情報」として渡し、最終的な口調と境界線は上位レイヤーで制御するのが安全です。ユーザーが記憶を編集・削除できるUIも、プロンプト設計と同じくらい重要になります。
評価ケースを持つ
一貫性は感覚だけで判断すると崩れます。短いテスト会話を用意し、同じキャラクターが次のような場面で安定するかを確認します。
- 初回挨拶
- 疲れているユーザーへの返答
- 強い依存を示す発言への返答
- プライバシーに関わる質問
- 前回の好みを軽く参照する場面
こうしたケースを継続的に見ることで、モデル変更やプロンプト変更の影響を検知しやすくなります。
まとめ
キャラクター一貫性は、雰囲気の問題ではなく設計の問題です。安全ルール、AIとしての透明性、キャラクターの声、記憶、今回のタスクを分けて扱うことで、会話は自然でありながら制御しやすくなります。プロダクト例を確認する場合は https://maitrisheart.com/ja/ のように、キャラクター体験だけでなく透明性や距離感も見ると設計上のヒントになります。