AI VTuber14 MIN READ

AI VTuber 2人の会話を自然にするには?単独発話・相づち・掛け合いを分けた理由

SHIRORASHI LAB NOTEDUO / CONVERSATION DESIGN現行実装・動作ログ確認 / 更新 2026.07.30
目次13項目

AI VTuberを2人に増やせば、1人より会話がにぎやかになり、自然な掛け合いも作りやすくなる。最初はそう考えていました。しかし、実際に動かしてみると、毎回必ず2人に喋らせるだけでは、自然な会話にはなりませんでした

簡単な質問にも2人が順番に答えると返事が長くなります。1人目だけで回答が完結しているのに、2人目が似た内容を言い直すこともあります。毎回同じ順番で喋れば、「会話」というより決められた台本の読み上げに近くなります。

そこで現在のプログラムでは、返答文を作る前に会話を次の3種類へ分けています。

  • AI1だけが答える単独発話
  • AI1の後にAI2が一言だけ反応する短い相づち
  • AI1の発言を受けてAI2が返す2人の掛け合い

この記事では、実際のAI VTuber開発で分かったことを基に、なぜこの3種類を分けたのか、どのような順序で会話を作っているのかを解説します。

記事内ではキャラクターを「AI1」「AI2」と表記します。掲載しているコードは考え方を説明するための簡略化した類似コードです。実際のプロンプト、選択確率、判定条件、補正値は掲載していません。

この記事で分かること

  • 2人のAIを毎回喋らせると不自然になりやすい理由
  • 単独発話・短い相づち・2人の掛け合いの違い
  • 会話を生成する前に発話パターンを決める理由
  • 2人分の文章を独立して同時生成しない理由
  • 現在の構成でできることと、まだできていないこと

先に結論:毎回2人で話す必要はない

現在は、すべての返答を同じ形式にせず、話題やコメントの内容に応じて3種類を使い分けています。

単独発話・短い相づち・2人の掛け合いという3種類の会話パターンをAI1とAI2の白い赤ちゃんアザラシで比較した図

会話の形発話するAI向いている場面狙い
単独発話AI1またはAI2だけ短い質問、直接指名されたコメント、簡潔に答えられる内容返答を短く保つ
短い相づち1人目が回答し、2人目が短く反応共感、驚き、軽いツッコミを添えたい場面2人らしさを出しつつ長くしない
2人の掛け合い1人目に続いて2人目も回答意見を広げたい話題、質問と回答が続く場面会話として話題を深める

ここで重要なのは、単独発話を「失敗して2人目が生成されなかった状態」として扱わないことです。1人で十分な場面では1人だけにすることも、会話演出の一つとして扱います。

毎回2人に喋らせて分かった問題

返答が必要以上に長くなる

視聴者が短い質問をした場合、1人目の回答だけで内容が完結することがあります。それでも2人目に発言を求めると、新しい情報を追加できず、同じ説明を言い換えやすくなります。

文章が増えれば、LLMの生成時間だけでなく、音声合成と再生にも時間がかかります。返答内容が正しくても、視聴者が回答を聞き終わるまでの時間が長くなると、配信上のテンポは悪くなります。

2人目が無理に会話へ参加する

毎回2人分の発言を要求すると、2人目は「そうだね」「分かる」のような反応を付けるか、1人目の内容を繰り返すしかなくなることがあります。

相づちは会話に必要ですが、毎回同じ長さで入ると、今度は相づち自体が機械的に聞こえます。内容を増やす必要がないなら、あえて一言で終える方が自然な場面があります。

会話のリズムが固定される

毎回「AI1が回答して、AI2が追加説明する」という順番では、視聴者が次の展開を予想できてしまいます。自然な会話には、1人だけが答える場面、もう1人が軽く反応する場面、2人で話を広げる場面があります。

そのため、自然さをプロンプトの言葉遣いだけで作るのではなく、誰が何人、どの順番で、どれくらい話すかまで制御する必要がありました。

文章を作る前に会話の形を決める

現在の設計で大切にしているのは、2人分の文章を作ってから不要な発言を削るのではなく、最初に会話の形を決め、必要なAIだけ文章を作ることです。

コメントと現在の話題から会話の形を選び、単独発話・短い相づち・2人の掛け合いへ分岐して必要なAIだけ文章を作る図

考え方だけを簡略化すると、次のような流れです。

python
def choose_conversation_shape(context):
    if one_answer_is_enough(context):
        return "solo"

    if a_short_reaction_is_enough(context):
        return "backchannel"

    return "duo"

これは実際のプログラムをそのまま抜き出したコードではありません。実際には、話題の種類、直前の会話、誰に向けられたコメントか、回答の重さなど、複数の情報を使っています。

ただし、基本方針は同じです。

  1. コメントと現在の話題を確認する
  2. 今回の会話の形を先に決める
  3. 先に話すAIを決める
  4. 必要な人数分だけ文章を作る
  5. 字幕、モーション、音声を発話順に処理する

この順番にすると、単独発話と決めた場面で、使わない2人目の文章を生成せずに済みます。不要なLLM呼び出しや音声合成を減らし、返答開始までの待ち時間も抑えやすくなります。

単独発話は「2人らしさ」を損なわない

2人組のAI VTuberだからといって、常に2人とも喋る必要はありません。現実の会話でも、質問された人だけが答え、隣にいる人は聞いているだけの場面があります。

単独発話が向いている例は次のとおりです。

  • どちらか一方へ直接質問された
  • 短い事実確認で回答が完結する
  • 直前にもう一方が十分話している
  • 視聴者コメントへ素早く反応したい
  • 2人目が加わっても同じ内容の繰り返しになる

単独発話を混ぜることで、次に2人の掛け合いが発生したときの変化も分かりやすくなります。毎回にぎやかにするより、静かな場面と掛け合いの場面に差を作る方が、2人の存在感を出しやすいと感じています。

短い相づちは独立した会話パターン

現在の「短い相づち」は、AI1の発話途中へAI2が割り込む仕組みではありません。AI1の音声が終わった後に、AI2が短く反応する後置相づちです。

例えば、次のような形です。

text
AI1: 今日は音声まわりの設定を確認していました。
AI2: そこ、意外と難しいよね。

2人目の役割は、長い追加説明ではありません。

  • 共感する
  • 軽く驚く
  • 短くツッコむ
  • 会話の温度を補う
  • 1人目の発言を受け止める

この役割を明確にしないと、相づちとして生成したはずの文章が長くなり、通常の掛け合いと区別できなくなります。そのため、文章の意味だけでなく、相づちとして聞ける長さかも重要になります。

2人の掛け合いは独立して同時生成しない

2人の掛け合いでは、AI1とAI2へ同じコメントを渡し、それぞれ独立して回答させる方法も考えられます。しかし、それではAI2がAI1の発言内容を知らないため、会話がつながらない可能性があります。

現在は、最初の発言を作った後、その内容を次のAIへ渡してから返答を作る考え方を採用しています。

AI1の発言を生成してAI2へ渡し、AI2の返答を生成した後、2人の音声を順番に再生する図

簡略化した類似コードでは、次のように表せます。

python
shape = choose_conversation_shape(context)
turns = []

first_turn = generate_turn("AI1", context)
turns.append(first_turn)

if shape == "backchannel":
    turns.append(generate_short_reaction("AI2", first_turn))

elif shape == "duo":
    turns.append(generate_reply("AI2", context, first_turn))

for turn in turns:
    play_in_order(turn)

この構成では、AI2はAI1の発言を受け取ってから返答します。そのため、次のような関係を作りやすくなります。

  • AI1の説明へAI2が疑問を返す
  • AI1の意見へAI2が別の視点を加える
  • AI1の質問へAI2が答える
  • AI1の発言をAI2が短くまとめる

生成回数は増えますが、「2人が同じコメントへ別々に回答している状態」よりも、掛け合いとしてのつながりを作りやすくなります。

文章生成と音声再生は別々に考える

2人分の文章を生成できても、2つの音声を同時に再生する必要があるとは限りません。現在は、次の音声を先に準備できる場合でも、実際の再生は1ターンずつ順番に行います。

text
AI1の字幕・モーション・音声
        ↓
      短い間
        ↓
AI2の字幕・モーション・音声

順番に再生する理由は、誰が話しているのかを分かりやすくし、字幕やモーションの競合を避けるためです。音声経路やVTube Studio接続の分離については、AI VTuber 2人を1台のPCで喋らせる設計記事で詳しく扱っています。

自然さはプロンプトだけでは決まらない

キャラクターの口調や性格はプロンプトで指定できます。しかし、次の部分はプロンプトだけでは解決しにくい問題です。

  • 毎回何人が喋るか
  • どちらが先に喋るか
  • 2人目がどの発言を受けて返すか
  • どこまで短い相づちとして扱うか
  • 音声の間をどれくらい空けるか
  • 返答開始までどれくらい待たせるか

文章自体が自然でも、毎回2人が同じ長さで喋れば機械的に聞こえます。反対に、文章が短くても、発話人数と順番が場面に合っていれば会話らしく聞こえる場合があります。

AI VTuberの自然さは、プロンプトだけでなく、会話を進行するスケジューラー、音声合成、字幕、モーション、発話間隔をまとめて調整する問題だと考えています。

現在の構成でまだできていないこと

この設計で、2人の会話が完全に人間と同じになったわけではありません。現在も次の課題があります。

本当の意味での割り込みではない

短い相づちは1人目の音声終了後に再生します。人間の会話のように、発話途中で「うん」「なるほど」と重ねる仕組みではありません。

本当の同時発話へ対応するには、音声再生だけでなく、字幕、口の動き、音量調整、ミュート、OBS側のチャンネル管理まで同時発話前提に変更する必要があります。

形の選択を間違えることがある

短く答えるべき場面で2人の掛け合いを選んだり、もう少し話を広げたい場面で単独発話を選んだりする可能性があります。判定を複雑にしすぎると、今度は調整や原因究明が難しくなります。

相づちが似ることがある

短い相づちは使える文字数が少ないため、表現の種類も限られます。候補を増やすだけでなく、直前に使った表現を避ける仕組みや、無理に相づちを入れない判断も必要です。

2人目の生成分だけ待ち時間が増える

2人の掛け合いは、AI1の発言を作ってからAI2の返答を作るため、単独発話より生成処理が増えます。自然なつながりと返答速度のどちらを優先するかは、今後も調整が必要です。

配信で確認したいポイント

実際に配信で確認するときは、文章の内容だけでなく次の項目を見ます。

確認項目見るポイント
単独発話の割合2人構成なのに静かすぎないか
掛け合いの割合毎回2人が喋って長くなっていないか
相づちの長さ追加説明にならず、一言で収まっているか
発話順同じAIばかり先に喋っていないか
内容の重複AI2がAI1の内容を言い換えていないか
返答開始時間コメントを選んでから長く待たせていないか
2人目までの間不自然に空きすぎたり、詰まりすぎたりしていないか

単純に「2人が会話できた」で終わらせず、配信全体のテンポとして確認することが重要です。

まとめ

2人のAI VTuberを自然に会話させるために必要だったのは、2人分の返答を毎回生成することではありませんでした。

現在は、会話を作る前に次の3種類から形を選びます。

  • 1人で十分なら単独発話
  • 2人らしさを軽く出すなら短い相づち
  • 話題を広げるなら2人の掛け合い

そして2人で話す場合も、それぞれを独立して生成せず、1人目の発言を2人目へ渡してから返答を作ります。

この方法にも、割り込み発話ができない、会話形状の選択を誤る、掛け合いでは待ち時間が増えるといった課題があります。それでも、毎回決まった2人分の台詞を作る構成より、場面ごとのリズムを変えやすくなりました。

AI VTuberの会話を自然にするには、口調を決めるプロンプトだけでなく、誰が、何人、どの順番で、どれくらい話すかを制御する設計も必要です。

この記事は、2026年7月30日時点の現行AI VTuber実装と動作ログを基にしています。説明用の図とコードは公開向けに簡略化しており、本番環境のプロンプト、確率、閾値、補正条件は含みません。

あわせて読みたい

# AI VTuber# 会話設計# LLM# 音声合成# Python
シロラシ
シロラシ — この記事を書いた人

開発・運用保守・インフラ・セキュリティに携わる新米エンジニア。趣味や勉強で試したことを、実体験とともに記録しています。

プロフィールを見る →
COMMENTS

コメント

コメント欄に近づくと読み込みます。