AIグループチャットを構築する3つの方法:なぜ私たちは困難な道を選んだのか

Reverie Team
12/9/2025

すべての始まりとなった質問
「なぜ各キャラクターが他のアプリのように独自のメッセージ吹き出しを持てないのですか?」
この質問をよく受けます。正直なところ、素晴らしい質問です。ほとんどのチャットアプリはメッセージを別々の吹き出しとして表示します - 1人につき1つ。では、なぜ私たちのグループチャットは複数のキャラクターの返答を1つのメッセージにまとめるのでしょうか?
答えは怠慢でも見落としでもありません。これはAIグループ会話への3つの根本的に異なるアプローチを数ヶ月間実験した結果生まれた、意図的なエンジニアリングの選択です。
3つのアーキテクチャ
マルチキャラクターAI会話を構築する際、すべてのプラットフォームは同じ決断に直面します。方法は正確に3つあり、それぞれがコスト、品質、ユーザー体験に深い影響を与えます。
1. 構造化出力(JSON配列)
業界で最も一般的なアプローチ。AIにJSON配列を返すよう依頼し、各要素がキャラクターの返答を表します:
[
{
"speaker": "シャーロック",
"emotion": "興味津々",
"content": "興味深い。泥のパターンは..."
},
{
"speaker": "ワトソン",
"emotion": "困惑",
"content": "ホームズ、どういう意味ですか?"
}
]
魅力:
- 単一のAPI呼び出し、単一のクレジット消費
- 別々のメッセージ吹き出しとしてパースしレンダリングしやすい
- リッチなメタデータを含められる(感情、アクション、シーン説明)
- ユーザー返答候補の生成に最適
現実:
- 高価なプレミアムモデル(Claude、GPT-4)のみが構造化出力を確実にサポート - ほとんどの手頃なモデルは一貫したJSONフォーマットに苦労する
- フォーマットエラーは返答全体を壊す
- JSON命令はトークンを消費し、創造的な余地を減らす
- モデルは「制約されている」と感じる - 創造性がしばしば損なわれる
- コンテンツ制限がより厳しくなる:構造化出力モードはより積極的なコンテンツフィルタリングを引き起こすことが多く、成熟したまたは大胆なロールプレイシナリオが失敗しやすくなる
- コンテキスト汚染:会話履歴がJSON構造で埋まる
- エラー処理の複雑さ:ストリーミング中にパースが失敗したらどうなる?
ほとんどのサードパーティキャラクタープラットフォームがこのアプローチを使用しています。機能しますが、制約は本物です。
2. ツール呼び出し(エージェントモード)
最も「インテリジェント」なアプローチ。AIが次に話すべきキャラクターを決定し、それを示すツールを呼び出し、そのキャラクターの返答を生成します。シーンが完了するまで繰り返します。
AIが考える:「ワトソンはこの発見に反応すべきだ」
→ ツールを呼び出す:next_speaker("ワトソン")
→ ワトソンの返答を生成
→ AIが考える:「今度はシャーロックが割り込むだろう」
→ ツールを呼び出す:next_speaker("シャーロック")
→ シャーロックの返答を生成
...
魅力:
- 最も自然な会話フロー
- AIがシーンのペーシングを完全に創造的にコントロール
- 各キャラクターの返答が専用の生成品質を得る
- 自然にキャラクターごとの別々のメッセージを生成
現実:
- 複数のAPI呼び出し = 複数のクレジット請求
- レイテンシーが蓄積:Nキャラクター = N往復
- ハイエンドモデル(Claude、GPT-4)のみがツール呼び出しを確実に処理 - 安価なモデルはしばしば失敗するかツール呼び出しを幻覚する
- 呼び出し間の複雑な状態管理
- 無限ループや予期しない終了のリスク
- デバッグの悪夢:問題を再現するのが難しい
これは紙の上では美しく見える「夢のアーキテクチャ」ですが、スケールで運用上の頭痛を引き起こします。
3. フリーフォームテキスト出力(私たちの現在の選択)
最もシンプルなアプローチ。AIに自然にシーンを書くよう依頼し、流れるような散文で複数のキャラクターをどのように表現するかを決めさせます:
シャーロックは身を乗り出し、鋭い目で言った。「興味深い。泥の
パターンは、容疑者が東側から来たことを示している。」
ワトソンは眉をひそめた。「ホームズ、どういう意味ですか?ただの泥でしょう。」
「ただの泥?」シャーロックは微笑んだ。「親愛なるワトソン、
『ただの』何かなど存在しないのだよ。」
魅力:
- すべてのAIモデルで動作、特別な機能は不要
- 最大限の創造的自由 - AIが自然に書く
- クリーンなコンテキスト:会話履歴が小説のように読める
- 優れたストリーミング体験
- 単一呼び出し、予測可能なコスト
- 実装とメンテナンスが最もシンプル
現実:
- すべてのキャラクターが1つのメッセージブロックに
- 単一キャラクターの返答を簡単に再生成できない
- UI柔軟性が限られる
- チャットスタイルの吹き出しを期待するユーザーは混乱するかもしれない
私たちはこれを苦い経験から学んだ
ここに私たちが以前公開していなかったことがあります:グループチャットの最初のバージョンはツール呼び出しを使用していました。
私たちは「夢のアーキテクチャ」を信じていました。AIが次に誰が話すかを決定し、各キャラクターが専用の生成を得て、美しい別々のメッセージ吹き出し。エレガントでした。インテリジェントでした。本番環境では災害でもありました。
ユーザーは予測不可能なコストを経験しました - 同じ会話で予想の3倍かかることも。応答時間はAIが関与させることを決定したキャラクターの数によって大きく変動しました。安価なモデルはツール呼び出しを幻覚したり、ループに stuck したりしました。エラーログは予想もしなかったエッジケースで埋まりました。
何ヶ月ものパッチと回避策の後、フリーフォームテキスト出力でゼロから再構築するという困難な決断を下しました。後退のように感じました。しかし時には、「より知性的でない」解決策がより賢明な選択なのです。
なぜこの選択をしたのか
3つのアプローチすべてを徹底的にテストし - そのうちの1つを本番環境にリリースした後 - グループチャットにはフリーフォームテキスト出力を選びました。その理由:
機能より安定性 - 構造化出力は予測不可能に失敗します。グループチャットが会話の途中で壊れたとき、ユーザーは別々の吹き出しなど気にしません - ただ動いてほしいのです。フリーフォームテキストはフォーマット問題で失敗することは決してありません。
量より質 - 制約されたフォーマットは微妙にAIの創造性を減少させます。出力を比較したとき、フリーフォームは一貫してより生き生きとした、自然に感じるキャラクターのやり取りを生成しました。AIはJSON構文ではなく、ストーリーテリングに集中できました。
コストの予測可能性 - エージェントモードはキャラクターごと、返答ごとに課金されます。5キャラクターのシーンは予想の5〜10倍のコストがかかる可能性があります。ユーザーは予測可能な価格設定に値します。
ユニバーサル互換性 - 複数のAIモデルをサポートしています。すべてが構造化出力やツール呼び出しを同様にサポートしているわけではありません。フリーフォームテキストはどこでも動作し、ユーザーにより多くのモデル選択肢を与えます。
私たちが受け入れるトレードオフ
はい、「キャラクターごとに1つの吹き出し」の体験を犠牲にしています。しかし得られるもの:
- 岩のように堅固な信頼性
- より良い創造的品質
- 予測可能なコスト
- より広いモデルサポート
- よりクリーンな会話履歴
没入感が最も重要なグループロールプレイにおいて、このトレードオフは価値があると信じています。
今後の予定:ストーリーモード
ワクワクするお知らせです:構造化出力を使用する新しいストーリーモードを構築中です。
なぜ異なるアプローチなのか?ストーリーモードには異なる優先事項があります:
- 精密なシーンコントロールがフリーフォームの創造性より重要
- リッチなメタデータ(カメラアングル、音楽キュー、章区切り)が価値を加える
- フォーマットがより予測可能(明確な章/シーン構造)
- ユーザーはより「制作された」体験を期待
異なるユースケースには異なるアーキテクチャが必要です。私たちは単一のアプローチに固執しません - ユーザーに最も良いサービスを提供できるものを選びます。
正直な真実
マルチキャラクターAI会話に完璧な解決策はありません。すべてのアプローチは何か価値あるものを別のものと交換しています。
別々の吹き出しを表示する他のプラットフォーム?おそらく構造化出力を使用し、その制限を受け入れています。より「インテリジェント」なシーンコントロールを持つプラットフォーム?おそらくより高いコストとレイテンシーを伴うツール呼び出し。
私たちはユーザーが最も価値を置くものを優先する道を選びました:信頼性があり、創造的で、コスト効率の良いグループロールプレイ。
別々の吹き出し体験は素敵です。しかし他のすべてを犠牲にしてまでは。
私たちが探求していること
ハイブリッドアプローチを実験中です:
- 後処理パース:生成後にフリーフォームテキストをキャラクターセグメントに分割するための軽量モデルの使用
- オプションの構造化モード:パワーユーザーが精密なコントロールが必要なときに構造化出力を選択できるようにする
- スマートシーン検出:より良いUIプレゼンテーションのために自然なブレークポイントを自動的に識別
目標は「正しい」答えを見つけることではありません。うまくいっているものを維持しながら、体験を改善し続けることです。
グループチャットがどのように機能すべきかについてご意見はありますか?ぜひお聞かせください。